正在显示
7 个修改的文件
包含
111 行增加
和
15 行删除
@@ -17,7 +17,7 @@ type QuerySetDetailDto struct { | @@ -17,7 +17,7 @@ type QuerySetDetailDto struct { | ||
17 | TableId int `json:"tableId"` | 17 | TableId int `json:"tableId"` |
18 | } | 18 | } |
19 | 19 | ||
20 | -func (d *QuerySetDetailDto) Load(m *domain.QuerySet) *QuerySetDetailDto { | 20 | +func (d *QuerySetDetailDto) Load(m *domain.QuerySet, mapTables map[int]*domain.Table) *QuerySetDetailDto { |
21 | d.QuerySetId = m.QuerySetId | 21 | d.QuerySetId = m.QuerySetId |
22 | d.Type = m.Type | 22 | d.Type = m.Type |
23 | d.Flag = m.Flag | 23 | d.Flag = m.Flag |
@@ -26,7 +26,12 @@ func (d *QuerySetDetailDto) Load(m *domain.QuerySet) *QuerySetDetailDto { | @@ -26,7 +26,12 @@ func (d *QuerySetDetailDto) Load(m *domain.QuerySet) *QuerySetDetailDto { | ||
26 | if m.QuerySetInfo != nil { | 26 | if m.QuerySetInfo != nil { |
27 | d.TableId = m.QuerySetInfo.BindTableId | 27 | d.TableId = m.QuerySetInfo.BindTableId |
28 | } | 28 | } |
29 | - for i := range d.QueryComponents { | 29 | + for i, q := range d.QueryComponents { |
30 | + if q.MasterTable != nil && q.MasterTable.TableId != 0 { | ||
31 | + if t, ok := mapTables[q.MasterTable.TableId]; ok { | ||
32 | + d.QueryComponents[i].MasterTable = domain.NewQueryComponentTable(t) | ||
33 | + } | ||
34 | + } | ||
30 | if d.QueryComponents[i].Aggregation != nil { | 35 | if d.QueryComponents[i].Aggregation != nil { |
31 | d.QueryComponents[i].Aggregation.Aggregation.AllFields = d.QueryComponents[i].Aggregation.AggregationFields() | 36 | d.QueryComponents[i].Aggregation.Aggregation.AllFields = d.QueryComponents[i].Aggregation.AggregationFields() |
32 | } | 37 | } |
@@ -159,7 +159,17 @@ func (querySetService *QuerySetService) GetQuerySet(ctx *domain.Context, getQuer | @@ -159,7 +159,17 @@ func (querySetService *QuerySetService) GetQuerySet(ctx *domain.Context, getQuer | ||
159 | if err != nil { | 159 | if err != nil { |
160 | return nil, factory.FastError(err) | 160 | return nil, factory.FastError(err) |
161 | } | 161 | } |
162 | - return (&dto.QuerySetDetailDto{}).Load(querySet), nil | 162 | + |
163 | + tableRepository, _, _ := factory.FastPgTable(transactionContext, 0) | ||
164 | + dependencyTables := querySet.GetDependencyTables(querySet.QueryComponents) | ||
165 | + var tables domain.Tables | ||
166 | + if len(dependencyTables) > 0 { | ||
167 | + _, tables, err = tableRepository.Find(map[string]interface{}{"context": ctx, "tableIds": dependencyTables}) | ||
168 | + if err != nil { | ||
169 | + return nil, factory.FastError(err) | ||
170 | + } | ||
171 | + } | ||
172 | + return (&dto.QuerySetDetailDto{}).Load(querySet, tables.ToMap()), nil | ||
163 | } | 173 | } |
164 | 174 | ||
165 | // 返回查询集合服务列表 | 175 | // 返回查询集合服务列表 |
@@ -163,3 +163,13 @@ func TableTypesToStringList(list ...TableType) []string { | @@ -163,3 +163,13 @@ func TableTypesToStringList(list ...TableType) []string { | ||
163 | } | 163 | } |
164 | return result | 164 | return result |
165 | } | 165 | } |
166 | + | ||
167 | +type Tables []*Table | ||
168 | + | ||
169 | +func (tables Tables) ToMap() map[int]*Table { | ||
170 | + var result = make(map[int]*Table) | ||
171 | + for i := range tables { | ||
172 | + result[tables[i].TableId] = tables[i] | ||
173 | + } | ||
174 | + return result | ||
175 | +} |
@@ -139,9 +139,11 @@ func NewTable(tableType domain.TableType, fileName string, dataFields []*domain. | @@ -139,9 +139,11 @@ func NewTable(tableType domain.TableType, fileName string, dataFields []*domain. | ||
139 | if table.TableType == domain.CalculateTable.ToString() || table.TableType == domain.CalculateItem.ToString() { | 139 | if table.TableType == domain.CalculateTable.ToString() || table.TableType == domain.CalculateItem.ToString() { |
140 | table.PK = nil | 140 | table.PK = nil |
141 | } | 141 | } |
142 | + builder := NewDataFieldsBuilder() | ||
142 | table.DataFieldIndex = len(dataFields) | 143 | table.DataFieldIndex = len(dataFields) |
143 | - for i, field := range dataFields { | ||
144 | - table.DataFields = append(table.DataFields, DataField(field.Name, field.SQLType, domain.MainTableField, i+1)) | 144 | + for _, field := range dataFields { |
145 | + //table.DataFields = append(table.DataFields, DataField(field.Name, field.SQLType, domain.MainTableField, i+1)) | ||
146 | + table.DataFields = append(table.DataFields, builder.NewDataField(field.Name, field.SQLType, domain.MainTableField)) | ||
145 | } | 147 | } |
146 | table.ManualFields = make([]*domain.Field, 0) | 148 | table.ManualFields = make([]*domain.Field, 0) |
147 | table.CreatedAt = time.Now() | 149 | table.CreatedAt = time.Now() |
@@ -197,6 +199,44 @@ func DataField(name string, sqlType string, flag int, index int) *domain.Field { | @@ -197,6 +199,44 @@ func DataField(name string, sqlType string, flag int, index int) *domain.Field { | ||
197 | } | 199 | } |
198 | } | 200 | } |
199 | 201 | ||
202 | +type DataFieldsBuilder struct { | ||
203 | + mapPinFields map[string]int | ||
204 | +} | ||
205 | + | ||
206 | +func NewDataFieldsBuilder() *DataFieldsBuilder { | ||
207 | + builder := &DataFieldsBuilder{ | ||
208 | + mapPinFields: make(map[string]int), | ||
209 | + } | ||
210 | + return builder | ||
211 | +} | ||
212 | + | ||
213 | +func (builder *DataFieldsBuilder) NewDataField(name string, sqlType string, flag int) *domain.Field { | ||
214 | + var index = 0 | ||
215 | + pinName := pin(name) | ||
216 | + index = builder.AddPinItem(pinName) | ||
217 | + return &domain.Field{ | ||
218 | + Index: index, | ||
219 | + Name: name, | ||
220 | + SQLName: fmt.Sprintf("%v_%d", pinName, index), | ||
221 | + SQLType: sqlType, | ||
222 | + Description: "", | ||
223 | + Flag: flag, | ||
224 | + } | ||
225 | +} | ||
226 | + | ||
227 | +func (builder *DataFieldsBuilder) AddPinItem(pin string) int { | ||
228 | + var index = 1 | ||
229 | + for { | ||
230 | + key := fmt.Sprintf("%v_%d", pin, index) | ||
231 | + if _, ok := builder.mapPinFields[key]; !ok { | ||
232 | + builder.mapPinFields[key] = index | ||
233 | + break | ||
234 | + } | ||
235 | + index++ | ||
236 | + } | ||
237 | + return index | ||
238 | +} | ||
239 | + | ||
200 | func pin(name string) string { | 240 | func pin(name string) string { |
201 | pinyin := tool_funs.ToPinYin(name, "_") | 241 | pinyin := tool_funs.ToPinYin(name, "_") |
202 | newPinyin := bytes.NewBuffer(nil) | 242 | newPinyin := bytes.NewBuffer(nil) |
@@ -295,8 +295,10 @@ func (ptr *QuerySetService) PreviewPrepare(ctx *domain.Context, querySetId int, | @@ -295,8 +295,10 @@ func (ptr *QuerySetService) PreviewPrepare(ctx *domain.Context, querySetId int, | ||
295 | dependencyTables := querySet.GetDependencyTables(queryComponents) | 295 | dependencyTables := querySet.GetDependencyTables(queryComponents) |
296 | if querySet.Type == domain.CalculateTable.ToString() { | 296 | if querySet.Type == domain.CalculateTable.ToString() { |
297 | aggregationFields := append(queryComponents[0].Aggregation.RowFields, queryComponents[0].Aggregation.ValueFields...) | 297 | aggregationFields := append(queryComponents[0].Aggregation.RowFields, queryComponents[0].Aggregation.ValueFields...) |
298 | - for index, f := range aggregationFields { | ||
299 | - fields = append(fields, DataField(f.DisplayName, f.Field.SQLType, domain.MainTableField, index)) | 298 | + builder := NewDataFieldsBuilder() |
299 | + for _, f := range aggregationFields { | ||
300 | + //fields = append(fields, DataField(f.DisplayName, f.Field.SQLType, domain.MainTableField, index)) | ||
301 | + fields = append(fields, builder.NewDataField(f.DisplayName, f.Field.SQLType, domain.MainTableField)) | ||
300 | } | 302 | } |
301 | } else { | 303 | } else { |
302 | masterTable := queryComponents[0].MasterTable | 304 | masterTable := queryComponents[0].MasterTable |
@@ -723,7 +725,9 @@ func (ptr *QuerySetService) CreateOrUpdateCalculateItemTable(ctx *domain.Context | @@ -723,7 +725,9 @@ func (ptr *QuerySetService) CreateOrUpdateCalculateItemTable(ctx *domain.Context | ||
723 | //if queryComponent.Formula.MixTableModel() { | 725 | //if queryComponent.Formula.MixTableModel() { |
724 | // queryComponent.Formula.Complete() | 726 | // queryComponent.Formula.Complete() |
725 | //} | 727 | //} |
726 | - field := DataField(querySet.Name, domain.String.ToString(), domain.MainTableField, 1) | 728 | + builder := NewDataFieldsBuilder() |
729 | + //field := DataField(querySet.Name, domain.String.ToString(), domain.MainTableField, 1) | ||
730 | + field := builder.NewDataField(querySet.Name, domain.String.ToString(), domain.MainTableField) | ||
727 | if len(queryComponent.Formula.TableFields) > 0 { | 731 | if len(queryComponent.Formula.TableFields) > 0 { |
728 | field.SQLType = queryComponent.Formula.TableFields[0].FieldSQLType | 732 | field.SQLType = queryComponent.Formula.TableFields[0].FieldSQLType |
729 | } | 733 | } |
@@ -768,13 +772,15 @@ func (ptr *QuerySetService) CreateOrUpdateCalculateTable(ctx *domain.Context, qu | @@ -768,13 +772,15 @@ func (ptr *QuerySetService) CreateOrUpdateCalculateTable(ctx *domain.Context, qu | ||
768 | return nil, fmt.Errorf("行、值不能同时为空") | 772 | return nil, fmt.Errorf("行、值不能同时为空") |
769 | } | 773 | } |
770 | selectedFields := make([]string, 0) | 774 | selectedFields := make([]string, 0) |
771 | - for index, f := range aggregationFields { | 775 | + builder := NewDataFieldsBuilder() |
776 | + for _, f := range aggregationFields { | ||
772 | // 数值类型转浮点类型, 兼容类似表达式 1 * 1.1 | 777 | // 数值类型转浮点类型, 兼容类似表达式 1 * 1.1 |
773 | sqlType := f.Field.SQLType | 778 | sqlType := f.Field.SQLType |
774 | if f.Field.SQLType == domain.Int.ToString() || f.Field.SQLType == domain.BigInt.ToString() { | 779 | if f.Field.SQLType == domain.Int.ToString() || f.Field.SQLType == domain.BigInt.ToString() { |
775 | sqlType = domain.Float.ToString() | 780 | sqlType = domain.Float.ToString() |
776 | } | 781 | } |
777 | - fields = append(fields, DataField(f.DisplayName, sqlType, domain.MainTableField, index)) | 782 | + //fields = append(fields, DataField(f.DisplayName, sqlType, domain.MainTableField, index)) |
783 | + fields = append(fields, builder.NewDataField(f.DisplayName, sqlType, domain.MainTableField)) | ||
778 | selectedFields = append(selectedFields, f.Field.Name) | 784 | selectedFields = append(selectedFields, f.Field.Name) |
779 | } | 785 | } |
780 | queryComponent.Aggregation.SelectFields = selectedFields | 786 | queryComponent.Aggregation.SelectFields = selectedFields |
@@ -37,7 +37,7 @@ func (ptr *AddTableStructService) AddTableStruct(ctx *domain.Context, parentTabl | @@ -37,7 +37,7 @@ func (ptr *AddTableStructService) AddTableStruct(ctx *domain.Context, parentTabl | ||
37 | return nil, fmt.Errorf("表名称重复") | 37 | return nil, fmt.Errorf("表名称重复") |
38 | } | 38 | } |
39 | 39 | ||
40 | - fields = MappingFields(mainTable, fields) | 40 | + fields = MappingFieldsV2(mainTable, fields) |
41 | dataFields := (domain.Fields)(fields).Select(map[string]interface{}{"flag": domain.MainTableField}) | 41 | dataFields := (domain.Fields)(fields).Select(map[string]interface{}{"flag": domain.MainTableField}) |
42 | manualFields := (domain.Fields)(fields).Select(map[string]interface{}{"flag": domain.ManualField}) | 42 | manualFields := (domain.Fields)(fields).Select(map[string]interface{}{"flag": domain.ManualField}) |
43 | table := NewTable(domain.SubTable, name, fields, mainTable.RowCount).WithContext(ctx).WithPrefix(string(domain.SubTable)) | 43 | table := NewTable(domain.SubTable, name, fields, mainTable.RowCount).WithContext(ctx).WithPrefix(string(domain.SubTable)) |
@@ -36,7 +36,7 @@ func (ptr *UpdateTableStructService) UpdateTableStruct(ctx *domain.Context, tabl | @@ -36,7 +36,7 @@ func (ptr *UpdateTableStructService) UpdateTableStruct(ctx *domain.Context, tabl | ||
36 | return nil, fmt.Errorf("主表不存在") | 36 | return nil, fmt.Errorf("主表不存在") |
37 | } | 37 | } |
38 | 38 | ||
39 | - fields = MappingFields(mainTable, fields) | 39 | + fields = MappingFieldsV2(mainTable, fields) |
40 | reserves, deletes, adds := domain.FieldsChange(table.Fields(false), fields) | 40 | reserves, deletes, adds := domain.FieldsChange(table.Fields(false), fields) |
41 | dataFields := (domain.Fields)(fields).Select(map[string]interface{}{"flag": domain.MainTableField}) | 41 | dataFields := (domain.Fields)(fields).Select(map[string]interface{}{"flag": domain.MainTableField}) |
42 | manualFields := (domain.Fields)(fields).Select(map[string]interface{}{"flag": domain.ManualField}) | 42 | manualFields := (domain.Fields)(fields).Select(map[string]interface{}{"flag": domain.ManualField}) |
@@ -81,9 +81,33 @@ func (ptr *UpdateTableStructService) UpdateTableStruct(ctx *domain.Context, tabl | @@ -81,9 +81,33 @@ func (ptr *UpdateTableStructService) UpdateTableStruct(ctx *domain.Context, tabl | ||
81 | return struct{}{}, nil | 81 | return struct{}{}, nil |
82 | } | 82 | } |
83 | 83 | ||
84 | -func MappingFields(mainTable *domain.Table, fields []*domain.Field) []*domain.Field { | 84 | +//func MappingFields(mainTable *domain.Table, fields []*domain.Field) []*domain.Field { |
85 | +// tableFields := mainTable.Fields(false) | ||
86 | +// tableFieldsMap := (domain.Fields)(tableFields).ToMap() | ||
87 | +// for i := range fields { | ||
88 | +// f := fields[i] | ||
89 | +// if v, ok := tableFieldsMap[f.Name]; ok { | ||
90 | +// fields[i].Name = v.Name | ||
91 | +// fields[i].SQLName = v.SQLName | ||
92 | +// fields[i].Index = v.Index | ||
93 | +// fields[i].SQLType = v.SQLType | ||
94 | +// fields[i].Description = f.Description | ||
95 | +// fields[i].Flag = v.Flag | ||
96 | +// } else { | ||
97 | +// if f.Flag == domain.ManualField && f.Index == 0 { | ||
98 | +// mainTable.DataFieldIndex += 1 | ||
99 | +// fields[i] = DataField(f.Name, f.SQLType, domain.ManualField, mainTable.DataFieldIndex) | ||
100 | +// fields[i].Description = f.Description | ||
101 | +// } | ||
102 | +// } | ||
103 | +// } | ||
104 | +// return fields | ||
105 | +//} | ||
106 | + | ||
107 | +func MappingFieldsV2(mainTable *domain.Table, fields []*domain.Field) []*domain.Field { | ||
85 | tableFields := mainTable.Fields(false) | 108 | tableFields := mainTable.Fields(false) |
86 | tableFieldsMap := (domain.Fields)(tableFields).ToMap() | 109 | tableFieldsMap := (domain.Fields)(tableFields).ToMap() |
110 | + builder := NewDataFieldsBuilder() | ||
87 | for i := range fields { | 111 | for i := range fields { |
88 | f := fields[i] | 112 | f := fields[i] |
89 | if v, ok := tableFieldsMap[f.Name]; ok { | 113 | if v, ok := tableFieldsMap[f.Name]; ok { |
@@ -93,10 +117,11 @@ func MappingFields(mainTable *domain.Table, fields []*domain.Field) []*domain.Fi | @@ -93,10 +117,11 @@ func MappingFields(mainTable *domain.Table, fields []*domain.Field) []*domain.Fi | ||
93 | fields[i].SQLType = v.SQLType | 117 | fields[i].SQLType = v.SQLType |
94 | fields[i].Description = f.Description | 118 | fields[i].Description = f.Description |
95 | fields[i].Flag = v.Flag | 119 | fields[i].Flag = v.Flag |
120 | + builder.NewDataField(v.Name, v.SQLType, v.Flag) | ||
96 | } else { | 121 | } else { |
97 | if f.Flag == domain.ManualField && f.Index == 0 { | 122 | if f.Flag == domain.ManualField && f.Index == 0 { |
98 | - mainTable.DataFieldIndex += 1 | ||
99 | - fields[i] = DataField(f.Name, f.SQLType, domain.ManualField, mainTable.DataFieldIndex) | 123 | + //mainTable.DataFieldIndex += 1 |
124 | + fields[i] = builder.NewDataField(f.Name, f.SQLType, domain.ManualField) | ||
100 | fields[i].Description = f.Description | 125 | fields[i].Description = f.Description |
101 | } | 126 | } |
102 | } | 127 | } |
-
请 注册 或 登录 后发表评论