## 校验分红考核时处理配置会员为空情况;直推级差添加20%扣项;

This commit is contained in:
cabbage 2025-04-11 10:07:30 +08:00
parent 82ae52e2ef
commit 491086308d
7 changed files with 146 additions and 90 deletions

View File

@ -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;
} }

View File

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

View File

@ -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);
//****************************计算量奖*****************************/ //****************************计算量奖*****************************/

View File

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

View File

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

View File

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

View File

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