package iap import ( "context" "time" "github.com/hibiken/asynq" "github.com/perfect-panel/server/internal/svc" "github.com/perfect-panel/server/pkg/logger" ) // DailyReconcileLogic 第三层:日终全量对账(每天 02:00) // 扫描过去 48h 内所有未支付的 IAP 订单(含 trade_no 为空的极端情况) type DailyReconcileLogic struct { inner *ReconcileLogic } func NewDailyReconcileLogic(svc *svc.ServiceContext) *DailyReconcileLogic { return &DailyReconcileLogic{inner: &ReconcileLogic{svc: svc}} } func (l *DailyReconcileLogic) ProcessTask(ctx context.Context, _ *asynq.Task) error { logger.Infof("[IAPDailyReconcile] start at %s", time.Now().Format("2006-01-02 15:04:05")) // 第三层:扫描 1min ~ 48h,trade_no 非空(trade_no 为空说明客户端从未上传过 token,服务端无法主动补单) // 实际上与第二层的区别是时间窗口:覆盖全天的遗漏 return l.inner.reconcile(ctx, 1*time.Minute, 48*time.Hour, true) }