作者 yangfu

Merge branch 'test' of http://gitlab.fjmaimaimai.com/allied-creation/character-l…

…ibrary-metadata-bastion into test
@@ -9,6 +9,7 @@ HTTP_PORT = 8081 @@ -9,6 +9,7 @@ HTTP_PORT = 8081
9 ENABLE_KAFKA_LOG11 = true 9 ENABLE_KAFKA_LOG11 = true
10 HTTPS_PORT = 8143 10 HTTPS_PORT = 8143
11 ALLIED_CREATION_USER_HOST = http://allied-creation-user-dev.fjmaimaimai.com 11 ALLIED_CREATION_USER_HOST = http://allied-creation-user-dev.fjmaimaimai.com
  12 +# AUTH_SERVER_HOST = http://127.0.0.1:8081
12 BYTE_CORE_HOST = http://47.97.5.102:8303 13 BYTE_CORE_HOST = http://47.97.5.102:8303
13 METADATA_BASTION_HOST = http://106.75.231.90:9999 14 METADATA_BASTION_HOST = http://106.75.231.90:9999
14 15
@@ -13,7 +13,7 @@ type CalculateItemPreviewQuery struct { @@ -13,7 +13,7 @@ type CalculateItemPreviewQuery struct {
13 // 查询集合ID 13 // 查询集合ID
14 QuerySetId int `cname:"查询集合ID" json:"querySetId" valid:"Required"` 14 QuerySetId int `cname:"查询集合ID" json:"querySetId" valid:"Required"`
15 // 公式 15 // 公式
16 - Formula *domain.FieldExpr `json:"formula"` 16 + Formula *domain.FieldExpr `json:"formula" valid:"Required"`
17 } 17 }
18 18
19 func (dependencyGraphQuery *CalculateItemPreviewQuery) Valid(validation *validation.Validation) { 19 func (dependencyGraphQuery *CalculateItemPreviewQuery) Valid(validation *validation.Validation) {
@@ -99,14 +99,17 @@ func (querySetService *QuerySetService) CreateQuerySet(ctx *domain.Context, crea @@ -99,14 +99,17 @@ func (querySetService *QuerySetService) CreateQuerySet(ctx *domain.Context, crea
99 } 99 }
100 100
101 svr, _ := factory.FastQuerySetServices(transactionContext) 101 svr, _ := factory.FastQuerySetServices(transactionContext)
102 - if err := svr.Create(ctx, newQuerySet); err != nil { 102 + var querySet *domain.QuerySet
  103 + if querySet, err = svr.Create(ctx, newQuerySet); err != nil {
103 return nil, factory.FastError(err) 104 return nil, factory.FastError(err)
104 } 105 }
105 106
106 if err := transactionContext.CommitTransaction(); err != nil { 107 if err := transactionContext.CommitTransaction(); err != nil {
107 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 108 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
108 } 109 }
109 - return struct{}{}, nil 110 + response := dto.QuerySetDto{}
  111 + response.Load(querySet)
  112 + return response, nil
110 } 113 }
111 114
112 // 依赖关系图 115 // 依赖关系图
@@ -425,7 +428,9 @@ func (querySetService *QuerySetService) CalculateItemPreview(ctx *domain.Context @@ -425,7 +428,9 @@ func (querySetService *QuerySetService) CalculateItemPreview(ctx *domain.Context
425 defer func() { 428 defer func() {
426 transactionContext.RollbackTransaction() 429 transactionContext.RollbackTransaction()
427 }() 430 }()
428 - 431 + if q.Formula.MixTableModel() {
  432 + q.Formula.ExprSql = q.Formula.Complete()
  433 + }
429 _, result := GetItemValues(transactionContext, q) 434 _, result := GetItemValues(transactionContext, q)
430 if err := transactionContext.CommitTransaction(); err != nil { 435 if err := transactionContext.CommitTransaction(); err != nil {
431 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 436 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
@@ -480,6 +485,10 @@ func GetItemValues(transactionContext application.TransactionContext, q *query.C @@ -480,6 +485,10 @@ func GetItemValues(transactionContext application.TransactionContext, q *query.C
480 if err != nil { 485 if err != nil {
481 return nil, nil 486 return nil, nil
482 } 487 }
  488 +
  489 + if q.Formula.MixTableModel() {
  490 + q.Formula.ExprSql = q.Formula.Complete()
  491 + }
483 value := starrocks.CalculateItemValue(starrocks.DB, q.Formula) 492 value := starrocks.CalculateItemValue(starrocks.DB, q.Formula)
484 493
485 var result = make([]itemValue, 0) 494 var result = make([]itemValue, 0)
@@ -18,7 +18,7 @@ type TableObjectDto struct { @@ -18,7 +18,7 @@ type TableObjectDto struct {
18 // 父级ID 18 // 父级ID
19 ParentId int `json:"parentId"` 19 ParentId int `json:"parentId"`
20 // 模块 应用于模块 1:数控中心 2:拆解模块 4:计算模块 20 // 模块 应用于模块 1:数控中心 2:拆解模块 4:计算模块
21 - //Module int `json:"module"` 21 + Module int `json:"module"`
22 // 标识 22 // 标识
23 Flag string `json:"flag,omitempty"` 23 Flag string `json:"flag,omitempty"`
24 // 启用状态 24 // 启用状态
@@ -34,9 +34,9 @@ func (d *TableObjectDto) Load(m *domain.Table) *TableObjectDto { @@ -34,9 +34,9 @@ func (d *TableObjectDto) Load(m *domain.Table) *TableObjectDto {
34 d.Name = m.Name 34 d.Name = m.Name
35 d.ParentId = m.ParentId 35 d.ParentId = m.ParentId
36 d.SQLName = m.SQLName 36 d.SQLName = m.SQLName
37 - //if m.TableInfo != nil {  
38 - // d.Module = m.TableInfo.ApplyOnModule  
39 - //} 37 + if m.TableInfo != nil {
  38 + d.Module = m.TableInfo.ApplyOnModule
  39 + }
40 d.Fields = make([]*domain.Field, 0) 40 d.Fields = make([]*domain.Field, 0)
41 return d 41 return d
42 } 42 }
@@ -432,6 +432,9 @@ func (tableService *TableService) ValidExprSql(ctx *domain.Context, cmd *command @@ -432,6 +432,9 @@ func (tableService *TableService) ValidExprSql(ctx *domain.Context, cmd *command
432 for _, f := range cmd.TableFields { 432 for _, f := range cmd.TableFields {
433 set.AddStr(f.TableSqlName) 433 set.AddStr(f.TableSqlName)
434 } 434 }
  435 + if cmd.MixTableModel() {
  436 + cmd.ExprSql = cmd.Complete()
  437 + }
435 selectValue := cmd.ExprSql 438 selectValue := cmd.ExprSql
436 //if _, parseErr := strconv.ParseFloat(cmd.ExprSql, 64); parseErr != nil { 439 //if _, parseErr := strconv.ParseFloat(cmd.ExprSql, 64); parseErr != nil {
437 // selectValue = "'" + selectValue + "'" 440 // selectValue = "'" + selectValue + "'"
@@ -24,7 +24,7 @@ var METADATA_BASTION_HOST = "http://127.0.0.1:8080" @@ -24,7 +24,7 @@ var METADATA_BASTION_HOST = "http://127.0.0.1:8080"
24 24
25 var BYTE_CORE_HOST = "http://192.168.100.34:8303" 25 var BYTE_CORE_HOST = "http://192.168.100.34:8303"
26 26
27 -var AUTH_SERVER_HOST = "http://digital-platform-dev.fjmaimaimai.com/" 27 +var AUTH_SERVER_HOST = "http://digital-platform-dev.fjmaimaimai.com"
28 28
29 //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384} 29 //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384}
30 30
@@ -45,6 +45,7 @@ func init() { @@ -45,6 +45,7 @@ func init() {
45 BYTE_CORE_HOST = Configurator.DefaultString("BYTE_CORE_HOST", BYTE_CORE_HOST) 45 BYTE_CORE_HOST = Configurator.DefaultString("BYTE_CORE_HOST", BYTE_CORE_HOST)
46 SERVICE_ENV = Configurator.DefaultString("SERVICE_ENV", SERVICE_ENV) 46 SERVICE_ENV = Configurator.DefaultString("SERVICE_ENV", SERVICE_ENV)
47 HTTP_PORT = Configurator.DefaultInt("HTTP_PORT", HTTP_PORT) 47 HTTP_PORT = Configurator.DefaultInt("HTTP_PORT", HTTP_PORT)
  48 + AUTH_SERVER_HOST = Configurator.DefaultString("AUTH_SERVER_HOST", AUTH_SERVER_HOST)
48 SERVICE_NAME = fmt.Sprintf("%v-%v", SERVICE_NAME, SERVICE_ENV) 49 SERVICE_NAME = fmt.Sprintf("%v-%v", SERVICE_NAME, SERVICE_ENV)
49 PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) 50 PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON)
50 CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV 51 CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV
1 package domain 1 package domain
2 2
3 -import "fmt" 3 +import (
  4 + "fmt"
  5 + "github.com/zeromicro/go-zero/core/collection"
  6 + "strings"
  7 +)
4 8
5 var ( 9 var (
6 SchemaTable TableType = "Schema" // 方案 10 SchemaTable TableType = "Schema" // 方案
@@ -95,6 +99,50 @@ type FieldExpr struct { @@ -95,6 +99,50 @@ type FieldExpr struct {
95 ExprSql string `json:"exprSql"` 99 ExprSql string `json:"exprSql"`
96 } 100 }
97 101
  102 +func (expr *FieldExpr) Complete() string {
  103 + exprSql := expr.ExprSql
  104 + for _, f := range expr.TableFields {
  105 + sql := fmt.Sprintf("%s.%s", f.TableSqlName, f.FieldSqlName)
  106 + //zhSql := fmt.Sprintf("%s.%s", f.TableName, f.FieldSqlName)
  107 + sub := fmt.Sprintf("max(%s.%s)", f.TableSqlName, f.FieldSqlName)
  108 + //zhSub := fmt.Sprintf("max(%s.%s)", f.TableName, f.FieldSqlName)
  109 + if strings.Contains(expr.ExprSql, fmt.Sprintf("(%s)", sql)) {
  110 + continue
  111 + }
  112 + exprSql = strings.ReplaceAll(exprSql, sql, sub)
  113 + //expr.ExprSql = strings.ReplaceAll(expr.ExprSql, sql, sub)
  114 + //expr.ExprHuman = strings.ReplaceAll(expr.ExprHuman, zhSql, zhSub)
  115 + }
  116 + return exprSql
  117 +}
  118 +
  119 +func (expr *FieldExpr) Tables() []int {
  120 + set := collection.NewSet()
  121 + for _, f := range expr.TableFields {
  122 + if f.TableId == 0 {
  123 + continue
  124 + }
  125 + set.Add(f.TableId)
  126 + }
  127 + return set.KeysInt()
  128 +}
  129 +
  130 +func (expr *FieldExpr) MixTableModel() bool {
  131 + var result = 0
  132 + for _, f := range expr.TableFields {
  133 + if strings.HasPrefix(f.TableSqlName, strings.ToLower(CalculateItem.ToString())) {
  134 + if result&1 == 0 {
  135 + result += 1
  136 + }
  137 + } else {
  138 + if result&2 == 0 {
  139 + result += 2
  140 + }
  141 + }
  142 + }
  143 + return result == 3
  144 +}
  145 +
98 type LabelColumn struct { 146 type LabelColumn struct {
99 Column TableField `json:"column,omitempty"` 147 Column TableField `json:"column,omitempty"`
100 LabelExpr string `json:"labelExpr"` 148 LabelExpr string `json:"labelExpr"`
@@ -39,3 +39,8 @@ func (tk *UserToken) ParseToken(str string) error { @@ -39,3 +39,8 @@ func (tk *UserToken) ParseToken(str string) error {
39 } 39 }
40 return errors.New("token 解析失败") 40 return errors.New("token 解析失败")
41 } 41 }
  42 +
  43 +// CheckUserInfo 如果UserToken有效 返回:true 否则返回false
  44 +func (tk *UserToken) CheckUserInfo() bool {
  45 + return !(tk.UserId > 100000000 || tk.UserId <= 0)
  46 +}
1 package authlib 1 package authlib
2 2
3 type RequestUserMeQuery struct { 3 type RequestUserMeQuery struct {
4 - Token string 4 + //Token string
  5 + UserId int
  6 + CompanyId int
5 } 7 }
6 8
7 type DataUserMe struct { 9 type DataUserMe struct {
@@ -253,7 +253,7 @@ func (gateway ApiByteLib) FormulasGenerate(param domain.ReqFormulasGenerate) (*d @@ -253,7 +253,7 @@ func (gateway ApiByteLib) FormulasGenerate(param domain.ReqFormulasGenerate) (*d
253 url := gateway.Host() + "/formulas/generate" 253 url := gateway.Host() + "/formulas/generate"
254 method := "post" 254 method := "post"
255 var data FormulasGenerateResponse 255 var data FormulasGenerateResponse
256 - request := NewFormulasGenerateRequest(param.Table, param.QueryComponents) 256 + request := NewFormulasGenerateRequest(param.QuerySet, param.Table, param.QueryComponents)
257 err := gateway.FastDoRequest(url, method, request, &data) 257 err := gateway.FastDoRequest(url, method, request, &data)
258 if err != nil { 258 if err != nil {
259 return nil, err 259 return nil, err
@@ -12,6 +12,7 @@ type ( @@ -12,6 +12,7 @@ type (
12 FormulaName string `json:"formulaName"` 12 FormulaName string `json:"formulaName"`
13 FormulaType int `json:"formulaType"` //公式类型 1.方案2.子过程 13 FormulaType int `json:"formulaType"` //公式类型 1.方案2.子过程
14 FormulaConditions []FormulaCondition `json:"formulaConditions"` 14 FormulaConditions []FormulaCondition `json:"formulaConditions"`
  15 + FormulaCalculate *FormulaCalculate `json:"formulaCalculate"`
15 } 16 }
16 17
17 FormulasGenerateResponse struct { 18 FormulasGenerateResponse struct {
@@ -58,9 +59,28 @@ type ( @@ -58,9 +59,28 @@ type (
58 FieldSchema FieldSchema `json:"fieldSchema"` 59 FieldSchema FieldSchema `json:"fieldSchema"`
59 ConditionExpression string `json:"conditionExpression"` 60 ConditionExpression string `json:"conditionExpression"`
60 } 61 }
  62 +
  63 + FormulaCalculate struct {
  64 + DatabaseTableName string `json:"databaseTableName"`
  65 + FormulaCalculateFields []*FormulaCalculateField `json:"formulaCalculateFields"`
  66 + FormulaGroupFields []*FormulaGroupField `json:"formulaGroupFields"`
  67 + }
  68 + FormulaCalculateField struct {
  69 + DatabaseTableName string `json:"databaseTableName"`
  70 + FieldSchema FieldSchema `json:"fieldSchema"`
  71 + CalculateExpression string `json:"calculateExpression"`
  72 + // 字段新的英文名称(3.汇总集4.计算项中对应的新字段名称)
  73 + CalculateFieldName string `json:"calculateFieldName"`
  74 + }
  75 + FormulaGroupField struct {
  76 + DatabaseTableName string `json:"databaseTableName"`
  77 + FieldSchema FieldSchema `json:"fieldSchema"`
  78 + // 字段新的英文名称(3.汇总集4.计算项中对应的新字段名称)
  79 + GroupFieldName string `json:"groupFieldName"`
  80 + }
61 ) 81 )
62 82
63 -func NewFormulasGenerateRequest(table *domain.Table, queryComponents []*domain.QueryComponent) FormulasGenerateRequest { 83 +func NewFormulasGenerateRequest(querySet *domain.QuerySet, table *domain.Table, queryComponents []*domain.QueryComponent) FormulasGenerateRequest {
64 var formatFormulaName = func(input string) string { 84 var formatFormulaName = func(input string) string {
65 sep := fmt.Sprintf("_c%d", table.Context.CompanyId) 85 sep := fmt.Sprintf("_c%d", table.Context.CompanyId)
66 before := strings.Split(input, sep) 86 before := strings.Split(input, sep)
@@ -75,14 +95,22 @@ func NewFormulasGenerateRequest(table *domain.Table, queryComponents []*domain.Q @@ -75,14 +95,22 @@ func NewFormulasGenerateRequest(table *domain.Table, queryComponents []*domain.Q
75 FormulaType: 0, 95 FormulaType: 0,
76 FormulaConditions: make([]FormulaCondition, 0), 96 FormulaConditions: make([]FormulaCondition, 0),
77 } 97 }
78 - if table.TableType == domain.SchemaTable.ToString() { 98 + if querySet.Type == domain.SchemaTable.ToString() {
79 req.FormulaType = 1 99 req.FormulaType = 1
80 - } else { 100 + } else if querySet.Type == domain.SubProcessTable.ToString() {
81 req.FormulaType = 2 101 req.FormulaType = 2
  102 + } else if querySet.Type == domain.CalculateTable.ToString() {
  103 + req.FormulaType = 3
  104 + } else if querySet.Type == domain.CalculateItem.ToString() {
  105 + req.FormulaType = 4
82 } 106 }
83 107
84 - for i := range queryComponents {  
85 - req.FormulaConditions = append(req.FormulaConditions, NewFormulaCondition(queryComponents[i])) 108 + if req.FormulaType == 1 || req.FormulaType == 2 {
  109 + for i := range queryComponents {
  110 + req.FormulaConditions = append(req.FormulaConditions, NewFormulaCondition(queryComponents[i]))
  111 + }
  112 + } else {
  113 + req.FormulaCalculate = NewFormulaCalculate(table, queryComponents[0])
86 } 114 }
87 115
88 return req 116 return req
@@ -104,6 +132,75 @@ func NewFormulaCondition(queryComponent *domain.QueryComponent) FormulaCondition @@ -104,6 +132,75 @@ func NewFormulaCondition(queryComponent *domain.QueryComponent) FormulaCondition
104 return res 132 return res
105 } 133 }
106 134
  135 +func NewFormulaCalculate(table *domain.Table, queryComponent *domain.QueryComponent) *FormulaCalculate {
  136 + var res = &FormulaCalculate{
  137 + DatabaseTableName: "",
  138 + FormulaGroupFields: make([]*FormulaGroupField, 0),
  139 + FormulaCalculateFields: make([]*FormulaCalculateField, 0),
  140 + }
  141 + if queryComponent.Formula != nil {
  142 + formula := queryComponent.Formula
  143 + res.DatabaseTableName = formula.TableFields[0].TableSqlName
  144 + exprSql := formula.ExprSql
  145 + if queryComponent.Formula.MixTableModel() {
  146 + exprSql = queryComponent.Formula.Complete()
  147 + }
  148 + for _, f := range queryComponent.Formula.TableFields {
  149 + res.FormulaCalculateFields = append(res.FormulaCalculateFields, &FormulaCalculateField{
  150 + DatabaseTableName: f.TableSqlName,
  151 + FieldSchema: NewFieldSchema(f),
  152 + CalculateExpression: exprSql,
  153 + CalculateFieldName: table.DataFields[0].SQLName,
  154 + })
  155 + }
  156 + //res.FormulaCalculateFields = append(res.FormulaCalculateFields, &FormulaCalculateField{
  157 + // DatabaseTableName: res.DatabaseTableName,
  158 + // FieldSchema: NewFieldSchemaFromField(table.DataFields[0]),
  159 + // CalculateExpression: formula.ExprSql,
  160 + // CalculateFieldName: table.DataFields[0].SQLName,
  161 + //})
  162 + }
  163 + if queryComponent.Aggregation != nil {
  164 + res.DatabaseTableName = queryComponent.MasterTable.SQLName
  165 + for i, f := range queryComponent.Aggregation.ValueFields {
  166 + tableField, ok := table.MatchField(&domain.Field{Name: f.DisplayName})
  167 + if !ok {
  168 + continue
  169 + }
  170 + if i == 0 {
  171 + res.FormulaCalculateFields = append(res.FormulaCalculateFields, &FormulaCalculateField{
  172 + DatabaseTableName: queryComponent.MasterTable.SQLName,
  173 + FieldSchema: NewFieldSchemaFromField(&domain.Field{
  174 + Name: "序号",
  175 + SQLName: "id",
  176 + SQLType: domain.String.ToString(),
  177 + }),
  178 + CalculateExpression: fmt.Sprintf("max(%s.%s)", queryComponent.MasterTable.SQLName, "id"),
  179 + CalculateFieldName: "id",
  180 + })
  181 + }
  182 + res.FormulaCalculateFields = append(res.FormulaCalculateFields, &FormulaCalculateField{
  183 + DatabaseTableName: queryComponent.MasterTable.SQLName,
  184 + FieldSchema: NewFieldSchemaFromField(f.Field),
  185 + CalculateExpression: f.Expr.ExprSql,
  186 + CalculateFieldName: tableField.SQLName,
  187 + })
  188 + }
  189 + for _, f := range queryComponent.Aggregation.RowFields {
  190 + tableField, ok := table.MatchField(&domain.Field{Name: f.DisplayName})
  191 + if !ok {
  192 + continue
  193 + }
  194 + res.FormulaGroupFields = append(res.FormulaGroupFields, &FormulaGroupField{
  195 + DatabaseTableName: queryComponent.MasterTable.SQLName,
  196 + FieldSchema: NewFieldSchemaFromField(f.Field),
  197 + GroupFieldName: tableField.SQLName,
  198 + })
  199 + }
  200 + }
  201 + return res
  202 +}
  203 +
107 func NewFormulaSelectFields(t *domain.QueryComponentTable) FormulaSelectFields { 204 func NewFormulaSelectFields(t *domain.QueryComponentTable) FormulaSelectFields {
108 var res = FormulaSelectFields{ 205 var res = FormulaSelectFields{
109 DatabaseTableName: t.SQLName, 206 DatabaseTableName: t.SQLName,
@@ -124,7 +221,11 @@ func NewFormulaSelectCondition(c domain.ConditionExpr) FormulaSelectCondition { @@ -124,7 +221,11 @@ func NewFormulaSelectCondition(c domain.ConditionExpr) FormulaSelectCondition {
124 res.ConditionRightField.ConditionExpression = " null " 221 res.ConditionRightField.ConditionExpression = " null "
125 } 222 }
126 if c.OperatorSymbol == "!=" && strings.ToLower(c.FieldRight.ExprSql) == "null" { 223 if c.OperatorSymbol == "!=" && strings.ToLower(c.FieldRight.ExprSql) == "null" {
127 - res.ConditionOperator = "is not" 224 + res.ConditionOperator = " is not "
  225 + res.ConditionRightField.ConditionExpression = "null"
  226 + }
  227 + if c.OperatorSymbol == "<>" && strings.ToLower(c.FieldRight.ExprSql) == "null" {
  228 + res.ConditionOperator = " is not "
128 res.ConditionRightField.ConditionExpression = "null" 229 res.ConditionRightField.ConditionExpression = "null"
129 } 230 }
130 return res 231 return res
@@ -162,6 +263,17 @@ func NewFieldSchema(f domain.TableField) FieldSchema { @@ -162,6 +263,17 @@ func NewFieldSchema(f domain.TableField) FieldSchema {
162 return res 263 return res
163 } 264 }
164 265
  266 +func NewFieldSchemaFromField(f *domain.Field) FieldSchema {
  267 + var res = FieldSchema{
  268 + FieldZhName: f.Name,
  269 + FieldEnName: f.SQLName,
  270 + FieldType: f.SQLType,
  271 + FieldDescription: "",
  272 + IsAllowNull: true,
  273 + }
  274 + return res
  275 +}
  276 +
165 func NewFormulaDataHandleRule(s domain.SelectExprGroup) FormulaDataHandleRule { 277 func NewFormulaDataHandleRule(s domain.SelectExprGroup) FormulaDataHandleRule {
166 var res = FormulaDataHandleRule{ 278 var res = FormulaDataHandleRule{
167 RuleType: 1, 279 RuleType: 1,
@@ -7,7 +7,6 @@ import ( @@ -7,7 +7,6 @@ import (
7 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" 7 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain"
8 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/api/bytelib" 8 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/api/bytelib"
9 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/excel" 9 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/excel"
10 - "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/starrocks"  
11 ) 10 )
12 11
13 type ByteCoreService struct { 12 type ByteCoreService struct {
@@ -129,24 +128,24 @@ func (ptr *ByteCoreService) FieldOptionalValues(param domain.ReqFieldOptionalVal @@ -129,24 +128,24 @@ func (ptr *ByteCoreService) FieldOptionalValues(param domain.ReqFieldOptionalVal
129 128
130 func (ptr *ByteCoreService) FormulasGenerate(param domain.ReqFormulasGenerate) (*domain.DataFormulasGenerate, error) { 129 func (ptr *ByteCoreService) FormulasGenerate(param domain.ReqFormulasGenerate) (*domain.DataFormulasGenerate, error) {
131 apiByteLib := bytelib.NewApiByteLib(constant.BYTE_CORE_HOST) 130 apiByteLib := bytelib.NewApiByteLib(constant.BYTE_CORE_HOST)
132 - if param.QuerySet.Type == domain.CalculateItem.ToString() {  
133 - if err := starrocks.Exec(starrocks.DB,  
134 - starrocks.CreateViewSql(param.Table.SQLName, param.Table.DataFields,  
135 - starrocks.CalculateItemViewSql(&param.QueryComponents[0].Formula.FieldExpr),  
136 - )); err != nil {  
137 - return nil, err  
138 - }  
139 - return &domain.DataFormulasGenerate{}, nil  
140 - }  
141 - if param.QuerySet.Type == domain.CalculateTable.ToString() {  
142 - if err := starrocks.Exec(starrocks.DB,  
143 - starrocks.CreateViewSql(param.Table.SQLName, param.Table.DataFields,  
144 - starrocks.CalculateTableViewSql(param.QueryComponents[0].MasterTable.SQLName, &param.QueryComponents[0].Aggregation.Aggregation),  
145 - )); err != nil {  
146 - return nil, err  
147 - }  
148 - return &domain.DataFormulasGenerate{}, nil  
149 - } 131 + //if param.QuerySet.Type == domain.CalculateItem.ToString() {
  132 + // if err := starrocks.Exec(starrocks.DB,
  133 + // starrocks.CreateViewSql(param.Table.SQLName, param.Table.DataFields,
  134 + // starrocks.CalculateItemViewSql(&param.QueryComponents[0].Formula.FieldExpr),
  135 + // )); err != nil {
  136 + // return nil, err
  137 + // }
  138 + // return &domain.DataFormulasGenerate{}, nil
  139 + //}
  140 + //if param.QuerySet.Type == domain.CalculateTable.ToString() {
  141 + // if err := starrocks.Exec(starrocks.DB,
  142 + // starrocks.CreateViewSql(param.Table.SQLName, param.Table.DataFields,
  143 + // starrocks.CalculateTableViewSql(param.QueryComponents[0].MasterTable.SQLName, &param.QueryComponents[0].Aggregation.Aggregation),
  144 + // )); err != nil {
  145 + // return nil, err
  146 + // }
  147 + // return &domain.DataFormulasGenerate{}, nil
  148 + //}
150 return apiByteLib.FormulasGenerate(param) 149 return apiByteLib.FormulasGenerate(param)
151 } 150 }
152 151
@@ -368,7 +368,13 @@ func (l *CreateQuerySetLog) OperateType() string { @@ -368,7 +368,13 @@ func (l *CreateQuerySetLog) OperateType() string {
368 } 368 }
369 369
370 func (l *CreateQuerySetLog) LogType() string { 370 func (l *CreateQuerySetLog) LogType() string {
371 - if l.Qs.Type == domain.SchemaTable.ToString() || l.Qs.Type == domain.SubProcessTable.ToString() { 371 + if l.Qs.Type == domain.SchemaTable.ToString() {
  372 + return domain.QuerySetLog.ToString()
  373 + }
  374 + if l.Qs.Type == domain.SubProcessTable.ToString() {
  375 + return domain.QuerySetLog.ToString()
  376 + }
  377 + if l.Qs.Type == domain.CalculateTable.ToString() {
372 return domain.QuerySetLog.ToString() 378 return domain.QuerySetLog.ToString()
373 } 379 }
374 return domain.FormulaLog.ToString() 380 return domain.FormulaLog.ToString()
@@ -390,7 +396,13 @@ func (l *RenameQuerySetLog) OperateType() string { @@ -390,7 +396,13 @@ func (l *RenameQuerySetLog) OperateType() string {
390 } 396 }
391 397
392 func (l *RenameQuerySetLog) LogType() string { 398 func (l *RenameQuerySetLog) LogType() string {
393 - if l.Qs.Type == domain.SchemaTable.ToString() || l.Qs.Type == domain.SubProcessTable.ToString() { 399 + if l.Qs.Type == domain.SchemaTable.ToString() {
  400 + return domain.QuerySetLog.ToString()
  401 + }
  402 + if l.Qs.Type == domain.SubProcessTable.ToString() {
  403 + return domain.QuerySetLog.ToString()
  404 + }
  405 + if l.Qs.Type == domain.CalculateTable.ToString() {
394 return domain.QuerySetLog.ToString() 406 return domain.QuerySetLog.ToString()
395 } 407 }
396 return domain.FormulaLog.ToString() 408 return domain.FormulaLog.ToString()
@@ -420,6 +432,9 @@ func (l *DeleteQuerySetLog) LogType() string { @@ -420,6 +432,9 @@ func (l *DeleteQuerySetLog) LogType() string {
420 if qs.Type == domain.SchemaTable.ToString() || qs.Type == domain.SubProcessTable.ToString() { 432 if qs.Type == domain.SchemaTable.ToString() || qs.Type == domain.SubProcessTable.ToString() {
421 return domain.QuerySetLog.ToString() 433 return domain.QuerySetLog.ToString()
422 } 434 }
  435 + if qs.Type == domain.CalculateTable.ToString() {
  436 + return domain.QuerySetLog.ToString()
  437 + }
423 return domain.FormulaLog.ToString() 438 return domain.FormulaLog.ToString()
424 } 439 }
425 440
@@ -450,6 +465,9 @@ func (l *CopyQuerySetLog) LogType() string { @@ -450,6 +465,9 @@ func (l *CopyQuerySetLog) LogType() string {
450 if qs.Type == domain.SchemaTable.ToString() || qs.Type == domain.SubProcessTable.ToString() { 465 if qs.Type == domain.SchemaTable.ToString() || qs.Type == domain.SubProcessTable.ToString() {
451 return domain.QuerySetLog.ToString() 466 return domain.QuerySetLog.ToString()
452 } 467 }
  468 + if qs.Type == domain.CalculateTable.ToString() {
  469 + return domain.QuerySetLog.ToString()
  470 + }
453 return domain.FormulaLog.ToString() 471 return domain.FormulaLog.ToString()
454 } 472 }
455 473
@@ -34,7 +34,7 @@ func NewQuerySetService(transactionContext *pgTransaction.TransactionContext) (* @@ -34,7 +34,7 @@ func NewQuerySetService(transactionContext *pgTransaction.TransactionContext) (*
34 } 34 }
35 } 35 }
36 36
37 -func (ptr *QuerySetService) Create(ctx *domain.Context, qs *domain.QuerySet) error { 37 +func (ptr *QuerySetService) Create(ctx *domain.Context, qs *domain.QuerySet) (*domain.QuerySet, error) {
38 newQuerySet := &domain.QuerySet{ 38 newQuerySet := &domain.QuerySet{
39 Type: qs.Type, 39 Type: qs.Type,
40 Flag: qs.Flag, 40 Flag: qs.Flag,
@@ -59,24 +59,24 @@ func (ptr *QuerySetService) Create(ctx *domain.Context, qs *domain.QuerySet) err @@ -59,24 +59,24 @@ func (ptr *QuerySetService) Create(ctx *domain.Context, qs *domain.QuerySet) err
59 if qs.ParentId > 0 { 59 if qs.ParentId > 0 {
60 parent, err := querySetRepository.FindOne(map[string]interface{}{"querySetId": qs.ParentId}) 60 parent, err := querySetRepository.FindOne(map[string]interface{}{"querySetId": qs.ParentId})
61 if err != nil { 61 if err != nil {
62 - return ErrQuerySetParentNotExists 62 + return nil, ErrQuerySetParentNotExists
63 } 63 }
64 if parent.Type != qs.Type { 64 if parent.Type != qs.Type {
65 - return ErrQuerySetInvalidType 65 + return nil, ErrQuerySetInvalidType
66 } 66 }
67 options["parentId"] = qs.ParentId 67 options["parentId"] = qs.ParentId
68 } 68 }
69 // check duplicate name 69 // check duplicate name
70 if found, foundErr := querySetRepository.FindOne(options); foundErr == nil && found != nil && found.Name == qs.Name { 70 if found, foundErr := querySetRepository.FindOne(options); foundErr == nil && found != nil && found.Name == qs.Name {
71 - return ErrQuerySetNameExists 71 + return nil, ErrQuerySetNameExists
72 } 72 }
73 // current sort 73 // current sort
74 newQuerySet.Sort, err = dao.QuerySetCurrentSort(ptr.transactionContext, qs.Type, qs.ParentId) 74 newQuerySet.Sort, err = dao.QuerySetCurrentSort(ptr.transactionContext, qs.Type, qs.ParentId)
75 if err != nil { 75 if err != nil {
76 - return err 76 + return nil, err
77 } 77 }
78 if newQuerySet, err = querySetRepository.Save(newQuerySet); err != nil { 78 if newQuerySet, err = querySetRepository.Save(newQuerySet); err != nil {
79 - return err 79 + return nil, err
80 } 80 }
81 81
82 // 日志 82 // 日志
@@ -84,9 +84,9 @@ func (ptr *QuerySetService) Create(ctx *domain.Context, qs *domain.QuerySet) err @@ -84,9 +84,9 @@ func (ptr *QuerySetService) Create(ctx *domain.Context, qs *domain.QuerySet) err
84 LogEntry: domain.NewLogEntry(newQuerySet.Name, qs.Type, domain.UnKnown, ctx), 84 LogEntry: domain.NewLogEntry(newQuerySet.Name, qs.Type, domain.UnKnown, ctx),
85 Qs: newQuerySet, 85 Qs: newQuerySet,
86 }); err != nil { 86 }); err != nil {
87 - return err 87 + return nil, err
88 } 88 }
89 - return nil 89 + return newQuerySet, nil
90 } 90 }
91 91
92 func (ptr *QuerySetService) Update(ctx *domain.Context, querySetId int, queryComponents []*domain.QueryComponent) error { 92 func (ptr *QuerySetService) Update(ctx *domain.Context, querySetId int, queryComponents []*domain.QueryComponent) error {
@@ -277,6 +277,9 @@ func (ptr *QuerySetService) PreviewPrepare(ctx *domain.Context, querySetId int, @@ -277,6 +277,9 @@ func (ptr *QuerySetService) PreviewPrepare(ctx *domain.Context, querySetId int,
277 var table *domain.Table = NewCopyTable(domain.TableType(domain.TemporaryTable), querySet.Name, domain.RangeFields(fields, domain.ChangeFieldFlag), 0). 277 var table *domain.Table = NewCopyTable(domain.TableType(domain.TemporaryTable), querySet.Name, domain.RangeFields(fields, domain.ChangeFieldFlag), 0).
278 WithContext(ctx). 278 WithContext(ctx).
279 WithPrefix(strings.ToLower(string(domain.TemporaryTable))) 279 WithPrefix(strings.ToLower(string(domain.TemporaryTable)))
  280 + if querySet.Type == domain.CalculateTable.ToString() {
  281 + table.PK = nil
  282 + }
280 // 循环依赖判断 283 // 循环依赖判断
281 if err = ptr.validDependentCircle(ctx, querySet, queryComponents); err != nil { 284 if err = ptr.validDependentCircle(ctx, querySet, queryComponents); err != nil {
282 return nil, err 285 return nil, err
@@ -561,7 +564,7 @@ func formulaEditLog(ctx *domain.Context, querySet *domain.QuerySet, queryCompone @@ -561,7 +564,7 @@ func formulaEditLog(ctx *domain.Context, querySet *domain.QuerySet, queryCompone
561 return res 564 return res
562 } 565 }
563 if oldQC.Formula.ExprSql != newQC.Formula.ExprSql { 566 if oldQC.Formula.ExprSql != newQC.Formula.ExprSql {
564 - res = append(res, NewFastSourceLog(domain.QuerySetLog, sourceId, &EditFormulaLog{ 567 + res = append(res, NewFastSourceLog(domain.FormulaLog, sourceId, &EditFormulaLog{
565 LogEntry: entry, 568 LogEntry: entry,
566 OperationType: domain.EditCalculateItem, 569 OperationType: domain.EditCalculateItem,
567 Old: oldQC.Formula.ExprHuman, 570 Old: oldQC.Formula.ExprHuman,
@@ -588,12 +591,23 @@ func aggregationEditLog(ctx *domain.Context, querySet *domain.QuerySet, queryCom @@ -588,12 +591,23 @@ func aggregationEditLog(ctx *domain.Context, querySet *domain.QuerySet, queryCom
588 for _, f := range oldQC.Aggregation.AggregationFields() { 591 for _, f := range oldQC.Aggregation.AggregationFields() {
589 mapOldAgFields[f.DisplayName] = f 592 mapOldAgFields[f.DisplayName] = f
590 } 593 }
  594 + mapNewAgFields := make(map[string]*domain.AggregationField)
  595 + for _, f := range newQC.Aggregation.AggregationFields() {
  596 + mapNewAgFields[f.DisplayName] = f
  597 + }
591 changList := make([]string, 0) 598 changList := make([]string, 0)
592 for _, f := range newQC.Aggregation.AggregationFields() { 599 for _, f := range newQC.Aggregation.AggregationFields() {
593 if v, ok := mapOldAgFields[f.DisplayName]; ok { 600 if v, ok := mapOldAgFields[f.DisplayName]; ok {
594 if f.Diff(v) { 601 if f.Diff(v) {
595 changList = append(changList, fmt.Sprintf("%s修改为%s", v.Info(), f.Info())) 602 changList = append(changList, fmt.Sprintf("%s修改为%s", v.Info(), f.Info()))
596 } 603 }
  604 + } else {
  605 + changList = append(changList, fmt.Sprintf("增加%s", f.Info()))
  606 + }
  607 + }
  608 + for _, f := range oldQC.Aggregation.AggregationFields() {
  609 + if _, ok := mapNewAgFields[f.DisplayName]; !ok {
  610 + changList = append(changList, fmt.Sprintf("删除%s", f.Info()))
597 } 611 }
598 } 612 }
599 613
@@ -674,12 +688,16 @@ func (ptr *QuerySetService) CreateOrUpdateCalculateItemTable(ctx *domain.Context @@ -674,12 +688,16 @@ func (ptr *QuerySetService) CreateOrUpdateCalculateItemTable(ctx *domain.Context
674 dependencyTables := querySet.GetDependencyTables(queryComponents) 688 dependencyTables := querySet.GetDependencyTables(queryComponents)
675 tableRepository, _ := repository.NewTableRepository(ptr.transactionContext) 689 tableRepository, _ := repository.NewTableRepository(ptr.transactionContext)
676 queryComponent := queryComponents[0] 690 queryComponent := queryComponents[0]
  691 + //!!!warning:每个字段默认需要带函数,没有就补全max()
  692 + //if queryComponent.Formula.MixTableModel() {
  693 + // queryComponent.Formula.Complete()
  694 + //}
677 field := DataField(querySet.Name, domain.String.ToString(), domain.MainTableField, 1) 695 field := DataField(querySet.Name, domain.String.ToString(), domain.MainTableField, 1)
678 if len(queryComponent.Formula.TableFields) > 0 { 696 if len(queryComponent.Formula.TableFields) > 0 {
679 field.SQLType = queryComponent.Formula.TableFields[0].FieldSQLType 697 field.SQLType = queryComponent.Formula.TableFields[0].FieldSQLType
680 } 698 }
681 var table *domain.Table = NewCopyTable(domain.TableType(querySet.Type), querySet.Name, []*domain.Field{field}, 1).WithContext(ctx).WithPrefix(strings.ToLower(querySet.Type)) 699 var table *domain.Table = NewCopyTable(domain.TableType(querySet.Type), querySet.Name, []*domain.Field{field}, 1).WithContext(ctx).WithPrefix(strings.ToLower(querySet.Type))
682 - table.PK = nil 700 + //table.PK = nil
683 if querySet.QuerySetInfo.BindTableId > 0 { 701 if querySet.QuerySetInfo.BindTableId > 0 {
684 table, err = tableRepository.FindOne(map[string]interface{}{"context": ctx, "tableId": querySet.QuerySetInfo.BindTableId}) 702 table, err = tableRepository.FindOne(map[string]interface{}{"context": ctx, "tableId": querySet.QuerySetInfo.BindTableId})
685 if err != nil { 703 if err != nil {
@@ -715,6 +733,9 @@ func (ptr *QuerySetService) CreateOrUpdateCalculateTable(ctx *domain.Context, qu @@ -715,6 +733,9 @@ func (ptr *QuerySetService) CreateOrUpdateCalculateTable(ctx *domain.Context, qu
715 queryComponent.MasterTable = masterTable 733 queryComponent.MasterTable = masterTable
716 fields := make([]*domain.Field, 0) 734 fields := make([]*domain.Field, 0)
717 aggregationFields := queryComponent.Aggregation.AggregationFields() 735 aggregationFields := queryComponent.Aggregation.AggregationFields()
  736 + if len(aggregationFields) == 0 {
  737 + return nil, fmt.Errorf("行、值不能同时为空")
  738 + }
718 selectedFields := make([]string, 0) 739 selectedFields := make([]string, 0)
719 for index, f := range aggregationFields { 740 for index, f := range aggregationFields {
720 // 数值类型转浮点类型, 兼容类似表达式 1 * 1.1 741 // 数值类型转浮点类型, 兼容类似表达式 1 * 1.1
@@ -776,6 +797,9 @@ func (ptr *QuerySetService) Rename(ctx *domain.Context, querySetId int, name str @@ -776,6 +797,9 @@ func (ptr *QuerySetService) Rename(ctx *domain.Context, querySetId int, name str
776 return err 797 return err
777 } 798 }
778 table.Name = name 799 table.Name = name
  800 + if table.TableType == domain.CalculateItem.ToString() && len(table.DataFields) > 0 {
  801 + table.DataFields[0].Name = name
  802 + }
779 if _, err := tableRepository.Save(table); err != nil { 803 if _, err := tableRepository.Save(table); err != nil {
780 return err 804 return err
781 } 805 }
@@ -68,7 +68,8 @@ func CreateRequestLogFilter(console bool) func(ctx *context.Context) { @@ -68,7 +68,8 @@ func CreateRequestLogFilter(console bool) func(ctx *context.Context) {
68 68
69 func JwtFilter() func(ctx *context.Context) { 69 func JwtFilter() func(ctx *context.Context) {
70 return func(ctx *context.Context) { 70 return func(ctx *context.Context) {
71 - token := ctx.Request.Header.Get("Authorization") 71 + //token := ctx.Request.Header.Get("Authorization")
  72 + token := ctx.Request.Header.Get("x-mmm-accesstoken")
72 if len(token) > 0 { 73 if len(token) > 0 {
73 token = strings.TrimPrefix(token, "Bearer ") 74 token = strings.TrimPrefix(token, "Bearer ")
74 userToken := &domain.UserToken{} 75 userToken := &domain.UserToken{}
@@ -49,19 +49,24 @@ func ParseContext(c beego.BaseController) *domain.Context { @@ -49,19 +49,24 @@ func ParseContext(c beego.BaseController) *domain.Context {
49 userToken, ok := token.(*domain.UserToken) 49 userToken, ok := token.(*domain.UserToken)
50 if ok { 50 if ok {
51 // cache user info 51 // cache user info
52 - key := cache.KeyCompanyUser(companyId, userId)  
53 - if cacheItem, ok := cache.DefaultCache.Get(key); ok {  
54 - v := cacheItem.(*authlib.DataUserMe)  
55 - userName = v.User.NickName  
56 - } else {  
57 - requestToken, _ := userToken.GenerateToken()  
58 - authLib := authlib.NewApiAuthLib(constant.AUTH_SERVER_HOST).WithToken(requestToken)  
59 - userInfo, err := authLib.MeInfo(authlib.RequestUserMeQuery{})  
60 - if err != nil || userInfo == nil || userInfo.User == nil {  
61 - goto END 52 + key := cache.KeyCompanyUser(int(userToken.CompanyId), int(userToken.UserId))
  53 + if userToken.CheckUserInfo() {
  54 + if cacheItem, ok := cache.DefaultCache.Get(key); ok {
  55 + v := cacheItem.(*authlib.DataUserMe)
  56 + userName = v.User.NickName
  57 + } else {
  58 + requestToken, _ := userToken.GenerateToken()
  59 + authLib := authlib.NewApiAuthLib(constant.AUTH_SERVER_HOST).WithToken(requestToken)
  60 + userInfo, err := authLib.MeInfo(authlib.RequestUserMeQuery{
  61 + UserId: int(userToken.UserId),
  62 + CompanyId: int(userToken.CompanyId),
  63 + })
  64 + if err != nil || userInfo == nil || userInfo.User == nil {
  65 + goto END
  66 + }
  67 + userName = userInfo.User.NickName
  68 + cache.DefaultCache.SetDefault(key, userInfo)
62 } 69 }
63 - userName = userInfo.User.NickName  
64 - cache.DefaultCache.SetDefault(key, userInfo)  
65 } 70 }
66 // assign user 71 // assign user
67 companyId = int(userToken.CompanyId) 72 companyId = int(userToken.CompanyId)
@@ -91,6 +91,17 @@ func (controller *LogController) QuerySetLog() { @@ -91,6 +91,17 @@ func (controller *LogController) QuerySetLog() {
91 ResponseGrid(controller.BaseController, total, data, err) 91 ResponseGrid(controller.BaseController, total, data, err)
92 } 92 }
93 93
  94 +func (controller *LogController) FormulaLog() {
  95 + logService := service.NewLogService(nil)
  96 + cmd := &command.SearchLogCommand{}
  97 + controller.Unmarshal(cmd)
  98 + cmd.LogType = domain.FormulaLog.ToString()
  99 + cmd.SortByLogId = "DESC"
  100 + cmd.Context = ParseContext(controller.BaseController)
  101 + total, data, err := logService.SearchLog(cmd)
  102 + ResponseGrid(controller.BaseController, total, data, err)
  103 +}
  104 +
94 func (controller *LogController) VerifiedStepLog() { 105 func (controller *LogController) VerifiedStepLog() {
95 logService := service.NewLogService(nil) 106 logService := service.NewLogService(nil)
96 cmd := &command.SearchLogCommand{} 107 cmd := &command.SearchLogCommand{}
@@ -15,4 +15,5 @@ func init() { @@ -15,4 +15,5 @@ func init() {
15 web.Router("/data/logs/table-operate-Log", &controllers.LogController{}, "Post:TableOperateLog") 15 web.Router("/data/logs/table-operate-Log", &controllers.LogController{}, "Post:TableOperateLog")
16 web.Router("/data/logs/verified-step-Log", &controllers.LogController{}, "Post:VerifiedStepLog") 16 web.Router("/data/logs/verified-step-Log", &controllers.LogController{}, "Post:VerifiedStepLog")
17 web.Router("/data/logs/query-set-log", &controllers.LogController{}, "Post:QuerySetLog") 17 web.Router("/data/logs/query-set-log", &controllers.LogController{}, "Post:QuerySetLog")
  18 + web.Router("/data/logs/formula-log", &controllers.LogController{}, "Post:FormulaLog")
18 } 19 }