67 lines
2.1 KiB
Go
67 lines
2.1 KiB
Go
package task
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/bytedance/sonic"
|
|
"github.com/hibiken/asynq"
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/break/junhong_cmp_fiber/internal/application/auditarchive"
|
|
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
|
)
|
|
|
|
// AuditDailyArchivePayload 是人工补档时可选的任务载荷。
|
|
type AuditDailyArchivePayload struct {
|
|
ArchiveDate string `json:"archive_date"`
|
|
}
|
|
|
|
// AuditDailyArchiveHandler 处理统一审计每日冷归档任务。
|
|
type AuditDailyArchiveHandler struct {
|
|
service *auditarchive.Service
|
|
logger *zap.Logger
|
|
enabled bool
|
|
}
|
|
|
|
// NewAuditDailyArchiveHandler 创建统一审计每日冷归档任务处理器。
|
|
func NewAuditDailyArchiveHandler(service *auditarchive.Service, logger *zap.Logger, enabled bool) *AuditDailyArchiveHandler {
|
|
return &AuditDailyArchiveHandler{service: service, logger: logger, enabled: enabled}
|
|
}
|
|
|
|
// Handle 执行前一完整自然日归档,或按任务载荷补档指定自然日。
|
|
func (h *AuditDailyArchiveHandler) Handle(ctx context.Context, task *asynq.Task) error {
|
|
if !h.enabled {
|
|
h.logger.Info("统一审计日归档已停用,跳过任务")
|
|
return nil
|
|
}
|
|
if h.service == nil {
|
|
return fmt.Errorf("统一审计归档服务未配置")
|
|
}
|
|
var err error
|
|
if len(task.Payload()) == 0 {
|
|
err = h.service.ArchivePreviousDay(ctx)
|
|
} else {
|
|
var payload AuditDailyArchivePayload
|
|
if unmarshalErr := sonic.Unmarshal(task.Payload(), &payload); unmarshalErr != nil {
|
|
return fmt.Errorf("解析统一审计归档任务载荷失败: %w", unmarshalErr)
|
|
}
|
|
location, locationErr := time.LoadLocation(constants.AuditArchiveTimezone)
|
|
if locationErr != nil {
|
|
return fmt.Errorf("加载统一审计归档时区失败: %w", locationErr)
|
|
}
|
|
archiveDate, parseErr := time.ParseInLocation(time.DateOnly, payload.ArchiveDate, location)
|
|
if parseErr != nil {
|
|
return fmt.Errorf("解析统一审计归档日期失败: %w", parseErr)
|
|
}
|
|
err = h.service.ArchiveDate(ctx, archiveDate)
|
|
}
|
|
if err != nil {
|
|
h.logger.Error("统一审计每日冷归档失败", zap.Error(err))
|
|
return err
|
|
}
|
|
h.logger.Info("统一审计每日冷归档完成")
|
|
return nil
|
|
}
|