作者 yangfu

Merge branch 'test'

@@ -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 }
@@ -9,10 +9,11 @@ func (et EventType) ToString() string { @@ -9,10 +9,11 @@ func (et EventType) ToString() string {
9 } 9 }
10 10
11 const ( 11 const (
12 - TableDataEditEvent EventType = "table.data.edit"  
13 - TableDataImportEvent EventType = "table.data.import"  
14 - TableDeleteEvent EventType = "table.delete"  
15 - QuerySetUpdateEvent EventType = "table.query.set.update" 12 + TableDataEditEvent EventType = "table.data.edit"
  13 + TableDataImportEvent EventType = "table.data.import"
  14 + TableDeleteEvent EventType = "table.delete"
  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 }