This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user