作者 yangfu

Merge branch 'test'

@@ -25,9 +25,11 @@ type SearchTableQuery struct { @@ -25,9 +25,11 @@ type SearchTableQuery struct {
25 ReturnDetailStructInfo bool `cname:"返回具体的结构信息 默认不返回" json:"returnDetailStructInfo"` 25 ReturnDetailStructInfo bool `cname:"返回具体的结构信息 默认不返回" json:"returnDetailStructInfo"`
26 // 排除分组项,只返回一级列表;默认 false 不排除,连分组也返回 26 // 排除分组项,只返回一级列表;默认 false 不排除,连分组也返回
27 ReturnGroupItem bool `cname:"排除分组" json:"returnGroupItem"` 27 ReturnGroupItem bool `cname:"排除分组" json:"returnGroupItem"`
28 - Context *domain.Context  
29 - FilterRules []*FilterRule `json:"filterRules"`  
30 - TableId int `cname:"ID" json:"tableId"` 28 + // 排除指定表
  29 + ExcludeTables []int `cname:"排除指定表" json:"excludeTables"`
  30 + Context *domain.Context
  31 + FilterRules []*FilterRule `json:"filterRules"`
  32 + TableId int `cname:"ID" json:"tableId"`
31 } 33 }
32 type FilterRule struct { 34 type FilterRule struct {
33 // *:匹配所有 35 // *:匹配所有
@@ -234,6 +234,18 @@ func (tableService *TableService) Search(searchQuery *query.SearchTableQuery) (i @@ -234,6 +234,18 @@ func (tableService *TableService) Search(searchQuery *query.SearchTableQuery) (i
234 for _, table := range tables { 234 for _, table := range tables {
235 var item = &dto.TableDto{} 235 var item = &dto.TableDto{}
236 item.Load(table) 236 item.Load(table)
  237 + if len(searchQuery.ExcludeTables) > 0 {
  238 + exclude := false
  239 + for _, t := range searchQuery.ExcludeTables {
  240 + if t == item.TableId {
  241 + exclude = true
  242 + break
  243 + }
  244 + }
  245 + if exclude {
  246 + continue
  247 + }
  248 + }
237 if searchQuery.ReturnDetailStructInfo { 249 if searchQuery.ReturnDetailStructInfo {
238 item.SetDetailStructInfo(table) 250 item.SetDetailStructInfo(table)
239 } 251 }
@@ -76,6 +76,9 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab @@ -76,6 +76,9 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab
76 querySetMapGroup := make(map[int]bool) 76 querySetMapGroup := make(map[int]bool)
77 querySetGroups := make([]*domain.QuerySet, 0) 77 querySetGroups := make([]*domain.QuerySet, 0)
78 for _, t := range result { 78 for _, t := range result {
  79 + if filterTableByFilterRule(t, searchQuery) {
  80 + continue
  81 + }
79 if !domain.TableType(t.TableType).TableHasGroup() { 82 if !domain.TableType(t.TableType).TableHasGroup() {
80 response = append(response, t) 83 response = append(response, t)
81 continue 84 continue
@@ -87,9 +90,7 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab @@ -87,9 +90,7 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab
87 } 90 }
88 t.Update(v) 91 t.Update(v)
89 parentGroupId := v.ParentId 92 parentGroupId := v.ParentId
90 - if filterTableByFilterRule(t, searchQuery.FilterRules) {  
91 - continue  
92 - } 93 +
93 response = append(response, t) 94 response = append(response, t)
94 for { 95 for {
95 if parentGroupId == 0 { 96 if parentGroupId == 0 {
@@ -129,7 +130,15 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab @@ -129,7 +130,15 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab
129 } 130 }
130 131
131 // true:代表需要过滤 false:不需要过滤 132 // true:代表需要过滤 false:不需要过滤
132 -func filterTableByFilterRule(item *dto.TableObjectDto, filterRules []*query.FilterRule) bool { 133 +func filterTableByFilterRule(item *dto.TableObjectDto, searchQuery *query.SearchTableQuery) bool {
  134 + filterRules := searchQuery.FilterRules
  135 + if len(searchQuery.ExcludeTables) > 0 {
  136 + for _, t := range searchQuery.ExcludeTables {
  137 + if t == item.TableId {
  138 + return true
  139 + }
  140 + }
  141 + }
133 for _, rule := range filterRules { 142 for _, rule := range filterRules {
134 if rule.TableType == item.TableType && rule.Status > 0 && rule.Status != item.Status { 143 if rule.TableType == item.TableType && rule.Status > 0 && rule.Status != item.Status {
135 return true 144 return true
@@ -217,8 +217,9 @@ type ( @@ -217,8 +217,9 @@ type (
217 ) 217 )
218 218
219 type ColumnSchema struct { 219 type ColumnSchema struct {
220 - ColumnName string `json:"columnName"`  
221 - ColumnType string `json:"columnType"` 220 + ColumnName string `json:"columnName"`
  221 + ColumnType string `json:"columnType"`
  222 + ColumnSqlFriendlyName string `json:"columnSqlFriendlyName"`
222 } 223 }
223 224
224 func ToFields(fields []*Field) []*Field { 225 func ToFields(fields []*Field) []*Field {
@@ -6,8 +6,9 @@ func DomainFieldsToColumnSchemas(fields []*domain.Field) []domain.ColumnSchema { @@ -6,8 +6,9 @@ func DomainFieldsToColumnSchemas(fields []*domain.Field) []domain.ColumnSchema {
6 result := make([]domain.ColumnSchema, 0) 6 result := make([]domain.ColumnSchema, 0)
7 for _, f := range fields { 7 for _, f := range fields {
8 res := domain.ColumnSchema{ 8 res := domain.ColumnSchema{
9 - ColumnName: f.Name,  
10 - ColumnType: f.SQLType, 9 + ColumnName: f.Name,
  10 + ColumnType: f.SQLType,
  11 + ColumnSqlFriendlyName: f.SQLName,
11 } 12 }
12 if convertFiledSQLType(f.SQLType) { 13 if convertFiledSQLType(f.SQLType) {
13 res.ColumnType = domain.DECIMAL279.ToString() 14 res.ColumnType = domain.DECIMAL279.ToString()
@@ -75,8 +76,9 @@ func FieldsToColumnSchemas(fields []*domain.Field) []domain.ColumnSchema { @@ -75,8 +76,9 @@ func FieldsToColumnSchemas(fields []*domain.Field) []domain.ColumnSchema {
75 76
76 for _, f := range fields { 77 for _, f := range fields {
77 result = append(result, domain.ColumnSchema{ 78 result = append(result, domain.ColumnSchema{
78 - ColumnName: f.Name,  
79 - ColumnType: f.SQLType, 79 + ColumnName: f.Name,
  80 + ColumnType: f.SQLType,
  81 + ColumnSqlFriendlyName: f.SQLName,
80 }) 82 })
81 } 83 }
82 return result 84 return result
@@ -54,11 +54,14 @@ func (ptr *TableEditDataService) RowEdit(ctx *domain.Context, request domain.Edi @@ -54,11 +54,14 @@ func (ptr *TableEditDataService) RowEdit(ctx *domain.Context, request domain.Edi
54 }); err != nil { 54 }); err != nil {
55 return nil, err 55 return nil, err
56 } 56 }
57 - for _, l := range request.RemoveList {  
58 - if e := ptr.remove(ctx, table, l, request.Where); e != nil {  
59 - log.Logger.Error(e.Error())  
60 - } 57 + if err = starrocks.BatchDelete(starrocks.DB, table.SQLName, request.RemoveList); err != nil {
  58 + return nil, err
61 } 59 }
  60 + //for _, l := range request.RemoveList {
  61 + // if e := ptr.remove(ctx, table, l, request.Where); e != nil {
  62 + // log.Logger.Error(e.Error())
  63 + // }
  64 + //}
62 } 65 }
63 for _, l := range request.UpdateList { 66 for _, l := range request.UpdateList {
64 if e := ptr.update(ctx, table, l, request.Where); e != nil { 67 if e := ptr.update(ctx, table, l, request.Where); e != nil {
@@ -119,7 +119,7 @@ func MappingFieldsV2(mainTable *domain.Table, fields []*domain.Field) []*domain. @@ -119,7 +119,7 @@ func MappingFieldsV2(mainTable *domain.Table, fields []*domain.Field) []*domain.
119 fields[i].Flag = v.Flag 119 fields[i].Flag = v.Flag
120 builder.NewDataField(v.Name, v.SQLType, v.Flag) 120 builder.NewDataField(v.Name, v.SQLType, v.Flag)
121 } else { 121 } else {
122 - if f.Flag == domain.ManualField && f.Index == 0 { 122 + if f.Flag == domain.ManualField {
123 //mainTable.DataFieldIndex += 1 123 //mainTable.DataFieldIndex += 1
124 fields[i] = builder.NewDataField(f.Name, f.SQLType, domain.ManualField) 124 fields[i] = builder.NewDataField(f.Name, f.SQLType, domain.ManualField)
125 fields[i].Description = f.Description 125 fields[i].Description = f.Description
@@ -73,6 +73,28 @@ func Delete(db *gorm.DB, tableName string, fields []*domain.FieldValue) error { @@ -73,6 +73,28 @@ func Delete(db *gorm.DB, tableName string, fields []*domain.FieldValue) error {
73 return tx.Error 73 return tx.Error
74 } 74 }
75 75
  76 +func BatchDelete(db *gorm.DB, tableName string, fields []*domain.FieldValues) error {
  77 + var pk *domain.FieldValue
  78 + var values = make([]string, 0)
  79 + for _, row := range fields {
  80 + for _, f := range row.FieldValues {
  81 + if f.Field.Flag == domain.PKField && f.Value != "" {
  82 + pk = f
  83 + values = append(values, f.Value)
  84 + }
  85 + }
  86 + }
  87 + if len(values) == 0 {
  88 + return fmt.Errorf("删除行为空")
  89 + }
  90 + sql := db.ToSQL(func(tx *gorm.DB) *gorm.DB {
  91 + c := Condition{}
  92 + return tx.Table(tableName).Where(fmt.Sprintf("%s in %s", pk.Field.SQLName, c.InArgs(values))).Delete("")
  93 + })
  94 + tx := db.Exec(sql)
  95 + return tx.Error
  96 +}
  97 +
76 //DROP VIEW IF EXISTS 98 //DROP VIEW IF EXISTS
77 99
78 func DropView(db *gorm.DB, tableName string) error { 100 func DropView(db *gorm.DB, tableName string) error {
@@ -146,6 +146,8 @@ func (c Condition) SetWhere(params QueryOptions, q *gorm.DB) { @@ -146,6 +146,8 @@ func (c Condition) SetWhere(params QueryOptions, q *gorm.DB) {
146 } else { 146 } else {
147 q.Where(fmt.Sprintf("%v in %v", c.CastType(c.Field.SQLName, domain.DECIMALV2.ToString()), c.InArgs(c.In))) 147 q.Where(fmt.Sprintf("%v in %v", c.CastType(c.Field.SQLName, domain.DECIMALV2.ToString()), c.InArgs(c.In)))
148 } 148 }
  149 + } else if c.Field.SQLType == domain.Date.ToString() {
  150 + q.Where(fmt.Sprintf("%v in %v", c.CastType(c.FormatIfNull(params, c.Field), "datetime"), c.InArgs(c.In)))
149 } else { 151 } else {
150 q.Where(fmt.Sprintf("%v in %v", c.CastType(c.FormatIfNull(params, c.Field), "string"), c.InArgs(c.In))) 152 q.Where(fmt.Sprintf("%v in %v", c.CastType(c.FormatIfNull(params, c.Field), "string"), c.InArgs(c.In)))
151 } 153 }