fix
This commit is contained in:
@@ -99,10 +99,10 @@ func (l *AgentService) AgentProcess(ctx context.Context, order *model.Order) err
|
||||
if AgentClosureModel != nil {
|
||||
AncestorId := AgentClosureModel.AncestorId
|
||||
AncestorModel, findAgentModelErr := l.AgentModel.FindOne(transCtx, AncestorId)
|
||||
if findAgentModelErr != nil != errors.Is(findAgentModelErr, model.ErrNotFound) {
|
||||
if findAgentModelErr != nil && !errors.Is(findAgentModelErr, model.ErrNotFound) {
|
||||
return findAgentModelErr
|
||||
}
|
||||
if AgentClosureModel != nil {
|
||||
if AncestorModel != nil {
|
||||
if AncestorModel.LevelName == "" {
|
||||
AncestorModel.LevelName = model.AgentLeveNameNormal
|
||||
}
|
||||
@@ -332,13 +332,193 @@ func (l *AgentService) CommissionPricing(ctx context.Context, descendantId int64
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
//func (l *AgentService) UpgradeVip(ctx context.Context, agentID int64, leve string, session sqlx.Session) error {
|
||||
// agentModel, err := l.AgentModel.FindOne(ctx, agentID)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// if agentModel.LevelName != model.AgentLeveNameNormal {
|
||||
// return fmt.Errorf("已经是会员")
|
||||
// }
|
||||
// return nil
|
||||
//}
|
||||
// GiveUpgradeReward 给上级代理发放下级升级奖励
|
||||
func (l *AgentService) GiveUpgradeReward(ctx context.Context, agentID int64, oldLevel, newLevel string, session sqlx.Session) error {
|
||||
// 查找上级代理
|
||||
agentClosureModel, err := l.AgentClosureModel.FindOneByDescendantIdDepth(ctx, agentID, 1)
|
||||
if err != nil {
|
||||
if errors.Is(err, model.ErrNotFound) {
|
||||
// 没有上级代理,直接返回
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
ancestorID := agentClosureModel.AncestorId
|
||||
ancestorModel, err := l.AgentModel.FindOne(ctx, ancestorID)
|
||||
if err != nil {
|
||||
if errors.Is(err, model.ErrNotFound) {
|
||||
// 上级代理不存在,直接返回
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
if ancestorModel == nil {
|
||||
// 上级代理不存在,直接返回
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取上级代理的等级配置
|
||||
if ancestorModel.LevelName == "" {
|
||||
ancestorModel.LevelName = model.AgentLeveNameNormal
|
||||
}
|
||||
agentMembershipConfigModel, err := l.AgentMembershipConfigModel.FindOneByLevelName(ctx, ancestorModel.LevelName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 根据升级路径计算奖励金额差额
|
||||
var rewardAmount float64
|
||||
var rewardType string
|
||||
|
||||
// 获取各等级的奖励金额
|
||||
var vipRewardAmount float64
|
||||
var svipRewardAmount float64
|
||||
|
||||
if agentMembershipConfigModel.LowerConvertVipReward.Valid {
|
||||
vipRewardAmount = agentMembershipConfigModel.LowerConvertVipReward.Float64
|
||||
}
|
||||
if agentMembershipConfigModel.LowerConvertSvipReward.Valid {
|
||||
svipRewardAmount = agentMembershipConfigModel.LowerConvertSvipReward.Float64
|
||||
}
|
||||
|
||||
// 根据升级路径计算实际奖励金额
|
||||
switch {
|
||||
case oldLevel == "" || oldLevel == model.AgentLeveNameNormal:
|
||||
// 普通代理升级
|
||||
switch newLevel {
|
||||
case model.AgentLeveNameVIP:
|
||||
rewardAmount = vipRewardAmount
|
||||
rewardType = model.AgentRewardsTypeDescendantUpgradeVip
|
||||
case model.AgentLeveNameSVIP:
|
||||
rewardAmount = svipRewardAmount
|
||||
rewardType = model.AgentRewardsTypeDescendantUpgradeSvip
|
||||
default:
|
||||
// 无效的升级路径,直接返回
|
||||
return nil
|
||||
}
|
||||
case oldLevel == model.AgentLeveNameVIP && newLevel == model.AgentLeveNameSVIP:
|
||||
// VIP升级到SVIP,发放差额奖励
|
||||
rewardAmount = svipRewardAmount - vipRewardAmount
|
||||
rewardType = model.AgentRewardsTypeDescendantUpgradeSvip
|
||||
// 如果差额为负数或零,不发放奖励
|
||||
if rewardAmount <= 0 {
|
||||
return nil
|
||||
}
|
||||
default:
|
||||
// 其他无效的升级路径(如SVIP降级等),直接返回
|
||||
return nil
|
||||
}
|
||||
|
||||
// 如果有奖励金额,则发放奖励
|
||||
if rewardAmount > 0 {
|
||||
// 创建奖励记录
|
||||
agentRewards := model.AgentRewards{
|
||||
AgentId: ancestorID,
|
||||
Amount: rewardAmount,
|
||||
RelationAgentId: lzUtils.Int64ToNullInt64(agentID),
|
||||
Type: rewardType,
|
||||
}
|
||||
|
||||
_, err = l.AgentRewardsModel.Insert(ctx, session, &agentRewards)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新上级代理钱包
|
||||
ancestorWallet, err := l.AgentWalletModel.FindOneByAgentId(ctx, ancestorID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ancestorWallet.Balance += rewardAmount
|
||||
ancestorWallet.TotalEarnings += rewardAmount
|
||||
err = l.AgentWalletModel.UpdateWithVersion(ctx, session, ancestorWallet)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GiveWithdrawReward 给上级代理发放下级提现奖励
|
||||
func (l *AgentService) GiveWithdrawReward(ctx context.Context, agentID int64, withdrawAmount float64, session sqlx.Session) error {
|
||||
// 验证提现金额
|
||||
if withdrawAmount <= 0 {
|
||||
return nil
|
||||
}
|
||||
// 查找上级代理
|
||||
agentClosureModel, err := l.AgentClosureModel.FindOneByDescendantIdDepth(ctx, agentID, 1)
|
||||
if err != nil {
|
||||
if errors.Is(err, model.ErrNotFound) {
|
||||
// 没有上级代理,直接返回
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
ancestorID := agentClosureModel.AncestorId
|
||||
ancestorModel, err := l.AgentModel.FindOne(ctx, ancestorID)
|
||||
if err != nil {
|
||||
if errors.Is(err, model.ErrNotFound) {
|
||||
// 上级代理不存在,直接返回
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
if ancestorModel == nil {
|
||||
// 上级代理不存在,直接返回
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取上级代理的等级配置
|
||||
if ancestorModel.LevelName == "" {
|
||||
ancestorModel.LevelName = model.AgentLeveNameNormal
|
||||
}
|
||||
agentMembershipConfigModel, err := l.AgentMembershipConfigModel.FindOneByLevelName(ctx, ancestorModel.LevelName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 计算提现奖励金额
|
||||
if agentMembershipConfigModel.LowerWithdrawRewardRatio.Valid {
|
||||
rewardRatio := agentMembershipConfigModel.LowerWithdrawRewardRatio.Float64
|
||||
// 验证奖励比例的有效性(0-1之间)
|
||||
if rewardRatio < 0 || rewardRatio > 1 {
|
||||
// 无效的奖励比例,直接返回
|
||||
return nil
|
||||
}
|
||||
rewardAmount := withdrawAmount * rewardRatio
|
||||
|
||||
if rewardAmount > 0 {
|
||||
// 创建奖励记录
|
||||
agentRewards := model.AgentRewards{
|
||||
AgentId: ancestorID,
|
||||
Amount: rewardAmount,
|
||||
RelationAgentId: lzUtils.Int64ToNullInt64(agentID),
|
||||
Type: model.AgentRewardsTypeDescendantWithdraw,
|
||||
}
|
||||
|
||||
_, err = l.AgentRewardsModel.Insert(ctx, session, &agentRewards)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新上级代理钱包
|
||||
ancestorWallet, err := l.AgentWalletModel.FindOneByAgentId(ctx, ancestorID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ancestorWallet.Balance += rewardAmount
|
||||
ancestorWallet.TotalEarnings += rewardAmount
|
||||
err = l.AgentWalletModel.UpdateWithVersion(ctx, session, ancestorWallet)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user