f add
This commit is contained in:
@@ -32,7 +32,10 @@ func HandleCommissionAndWalletDeduction(ctx context.Context, svcCtx *svc.Service
|
||||
}
|
||||
|
||||
for _, commission := range commissions {
|
||||
// 记录更新佣金状态前的状态值,用于后续判断
|
||||
oldCommissionStatus := commission.Status
|
||||
commission.Status = 2 // 设置为已退款
|
||||
|
||||
// 更新佣金状态到数据库
|
||||
var updateCommissionErr error
|
||||
if session != nil {
|
||||
@@ -52,17 +55,30 @@ func HandleCommissionAndWalletDeduction(ctx context.Context, svcCtx *svc.Service
|
||||
continue
|
||||
}
|
||||
|
||||
// 根据订单金额优先减少冻结金额,如果冻结金额不足则减少钱包余额
|
||||
if wallet.FrozenBalance >= order.Amount {
|
||||
// 冻结余额足够,优先减少冻结金额
|
||||
wallet.FrozenBalance -= order.Amount
|
||||
} else {
|
||||
// 冻结余额不足,先扣减所有冻结金额,再扣减余额
|
||||
remaining := order.Amount - wallet.FrozenBalance
|
||||
wallet.FrozenBalance = 0
|
||||
wallet.Balance -= remaining
|
||||
}
|
||||
// 记录变动前的余额
|
||||
balanceBefore := wallet.Balance
|
||||
frozenBalanceBefore := wallet.FrozenBalance
|
||||
|
||||
// 如果是已结算状态的佣金(status = 1),直接扣减钱包余额
|
||||
if oldCommissionStatus == 1 {
|
||||
// 冻结状态的佣金,根据订单金额优先减少冻结金额,如果冻结金额不足则减少钱包余额
|
||||
if wallet.FrozenBalance >= order.Amount {
|
||||
// 冻结余额足够,优先减少冻结金额
|
||||
wallet.FrozenBalance -= order.Amount
|
||||
} else {
|
||||
// 冻结余额不足,先扣减所有冻结金额,再扣减余额
|
||||
remaining := order.Amount - wallet.FrozenBalance
|
||||
wallet.FrozenBalance = 0
|
||||
wallet.Balance -= remaining
|
||||
}
|
||||
// 其他状态的佣金,比如已结算状态(status = 1),直接扣减钱包余额
|
||||
} else {
|
||||
wallet.Balance -= order.Amount
|
||||
}
|
||||
// 变动后余额和冻结余额
|
||||
balanceAfter := wallet.Balance
|
||||
frozenBalanceAfter := wallet.FrozenBalance
|
||||
// 更新钱包
|
||||
var updateWalletErr error
|
||||
if session != nil {
|
||||
updateWalletErr = svcCtx.AgentWalletModel.UpdateWithVersion(ctx, session, wallet)
|
||||
@@ -73,6 +89,26 @@ func HandleCommissionAndWalletDeduction(ctx context.Context, svcCtx *svc.Service
|
||||
logx.Errorf("更新代理钱包失败,代理ID: %d, 错误: %v", commission.AgentId, updateWalletErr)
|
||||
continue
|
||||
}
|
||||
// 创建钱包交易流水记录(退款)
|
||||
transErr := svcCtx.AgentService.CreateWalletTransaction(
|
||||
ctx,
|
||||
session,
|
||||
commission.AgentId,
|
||||
model.WalletTransactionTypeRefund,
|
||||
-order.Amount,
|
||||
balanceBefore,
|
||||
balanceAfter,
|
||||
frozenBalanceBefore,
|
||||
frozenBalanceAfter,
|
||||
order.OrderNo,
|
||||
commission.Id,
|
||||
"订单退款,佣金已扣除",
|
||||
)
|
||||
if transErr != nil {
|
||||
logx.Errorf("创建代理钱包流水记录失败,代理ID: %d, 错误: %v", commission.AgentId, transErr)
|
||||
continue
|
||||
}
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user