add config
This commit is contained in:
@@ -142,19 +142,28 @@ func (l *AgentService) AgentProcess(ctx context.Context, order *model.Order) err
|
||||
if findAgentWalletModelErr != nil {
|
||||
return findAgentWalletModelErr
|
||||
}
|
||||
// 奖励不冻结
|
||||
// 奖励不冻结,直接进入balance
|
||||
ancestorWallet.Balance += ancestorCommissionReward
|
||||
|
||||
// 冻结
|
||||
ancestorWallet.FrozenBalance += ancestorCommissionAmount
|
||||
// 根据安全防御模式配置决定佣金处理方式
|
||||
var commissionStatus int64
|
||||
if l.config.SystemConfig.CommissionSafeMode {
|
||||
// 安全防御模式:佣金冻结在frozen_balance中
|
||||
ancestorWallet.FrozenBalance += ancestorCommissionAmount
|
||||
commissionStatus = 1 // 冻结状态
|
||||
} else {
|
||||
// 非安全防御模式:佣金直接进入balance
|
||||
ancestorWallet.Balance += ancestorCommissionAmount
|
||||
commissionStatus = 0 // 已结算状态
|
||||
}
|
||||
|
||||
// 为上级创建佣金记录(冻结金额)
|
||||
// 为上级创建佣金记录
|
||||
ancestorCommissionRecord := model.AgentCommission{
|
||||
AgentId: AncestorId,
|
||||
OrderId: order.Id,
|
||||
Amount: ancestorCommissionAmount,
|
||||
ProductId: order.ProductId,
|
||||
Status: 1, // 设置为冻结状态
|
||||
Status: commissionStatus,
|
||||
}
|
||||
_, insertAncestorCommissionErr := l.AgentCommissionModel.Insert(transCtx, session, &ancestorCommissionRecord)
|
||||
if insertAncestorCommissionErr != nil {
|
||||
@@ -182,13 +191,15 @@ func (l *AgentService) AgentProcess(ctx context.Context, order *model.Order) err
|
||||
return transErr
|
||||
}
|
||||
|
||||
// 在事务提交后,触发解冻任务(3天后自动解冻)
|
||||
// 注意:这里发送的是任务,实际解冻将在3天后由队列处理
|
||||
if l.AsynqService != nil {
|
||||
// 在事务提交后,仅在安全防御模式下触发解冻任务
|
||||
// 注意:这里发送的是任务,实际解冻将在指定时间后由队列处理
|
||||
if l.AsynqService != nil && l.config.SystemConfig.CommissionSafeMode {
|
||||
// 仅在安全防御模式下,才需要发送解冻任务
|
||||
// 获取刚创建的佣金记录ID
|
||||
// 由于我们需要佣金记录ID来触发解冻任务,但事务中无法获取,我们可以在事务后查询
|
||||
builder := l.AgentCommissionModel.SelectBuilder().
|
||||
Where("order_id = ?", order.Id).
|
||||
Where("status = ?", 1). // 只查询状态为冻结的佣金
|
||||
Where("del_state = ?", globalkey.DelStateNo)
|
||||
|
||||
commissions, findErr := l.AgentCommissionModel.FindAll(ctx, builder, "")
|
||||
@@ -198,7 +209,7 @@ func (l *AgentService) AgentProcess(ctx context.Context, order *model.Order) err
|
||||
}
|
||||
|
||||
if len(commissions) > 0 {
|
||||
// 为所有新创建的佣金记录触发解冻任务
|
||||
// 为所有新创建的冻结佣金记录触发解冻任务
|
||||
for _, commission := range commissions {
|
||||
// 发送解冻任务,将在10小时后执行
|
||||
sendTaskErr := l.AsynqService.SendUnfreezeCommissionTask(commission.Id)
|
||||
@@ -224,15 +235,29 @@ func (l *AgentService) AgentCommission(ctx context.Context, agentID int64, order
|
||||
}
|
||||
// 推广人最终获得代理佣金
|
||||
finalCommission := order.Amount - deductedAmount
|
||||
agentWalletModel.FrozenBalance += finalCommission
|
||||
|
||||
// 根据安全防御模式配置决定佣金状态和钱包操作
|
||||
if l.config.SystemConfig.CommissionSafeMode {
|
||||
// 安全防御模式:佣金冻结在frozen_balance中
|
||||
agentWalletModel.FrozenBalance += finalCommission
|
||||
} else {
|
||||
// 非安全防御模式:佣金直接进入balance
|
||||
agentWalletModel.Balance += finalCommission
|
||||
}
|
||||
agentWalletModel.TotalEarnings += finalCommission
|
||||
|
||||
// 根据安全防御模式配置决定佣金状态
|
||||
commissionStatus := int64(1) // 默认为冻结状态
|
||||
if !l.config.SystemConfig.CommissionSafeMode {
|
||||
commissionStatus = 0 // 非安全模式直接设置为已结算
|
||||
}
|
||||
|
||||
agentCommission := model.AgentCommission{
|
||||
AgentId: agentID,
|
||||
OrderId: order.Id,
|
||||
Amount: finalCommission,
|
||||
ProductId: order.ProductId,
|
||||
Status: 1, // 设置为冻结状态
|
||||
Status: commissionStatus,
|
||||
}
|
||||
insertResult, insertAgentCommissionErr := l.AgentCommissionModel.Insert(ctx, session, &agentCommission)
|
||||
if insertAgentCommissionErr != nil {
|
||||
|
||||
Reference in New Issue
Block a user