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.endpoint.InAppPurchaseDetailsClient;
|
||||||
import com.red.circle.order.inner.model.dto.inapp.BatchUserRechargeStatisticsDTO;
|
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.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.TeamBdMemberBillCO;
|
||||||
import com.red.circle.other.app.dto.clientobject.TeamBdMemberCO;
|
import com.red.circle.other.app.dto.clientobject.TeamBdMemberCO;
|
||||||
import com.red.circle.other.app.dto.clientobject.team.BdHistoryCO;
|
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);
|
List<BdSalaryPolicy> rechargePolicies = bdSalaryPolicyService.listEnabledByType(BdPolicyType.TEAM_RECHARGE);
|
||||||
|
|
||||||
// 匹配政策1:Team Salary Policy
|
// 匹配政策1:Team Salary Policy
|
||||||
BigDecimal salarySalary = BdSalarySettlementServiceImpl.matchAndCalculate(
|
SalaryCalcResult salaryResult = BdSalarySettlementServiceImpl.matchAndCalculate(
|
||||||
salaryPolicies, agencyNumber, teamSalaryAmount, BdPolicyType.TEAM_SALARY, tempRecord);
|
salaryPolicies, agencyNumber, teamSalaryAmount);
|
||||||
|
|
||||||
currentBill.setBdIncomeSalary(salarySalary);
|
currentBill.setBdIncomeSalary(salaryResult.getSalary());
|
||||||
currentBill.setBdRatioSalary(tempRecord.getCommissionRate());
|
currentBill.setBdRatioSalary(salaryResult.getCommissionRate());
|
||||||
|
|
||||||
// 匹配政策2:Team Recharge Policy
|
// 匹配政策2:Team Recharge Policy
|
||||||
BigDecimal rechargeSalary = BdSalarySettlementServiceImpl.matchAndCalculate(
|
SalaryCalcResult rechargeResult = BdSalarySettlementServiceImpl.matchAndCalculate(
|
||||||
rechargePolicies, agencyNumber, teamRechargeAmount, BdPolicyType.TEAM_RECHARGE, tempRecord);
|
rechargePolicies, agencyNumber, teamRechargeAmount);
|
||||||
|
|
||||||
currentBill.setBdIncomeRecharge(rechargeSalary);
|
currentBill.setBdIncomeRecharge(rechargeResult.getSalary());
|
||||||
currentBill.setBdRatioRecharge(tempRecord.getCommissionRate());
|
currentBill.setBdRatioRecharge(rechargeResult.getCommissionRate());
|
||||||
|
|
||||||
// 选择最高工资并设置相关字段
|
// 选择最高工资并设置相关字段
|
||||||
if (salarySalary.compareTo(rechargeSalary) >= 0) {
|
if (salaryResult.getSalary().compareTo(rechargeResult.getSalary()) >= 0) {
|
||||||
currentBill.setHitPolicyType(BdPolicyType.TEAM_SALARY.name());
|
currentBill.setHitPolicyType(BdPolicyType.TEAM_SALARY.name());
|
||||||
currentBill.setSettlementSalary(salarySalary);
|
currentBill.setHitLevel(salaryResult.getHitLevel());
|
||||||
|
currentBill.setCommissionRate(salaryResult.getCommissionRate());
|
||||||
|
currentBill.setSettlementSalary(salaryResult.getSalary());
|
||||||
} else {
|
} else {
|
||||||
currentBill.setHitPolicyType(BdPolicyType.TEAM_RECHARGE.name());
|
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;
|
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.framework.dto.ResultResponse;
|
||||||
import com.red.circle.other.app.dto.clientobject.BdSalarySettlementCO;
|
import com.red.circle.other.app.dto.clientobject.BdSalarySettlementCO;
|
||||||
import com.red.circle.other.app.dto.clientobject.BdTeamStatisticsCO;
|
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.gateway.user.UserProfileGateway;
|
||||||
import com.red.circle.other.domain.model.user.UserProfile;
|
import com.red.circle.other.domain.model.user.UserProfile;
|
||||||
import com.red.circle.other.infra.database.mongo.entity.bd.detail.BdTeamMemberDetail;
|
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 com.red.circle.wallet.inner.model.enums.UserBankWaterEvent;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@ -383,20 +382,24 @@ public class BdSalarySettlementServiceImpl implements BdSalarySettlementService
|
|||||||
List<BdSalaryPolicy> rechargePolicies = bdSalaryPolicyService.listEnabledByType(BdPolicyType.TEAM_RECHARGE);
|
List<BdSalaryPolicy> rechargePolicies = bdSalaryPolicyService.listEnabledByType(BdPolicyType.TEAM_RECHARGE);
|
||||||
|
|
||||||
// 匹配政策1:Team Salary Policy
|
// 匹配政策1:Team Salary Policy
|
||||||
BigDecimal salarySalary = matchAndCalculate(salaryPolicies, teamStatistics.getAgencyNumber(),
|
SalaryCalcResult salaryResult = matchAndCalculate(salaryPolicies, teamStatistics.getAgencyNumber(),
|
||||||
teamStatistics.getTeamSalaryAmount(), BdPolicyType.TEAM_SALARY, record);
|
teamStatistics.getTeamSalaryAmount());
|
||||||
|
|
||||||
// 匹配政策2:Team Recharge Policy
|
// 匹配政策2:Team Recharge Policy
|
||||||
BigDecimal rechargeSalary = matchAndCalculate(rechargePolicies, teamStatistics.getAgencyNumber(),
|
SalaryCalcResult rechargeResult = matchAndCalculate(rechargePolicies, teamStatistics.getAgencyNumber(),
|
||||||
teamStatistics.getTeamRechargeAmount(), BdPolicyType.TEAM_RECHARGE, record);
|
teamStatistics.getTeamRechargeAmount());
|
||||||
|
|
||||||
// 选择最高工资
|
// 选择最高工资
|
||||||
if (salarySalary.compareTo(rechargeSalary) >= 0) {
|
if (salaryResult.getSalary().compareTo(rechargeResult.getSalary()) >= 0) {
|
||||||
record.setHitPolicyType(BdPolicyType.TEAM_SALARY);
|
record.setHitPolicyType(BdPolicyType.TEAM_SALARY);
|
||||||
record.setSettlementSalary(salarySalary);
|
record.setHitLevel(salaryResult.getHitLevel());
|
||||||
|
record.setCommissionRate(salaryResult.getCommissionRate());
|
||||||
|
record.setSettlementSalary(salaryResult.getSalary());
|
||||||
} else {
|
} else {
|
||||||
record.setHitPolicyType(BdPolicyType.TEAM_RECHARGE);
|
record.setHitPolicyType(BdPolicyType.TEAM_RECHARGE);
|
||||||
record.setSettlementSalary(rechargeSalary);
|
record.setHitLevel(rechargeResult.getHitLevel());
|
||||||
|
record.setCommissionRate(rechargeResult.getCommissionRate());
|
||||||
|
record.setSettlementSalary(rechargeResult.getSalary());
|
||||||
}
|
}
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
@ -405,11 +408,10 @@ public class BdSalarySettlementServiceImpl implements BdSalarySettlementService
|
|||||||
/**
|
/**
|
||||||
* 匹配政策并计算工资.
|
* 匹配政策并计算工资.
|
||||||
*/
|
*/
|
||||||
public static BigDecimal matchAndCalculate(List<BdSalaryPolicy> policies, Integer agencyNumber,
|
public static SalaryCalcResult matchAndCalculate(List<BdSalaryPolicy> policies, Integer agencyNumber,
|
||||||
BigDecimal teamAmount, BdPolicyType policyType,
|
BigDecimal teamAmount) {
|
||||||
BdSalarySettlementRecord record) {
|
|
||||||
if (CollectionUtils.isEmpty(policies)) {
|
if (CollectionUtils.isEmpty(policies)) {
|
||||||
return BigDecimal.ZERO;
|
return new SalaryCalcResult(BigDecimal.ZERO, 0, BigDecimal.ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 按等级倒序排序,匹配最高等级
|
// 按等级倒序排序,匹配最高等级
|
||||||
@ -424,18 +426,11 @@ public class BdSalarySettlementServiceImpl implements BdSalarySettlementService
|
|||||||
BigDecimal salary = teamAmount.multiply(policy.getCommissionRate())
|
BigDecimal salary = teamAmount.multiply(policy.getCommissionRate())
|
||||||
.divide(new BigDecimal("100"), 2, RoundingMode.DOWN);
|
.divide(new BigDecimal("100"), 2, RoundingMode.DOWN);
|
||||||
|
|
||||||
// 记录命中的政策信息(如果这个政策更优)
|
return new SalaryCalcResult(salary, policy.getLevel(), policy.getCommissionRate());
|
||||||
if (policyType == BdPolicyType.TEAM_SALARY &&
|
|
||||||
(record.getHitPolicyType() == null || record.getHitPolicyType() == BdPolicyType.TEAM_SALARY)) {
|
|
||||||
record.setHitLevel(policy.getLevel());
|
|
||||||
record.setCommissionRate(policy.getCommissionRate());
|
|
||||||
}
|
|
||||||
|
|
||||||
return salary;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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