add and fix 一键解冻

This commit is contained in:
2025-12-31 12:40:41 +08:00
parent 5abfd7adbd
commit 193b47893d
14 changed files with 356 additions and 438 deletions

View File

@@ -20,9 +20,6 @@ const (
CommissionStatusFrozen = 1 // 冻结佣金
)
// UNFREEZE_COMMISSION_DELAY_DAYS 定义延迟解冻天数
const UNFREEZE_COMMISSION_DELAY_DAYS = 3 // 三天后解冻
type UnfreezeCommissionHandler struct {
svcCtx *svc.ServiceContext
}
@@ -63,26 +60,8 @@ func (l *UnfreezeCommissionHandler) ProcessTask(ctx context.Context, t *asynq.Ta
return nil
}
// 检查是否已到达解冻时间3天后
unfreezeTime := commission.UpdateTime.AddDate(0, 0, UNFREEZE_COMMISSION_DELAY_DAYS)
if now.Before(unfreezeTime) {
logx.Infof("佣金记录ID %d 尚未到达解冻时间,解冻时间: %s", commissionID, unfreezeTime.Format("2006-01-02 15:04:05"))
return nil
}
// 使用事务处理解冻操作
err = l.svcCtx.AgentCommissionModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error {
// 更新佣金状态为已发放
commission.Status = CommissionStatusReleased
commission.UpdateTime = now
// 更新佣金数据库
_, err := l.svcCtx.AgentCommissionModel.Update(ctx, session, commission)
if err != nil {
logx.Errorf("更新佣金记录ID %d 失败: %v", commissionID, err)
return err
}
// 获取代理钱包记录
agentWallet, err := l.svcCtx.AgentWalletModel.FindOneByAgentId(ctx, commission.AgentId)
if err != nil {
@@ -104,6 +83,17 @@ func (l *UnfreezeCommissionHandler) ProcessTask(ctx context.Context, t *asynq.Ta
return err
}
// 钱包更新成功后,再更新佣金状态为已发放
commission.Status = CommissionStatusReleased
commission.UpdateTime = now
// 更新佣金数据库(使用 UpdateWithVersion 保持乐观锁)
err = l.svcCtx.AgentCommissionModel.UpdateWithVersion(ctx, session, commission)
if err != nil {
logx.Errorf("更新佣金记录ID %d 失败: %v", commissionID, err)
return err
}
logx.Infof("成功解冻佣金记录ID %d代理ID %d佣金金额 %.2f,已将佣金金额从冻结余额转移到可用余额",
commissionID, commission.AgentId, commissionAmount)
return nil