add and fix 一键解冻
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user