正在显示
31 个修改的文件
包含
470 行增加
和
8 行删除
| @@ -18,3 +18,6 @@ STARROCKS_USER = root | @@ -18,3 +18,6 @@ STARROCKS_USER = root | ||
| 18 | STARROCKS_PASSWORD = eagle1010 | 18 | STARROCKS_PASSWORD = eagle1010 |
| 19 | STARROCKS_HOST = 220.250.41.79 | 19 | STARROCKS_HOST = 220.250.41.79 |
| 20 | STARROCKS_PORT = 9030 | 20 | STARROCKS_PORT = 9030 |
| 21 | + | ||
| 22 | +BLACK_LIST_USER = 0 | ||
| 23 | +BLACK_LIST_COMPANY = 1612991734952759296 |
| @@ -113,6 +113,10 @@ spec: | @@ -113,6 +113,10 @@ spec: | ||
| 113 | value: "root" | 113 | value: "root" |
| 114 | - name: STARROCKS_PASSWORD | 114 | - name: STARROCKS_PASSWORD |
| 115 | value: "eagle1010" | 115 | value: "eagle1010" |
| 116 | + - name: BLACK_LIST_USER | ||
| 117 | + value: "1" | ||
| 118 | + - name: BLACK_LIST_COMPANY | ||
| 119 | + value: "1646025721363042304" | ||
| 116 | volumes: | 120 | volumes: |
| 117 | - name: accesslogs | 121 | - name: accesslogs |
| 118 | emptyDir: {} | 122 | emptyDir: {} |
| 1 | package service | 1 | package service |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 4 | "github.com/linmadan/egglib-go/core/application" | 6 | "github.com/linmadan/egglib-go/core/application" |
| 5 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | 7 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" |
| 6 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/application/event/command" | 8 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/application/event/command" |
| @@ -10,6 +12,7 @@ import ( | @@ -10,6 +12,7 @@ import ( | ||
| 10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" | 12 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" |
| 11 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/cache" | 13 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/cache" |
| 12 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/domainService" | 14 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/domainService" |
| 15 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log" | ||
| 13 | ) | 16 | ) |
| 14 | 17 | ||
| 15 | type TableEventService struct { | 18 | type TableEventService struct { |
| @@ -68,6 +71,62 @@ func (tableEventService *TableEventService) Handler(ctx *domain.Context, cmd *co | @@ -68,6 +71,62 @@ func (tableEventService *TableEventService) Handler(ctx *domain.Context, cmd *co | ||
| 68 | return nil, nil | 71 | return nil, nil |
| 69 | } | 72 | } |
| 70 | 73 | ||
| 74 | +func (tableEventService *TableEventService) HandlerTableAffectedMarkToConflictStatus(ctx *domain.Context, cmd *command.TableEventCommand) (interface{}, error) { | ||
| 75 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 76 | + if err != nil { | ||
| 77 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 78 | + } | ||
| 79 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 80 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 81 | + } | ||
| 82 | + defer func() { | ||
| 83 | + transactionContext.RollbackTransaction() | ||
| 84 | + }() | ||
| 85 | + | ||
| 86 | + data := cmd.EventTable | ||
| 87 | + tableId := 0 | ||
| 88 | + switch data.Type { | ||
| 89 | + case domain.TableDataEditEvent: | ||
| 90 | + tableId = data.Table.TableId | ||
| 91 | + case domain.QuerySetUpdateEvent, domain.QuerySetUpdateRenameEvent: | ||
| 92 | + tableId = data.QuerySet.QuerySetInfo.BindTableId | ||
| 93 | + default: | ||
| 94 | + return nil, err | ||
| 95 | + } | ||
| 96 | + if tableId == 0 { | ||
| 97 | + return nil, nil | ||
| 98 | + } | ||
| 99 | + // tableId 相关联的 | ||
| 100 | + tableRepository, _, _ := factory.FastPgTable(transactionContext, 0) | ||
| 101 | + | ||
| 102 | + _, tables, err := tableRepository.Find(map[string]interface{}{"context": ctx, "dependencyTable": tableId, "tableTypesNotIn": []string{domain.TemporaryTable.ToString()}}) | ||
| 103 | + if errors.Is(err, domain.ErrorNotFound) { | ||
| 104 | + return nil, nil | ||
| 105 | + } | ||
| 106 | + tableIds := make([]int, 0) | ||
| 107 | + for _, table := range tables { | ||
| 108 | + tableIds = append(tableIds, table.TableId) | ||
| 109 | + } | ||
| 110 | + if len(tableIds) == 0 { | ||
| 111 | + return nil, nil | ||
| 112 | + } | ||
| 113 | + querySetRepository, _, _ := factory.FastPgQuerySet(transactionContext, 0) | ||
| 114 | + _, querySets, _ := querySetRepository.Find(map[string]interface{}{"context": ctx, "bindTableIds": tableIds}) | ||
| 115 | + for _, querySet := range querySets { | ||
| 116 | + log.Logger.Debug(fmt.Sprintf("【集合状态更新】 id:%v name:%v ReadyStatus:1", querySet.QuerySetId, querySet.Name)) | ||
| 117 | + querySet.QuerySetInfo.WithConflictStatus() | ||
| 118 | + _, err = querySetRepository.Save(querySet) | ||
| 119 | + if err != nil { | ||
| 120 | + return nil, err | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 125 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 126 | + } | ||
| 127 | + return nil, nil | ||
| 128 | +} | ||
| 129 | + | ||
| 71 | func NewTableEventService(options map[string]interface{}) *TableEventService { | 130 | func NewTableEventService(options map[string]interface{}) *TableEventService { |
| 72 | svr := &TableEventService{} | 131 | svr := &TableEventService{} |
| 73 | return svr | 132 | return svr |
| @@ -12,6 +12,18 @@ func FastError(err error) error { | @@ -12,6 +12,18 @@ func FastError(err error) error { | ||
| 12 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 12 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | +func FastErrorResponse(err error, args ...interface{}) interface{} { | ||
| 16 | + var response = make(map[string]interface{}) | ||
| 17 | + response["internalErr"] = err.Error() | ||
| 18 | + for i := 0; i < len(args); i += 2 { | ||
| 19 | + if i+1 >= len(args) { | ||
| 20 | + break | ||
| 21 | + } | ||
| 22 | + response[args[i].(string)] = args[i+1] | ||
| 23 | + } | ||
| 24 | + return response | ||
| 25 | +} | ||
| 26 | + | ||
| 15 | func FastDataTable(options starrocks.QueryOptions) (*domain.DataTable, error) { | 27 | func FastDataTable(options starrocks.QueryOptions) (*domain.DataTable, error) { |
| 16 | var err error | 28 | var err error |
| 17 | // 待优化分批下载,压缩 | 29 | // 待优化分批下载,压缩 |
| @@ -109,12 +109,13 @@ func (fileService *FileService) GetFile(ctx *domain.Context, getFileQuery *query | @@ -109,12 +109,13 @@ func (fileService *FileService) GetFile(ctx *domain.Context, getFileQuery *query | ||
| 109 | options["fileId"] = getFileQuery.FileId | 109 | options["fileId"] = getFileQuery.FileId |
| 110 | } | 110 | } |
| 111 | if len(getFileQuery.FileName) > 0 { | 111 | if len(getFileQuery.FileName) > 0 { |
| 112 | - options["fileName"] = getFileQuery.FileName | 112 | + options["fileName"] = domain.FileName(getFileQuery.FileName) |
| 113 | } | 113 | } |
| 114 | if len(getFileQuery.FileType) > 0 { | 114 | if len(getFileQuery.FileType) > 0 { |
| 115 | options["fileType"] = getFileQuery.FileType | 115 | options["fileType"] = getFileQuery.FileType |
| 116 | } | 116 | } |
| 117 | - if len(options) == 0 { | 117 | + // 未传递参数 |
| 118 | + if len(options) == 1 { | ||
| 118 | return response, nil | 119 | return response, nil |
| 119 | } | 120 | } |
| 120 | file, _ := fileRepository.FindOne(options) | 121 | file, _ := fileRepository.FindOne(options) |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "reflect" | ||
| 6 | + "strings" | ||
| 7 | + | ||
| 8 | + "github.com/beego/beego/v2/core/validation" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +type RefreshQuerySetCommand struct { | ||
| 12 | + // 查询集合ID | ||
| 13 | + QuerySetId int `cname:"查询集合ID" json:"querySetId" valid:"Required"` | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +func (updateQuerySetCommand *RefreshQuerySetCommand) Valid(validation *validation.Validation) { | ||
| 17 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (updateQuerySetCommand *RefreshQuerySetCommand) ValidateCommand() error { | ||
| 21 | + valid := validation.Validation{} | ||
| 22 | + b, err := valid.Valid(updateQuerySetCommand) | ||
| 23 | + if err != nil { | ||
| 24 | + return err | ||
| 25 | + } | ||
| 26 | + if !b { | ||
| 27 | + elem := reflect.TypeOf(updateQuerySetCommand).Elem() | ||
| 28 | + for _, validErr := range valid.Errors { | ||
| 29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
| 30 | + if isExist { | ||
| 31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
| 32 | + } else { | ||
| 33 | + return fmt.Errorf(validErr.Message) | ||
| 34 | + } | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | + return nil | ||
| 38 | +} |
| @@ -15,6 +15,8 @@ type QuerySetDetailDto struct { | @@ -15,6 +15,8 @@ type QuerySetDetailDto struct { | ||
| 15 | QueryComponents []*domain.QueryComponent `json:"queryComponents"` | 15 | QueryComponents []*domain.QueryComponent `json:"queryComponents"` |
| 16 | // 查询集绑定的表 | 16 | // 查询集绑定的表 |
| 17 | TableId int `json:"tableId"` | 17 | TableId int `json:"tableId"` |
| 18 | + // 在冲突状态 true:冲突异常 false:正常 | ||
| 19 | + InConflict bool `json:"inConflict"` | ||
| 18 | } | 20 | } |
| 19 | 21 | ||
| 20 | func (d *QuerySetDetailDto) Load(m *domain.QuerySet, mapTables map[int]*domain.Table) *QuerySetDetailDto { | 22 | func (d *QuerySetDetailDto) Load(m *domain.QuerySet, mapTables map[int]*domain.Table) *QuerySetDetailDto { |
| @@ -26,15 +28,31 @@ func (d *QuerySetDetailDto) Load(m *domain.QuerySet, mapTables map[int]*domain.T | @@ -26,15 +28,31 @@ func (d *QuerySetDetailDto) Load(m *domain.QuerySet, mapTables map[int]*domain.T | ||
| 26 | if m.QuerySetInfo != nil { | 28 | if m.QuerySetInfo != nil { |
| 27 | d.TableId = m.QuerySetInfo.BindTableId | 29 | d.TableId = m.QuerySetInfo.BindTableId |
| 28 | } | 30 | } |
| 31 | + hasUpdateTable := false | ||
| 29 | for i, q := range d.QueryComponents { | 32 | for i, q := range d.QueryComponents { |
| 30 | if q.MasterTable != nil && q.MasterTable.TableId != 0 { | 33 | if q.MasterTable != nil && q.MasterTable.TableId != 0 { |
| 31 | if t, ok := mapTables[q.MasterTable.TableId]; ok { | 34 | if t, ok := mapTables[q.MasterTable.TableId]; ok { |
| 32 | d.QueryComponents[i].MasterTable = domain.NewQueryComponentTable(t) | 35 | d.QueryComponents[i].MasterTable = domain.NewQueryComponentTable(t) |
| 36 | + d.QueryComponents[i].UpdateTables(t) | ||
| 37 | + hasUpdateTable = true | ||
| 33 | } | 38 | } |
| 34 | } | 39 | } |
| 35 | if d.QueryComponents[i].Aggregation != nil { | 40 | if d.QueryComponents[i].Aggregation != nil { |
| 36 | d.QueryComponents[i].Aggregation.Aggregation.AllFields = d.QueryComponents[i].Aggregation.AggregationFields() | 41 | d.QueryComponents[i].Aggregation.Aggregation.AllFields = d.QueryComponents[i].Aggregation.AggregationFields() |
| 37 | } | 42 | } |
| 43 | + if !hasUpdateTable && len(mapTables) == 1 { | ||
| 44 | + for _, t := range mapTables { | ||
| 45 | + d.QueryComponents[i].UpdateTables(t) | ||
| 46 | + hasUpdateTable = true | ||
| 47 | + break | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + d.InConflict = false | ||
| 52 | + if m.QuerySetInfo != nil { | ||
| 53 | + if m.QuerySetInfo.ReadyStatus == 1 { | ||
| 54 | + d.InConflict = true | ||
| 55 | + } | ||
| 38 | } | 56 | } |
| 39 | return d | 57 | return d |
| 40 | } | 58 | } |
| @@ -21,6 +21,8 @@ type QuerySetDto struct { | @@ -21,6 +21,8 @@ type QuerySetDto struct { | ||
| 21 | Time string `json:"time"` | 21 | Time string `json:"time"` |
| 22 | // 绑定的表ID | 22 | // 绑定的表ID |
| 23 | BindTableId int `json:"tableId"` | 23 | BindTableId int `json:"tableId"` |
| 24 | + // 在冲突状态 true:冲突异常 false:正常 | ||
| 25 | + InConflict bool `json:"inConflict"` | ||
| 24 | } | 26 | } |
| 25 | 27 | ||
| 26 | func (d *QuerySetDto) Load(m *domain.QuerySet) *QuerySetDto { | 28 | func (d *QuerySetDto) Load(m *domain.QuerySet) *QuerySetDto { |
| @@ -33,6 +35,7 @@ func (d *QuerySetDto) Load(m *domain.QuerySet) *QuerySetDto { | @@ -33,6 +35,7 @@ func (d *QuerySetDto) Load(m *domain.QuerySet) *QuerySetDto { | ||
| 33 | d.Sort = m.Sort | 35 | d.Sort = m.Sort |
| 34 | d.Time = m.CreatedAt.Local().Format("2006-01-02 15:04:05") | 36 | d.Time = m.CreatedAt.Local().Format("2006-01-02 15:04:05") |
| 35 | d.BindTableId = m.QuerySetInfo.BindTableId | 37 | d.BindTableId = m.QuerySetInfo.BindTableId |
| 38 | + d.InConflict = m.QuerySetInfo.ReadyStatus == 1 | ||
| 36 | return d | 39 | return d |
| 37 | } | 40 | } |
| 38 | 41 |
| @@ -396,6 +396,36 @@ func (querySetService *QuerySetService) UpdateQuerySet(ctx *domain.Context, upda | @@ -396,6 +396,36 @@ func (querySetService *QuerySetService) UpdateQuerySet(ctx *domain.Context, upda | ||
| 396 | return struct{}{}, nil | 396 | return struct{}{}, nil |
| 397 | } | 397 | } |
| 398 | 398 | ||
| 399 | +// 更新查询集合服务 | ||
| 400 | +func (querySetService *QuerySetService) RefreshQuerySet(ctx *domain.Context, updateQuerySetCommand *command.RefreshQuerySetCommand) (interface{}, error) { | ||
| 401 | + if err := updateQuerySetCommand.ValidateCommand(); err != nil { | ||
| 402 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 403 | + } | ||
| 404 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 405 | + if err != nil { | ||
| 406 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 407 | + } | ||
| 408 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 409 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 410 | + } | ||
| 411 | + defer func() { | ||
| 412 | + transactionContext.RollbackTransaction() | ||
| 413 | + }() | ||
| 414 | + svr, _ := factory.FastQuerySetServices(transactionContext) | ||
| 415 | + _, querySet, err := factory.FastPgQuerySet(transactionContext, updateQuerySetCommand.QuerySetId) | ||
| 416 | + if err != nil { | ||
| 417 | + return nil, factory.FastError(err) | ||
| 418 | + } | ||
| 419 | + if err := svr.Update(ctx, updateQuerySetCommand.QuerySetId, querySet.QueryComponents); err != nil { | ||
| 420 | + return factory.FastErrorResponse(err, "title", fmt.Sprintf("%v:%v", domain.EnumsDescription(domain.ObjectTypeMap, querySet.Type), querySet.Name), "result", "更新失败"), nil | ||
| 421 | + } | ||
| 422 | + | ||
| 423 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 424 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 425 | + } | ||
| 426 | + return struct{}{}, nil | ||
| 427 | +} | ||
| 428 | + | ||
| 399 | func (querySetService *QuerySetService) PreviewPrepare(ctx *domain.Context, updateQuerySetCommand *command.UpdateQuerySetCommand) (interface{}, error) { | 429 | func (querySetService *QuerySetService) PreviewPrepare(ctx *domain.Context, updateQuerySetCommand *command.UpdateQuerySetCommand) (interface{}, error) { |
| 400 | if err := updateQuerySetCommand.ValidateCommand(); err != nil { | 430 | if err := updateQuerySetCommand.ValidateCommand(); err != nil { |
| 401 | return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | 431 | return nil, application.ThrowError(application.ARG_ERROR, err.Error()) |
| @@ -23,6 +23,8 @@ type TableObjectDto struct { | @@ -23,6 +23,8 @@ type TableObjectDto struct { | ||
| 23 | Flag string `json:"flag,omitempty"` | 23 | Flag string `json:"flag,omitempty"` |
| 24 | // 启用状态 | 24 | // 启用状态 |
| 25 | Status int `json:"status"` | 25 | Status int `json:"status"` |
| 26 | + // 冲突状态 | ||
| 27 | + InConflict bool `json:"inConflict"` | ||
| 26 | // 表字段 | 28 | // 表字段 |
| 27 | Fields []*domain.Field `json:"fields"` | 29 | Fields []*domain.Field `json:"fields"` |
| 28 | } | 30 | } |
| @@ -61,6 +63,10 @@ func (d *TableObjectDto) Update(m *domain.QuerySet) *TableObjectDto { | @@ -61,6 +63,10 @@ func (d *TableObjectDto) Update(m *domain.QuerySet) *TableObjectDto { | ||
| 61 | d.Flag = m.Flag | 63 | d.Flag = m.Flag |
| 62 | d.Status = m.Status | 64 | d.Status = m.Status |
| 63 | d.ParentId = m.ParentId | 65 | d.ParentId = m.ParentId |
| 66 | + d.InConflict = false | ||
| 67 | + if m.QuerySetInfo != nil { | ||
| 68 | + d.InConflict = m.QuerySetInfo.ReadyStatus == 1 | ||
| 69 | + } | ||
| 64 | return d | 70 | return d |
| 65 | } | 71 | } |
| 66 | 72 |
| @@ -362,13 +362,14 @@ func (tableService *TableService) UpdateTableStruct(ctx *domain.Context, cmd *co | @@ -362,13 +362,14 @@ func (tableService *TableService) UpdateTableStruct(ctx *domain.Context, cmd *co | ||
| 362 | }() | 362 | }() |
| 363 | 363 | ||
| 364 | UpdateTableStructService, _ := factory.CreateUpdateTableStructService(transactionContext) | 364 | UpdateTableStructService, _ := factory.CreateUpdateTableStructService(transactionContext) |
| 365 | - if _, err := UpdateTableStructService.UpdateTableStruct(ctx, cmd.TableId, cmd.Fields, cmd.Name); err != nil { | 365 | + response, err := UpdateTableStructService.UpdateTableStruct(ctx, cmd.TableId, cmd.Fields, cmd.Name) |
| 366 | + if err != nil { | ||
| 366 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 367 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 367 | } | 368 | } |
| 368 | if err := transactionContext.CommitTransaction(); err != nil { | 369 | if err := transactionContext.CommitTransaction(); err != nil { |
| 369 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 370 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 370 | } | 371 | } |
| 371 | - return struct{}{}, nil | 372 | + return response, nil |
| 372 | } | 373 | } |
| 373 | 374 | ||
| 374 | // 更新表服务 | 375 | // 更新表服务 |
| 1 | +package service | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/linmadan/egglib-go/core/application" | ||
| 5 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/application/factory" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/application/table/query" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/domainService" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +func (tableService *TableService) DependencyGraph(ctx *domain.Context, cmd *query.GetTableQuery) (interface{}, error) { | ||
| 13 | + if err := cmd.ValidateQuery(); err != nil { | ||
| 14 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 15 | + } | ||
| 16 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 17 | + if err != nil { | ||
| 18 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 19 | + } | ||
| 20 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 21 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 22 | + } | ||
| 23 | + defer func() { | ||
| 24 | + transactionContext.RollbackTransaction() | ||
| 25 | + }() | ||
| 26 | + response, err := domainService.DependencyTables(transactionContext.(*pgTransaction.TransactionContext), ctx, cmd.TableId) | ||
| 27 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 28 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 29 | + } | ||
| 30 | + return map[string]interface{}{ | ||
| 31 | + "nodes": response, | ||
| 32 | + }, nil | ||
| 33 | +} |
| @@ -15,7 +15,7 @@ var PPROF_ON = true | @@ -15,7 +15,7 @@ var PPROF_ON = true | ||
| 15 | //天联共创基础模块 | 15 | //天联共创基础模块 |
| 16 | //var ALLIED_CREATION_BASIC_HOST = "http://localhost:8080" //"http://allied-creation-basic-dev.fjmaimaimai.com" | 16 | //var ALLIED_CREATION_BASIC_HOST = "http://localhost:8080" //"http://allied-creation-basic-dev.fjmaimaimai.com" |
| 17 | 17 | ||
| 18 | -//天联共创用户模块 | 18 | +// 天联共创用户模块 |
| 19 | var ALLIED_CREATION_USER_HOST = "http://localhost:8081" //"http://allied-creation-user-dev.fjmaimaimai.com" | 19 | var ALLIED_CREATION_USER_HOST = "http://localhost:8081" //"http://allied-creation-user-dev.fjmaimaimai.com" |
| 20 | 20 | ||
| 21 | var MMM_BYTE_BANK_HOST = "http://220.250.41.79:8301" | 21 | var MMM_BYTE_BANK_HOST = "http://220.250.41.79:8301" |
| @@ -26,6 +26,9 @@ var BYTE_CORE_HOST = "http://192.168.100.34:8303" | @@ -26,6 +26,9 @@ 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 BlacklistUser int64 | ||
| 30 | +var BlackListCompany int64 | ||
| 31 | + | ||
| 29 | //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384} | 32 | //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384} |
| 30 | 33 | ||
| 31 | //const CUSTOMER_ACCOUNT_DELIMITER = "," | 34 | //const CUSTOMER_ACCOUNT_DELIMITER = "," |
| @@ -49,4 +52,7 @@ func init() { | @@ -49,4 +52,7 @@ func init() { | ||
| 49 | SERVICE_NAME = fmt.Sprintf("%v-%v", SERVICE_NAME, SERVICE_ENV) | 52 | SERVICE_NAME = fmt.Sprintf("%v-%v", SERVICE_NAME, SERVICE_ENV) |
| 50 | PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) | 53 | PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) |
| 51 | CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV | 54 | CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV |
| 55 | + | ||
| 56 | + BlacklistUser = Configurator.DefaultInt64("BLACK_LIST_USER", BlacklistUser) | ||
| 57 | + BlackListCompany = Configurator.DefaultInt64("BLACK_LIST_COMPANY", BlackListCompany) | ||
| 52 | } | 58 | } |
| @@ -13,6 +13,7 @@ const ( | @@ -13,6 +13,7 @@ const ( | ||
| 13 | TableDataImportEvent EventType = "table.data.import" | 13 | TableDataImportEvent EventType = "table.data.import" |
| 14 | TableDeleteEvent EventType = "table.delete" | 14 | TableDeleteEvent EventType = "table.delete" |
| 15 | QuerySetUpdateEvent EventType = "table.query.set.update" | 15 | QuerySetUpdateEvent EventType = "table.query.set.update" |
| 16 | + QuerySetUpdateRenameEvent EventType = "table.query.set.update.rename" | ||
| 16 | ) | 17 | ) |
| 17 | 18 | ||
| 18 | type EventTable struct { | 19 | type EventTable struct { |
| @@ -272,6 +272,20 @@ func RoundFieldValue(f *Field, v string) string { | @@ -272,6 +272,20 @@ 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 | + if f.SQLType == Datetime.ToString() { | ||
| 276 | + fv, err := xtime.Parse(v) | ||
| 277 | + if err != nil { | ||
| 278 | + return v | ||
| 279 | + } | ||
| 280 | + return fv.Format("2006-01-02 15:04:05") | ||
| 281 | + } | ||
| 282 | + if f.SQLType == Date.ToString() { | ||
| 283 | + fv, err := xtime.Parse(v) | ||
| 284 | + if err != nil { | ||
| 285 | + return v | ||
| 286 | + } | ||
| 287 | + return fv.Format("2006-01-02") | ||
| 288 | + } | ||
| 275 | return v | 289 | return v |
| 276 | //if f.SQLType != DECIMALV2.ToString() { | 290 | //if f.SQLType != DECIMALV2.ToString() { |
| 277 | // return v | 291 | // return v |
| @@ -77,6 +77,7 @@ func (querySet *QuerySet) Update(queryComponents []*QueryComponent, tableId int) | @@ -77,6 +77,7 @@ func (querySet *QuerySet) Update(queryComponents []*QueryComponent, tableId int) | ||
| 77 | if querySet.QuerySetInfo.BindTableId == 0 { | 77 | if querySet.QuerySetInfo.BindTableId == 0 { |
| 78 | querySet.QuerySetInfo.BindTableId = tableId | 78 | querySet.QuerySetInfo.BindTableId = tableId |
| 79 | } | 79 | } |
| 80 | + querySet.QuerySetInfo.ResolveConflictStatus() | ||
| 80 | querySet.UpdatedAt = time.Now() | 81 | querySet.UpdatedAt = time.Now() |
| 81 | return nil | 82 | return nil |
| 82 | } | 83 | } |
| @@ -38,7 +38,7 @@ type QueryComponent struct { | @@ -38,7 +38,7 @@ type QueryComponent struct { | ||
| 38 | Layout *LayoutRule `json:"layout"` | 38 | Layout *LayoutRule `json:"layout"` |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | -func (qc QueryComponent) AllSelectExpr() []SelectExpr { | 41 | +func (qc *QueryComponent) AllSelectExpr() []SelectExpr { |
| 42 | var res = make([]SelectExpr, 0) | 42 | var res = make([]SelectExpr, 0) |
| 43 | for _, s := range qc.Selects { | 43 | for _, s := range qc.Selects { |
| 44 | res = append(res, s.SelectExpr) | 44 | res = append(res, s.SelectExpr) |
| @@ -113,6 +113,24 @@ func (expr *FieldExpr) Complete() string { | @@ -113,6 +113,24 @@ func (expr *FieldExpr) Complete() string { | ||
| 113 | return exprSql | 113 | return exprSql |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | +func (expr *FieldExpr) UpdateTable(t *Table) { | ||
| 117 | + if t == nil || t.TableId == 0 { | ||
| 118 | + return | ||
| 119 | + } | ||
| 120 | + matchTableName := "" | ||
| 121 | + for i, f := range expr.TableFields { | ||
| 122 | + if f.TableId == t.TableId { | ||
| 123 | + matchTableName = f.TableName | ||
| 124 | + if f.TableId == t.TableId { | ||
| 125 | + expr.TableFields[i].TableName = t.Name | ||
| 126 | + } | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | + if len(matchTableName) > 0 { | ||
| 130 | + expr.ExprHuman = strings.ReplaceAll(expr.ExprHuman, matchTableName, t.Name) | ||
| 131 | + } | ||
| 132 | +} | ||
| 133 | + | ||
| 116 | func (expr *FieldExpr) Tables() []int { | 134 | func (expr *FieldExpr) Tables() []int { |
| 117 | set := collection.NewSet() | 135 | set := collection.NewSet() |
| 118 | for _, f := range expr.TableFields { | 136 | for _, f := range expr.TableFields { |
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +func (qc *QueryComponent) UpdateTables(tables ...*Table) { | ||
| 4 | + for _, table := range tables { | ||
| 5 | + qc.updateTable(table) | ||
| 6 | + } | ||
| 7 | +} | ||
| 8 | +func (qc *QueryComponent) updateTable(table *Table) { | ||
| 9 | + for i := range qc.Conditions { | ||
| 10 | + qc.Conditions[i].FieldLeft.UpdateTable(table) | ||
| 11 | + qc.Conditions[i].FieldRight.UpdateTable(table) | ||
| 12 | + } | ||
| 13 | + for i := range qc.Selects { | ||
| 14 | + qc.Selects[i].FieldLeft.UpdateTable(table) | ||
| 15 | + qc.Selects[i].FieldRight.UpdateTable(table) | ||
| 16 | + for j := range qc.Selects[i].SubSelects { | ||
| 17 | + qc.Selects[i].SubSelects[j].FieldLeft.UpdateTable(table) | ||
| 18 | + qc.Selects[i].SubSelects[j].FieldRight.UpdateTable(table) | ||
| 19 | + } | ||
| 20 | + } | ||
| 21 | + if qc.Formula != nil && len(qc.Formula.ExprHuman) > 0 { | ||
| 22 | + qc.Formula.FieldExpr.UpdateTable(table) | ||
| 23 | + } | ||
| 24 | + if qc.Aggregation != nil { | ||
| 25 | + for i := range qc.Aggregation.RowFields { | ||
| 26 | + qc.Aggregation.RowFields[i].Expr.UpdateTable(table) | ||
| 27 | + } | ||
| 28 | + for i := range qc.Aggregation.ValueFields { | ||
| 29 | + qc.Aggregation.ValueFields[i].Expr.UpdateTable(table) | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | + if qc.Layout != nil { | ||
| 33 | + for i := range qc.Layout.Cells { | ||
| 34 | + if qc.Layout.Cells[i].Data == nil || qc.Layout.Cells[i].Data.TableField == nil { | ||
| 35 | + continue | ||
| 36 | + } | ||
| 37 | + if qc.Layout.Cells[i].Data.TableField.TableId == table.TableId { | ||
| 38 | + qc.Layout.Cells[i].Data.TableField.TableName = table.Name | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | +} |
| @@ -2,4 +2,13 @@ package domain | @@ -2,4 +2,13 @@ package domain | ||
| 2 | 2 | ||
| 3 | type QuerySetInfo struct { | 3 | type QuerySetInfo struct { |
| 4 | BindTableId int // 查询集绑定的表 | 4 | BindTableId int // 查询集绑定的表 |
| 5 | + ReadyStatus int // 准备状态 0:正常 1:冲突状态 | ||
| 6 | +} | ||
| 7 | + | ||
| 8 | +func (q *QuerySetInfo) WithConflictStatus() { | ||
| 9 | + q.ReadyStatus = 1 | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +func (q *QuerySetInfo) ResolveConflictStatus() { | ||
| 13 | + q.ReadyStatus = 0 | ||
| 5 | } | 14 | } |
| @@ -78,7 +78,7 @@ func (ptr *FlushDataTableService) flushSourceFile(ctx *domain.Context, table *do | @@ -78,7 +78,7 @@ func (ptr *FlushDataTableService) flushSourceFile(ctx *domain.Context, table *do | ||
| 78 | if file, err = fileRepository.Save(file); err != nil { | 78 | if file, err = fileRepository.Save(file); err != nil { |
| 79 | return err | 79 | return err |
| 80 | } | 80 | } |
| 81 | - _, files, err := fileRepository.Find(map[string]interface{}{"context": ctx, "sourceFileId": sourceFile.FileId, "fileType": domain.VerifiedFile.ToString(), "notInFileIds": []int{file.FileId}}) | 81 | + _, files, err := fileRepository.Find(map[string]interface{}{"context": ctx, "equalFileName": sourceFile.FileInfo.Name, "fileType": domain.VerifiedFile.ToString(), "notInFileIds": []int{file.FileId}}) |
| 82 | if err != nil { | 82 | if err != nil { |
| 83 | return err | 83 | return err |
| 84 | } | 84 | } |
| @@ -878,7 +878,7 @@ func (ptr *QuerySetService) Rename(ctx *domain.Context, querySetId int, name str | @@ -878,7 +878,7 @@ func (ptr *QuerySetService) Rename(ctx *domain.Context, querySetId int, name str | ||
| 878 | return ErrQuerySetNameExists | 878 | return ErrQuerySetNameExists |
| 879 | } | 879 | } |
| 880 | qs.Name = name | 880 | qs.Name = name |
| 881 | - _, err = querySetRepository.Save(qs) | 881 | + qs, err = querySetRepository.Save(qs) |
| 882 | if err != nil { | 882 | if err != nil { |
| 883 | return err | 883 | return err |
| 884 | } | 884 | } |
| @@ -896,6 +896,9 @@ func (ptr *QuerySetService) Rename(ctx *domain.Context, querySetId int, name str | @@ -896,6 +896,9 @@ func (ptr *QuerySetService) Rename(ctx *domain.Context, querySetId int, name str | ||
| 896 | return err | 896 | return err |
| 897 | } | 897 | } |
| 898 | } | 898 | } |
| 899 | + defer func() { | ||
| 900 | + AsyncEvent(domain.NewEventTable(ctx, domain.QuerySetUpdateRenameEvent).WithQuerySet(qs)) | ||
| 901 | + }() | ||
| 899 | // 日志 | 902 | // 日志 |
| 900 | if err = FastLog(ptr.transactionContext, domain.QuerySetLog, qs.QuerySetId, &RenameQuerySetLog{ | 903 | if err = FastLog(ptr.transactionContext, domain.QuerySetLog, qs.QuerySetId, &RenameQuerySetLog{ |
| 901 | LogEntry: domain.NewLogEntry(qs.Name, qs.Type, domain.UnKnown, ctx), | 904 | LogEntry: domain.NewLogEntry(qs.Name, qs.Type, domain.UnKnown, ctx), |
| @@ -3,8 +3,10 @@ package domainService | @@ -3,8 +3,10 @@ package domainService | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | 4 | "fmt" |
| 5 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | 5 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" |
| 6 | + "github.com/zeromicro/go-zero/core/collection" | ||
| 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" |
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/utils" | ||
| 8 | "time" | 10 | "time" |
| 9 | ) | 11 | ) |
| 10 | 12 | ||
| @@ -78,9 +80,66 @@ func (ptr *UpdateTableStructService) UpdateTableStruct(ctx *domain.Context, tabl | @@ -78,9 +80,66 @@ func (ptr *UpdateTableStructService) UpdateTableStruct(ctx *domain.Context, tabl | ||
| 78 | if _, err = ByteCore.SplitTable(domain.ReqSplitTable{FromTable: mainTable, ToSubTable: table}); err != nil { | 80 | if _, err = ByteCore.SplitTable(domain.ReqSplitTable{FromTable: mainTable, ToSubTable: table}); err != nil { |
| 79 | return nil, err | 81 | return nil, err |
| 80 | } | 82 | } |
| 83 | + //var tablesAffected []TableNode | ||
| 84 | + //if len(adds) > 0 { | ||
| 85 | + // tablesAffected, _ = DependencyTables(ptr.transactionContext, ctx, tableId) | ||
| 86 | + //} | ||
| 87 | + //return map[string]interface{}{ | ||
| 88 | + // "tablesAffected": tablesAffected, | ||
| 89 | + //}, nil | ||
| 81 | return struct{}{}, nil | 90 | return struct{}{}, nil |
| 82 | } | 91 | } |
| 83 | 92 | ||
| 93 | +func DependencyTables(ptr *pgTransaction.TransactionContext, context *domain.Context, tableId int) ([]TableNode, error) { | ||
| 94 | + ret := make([]TableNode, 0) | ||
| 95 | + // tableId 相关联的 | ||
| 96 | + tableRepository, _ := repository.NewTableRepository(ptr) | ||
| 97 | + _, tables, err := tableRepository.Find(map[string]interface{}{"context": context, "tableTypesNotIn": []string{domain.TemporaryTable.ToString(), domain.ExcelTable.ToString()}}) | ||
| 98 | + if err != nil { | ||
| 99 | + return nil, err | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + tableDependencyService, _ := NewTableDependencyService(ptr) | ||
| 103 | + tableDependTree := tableDependencyService.TableDependTree(tables, tableId) | ||
| 104 | + set := collection.NewSet() | ||
| 105 | + stack := utils.NewEmptyStack() | ||
| 106 | + list := make([]int, 0) | ||
| 107 | + stack.Push(tableId) | ||
| 108 | + for { | ||
| 109 | + item := stack.Pop() | ||
| 110 | + if item == nil { | ||
| 111 | + break | ||
| 112 | + } | ||
| 113 | + id := item.(int) | ||
| 114 | + for _, edge := range tableDependTree.Edges { | ||
| 115 | + if edge.DependChildId == id { | ||
| 116 | + stack.Push(edge.Id) | ||
| 117 | + if !set.Contains(edge.Id) { | ||
| 118 | + set.Add(edge.Id) | ||
| 119 | + list = append(list, edge.Id) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + if len(list) > 0 { | ||
| 125 | + querySetRepository, _ := repository.NewQuerySetRepository(ptr) | ||
| 126 | + _, querySets, _ := querySetRepository.Find(map[string]interface{}{"context": context, "bindTableIds": list}) | ||
| 127 | + for _, id := range list { | ||
| 128 | + if v, ok := tableDependencyService.TableMap[id]; ok { | ||
| 129 | + node := NewTableNode(v) | ||
| 130 | + for _, q := range querySets { | ||
| 131 | + if q.QuerySetInfo.BindTableId == node.TableId { | ||
| 132 | + node.QuerySetId = q.QuerySetId | ||
| 133 | + break | ||
| 134 | + } | ||
| 135 | + } | ||
| 136 | + ret = append(ret, node) | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return ret, nil | ||
| 141 | +} | ||
| 142 | + | ||
| 84 | //func MappingFields(mainTable *domain.Table, fields []*domain.Field) []*domain.Field { | 143 | //func MappingFields(mainTable *domain.Table, fields []*domain.Field) []*domain.Field { |
| 85 | // tableFields := mainTable.Fields(false) | 144 | // tableFields := mainTable.Fields(false) |
| 86 | // tableFieldsMap := (domain.Fields)(tableFields).ToMap() | 145 | // tableFieldsMap := (domain.Fields)(tableFields).ToMap() |
| @@ -144,6 +144,9 @@ func (repository *FileRepository) Find(queryOptions map[string]interface{}) (int | @@ -144,6 +144,9 @@ func (repository *FileRepository) Find(queryOptions map[string]interface{}) (int | ||
| 144 | if v, ok := queryOptions["updatedAtEnd"]; ok && !v.(time.Time).IsZero() { | 144 | if v, ok := queryOptions["updatedAtEnd"]; ok && !v.(time.Time).IsZero() { |
| 145 | query.Where(`updated_at<?`, v.(time.Time)) | 145 | query.Where(`updated_at<?`, v.(time.Time)) |
| 146 | } | 146 | } |
| 147 | + if v, ok := queryOptions["equalFileName"]; ok && len(v.(string)) > 0 { | ||
| 148 | + query.Where(`file_info->>'name' = ?`, v) | ||
| 149 | + } | ||
| 147 | query.SetOffsetAndLimit(20) | 150 | query.SetOffsetAndLimit(20) |
| 148 | query.SetOrderDirect("updated_at", "DESC") | 151 | query.SetOrderDirect("updated_at", "DESC") |
| 149 | if count, err := query.SelectAndCount(); err != nil { | 152 | if count, err := query.SelectAndCount(); err != nil { |
| @@ -7,6 +7,7 @@ import ( | @@ -7,6 +7,7 @@ import ( | ||
| 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/domain" | 9 | "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" | ||
| 10 | "net/http" | 11 | "net/http" |
| 11 | "os" | 12 | "os" |
| 12 | "strconv" | 13 | "strconv" |
| @@ -52,6 +53,7 @@ func init() { | @@ -52,6 +53,7 @@ func init() { | ||
| 52 | 53 | ||
| 53 | web.InsertFilter("/*", web.BeforeRouter, filters.AllowCors()) | 54 | web.InsertFilter("/*", web.BeforeRouter, filters.AllowCors()) |
| 54 | web.InsertFilter("/*", web.BeforeRouter, JwtFilter()) | 55 | web.InsertFilter("/*", web.BeforeRouter, JwtFilter()) |
| 56 | + web.InsertFilter("/*", web.BeforeExec, controllers.BlacklistFilter(controllers.BlacklistRouters)) | ||
| 55 | web.InsertFilter("/*", web.BeforeExec, CreateRequestLogFilter(true)) // filters.CreateRequstLogFilter(Logger) | 57 | web.InsertFilter("/*", web.BeforeExec, CreateRequestLogFilter(true)) // filters.CreateRequstLogFilter(Logger) |
| 56 | web.InsertFilter("/*", web.AfterExec, filters.CreateResponseLogFilter(Logger), web.WithReturnOnOutput(false)) | 58 | web.InsertFilter("/*", web.AfterExec, filters.CreateResponseLogFilter(Logger), web.WithReturnOnOutput(false)) |
| 57 | } | 59 | } |
| @@ -9,7 +9,9 @@ import ( | @@ -9,7 +9,9 @@ import ( | ||
| 9 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/api/authlib" | 9 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/api/authlib" |
| 10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/cache" | 10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/cache" |
| 11 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log" | 11 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log" |
| 12 | + "net/http" | ||
| 12 | "strconv" | 13 | "strconv" |
| 14 | + "strings" | ||
| 13 | ) | 15 | ) |
| 14 | 16 | ||
| 15 | func ResponseGrid(c beego.BaseController, total int64, data interface{}, err error) { | 17 | func ResponseGrid(c beego.BaseController, total int64, data interface{}, err error) { |
| @@ -94,3 +96,74 @@ func header(c beego.BaseController, key string) int { | @@ -94,3 +96,74 @@ func header(c beego.BaseController, key string) int { | ||
| 94 | } | 96 | } |
| 95 | return res | 97 | return res |
| 96 | } | 98 | } |
| 99 | + | ||
| 100 | +var BlacklistRouters = map[string]bool{ | ||
| 101 | + "/data/files": true, | ||
| 102 | + "/data/edit-data-table": true, | ||
| 103 | + "/data/flush-data-table": true, | ||
| 104 | + "/data/generate-main-table": true, | ||
| 105 | + "/data/append-data-to-table": true, | ||
| 106 | + "/data/tables/copy-data-table": true, | ||
| 107 | + "/data/tables/apply-on": true, | ||
| 108 | + "/data/tables/add-sub-table": true, | ||
| 109 | + "/data/tables/row-edit": true, | ||
| 110 | + "/data/mapping-rules": true, | ||
| 111 | + | ||
| 112 | + "/data/query-sets": true, | ||
| 113 | + "/data/query-sets/copy": true, | ||
| 114 | + "/data/query-sets/move": true, | ||
| 115 | + "/data/query-sets/rename": true, | ||
| 116 | + "/data/query-sets/change-status": true, | ||
| 117 | + | ||
| 118 | + "/data/query-sets/formula": true, | ||
| 119 | + "/data/query-sets/formula/change-status": true, | ||
| 120 | + "/data/query-sets/formula/move": true, | ||
| 121 | + "/data/query-sets/formula/copy": true, | ||
| 122 | + "/data/query-sets/formula/rename": true, | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +func BlacklistFilter(black map[string]bool) func(ctx *context.Context) { | ||
| 126 | + return func(ctx *context.Context) { | ||
| 127 | + if token := ctx.Input.GetData("UserToken"); token != nil { | ||
| 128 | + userToken, ok := token.(*domain.UserToken) | ||
| 129 | + if !ok { | ||
| 130 | + return | ||
| 131 | + } | ||
| 132 | + if userToken.UserId > 0 && userToken.UserId == constant.BlacklistUser { | ||
| 133 | + goto CheckBlackList | ||
| 134 | + } else if userToken.CompanyId > 0 && userToken.UserId == 0 && userToken.CompanyId == constant.BlackListCompany { | ||
| 135 | + goto CheckBlackList | ||
| 136 | + } else { | ||
| 137 | + return | ||
| 138 | + } | ||
| 139 | + CheckBlackList: | ||
| 140 | + var notAllow = false | ||
| 141 | + defer func() { | ||
| 142 | + if notAllow { | ||
| 143 | + ctx.Output.SetStatus(http.StatusOK) | ||
| 144 | + ctx.Output.JSON(map[string]interface{}{ | ||
| 145 | + "msg": "测试账户不允许修改数据", | ||
| 146 | + "code": 801, | ||
| 147 | + "data": struct{}{}, | ||
| 148 | + }, false, false) | ||
| 149 | + } | ||
| 150 | + }() | ||
| 151 | + if ctx.Request.Method == http.MethodDelete || ctx.Request.Method == http.MethodPut { | ||
| 152 | + notAllow = true | ||
| 153 | + return | ||
| 154 | + } | ||
| 155 | + url := ctx.Request.URL.Path | ||
| 156 | + if v, ok := black[url]; ok && v { | ||
| 157 | + notAllow = true | ||
| 158 | + return | ||
| 159 | + } | ||
| 160 | + if strings.HasSuffix(url, "/") { | ||
| 161 | + url = strings.TrimSuffix(url, "/") | ||
| 162 | + } | ||
| 163 | + if v, ok := black[url]; ok && v { | ||
| 164 | + notAllow = true | ||
| 165 | + return | ||
| 166 | + } | ||
| 167 | + } | ||
| 168 | + } | ||
| 169 | +} |
| @@ -29,6 +29,14 @@ func (controller *QuerySetController) UpdateQuerySet() { | @@ -29,6 +29,14 @@ func (controller *QuerySetController) UpdateQuerySet() { | ||
| 29 | controller.Response(data, err) | 29 | controller.Response(data, err) |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | +func (controller *QuerySetController) RefreshQuerySet() { | ||
| 33 | + querySetService := service.NewQuerySetService(nil) | ||
| 34 | + updateQuerySetCommand := &command.RefreshQuerySetCommand{} | ||
| 35 | + Must(controller.Unmarshal(updateQuerySetCommand)) | ||
| 36 | + data, err := querySetService.RefreshQuerySet(ParseContext(controller.BaseController), updateQuerySetCommand) | ||
| 37 | + controller.Response(data, err) | ||
| 38 | +} | ||
| 39 | + | ||
| 32 | func (controller *QuerySetController) PreviewPrepare() { | 40 | func (controller *QuerySetController) PreviewPrepare() { |
| 33 | querySetService := service.NewQuerySetService(nil) | 41 | querySetService := service.NewQuerySetService(nil) |
| 34 | updateQuerySetCommand := &command.UpdateQuerySetCommand{} | 42 | updateQuerySetCommand := &command.UpdateQuerySetCommand{} |
| @@ -276,3 +276,11 @@ func (controller *TableController) RowEdit() { | @@ -276,3 +276,11 @@ func (controller *TableController) RowEdit() { | ||
| 276 | data, err := tableService.RowEditV2(ParseContext(controller.BaseController), cmd) | 276 | data, err := tableService.RowEditV2(ParseContext(controller.BaseController), cmd) |
| 277 | controller.Response(data, err) | 277 | controller.Response(data, err) |
| 278 | } | 278 | } |
| 279 | + | ||
| 280 | +func (controller *TableController) DependencyGraph() { | ||
| 281 | + tableService := service.NewTableService(nil) | ||
| 282 | + updateTableCommand := &query.GetTableQuery{} | ||
| 283 | + controller.Unmarshal(updateTableCommand) | ||
| 284 | + data, err := tableService.DependencyGraph(ParseContext(controller.BaseController), updateTableCommand) | ||
| 285 | + controller.Response(data, err) | ||
| 286 | +} |
| @@ -19,6 +19,7 @@ func init() { | @@ -19,6 +19,7 @@ func init() { | ||
| 19 | web.Router("/data/query-sets/rename", &controllers.QuerySetController{}, "Post:Rename") | 19 | web.Router("/data/query-sets/rename", &controllers.QuerySetController{}, "Post:Rename") |
| 20 | web.Router("/data/query-sets/search", &controllers.QuerySetController{}, "Post:SearchQuerySet") | 20 | web.Router("/data/query-sets/search", &controllers.QuerySetController{}, "Post:SearchQuerySet") |
| 21 | web.Router("/data/query-sets/preview-prepare", &controllers.QuerySetController{}, "Post:PreviewPrepare") | 21 | web.Router("/data/query-sets/preview-prepare", &controllers.QuerySetController{}, "Post:PreviewPrepare") |
| 22 | + web.Router("/data/query-sets/refresh", &controllers.QuerySetController{}, "Post:RefreshQuerySet") | ||
| 22 | 23 | ||
| 23 | web.Router("/data/query-sets/formula/", &controllers.QuerySetController{}, "Post:CreateQuerySet") | 24 | web.Router("/data/query-sets/formula/", &controllers.QuerySetController{}, "Post:CreateQuerySet") |
| 24 | web.Router("/data/query-sets/formula/:querySetId", &controllers.QuerySetController{}, "Put:UpdateQuerySet") | 25 | web.Router("/data/query-sets/formula/:querySetId", &controllers.QuerySetController{}, "Put:UpdateQuerySet") |
| @@ -21,6 +21,7 @@ func init() { | @@ -21,6 +21,7 @@ func init() { | ||
| 21 | web.Router("/data/tables/search-appended-list", &controllers.TableController{}, "Post:SearchAppendedList") | 21 | web.Router("/data/tables/search-appended-list", &controllers.TableController{}, "Post:SearchAppendedList") |
| 22 | web.Router("/data/tables/search-sub-table-list", &controllers.TableController{}, "Post:SearchSubTableList") | 22 | web.Router("/data/tables/search-sub-table-list", &controllers.TableController{}, "Post:SearchSubTableList") |
| 23 | web.Router("/data/tables/search-query-set-tables", &controllers.TableController{}, "Post:SearchQuerySetTables") | 23 | web.Router("/data/tables/search-query-set-tables", &controllers.TableController{}, "Post:SearchQuerySetTables") |
| 24 | + web.Router("/data/tables/dependency-graph", &controllers.TableController{}, "Post:DependencyGraph") | ||
| 24 | 25 | ||
| 25 | //web.Router("/data/tables/split-data-table", &controllers.TableController{}, "Post:SplitDataTable") | 26 | //web.Router("/data/tables/split-data-table", &controllers.TableController{}, "Post:SplitDataTable") |
| 26 | //web.Router("/data/tables/batch-edit-sub-table", &controllers.TableController{}, "Post:BatchEditSubTable") | 27 | //web.Router("/data/tables/batch-edit-sub-table", &controllers.TableController{}, "Post:BatchEditSubTable") |
| @@ -14,4 +14,5 @@ func RegisterEvent() { | @@ -14,4 +14,5 @@ func RegisterEvent() { | ||
| 14 | event.On(domain.TableDataImportEvent.ToString(), event.ListenerFunc(tableDataChangeHandler), event.High) | 14 | event.On(domain.TableDataImportEvent.ToString(), event.ListenerFunc(tableDataChangeHandler), event.High) |
| 15 | event.On(domain.TableDeleteEvent.ToString(), event.ListenerFunc(tableDataChangeHandler), event.High) | 15 | event.On(domain.TableDeleteEvent.ToString(), event.ListenerFunc(tableDataChangeHandler), event.High) |
| 16 | event.On(domain.QuerySetUpdateEvent.ToString(), event.ListenerFunc(tableDataChangeHandler), event.High) | 16 | event.On(domain.QuerySetUpdateEvent.ToString(), event.ListenerFunc(tableDataChangeHandler), event.High) |
| 17 | + event.On(domain.QuerySetUpdateRenameEvent.ToString(), event.ListenerFunc(tableDataChangeHandler), event.High) | ||
| 17 | } | 18 | } |
| @@ -14,5 +14,9 @@ func tableDataChangeHandler(e event.Event) error { | @@ -14,5 +14,9 @@ func tableDataChangeHandler(e event.Event) error { | ||
| 14 | _, err := svr.Handler(nil, &command.TableEventCommand{ | 14 | _, err := svr.Handler(nil, &command.TableEventCommand{ |
| 15 | EventTable: et, | 15 | EventTable: et, |
| 16 | }) | 16 | }) |
| 17 | + | ||
| 18 | + svr.HandlerTableAffectedMarkToConflictStatus(et.Context, &command.TableEventCommand{ | ||
| 19 | + EventTable: et, | ||
| 20 | + }) | ||
| 17 | return err | 21 | return err |
| 18 | } | 22 | } |
-
请 注册 或 登录 后发表评论