Merge remote-tracking branch 'origin/test'
正在显示
19 个修改的文件
包含
152 行增加
和
40 行删除
| @@ -541,3 +541,18 @@ extractMethod: 提取方法(1.by-date:按日期 2.by-number:按数值) | @@ -541,3 +541,18 @@ extractMethod: 提取方法(1.by-date:按日期 2.by-number:按数值) | ||
| 541 | ``` | 541 | ``` |
| 542 | convertType:转换类型 STRING 数值: INT 小数: FLOAT 日期: DATE 时间: DATETIME | 542 | convertType:转换类型 STRING 数值: INT 小数: FLOAT 日期: DATE 时间: DATETIME |
| 543 | ``` | 543 | ``` |
| 544 | + | ||
| 545 | +## 优化点 | ||
| 546 | +- [] 0.测试服务、数据库的上限(QPS,TPS)查询瓶颈的接口 | ||
| 547 | + | ||
| 548 | +- [] 1.模型详情缓存(tables、query_set) | ||
| 549 | + | ||
| 550 | +- [] 2.列表搜索缓存 (tables、query_set),减轻数据库压力 | ||
| 551 | + | ||
| 552 | +``` | ||
| 553 | +更新、删除、重命名 | ||
| 554 | +get list:queryset:cxxx:* | ||
| 555 | +删除所有匹配的缓存 | ||
| 556 | + | ||
| 557 | +消息队列更新事件、确保缓存一定移除成功、缓存时间控制 | ||
| 558 | +``` |
| @@ -19,3 +19,6 @@ CREATE INDEX IF NOT EXISTS idx_logs_company_id_created_at ON metadata.logs USING | @@ -19,3 +19,6 @@ CREATE INDEX IF NOT EXISTS idx_logs_company_id_created_at ON metadata.logs USING | ||
| 19 | 19 | ||
| 20 | /*mapping_rules*/ | 20 | /*mapping_rules*/ |
| 21 | CREATE INDEX IF NOT EXISTS idx_mapping_rules_company_id_table_id_file_id ON metadata.mapping_rules USING btree((context->>'companyId'),table_id,file_id); | 21 | CREATE INDEX IF NOT EXISTS idx_mapping_rules_company_id_table_id_file_id ON metadata.mapping_rules USING btree((context->>'companyId'),table_id,file_id); |
| 22 | + | ||
| 23 | +/*query_sets*/ | ||
| 24 | +CREATE INDEX IF NOT EXISTS idx_query_sets_company_id_type_deleted_at ON metadata.query_sets USING btree((context->>'companyId'),type,deleted_at); |
| @@ -117,6 +117,8 @@ spec: | @@ -117,6 +117,8 @@ spec: | ||
| 117 | value: "1" | 117 | value: "1" |
| 118 | - name: BLACK_LIST_COMPANY | 118 | - name: BLACK_LIST_COMPANY |
| 119 | value: "1646025721363042304" | 119 | value: "1646025721363042304" |
| 120 | + - name: WHITE_LIST_USERS | ||
| 121 | + value: "0" | ||
| 120 | volumes: | 122 | volumes: |
| 121 | - name: accesslogs | 123 | - name: accesslogs |
| 122 | emptyDir: {} | 124 | emptyDir: {} |
| @@ -45,5 +45,7 @@ require ( | @@ -45,5 +45,7 @@ require ( | ||
| 45 | 45 | ||
| 46 | replace ( | 46 | replace ( |
| 47 | github.com/extrame/xls v0.0.1 => github.com/tiptok/xls v1.0.1 | 47 | github.com/extrame/xls v0.0.1 => github.com/tiptok/xls v1.0.1 |
| 48 | - github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 => github.com/tiptok/egglib-go v0.0.0-20220421085958-9682d0ac42c1 | 48 | + //github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 => github.com/tiptok/egglib-go v0.0.0-20220421085958-9682d0ac42c1 |
| 49 | + github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 => github.com/tiptok/egglib-go v1.0.0 | ||
| 50 | + | ||
| 49 | ) | 51 | ) |
| @@ -311,12 +311,12 @@ func (querySetService *QuerySetService) SearchQuerySet(ctx *domain.Context, sear | @@ -311,12 +311,12 @@ func (querySetService *QuerySetService) SearchQuerySet(ctx *domain.Context, sear | ||
| 311 | if err != nil { | 311 | if err != nil { |
| 312 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 312 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 313 | } | 313 | } |
| 314 | - if err := transactionContext.StartTransaction(); err != nil { | ||
| 315 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 316 | - } | ||
| 317 | - defer func() { | ||
| 318 | - transactionContext.RollbackTransaction() | ||
| 319 | - }() | 314 | + //if err := transactionContext.StartTransaction(); err != nil { |
| 315 | + // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 316 | + //} | ||
| 317 | + //defer func() { | ||
| 318 | + // transactionContext.RollbackTransaction() | ||
| 319 | + //}() | ||
| 320 | 320 | ||
| 321 | QuerySetRepository, _, _ := factory.FastPgQuerySet(transactionContext, 0) | 321 | QuerySetRepository, _, _ := factory.FastPgQuerySet(transactionContext, 0) |
| 322 | options := utils.ObjectToMap(searchQuerySetQuery) | 322 | options := utils.ObjectToMap(searchQuerySetQuery) |
| @@ -361,9 +361,9 @@ func (querySetService *QuerySetService) SearchQuerySet(ctx *domain.Context, sear | @@ -361,9 +361,9 @@ func (querySetService *QuerySetService) SearchQuerySet(ctx *domain.Context, sear | ||
| 361 | 361 | ||
| 362 | var result = dto.NewQuerySetDtoList(querySets) | 362 | var result = dto.NewQuerySetDtoList(querySets) |
| 363 | 363 | ||
| 364 | - if err := transactionContext.CommitTransaction(); err != nil { | ||
| 365 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 366 | - } | 364 | + //if err := transactionContext.CommitTransaction(); err != nil { |
| 365 | + // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 366 | + //} | ||
| 367 | return map[string]interface{}{ | 367 | return map[string]interface{}{ |
| 368 | "count": count, | 368 | "count": count, |
| 369 | "querySets": result, | 369 | "querySets": result, |
| @@ -426,6 +426,15 @@ func (tableService *TableService) ApplyOn(ctx *domain.Context, cmd *command.Appl | @@ -426,6 +426,15 @@ func (tableService *TableService) ApplyOn(ctx *domain.Context, cmd *command.Appl | ||
| 426 | } else { | 426 | } else { |
| 427 | table.TableInfo.SetApplyOn(cmd.Module) | 427 | table.TableInfo.SetApplyOn(cmd.Module) |
| 428 | } | 428 | } |
| 429 | + if !ctx.Access() { | ||
| 430 | + for i := range cmd.Modules { | ||
| 431 | + // 字库应用于数控目前限制在3万条记录以内,在字库的应用于数控按钮上增加判断,如果超过3万条, | ||
| 432 | + // 错误提示:普通用户数据限制在3万条记录,如需使用更多数据,请联系管理员,需针对公司配置应用记录上限数值,未配置默认3万条 | ||
| 433 | + if cmd.Modules[i] == domain.ModuleDigitalCenter && table.RowCount > 30000 { | ||
| 434 | + return nil, factory.FastError(fmt.Errorf("普通用户数据限制在3万条记录,如需使用更多数据,请联系管理员,需针对公司配置应用记录上限数值,未配置默认3万条")) | ||
| 435 | + } | ||
| 436 | + } | ||
| 437 | + } | ||
| 429 | 438 | ||
| 430 | table, err = tableRepository.Save(table) | 439 | table, err = tableRepository.Save(table) |
| 431 | if err != nil { | 440 | if err != nil { |
| @@ -19,12 +19,12 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab | @@ -19,12 +19,12 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab | ||
| 19 | if err != nil { | 19 | if err != nil { |
| 20 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 20 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 21 | } | 21 | } |
| 22 | - if err := transactionContext.StartTransaction(); err != nil { | ||
| 23 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 24 | - } | ||
| 25 | - defer func() { | ||
| 26 | - transactionContext.RollbackTransaction() | ||
| 27 | - }() | 22 | + //if err := transactionContext.StartTransaction(); err != nil { |
| 23 | + // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 24 | + //} | ||
| 25 | + //defer func() { | ||
| 26 | + // transactionContext.RollbackTransaction() | ||
| 27 | + //}() | ||
| 28 | 28 | ||
| 29 | tableRepository, _, _ := factory.FastPgTable(transactionContext, 0) | 29 | tableRepository, _, _ := factory.FastPgTable(transactionContext, 0) |
| 30 | _, tables, err := tableRepository.Find(utils.ObjectToMap(searchQuery)) | 30 | _, tables, err := tableRepository.Find(utils.ObjectToMap(searchQuery)) |
| @@ -112,9 +112,9 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab | @@ -112,9 +112,9 @@ func (tableService *TableService) TableObjectSearch(searchQuery *query.SearchTab | ||
| 112 | groupItem.LoadGroup(querySetGroup) | 112 | groupItem.LoadGroup(querySetGroup) |
| 113 | response = append(response, groupItem) | 113 | response = append(response, groupItem) |
| 114 | } | 114 | } |
| 115 | - if err := transactionContext.CommitTransaction(); err != nil { | ||
| 116 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 117 | - } | 115 | + //if err := transactionContext.CommitTransaction(); err != nil { |
| 116 | + // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 117 | + //} | ||
| 118 | 118 | ||
| 119 | sort.Slice(response, func(i, j int) bool { | 119 | sort.Slice(response, func(i, j int) bool { |
| 120 | item1 := response[i] | 120 | item1 := response[i] |
| @@ -21,12 +21,12 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | @@ -21,12 +21,12 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | ||
| 21 | if err != nil { | 21 | if err != nil { |
| 22 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 22 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 23 | } | 23 | } |
| 24 | - if err := transactionContext.StartTransaction(); err != nil { | ||
| 25 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 26 | - } | ||
| 27 | - defer func() { | ||
| 28 | - transactionContext.RollbackTransaction() | ||
| 29 | - }() | 24 | + //if err := transactionContext.StartTransaction(); err != nil { |
| 25 | + // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 26 | + //} | ||
| 27 | + //defer func() { | ||
| 28 | + // transactionContext.RollbackTransaction() | ||
| 29 | + //}() | ||
| 30 | var dataTable *domain.DataTable | 30 | var dataTable *domain.DataTable |
| 31 | var table *domain.Table | 31 | var table *domain.Table |
| 32 | var cacheMiss bool | 32 | var cacheMiss bool |
| @@ -91,8 +91,8 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | @@ -91,8 +91,8 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | ||
| 91 | // 存储缓存 | 91 | // 存储缓存 |
| 92 | cache.SetDataTable(table.TableId, dataTable) | 92 | cache.SetDataTable(table.TableId, dataTable) |
| 93 | } | 93 | } |
| 94 | - if err := transactionContext.CommitTransaction(); err != nil { | ||
| 95 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 96 | - } | 94 | + //if err := transactionContext.CommitTransaction(); err != nil { |
| 95 | + // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 96 | + //} | ||
| 97 | return response, nil | 97 | return response, nil |
| 98 | } | 98 | } |
| @@ -2,6 +2,8 @@ package constant | @@ -2,6 +2,8 @@ package constant | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | 4 | "fmt" |
| 5 | + "strconv" | ||
| 6 | + "strings" | ||
| 5 | ) | 7 | ) |
| 6 | 8 | ||
| 7 | var SERVICE_NAME = "character-library-metadata-bastion" | 9 | var SERVICE_NAME = "character-library-metadata-bastion" |
| @@ -26,8 +28,9 @@ var BYTE_CORE_HOST = "http://192.168.100.34:8303" | @@ -26,8 +28,9 @@ var BYTE_CORE_HOST = "http://192.168.100.34:8303" | ||
| 26 | 28 | ||
| 27 | var AUTH_SERVER_HOST = "http://digital-platform-dev.fjmaimaimai.com" | 29 | var AUTH_SERVER_HOST = "http://digital-platform-dev.fjmaimaimai.com" |
| 28 | 30 | ||
| 29 | -var BlacklistUser int64 | ||
| 30 | -var BlackListCompany int64 | 31 | +var BLACK_LIST_USER int64 |
| 32 | +var BLACK_LIST_COMPANY int64 | ||
| 33 | +var WHITE_LIST_USERS []int | ||
| 31 | 34 | ||
| 32 | //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384} | 35 | //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384} |
| 33 | 36 | ||
| @@ -53,6 +56,12 @@ func init() { | @@ -53,6 +56,12 @@ func init() { | ||
| 53 | PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) | 56 | PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) |
| 54 | CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV | 57 | CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV |
| 55 | 58 | ||
| 56 | - BlacklistUser = Configurator.DefaultInt64("BLACK_LIST_USER", BlacklistUser) | ||
| 57 | - BlackListCompany = Configurator.DefaultInt64("BLACK_LIST_COMPANY", BlackListCompany) | 59 | + BLACK_LIST_USER = Configurator.DefaultInt64("BLACK_LIST_USER", BLACK_LIST_USER) |
| 60 | + BLACK_LIST_COMPANY = Configurator.DefaultInt64("BLACK_LIST_COMPANY", BLACK_LIST_COMPANY) | ||
| 61 | + | ||
| 62 | + whiteListUsers := strings.Split(Configurator.DefaultString("WHITE_LIST_USERS", ""), ",") | ||
| 63 | + for _, userId := range whiteListUsers { | ||
| 64 | + v, _ := strconv.Atoi(userId) | ||
| 65 | + WHITE_LIST_USERS = append(WHITE_LIST_USERS, v) | ||
| 66 | + } | ||
| 58 | } | 67 | } |
| 1 | package domain | 1 | package domain |
| 2 | 2 | ||
| 3 | +import "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/constant" | ||
| 4 | + | ||
| 3 | type Context struct { | 5 | type Context struct { |
| 4 | // 公司 | 6 | // 公司 |
| 5 | CompanyId int `json:"companyId"` | 7 | CompanyId int `json:"companyId"` |
| @@ -38,3 +40,12 @@ const ( | @@ -38,3 +40,12 @@ const ( | ||
| 38 | ContextWithLogLevel = "WithLogLevel" | 40 | ContextWithLogLevel = "WithLogLevel" |
| 39 | ContextWithLogMsg = "WithLogMsg" | 41 | ContextWithLogMsg = "WithLogMsg" |
| 40 | ) | 42 | ) |
| 43 | + | ||
| 44 | +func (c *Context) Access() bool { | ||
| 45 | + for _, userId := range constant.WHITE_LIST_USERS { | ||
| 46 | + if userId == c.OperatorId { | ||
| 47 | + return true | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + return false | ||
| 51 | +} |
| @@ -71,7 +71,7 @@ func (t *DataTable) OptionalValue(args ...string) []string { | @@ -71,7 +71,7 @@ func (t *DataTable) OptionalValue(args ...string) []string { | ||
| 71 | if len(match) > 0 && !strings.Contains(t.Data[i][0], match) { | 71 | if len(match) > 0 && !strings.Contains(t.Data[i][0], match) { |
| 72 | continue | 72 | continue |
| 73 | } | 73 | } |
| 74 | - if filedType == Float.ToString() { | 74 | + if filedType == Float.ToString() || filedType == Date.ToString() { |
| 75 | values = append(values, RoundFieldValue(&Field{SQLType: filedType}, t.Data[i][0])) | 75 | values = append(values, RoundFieldValue(&Field{SQLType: filedType}, t.Data[i][0])) |
| 76 | continue | 76 | continue |
| 77 | } | 77 | } |
| @@ -272,6 +272,10 @@ func RoundFieldValue(f *Field, v string) string { | @@ -272,6 +272,10 @@ func RoundFieldValue(f *Field, v string) string { | ||
| 272 | } | 272 | } |
| 273 | return utils.AssertString(fv) //fmt.Sprintf("%v", fv) | 273 | return utils.AssertString(fv) //fmt.Sprintf("%v", fv) |
| 274 | } | 274 | } |
| 275 | + // TODO:计算表 Count(日期)类型是日期类型,0 的话下面日期解析成当前时间,计算表类型需要修改 | ||
| 276 | + if fv, err := strconv.ParseFloat(v, 64); err == nil { | ||
| 277 | + return utils.AssertString(fv) | ||
| 278 | + } | ||
| 275 | if f.SQLType == Datetime.ToString() { | 279 | if f.SQLType == Datetime.ToString() { |
| 276 | fv, err := xtime.Parse(v) | 280 | fv, err := xtime.Parse(v) |
| 277 | if err != nil { | 281 | if err != nil { |
| @@ -336,6 +340,11 @@ func MakeToInterfaces(fields []*Field) func([]string) []interface{} { | @@ -336,6 +340,11 @@ func MakeToInterfaces(fields []*Field) func([]string) []interface{} { | ||
| 336 | if fields[i].SQLType == Float.ToString() { | 340 | if fields[i].SQLType == Float.ToString() { |
| 337 | v = RoundFieldValue(fields[i], v) | 341 | v = RoundFieldValue(fields[i], v) |
| 338 | } | 342 | } |
| 343 | + if fields[i].SQLType == Date.ToString() { | ||
| 344 | + v = RoundFieldValue(fields[i], v) | ||
| 345 | + output[i] = v | ||
| 346 | + continue | ||
| 347 | + } | ||
| 339 | convValue, err := ValueToType(v, fields[i].SQLType) | 348 | convValue, err := ValueToType(v, fields[i].SQLType) |
| 340 | if err == nil { | 349 | if err == nil { |
| 341 | output[i] = convValue | 350 | output[i] = convValue |
| @@ -140,7 +140,12 @@ func NewFormulaCalculate(table *domain.Table, queryComponent *domain.QueryCompon | @@ -140,7 +140,12 @@ func NewFormulaCalculate(table *domain.Table, queryComponent *domain.QueryCompon | ||
| 140 | } | 140 | } |
| 141 | if queryComponent.Formula != nil { | 141 | if queryComponent.Formula != nil { |
| 142 | formula := queryComponent.Formula | 142 | formula := queryComponent.Formula |
| 143 | + // res.DatabaseTableName = formula.TableFields[0].TableSqlName | ||
| 144 | + // TODO:支持常量 | ||
| 145 | + res.DatabaseTableName = "" | ||
| 146 | + if len(formula.TableFields) > 0 { | ||
| 143 | res.DatabaseTableName = formula.TableFields[0].TableSqlName | 147 | res.DatabaseTableName = formula.TableFields[0].TableSqlName |
| 148 | + } | ||
| 144 | exprSql := formula.ExprSql | 149 | exprSql := formula.ExprSql |
| 145 | if queryComponent.Formula.MixTableModel() { | 150 | if queryComponent.Formula.MixTableModel() { |
| 146 | exprSql = queryComponent.Formula.Complete() | 151 | exprSql = queryComponent.Formula.Complete() |
| @@ -153,6 +158,14 @@ func NewFormulaCalculate(table *domain.Table, queryComponent *domain.QueryCompon | @@ -153,6 +158,14 @@ func NewFormulaCalculate(table *domain.Table, queryComponent *domain.QueryCompon | ||
| 153 | CalculateFieldName: table.DataFields[0].SQLName, | 158 | CalculateFieldName: table.DataFields[0].SQLName, |
| 154 | }) | 159 | }) |
| 155 | } | 160 | } |
| 161 | + if len(queryComponent.Formula.TableFields) == 0 && len(queryComponent.Formula.ExprSql) > 0 { | ||
| 162 | + res.FormulaCalculateFields = append(res.FormulaCalculateFields, &FormulaCalculateField{ | ||
| 163 | + DatabaseTableName: "", | ||
| 164 | + FieldSchema: NewFieldSchema(domain.TableField{}), | ||
| 165 | + CalculateExpression: exprSql, | ||
| 166 | + CalculateFieldName: table.DataFields[0].SQLName, | ||
| 167 | + }) | ||
| 168 | + } | ||
| 156 | //res.FormulaCalculateFields = append(res.FormulaCalculateFields, &FormulaCalculateField{ | 169 | //res.FormulaCalculateFields = append(res.FormulaCalculateFields, &FormulaCalculateField{ |
| 157 | // DatabaseTableName: res.DatabaseTableName, | 170 | // DatabaseTableName: res.DatabaseTableName, |
| 158 | // FieldSchema: NewFieldSchemaFromField(table.DataFields[0]), | 171 | // FieldSchema: NewFieldSchemaFromField(table.DataFields[0]), |
| @@ -46,6 +46,17 @@ func (f *TemporaryFileInfo) SetFile(file *domain.File) *TemporaryFileInfo { | @@ -46,6 +46,17 @@ func (f *TemporaryFileInfo) SetFile(file *domain.File) *TemporaryFileInfo { | ||
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | func (f *TemporaryFileInfo) SetFields(fields []*domain.Field) *TemporaryFileInfo { | 48 | func (f *TemporaryFileInfo) SetFields(fields []*domain.Field) *TemporaryFileInfo { |
| 49 | + // 保留原有字段的类型(底层拆分的时候类型会变掉,无法处理,此处做特殊处理) | ||
| 50 | + for i := range fields { | ||
| 51 | + for j := range f.Fields { | ||
| 52 | + if f.Fields[j].Name == fields[i].Name { | ||
| 53 | + if f.Fields[j].SQLType != fields[i].SQLType { | ||
| 54 | + fields[i].SQLType = f.Fields[j].SQLType | ||
| 55 | + break | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + } | ||
| 49 | f.Fields = fields | 60 | f.Fields = fields |
| 50 | return f | 61 | return f |
| 51 | } | 62 | } |
| @@ -128,7 +128,7 @@ func (repository *QuerySetRepository) Remove(querySet *domain.QuerySet) (*domain | @@ -128,7 +128,7 @@ func (repository *QuerySetRepository) Remove(querySet *domain.QuerySet) (*domain | ||
| 128 | return querySet, nil | 128 | return querySet, nil |
| 129 | } | 129 | } |
| 130 | func (repository *QuerySetRepository) FindOne(queryOptions map[string]interface{}) (*domain.QuerySet, error) { | 130 | func (repository *QuerySetRepository) FindOne(queryOptions map[string]interface{}) (*domain.QuerySet, error) { |
| 131 | - tx := repository.transactionContext.PgTx | 131 | + tx := repository.transactionContext.DB() |
| 132 | querySetModel := new(models.QuerySet) | 132 | querySetModel := new(models.QuerySet) |
| 133 | query := sqlbuilder.BuildQuery(tx.Model(querySetModel), queryOptions) | 133 | query := sqlbuilder.BuildQuery(tx.Model(querySetModel), queryOptions) |
| 134 | WhereContext(query, queryOptions) | 134 | WhereContext(query, queryOptions) |
| @@ -152,7 +152,7 @@ func (repository *QuerySetRepository) FindOne(queryOptions map[string]interface{ | @@ -152,7 +152,7 @@ func (repository *QuerySetRepository) FindOne(queryOptions map[string]interface{ | ||
| 152 | } | 152 | } |
| 153 | } | 153 | } |
| 154 | func (repository *QuerySetRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.QuerySet, error) { | 154 | func (repository *QuerySetRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.QuerySet, error) { |
| 155 | - tx := repository.transactionContext.PgTx | 155 | + tx := repository.transactionContext.DB() |
| 156 | var querySetModels []*models.QuerySet | 156 | var querySetModels []*models.QuerySet |
| 157 | querySets := make([]*domain.QuerySet, 0) | 157 | querySets := make([]*domain.QuerySet, 0) |
| 158 | query := sqlbuilder.BuildQuery(tx.Model(&querySetModels), queryOptions) | 158 | query := sqlbuilder.BuildQuery(tx.Model(&querySetModels), queryOptions) |
| @@ -133,7 +133,7 @@ func (repository *TableRepository) Remove(table *domain.Table) (*domain.Table, e | @@ -133,7 +133,7 @@ func (repository *TableRepository) Remove(table *domain.Table) (*domain.Table, e | ||
| 133 | return table, nil | 133 | return table, nil |
| 134 | } | 134 | } |
| 135 | func (repository *TableRepository) FindOne(queryOptions map[string]interface{}) (*domain.Table, error) { | 135 | func (repository *TableRepository) FindOne(queryOptions map[string]interface{}) (*domain.Table, error) { |
| 136 | - tx := repository.transactionContext.PgTx | 136 | + tx := repository.transactionContext.DB() |
| 137 | tableModel := new(models.Table) | 137 | tableModel := new(models.Table) |
| 138 | query := sqlbuilder.BuildQuery(tx.Model(tableModel), queryOptions) | 138 | query := sqlbuilder.BuildQuery(tx.Model(tableModel), queryOptions) |
| 139 | WhereContext(query, queryOptions) | 139 | WhereContext(query, queryOptions) |
| @@ -161,7 +161,7 @@ func (repository *TableRepository) FindOne(queryOptions map[string]interface{}) | @@ -161,7 +161,7 @@ func (repository *TableRepository) FindOne(queryOptions map[string]interface{}) | ||
| 161 | } | 161 | } |
| 162 | } | 162 | } |
| 163 | func (repository *TableRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.Table, error) { | 163 | func (repository *TableRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.Table, error) { |
| 164 | - tx := repository.transactionContext.PgTx | 164 | + tx := repository.transactionContext.DB() |
| 165 | var tableModels []*models.Table | 165 | var tableModels []*models.Table |
| 166 | tables := make([]*domain.Table, 0) | 166 | tables := make([]*domain.Table, 0) |
| 167 | query := sqlbuilder.BuildQuery(tx.Model(&tableModels), queryOptions) | 167 | query := sqlbuilder.BuildQuery(tx.Model(&tableModels), queryOptions) |
| @@ -6,12 +6,14 @@ import ( | @@ -6,12 +6,14 @@ import ( | ||
| 6 | "github.com/beego/beego/v2/server/web" | 6 | "github.com/beego/beego/v2/server/web" |
| 7 | "github.com/beego/beego/v2/server/web/context" | 7 | "github.com/beego/beego/v2/server/web/context" |
| 8 | "github.com/linmadan/egglib-go/web/beego/filters" | 8 | "github.com/linmadan/egglib-go/web/beego/filters" |
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/constant" | ||
| 9 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" | 10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" |
| 10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/controllers" | 11 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/controllers" |
| 11 | "net/http" | 12 | "net/http" |
| 12 | "os" | 13 | "os" |
| 13 | "strconv" | 14 | "strconv" |
| 14 | "strings" | 15 | "strings" |
| 16 | + "time" | ||
| 15 | 17 | ||
| 16 | . "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log" | 18 | . "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log" |
| 17 | _ "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/routers" | 19 | _ "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/routers" |
| @@ -24,6 +26,7 @@ func init() { | @@ -24,6 +26,7 @@ func init() { | ||
| 24 | web.BConfig.Listen.HTTPPort = 8080 | 26 | web.BConfig.Listen.HTTPPort = 8080 |
| 25 | web.BConfig.Listen.EnableAdmin = false | 27 | web.BConfig.Listen.EnableAdmin = false |
| 26 | web.BConfig.WebConfig.CommentRouterPath = "/pkg/port/beego/routers" | 28 | web.BConfig.WebConfig.CommentRouterPath = "/pkg/port/beego/routers" |
| 29 | + web.BConfig.Log.AccessLogs = true | ||
| 27 | if os.Getenv("RUN_MODE") != "" { | 30 | if os.Getenv("RUN_MODE") != "" { |
| 28 | web.BConfig.RunMode = os.Getenv("RUN_MODE") | 31 | web.BConfig.RunMode = os.Getenv("RUN_MODE") |
| 29 | } | 32 | } |
| @@ -53,14 +56,18 @@ func init() { | @@ -53,14 +56,18 @@ func init() { | ||
| 53 | 56 | ||
| 54 | web.InsertFilter("/*", web.BeforeRouter, filters.AllowCors()) | 57 | web.InsertFilter("/*", web.BeforeRouter, filters.AllowCors()) |
| 55 | web.InsertFilter("/*", web.BeforeRouter, JwtFilter()) | 58 | web.InsertFilter("/*", web.BeforeRouter, JwtFilter()) |
| 59 | + web.InsertFilter("/*", web.BeforeRouter, RequestCostBefore()) | ||
| 56 | web.InsertFilter("/*", web.BeforeExec, controllers.BlacklistFilter(controllers.BlacklistRouters)) | 60 | web.InsertFilter("/*", web.BeforeExec, controllers.BlacklistFilter(controllers.BlacklistRouters)) |
| 57 | web.InsertFilter("/*", web.BeforeExec, CreateRequestLogFilter(true)) // filters.CreateRequstLogFilter(Logger) | 61 | web.InsertFilter("/*", web.BeforeExec, CreateRequestLogFilter(true)) // filters.CreateRequstLogFilter(Logger) |
| 62 | + if constant.SERVICE_ENV == "dev" { //|| web.BConfig.RunMode =="test" | ||
| 58 | web.InsertFilter("/*", web.AfterExec, filters.CreateResponseLogFilter(Logger), web.WithReturnOnOutput(false)) | 63 | web.InsertFilter("/*", web.AfterExec, filters.CreateResponseLogFilter(Logger), web.WithReturnOnOutput(false)) |
| 64 | + } | ||
| 65 | + web.InsertFilter("/*", web.AfterExec, RequestCostAfter(150), web.WithReturnOnOutput(false)) | ||
| 59 | } | 66 | } |
| 60 | 67 | ||
| 61 | func CreateRequestLogFilter(console bool) func(ctx *context.Context) { | 68 | func CreateRequestLogFilter(console bool) func(ctx *context.Context) { |
| 62 | return func(ctx *context.Context) { | 69 | return func(ctx *context.Context) { |
| 63 | - msg := fmt.Sprintf("beego | %v | %v \n %v", ctx.Input.Method(), ctx.Input.URL(), string(ctx.Input.RequestBody)) | 70 | + msg := fmt.Sprintf("beego | %v | %v | %v \n %v", ctx.Input.Method(), strings.Split(ctx.Request.RemoteAddr, ":")[0], ctx.Input.URL(), string(ctx.Input.RequestBody)) |
| 64 | logs.Debug(msg) | 71 | logs.Debug(msg) |
| 65 | if console { | 72 | if console { |
| 66 | fmt.Println(msg) | 73 | fmt.Println(msg) |
| @@ -89,3 +96,23 @@ func JwtFilter() func(ctx *context.Context) { | @@ -89,3 +96,23 @@ func JwtFilter() func(ctx *context.Context) { | ||
| 89 | } | 96 | } |
| 90 | } | 97 | } |
| 91 | } | 98 | } |
| 99 | +func RequestCostBefore() func(ctx *context.Context) { | ||
| 100 | + return func(ctx *context.Context) { | ||
| 101 | + ctx.Input.SetData("cost-begin", time.Now().UnixMilli()) | ||
| 102 | + } | ||
| 103 | +} | ||
| 104 | + | ||
| 105 | +func RequestCostAfter(maxCost int64) func(ctx *context.Context) { | ||
| 106 | + return func(ctx *context.Context) { | ||
| 107 | + t := ctx.Input.GetData("cost-begin") | ||
| 108 | + if t != nil { | ||
| 109 | + costBegin := t.(int64) | ||
| 110 | + costEnd := time.Now().UnixMilli() | ||
| 111 | + cost := costEnd - costBegin | ||
| 112 | + if cost > 0 && maxCost > 0 && cost > maxCost { | ||
| 113 | + msg := fmt.Sprintf("beego | %v | %v | %v | 耗时:%v \n %v", ctx.Input.Method(), strings.Split(ctx.Request.RemoteAddr, ":")[0], ctx.Input.URL(), time.Duration(cost)*time.Millisecond, string(ctx.Input.RequestBody)) | ||
| 114 | + logs.Warn(msg) | ||
| 115 | + } | ||
| 116 | + } | ||
| 117 | + } | ||
| 118 | +} |
| @@ -129,9 +129,9 @@ func BlacklistFilter(black map[string]bool) func(ctx *context.Context) { | @@ -129,9 +129,9 @@ func BlacklistFilter(black map[string]bool) func(ctx *context.Context) { | ||
| 129 | if !ok { | 129 | if !ok { |
| 130 | return | 130 | return |
| 131 | } | 131 | } |
| 132 | - if userToken.UserId > 0 && userToken.UserId == constant.BlacklistUser { | 132 | + if userToken.UserId > 0 && userToken.UserId == constant.BLACK_LIST_USER { |
| 133 | goto CheckBlackList | 133 | goto CheckBlackList |
| 134 | - } else if userToken.CompanyId > 0 && userToken.UserId == 0 && userToken.CompanyId == constant.BlackListCompany { | 134 | + } else if userToken.CompanyId > 0 && userToken.UserId == 0 && userToken.CompanyId == constant.BLACK_LIST_COMPANY { |
| 135 | goto CheckBlackList | 135 | goto CheckBlackList |
| 136 | } else { | 136 | } else { |
| 137 | return | 137 | return |
-
请 注册 或 登录 后发表评论