正在显示
8 个修改的文件
包含
84 行增加
和
2 行删除
@@ -212,6 +212,33 @@ func (fileService *FileService) AppendDataToTable(ctx *domain.Context, cmd *comm | @@ -212,6 +212,33 @@ func (fileService *FileService) AppendDataToTable(ctx *domain.Context, cmd *comm | ||
212 | return result, nil | 212 | return result, nil |
213 | } | 213 | } |
214 | 214 | ||
215 | +// AppendDataToTable 追加数据 | ||
216 | +func (fileService *FileService) AppendDataToTablePreflightCheck(ctx *domain.Context, cmd *command.AppendDataToTableCommand) (interface{}, error) { | ||
217 | + if err := cmd.ValidateCommand(); err != nil { | ||
218 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
219 | + } | ||
220 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
221 | + if err != nil { | ||
222 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
223 | + } | ||
224 | + if err := transactionContext.StartTransaction(); err != nil { | ||
225 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
226 | + } | ||
227 | + defer func() { | ||
228 | + transactionContext.RollbackTransaction() | ||
229 | + }() | ||
230 | + | ||
231 | + generateMainTableService, _ := factory.CreateAppendDataToTableService(transactionContext) | ||
232 | + result, err := generateMainTableService.PreflightCheck(ctx, cmd.FileId, cmd.TableId, cmd.MappingFields) | ||
233 | + if err != nil { | ||
234 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
235 | + } | ||
236 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
237 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
238 | + } | ||
239 | + return result, nil | ||
240 | +} | ||
241 | + | ||
215 | // ExportFile 文件下载 | 242 | // ExportFile 文件下载 |
216 | func (fileService *FileService) ExportFile(ctx *domain.Context, cmd *command.ExportFileCommand) (interface{}, error) { | 243 | func (fileService *FileService) ExportFile(ctx *domain.Context, cmd *command.ExportFileCommand) (interface{}, error) { |
217 | if err := cmd.ValidateCommand(); err != nil { | 244 | if err := cmd.ValidateCommand(); err != nil { |
@@ -50,6 +50,7 @@ type DeleteDataTableService interface { | @@ -50,6 +50,7 @@ type DeleteDataTableService interface { | ||
50 | 50 | ||
51 | type AppendDataToTableService interface { | 51 | type AppendDataToTableService interface { |
52 | AppendData(ctx *Context, fileId int, tableId int, mappingFields []*MappingField) (interface{}, error) | 52 | AppendData(ctx *Context, fileId int, tableId int, mappingFields []*MappingField) (interface{}, error) |
53 | + PreflightCheck(ctx *Context, fileId int, tableId int, mappingFields []*MappingField) (interface{}, error) | ||
53 | } | 54 | } |
54 | 55 | ||
55 | /************************************/ | 56 | /************************************/ |
@@ -18,6 +18,8 @@ type LogEntry struct { | @@ -18,6 +18,8 @@ type LogEntry struct { | ||
18 | Level string `json:"level"` | 18 | Level string `json:"level"` |
19 | // 日志时间 | 19 | // 日志时间 |
20 | LogTime string `json:"logTime"` | 20 | LogTime string `json:"logTime"` |
21 | + // 追加文件ID (操作类型 主表生成、数据导入时有效) | ||
22 | + AppendFileId int `json:"appendFileId,omitempty"` | ||
21 | // 错误信息 | 23 | // 错误信息 |
22 | Error string `json:"error"` | 24 | Error string `json:"error"` |
23 | ctx *Context `json:"-"` | 25 | ctx *Context `json:"-"` |
@@ -40,6 +42,11 @@ func (l LogEntry) OperateType() string { | @@ -40,6 +42,11 @@ func (l LogEntry) OperateType() string { | ||
40 | return l.OperationType | 42 | return l.OperationType |
41 | } | 43 | } |
42 | 44 | ||
45 | +func (l *LogEntry) WithAppendFileId(fileId int) LogEntry { | ||
46 | + l.AppendFileId = fileId | ||
47 | + return *l | ||
48 | +} | ||
49 | + | ||
43 | func NewLogEntry(fileOrTableName string, objectType string, operationType OperationType, ctx *Context) LogEntry { | 50 | func NewLogEntry(fileOrTableName string, objectType string, operationType OperationType, ctx *Context) LogEntry { |
44 | return LogEntry{ | 51 | return LogEntry{ |
45 | ObjectName: fileOrTableName, | 52 | ObjectName: fileOrTableName, |
@@ -37,8 +37,9 @@ func (ptr *GenerateMainTableService) GenerateTable(ctx *domain.Context, fileId i | @@ -37,8 +37,9 @@ func (ptr *GenerateMainTableService) GenerateTable(ctx *domain.Context, fileId i | ||
37 | return nil, err | 37 | return nil, err |
38 | } | 38 | } |
39 | // 日志 | 39 | // 日志 |
40 | + entry := domain.NewLogEntry(tableName, domain.MainTable.ToString(), domain.GenerateMainTable, ctx) | ||
40 | if err = FastLog(ptr.transactionContext, domain.CommonLog, mainTable.TableId, &GenerateMainTableLog{ | 41 | if err = FastLog(ptr.transactionContext, domain.CommonLog, mainTable.TableId, &GenerateMainTableLog{ |
41 | - LogEntry: domain.NewLogEntry(tableName, domain.MainTable.ToString(), domain.GenerateMainTable, ctx), | 42 | + LogEntry: (&entry).WithAppendFileId(file.FileId), |
42 | FileName: file.FileInfo.Name, | 43 | FileName: file.FileInfo.Name, |
43 | }); err != nil { | 44 | }); err != nil { |
44 | return nil, err | 45 | return nil, err |
@@ -49,8 +49,9 @@ func (ptr *AppendDataToTableService) AppendData(ctx *domain.Context, fileId int, | @@ -49,8 +49,9 @@ func (ptr *AppendDataToTableService) AppendData(ctx *domain.Context, fileId int, | ||
49 | } | 49 | } |
50 | 50 | ||
51 | // 日志 | 51 | // 日志 |
52 | + entry := domain.NewLogEntry(table.Name, domain.MainTable.ToString(), domain.AppendData, ctx) | ||
52 | if err = FastLog(ptr.transactionContext, domain.CommonLog, table.TableId, &AppendDataToTableLog{ | 53 | if err = FastLog(ptr.transactionContext, domain.CommonLog, table.TableId, &AppendDataToTableLog{ |
53 | - LogEntry: domain.NewLogEntry(table.Name, domain.MainTable.ToString(), domain.AppendData, ctx), | 54 | + LogEntry: (&entry).WithAppendFileId(fileId), |
54 | File: file, | 55 | File: file, |
55 | Table: table, | 56 | Table: table, |
56 | SubTables: subTables, | 57 | SubTables: subTables, |
@@ -90,6 +91,39 @@ func (ptr *AppendDataToTableService) AppendData(ctx *domain.Context, fileId int, | @@ -90,6 +91,39 @@ func (ptr *AppendDataToTableService) AppendData(ctx *domain.Context, fileId int, | ||
90 | }, nil | 91 | }, nil |
91 | } | 92 | } |
92 | 93 | ||
94 | +// PreflightCheck 预检 | ||
95 | +func (ptr *AppendDataToTableService) PreflightCheck(ctx *domain.Context, fileId int, tableId int, mappingFields []*domain.MappingField) (interface{}, error) { | ||
96 | + tableRepository, _ := repository.NewTableRepository(ptr.transactionContext) | ||
97 | + table, err := tableRepository.FindOne(map[string]interface{}{"tableId": tableId}) | ||
98 | + if err != nil { | ||
99 | + return nil, fmt.Errorf("表不存在") | ||
100 | + } | ||
101 | + inSourceId := []int{table.TableId} | ||
102 | + if table.ParentId != 0 { | ||
103 | + inSourceId = append(inSourceId, table.ParentId) | ||
104 | + } | ||
105 | + logRepository, _ := repository.NewLogRepository(ptr.transactionContext) | ||
106 | + _, logs, err := logRepository.Find(map[string]interface{}{ | ||
107 | + "inSourceId": inSourceId, | ||
108 | + "inOperationType": []string{domain.GenerateMainTable.ToString(), domain.AppendData.ToString()}, | ||
109 | + "limit": 500, | ||
110 | + }) | ||
111 | + if err != nil { | ||
112 | + return nil, err | ||
113 | + } | ||
114 | + | ||
115 | + for _, log := range logs { | ||
116 | + if log.Entry.AppendFileId == fileId { | ||
117 | + return map[string]interface{}{ | ||
118 | + "fileAppended": true, | ||
119 | + }, nil | ||
120 | + } | ||
121 | + } | ||
122 | + return map[string]interface{}{ | ||
123 | + "fileAppended": false, | ||
124 | + }, nil | ||
125 | +} | ||
126 | + | ||
93 | func NewAppendDataToTableService(transactionContext *pgTransaction.TransactionContext) (*AppendDataToTableService, error) { | 127 | func NewAppendDataToTableService(transactionContext *pgTransaction.TransactionContext) (*AppendDataToTableService, error) { |
94 | if transactionContext == nil { | 128 | if transactionContext == nil { |
95 | return nil, fmt.Errorf("transactionContext参数不能为nil") | 129 | return nil, fmt.Errorf("transactionContext参数不能为nil") |
@@ -144,6 +144,9 @@ func (repository *LogRepository) Find(queryOptions map[string]interface{}) (int6 | @@ -144,6 +144,9 @@ func (repository *LogRepository) Find(queryOptions map[string]interface{}) (int6 | ||
144 | if v, ok := queryOptions["inSourceId"]; ok && len(v.([]int)) > 0 { | 144 | if v, ok := queryOptions["inSourceId"]; ok && len(v.([]int)) > 0 { |
145 | query.Where("source_id in (?)", pg.In(v.([]int))) | 145 | query.Where("source_id in (?)", pg.In(v.([]int))) |
146 | } | 146 | } |
147 | + if v, ok := queryOptions["inOperationType"]; ok && len(v.([]string)) > 0 { | ||
148 | + query.Where("entry->>'operationType' in (?)", pg.In(v.([]string))) | ||
149 | + } | ||
147 | if v, ok := queryOptions["matchContent"]; ok && len(v.(string)) > 0 { | 150 | if v, ok := queryOptions["matchContent"]; ok && len(v.(string)) > 0 { |
148 | query.WhereGroup(func(query *orm.Query) (*orm.Query, error) { | 151 | query.WhereGroup(func(query *orm.Query) (*orm.Query, error) { |
149 | matchContent := v.(string) | 152 | matchContent := v.(string) |
@@ -138,6 +138,14 @@ func (controller *FileController) AppendDataToTable() { | @@ -138,6 +138,14 @@ func (controller *FileController) AppendDataToTable() { | ||
138 | controller.Response(data, err) | 138 | controller.Response(data, err) |
139 | } | 139 | } |
140 | 140 | ||
141 | +func (controller *FileController) AppendDataToTablePreflightCheck() { | ||
142 | + fileService := service.NewFileService(nil) | ||
143 | + cmd := &command.AppendDataToTableCommand{} | ||
144 | + controller.Unmarshal(cmd) | ||
145 | + data, err := fileService.AppendDataToTablePreflightCheck(ParseContext(controller.BaseController), cmd) | ||
146 | + controller.Response(data, err) | ||
147 | +} | ||
148 | + | ||
141 | func (controller *FileController) CancelVerifyingFile() { | 149 | func (controller *FileController) CancelVerifyingFile() { |
142 | fileService := service.NewFileService(nil) | 150 | fileService := service.NewFileService(nil) |
143 | cmd := &command.CancelVerifyingFileCommand{} | 151 | cmd := &command.CancelVerifyingFileCommand{} |
@@ -24,4 +24,5 @@ func init() { | @@ -24,4 +24,5 @@ func init() { | ||
24 | web.Router("/data/flush-data-table", &controllers.FileController{}, "Post:FlushDataTable") | 24 | web.Router("/data/flush-data-table", &controllers.FileController{}, "Post:FlushDataTable") |
25 | web.Router("/data/generate-main-table", &controllers.FileController{}, "Post:GenerateMainTable") | 25 | web.Router("/data/generate-main-table", &controllers.FileController{}, "Post:GenerateMainTable") |
26 | web.Router("/data/append-data-to-table", &controllers.FileController{}, "Post:AppendDataToTable") | 26 | web.Router("/data/append-data-to-table", &controllers.FileController{}, "Post:AppendDataToTable") |
27 | + web.Router("/data/append-data-preflight-check", &controllers.FileController{}, "Post:AppendDataToTablePreflightCheck") | ||
27 | } | 28 | } |
-
请 注册 或 登录 后发表评论