bd 计算工资数据结构调整
This commit is contained in:
parent
d7e8dc09a2
commit
134db834cc
@ -8,6 +8,7 @@ import com.red.circle.framework.dto.ResultResponse;
|
||||
import com.red.circle.order.inner.endpoint.InAppPurchaseDetailsClient;
|
||||
import com.red.circle.order.inner.model.dto.inapp.BatchUserRechargeStatisticsDTO;
|
||||
import com.red.circle.other.app.convertor.user.UserProfileAppConvertor;
|
||||
import com.red.circle.other.app.dto.clientobject.SalaryCalcResult;
|
||||
import com.red.circle.other.app.dto.clientobject.TeamBdMemberBillCO;
|
||||
import com.red.circle.other.app.dto.clientobject.TeamBdMemberCO;
|
||||
import com.red.circle.other.app.dto.clientobject.team.BdHistoryCO;
|
||||
@ -438,32 +439,32 @@ public class TeamBdMemberBillListQryExe {
|
||||
List<BdSalaryPolicy> rechargePolicies = bdSalaryPolicyService.listEnabledByType(BdPolicyType.TEAM_RECHARGE);
|
||||
|
||||
// 匹配政策1:Team Salary Policy
|
||||
BigDecimal salarySalary = BdSalarySettlementServiceImpl.matchAndCalculate(
|
||||
salaryPolicies, agencyNumber, teamSalaryAmount, BdPolicyType.TEAM_SALARY, tempRecord);
|
||||
SalaryCalcResult salaryResult = BdSalarySettlementServiceImpl.matchAndCalculate(
|
||||
salaryPolicies, agencyNumber, teamSalaryAmount);
|
||||
|
||||
currentBill.setBdIncomeSalary(salarySalary);
|
||||
currentBill.setBdRatioSalary(tempRecord.getCommissionRate());
|
||||
currentBill.setBdIncomeSalary(salaryResult.getSalary());
|
||||
currentBill.setBdRatioSalary(salaryResult.getCommissionRate());
|
||||
|
||||
// 匹配政策2:Team Recharge Policy
|
||||
BigDecimal rechargeSalary = BdSalarySettlementServiceImpl.matchAndCalculate(
|
||||
rechargePolicies, agencyNumber, teamRechargeAmount, BdPolicyType.TEAM_RECHARGE, tempRecord);
|
||||
SalaryCalcResult rechargeResult = BdSalarySettlementServiceImpl.matchAndCalculate(
|
||||
rechargePolicies, agencyNumber, teamRechargeAmount);
|
||||
|
||||
currentBill.setBdIncomeRecharge(rechargeSalary);
|
||||
currentBill.setBdRatioRecharge(tempRecord.getCommissionRate());
|
||||
currentBill.setBdIncomeRecharge(rechargeResult.getSalary());
|
||||
currentBill.setBdRatioRecharge(rechargeResult.getCommissionRate());
|
||||
|
||||
// 选择最高工资并设置相关字段
|
||||
if (salarySalary.compareTo(rechargeSalary) >= 0) {
|
||||
if (salaryResult.getSalary().compareTo(rechargeResult.getSalary()) >= 0) {
|
||||
currentBill.setHitPolicyType(BdPolicyType.TEAM_SALARY.name());
|
||||
currentBill.setSettlementSalary(salarySalary);
|
||||
currentBill.setHitLevel(salaryResult.getHitLevel());
|
||||
currentBill.setCommissionRate(salaryResult.getCommissionRate());
|
||||
currentBill.setSettlementSalary(salaryResult.getSalary());
|
||||
} else {
|
||||
currentBill.setHitPolicyType(BdPolicyType.TEAM_RECHARGE.name());
|
||||
currentBill.setSettlementSalary(rechargeSalary);
|
||||
currentBill.setHitLevel(rechargeResult.getHitLevel());
|
||||
currentBill.setCommissionRate(rechargeResult.getCommissionRate());
|
||||
currentBill.setSettlementSalary(rechargeResult.getSalary());
|
||||
}
|
||||
|
||||
// 设置命中的政策等级和提成比例
|
||||
currentBill.setHitLevel(tempRecord.getHitLevel());
|
||||
currentBill.setCommissionRate(tempRecord.getCommissionRate());
|
||||
|
||||
|
||||
return currentBill;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
|
||||
import com.red.circle.framework.dto.ResultResponse;
|
||||
import com.red.circle.other.app.dto.clientobject.BdSalarySettlementCO;
|
||||
import com.red.circle.other.app.dto.clientobject.BdTeamStatisticsCO;
|
||||
import com.red.circle.other.app.util.DateTimeAsiaRiyadhUtils;
|
||||
import com.red.circle.other.app.dto.clientobject.SalaryCalcResult;
|
||||
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||
import com.red.circle.other.domain.model.user.UserProfile;
|
||||
import com.red.circle.other.infra.database.mongo.entity.bd.detail.BdTeamMemberDetail;
|
||||
@ -33,7 +33,6 @@ import com.red.circle.wallet.inner.model.dto.UserBankRunningWaterDTO;
|
||||
import com.red.circle.wallet.inner.model.enums.UserBankWaterEvent;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -383,20 +382,24 @@ public class BdSalarySettlementServiceImpl implements BdSalarySettlementService
|
||||
List<BdSalaryPolicy> rechargePolicies = bdSalaryPolicyService.listEnabledByType(BdPolicyType.TEAM_RECHARGE);
|
||||
|
||||
// 匹配政策1:Team Salary Policy
|
||||
BigDecimal salarySalary = matchAndCalculate(salaryPolicies, teamStatistics.getAgencyNumber(),
|
||||
teamStatistics.getTeamSalaryAmount(), BdPolicyType.TEAM_SALARY, record);
|
||||
SalaryCalcResult salaryResult = matchAndCalculate(salaryPolicies, teamStatistics.getAgencyNumber(),
|
||||
teamStatistics.getTeamSalaryAmount());
|
||||
|
||||
// 匹配政策2:Team Recharge Policy
|
||||
BigDecimal rechargeSalary = matchAndCalculate(rechargePolicies, teamStatistics.getAgencyNumber(),
|
||||
teamStatistics.getTeamRechargeAmount(), BdPolicyType.TEAM_RECHARGE, record);
|
||||
SalaryCalcResult rechargeResult = matchAndCalculate(rechargePolicies, teamStatistics.getAgencyNumber(),
|
||||
teamStatistics.getTeamRechargeAmount());
|
||||
|
||||
// 选择最高工资
|
||||
if (salarySalary.compareTo(rechargeSalary) >= 0) {
|
||||
if (salaryResult.getSalary().compareTo(rechargeResult.getSalary()) >= 0) {
|
||||
record.setHitPolicyType(BdPolicyType.TEAM_SALARY);
|
||||
record.setSettlementSalary(salarySalary);
|
||||
record.setHitLevel(salaryResult.getHitLevel());
|
||||
record.setCommissionRate(salaryResult.getCommissionRate());
|
||||
record.setSettlementSalary(salaryResult.getSalary());
|
||||
} else {
|
||||
record.setHitPolicyType(BdPolicyType.TEAM_RECHARGE);
|
||||
record.setSettlementSalary(rechargeSalary);
|
||||
record.setHitLevel(rechargeResult.getHitLevel());
|
||||
record.setCommissionRate(rechargeResult.getCommissionRate());
|
||||
record.setSettlementSalary(rechargeResult.getSalary());
|
||||
}
|
||||
|
||||
return record;
|
||||
@ -405,11 +408,10 @@ public class BdSalarySettlementServiceImpl implements BdSalarySettlementService
|
||||
/**
|
||||
* 匹配政策并计算工资.
|
||||
*/
|
||||
public static BigDecimal matchAndCalculate(List<BdSalaryPolicy> policies, Integer agencyNumber,
|
||||
BigDecimal teamAmount, BdPolicyType policyType,
|
||||
BdSalarySettlementRecord record) {
|
||||
public static SalaryCalcResult matchAndCalculate(List<BdSalaryPolicy> policies, Integer agencyNumber,
|
||||
BigDecimal teamAmount) {
|
||||
if (CollectionUtils.isEmpty(policies)) {
|
||||
return BigDecimal.ZERO;
|
||||
return new SalaryCalcResult(BigDecimal.ZERO, 0, BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
// 按等级倒序排序,匹配最高等级
|
||||
@ -419,23 +421,16 @@ public class BdSalarySettlementServiceImpl implements BdSalarySettlementService
|
||||
// 必须同时满足 Agent 数量和团队金额
|
||||
if (agencyNumber >= policy.getRequiredAgencyNumber()
|
||||
&& teamAmount.compareTo(policy.getRequiredTeamAmount()) >= 0) {
|
||||
|
||||
|
||||
// 计算工资:团队金额 * 提成比例
|
||||
BigDecimal salary = teamAmount.multiply(policy.getCommissionRate())
|
||||
.divide(new BigDecimal("100"), 2, RoundingMode.DOWN);
|
||||
|
||||
// 记录命中的政策信息(如果这个政策更优)
|
||||
if (policyType == BdPolicyType.TEAM_SALARY &&
|
||||
(record.getHitPolicyType() == null || record.getHitPolicyType() == BdPolicyType.TEAM_SALARY)) {
|
||||
record.setHitLevel(policy.getLevel());
|
||||
record.setCommissionRate(policy.getCommissionRate());
|
||||
}
|
||||
|
||||
return salary;
|
||||
|
||||
return new SalaryCalcResult(salary, policy.getLevel(), policy.getCommissionRate());
|
||||
}
|
||||
}
|
||||
|
||||
return BigDecimal.ZERO;
|
||||
return new SalaryCalcResult(BigDecimal.ZERO, 0, BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
package com.red.circle.other.app.dto.clientobject;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class SalaryCalcResult {
|
||||
|
||||
private BigDecimal salary;
|
||||
|
||||
private Integer hitLevel;
|
||||
|
||||
private BigDecimal commissionRate;
|
||||
|
||||
public SalaryCalcResult(BigDecimal salary, Integer hitLevel, BigDecimal commissionRate) {
|
||||
this.salary = salary;
|
||||
this.hitLevel = hitLevel;
|
||||
this.commissionRate = commissionRate;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user