package iot_card_import import ( "context" "strconv" "gorm.io/gorm" infraAudit "github.com/break/junhong_cmp_fiber/internal/infrastructure/audit" "github.com/break/junhong_cmp_fiber/internal/model" "github.com/break/junhong_cmp_fiber/pkg/auditfailure" "github.com/break/junhong_cmp_fiber/pkg/constants" "github.com/break/junhong_cmp_fiber/pkg/middleware" ) func (s *Service) writeImportTaskAudit(ctx context.Context, tx *gorm.DB, task *model.IotCardImportTask, before, after map[string]any, result, phase, errorCode, errorSummary string) error { return s.auditWriter.WriteTask(ctx, tx, infraAudit.TaskInput{ EventID: infraAudit.TaskEventID(constants.AuditResourceIotCardImportTask, task.ID, phase), ActionCode: constants.AuditActionIotCardImportTaskCreated, Summary: "创建 IoT 卡导入任务", TaskID: task.ID, TaskNo: task.TaskNo, Actor: infraAudit.ActorInput{ Kind: constants.AuditActorAccount, ID: strconv.FormatUint(uint64(middleware.GetUserIDFromContext(ctx)), 10), Name: middleware.GetUsernameFromContext(ctx), }, Source: constants.AuditSourceAdminAPI, ScopeType: constants.AuditScopePlatform, Result: result, ErrorCode: errorCode, ErrorSummary: errorSummary, IdentitySnapshot: map[string]any{ "id": task.ID, "task_no": task.TaskNo, "file_name": task.FileName, "carrier_id": task.CarrierID, "carrier_name": task.CarrierName, "batch_no": task.BatchNo, "card_category": task.CardCategory, "realname_policy": task.RealnamePolicy, }, BeforeData: before, AfterData: after, }) } func (s *Service) recordImportTaskAudit(ctx context.Context, task *model.IotCardImportTask, before, after map[string]any, result, phase string, errorCode int, summary string) { if s == nil || s.db == nil || s.auditWriter == nil || task == nil || task.TaskNo == "" { return } code := strconv.Itoa(errorCode) if err := s.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { return s.writeImportTaskAudit(ctx, tx, task, before, after, result, phase, code, summary) }); err != nil { auditfailure.RecordSecondaryWriteFailure(constants.AuditActionIotCardImportTaskCreated, task.TaskNo, "", task.TaskNo, code, err) } } func importTaskState(task *model.IotCardImportTask) map[string]any { if task == nil { return nil } return map[string]any{ "status": task.Status, "total_count": task.TotalCount, "success_count": task.SuccessCount, "skip_count": task.SkipCount, "fail_count": task.FailCount, } }