From a5c2147cbe57ecf0fd380cf717cc84d85dd9f984 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Mon, 23 Jun 2025 11:58:10 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E6=9C=88=E5=A5=96=E6=9C=88=E5=BA=A6?= =?UTF-8?q?=E7=BA=A7=E5=B7=AE=E3=80=81=E5=A4=8D=E8=B4=AD=E7=BA=A7=E5=B7=AE?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/service/impl/BonusSettleHandle.java | 164 +------ .../service/impl/BonusSettleRangeHandle.java | 403 ++++++++++-------- .../service/impl/BonusSettleServiceImpl.java | 77 +--- .../impl/CuMemberBonusServiceImpl.java | 2 +- .../achieve/CuMemberRetailRangeMapper.xml | 20 +- .../bonus/bonus/CuMemberBonusMapper.xml | 63 ++- .../manage/BdBonusItemsController.java | 6 +- .../system/config/BdBonusItemsMapper.xml | 31 -- .../hzs/common/core/enums/EBonusItems.java | 22 +- .../hzs/common/core/utils/ComputeUtil.java | 57 +-- .../achieve/ext/CuMemberRetailRangeExt.java | 11 +- .../domain/member/bonus/CuMemberBonus.java | 8 +- .../member/bonus/CuMemberBonusRange.java | 4 +- .../common/domain/system/config/BdAwards.java | 8 +- 14 files changed, 334 insertions(+), 542 deletions(-) diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java index 22b3779e..644225f5 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java @@ -70,16 +70,6 @@ public abstract class BonusSettleHandle { return bonusConfigDTO.getGradeMap().get(memberSettleExt.getPkSettleCountry().toString() + "_" + memberSettleExt.getPkGrade()); } - /** - * 获取主任奖衔值对应的辅导奖配置 - * - * @param bonusConfigDTO 奖金参数汇总 - * @param memberSettleExt 会员 - */ - protected BdAwards getDirectorAwardsCouch(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt) { - return bonusConfigDTO.getAwardsValueMap().get(memberSettleExt.getPkSettleCountry().toString() + ERangeType.AWARDS.getValue() + EAwards.HEADER.getValue()); - } - /** * 获取奖衔对应的辅导奖配置 * @@ -293,54 +283,6 @@ public abstract class BonusSettleHandle { }); } - /** - * 记录需要修改的会员结算表数据, 安置的 - * - * @param cuMemberSettleExtMap 会员结算 - * @param cuMemberSettleExtList 查询出来的结算数据 - */ - protected void getSecondMemberSettle(Map cuMemberSettleExtMap, List cuMemberSettleExtList) { - cuMemberSettleExtList.forEach(cuMemberSettleExt -> { - if (cuMemberSettleExtMap.containsKey(cuMemberSettleExt.getPkMember())) { - CuMemberSettleExt memberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkMember()); - if (memberSettleExt.getPkParent() == null) { - memberSettleExt.setPkParent(cuMemberSettleExt.getPkParent()); - } - if (memberSettleExt.getPkPlaceParent() == null) { - memberSettleExt.setPkPlaceParent(cuMemberSettleExt.getPkPlaceParent()); - } - if (memberSettleExt.getPlaceDept() == null) { - memberSettleExt.setPlaceDept(cuMemberSettleExt.getPlaceDept()); - } - if (memberSettleExt.getPkGrade() == null) { - memberSettleExt.setPkGrade(cuMemberSettleExt.getPkGrade()); - } - if (memberSettleExt.getGradeValue() == null) { - memberSettleExt.setGradeValue(cuMemberSettleExt.getGradeValue()); - } - if (memberSettleExt.getPkAwards() == null) { - memberSettleExt.setPkAwards(cuMemberSettleExt.getPkAwards()); - } - if (memberSettleExt.getRegisterAuthority() == null) { - memberSettleExt.setRegisterAuthority(cuMemberSettleExt.getRegisterAuthority()); - } - if (memberSettleExt.getCustomerType() == null) { - memberSettleExt.setCustomerType(cuMemberSettleExt.getCustomerType()); - } - if (memberSettleExt.getIsMakerSpace() == null) { - memberSettleExt.setIsMakerSpace(cuMemberSettleExt.getIsMakerSpace()); - } - } else { - cuMemberSettleExt.setRegisterBloNewPv(BigDecimal.ZERO); - cuMemberSettleExt.setUpgradeBloNewPv(BigDecimal.ZERO); - cuMemberSettleExt.setRepurchaseBloNewPv(BigDecimal.ZERO); - cuMemberSettleExt.setHiFunBloNewPv(BigDecimal.ZERO); - cuMemberSettleExt.setMallBloNewPv(BigDecimal.ZERO); - cuMemberSettleExtMap.put(cuMemberSettleExt.getPkMember(), cuMemberSettleExt); - } - }); - } - /** * 获得 直推收益的备注 * @@ -456,9 +398,6 @@ public abstract class BonusSettleHandle { * @param sourceMemberRangeExt 提供奖金的人 * @param targetMemberRangeExt 获得奖金的人 * 获得 辅导收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 */ protected void coachRangeRemark(SaOrderExt saOrderExt, CuMemberBonusCoach cuMemberBonusCoach, CuMemberRangeExt sourceMemberRangeExt, CuMemberRangeExt targetMemberRangeExt) { @@ -476,9 +415,6 @@ public abstract class BonusSettleHandle { * @param sourceCuMemberSettleExt 提供奖金的人 * @param targetCuMemberSettleExt 获得奖金的人 * 获得 报单服务费收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 */ protected void serviceRemark(SaOrderExt saOrderExt, CuMemberBonusDetail cuMemberBonusDetail, CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) { @@ -495,9 +431,6 @@ public abstract class BonusSettleHandle { * @param sourceCuMemberRangeExt 提供奖金的人 * @param targetCuMemberRangeExt 获得奖金的人 * 获得 报单服务费收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 */ protected void rangeServiceRemark(SaOrderExt saOrderExt, CuMemberBonusDetail cuMemberBonusDetail, CuMemberRangeExt sourceCuMemberRangeExt, CuMemberRangeExt targetCuMemberRangeExt) { @@ -554,55 +487,12 @@ public abstract class BonusSettleHandle { cuMemberBonusDetail.setRemark(remark); } - /** - * @param cuMemberBonusDetail 分红 - * @param settleDate 结算日期 - * 获得 分红收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 - */ - protected void shareCouponRemark(CuMemberBonusDetail cuMemberBonusDetail, String settleDate) { - String remark = String.format(BonusMsgConstants.SHARE_COUPON, DateUtils.getMonth(settleDate), - cuMemberBonusDetail.getPretaxIncome()); - cuMemberBonusDetail.setRemark(remark); - } - - /** - * @param cuMemberBonusDetail 分红 - * @param settleDate 结算日期 - * 获得 分红收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 - */ - protected void storeRemark(CuMemberBonusDetail cuMemberBonusDetail, String settleDate) { - String remark = String.format(BonusMsgConstants.STORE, DateUtils.getMonth(settleDate), - cuMemberBonusDetail.getPretaxIncome()); - cuMemberBonusDetail.setRemark(remark); - } - - /** - * @param cuMemberBonusDetail 分红 - * 获得 分红收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 - */ - protected void globalShareRemark(CuMemberBonusDetail cuMemberBonusDetail, String msg) { - String remark = String.format(msg, cuMemberBonusDetail.getPretaxIncome()); - cuMemberBonusDetail.setRemark(remark); - } - /** * @param saOrderExt 订单编号 * @param cuMemberBonusRange 报单服务费 * @param sourceCuMemberSettleExt 提供奖金的人 * @param targetCuMemberSettleExt 获得奖金的人 * 获得 报单服务费收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 */ protected void rangeRemark(SaOrderExt saOrderExt, CuMemberBonusRange cuMemberBonusRange, CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt, Map rangePkDtoMap) { @@ -615,25 +505,6 @@ public abstract class BonusSettleHandle { cuMemberBonusRange.setRemark(remark); } - /** - * @param saOrderExt 订单编号 - * @param cuMemberBonusRange 报单服务费 - * @param sourceCuMemberSettleExt 提供奖金的人 - * @param targetCuMemberSettleExt 获得奖金的人 - * 获得 报单服务费收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 - */ - protected void rangeRemark(SaOrderExt saOrderExt, CuMemberBonusRange cuMemberBonusRange, CuMemberSettleExt sourceCuMemberSettleExt, - CuMemberSettleExt targetCuMemberSettleExt, RangeDTO parentRangeDto, RangeDTO beforeRangeDto) { - String remark = String.format(BonusMsgConstants.SHARE_RANGE, saOrderExt.getOrderCode(), - sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(), - targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(), - cuMemberBonusRange.getCalAchieve(), beforeRangeDto.getRangeName(), parentRangeDto.getRangeName()); - cuMemberBonusRange.setRemark(remark); - } - /** * 获得 直推级差收益的备注 * @@ -702,32 +573,12 @@ public abstract class BonusSettleHandle { cuMemberBonusRange.setRemark(remark); } - /** - * 获得 报单服务费收益的备注 - * - * @param saOrder 订单编号 - * @param cuMemberBonusDetail 云代首购 - * @param sourceCuMemberSettleExt 提供奖金的人 - * @param targetCuMemberSettleExt 获得奖金的人 - */ - protected void cloudAgentRemark(SaOrder saOrder, CuMemberBonusDetail cuMemberBonusDetail, CuMemberSettleExt sourceCuMemberSettleExt, - CuMemberSettleExt targetCuMemberSettleExt, String msg) { - String remark = String.format(msg, saOrder.getOrderCode(), - sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(), - targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(), - cuMemberBonusDetail.getCalAchieve(), cuMemberBonusDetail.getCalValue()); - cuMemberBonusDetail.setRemark(remark); - } - /** * @param saOrder 订单编号 * @param cuMemberBonusDetail 云代首购 * @param sourceCuMemberSettleExt 提供奖金的人 * @param targetCuMemberSettleExt 获得奖金的人 * 获得 报单服务费收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 */ protected void repurchaseCouponsRemark(SaOrder saOrder, CuMemberBonusDetail cuMemberBonusDetail, CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) { @@ -739,12 +590,10 @@ public abstract class BonusSettleHandle { } /** + * 获取会员列表的考核结果 + * * @param settleDateStr 结算日期 * @param cuMemberSettleExtList 会员列表 - * 获取会员列表的考核结果 - * @return: Map - * @Author: sui q - * @Date: 2022/11/17 14:25 */ protected Map getLongCuMemberAssessMap(String settleDateStr, List cuMemberSettleExtList) { if (cuMemberSettleExtList.size() == 0) { @@ -900,9 +749,6 @@ public abstract class BonusSettleHandle { * @param settleTableName 结算表 * @param saOrderList 订单 * 根据订单获取会员的血缘父级,用于嗨粉推荐、复购极差 - * @return: void - * @Author: sui q - * @Date: 2023/1/4 14:10 */ protected List getMemberParentBySaOrder(Map cuMemberSettleExtMap, String settleTableName, List saOrderList) { Set memberSet = new HashSet<>(); @@ -916,9 +762,6 @@ public abstract class BonusSettleHandle { * @param awardsMap 奖衔 * @param parentMemberTree 会员树历史记录 * 获取会员的极差等级,验证会员是否有奖衔 - * @return: String - * @Author: sui q - * @Date: 2023/1/4 14:22 */ protected String getMemberCountryKey(Map awardsMap, CuMemberTree parentMemberTree, Map cuAwardsControlMap) { Integer pkAwards = getPkRealAwards(parentMemberTree.getPkMember(), parentMemberTree.getPkAwards(), cuAwardsControlMap); @@ -939,9 +782,6 @@ public abstract class BonusSettleHandle { * @param awardsMap 奖衔 * @param parentMemberTree 会员树历史记录 * 获取会员的极差等级,验证会员是否有奖衔 - * @return: String - * @Author: sui q - * @Date: 2023/1/4 14:22 */ protected String getMemberKey(Map awardsMap, CuMemberTree parentMemberTree) { String key = Integer.toString(ERangeType.AWARDS.getValue()) + parentMemberTree.getPkAwards(); diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java index 53a5e7e7..6a3e4f6a 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java @@ -8,6 +8,7 @@ import com.hzs.bonus.bonus.vo.BonusRecordDetailVO; import com.hzs.bonus.detail.service.ICuMemberAwardsService; import com.hzs.bonus.detail.service.ICuMemberGradeService; import com.hzs.bonus.order.service.IBonusOrderService; +import com.hzs.common.core.config.BdConfig; import com.hzs.common.core.constant.MagicNumberConstants; import com.hzs.common.core.constant.RetailConstants; import com.hzs.common.core.constant.TableNameConstants; @@ -1822,17 +1823,28 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 月订单列表 List totalMonthOrderList = new ArrayList<>(); + // 级差收益 List memberBonusRangeList = new ArrayList<>(); + // 分红收益 List memberBonusDetailList = new ArrayList<>(); // 当前年月 String month = DateUtils.getMonth(settleDateStr); - while (!DateUtils.compareDateEqual(currentMonthFirstDate, nextMonthFirstDate)) { - // 从上月第一天开始,每天查一次订单,查到本月第一天停止 - Date endDate = DateUtils.afterDate(1, ChronoUnit.DAYS, currentMonthFirstDate); - // 查询指定时间范围内订单 - List currentMonthOrderList = iBonusOrderService.listSaOrderByTime(currentMonthFirstDate, endDate, orderType); + + if (EEnv.TEST.getValue().equals(BdConfig.getEnv())) { + // 测试环境,只查昨天订单 + Date endDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate); + List currentMonthOrderList = iBonusOrderService.listSaOrderByTime(settleDate, endDate, orderType); totalMonthOrderList.addAll(currentMonthOrderList); - currentMonthFirstDate = endDate; + } else { + // 非测试环境 + while (!DateUtils.compareDateEqual(currentMonthFirstDate, nextMonthFirstDate)) { + // 从上月第一天开始,每天查一次订单,查到本月第一天停止 + Date endDate = DateUtils.afterDate(1, ChronoUnit.DAYS, currentMonthFirstDate); + // 查询指定时间范围内订单 + List currentMonthOrderList = iBonusOrderService.listSaOrderByTime(currentMonthFirstDate, endDate, orderType); + totalMonthOrderList.addAll(currentMonthOrderList); + currentMonthFirstDate = endDate; + } } if (totalMonthOrderList.size() > 0) { @@ -1846,7 +1858,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { cuMemberRetailRangeExtList.forEach(cuMemberRetailRangeExt -> memberRangeExtMap.put(cuMemberRetailRangeExt.getPkMember(), cuMemberRetailRangeExt)); - // 按照体系将订单区分 + // 按照系统类型将订单区分 -- 目前只有一个系统类型 // key:会员体系,value:会员订单列表 Map> orderMap = new HashMap<>(); for (SaOrder saOrder : totalMonthOrderList) { @@ -1862,150 +1874,228 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } } - // 计算福利极差 - // 当月总pv,用于计算 福利分红、福利加权 + // 当月总pv,用于计算月度分红(福利平均、福利加权) for (Integer systemType : orderMap.keySet()) { List saOrders = orderMap.get(systemType); + // 月所有订单业绩(注册、升级、复购、重消) BigDecimal totalMonthConsumePv = BigDecimal.ZERO; + + // new 两个月奖 + // 月度级差:注册、升级订单,从自己开始往上算,最多拨出10代(紧缩) + // 复购级差:复购订单,从自己开始往上算,最多拨出10代(紧缩) for (SaOrder saOrder : saOrders) { + // 累计订单业绩 totalMonthConsumePv = ComputeUtil.computeAdd(totalMonthConsumePv, saOrder.getOrderAchieve()); - CuMemberRetailRangeExt sourceMemberRetailRangeExt = memberRangeExtMap.get(saOrder.getPkMember()); - BigDecimal rangeRatio = sourceMemberRetailRangeExt.getRangeRatio(); - long pkParent = sourceMemberRetailRangeExt.getPkMember(); - while (true) { - CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent); - if (targetMemberRangeExt == null) { - break; - } - pkParent = targetMemberRangeExt.getPkParent(); - // 只有v5 有福利奖金 - if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() || - ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() || - targetMemberRangeExt.getGradeValue() != EGrade.S_VIP.getValue() || - targetMemberRangeExt.getEnableStatus() == EYesNo.NO.getIntValue() || - EIncomeStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getIncomeStatus()) { - continue; - } - BigDecimal targetRangeRatio = targetMemberRangeExt.getRangeRatio(); - if ((targetMemberRangeExt.getPkMember().equals(saOrder.getPkMember()) && ComputeUtil.compareValue(rangeRatio)) || - ComputeUtil.compareGreaterThan(targetRangeRatio, rangeRatio)) { - // 计算极差 - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(), - targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate()); - int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_BENEFIT_RANGE_INCOME.getValue()); - CuMemberBonusRange cuMemberBonusRange = getCuMemberRetailBonusRange(saOrder, targetMemberRangeExt, cuMemberBonus, pkBonusItems); - if (targetMemberRangeExt.getPkMember().equals(saOrder.getPkMember())) { - cuMemberBonusRange.setCalValue(targetRangeRatio); - } else { - cuMemberBonusRange.setCalValue(ComputeUtil.computeSubtract(targetRangeRatio, rangeRatio)); + + if (EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType() + || EOrderType.RETAIL_UPGRADE.getValue() == saOrder.getOrderType()) { + // 注册、升级订单,计算福利级差收益 + // 订单会员 + CuMemberRetailRangeExt sourceMemberRetailRangeExt = memberRangeExtMap.get(saOrder.getPkMember()); + // 会员奖衔级差比例 -- 初始为下单会员奖衔级差比例 + BigDecimal rangeRatio = sourceMemberRetailRangeExt.getRangeRatio(); + // 从自己开始往上算,第一个人用自己处理 + long pkParent = sourceMemberRetailRangeExt.getPkMember(); + while (true) { + CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent); + if (null == targetMemberRangeExt) { + break; } - cuMemberBonusRange.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), cuMemberBonusRange.getCalValue())); - cuMemberBonusRange.setPkRange(targetMemberRangeExt.getPkGrade()); - cuMemberBonusRange.setPkBeforeRange(sourceMemberRetailRangeExt.getPkGrade()); - cuMemberBonusRange.setPkOrderItems(0L); - rangeBenefitRetailRemark(saOrder, cuMemberBonusRange, sourceMemberRetailRangeExt, targetMemberRangeExt); - BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusRange, saOrder.getOrderAmount(), BigDecimal.ONE); - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusRange.getIncomeStatus()) { - cuMemberBonus.setRetailBenefitRangeIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailBenefitRangeIncome(), cuMemberBonusRange.getPretaxIncome())); - setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange); + pkParent = targetMemberRangeExt.getPkParent(); + + if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() + || ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() + || targetMemberRangeExt.getGradeValue() != EGrade.S_VIP.getValue() + || targetMemberRangeExt.getEnableStatus() == EYesNo.NO.getIntValue() + || EIncomeStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getIncomeStatus()) { + // 停算收益、非正常会员、未激活、等级不为合伙人、停止收益,直接跳过 + continue; } - memberBonusRangeList.add(cuMemberBonusRange); - rangeRatio = targetRangeRatio; - sourceMemberRetailRangeExt = targetMemberRangeExt; - } - } - } - // CAR_AWARD_POINTS 福利平均收益 SHARE_INCOME 福利收益 - // 查询v5 等级 且奖衔>=S4的 - List memberRetailRangeExtList = iCuMemberRetailRangeService.batchQueryMemberRetailRangeByAwards(rangeTableName); - if (memberRetailRangeExtList.size() > 0) { - List retailRangeExtList = iCuMemberRetailRangeService.batchQueryMemberRetailRangeByParent(rangeTableName, memberRetailRangeExtList); - Map> parentMemberRangeExtMap = new HashMap<>(); - for (CuMemberRetailRangeExt cuMemberRetailRangeExt : retailRangeExtList) { - if (parentMemberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkParent())) { - parentMemberRangeExtMap.get(cuMemberRetailRangeExt.getPkParent()).add(cuMemberRetailRangeExt); - } else { - List cuMemberRangeExtList = new ArrayList<>(); - cuMemberRangeExtList.add(cuMemberRetailRangeExt); - parentMemberRangeExtMap.put(cuMemberRetailRangeExt.getPkParent(), cuMemberRangeExtList); - } - } - // 分类,分为4 5 6 7 8 9 - List firstAwardsRetailRangeList = new ArrayList<>(); - BigDecimal benefitAvgRatio = BigDecimal.ZERO; - BigDecimal benefitShareRatio = BigDecimal.ZERO; - BigDecimal firstConsumePv = BigDecimal.ZERO; - BigDecimal secondBenefitAvgRatio = BigDecimal.ZERO; - BigDecimal secondBenefitShareRatio = BigDecimal.ZERO; - BigDecimal secondConsumePv = BigDecimal.ZERO; - List secondAwardsRetailRangeList = new ArrayList<>(); - for (CuMemberRetailRangeExt cuMemberRetailRangeExt : memberRetailRangeExtList) { - if (parentMemberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) { - List rangeExtList = parentMemberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember()); - // 计算小区 - BigDecimal bigConsumePv = BigDecimal.ZERO; - for (CuMemberRetailRangeExt memberRetailRangeExt : rangeExtList) { - BigDecimal monthConsumePv = ComputeUtil.computeAdd(memberRetailRangeExt.getMonthConsumePv(), memberRetailRangeExt.getTeamMonthPv()); - if (ComputeUtil.compareGreaterThan(monthConsumePv, bigConsumePv)) { - bigConsumePv = monthConsumePv; + // 当前会员奖衔级差比例 + BigDecimal targetRangeRatio = targetMemberRangeExt.getRangeRatio(); + if ((targetMemberRangeExt.getPkMember().equals(saOrder.getPkMember()) && ComputeUtil.compareValue(rangeRatio)) + || ComputeUtil.compareGreaterThan(targetRangeRatio, rangeRatio)) { + // 第一代是自己 并且 级差比例大于0 或者 级差比例大于前一代会员的奖衔级差比例 + // 计算极差 + CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(), + targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate()); + // 福利极差收益 + int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_BENEFIT_RANGE_INCOME.getValue()); + CuMemberBonusRange cuMemberBonusRange = getCuMemberRetailBonusRange(saOrder, targetMemberRangeExt, cuMemberBonus, pkBonusItems); + if (targetMemberRangeExt.getPkMember().equals(saOrder.getPkMember())) { + cuMemberBonusRange.setCalValue(targetRangeRatio); + } else { + cuMemberBonusRange.setCalValue(ComputeUtil.computeSubtract(targetRangeRatio, rangeRatio)); } + cuMemberBonusRange.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), cuMemberBonusRange.getCalValue())); + cuMemberBonusRange.setPkRange(targetMemberRangeExt.getPkGrade()); + cuMemberBonusRange.setPkBeforeRange(sourceMemberRetailRangeExt.getPkGrade()); + cuMemberBonusRange.setPkOrderItems(0L); + rangeBenefitRetailRemark(saOrder, cuMemberBonusRange, sourceMemberRetailRangeExt, targetMemberRangeExt); + BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusRange, saOrder.getOrderAmount(), BigDecimal.ONE); + if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusRange.getIncomeStatus()) { + cuMemberBonus.setRetailBenefitRangeIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailBenefitRangeIncome(), cuMemberBonusRange.getPretaxIncome())); + setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange); + } + memberBonusRangeList.add(cuMemberBonusRange); + // 下一代会员 + rangeRatio = targetRangeRatio; + sourceMemberRetailRangeExt = targetMemberRangeExt; } - cuMemberRetailRangeExt.setSmallAreaConsumePv(ComputeUtil.computeSubtract(cuMemberRetailRangeExt.getTeamMonthPv(), bigConsumePv)); - } else { - cuMemberRetailRangeExt.setSmallAreaConsumePv(BigDecimal.ZERO); } - if (cuMemberRetailRangeExt.getShareAwardsValue() >= EAwards.SENIOR_MANAGER.getValue() && - cuMemberRetailRangeExt.getShareAwardsValue() <= EAwards.HIGH_CHIEF.getValue()) { - firstAwardsRetailRangeList.add(cuMemberRetailRangeExt); - benefitAvgRatio = cuMemberRetailRangeExt.getBenefitAvgRatio(); - benefitShareRatio = cuMemberRetailRangeExt.getBenefitShareRatio(); - firstConsumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getSmallAreaConsumePv(), firstConsumePv); - } else { - secondAwardsRetailRangeList.add(cuMemberRetailRangeExt); - secondBenefitAvgRatio = cuMemberRetailRangeExt.getBenefitAvgRatio(); - secondBenefitShareRatio = cuMemberRetailRangeExt.getBenefitShareRatio(); - secondConsumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getSmallAreaConsumePv(), secondConsumePv); - } - } - if (firstAwardsRetailRangeList.size() > 0) { - BigDecimal benefitAvgIncome = ComputeUtil.computeDivide(ComputeUtil.computeBonusMultiply(totalMonthConsumePv, benefitAvgRatio), BigDecimal.valueOf(firstAwardsRetailRangeList.size())); - BigDecimal benefitShareIncome = ComputeUtil.computeBonusMultiply(totalMonthConsumePv, benefitShareRatio); - for (CuMemberRetailRangeExt cuMemberRetailRangeExt : firstAwardsRetailRangeList) { - if (ECategory.NORMAL.getValue() != cuMemberRetailRangeExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getAccountStatus() || - EIncomeStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getIncomeStatus()) { + } else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrder.getOrderType()) { + // 复购订单,计算复购级差收益 + // 订单会员 + CuMemberRetailRangeExt sourceMemberRetailRangeExt = memberRangeExtMap.get(saOrder.getPkMember()); + // 会员奖衔级差比例 -- 初始为下单会员奖衔级差比例 + BigDecimal rangeRatio = sourceMemberRetailRangeExt.getMonthRepurchaseRatio(); + // 从自己开始往上算,第一个人用自己处理 + long pkParent = sourceMemberRetailRangeExt.getPkMember(); + while (true) { + CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent); + if (null == targetMemberRangeExt) { + break; + } + pkParent = targetMemberRangeExt.getPkParent(); + + if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() + || ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() + || targetMemberRangeExt.getGradeValue() != EGrade.S_VIP.getValue() + || targetMemberRangeExt.getEnableStatus() == EYesNo.NO.getIntValue() + || EIncomeStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getIncomeStatus()) { + // 停算收益、非正常会员、未激活、等级不为合伙人、停止收益,直接跳过 continue; } - // 验证是否有奖金 - if (validatePkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_BENEFIT_AVG_INCOME.getValue())) { - continue; + // 当前会员奖衔级差比例 + BigDecimal targetRangeRatio = targetMemberRangeExt.getMonthRepurchaseRatio(); + if ((targetMemberRangeExt.getPkMember().equals(saOrder.getPkMember()) && ComputeUtil.compareValue(rangeRatio)) + || ComputeUtil.compareGreaterThan(targetRangeRatio, rangeRatio)) { + // 第一代是自己 并且 级差比例大于0 或者 级差比例大于前一代会员的奖衔级差比例 + // 计算极差 + CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(), + targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate()); + // 复购级差收益 + int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_MONTH_REPURCHASE_INCOME.getValue()); + CuMemberBonusRange cuMemberBonusRange = getCuMemberRetailBonusRange(saOrder, targetMemberRangeExt, cuMemberBonus, pkBonusItems); + if (targetMemberRangeExt.getPkMember().equals(saOrder.getPkMember())) { + cuMemberBonusRange.setCalValue(targetRangeRatio); + } else { + cuMemberBonusRange.setCalValue(ComputeUtil.computeSubtract(targetRangeRatio, rangeRatio)); + } + cuMemberBonusRange.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), cuMemberBonusRange.getCalValue())); + cuMemberBonusRange.setPkRange(targetMemberRangeExt.getPkGrade()); + cuMemberBonusRange.setPkBeforeRange(sourceMemberRetailRangeExt.getPkGrade()); + cuMemberBonusRange.setPkOrderItems(0L); + rangeBenefitRetailRemark(saOrder, cuMemberBonusRange, sourceMemberRetailRangeExt, targetMemberRangeExt); + BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusRange, saOrder.getOrderAmount(), BigDecimal.ONE); + if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusRange.getIncomeStatus()) { + cuMemberBonus.setRetailMonthRepurchaseIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailBenefitRangeIncome(), cuMemberBonusRange.getPretaxIncome())); + setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange); + } + memberBonusRangeList.add(cuMemberBonusRange); + // 下一代会员 + rangeRatio = targetRangeRatio; + sourceMemberRetailRangeExt = targetMemberRangeExt; } - memberBonusDetailList.add(packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, month, benefitAvgRatio, benefitAvgIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_BENEFIT_AVG_INCOME.getValue(), BonusMsgConstants.RETAIL_BENEFIT_AVG_INCOME)); - BigDecimal bonusIncome = ComputeUtil.computeDivide(ComputeUtil.computeMultiply(benefitShareIncome, cuMemberRetailRangeExt.getSmallAreaConsumePv()), firstConsumePv); - CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, month, benefitShareRatio, bonusIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_BENEFIT_INCOME.getValue(), BonusMsgConstants.RETAIL_BENEFIT_INCOME); - memberBonusDetailList.add(cuMemberBonusDetail); - } - } - if (secondAwardsRetailRangeList.size() > 0) { - BigDecimal benefitAvgIncome = ComputeUtil.computeDivide(ComputeUtil.computeBonusMultiply(totalMonthConsumePv, secondBenefitAvgRatio), BigDecimal.valueOf(secondAwardsRetailRangeList.size())); - BigDecimal benefitShareIncome = ComputeUtil.computeBonusMultiply(totalMonthConsumePv, secondBenefitShareRatio); - for (CuMemberRetailRangeExt cuMemberRetailRangeExt : secondAwardsRetailRangeList) { - if (ECategory.NORMAL.getValue() != cuMemberRetailRangeExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getAccountStatus() || - EIncomeStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getIncomeStatus()) { - continue; - } - // 验证是否有奖金 - if (validatePkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_BENEFIT_AVG_INCOME.getValue())) { - continue; - } - memberBonusDetailList.add(packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, month, secondBenefitAvgRatio, benefitAvgIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_BENEFIT_AVG_INCOME.getValue(), BonusMsgConstants.RETAIL_BENEFIT_AVG_INCOME)); - BigDecimal bonusIncome = ComputeUtil.computeDivide(ComputeUtil.computeMultiply(benefitShareIncome, cuMemberRetailRangeExt.getSmallAreaConsumePv()), secondConsumePv); - CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, month, secondBenefitShareRatio, bonusIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_BENEFIT_INCOME.getValue(), BonusMsgConstants.RETAIL_BENEFIT_INCOME); - memberBonusDetailList.add(cuMemberBonusDetail); } } } + +// // CAR_AWARD_POINTS 福利平均收益 SHARE_INCOME 福利收益 +// // 查询v5 等级 且奖衔>=S4的 +// List memberRetailRangeExtList = iCuMemberRetailRangeService.batchQueryMemberRetailRangeByAwards(rangeTableName); +// if (memberRetailRangeExtList.size() > 0) { +// List retailRangeExtList = iCuMemberRetailRangeService.batchQueryMemberRetailRangeByParent(rangeTableName, memberRetailRangeExtList); +// Map> parentMemberRangeExtMap = new HashMap<>(); +// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : retailRangeExtList) { +// if (parentMemberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkParent())) { +// parentMemberRangeExtMap.get(cuMemberRetailRangeExt.getPkParent()).add(cuMemberRetailRangeExt); +// } else { +// List cuMemberRangeExtList = new ArrayList<>(); +// cuMemberRangeExtList.add(cuMemberRetailRangeExt); +// parentMemberRangeExtMap.put(cuMemberRetailRangeExt.getPkParent(), cuMemberRangeExtList); +// } +// } +// // 分类,分为4 5 6 7 8 9 +// List firstAwardsRetailRangeList = new ArrayList<>(); +// BigDecimal benefitAvgRatio = BigDecimal.ZERO; +// BigDecimal benefitShareRatio = BigDecimal.ZERO; +// BigDecimal firstConsumePv = BigDecimal.ZERO; +// BigDecimal secondBenefitAvgRatio = BigDecimal.ZERO; +// BigDecimal secondBenefitShareRatio = BigDecimal.ZERO; +// BigDecimal secondConsumePv = BigDecimal.ZERO; +// List secondAwardsRetailRangeList = new ArrayList<>(); +// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : memberRetailRangeExtList) { +// if (parentMemberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) { +// List rangeExtList = parentMemberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember()); +// // 计算小区 +// BigDecimal bigConsumePv = BigDecimal.ZERO; +// for (CuMemberRetailRangeExt memberRetailRangeExt : rangeExtList) { +// BigDecimal monthConsumePv = ComputeUtil.computeAdd(memberRetailRangeExt.getMonthConsumePv(), memberRetailRangeExt.getTeamMonthPv()); +// if (ComputeUtil.compareGreaterThan(monthConsumePv, bigConsumePv)) { +// bigConsumePv = monthConsumePv; +// } +// } +// cuMemberRetailRangeExt.setSmallAreaConsumePv(ComputeUtil.computeSubtract(cuMemberRetailRangeExt.getTeamMonthPv(), bigConsumePv)); +// } else { +// cuMemberRetailRangeExt.setSmallAreaConsumePv(BigDecimal.ZERO); +// } +// if (cuMemberRetailRangeExt.getShareAwardsValue() >= EAwards.SENIOR_MANAGER.getValue() && +// cuMemberRetailRangeExt.getShareAwardsValue() <= EAwards.HIGH_CHIEF.getValue()) { +// firstAwardsRetailRangeList.add(cuMemberRetailRangeExt); +// benefitAvgRatio = cuMemberRetailRangeExt.getBenefitAvgRatio(); +// benefitShareRatio = cuMemberRetailRangeExt.getBenefitShareRatio(); +// firstConsumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getSmallAreaConsumePv(), firstConsumePv); +// } else { +// secondAwardsRetailRangeList.add(cuMemberRetailRangeExt); +// secondBenefitAvgRatio = cuMemberRetailRangeExt.getBenefitAvgRatio(); +// secondBenefitShareRatio = cuMemberRetailRangeExt.getBenefitShareRatio(); +// secondConsumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getSmallAreaConsumePv(), secondConsumePv); +// } +// } +// if (firstAwardsRetailRangeList.size() > 0) { +// BigDecimal benefitAvgIncome = ComputeUtil.computeDivide(ComputeUtil.computeBonusMultiply(totalMonthConsumePv, benefitAvgRatio), BigDecimal.valueOf(firstAwardsRetailRangeList.size())); +// BigDecimal benefitShareIncome = ComputeUtil.computeBonusMultiply(totalMonthConsumePv, benefitShareRatio); +// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : firstAwardsRetailRangeList) { +// if (ECategory.NORMAL.getValue() != cuMemberRetailRangeExt.getCategory() || +// EAccountStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getAccountStatus() || +// EIncomeStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getIncomeStatus()) { +// continue; +// } +// // 验证是否有奖金 +// if (validatePkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_BENEFIT_AVG_INCOME.getValue())) { +// continue; +// } +// memberBonusDetailList.add(packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, month, benefitAvgRatio, +// benefitAvgIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_BENEFIT_AVG_INCOME.getValue(), BonusMsgConstants.RETAIL_BENEFIT_AVG_INCOME)); +// BigDecimal bonusIncome = ComputeUtil.computeDivide(ComputeUtil.computeMultiply(benefitShareIncome, cuMemberRetailRangeExt.getSmallAreaConsumePv()), firstConsumePv); +// CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, month, benefitShareRatio, +// bonusIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_BENEFIT_INCOME.getValue(), BonusMsgConstants.RETAIL_BENEFIT_INCOME); +// memberBonusDetailList.add(cuMemberBonusDetail); +// } +// } +// if (secondAwardsRetailRangeList.size() > 0) { +// BigDecimal benefitAvgIncome = ComputeUtil.computeDivide(ComputeUtil.computeBonusMultiply(totalMonthConsumePv, secondBenefitAvgRatio), BigDecimal.valueOf(secondAwardsRetailRangeList.size())); +// BigDecimal benefitShareIncome = ComputeUtil.computeBonusMultiply(totalMonthConsumePv, secondBenefitShareRatio); +// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : secondAwardsRetailRangeList) { +// if (ECategory.NORMAL.getValue() != cuMemberRetailRangeExt.getCategory() || +// EAccountStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getAccountStatus() || +// EIncomeStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getIncomeStatus()) { +// continue; +// } +// // 验证是否有奖金 +// if (validatePkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_BENEFIT_AVG_INCOME.getValue())) { +// continue; +// } +// memberBonusDetailList.add(packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, month, secondBenefitAvgRatio, +// benefitAvgIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_BENEFIT_AVG_INCOME.getValue(), BonusMsgConstants.RETAIL_BENEFIT_AVG_INCOME)); +// BigDecimal bonusIncome = ComputeUtil.computeDivide(ComputeUtil.computeMultiply(benefitShareIncome, cuMemberRetailRangeExt.getSmallAreaConsumePv()), secondConsumePv); +// CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, month, secondBenefitShareRatio, +// bonusIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_BENEFIT_INCOME.getValue(), BonusMsgConstants.RETAIL_BENEFIT_INCOME); +// memberBonusDetailList.add(cuMemberBonusDetail); +// } +// } +// } } } if (memberBonusDetailList.size() > 0) { @@ -2103,26 +2193,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { return cuMemberBonusCoach; } - private CuMemberBonusRange getCuMemberBonusRange(SaOrderExt saOrderExt, CuMemberRangeExt targetMemberRangeExt, - CuMemberBonus cuMemberBonus, Integer pkBonusItems) { - CuMemberBonusRange cuMemberBonusRange = CuMemberBonusRange.builder() - .pkOrder(saOrderExt.getPkId()) - .pkBonus(cuMemberBonus.getPkId()) - .pkBonusItems(pkBonusItems) - // 正常还是烧伤 - .incomeStatus(targetMemberRangeExt.getIncomeStatus()) - .calType(ECalType.VALUE.getValue()) - .calAchieve(saOrderExt.getOrderAchieve()) - .calValue(BigDecimal.ZERO) - .incomeRatio(BigDecimal.ZERO) - .incomeDialRatio(BigDecimal.ZERO) - .orderDialRatio(BigDecimal.ZERO) - .build(); - cuMemberBonusRange.setPkCountry(targetMemberRangeExt.getPkSettleCountry()); - cuMemberBonusRange.setPkCreator(MagicNumberConstants.PK_ADMIN); - return cuMemberBonusRange; - } - private CuMemberBonusRange getCuMemberRetailBonusRange(SaOrder saOrderExt, CuMemberRetailRangeExt targetMemberRangeExt, CuMemberBonus cuMemberBonus, Integer pkBonusItems) { CuMemberBonusRange cuMemberBonusRange = CuMemberBonusRange.builder() @@ -2130,7 +2200,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { .pkOrder(saOrderExt.getPkId()) .pkBonusItems(pkBonusItems) .pkBonus(cuMemberBonus.getPkId()) - // 正常还是烧伤 .calAchieve(saOrderExt.getOrderAchieve()) .calType(ECalType.VALUE.getValue()) .calValue(BigDecimal.ZERO) @@ -2143,28 +2212,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { return cuMemberBonusRange; } - /** - * 记录需要修改的会员结算表数据, 安置的 - * - * @param memberRangeMap 查询出来的结算数据 - */ - private Map getMemberSettle(Map> memberRangeMap) { - Map memberRangeExtMap = new HashMap<>(); - memberRangeMap.forEach((key, memberRangeExtList) -> { - memberRangeExtList.forEach(cuMemberSettleExt -> { - if (!memberRangeExtMap.containsKey(cuMemberSettleExt.getPkMember())) { - memberRangeExtMap.put(cuMemberSettleExt.getPkMember(), cuMemberSettleExt); - } else { - CuMemberRangeExt cuMemberRangeExt = memberRangeExtMap.get(cuMemberSettleExt.getPkMember()); - if (cuMemberRangeExt.getNewTeamPv() == null) { - cuMemberRangeExt.setNewTeamPv(BigDecimal.ZERO); - } - } - }); - }); - return memberRangeExtMap; - } - private CuMemberAwards getCuMemberAwards(CuMemberRangeExt sourceRangeExt, Integer period, SaOrderExt saOrderExt, BdRangeAwards bdRangeAwards) { CuMemberAwards cuMemberAwards = CuMemberAwards.builder() .pkMember(sourceRangeExt.getPkMember()) diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java index 697d48f6..1693b9bf 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java @@ -5,7 +5,6 @@ import cn.hutool.core.collection.CollectionUtil; import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService; import com.hzs.bonus.achieve.service.ICuMemberTreeService; import com.hzs.bonus.base.service.ICuAwardsControlService; -import com.hzs.bonus.base.service.ICuMemberService; import com.hzs.bonus.bonus.param.BonusExpandParam; import com.hzs.bonus.bonus.param.LeXueRangeParam; import com.hzs.bonus.bonus.service.*; @@ -14,6 +13,7 @@ import com.hzs.bonus.bonus.vo.MemberBonusDetailCalVO; import com.hzs.bonus.detail.service.ICuRegionAssessService; import com.hzs.bonus.order.service.IBonusOrderService; import com.hzs.bonus.risk.service.ICuMemberRiskControlService; +import com.hzs.common.core.config.BdConfig; import com.hzs.common.core.constant.BonusFieldConstants; import com.hzs.common.core.constant.MagicNumberConstants; import com.hzs.common.core.constant.TableNameConstants; @@ -164,10 +164,17 @@ public class BonusSettleServiceImpl implements IBonusSettleService { bonusSettleRangeHandle.calculateRetailBonusByDay(settleDate, cuMemberBonusMap, bonusConfigDTO, recordDetailVO, period, yesterdayPeriod, isSameMonth); - if (settleDate.endsWith("01")) { - // TODO new 每月1号,需要计算4个月奖 + // TODO new 每月1号,需要计算4个月奖 + if (EEnv.TEST.getValue().equals(BdConfig.getEnv())) { + // 测试环境,每天都执行 // 计算新零售团队区域、福利、福利分红奖金 bonusSettleRangeHandle.calculateRetailShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap); + } else { + // 非测试环境 + if (settleDate.endsWith("01")) { + // 计算新零售团队区域、福利、福利分红奖金 + bonusSettleRangeHandle.calculateRetailShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap); + } } Date currentDate = DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.parseStringToDate(settleDate)); @@ -531,70 +538,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService { // }); } - /** - * 计算首购订单的奖金 - * - * @param settleTableName 结算日表 - * @param settleDate 结算日期 - * @param bonusConfigDTO 各个国家奖金参数 - * @param purchaseOrderList 首购订单 - */ - private LeXueRangeParam calculatePurchaseOrder(Map riskControlMap, Map cuMemberSettleExtMap, String settleTableName, String settleDate, Map rangeDtoMap, - Map awardsMap, BonusConfigDTO bonusConfigDTO, Map systemConfigMap, List purchaseOrderList, Integer period, Map weekMemberBonusMap, - Map cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map cuAwardsControlMap, Map cuBonusExpandExtMap) { - //****************************复购直推*****************************/ 查找10代血缘,验证复购考核,考核通过的给与奖金 紧缩 -// List cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap); -// if (cuMemberBonusPushList.size() > 0) { -// if (bonusRecordDetailVO.getCuMemberBonusPushList() == null) { -// bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList); -// } else { -// bonusRecordDetailVO.getCuMemberBonusPushList().addAll(cuMemberBonusPushList); -// } -// } - //****************************复购量奖*****************************/ - List cuMemberBonusExpandList = bonusSettlePurchaseHandle.calculateRepurchaseExpandBonus(riskControlMap, cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, systemConfigMap, purchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, cuBonusExpandExtMap); - if (cuMemberBonusExpandList.size() > 0) { - if (bonusRecordDetailVO.getCuMemberBonusExpandList() == null) { - bonusRecordDetailVO.setCuMemberBonusExpandList(cuMemberBonusExpandList); - } else { - bonusRecordDetailVO.getCuMemberBonusExpandList().addAll(cuMemberBonusExpandList); - } - } - LeXueRangeParam leXueRangeParam = new LeXueRangeParam(); - //****************************复购极差*****************************/ - List cuMemberBonusRangeList = bonusSettlePurchaseHandle.calculateRepurchaseRangeBonus(cuMemberSettleExtMap, settleTableName, settleDate, rangeDtoMap, awardsMap, - bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap, cuAwardsControlMap, leXueRangeParam); - bonusRecordDetailVO.setCuMemberBonusRangeList(cuMemberBonusRangeList); - Map memberBonusDetailCalVoMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size())); - cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> { - MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusExpand); - memberBonusDetailCalVO.setRepExpandIncome(ComputeUtil.computeAdd(memberBonusDetailCalVO.getRepExpandIncome(), cuMemberBonusExpand.getRealIncome())); - }); - cuMemberBonusRangeList.forEach(cuMemberBonusRange -> { - MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusRange); - memberBonusDetailCalVO.setRepRangeIncome(ComputeUtil.computeAdd(memberBonusDetailCalVO.getRepRangeIncome(), cuMemberBonusRange.getRealIncome())); - }); - Map saOrderExtMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size())); - purchaseOrderList.forEach(saOrderExt -> - saOrderExtMap.put(saOrderExt.getPkId(), saOrderExt)); - // 复购拓展 - cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> { - MemberBonusDetailCalVO memberBonusDetailCalVO = memberBonusDetailCalVoMap.get(cuMemberBonusExpand.getPkOrder()); - SaOrderExt saOrderExt = saOrderExtMap.get(memberBonusDetailCalVO.getPkOrder()); - cuMemberBonusExpand.setIncomeDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getRepExpandIncome(), memberBonusDetailCalVO.getRealIncome())); - cuMemberBonusExpand.setOrderDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getRealIncome(), saOrderExt.getOrderAmount())); - }); - // 复购极差 - cuMemberBonusRangeList.forEach(cuMemberBonusRange -> { - MemberBonusDetailCalVO memberBonusDetailCalVO = memberBonusDetailCalVoMap.get(cuMemberBonusRange.getPkOrder()); - SaOrderExt saOrderExt = saOrderExtMap.get(memberBonusDetailCalVO.getPkOrder()); - cuMemberBonusRange.setIncomeDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getRepRangeIncome(), memberBonusDetailCalVO.getRealIncome())); - cuMemberBonusRange.setOrderDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getRealIncome(), saOrderExt.getOrderAmount())); - }); - // 插入奖金表 奖金明细表 - return leXueRangeParam; - } - /** * 计算订单奖金累计值 */ diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java index 206cedac..35b089ba 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java @@ -535,7 +535,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl(list).getTotal()); return rspData; } diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml index b85d2229..5263bdde 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml @@ -51,6 +51,7 @@ + @@ -349,6 +350,7 @@ a.big_team_pv, a.small_team_pv, bw.range_ratio, + bw.month_repurchase_ratio, bw.benefit_avg_ratio, bw.benefit_share_ratio, br.name country_name @@ -415,6 +417,7 @@ bw.awards_name, bws.awards_value share_awards_value, bw.range_ratio, + bw.month_repurchase_ratio, bw.benefit_avg_ratio, bw.benefit_share_ratio, br.name country_name @@ -433,10 +436,12 @@