正在显示
14 个修改的文件
包含
116 行增加
和
21 行删除
@@ -26,6 +26,7 @@ require ( | @@ -26,6 +26,7 @@ require ( | ||
26 | github.com/sergi/go-diff v1.2.0 // indirect | 26 | github.com/sergi/go-diff v1.2.0 // indirect |
27 | github.com/shopspring/decimal v1.3.1 | 27 | github.com/shopspring/decimal v1.3.1 |
28 | github.com/smartystreets/goconvey v1.7.2 // indirect | 28 | github.com/smartystreets/goconvey v1.7.2 // indirect |
29 | + github.com/sony/sonyflake v1.1.0 // indirect | ||
29 | github.com/stretchr/testify v1.7.1 | 30 | github.com/stretchr/testify v1.7.1 |
30 | github.com/valyala/fasthttp v1.38.0 // indirect | 31 | github.com/valyala/fasthttp v1.38.0 // indirect |
31 | github.com/xeipuuv/gojsonschema v1.2.0 // indirect | 32 | github.com/xeipuuv/gojsonschema v1.2.0 // indirect |
@@ -71,7 +71,10 @@ func (tableService *TableService) FieldOptionalValues(ctx *domain.Context, cmd * | @@ -71,7 +71,10 @@ func (tableService *TableService) FieldOptionalValues(ctx *domain.Context, cmd * | ||
71 | if table.TableType == domain.SubTable.ToString() && field.Flag == domain.ManualField { | 71 | if table.TableType == domain.SubTable.ToString() && field.Flag == domain.ManualField { |
72 | return empty, nil | 72 | return empty, nil |
73 | } | 73 | } |
74 | - | 74 | + match := cmd.Match |
75 | + if !domain.SQLType(field.SQLType).IsString() { | ||
76 | + match = "" | ||
77 | + } | ||
75 | options := &starrocks.QueryOptions{ | 78 | options := &starrocks.QueryOptions{ |
76 | Table: table, | 79 | Table: table, |
77 | TableName: table.SQLName, | 80 | TableName: table.SQLName, |
@@ -80,7 +83,7 @@ func (tableService *TableService) FieldOptionalValues(ctx *domain.Context, cmd * | @@ -80,7 +83,7 @@ func (tableService *TableService) FieldOptionalValues(ctx *domain.Context, cmd * | ||
80 | { | 83 | { |
81 | Condition: domain.Condition{ | 84 | Condition: domain.Condition{ |
82 | Field: field, | 85 | Field: field, |
83 | - Like: cmd.Match, | 86 | + Like: match, |
84 | Order: "ASC", | 87 | Order: "ASC", |
85 | }, | 88 | }, |
86 | Distinct: true, | 89 | Distinct: true, |
@@ -107,8 +110,9 @@ func (tableService *TableService) FieldOptionalValues(ctx *domain.Context, cmd * | @@ -107,8 +110,9 @@ func (tableService *TableService) FieldOptionalValues(ctx *domain.Context, cmd * | ||
107 | if err := transactionContext.CommitTransaction(); err != nil { | 110 | if err := transactionContext.CommitTransaction(); err != nil { |
108 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 111 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
109 | } | 112 | } |
113 | + values := dataTable.OptionalValue(cmd.Match) | ||
110 | return map[string]interface{}{ | 114 | return map[string]interface{}{ |
111 | - "values": dataTable.OptionalValue(), | ||
112 | - "total": dataTable.Total, | 115 | + "values": values, |
116 | + "total": len(values), | ||
113 | }, nil | 117 | }, nil |
114 | } | 118 | } |
@@ -68,6 +68,10 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | @@ -68,6 +68,10 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | ||
68 | if err != nil { | 68 | if err != nil { |
69 | return nil, factory.FastError(err) | 69 | return nil, factory.FastError(err) |
70 | } | 70 | } |
71 | + // 计算项只返回第一个值 | ||
72 | + // if table.TableType==domain.CalculateItem.ToString() && dataTable!=nil && len(dataTable.Data)>0{ | ||
73 | + // dataTable.Data = dataTable.Data[:1] | ||
74 | + // } | ||
71 | response.Load(table, dataTable, domain.ObjectMetaTable) | 75 | response.Load(table, dataTable, domain.ObjectMetaTable) |
72 | } | 76 | } |
73 | } | 77 | } |
1 | package domain | 1 | package domain |
2 | 2 | ||
3 | +import "strings" | ||
4 | + | ||
3 | type DataTable struct { | 5 | type DataTable struct { |
4 | Fields []*Field `json:"fields"` | 6 | Fields []*Field `json:"fields"` |
5 | Data [][]string `json:"data"` | 7 | Data [][]string `json:"data"` |
@@ -51,19 +53,20 @@ type Condition struct { | @@ -51,19 +53,20 @@ type Condition struct { | ||
51 | Order string `json:"order"` | 53 | Order string `json:"order"` |
52 | } | 54 | } |
53 | 55 | ||
54 | -func (t *DataTable) OptionalValue() []string { | ||
55 | - //set := make(map[string]string) | 56 | +func (t *DataTable) OptionalValue(args ...string) []string { |
56 | var values = make([]string, 0) | 57 | var values = make([]string, 0) |
58 | + match:="" | ||
59 | + if len(args)>0{ | ||
60 | + match = args[0] | ||
61 | + } | ||
57 | if len(t.Data) > 0 && len(t.Data[0]) == 1 { | 62 | if len(t.Data) > 0 && len(t.Data[0]) == 1 { |
58 | for i := range t.Data { | 63 | for i := range t.Data { |
59 | if len(t.Data[i]) == 0 { | 64 | if len(t.Data[i]) == 0 { |
60 | continue | 65 | continue |
61 | } | 66 | } |
62 | - //if _, ok := set[t.Data[i][0]]; ok { | ||
63 | - // continue | ||
64 | - //} else { | ||
65 | - // set[t.Data[i][0]] = "" | ||
66 | - //} | 67 | + if len(match)>0 && !strings.Contains(t.Data[i][0],match){ |
68 | + continue | ||
69 | + } | ||
67 | values = append(values, t.Data[i][0]) | 70 | values = append(values, t.Data[i][0]) |
68 | } | 71 | } |
69 | } | 72 | } |
@@ -67,12 +67,25 @@ func (table *Table) TableIdString() string { | @@ -67,12 +67,25 @@ func (table *Table) TableIdString() string { | ||
67 | 67 | ||
68 | func (table *Table) WithContext(ctx *Context) *Table { | 68 | func (table *Table) WithContext(ctx *Context) *Table { |
69 | rand.Seed(time.Now().Unix()) | 69 | rand.Seed(time.Now().Unix()) |
70 | - table.SQLName = fmt.Sprintf("%v_t%v_c%v", table.SQLName, rand.Intn(1000000), ctx.CompanyId) | 70 | + table.SQLName = fmt.Sprintf("%v_t%v_c%v", limitStringLen(table.SQLName,40), rand.Intn(1000000), limitStringLen(fmt.Sprintf("%d",ctx.CompanyId),8)) |
71 | table.Context = ctx | 71 | table.Context = ctx |
72 | return table | 72 | return table |
73 | } | 73 | } |
74 | 74 | ||
75 | +func limitStringLen(s string,l int)string{ | ||
76 | + result:=s | ||
77 | + subLength :=l /2 | ||
78 | + if len(result)>l{ | ||
79 | + result = result[:subLength] + result[len(result)-subLength:] | ||
80 | + } | ||
81 | + return result | ||
82 | +} | ||
83 | + | ||
75 | func (table *Table) WithPrefix(prefix string) *Table { | 84 | func (table *Table) WithPrefix(prefix string) *Table { |
85 | + if strings.HasPrefix(table.SQLName,"_"){ | ||
86 | + table.SQLName = fmt.Sprintf("%v%v", strings.ToLower(prefix), table.SQLName) | ||
87 | + return table | ||
88 | + } | ||
76 | table.SQLName = fmt.Sprintf("%v_%v", strings.ToLower(prefix), table.SQLName) | 89 | table.SQLName = fmt.Sprintf("%v_%v", strings.ToLower(prefix), table.SQLName) |
77 | return table | 90 | return table |
78 | } | 91 | } |
@@ -132,3 +145,11 @@ func (t *Table) AssertTableType(types ...TableType) bool { | @@ -132,3 +145,11 @@ func (t *Table) AssertTableType(types ...TableType) bool { | ||
132 | } | 145 | } |
133 | return false | 146 | return false |
134 | } | 147 | } |
148 | + | ||
149 | +func TableTypesToStringList(list ...TableType)[]string{ | ||
150 | + var result = make([]string,0) | ||
151 | + for _,item:=range list{ | ||
152 | + result = append(result, item.ToString()) | ||
153 | + } | ||
154 | + return result | ||
155 | +} |
pkg/domain/table_test.go
0 → 100644
1 | +package domain | ||
2 | + | ||
3 | +import ( | ||
4 | + "testing" | ||
5 | + | ||
6 | + "github.com/stretchr/testify/assert" | ||
7 | +) | ||
8 | + | ||
9 | +func TestLimitStringLen(t *testing.T){ | ||
10 | + inputs:=[]struct{ | ||
11 | + input string | ||
12 | + length int | ||
13 | + want string | ||
14 | + }{ | ||
15 | + { | ||
16 | + input: "123456789", | ||
17 | + length: 6, | ||
18 | + want: "123789", | ||
19 | + }, | ||
20 | + { | ||
21 | + input: "123456789", | ||
22 | + length: 7, | ||
23 | + want: "123789", | ||
24 | + }, | ||
25 | + { | ||
26 | + input: "123456789", | ||
27 | + length: 10, | ||
28 | + want: "123456789", | ||
29 | + }, | ||
30 | + { | ||
31 | + input: "pai_xu_ce_shi_zhu_biao_fu_zhi", | ||
32 | + length: 20, | ||
33 | + want: "pai_xu_ce_iao_fu_zhi", | ||
34 | + }, | ||
35 | + } | ||
36 | + for _,input:=range inputs{ | ||
37 | + got:=limitStringLen(input.input,input.length) | ||
38 | + assert.Equal(t,input.want,got) | ||
39 | + } | ||
40 | +} |
@@ -159,7 +159,7 @@ func NewCopyTable(tableType domain.TableType, fileName string, dataFields []*dom | @@ -159,7 +159,7 @@ func NewCopyTable(tableType domain.TableType, fileName string, dataFields []*dom | ||
159 | table.Name = fileName | 159 | table.Name = fileName |
160 | table.SQLName = pin(fileName) //SQLTableName() | 160 | table.SQLName = pin(fileName) //SQLTableName() |
161 | table.PK = PK() | 161 | table.PK = PK() |
162 | - if table.TableType == domain.CalculateTable.ToString() || table.TableType == domain.CalculateItem.ToString() { | 162 | + if table.TableType == domain.CalculateItem.ToString() { //table.TableType == domain.CalculateTable.ToString() || |
163 | table.PK = nil | 163 | table.PK = nil |
164 | } | 164 | } |
165 | table.DataFieldIndex = len(dataFields) | 165 | table.DataFieldIndex = len(dataFields) |
@@ -30,7 +30,9 @@ func (ptr *GenerateMainTableService) GenerateTable(ctx *domain.Context, fileId i | @@ -30,7 +30,9 @@ func (ptr *GenerateMainTableService) GenerateTable(ctx *domain.Context, fileId i | ||
30 | return nil, fmt.Errorf("表名称重复") | 30 | return nil, fmt.Errorf("表名称重复") |
31 | } | 31 | } |
32 | 32 | ||
33 | - mainTable := NewTable(domain.MainTable, tableName, table.DataFields, table.RowCount).WithContext(ctx) | 33 | + mainTable := NewTable(domain.MainTable, tableName, table.DataFields, table.RowCount). |
34 | + WithContext(ctx). | ||
35 | + WithPrefix(domain.MainTable.ToString()) | ||
34 | _, err = tableRepository.Save(mainTable) | 36 | _, err = tableRepository.Save(mainTable) |
35 | if err != nil { | 37 | if err != nil { |
36 | return nil, err | 38 | return nil, err |
@@ -199,6 +199,8 @@ func FastTable(table *domain.Table) (*domain.DataTable, error) { | @@ -199,6 +199,8 @@ func FastTable(table *domain.Table) (*domain.DataTable, error) { | ||
199 | TableName: table.SQLName, | 199 | TableName: table.SQLName, |
200 | Select: table.Fields(false), | 200 | Select: table.Fields(false), |
201 | } | 201 | } |
202 | + options.SetDefaultOrder() | ||
203 | + options.SetOffsetLimit(1,10000) | ||
202 | var dataTable *domain.DataTable | 204 | var dataTable *domain.DataTable |
203 | dataTable, err = FastDataTable(options) | 205 | dataTable, err = FastDataTable(options) |
204 | if err != nil { | 206 | if err != nil { |
@@ -40,7 +40,7 @@ func (ptr *AddTableStructService) AddTableStruct(ctx *domain.Context, parentTabl | @@ -40,7 +40,7 @@ func (ptr *AddTableStructService) AddTableStruct(ctx *domain.Context, parentTabl | ||
40 | fields = MappingFields(mainTable, fields) | 40 | fields = MappingFields(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) | 43 | + table := NewTable(domain.SubTable, name, fields, mainTable.RowCount).WithContext(ctx).WithPrefix(string(domain.SubTable)) |
44 | table.DataFieldIndex = mainTable.DataFieldIndex | 44 | table.DataFieldIndex = mainTable.DataFieldIndex |
45 | table.DataFields = dataFields | 45 | table.DataFields = dataFields |
46 | table.ManualFields = manualFields | 46 | table.ManualFields = manualFields |
@@ -2,6 +2,7 @@ package domainService | @@ -2,6 +2,7 @@ package domainService | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "fmt" | 4 | "fmt" |
5 | + | ||
5 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | 6 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" |
6 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" | 7 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" |
7 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/repository" | 8 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/repository" |
@@ -45,7 +46,10 @@ func (ptr *CopyDataTableService) CopyTable(ctx *domain.Context, tableId int, tab | @@ -45,7 +46,10 @@ func (ptr *CopyDataTableService) CopyTable(ctx *domain.Context, tableId int, tab | ||
45 | } | 46 | } |
46 | } | 47 | } |
47 | // 验证表名是否重复 | 48 | // 验证表名是否重复 |
48 | - duplicateTable, err := tableRepository.FindOne(map[string]interface{}{"context": ctx, "tableName": tableName}) | 49 | + duplicateTable, err := tableRepository.FindOne(map[string]interface{}{ |
50 | + "context": ctx, | ||
51 | + "tableName": tableName, | ||
52 | + "tableTypes":domain.TableTypesToStringList(domain.MainTable,domain.SubTable,domain.SideTable)}) | ||
49 | if err == nil && duplicateTable != nil { | 53 | if err == nil && duplicateTable != nil { |
50 | return nil, fmt.Errorf("表名称重复") | 54 | return nil, fmt.Errorf("表名称重复") |
51 | } | 55 | } |
@@ -53,7 +57,8 @@ func (ptr *CopyDataTableService) CopyTable(ctx *domain.Context, tableId int, tab | @@ -53,7 +57,8 @@ func (ptr *CopyDataTableService) CopyTable(ctx *domain.Context, tableId int, tab | ||
53 | sideTable := NewCopyTable(domain.SideTable, tableName, dataFields, table.RowCount). | 57 | sideTable := NewCopyTable(domain.SideTable, tableName, dataFields, table.RowCount). |
54 | WithContext(ctx). | 58 | WithContext(ctx). |
55 | WithParentId(table.TableId). | 59 | WithParentId(table.TableId). |
56 | - WithDataFieldIndex(table.DataFieldIndex) | 60 | + WithDataFieldIndex(table.DataFieldIndex). |
61 | + WithPrefix(domain.SideTable.ToString()) | ||
57 | if sideTable, err = tableRepository.Save(sideTable); err != nil { | 62 | if sideTable, err = tableRepository.Save(sideTable); err != nil { |
58 | return nil, err | 63 | return nil, err |
59 | } | 64 | } |
@@ -62,7 +62,9 @@ func (ptr *UpdateTableStructService) UpdateTableStruct(ctx *domain.Context, tabl | @@ -62,7 +62,9 @@ func (ptr *UpdateTableStructService) UpdateTableStruct(ctx *domain.Context, tabl | ||
62 | return nil, err | 62 | return nil, err |
63 | } | 63 | } |
64 | } | 64 | } |
65 | - | 65 | + defer func() { |
66 | + AsyncEvent(domain.NewEventTable(ctx, domain.TableDataEditEvent).WithTable(table)) | ||
67 | + }() | ||
66 | // Log | 68 | // Log |
67 | // 日志 | 69 | // 日志 |
68 | if err = FastLog(ptr.transactionContext, domain.CommonLog, table.TableId, &SubTableEditLog{ | 70 | if err = FastLog(ptr.transactionContext, domain.CommonLog, table.TableId, &SubTableEditLog{ |
@@ -3,8 +3,8 @@ package starrocks | @@ -3,8 +3,8 @@ package starrocks | ||
3 | import ( | 3 | import ( |
4 | "bytes" | 4 | "bytes" |
5 | "fmt" | 5 | "fmt" |
6 | - "github.com/google/uuid" | ||
7 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" | 6 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" |
7 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/utils" | ||
8 | "gorm.io/gorm" | 8 | "gorm.io/gorm" |
9 | "html" | 9 | "html" |
10 | "html/template" | 10 | "html/template" |
@@ -15,8 +15,12 @@ func Insert(db *gorm.DB, tableName string, fields []*domain.FieldValue) error { | @@ -15,8 +15,12 @@ func Insert(db *gorm.DB, tableName string, fields []*domain.FieldValue) error { | ||
15 | for _, f := range fields { | 15 | for _, f := range fields { |
16 | if f.Field.Flag == domain.PKField && f.Value == "" { | 16 | if f.Field.Flag == domain.PKField && f.Value == "" { |
17 | //continue | 17 | //continue |
18 | - id, _ := uuid.NewUUID() | ||
19 | - f.Value = id.String() | 18 | + //id, _ := uuid.NewUUID() |
19 | + // idString := id.String() | ||
20 | + // 需要调用分布式id生成 | ||
21 | + id, _ := utils.NewSnowflakeId() | ||
22 | + idString := fmt.Sprintf("%d", id) | ||
23 | + f.Value = idString | ||
20 | } | 24 | } |
21 | value[f.Field.SQLName] = f.TypeValue() | 25 | value[f.Field.SQLName] = f.TypeValue() |
22 | } | 26 | } |
@@ -117,3 +117,10 @@ func TestRound(t *testing.T) { | @@ -117,3 +117,10 @@ func TestRound(t *testing.T) { | ||
117 | t.Logf("%.1f", Truncate(99.99, 1)) | 117 | t.Logf("%.1f", Truncate(99.99, 1)) |
118 | t.Logf("%v", Truncate(99, 0)) | 118 | t.Logf("%v", Truncate(99, 0)) |
119 | } | 119 | } |
120 | + | ||
121 | +func TestNewSnowflakeId(t *testing.T) { | ||
122 | + id, _ := NewSnowflakeId() | ||
123 | + for i := 0; i < 100; i++ { | ||
124 | + t.Log(id / 2) | ||
125 | + } | ||
126 | +} |
-
请 注册 或 登录 后发表评论