add config

This commit is contained in:
2026-01-05 12:49:57 +08:00
parent 64b758a36d
commit 9e42257e4e
14 changed files with 253 additions and 60 deletions

View File

@@ -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 {