收口审计治理与套餐任务进展
Constraint: 在线热修前必须保存当前迭代分支全部有效代码进展 Confidence: medium Scope-risk: broad Directive: 后续修改需保持审计事件与业务事务边界一致 Tested: git diff --cached --check Not-tested: 未运行全量测试,提交用于切换分支前保存既有工作
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
"github.com/hibiken/asynq"
|
||||
|
||||
"github.com/break/junhong_cmp_fiber/internal/infrastructure/audit"
|
||||
"github.com/break/junhong_cmp_fiber/internal/model"
|
||||
"github.com/break/junhong_cmp_fiber/internal/model/dto"
|
||||
"github.com/break/junhong_cmp_fiber/internal/store/postgres"
|
||||
@@ -26,17 +27,24 @@ type deviceBatchAllocationRow struct {
|
||||
|
||||
func (h *DeviceImportHandler) handleDeviceBatchAllocation(ctx context.Context, task *model.DeviceImportTask) error {
|
||||
if h.allocationExecutor == nil || (task.OperationType != constants.DeviceImportOperationRecall && (task.TargetID == nil || *task.TargetID == 0)) {
|
||||
_ = h.importTaskStore.UpdateStatus(ctx, task.ID, model.ImportTaskStatusFailed, "设备CSV批量执行器或目标未配置")
|
||||
if err := h.finishDeviceImportTask(ctx, task, 0, 0, 1, model.ImportTaskStatusFailed, "设备CSV批量执行器或目标未配置"); err != nil {
|
||||
return err
|
||||
}
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
rows, err := h.downloadDeviceBatchAllocationCSV(ctx, task)
|
||||
if err != nil {
|
||||
_ = h.importTaskStore.UpdateStatus(ctx, task.ID, model.ImportTaskStatusFailed, err.Error())
|
||||
if finishErr := h.finishDeviceImportTask(ctx, task, 0, 0, 1, model.ImportTaskStatusFailed, err.Error()); finishErr != nil {
|
||||
return finishErr
|
||||
}
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
task.TotalCount = len(rows)
|
||||
shopScope, err := h.resolveDeviceBatchShopScope(ctx, task)
|
||||
if err != nil {
|
||||
_ = h.importTaskStore.UpdateStatus(ctx, task.ID, model.ImportTaskStatusFailed, err.Error())
|
||||
if finishErr := h.finishDeviceImportTask(ctx, task, 0, 0, 1, model.ImportTaskStatusFailed, err.Error()); finishErr != nil {
|
||||
return finishErr
|
||||
}
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
workerCtx := middleware.SetUserContext(ctx, &middleware.UserContextInfo{
|
||||
@@ -47,19 +55,20 @@ func (h *DeviceImportHandler) handleDeviceBatchAllocation(ctx context.Context, t
|
||||
ActorKind: constants.AuditActorSystemTask, ActorID: constants.TaskTypeDeviceImport,
|
||||
ActorName: "设备CSV批量操作任务", Source: constants.AuditSourceWorker,
|
||||
CorrelationID: task.TaskNo,
|
||||
ParentEventID: audit.TaskEventID(constants.AuditResourceDeviceImportTask, task.ID, "completed"),
|
||||
})
|
||||
result, err := h.executeDeviceBatchAllocation(workerCtx, task, rows)
|
||||
if err != nil {
|
||||
_ = h.importTaskStore.UpdateStatus(ctx, task.ID, model.ImportTaskStatusFailed, err.Error())
|
||||
if finishErr := h.finishDeviceImportTask(ctx, task, 0, 0, 1, model.ImportTaskStatusFailed, err.Error()); finishErr != nil {
|
||||
return finishErr
|
||||
}
|
||||
return asynq.SkipRetry
|
||||
}
|
||||
_ = h.importTaskStore.UpdateResult(ctx, task.ID, len(rows), result.successCount, result.skipCount, result.failCount, 0, result.skippedItems, result.failedItems, nil)
|
||||
status, errorMessage := model.ImportTaskStatusCompleted, ""
|
||||
if result.successCount == 0 && result.failCount > 0 {
|
||||
_ = h.importTaskStore.UpdateStatus(ctx, task.ID, model.ImportTaskStatusFailed, "所有设备操作均失败")
|
||||
} else {
|
||||
_ = h.importTaskStore.UpdateStatus(ctx, task.ID, model.ImportTaskStatusCompleted, "")
|
||||
status, errorMessage = model.ImportTaskStatusFailed, "所有设备操作均失败"
|
||||
}
|
||||
return nil
|
||||
return h.finishDeviceImportTask(ctx, task, result.successCount, result.skipCount, result.failCount, status, errorMessage, result.skippedItems, result.failedItems)
|
||||
}
|
||||
|
||||
func (h *DeviceImportHandler) downloadDeviceBatchAllocationCSV(ctx context.Context, task *model.DeviceImportTask) ([]deviceBatchAllocationRow, error) {
|
||||
|
||||
Reference in New Issue
Block a user