## 校验分红考核时处理配置会员为空情况;直推级差添加20%扣项;
This commit is contained in:
parent
82ae52e2ef
commit
491086308d
|
@ -93,14 +93,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
// 优客 推荐 6000/36000/128000 给 1800 vip 拿 600 svip拿 600
|
// 优客 推荐 6000/36000/128000 给 1800 vip 拿 600 svip拿 600
|
||||||
// vip 推荐 36000 给 10800 svip 拿 7200
|
// vip 推荐 36000 给 10800 svip 拿 7200
|
||||||
// svip推荐 128000 给 38000
|
// svip推荐 128000 给 38000
|
||||||
// TODO new 需要按新逻辑修改
|
// TODO new 乐学直推级差收益,需要按新逻辑修改(级差等级4个,封顶上限修改)
|
||||||
Set<Long> memberSet = new HashSet<>();
|
Set<Long> memberSet = new HashSet<>();
|
||||||
specialOrderList.forEach(saOrderExt ->
|
specialOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember()));
|
||||||
memberSet.add(saOrderExt.getPkMember()));
|
|
||||||
cuMemberSettleExtList = cuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet);
|
cuMemberSettleExtList = cuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet);
|
||||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||||
// 计算奖金
|
// 计算奖金
|
||||||
for (SaOrderExt saOrderExt : specialOrderList) {
|
for (SaOrderExt saOrderExt : specialOrderList) {
|
||||||
|
// 订单能发放总奖金
|
||||||
BigDecimal maxBonus;
|
BigDecimal maxBonus;
|
||||||
// 根据金额验证最大金额
|
// 根据金额验证最大金额
|
||||||
if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V4_AMOUNT)) {
|
if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V4_AMOUNT)) {
|
||||||
|
@ -119,8 +119,10 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
// 订单金额小于 2000,没有奖金
|
// 订单金额小于 2000,没有奖金
|
||||||
maxBonus = BigDecimal.ZERO;
|
maxBonus = BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
|
|
||||||
CuMemberSettleExt sourceSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
|
CuMemberSettleExt sourceSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
|
||||||
Long pkParent = sourceSettleExt.getPkParent();
|
Long pkParent = sourceSettleExt.getPkParent();
|
||||||
|
// 已发放奖金
|
||||||
BigDecimal grantBonus = BigDecimal.ZERO;
|
BigDecimal grantBonus = BigDecimal.ZERO;
|
||||||
while (ComputeUtil.compareGreaterThan(maxBonus, grantBonus)) {
|
while (ComputeUtil.compareGreaterThan(maxBonus, grantBonus)) {
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(pkParent);
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(pkParent);
|
||||||
|
@ -128,11 +130,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 死点没有奖金
|
// 死点没有奖金
|
||||||
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
|
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIRECT_INCOME.getValue())) {
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|
|| validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIRECT_INCOME.getValue())) {
|
||||||
|
// 非正常点位 或 停算收益 或 没有这个奖项,则直接跳过当前人
|
||||||
pkParent = targetMemberSettleExt.getPkParent();
|
pkParent = targetMemberSettleExt.getPkParent();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// 初始化会员奖金汇总
|
||||||
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
|
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
|
||||||
// 直推奖金明细
|
// 直推奖金明细
|
||||||
int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIRECT_INCOME.getValue());
|
int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIRECT_INCOME.getValue());
|
||||||
|
@ -165,17 +170,27 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
}
|
}
|
||||||
grantBonus = ComputeUtil.computeAdd(grantBonus, pretaxIncome);
|
grantBonus = ComputeUtil.computeAdd(grantBonus, pretaxIncome);
|
||||||
cuMemberBonusPush.setPretaxIncome(pretaxIncome);
|
cuMemberBonusPush.setPretaxIncome(pretaxIncome);
|
||||||
cuMemberBonusPush.setIncomeTax(BigDecimal.ZERO);
|
|
||||||
cuMemberBonusPush.setRealIncome(pretaxIncome);
|
cuMemberBonusPush.setRealIncome(pretaxIncome);
|
||||||
|
cuMemberBonusPush.setIncomeTax(BigDecimal.ZERO);
|
||||||
|
|
||||||
|
// TODO new 需要扣除20%
|
||||||
|
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusPush, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
|
||||||
|
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusPush.getIncomeStatus()) {
|
||||||
|
cuMemberBonus.setGlobalPoints(ComputeUtil.computeAdd(cuMemberBonus.getGlobalPoints(), cuMemberBonusPush.getPretaxIncome()));
|
||||||
|
|
||||||
|
// 实发收益总计
|
||||||
|
// BigDecimal realIncome = ReflectUtils.invokeGetter(cuMemberBonusPush, BonusFieldConstants.REAL_INCOME);
|
||||||
|
// cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
|
||||||
|
|
||||||
|
// TODO new 首购实发小计、实发收益总计
|
||||||
|
// 比原来多累计到首购实发小计
|
||||||
|
setFirstPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusPush);
|
||||||
|
}
|
||||||
cuMemberBonusPush.setRemark(String.format(BonusMsgConstants.RECOMMEND_SPECIAL_DIRECT, saOrderExt.getOrderCode(),
|
cuMemberBonusPush.setRemark(String.format(BonusMsgConstants.RECOMMEND_SPECIAL_DIRECT, saOrderExt.getOrderCode(),
|
||||||
sourceSettleExt.getMemberCode() + sourceSettleExt.getMemberName(),
|
sourceSettleExt.getMemberCode() + sourceSettleExt.getMemberName(),
|
||||||
targetMemberSettleExt.getMemberCode() + targetMemberSettleExt.getMemberName(),
|
targetMemberSettleExt.getMemberCode() + targetMemberSettleExt.getMemberName(),
|
||||||
cuMemberBonusPush.getRealIncome()));
|
cuMemberBonusPush.getRealIncome()));
|
||||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusPush.getIncomeStatus()) {
|
|
||||||
cuMemberBonus.setGlobalPoints(ComputeUtil.computeAdd(cuMemberBonus.getGlobalPoints(), cuMemberBonusPush.getPretaxIncome()));
|
|
||||||
BigDecimal realIncome = ReflectUtils.invokeGetter(cuMemberBonusPush, BonusFieldConstants.REAL_INCOME);
|
|
||||||
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
|
|
||||||
}
|
|
||||||
cuMemberBonusPushList.add(cuMemberBonusPush);
|
cuMemberBonusPushList.add(cuMemberBonusPush);
|
||||||
pkParent = targetMemberSettleExt.getPkParent();
|
pkParent = targetMemberSettleExt.getPkParent();
|
||||||
}
|
}
|
||||||
|
@ -184,6 +199,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
return cuMemberBonusPushList;
|
return cuMemberBonusPushList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算直推奖金
|
||||||
|
*/
|
||||||
private BigDecimal computePushRangeBonus(CuMemberSettleExt targetMemberSettleExt,
|
private BigDecimal computePushRangeBonus(CuMemberSettleExt targetMemberSettleExt,
|
||||||
BigDecimal V4Bonus, BigDecimal V3Bonus,
|
BigDecimal V4Bonus, BigDecimal V3Bonus,
|
||||||
BigDecimal V2Bonus, BigDecimal V1Bonus) {
|
BigDecimal V2Bonus, BigDecimal V1Bonus) {
|
||||||
|
@ -338,6 +356,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setBonusPushIncome(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, SaOrderExt saOrderExt, CuMemberBonus cuMemberBonus, CuMemberBonusPush cuMemberBonusPush) {
|
void setBonusPushIncome(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, SaOrderExt saOrderExt, CuMemberBonus cuMemberBonus, CuMemberBonusPush cuMemberBonusPush) {
|
||||||
|
// 奖金扣项
|
||||||
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusPush, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
|
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusPush, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
|
||||||
recommendRemark(saOrderExt, cuMemberBonusPush, cuMemberSettleExtMap);
|
recommendRemark(saOrderExt, cuMemberBonusPush, cuMemberSettleExtMap);
|
||||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusPush.getIncomeStatus()) {
|
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusPush.getIncomeStatus()) {
|
||||||
|
@ -373,15 +392,13 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 计算拓展收益
|
||||||
|
*
|
||||||
* @param settleTableName 结算表
|
* @param settleTableName 结算表
|
||||||
* @param period 期间
|
* @param period 期间
|
||||||
* @param bonusConfigDTO 参数
|
* @param bonusConfigDTO 参数
|
||||||
* @param firPurchaseOrderList 首单
|
* @param firPurchaseOrderList 首单
|
||||||
* @param cuMemberBonusMap 所有计算出来的奖金汇总
|
* @param cuMemberBonusMap 所有计算出来的奖金汇总
|
||||||
* @Description: 计算拓展收益
|
|
||||||
* @return: void
|
|
||||||
* @Author: sui q
|
|
||||||
* @Date: 2022/11/10 14:17
|
|
||||||
*/
|
*/
|
||||||
List<CuMemberBonusExpand> calculateExpandBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleDate, String settleTableName, BonusConfigDTO bonusConfigDTO,
|
List<CuMemberBonusExpand> calculateExpandBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleDate, String settleTableName, BonusConfigDTO bonusConfigDTO,
|
||||||
Map<String, String> systemConfigMap, List<SaOrderExt> firPurchaseOrderList,
|
Map<String, String> systemConfigMap, List<SaOrderExt> firPurchaseOrderList,
|
||||||
|
@ -880,6 +897,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
*/
|
*/
|
||||||
List<CuMemberBonusDetail> calculateShareBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, Integer period,
|
List<CuMemberBonusDetail> calculateShareBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, Integer period,
|
||||||
Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap) {
|
Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap) {
|
||||||
|
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
|
||||||
|
|
||||||
Date settleDate = DateUtils.parseStringToDate(settleDateStr);
|
Date settleDate = DateUtils.parseStringToDate(settleDateStr);
|
||||||
String currentFirstDate = DateUtils.currentMonthFirstDateStr(settleDate);
|
String currentFirstDate = DateUtils.currentMonthFirstDateStr(settleDate);
|
||||||
String beforeMonthLastDate = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, currentFirstDate);
|
String beforeMonthLastDate = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, currentFirstDate);
|
||||||
|
@ -896,39 +915,39 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
// 获取结算日期的第一天的日期
|
// 获取结算日期的第一天的日期
|
||||||
// 查询复购考核结果
|
// 查询复购考核结果
|
||||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod);
|
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod);
|
||||||
Map<Long, CuMemberAssess> cuMemberAssessMap = cuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList);
|
if (CollectionUtil.isNotEmpty(cuMemberSettleExtList)) {
|
||||||
|
Map<Long, CuMemberAssess> cuMemberAssessMap = cuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList);
|
||||||
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
|
for (CuMemberSettleExt targetMemberSettleExt : cuMemberSettleExtList) {
|
||||||
for (CuMemberSettleExt targetMemberSettleExt : cuMemberSettleExtList) {
|
SaOrder saOrder = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build();
|
||||||
SaOrder saOrder = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build();
|
saOrder.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
|
||||||
saOrder.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
|
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
|
||||||
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
|
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
|
||||||
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
|
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIVIDEND_INCOME.getValue()));
|
||||||
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIVIDEND_INCOME.getValue()));
|
// 获取计算比例,根据奖衔获取
|
||||||
// 获取计算比例,根据奖衔获取
|
// 计算比例
|
||||||
// 计算比例
|
cuMemberBonusDetail.setCalAchieve(targetMemberSettleExt.getRealIncomeTotal());
|
||||||
cuMemberBonusDetail.setCalAchieve(targetMemberSettleExt.getRealIncomeTotal());
|
cuMemberBonusDetail.setCalValue(targetMemberSettleExt.getAbonusRatio());
|
||||||
cuMemberBonusDetail.setCalValue(targetMemberSettleExt.getAbonusRatio());
|
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(targetMemberSettleExt.getRealIncomeTotal(), targetMemberSettleExt.getAbonusRatio()));
|
||||||
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(targetMemberSettleExt.getRealIncomeTotal(), targetMemberSettleExt.getAbonusRatio()));
|
shareRemark(cuMemberBonusDetail, settleDateStr);
|
||||||
shareRemark(cuMemberBonusDetail, settleDateStr);
|
BdBonusDeduct bdBonusDeduct = bonusConfigDTO.getBonusDeductsMap().get(cuMemberBonusDetail.getPkBonusItems());
|
||||||
BdBonusDeduct bdBonusDeduct = bonusConfigDTO.getBonusDeductsMap().get(cuMemberBonusDetail.getPkBonusItems());
|
cuMemberBonusDetail.setIncomeTax(BigDecimal.ZERO);
|
||||||
cuMemberBonusDetail.setIncomeTax(BigDecimal.ZERO);
|
cuMemberBonusDetail.setRealIncome(ComputeUtil.computeSubtract(cuMemberBonusDetail.getPretaxIncome(), cuMemberBonusDetail.getIncomeTax()));
|
||||||
cuMemberBonusDetail.setRealIncome(ComputeUtil.computeSubtract(cuMemberBonusDetail.getPretaxIncome(), cuMemberBonusDetail.getIncomeTax()));
|
cuMemberBonusDetail.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
|
||||||
cuMemberBonusDetail.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
|
cuMemberBonusDetail.setPkCreator(MagicNumberConstants.PK_ADMIN);
|
||||||
cuMemberBonusDetail.setPkCreator(MagicNumberConstants.PK_ADMIN);
|
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()
|
||||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()
|
&& EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) {
|
||||||
&& EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) {
|
// 需要复购考核的
|
||||||
// 需要复购考核的
|
CuMemberAssess cuMemberAssess = cuMemberAssessMap.get(targetMemberSettleExt.getPkMember());
|
||||||
CuMemberAssess cuMemberAssess = cuMemberAssessMap.get(targetMemberSettleExt.getPkMember());
|
if (cuMemberAssess == null) {
|
||||||
if (cuMemberAssess == null) {
|
cuMemberBonusDetail.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
|
||||||
cuMemberBonusDetail.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
|
}
|
||||||
}
|
}
|
||||||
|
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
|
||||||
|
cuMemberBonus.setShareIncome(ComputeUtil.computeAdd(cuMemberBonus.getShareIncome(), cuMemberBonusDetail.getPretaxIncome()));
|
||||||
|
setFirstPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
|
||||||
|
}
|
||||||
|
cuMemberBonusDetailList.add(cuMemberBonusDetail);
|
||||||
}
|
}
|
||||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
|
|
||||||
cuMemberBonus.setShareIncome(ComputeUtil.computeAdd(cuMemberBonus.getShareIncome(), cuMemberBonusDetail.getPretaxIncome()));
|
|
||||||
setFirstPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
|
|
||||||
}
|
|
||||||
cuMemberBonusDetailList.add(cuMemberBonusDetail);
|
|
||||||
}
|
}
|
||||||
return cuMemberBonusDetailList;
|
return cuMemberBonusDetailList;
|
||||||
}
|
}
|
||||||
|
|
|
@ -979,12 +979,10 @@ public abstract class BonusSettleHandle {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 首购计算 扣项,小计,总计
|
* 首购计算 扣项,小计,总计
|
||||||
* @return: void
|
|
||||||
* @Author: sui q
|
|
||||||
* @Date: 2023/1/11 13:59
|
|
||||||
*/
|
*/
|
||||||
protected void setFirstPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
|
protected void setFirstPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
|
||||||
|
// 处理扣项
|
||||||
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
|
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
|
||||||
BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME);
|
BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME);
|
||||||
cuMemberBonus.setPurRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getPurRealSubtotal(), realIncome));
|
cuMemberBonus.setPurRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getPurRealSubtotal(), realIncome));
|
||||||
|
@ -992,10 +990,7 @@ public abstract class BonusSettleHandle {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 复购计算 扣项,小计,总计
|
* 复购计算 扣项,小计,总计
|
||||||
* @return: void
|
|
||||||
* @Author: sui q
|
|
||||||
* @Date: 2023/1/11 13:59
|
|
||||||
*/
|
*/
|
||||||
protected void setPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
|
protected void setPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
|
||||||
// 处理扣项
|
// 处理扣项
|
||||||
|
@ -1019,20 +1014,7 @@ public abstract class BonusSettleHandle {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 云代计算 扣项,小计,总计
|
* @Description: 复购券 扣项,小计,总计
|
||||||
* @return: void
|
|
||||||
* @Author: sui q
|
|
||||||
* @Date: 2023/1/11 13:59
|
|
||||||
*/
|
|
||||||
protected void setMakerTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
|
|
||||||
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
|
|
||||||
BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME);
|
|
||||||
cuMemberBonus.setMakerRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getMakerRealSubtotal(), realIncome));
|
|
||||||
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Description: 云代计算 扣项,小计,总计
|
|
||||||
* @return: void
|
* @return: void
|
||||||
* @Author: sui q
|
* @Author: sui q
|
||||||
* @Date: 2023/1/11 13:59
|
* @Date: 2023/1/11 13:59
|
||||||
|
|
|
@ -426,7 +426,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
||||||
// 计算完奖衔回退业绩,最终根据新增进行回写
|
// 计算完奖衔回退业绩,最终根据新增进行回写
|
||||||
// cuMemberTreeService.updateCuMemberBackSettle(cuMemberAchieveHashMap, currentSettleTableName);
|
// cuMemberTreeService.updateCuMemberBackSettle(cuMemberAchieveHashMap, currentSettleTableName);
|
||||||
//********************************重新考核*********************************/
|
//********************************重新考核*********************************/
|
||||||
// TODO new 乐学没有分红、复购考核,这个位置需要去掉???
|
// TODO new 乐学没有分红、复购考核,这个位置需要去掉???
|
||||||
cuMemberAssessService.retryCalculationAssess(DateUtils.parseStringToDate(settleDate), Boolean.TRUE);
|
cuMemberAssessService.retryCalculationAssess(DateUtils.parseStringToDate(settleDate), Boolean.TRUE);
|
||||||
//*********************************计算奖金********************************/
|
//*********************************计算奖金********************************/
|
||||||
// 首购订单 (注册+升级) 直推奖、量奖、领导奖、(注册)报单服务费
|
// 首购订单 (注册+升级) 直推奖、量奖、领导奖、(注册)报单服务费
|
||||||
|
@ -436,8 +436,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
||||||
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
|
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
|
||||||
BonusRecordDetailVO recordDetailVO = new BonusRecordDetailVO();
|
BonusRecordDetailVO recordDetailVO = new BonusRecordDetailVO();
|
||||||
|
|
||||||
// 计算奖金
|
|
||||||
// 乐学易考奖金计算,回写代金券数量
|
// 乐学易考奖金计算,回写代金券数量
|
||||||
|
// 计算奖金(主入口)
|
||||||
LeXueRangeParam leXueRangeParam = calculateBonusBySaOrderList(settleDate, period, currentSettleTableName,
|
LeXueRangeParam leXueRangeParam = calculateBonusBySaOrderList(settleDate, period, currentSettleTableName,
|
||||||
firPurchaseOrderList, repurchaseOrderList, mallOrderList,
|
firPurchaseOrderList, repurchaseOrderList, mallOrderList,
|
||||||
awardsMap, bonusConfigDTO, cuMemberBonusMap,
|
awardsMap, bonusConfigDTO, cuMemberBonusMap,
|
||||||
|
@ -764,11 +764,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
||||||
List<CuBonusExpandExt> cuBonusExpandExtList = bonusExpandService.queryBonusExpand(bonusExpandParam);
|
List<CuBonusExpandExt> cuBonusExpandExtList = bonusExpandService.queryBonusExpand(bonusExpandParam);
|
||||||
cuBonusExpandExtList.forEach(cuBonusExpandExt -> cuBonusExpandExtMap.put(cuBonusExpandExt.getPkMember(), cuBonusExpandExt));
|
cuBonusExpandExtList.forEach(cuBonusExpandExt -> cuBonusExpandExtMap.put(cuBonusExpandExt.getPkMember(), cuBonusExpandExt));
|
||||||
// 先计算复购在计算首购
|
// 先计算复购在计算首购
|
||||||
|
// 计算复购
|
||||||
if (repurchaseOrderList.size() > 0) {
|
if (repurchaseOrderList.size() > 0) {
|
||||||
leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, rangeDtoMap, awardsMap, bonusConfigDTO,
|
leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, rangeDtoMap, awardsMap, bonusConfigDTO,
|
||||||
systemConfigMap, repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, cuAwardsControlMap, cuBonusExpandExtMap);
|
systemConfigMap, repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, cuAwardsControlMap, cuBonusExpandExtMap);
|
||||||
}
|
}
|
||||||
// 查询
|
// 计算首购
|
||||||
if (firPurchaseOrderList.size() > 0) {
|
if (firPurchaseOrderList.size() > 0) {
|
||||||
calculateFirPurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, systemConfigMap, bonusConfigDTO,
|
calculateFirPurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, systemConfigMap, bonusConfigDTO,
|
||||||
firPurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, awardsMap, cuAwardsControlMap, cuBonusExpandExtMap);
|
firPurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, awardsMap, cuAwardsControlMap, cuBonusExpandExtMap);
|
||||||
|
@ -915,14 +916,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 计算首购订单的奖金
|
||||||
|
*
|
||||||
* @param settleTableName 结算日表
|
* @param settleTableName 结算日表
|
||||||
* @param settleDate 结算日期
|
* @param settleDate 结算日期
|
||||||
* @param bonusConfigDTO 各个国家奖金参数
|
* @param bonusConfigDTO 各个国家奖金参数
|
||||||
* @param firPurchaseOrderList 首购订单
|
* @param firPurchaseOrderList 首购订单
|
||||||
* @Desccription: 计算首购订单的奖金
|
|
||||||
* @return: Map<Long, CuMemberSettleExt> 需要更新的
|
|
||||||
* @Author: sui q
|
|
||||||
* @Date: 2022/11/10 17:40
|
|
||||||
*/
|
*/
|
||||||
private void calculateFirPurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate, Map<String, String> systemConfigMap,
|
private void calculateFirPurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate, Map<String, String> systemConfigMap,
|
||||||
BonusConfigDTO bonusConfigDTO, List<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap,
|
BonusConfigDTO bonusConfigDTO, List<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap,
|
||||||
|
@ -932,7 +931,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
||||||
// 获得升级方式是纳入三单循环还是固定值
|
// 获得升级方式是纳入三单循环还是固定值
|
||||||
// 获取有订单国家的系统参数,获得三单循环还是四单循环 key 国家+系统参数key
|
// 获取有订单国家的系统参数,获得三单循环还是四单循环 key 国家+系统参数key
|
||||||
// 需要更新的会员结算表 cuMemberSettleExtMap
|
// 需要更新的会员结算表 cuMemberSettleExtMap
|
||||||
//***************************计算推荐奖******************************/
|
//***************************计算推荐奖(直推级差、直推三单循环)******************************/
|
||||||
List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettleFirstPurchaseHandle.calculateRecommendBonus(cuMemberSettleExtMap, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, cuMemberBonusMap, awardsMap);
|
List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettleFirstPurchaseHandle.calculateRecommendBonus(cuMemberSettleExtMap, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, cuMemberBonusMap, awardsMap);
|
||||||
bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
|
bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
|
||||||
//****************************计算量奖*****************************/
|
//****************************计算量奖*****************************/
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.hzs.bonus.detail.service.impl;
|
package com.hzs.bonus.detail.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
|
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
|
||||||
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
|
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
|
||||||
|
@ -141,6 +142,9 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<Long, CuMemberAssess> queryCuMemberAssessByMember(String assessTableName, Integer period, Integer assessType, List<CuMemberSettleExt> cuMemberSettleExtList) {
|
public Map<Long, CuMemberAssess> queryCuMemberAssessByMember(String assessTableName, Integer period, Integer assessType, List<CuMemberSettleExt> cuMemberSettleExtList) {
|
||||||
|
if (CollectionUtil.isEmpty(cuMemberSettleExtList)) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
List<CuMemberAssess> cuMemberAssessList = new ArrayList<>();
|
List<CuMemberAssess> cuMemberAssessList = new ArrayList<>();
|
||||||
List<List<?>> listList = cuMemberBonusSettle.handleCutList(cuMemberSettleExtList);
|
List<List<?>> listList = cuMemberBonusSettle.handleCutList(cuMemberSettleExtList);
|
||||||
listList.forEach(list ->
|
listList.forEach(list ->
|
||||||
|
|
|
@ -241,7 +241,9 @@
|
||||||
<sql id="CuMemberTableTrig">
|
<sql id="CuMemberTableTrig">
|
||||||
CREATE
|
CREATE
|
||||||
OR REPLACE TRIGGER
|
OR REPLACE TRIGGER
|
||||||
${tableName}_TRIG
|
${tableName}
|
||||||
|
_
|
||||||
|
TRIG
|
||||||
BEFORE
|
BEFORE
|
||||||
INSERT
|
INSERT
|
||||||
OR
|
OR
|
||||||
|
@ -415,19 +417,57 @@
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="createCuMemberTreeParentIndex">
|
<update id="createCuMemberTreeParentIndex">
|
||||||
create index ${tableName}_parent on ${tableName} ( pk_parent )
|
create
|
||||||
|
index
|
||||||
|
${tableName}
|
||||||
|
_
|
||||||
|
parent
|
||||||
|
on
|
||||||
|
${tableName}
|
||||||
|
(
|
||||||
|
pk_parent
|
||||||
|
)
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="createCuMemberTreePlaceIndex">
|
<update id="createCuMemberTreePlaceIndex">
|
||||||
create index ${tableName}_place on ${tableName} ( pk_place_parent, place_dept )
|
create
|
||||||
|
index
|
||||||
|
${tableName}
|
||||||
|
_
|
||||||
|
place
|
||||||
|
on
|
||||||
|
${tableName}
|
||||||
|
(
|
||||||
|
pk_place_parent,
|
||||||
|
place_dept
|
||||||
|
)
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="createCuMemberTableUniqueIndex">
|
<update id="createCuMemberTableUniqueIndex">
|
||||||
create unique index ${tableName}_PK_M on ${tableName} ( PK_MEMBER, period )
|
create
|
||||||
|
unique index
|
||||||
|
${tableName}
|
||||||
|
_
|
||||||
|
PK_M
|
||||||
|
on
|
||||||
|
${tableName}
|
||||||
|
(
|
||||||
|
PK_MEMBER,
|
||||||
|
period
|
||||||
|
)
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="createCuMemberTreeDayOnlyIndex">
|
<update id="createCuMemberTreeDayOnlyIndex">
|
||||||
create unique index ${tableName}_PK_M on ${tableName} ( PK_MEMBER )
|
create
|
||||||
|
unique index
|
||||||
|
${tableName}
|
||||||
|
_
|
||||||
|
PK_M
|
||||||
|
on
|
||||||
|
${tableName}
|
||||||
|
(
|
||||||
|
PK_MEMBER
|
||||||
|
)
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<update id="updateCuMemberTreeByCancelOrder">
|
<update id="updateCuMemberTreeByCancelOrder">
|
||||||
|
@ -1271,12 +1311,26 @@
|
||||||
|
|
||||||
<select id="queryMemberSettleBySaOrder" resultMap="CuMemberSettleExt">
|
<select id="queryMemberSettleBySaOrder" resultMap="CuMemberSettleExt">
|
||||||
select
|
select
|
||||||
pk_member,member_code,member_name,c.pk_awards,c.pk_grade,account_status,category,income_status,pk_settle_country,
|
pk_member,member_code,member_name,
|
||||||
is_maker_space,purchase_status,share_status,bg.grade_value,pk_parent,is_maker_space,
|
c.pk_awards,c.pk_grade,
|
||||||
a_balance,b_balance,r_a_balance,r_b_balance,rep_a_balance,rep_b_balance,r_rep_a_balance,r_rep_b_balance,
|
account_status,category,income_status,
|
||||||
register_amount,register_pv,upgrade_amount,upgrade_pv,repurchase_amount,pk_center_code,c.pk_vertex,
|
pk_settle_country, is_maker_space,
|
||||||
repurchase_pv,hi_fun_amount,hi_fun_pv,mall_amount,mall_pv,min_achieve,round,second,c.register_authority,store_level,
|
purchase_status, share_status,
|
||||||
c.is_maker_gift,c.expire_status from ${settleTableName} c
|
bg.grade_value,pk_parent,
|
||||||
|
a_balance,b_balance,
|
||||||
|
r_a_balance,r_b_balance,
|
||||||
|
rep_a_balance,rep_b_balance,
|
||||||
|
r_rep_a_balance,r_rep_b_balance,
|
||||||
|
register_amount,register_pv,
|
||||||
|
upgrade_amount,upgrade_pv,
|
||||||
|
repurchase_amount,repurchase_pv,
|
||||||
|
pk_center_code,c.pk_vertex,
|
||||||
|
hi_fun_amount,hi_fun_pv,
|
||||||
|
mall_amount,mall_pv,
|
||||||
|
min_achieve,
|
||||||
|
round,second,store_level,
|
||||||
|
c.register_authority, c.is_maker_gift,c.expire_status
|
||||||
|
from ${settleTableName} c
|
||||||
left join bd_grade bg
|
left join bd_grade bg
|
||||||
on c.pk_grade = bg.pk_id
|
on c.pk_grade = bg.pk_id
|
||||||
where pk_member in
|
where pk_member in
|
||||||
|
|
|
@ -179,7 +179,7 @@ public class CuMemberBonus extends BaseEntity {
|
||||||
private BigDecimal repurCouponSubtotal;
|
private BigDecimal repurCouponSubtotal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 环球积分 修改为乐享直推奖金
|
* 环球积分 修改为乐学直推奖金
|
||||||
*/
|
*/
|
||||||
@TableField("GLOBAL_POINTS")
|
@TableField("GLOBAL_POINTS")
|
||||||
private BigDecimal globalPoints;
|
private BigDecimal globalPoints;
|
||||||
|
|
|
@ -11,9 +11,7 @@ import lombok.*;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
|
||||||
* 会员奖金-直推收益明细表
|
* 会员奖金-直推收益明细表
|
||||||
* </p>
|
|
||||||
*
|
*
|
||||||
* @author hzs
|
* @author hzs
|
||||||
* @since 2022-11-10
|
* @since 2022-11-10
|
||||||
|
|
Loading…
Reference in New Issue