From 1202f1cc865a35eba59e6f725e8d5abcd4444973 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Tue, 15 Apr 2025 17:04:56 +0800 Subject: [PATCH] =?UTF-8?q?##=20Q8=E4=BB=A5=E4=B8=8A=E5=A5=96=E8=A1=94?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=A4=84=E7=90=86=EF=BC=9B=E6=8B=93=E5=B1=95?= =?UTF-8?q?=E5=A5=96V3=20V4=E5=88=A4=E6=96=AD=E7=83=A7=E4=BC=A4=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=BB=B6=E7=BC=93=E5=8F=91=E6=94=BE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzs/system/config/dto/BonusExpandDTO.java | 1 + .../achieve/mapper/CuMemberTreeMapper.java | 9 + .../achieve/service/ICuMemberTreeService.java | 9 + .../service/impl/CuMemberTreeServiceImpl.java | 5 + .../bonus/base/service/ICuMemberService.java | 4 +- .../service/impl/CuMemberServiceImpl.java | 2 +- .../bonus/mapper/CuBonusExpandMapper.java | 12 +- .../service/impl/BonusSettleAgentHandle.java | 18 +- .../impl/BonusSettleFirstPurchaseHandle.java | 336 +++++++++------- .../bonus/service/impl/BonusSettleHandle.java | 62 +-- .../service/impl/BonusSettleHiFunHandle.java | 2 +- .../service/impl/BonusSettleMallHandle.java | 2 +- .../impl/BonusSettlePurchaseHandle.java | 379 ++++++++++-------- .../service/impl/BonusSettleServiceImpl.java | 26 +- .../impl/CuBonusExpandServiceImpl.java | 14 +- .../impl/CuMemberAwardsServiceImpl.java | 56 ++- .../impl/CuMemberRiskControlServiceImpl.java | 8 +- .../member/achieve/CuMemberTreeMapper.xml | 18 + .../member/bonus/CuBonusExpandMapper.xml | 3 +- .../member/bonus/CuMemberBonusPushMapper.xml | 7 +- .../common/core/enums/EBonusIncomeStatus.java | 8 +- .../hzs/common/core/utils/ComputeUtil.java | 15 +- .../common/domain/bonus/BdBonusService.java | 3 - .../domain/member/bonus/CuBonusExpand.java | 6 +- .../member/bonus/CuMemberBonusExpand.java | 2 - .../domain/system/config/BdBonusExpand.java | 3 - 26 files changed, 605 insertions(+), 405 deletions(-) diff --git a/hzs-api/hzs-api-system/src/main/java/com/hzs/system/config/dto/BonusExpandDTO.java b/hzs-api/hzs-api-system/src/main/java/com/hzs/system/config/dto/BonusExpandDTO.java index 88f593c9..8bd587b4 100644 --- a/hzs-api/hzs-api-system/src/main/java/com/hzs/system/config/dto/BonusExpandDTO.java +++ b/hzs-api/hzs-api-system/src/main/java/com/hzs/system/config/dto/BonusExpandDTO.java @@ -29,4 +29,5 @@ public class BonusExpandDTO implements Serializable { * 国家 */ private Integer pkCountry; + } diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberTreeMapper.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberTreeMapper.java index 8e664e39..241ec594 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberTreeMapper.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberTreeMapper.java @@ -794,4 +794,13 @@ public interface CuMemberTreeMapper extends BaseMapper { */ Integer updateCuMemberSettleGradeByPeriod(@Param("updateTableName") String updateTableName, @Param("period") Integer period); + /** + * 查询左右区足够可以升级的会员 + * + * @param settleTableName + * @param awardsValue + * @return + */ + List listUpgradeAwards(@Param("settleTableName") String settleTableName, @Param("awardsValue") Integer awardsValue); + } diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberTreeService.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberTreeService.java index 2bd1500e..7983834f 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberTreeService.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberTreeService.java @@ -668,4 +668,13 @@ public interface ICuMemberTreeService extends IService { */ void updateCuMemberSettleGradeByPeriod(List periodList); + /** + * 查询左右区足够可以升级的会员 + * + * @param settleTableName + * @param awardsValue + * @return + */ + List listUpgradeAwards(String settleTableName, Integer awardsValue); + } diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberTreeServiceImpl.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberTreeServiceImpl.java index 8dc67d3e..ba00824f 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberTreeServiceImpl.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberTreeServiceImpl.java @@ -821,4 +821,9 @@ public class CuMemberTreeServiceImpl extends ServiceImpl listUpgradeAwards(String settleTableName, Integer awardsValue) { + return baseMapper.listUpgradeAwards(settleTableName, awardsValue); + } + } diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/base/service/ICuMemberService.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/base/service/ICuMemberService.java index c6e81224..4b718fa0 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/base/service/ICuMemberService.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/base/service/ICuMemberService.java @@ -34,10 +34,8 @@ public interface ICuMemberService extends IService { /** * 更新会员奖衔根据临时表 - * - * @param enoughAwardsMember 修改奖衔的会员 */ - void updateCuMemberByPeriod(List enoughAwardsMember, Integer period); + void updateCuMemberByPeriod(Integer period); /** * 更新会员奖衔根据临时表 diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/base/service/impl/CuMemberServiceImpl.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/base/service/impl/CuMemberServiceImpl.java index 70c2bb40..e76f46a2 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/base/service/impl/CuMemberServiceImpl.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/base/service/impl/CuMemberServiceImpl.java @@ -38,7 +38,7 @@ public class CuMemberServiceImpl extends ServiceImpl i } @Override - public void updateCuMemberByPeriod(List enoughAwardsMember, Integer period) { + public void updateCuMemberByPeriod(Integer period) { baseMapper.updateCuMemberByPeriod(period); } diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuBonusExpandMapper.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuBonusExpandMapper.java index 64725254..176ddd6b 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuBonusExpandMapper.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuBonusExpandMapper.java @@ -16,12 +16,12 @@ import java.util.List; */ public interface CuBonusExpandMapper extends BaseMapper { - /* - * @description: 查询4-n配置 - * @author: sui q - * @date: 2024/7/23 10:09 - * @param: null null - **/ + /** + * 查询4-n配置 + * + * @param bonusExpandParam + * @return + */ List queryBonusExpand(BonusExpandParam bonusExpandParam); /* diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java index f9a470c0..9c966714 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java @@ -39,11 +39,11 @@ import java.util.stream.Collectors; public class BonusSettleAgentHandle extends BonusSettleHandle { @DubboReference - IActivityServiceApi activityServiceApi; + IActivityServiceApi iActivityServiceApi; // 代理直推 推荐给多少钱 代理复购 区域 所有订单的1% @Autowired - private ICuMemberAgentService cuMemberAgentService; + private ICuMemberAgentService iCuMemberAgentService; /** * 计算嗨粉奖金 @@ -63,9 +63,9 @@ public class BonusSettleAgentHandle extends BonusSettleHandle { Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(settleDate); // 结算月下月第一天 Date nextMonthFirstDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate); - List currentMonthOrderList = saOrderServiceApi.querySaOrderByDayForCloud(currentMonthFirstDate, nextMonthFirstDate).getData(); + List currentMonthOrderList = iSaOrderServiceApi.querySaOrderByDayForCloud(currentMonthFirstDate, nextMonthFirstDate).getData(); // 查询月末会员状态 - Integer lastPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId(); + Integer lastPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId(); String currentSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + lastPeriod; Set pkMemberSet = new HashSet<>(); // 获取配置 @@ -75,7 +75,7 @@ public class BonusSettleAgentHandle extends BonusSettleHandle { } // 计算奖金 云代首购 首购订单1% 云代复购 复购订单1% // 查询会员,查询出所有代理的会员 - Map> cuMemberAgentMap = cuMemberAgentService.queryCuMemberAgent(); + Map> cuMemberAgentMap = iCuMemberAgentService.queryCuMemberAgent(); List saOrderList = new ArrayList<>(); for (SaOrder saOrder : currentMonthOrderList) { if (saOrder.getPkCountry() == null || saOrder.getRecProvince() == null || saOrder.getRecCity() == null) { @@ -92,7 +92,7 @@ public class BonusSettleAgentHandle extends BonusSettleHandle { cuMemberAgentList.forEach(cuMemberAgent -> pkMemberSet.add(cuMemberAgent.getPkMember())); } - List cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet); + List cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet); Map cuMemberSettleExtMap = new HashMap<>(); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); Map currencyDtoMap = bonusConfigDTO.getCurrencyDtoMap(); @@ -182,15 +182,15 @@ public class BonusSettleAgentHandle extends BonusSettleHandle { } // 复购券均分收益规则 - List repurSharRuleConfigExtList = activityServiceApi.queryRepurSharRuleConfig(currentMonthFirstDate, nextMonthFirstDate).getData(); + List repurSharRuleConfigExtList = iActivityServiceApi.queryRepurSharRuleConfig(currentMonthFirstDate, nextMonthFirstDate).getData(); if (CollectionUtil.isNotEmpty(repurSharRuleConfigExtList)) { for (AcRepurSharRuleConfigExt acRepurSharRuleConfigExt : repurSharRuleConfigExtList) { List orderTypeList = acRepurSharRuleConfigExt.getRepurSharOrderTypeList().stream().distinct().map(AcRepurSharOrderType::getOrderType).collect(Collectors.toList()); - List orderList = saOrderServiceApi.querySaOrderByTimeForCouponShare(settleDate, nextMonthFirstDate, orderTypeList, + List orderList = iSaOrderServiceApi.querySaOrderByTimeForCouponShare(settleDate, nextMonthFirstDate, orderTypeList, acRepurSharRuleConfigExt.getOrderAmount(), acRepurSharRuleConfigExt.getOrderAchieve(), acRepurSharRuleConfigExt.getPkCountry()).getData(); if (CollectionUtil.isNotEmpty(orderList)) { Set memberSet = orderList.stream().distinct().map(SaOrder::getPkMember).collect(Collectors.toSet()); - cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, memberSet); + cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, memberSet); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); for (SaOrder saOrder : orderList) { BigDecimal exchangeRate = BigDecimal.ONE; diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleFirstPurchaseHandle.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleFirstPurchaseHandle.java index e25a06c6..a568c16f 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleFirstPurchaseHandle.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleFirstPurchaseHandle.java @@ -64,7 +64,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { // 查询 各个国家 3单循环 4单循环的配置值 // 获得会员的轮、次,按照订单时间进行 // 根据订单获取轮次,要回写 - List cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, firPurchaseOrderList); + List cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, firPurchaseOrderList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); // 推荐奖明细 List cuMemberBonusPushList = new ArrayList<>(); @@ -95,7 +95,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { if (specialOrderList.size() > 0) { Set memberSet = new HashSet<>(); specialOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember())); - cuMemberSettleExtList = cuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet); + cuMemberSettleExtList = iCuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); // 计算奖金 for (SaOrderExt saOrderExt : specialOrderList) { @@ -403,7 +403,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { } /** - * 计算拓展收益 + * 计算首购拓展收益 * * @param settleTableName 结算表 * @param period 期间 @@ -418,13 +418,17 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { // 根据开始期间、结束期间查询 List cuMemberBonusExpandList = new ArrayList<>(); // 获取所有订单的上级,根据订单往上一步步计算 - Map> memberSettleMap = cuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, firPurchaseOrderList); + // key:订单ID,value:订单向上找安置人列表 + Map> memberSettleMap = iCuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, firPurchaseOrderList); + // 获取复购考核结果 List queryMemberList = new ArrayList<>(); memberSettleMap.forEach((key, value) -> queryMemberList.addAll(value)); Map cuMemberAssessMap = getLongCuMemberAssessMap(settleDate, queryMemberList); + for (SaOrderExt saOrderExt : firPurchaseOrderList) { if (!validateSecondOrderExistBonus(saOrderExt, EBonusItems.EXPANSION_INCOME.getValue())) { + // 校验二次发货需不需要计算量碰 continue; } // 所有需要计算的父节点,只计算新增 @@ -441,7 +445,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { break; } } - List expandList = calculateExpandBonusOne(riskControlMap, cuMemberAssessMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, cuMemberSettleExtList, saOrderExt, true, addTouch, expandRatio, expandNumber); + // 计算量奖(拓展收益) + List expandList = calculateExpandBonusOne(riskControlMap, cuMemberAssessMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO, + systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, cuMemberSettleExtList, saOrderExt, true, addTouch, expandRatio, expandNumber); if (expandList.size() > 0) { cuMemberBonusExpandList.addAll(expandList); } @@ -451,31 +457,140 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { } /** - * @Description: 计算量奖 - * @return: List - * @Author: sui q - * @Date: 2023/2/4 14:18 + * 计算首购量奖(拓展收益) + * + * @return */ - List calculateExpandBonusOne(Map riskControlMap, Map cuMemberAssessMap, String settleTableName, Map cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Map systemConfigMap, - Integer period, Map weekMemberBonusMap, Map cuMemberBonusMap, List cuMemberSettleExtList, SaOrderExt saOrderExt, boolean flag, BigDecimal addTouch, BigDecimal expandRatio, Integer expandNumber) { + List calculateExpandBonusOne(Map riskControlMap, Map cuMemberAssessMap, String settleTableName, + Map cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Map systemConfigMap, + Integer period, Map weekMemberBonusMap, Map cuMemberBonusMap, + List cuMemberSettleExtList, SaOrderExt saOrderExt, boolean flag, + BigDecimal addTouch, BigDecimal expandRatio, Integer expandNumber) { List cuMemberBonusExpandList = new ArrayList<>(); if (CollectionUtil.isEmpty(cuMemberSettleExtList)) { return cuMemberBonusExpandList; } + Map bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap(); // 先计算新增,根据新增计算碰次 // 先进行初始化所有的安置人,存储需要修改的值,cuMemberSettleExtMap最终修改的 if (flag) { + // 日结传入的true,秒结传入的false getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); } + // 先准备值,准备好值后,开始计算,计算碰次 + int touchNum = calculateTouchNum(riskControlMap, cuMemberAssessMap, cuMemberSettleExtMap, saOrderExt, cuMemberSettleExtList, bonusConfigDTO); + + // 有碰次,计算拓展奖 + if (touchNum > 0) { + // 判断是否>3 是否需要启动4-N,4-N的参数按照伞上各安置人结算国家进行获取 + // 先计算前3碰 + int startTouch = touchNum; + // 后面碰次 + int endTouch = 0; + // 获取拓展配置(一般情况,拓展次数 = 3,拓展比例 = 26% + BonusExpandDTO bdBonusExpand = bdBonusExpandMap.get(saOrderExt.getPkCountry()); + int realExpandNumber = expandNumber > 0 ? expandNumber : bdBonusExpand.getExpandNumber(); + if (touchNum > realExpandNumber) { + startTouch = realExpandNumber; + endTouch = touchNum - startTouch; + } + + // 正常的拓展奖计算 + // 计算拓展奖 + for (int i = 1; i <= startTouch; i++) { + for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { + CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); + if (targetMemberSettleExt == null + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + continue; + } + // 验证是否有当前奖金项 + if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue())) { + continue; + } + // 判断左右区是否有值,找到有值的就是有碰次,碰完左区或右区肯定有变为0的 + if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) { + // 根据会员等级获取对应的配置 + BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); + BigDecimal countryExpandRatio = bdGrade.getExpandRatio(); + // 计算量碰 + calculateExpandBonusByAchieve(riskControlMap, period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, + saOrderExt, touchNum, i, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, BigDecimal.ZERO, cuMemberAssessMap); + break; + } + } + } + // 4-N计算 + if (endTouch > 0) { + // 获得每一碰的比例, 找到剩下的碰次的国家 + for (int i = 1; i <= endTouch; i++) { + for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { + CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); + if (targetMemberSettleExt == null + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + continue; + } + // 验证是否有当前奖金项 + if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue())) { + continue; + } + // 判断左右区是否有值,找到有值的就是有碰次,碰完左区或右区肯定有变为0的 + if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) { + // 根据会员等级获取对应的拓展配置 + BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); + // 获取实际拓展比例(拓展配置计算出来的单个碰次 和 等级配置上限,哪个小取哪个) + BigDecimal countryExpandRatio = getCountryExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio); + // 计算量碰 + calculateExpandBonusByAchieve(riskControlMap, period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, + saOrderExt, touchNum, i + startTouch, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, addTouch, cuMemberAssessMap); + break; + } + } + } + + // 将增加的碰次放入烧伤 + if (ComputeUtil.compareValue(addTouch)) { + CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); + CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(2L); + // 根据会员等级获取对应的拓展配置 + BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); + // 获取实际拓展比例(拓展配置计算出来的单个碰次 和 等级配置上限,哪个小取哪个) + BigDecimal countryExpandRatio = getCountryExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio); + countryExpandRatio = ComputeUtil.computeMultiply(countryExpandRatio, addTouch); + CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); + Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue()); + CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, touchNum, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, saOrderExt.getOrderAchieve(), pkBonusItems, addTouch); + expandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt); + cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); + BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), bdGrade.getExpandRatio()); + BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio); + packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome); + setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); + if (ComputeUtil.compareValue(addTouch)) { + cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "增加碰次:" + addTouch + "。"); + } + cuMemberBonusExpandList.add(cuMemberBonusExpand); + } + } + } + return cuMemberBonusExpandList; + } + + + private int calculateTouchNum(Map riskControlMap, Map cuMemberAssessMap, Map cuMemberSettleExtMap, + SaOrderExt saOrderExt, List cuMemberSettleExtList, BonusConfigDTO bonusConfigDTO) { int touchNum = 0; for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) { // 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序 CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || - EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { + if (targetMemberSettleExt == null + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { continue; } // 验证是否计算奖金 @@ -532,94 +647,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { } // 判断左右区是否有值,左右区有值有碰次 if (ComputeUtil.compareValue(targetMemberSettleExt.getRABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRBBalance())) { + // 取左区、右区,最小的那个业绩 + // 左右、右区,都减掉最小的业绩,就是左区、右区的结余 BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRABalance(), targetMemberSettleExt.getRBBalance()); targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve)); targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve)); } } - // 有碰次,计算拓展奖 - if (touchNum > 0) { - // 判断是否>3 是否需要启动4-N,4-N的参数按照伞上各安置人结算国家进行获取 - // 先计算前3碰 - int startTouch = touchNum; - // 后面碰次 - int endTouch = 0; - BonusExpandDTO bdBonusExpand = bdBonusExpandMap.get(saOrderExt.getPkCountry()); - int realExpandNumber = expandNumber > 0 ? expandNumber : bdBonusExpand.getExpandNumber(); - if (touchNum > realExpandNumber) { - startTouch = realExpandNumber; - endTouch = touchNum - startTouch; - } - // 正常的拓展奖计算 - // 计算拓展奖 - for (int i = 1; i <= startTouch; i++) { - for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { - continue; - } - if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue())) { - continue; - } - // 判断左右区是否有值,找到有值的就是有碰次,碰完左区或右区肯定有变为0的 - if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) { - // 根据会员等级获取对应的配置 - BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); - BigDecimal countryExpandRatio = bdGrade.getExpandRatio(); - calculateExpandBonusByAchieve(riskControlMap, period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, saOrderExt, touchNum, i, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, BigDecimal.ZERO, cuMemberAssessMap); - break; - } - } - } - // 4-N计算 - if (endTouch > 0) { - // 获得每一碰的比例, 找到剩下的碰次的国家 - for (int i = 1; i <= endTouch; i++) { - for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { - continue; - } - if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue())) { - continue; - } - // 判断左右区是否有值,找到有值的就是有碰次,碰完左区或右区肯定有变为0的 - if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) { - // 根据会员等级获取对应的配置 - BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); - // 获取国家4-n的配置 - BigDecimal countryExpandRatio = getCountryExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio); - calculateExpandBonusByAchieve(riskControlMap, period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, saOrderExt, touchNum, i + startTouch, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, addTouch, cuMemberAssessMap); - break; - } - } - } - // 将增加的碰次放入烧伤 - if (ComputeUtil.compareValue(addTouch)) { - CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(2L); - BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); - BigDecimal countryExpandRatio = getCountryExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio); - countryExpandRatio = ComputeUtil.computeMultiply(countryExpandRatio, addTouch); - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); - Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue()); - CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, touchNum, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, saOrderExt.getOrderAchieve(), pkBonusItems, addTouch); - expandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt); - cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); - BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), bdGrade.getExpandRatio()); - BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio); - packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome); - setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); - if (ComputeUtil.compareValue(addTouch)) { - cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "增加碰次:" + addTouch + "。"); - } - cuMemberBonusExpandList.add(cuMemberBonusExpand); - } - } - } - return cuMemberBonusExpandList; + return touchNum; } /** @@ -633,7 +668,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { List cuMemberBonusCoachList = new ArrayList<>(); if (cuMemberBonusExpandList.size() > 0) { Set expandMemberSet = getMemberExpandBonus(cuMemberBonusMap, cuMemberBonusExpandList); - List cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet); + List cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet); // 初始化父类网体的值 getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); List queryMemberList = getQueryMemberSettleExtList(cuMemberSettleExtMap, cuMemberSettleExtList); @@ -805,15 +840,13 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { } /** + * 计算报单服务费 + * * @param settleTableName 结算表 * @param period 期间 * @param bonusConfigDTO 参数 * @param firPurchaseOrderList 订单列表 * @param cuMemberBonusMap 所有计算出来的奖金汇总 - * @Description: 计算报单服务费 - * @return: List - * @Author: sui q - * @Date: 2022/11/17 14:14 */ List calculateServiceBonus(Map cuMemberSettleExtMap, String settleDate, String settleTableName, BonusConfigDTO bonusConfigDTO, List firPurchaseOrderList, Integer period, Map cuMemberBonusMap) { @@ -830,8 +863,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { // 计算报单服务费 for (SaOrderExt saOrderExt : firPurchaseOrderList) { // 只有注册订单有报单服务费 - if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType() || - Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrderExt.getOrderType())) { + if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType() + || Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrderExt.getOrderType())) { CuMemberBonusDetail cuMemberBonusDetail = calculateServiceBonusOne(settleDate, cuMemberAssessMap, cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt); if (cuMemberBonusDetail != null) { cuMemberBonusDetailList.add(cuMemberBonusDetail); @@ -854,15 +887,18 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { return null; } CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkCenterCode()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || - ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) { + if (targetMemberSettleExt == null + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) { + // 非正常会员、停算收益、不是服务中心,都不进行处理 return null; } // 验证是否有奖金 if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.SERVICE_SUBSIDIES.getValue())) { return null; } + // 获取会员奖金数据 CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); BdBonusService bdBonusService = bonusConfigDTO.getBonusServiceMap().get(targetMemberSettleExt.getPkSettleCountry().toString() + EServiceType.SUBSIDY.getValue()); // if (bdBonusService.getAssessmentType() != null && EAssessmentType.REPURCHASE_ASSESS.getValue() == bdBonusService.getAssessmentType()) { @@ -914,20 +950,20 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { String currentFirstDate = DateUtils.currentMonthFirstDateStr(settleDate); String beforeMonthLastDate = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, currentFirstDate); // 查询上月最后一天 - Integer beforeMonthLastPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthLastDate).getPkId(); + Integer beforeMonthLastPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthLastDate).getPkId(); String settleTableName = TableNameConstants.CU_MEMBER_SETTLE + beforeMonthLastPeriod; String rangeTableName = TableNameConstants.CU_MEMBER_RANGE + beforeMonthLastPeriod; // 查询上月第一天 String beforeMonthFirstDate = DateUtils.beforeMonthFirstDateStr(settleDate); - Integer beforeMonthFirstPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDate).getPkId(); + Integer beforeMonthFirstPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDate).getPkId(); // 查询上月最后一天会员等级达到奖衔的会员 - Integer assessPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentFirstDate).getPkId(); + Integer assessPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentFirstDate).getPkId(); String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(settleDateStr); // 获取结算日期的第一天的日期 // 查询复购考核结果 - List cuMemberSettleExtList = cuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod); + List cuMemberSettleExtList = iCuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod); if (CollectionUtil.isNotEmpty(cuMemberSettleExtList)) { - Map cuMemberAssessMap = cuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList); + Map cuMemberAssessMap = iCuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList); for (CuMemberSettleExt targetMemberSettleExt : cuMemberSettleExtList) { SaOrder saOrder = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build(); saOrder.setPkCountry(targetMemberSettleExt.getPkSettleCountry()); @@ -971,7 +1007,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { repurchaseOrderList.forEach(saOrderExt -> expandMemberSet.add(saOrderExt.getPkMember())); mallOrderList.forEach(saOrderExt -> expandMemberSet.add(saOrderExt.getPkMember())); if (expandMemberSet.size() > 0) { - List cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet); + List cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet); // 初始化父类网体的值 getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); for (SaOrderExt saOrderExt : firPurchaseOrderList) { @@ -1018,6 +1054,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { } /** + * 计算首购量碰 + * * @param period 期间 * @param cuMemberBonusMap 奖金汇总 * @param cuMemberBonusExpandList 拓展奖奖金明细 @@ -1028,15 +1066,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { * @param targetMemberSettleExt 获得奖金的人 * @param bdGrade 等级对应的参数 * @param countryExpandRatio 4-n时计算国家对应的参数 - * @Description: 计算量碰 - * @return: void - * @Author: sui q - * @Date: 2022/11/16 15:51 */ private void calculateExpandBonusByAchieve(Map riskControlMap, Integer period, Map weekMemberBonusMap, Map cuMemberBonusMap, - BonusConfigDTO bonusConfigDTO, Map systemConfigMap, List cuMemberBonusExpandList, SaOrderExt saOrderExt, int touchNum, int i, - CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt, BdGrade bdGrade, BigDecimal countryExpandRatio, BigDecimal addTouch, Map cuMemberAssessMap) { + BonusConfigDTO bonusConfigDTO, Map systemConfigMap, List cuMemberBonusExpandList, + SaOrderExt saOrderExt, int touchNum, int i, CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt, + BdGrade bdGrade, BigDecimal countryExpandRatio, BigDecimal addTouch, Map cuMemberAssessMap) { + // 获取拓展收益奖项ID Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue()); + // 验证封顶方式 1=日 2=周,若是周的话需要获取 周奖金 // BigDecimal weekExpandIncome = BigDecimal.ZERO; // if (systemConfigMap.containsKey(targetMemberSettleExt.getPkSettleCountry().toString() + ESystemConfig.EXPAND_CAP_METHOD.getKey())) { @@ -1046,29 +1083,38 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { // weekExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getExpandIncome(); // } // } + + // 等级对应拓展比例 BigDecimal gradeExpandRatio = bdGrade.getExpandRatio(); - // 验证受益人等级 - CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode()); - if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) && - cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) { - if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) { - if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) { - countryExpandRatio = BigDecimal.valueOf(13); - } - } else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) { - if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) { - countryExpandRatio = BigDecimal.valueOf(11); - } - } - } + + // TODO new 中国会员,指定日期之前计算比例 +// // 验证受益人等级 +// CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode()); +// if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) +// && cuMember != null +// && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) { +// if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) { +// if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) { +// countryExpandRatio = BigDecimal.valueOf(13); +// } +// } else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) { +// if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) { +// countryExpandRatio = BigDecimal.valueOf(11); +// } +// } +// } + // 获取等级封顶值 CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); + // 左右区获取最小的 BigDecimal calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getABalance(), targetMemberSettleExt.getBBalance()); + CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, i, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, calAchieve, pkBonusItems, addTouch); // 扣减a、b区结余 targetMemberSettleExt.setABalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getABalance(), calAchieve)); targetMemberSettleExt.setBBalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getBBalance(), calAchieve)); - // 计算收益 先计算出会员最大的收益 + + // 计算收益 先计算出会员最大的收益(按等级拓展比例进行计算出最大值) BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), gradeExpandRatio); BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio); // K值设置 @@ -1076,26 +1122,37 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { actualIncome = ComputeUtil.computeBonusMultiply(actualIncome, riskControlMap.get(cuMemberBonus.getPkMember()).getExpandRatio()); cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.RISK_CONTROL.getValue()); } - // 获取等级对应的封顶值 + + // 获取等级对应的封顶值(因为先计算复购,再计算首购,封顶需要把复购拓展也加上) BigDecimal expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), actualIncome), cuMemberBonus.getRepurExpandIncome()); + // 判断收益 是否超过封顶值,超过的话变为封顶值 // 判断是否烧伤,判断原奖金是否>=封顶值,奖金到了就是烧伤 // 验证会员状态 封停状态跟冻结都正常计算奖金,封停的账号发放的时候奖金发放为0,冻结的账号正常发放,不能登录 packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome); + if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()), bdGrade.getExpandCapping())) { + // 拓展收益 累加 复购收益 >= 封顶值 if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); } expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome())); } else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getExpandCapping())) { BigDecimal realIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome())); - //存在一半烧伤一半正常的值,拆2条 + // 存在一半烧伤一半正常的值,拆2条 // 拓展明细表 进行修改 packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), realIncome, realIncome); + CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class); BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome); if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) { - fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); + // TODO new V3 V4 没有烧伤,改为延缓发放 + if (EGrade.VIP.getValue() == bdGrade.getGradeValue() + || EGrade.S_VIP.getValue() == bdGrade.getGradeValue()) { + fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.DELAY_GRANT.getValue()); + } else { + fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); + } } packageCuMemberBonusExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), fireIncome, fireIncome); // 收益占比 @@ -1105,15 +1162,19 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { // 拓展收益取封顶最大值 expandIncome = bdGrade.getExpandCapping(); } + // 收益占比 BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); expandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt); + if (riskControlMap.containsKey(cuMemberBonus.getPkMember())) { cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "K值比例:" + riskControlMap.get(cuMemberBonus.getPkMember()).getExpandRatio() + "。"); } if (ComputeUtil.compareValue(addTouch)) { cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "增加碰次:" + addTouch + "。"); } + + // 正常状态的辅导奖需要判断复购考核,复购考核不通过的状态变为烧伤 if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus() && EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) { // 需要复购考核的 @@ -1122,6 +1183,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); } } + if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus() || EBonusIncomeStatus.RISK_CONTROL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { // 判断会员状态,会员状态为封停的话状态修改为停收 diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java index 6a0a4ba3..2023dff7 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java @@ -52,24 +52,22 @@ import java.util.*; public abstract class BonusSettleHandle { @Autowired - protected ICuMemberTreeService cuMemberTreeService; + protected ICuMemberTreeService iCuMemberTreeService; @Autowired - protected ICuMemberSettlePeriodService cuMemberSettlePeriodService; + protected ICuMemberSettlePeriodService iCuMemberSettlePeriodService; @Autowired - protected ICuMemberAssessService cuMemberAssessService; + protected ICuMemberAssessService iCuMemberAssessService; @DubboReference - ISaOrderServiceApi saOrderServiceApi; + ISaOrderServiceApi iSaOrderServiceApi; @DubboReference - ICurrencyServiceApi currencyServiceApi; + ICurrencyServiceApi iCurrencyServiceApi; /** + * 获取等级对应的拓展奖配置 + * * @param bonusConfigDTO 奖金参数汇总 * @param memberSettleExt 会员 - * @Description: 获取等级对应的拓展奖配置 - * @return: BdGrade - * @Author: sui q - * @Date: 2022/11/16 11:24 */ protected BdGrade getGradeExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt) { return bonusConfigDTO.getGradeMap().get(memberSettleExt.getPkSettleCountry().toString() + "_" + memberSettleExt.getPkGrade()); @@ -98,27 +96,29 @@ public abstract class BonusSettleHandle { } /** + * 获取扩展比例(拓展配置比例 >= 等级拓展比例,取等级拓展比例) + * -- 获得国家对应的4-n参数比例 + * * @param bonusConfigDTO 奖金配置汇总 * @param memberSettleExt 会员 * @param endTouch 4-n的次数 * @param bdGrade 等级 - * @Description: 获得国家对应的4-n参数比例 - * @return: BigDecimal - * @Author: sui q - * @Date: 2022/11/16 11:27 + * @param addTouch 配置追加的碰次 */ protected BigDecimal getCountryExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade, BigDecimal addTouch, BigDecimal editExpandRatio) { BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry()); + // 总碰次 = 实际计算出来的碰次 + 配置追加的碰次 BigDecimal totalTouch = ComputeUtil.computeAdd(BigDecimal.valueOf(endTouch), addTouch); + // 配置的4-N总比例(一般26%) BigDecimal expandRatio = bonusExpand.getExpandRatio(); - if (memberSettleExt.getPkVertex() != null && memberSettleExt.getPkVertex().equals(377L)) { - expandRatio = BigDecimal.valueOf(13); - } else if (ComputeUtil.compareValue(editExpandRatio)) { + if (ComputeUtil.compareValue(editExpandRatio)) { expandRatio = editExpandRatio; } + // 4-N拓展比例 % 总碰次,得出一碰的比例 BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, totalTouch); if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getExpandRatio())) { + // 一碰的比例大于等级的拓展比例,使用等于的拓展比例 return bdGrade.getExpandRatio(); } return countryExpandRatio; @@ -137,12 +137,9 @@ public abstract class BonusSettleHandle { protected BigDecimal getCountryRepurchaseExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade, BigDecimal addTouch, BigDecimal editExpandRatio) { BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry()); BigDecimal expandRatio = bonusExpand.getExpandRatio(); - if (memberSettleExt.getPkVertex() != null && memberSettleExt.getPkVertex().equals(377L)) { - expandRatio = BigDecimal.valueOf(13); - } else if (ComputeUtil.compareValue(editExpandRatio)) { + if (ComputeUtil.compareValue(editExpandRatio)) { expandRatio = editExpandRatio; } - // 验证是否是爱美视团队 BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, BigDecimal.valueOf(endTouch)); if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getRepurchaseRatio())) { return bdGrade.getRepurchaseRatio(); @@ -720,9 +717,9 @@ public abstract class BonusSettleHandle { } Date settleDate = DateUtils.parseStringToDate(settleDateStr); // 获取结算日期的第一天的日期 - Integer assessPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.currentMonthFirstDateStr(settleDate)).getPkId(); + Integer assessPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.currentMonthFirstDateStr(settleDate)).getPkId(); String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(settleDateStr); - return cuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList); + return iCuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList); } /** @@ -738,7 +735,7 @@ public abstract class BonusSettleHandle { CuMemberSettleExt cuMemberSettleExt) { Integer pkRate = saOrder.getPkRate(); if (pkRate == null || !Objects.equals(cuMemberSettleExt.getPkSettleCountry(), saOrder.getPkCountry())) { - CurrencyDTO currencyDTO = currencyServiceApi.getCurrency(cuMemberSettleExt.getPkSettleCountry()).getData(); + CurrencyDTO currencyDTO = iCurrencyServiceApi.getCurrency(cuMemberSettleExt.getPkSettleCountry()).getData(); pkRate = currencyDTO.getPkId(); } return getCuMemberBonus(period, cuMemberBonusMap, cuMemberSettleExt.getPkMember(), cuMemberSettleExt.getIncomeStatus(), @@ -866,7 +863,7 @@ public abstract class BonusSettleHandle { protected List getMemberParentBySaOrder(Map cuMemberSettleExtMap, String settleTableName, List saOrderList) { Set memberSet = new HashSet<>(); saOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember())); - List cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, memberSet); + List cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, memberSet); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); return cuMemberSettleExtList; } @@ -1156,15 +1153,18 @@ public abstract class BonusSettleHandle { return Boolean.TRUE; } - /* - * @description: 根据会员主键列表获得会员只 - * @author: sui q - * @date: 17:29 - * @param: null null - **/ + /** + * 根据会员主键列表获得会员 + * + * @param cuMemberSettleExtMap + * @param settleDate + * @param settleTableName + * @param memberSet + * @return + */ protected Map packageMemberSettleByPkMemberSet(Map cuMemberSettleExtMap, String settleDate, String settleTableName, Set memberSet) { if (memberSet.size() > 0) { - List cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(settleTableName, memberSet); + List cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(settleTableName, memberSet); // 初始化父类网体的值 getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); return getLongCuMemberAssessMap(settleDate, cuMemberSettleExtList); diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java index b550bbaa..626b33ae 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java @@ -120,7 +120,7 @@ public class BonusSettleHiFunHandle extends BonusSettleHandle { } }); if (haiFunMemberSet.size() > 0) { - List cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet); + List cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet); // 初始化父类网体的值 getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); } diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleMallHandle.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleMallHandle.java index 32c64ab3..30e0a903 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleMallHandle.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleMallHandle.java @@ -32,7 +32,7 @@ public class BonusSettleMallHandle extends BonusSettleHandle { } }); if (queryMallSaOrderList.size() > 0) { - List cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, queryMallSaOrderList); + List cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, queryMallSaOrderList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); } mallSaOrderList.forEach(saOrderExt -> { diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java index a3151251..1588d21c 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java @@ -134,22 +134,22 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { } /** + * 计算复购拓展收益 + * * @param settleTableName 结算表 * @param period 期间 * @param bonusConfigDTO 参数 * @param purchaseOrderList 首单 * @param cuMemberBonusMap 所有计算出来的奖金汇总 - * @Description: 计算复购拓展收益 - * @return: void - * @Author: sui q - * @Date: 2022/11/10 14:17 */ - List calculateRepurchaseExpandBonus(Map riskControlMap, Map cuMemberSettleExtMap, String settleTableName, String settleDateStr, BonusConfigDTO bonusConfigDTO, Map systemConfigMap, + List calculateRepurchaseExpandBonus(Map riskControlMap, Map cuMemberSettleExtMap, String settleTableName, String settleDateStr, + BonusConfigDTO bonusConfigDTO, Map systemConfigMap, List purchaseOrderList, Integer period, Map weekMemberBonusMap, Map cuMemberBonusMap, Map cuBonusExpandExtMap) { List cuMemberBonusExpandList = new ArrayList<>(); // 获取所有订单的上级,根据订单往上一步步计算 // key:订单ID,value:订单向上找安置人列表 - Map> memberSettleMap = cuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, purchaseOrderList); + Map> memberSettleMap = iCuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, purchaseOrderList); + List memberSettleExtList = new ArrayList<>(); for (List cuMemberSettleExt : memberSettleMap.values()) { memberSettleExtList.addAll(cuMemberSettleExt); @@ -157,8 +157,10 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { getMemberSettle(cuMemberSettleExtMap, memberSettleExtList); // key:会员ID,value:会员考核信息 Map cuMemberAssessMap = getCuMemberAssessMap(cuMemberSettleExtMap, settleDateStr, memberSettleExtList); + for (SaOrderExt saOrderExt : purchaseOrderList) { if (!validateSecondOrderExistBonus(saOrderExt, EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) { + // 校验二次发货需不需要计算量碰 continue; } // 所有需要计算的父节点,只计算新增 @@ -175,10 +177,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { break; } } - List newMemberBonusExpandList = calculateRepurchaseExpandBonusOne(riskControlMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, + // 计算量奖(拓展收益) + List expandList = calculateRepurchaseExpandBonusOne(riskControlMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, cuMemberAssessMap, saOrderExt, cuMemberSettleExtList, addTouch, expandRatio, expandNumber); - if (newMemberBonusExpandList.size() > 0) { - cuMemberBonusExpandList.addAll(newMemberBonusExpandList); + if (expandList.size() > 0) { + cuMemberBonusExpandList.addAll(expandList); } } // 根据订单往上穿业绩,只计算新增 @@ -216,12 +219,18 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { return calculateRepurchasePushBonusOne(cuMemberSettleExtMap, bonusConfigDTO, cuMemberAssessMap, period, cuMemberBonusMap, saOrderExt); } - - private List calculateRepurchaseExpandBonusOne(Map riskControlMap, String settleName, Map cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Map systemConfigMap, Integer period, - Map weekMemberBonusMap, Map cuMemberBonusMap, Map cuMemberAssessMap, - SaOrderExt saOrderExt, List cuMemberSettleExtList, BigDecimal addTouch, BigDecimal expandRatio, Integer expandNumber) { - Map bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap(); + /** + * 计算复购量奖(拓展收益) + * + * @return + */ + private List calculateRepurchaseExpandBonusOne(Map riskControlMap, String settleName, Map cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, + Map systemConfigMap, Integer period, Map weekMemberBonusMap, Map cuMemberBonusMap, + Map cuMemberAssessMap, SaOrderExt saOrderExt, List cuMemberSettleExtList, + BigDecimal addTouch, BigDecimal expandRatio, Integer expandNumber) { List cuMemberBonusExpandList = new ArrayList<>(); + + Map bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap(); CuMemberSettleExt settleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); if (settleExt == null) { return cuMemberBonusExpandList; @@ -233,8 +242,10 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { // 先计算新增,根据新增计算碰次 // 先进行初始化所有的安置人,存储需要修改的值,cuMemberSettleExtMap最终修改的 // getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); + // 先准备值,准备好值后,开始计算,计算碰次 - int touchNum = calculateTouchNum(riskControlMap, settleName, cuMemberAssessMap, cuMemberSettleExtMap, saOrderExt, cuMemberSettleExtList, bonusConfigDTO); + int touchNum = calculateTouchNum(riskControlMap, cuMemberAssessMap, cuMemberSettleExtMap, saOrderExt, cuMemberSettleExtList, bonusConfigDTO); + // 有碰次,计算拓展奖 if (touchNum > 0) { // 判断是否>3 是否需要启动4-N,4-N的参数按照伞上各安置人结算国家进行获取 @@ -248,27 +259,30 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { startTouch = realExpandNumber; endTouch = touchNum - startTouch; } + // 正常的拓展奖计算 // 计算拓展奖 for (int i = 1; i <= startTouch; i++) { for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + if (targetMemberSettleExt == null + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { continue; } + // 验证是否有当前奖金项 if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) { continue; } // 判断左右区是否有值,找到有值的就是有碰次,碰完左区或右区肯定有变为0的 - // 判断左右区是否有值,找到有值的就是有碰次,碰完左区或右区肯定有变为0的 - if ((targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) && ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) + if ((ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) || (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance()))) { // 根据会员等级获取对应的配置 BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); BigDecimal countryExpandRatio = bdGrade.getRepurchaseRatio(); - Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue()); - calculateRepurchaseExpandBonusByAchieve(period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, saOrderExt, touchNum, i, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, pkBonusItems, cuMemberAssessMap); + // 计算量碰 + calculateRepurchaseExpandBonusByAchieve(period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, + saOrderExt, touchNum, i, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, cuMemberAssessMap); break; } } @@ -279,22 +293,25 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { for (int i = 1; i <= endTouch; i++) { for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + if (targetMemberSettleExt == null + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { continue; } + // 验证是否有当前奖金项 if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) { continue; } // 判断左右区是否有值,找到有值的就是有碰次,碰完左区或右区肯定有变为0的 - if ((targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) && ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) + if ((ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) || (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance()))) { // 根据会员等级获取对应的配置 BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); // 获取国家4-n的配置 BigDecimal countryExpandRatio = getCountryRepurchaseExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio); - Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue()); - calculateRepurchaseExpandBonusByAchieve(period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, saOrderExt, touchNum, i + startTouch, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, pkBonusItems, cuMemberAssessMap); + // 计算量碰 + calculateRepurchaseExpandBonusByAchieve(period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, + saOrderExt, touchNum, i + startTouch, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, cuMemberAssessMap); break; } } @@ -304,15 +321,16 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { return cuMemberBonusExpandList; } - private int calculateTouchNum(Map riskControlMap, String settleName, Map cuMemberAssessMap, - Map cuMemberSettleExtMap, SaOrderExt saOrderExt, List cuMemberSettleExtList, BonusConfigDTO bonusConfigDTO) { + private int calculateTouchNum(Map riskControlMap, Map cuMemberAssessMap, Map cuMemberSettleExtMap, + SaOrderExt saOrderExt, List cuMemberSettleExtList, BonusConfigDTO bonusConfigDTO) { int touchNum = 0; for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) { // 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序 CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || - EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { + if (targetMemberSettleExt == null + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { continue; } // 验证是否计算奖金 @@ -320,74 +338,73 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { if (bdGrade.getRepurchaseCalculate() != null && EYesNo.NO.getIntValue() == bdGrade.getRepurchaseCalculate()) { continue; } - if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { - if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) { - // 左区 - // K值设置 - if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) { - CuMemberRiskControl cuMemberRiskControl = riskControlMap.get(targetMemberSettleExt.getPkMember()); - targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), ComputeUtil.computeBonusMultiply(convertLocalCurrency(saOrderExt, bonusConfigDTO), cuMemberRiskControl.getAchieveRatio()))); - targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio()))); - targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio()))); - } else { - targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); - targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), saOrderExt.getUploadAchieve())); - targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), saOrderExt.getUploadAchieve())); - } - targetMemberSettleExt.setRABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRABalance(), saOrderExt.getUploadAchieve())); -// } +// if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { + if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) { + // 左区 + // K值设置 + if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) { + CuMemberRiskControl cuMemberRiskControl = riskControlMap.get(targetMemberSettleExt.getPkMember()); + targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), ComputeUtil.computeBonusMultiply(convertLocalCurrency(saOrderExt, bonusConfigDTO), cuMemberRiskControl.getAchieveRatio()))); + targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio()))); + targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio()))); } else { - // 右区 - if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) { - CuMemberRiskControl cuMemberRiskControl = riskControlMap.get(targetMemberSettleExt.getPkMember()); - targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), ComputeUtil.computeBonusMultiply(convertLocalCurrency(saOrderExt, bonusConfigDTO), cuMemberRiskControl.getAchieveRatio()))); - targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio()))); - targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio()))); - } else { - targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); - targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), saOrderExt.getUploadAchieve())); - targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), saOrderExt.getUploadAchieve())); - } - targetMemberSettleExt.setRBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRBBalance(), saOrderExt.getUploadAchieve())); - } - // 判断左右区是否有值,左右区有值有碰次 - if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) { - // 国内量奖修改为考核不通过的不占用4-N,不算奖金 - // 验证是否验证考核 - touchNum++; - } - // 判断左右区是否有值,左右区有值有碰次 - if (ComputeUtil.compareValue(targetMemberSettleExt.getRABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRBBalance())) { - BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRABalance(), targetMemberSettleExt.getRBBalance()); - targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve)); - targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve)); + targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); + targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), saOrderExt.getUploadAchieve())); + targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), saOrderExt.getUploadAchieve())); } + targetMemberSettleExt.setRABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRABalance(), saOrderExt.getUploadAchieve())); } else { - // 嗨粉、海粉没有量奖 - if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) { - // 左区 - targetMemberSettleExt.setRepANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); - targetMemberSettleExt.setRepANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewPv(), saOrderExt.getUploadAchieve())); - targetMemberSettleExt.setRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepABalance(), saOrderExt.getUploadAchieve())); - targetMemberSettleExt.setRRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepABalance(), saOrderExt.getUploadAchieve())); + // 右区 + if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) { + CuMemberRiskControl cuMemberRiskControl = riskControlMap.get(targetMemberSettleExt.getPkMember()); + targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), ComputeUtil.computeBonusMultiply(convertLocalCurrency(saOrderExt, bonusConfigDTO), cuMemberRiskControl.getAchieveRatio()))); + targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio()))); + targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio()))); } else { - // 右区 - targetMemberSettleExt.setRepBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); - targetMemberSettleExt.setRepBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewPv(), saOrderExt.getUploadAchieve())); - targetMemberSettleExt.setRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBBalance(), saOrderExt.getUploadAchieve())); - targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepBBalance(), saOrderExt.getUploadAchieve())); - } - // 判断左右区是否有值,左右区有值有碰次 - if (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance())) { - touchNum++; - } - // 判断左右区是否有值,左右区有值有碰次 - if (ComputeUtil.compareValue(targetMemberSettleExt.getRRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRRepBBalance())) { - BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRRepABalance(), targetMemberSettleExt.getRRepBBalance()); - targetMemberSettleExt.setRRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepABalance(), minAchieve)); - targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepBBalance(), minAchieve)); + targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); + targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), saOrderExt.getUploadAchieve())); + targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), saOrderExt.getUploadAchieve())); } + targetMemberSettleExt.setRBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRBBalance(), saOrderExt.getUploadAchieve())); } + // 判断左右区是否有值,左右区有值有碰次 + if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) { + // 国内量奖修改为考核不通过的不占用4-N,不算奖金 + // 验证是否验证考核 + touchNum++; + } + // 判断左右区是否有值,左右区有值有碰次 + if (ComputeUtil.compareValue(targetMemberSettleExt.getRABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRBBalance())) { + BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRABalance(), targetMemberSettleExt.getRBBalance()); + targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve)); + targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve)); + } +// } else { +// // 嗨粉、海粉没有量奖 +// if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) { +// // 左区 +// targetMemberSettleExt.setRepANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); +// targetMemberSettleExt.setRepANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewPv(), saOrderExt.getUploadAchieve())); +// targetMemberSettleExt.setRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepABalance(), saOrderExt.getUploadAchieve())); +// targetMemberSettleExt.setRRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepABalance(), saOrderExt.getUploadAchieve())); +// } else { +// // 右区 +// targetMemberSettleExt.setRepBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); +// targetMemberSettleExt.setRepBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewPv(), saOrderExt.getUploadAchieve())); +// targetMemberSettleExt.setRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBBalance(), saOrderExt.getUploadAchieve())); +// targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepBBalance(), saOrderExt.getUploadAchieve())); +// } +// // 判断左右区是否有值,左右区有值有碰次 +// if (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance())) { +// touchNum++; +// } +// // 判断左右区是否有值,左右区有值有碰次 +// if (ComputeUtil.compareValue(targetMemberSettleExt.getRRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRRepBBalance())) { +// BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRRepABalance(), targetMemberSettleExt.getRRepBBalance()); +// targetMemberSettleExt.setRRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepABalance(), minAchieve)); +// targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepBBalance(), minAchieve)); +// } +// } } return touchNum; } @@ -647,7 +664,7 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { if (specialOrderList.size() > 0) { // 查找订单血缘上会员 Set expandMemberSet = specialOrderList.stream().distinct().map(SaOrderExt::getPkMember).collect(Collectors.toSet()); - List specialMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParentForSpecial(settleTableName, expandMemberSet); + List specialMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParentForSpecial(settleTableName, expandMemberSet); // 重算的时候首先先把数量还回来,在重新计算,查询订单扣除的记录 List acPickMemberLogList = acPickServiceApi.queryPickMemberLog(specialOrderList).getData(); @@ -938,6 +955,8 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { } /** + * 计算复购量碰 + * * @param period 期间 * @param cuMemberBonusMap 奖金汇总 * @param cuMemberBonusExpandList 拓展奖奖金明细 @@ -948,50 +967,55 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { * @param targetMemberSettleExt 获得奖金的人 * @param bdGrade 等级对应的参数 * @param countryExpandRatio 4-n时计算国家对应的参数 - * @Description: 计算量碰 - * @return: void - * @Author: sui q - * @Date: 2022/11/16 15:51 */ private void calculateRepurchaseExpandBonusByAchieve(Integer period, Map weekMemberBonusMap, Map cuMemberBonusMap, - BonusConfigDTO bonusConfigDTO, Map systemConfigMap, List cuMemberBonusExpandList, SaOrderExt saOrderExt, int touchNum, int i, - CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt, BdGrade bdGrade, BigDecimal countryExpandRatio, Integer pkBonusItems, - Map cuMemberAssessMap) { - // 验证封顶方式 1=日 2=周,若是周的话需要获取 周奖金 + BonusConfigDTO bonusConfigDTO, Map systemConfigMap, List cuMemberBonusExpandList, + SaOrderExt saOrderExt, int touchNum, int i, CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt, + BdGrade bdGrade, BigDecimal countryExpandRatio, Map cuMemberAssessMap) { + // 获取拓展收益奖项ID + Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue()); + + // 验证封顶方式 1=日 2=周,若是周的话需要获取 周奖金(首购已经去掉周封顶逻辑,此处周封顶默认0,后续代码可以不需要修改) BigDecimal weekRepExpandIncome = BigDecimal.ZERO; - if (systemConfigMap.containsKey(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.EXPAND_CAP_METHOD.getKey())) { - String expandCapMethod = systemConfigMap.get(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.EXPAND_CAP_METHOD.getKey()); - if (Objects.equals(expandCapMethod, EExpandCapMethod.WEEK_SETTLE.toString()) && - weekMemberBonusMap.containsKey(targetMemberSettleExt.getPkMember())) { - weekRepExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getRepurExpandIncome(); - } - } +// if (systemConfigMap.containsKey(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.EXPAND_CAP_METHOD.getKey())) { +// String expandCapMethod = systemConfigMap.get(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.EXPAND_CAP_METHOD.getKey()); +// if (Objects.equals(expandCapMethod, EExpandCapMethod.WEEK_SETTLE.toString()) && +// weekMemberBonusMap.containsKey(targetMemberSettleExt.getPkMember())) { +// weekRepExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getRepurExpandIncome(); +// } +// } + // 国内使用首购比例首购封顶 BigDecimal gradeExpandRatio = bdGrade.getRepurchaseRatio(); - if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { - gradeExpandRatio = bdGrade.getExpandRatio(); - // 验证受益人等级 - CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode()); - if (cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) { - if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) { - if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) { - countryExpandRatio = BigDecimal.valueOf(13); - } - } else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) { - if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) { - countryExpandRatio = BigDecimal.valueOf(11); - } - } - } - } + +// // TODO new 中国会员,指定日期之前计算比例 +// if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { +// gradeExpandRatio = bdGrade.getExpandRatio(); +// // 验证受益人等级 +// CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode()); +// if (cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) { +// if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) { +// if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) { +// countryExpandRatio = BigDecimal.valueOf(13); +// } +// } else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) { +// if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) { +// countryExpandRatio = BigDecimal.valueOf(11); +// } +// } +// } +// } + // 获取等级封顶值 CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); + // 左右区获取最小的 BigDecimal calAchieve; if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getABalance(), targetMemberSettleExt.getBBalance()); } else { calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRepABalance(), targetMemberSettleExt.getRepBBalance()); } + CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, i, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, calAchieve, pkBonusItems, BigDecimal.ZERO); if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { targetMemberSettleExt.setABalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getABalance(), calAchieve)); @@ -1001,32 +1025,51 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { targetMemberSettleExt.setRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRepABalance(), calAchieve)); targetMemberSettleExt.setRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRepBBalance(), calAchieve)); } + // 计算收益 先计算出会员最大的收益 BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), gradeExpandRatio); BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio); + // 获取等级对应的封顶值 BigDecimal expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getRepurExpandIncome(), actualIncome), weekRepExpandIncome); + if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { - // 获取等级对应的封顶值 + // 获取等级对应的封顶值(中国重新赋值封顶值) expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), expandIncome), weekRepExpandIncome); // 判断收益 是否超过封顶值,超过的话变为封顶值 // 判断是否烧伤,判断原奖金是否>=封顶值,奖金到了就是烧伤 // 验证会员状态 封停状态跟冻结都正常计算奖金,封停的账号发放的时候奖金发放为0,冻结的账号正常发放,不能登录 packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome); + if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()), bdGrade.getExpandCapping())) { + // 拓展收益 累加 复购收益 >= 封顶值 if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { - cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); + // 状态为烧伤 + // TODO new V3 V4 没有烧伤,改为延缓发放 + if (EGrade.VIP.getValue() == bdGrade.getGradeValue() + || EGrade.S_VIP.getValue() == bdGrade.getGradeValue()) { + cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.DELAY_GRANT.getValue()); + } else { + cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); + } } expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome())); } else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getExpandCapping())) { BigDecimal realIncome = ComputeUtil.computeSubtract(ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), weekRepExpandIncome), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome())); - //存在一半烧伤一半正常的值,拆2条 + // 存在一半烧伤一半正常的值,拆2条 // 拓展明细表 进行修改 packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), realIncome, realIncome); + CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class); BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome); if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) { - fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); + // TODO new V3 V4 没有烧伤,改为延缓发放 + if (EGrade.VIP.getValue() == bdGrade.getGradeValue() + || EGrade.S_VIP.getValue() == bdGrade.getGradeValue()) { + fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.DELAY_GRANT.getValue()); + } else { + fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); + } } packageCuMemberBonusExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), fireIncome, fireIncome); // 收益占比 @@ -1036,35 +1079,41 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { // 拓展收益取封顶最大值 expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), weekRepExpandIncome); } - } else { - // 判断收益 是否超过封顶值,超过的话变为封顶值 - // 判断是否烧伤,判断原奖金是否>=封顶值,奖金到了就是烧伤 - packageCuMemberBonusRepurchaseExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), maxIncome, actualIncome); - if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getRepurExpandIncome(), weekRepExpandIncome), bdGrade.getRepurchaseCapping())) { - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { - cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); - } - expandIncome = ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome); - } else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getRepurchaseCapping())) { - BigDecimal realIncome = ComputeUtil.computeSubtract(ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome), cuMemberBonus.getRepurExpandIncome()); - //存在一半烧伤一半正常的值,拆2条 - // 拓展明细表 进行修改 - packageCuMemberBonusRepurchaseExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), realIncome, realIncome); - CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class); - BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome); - if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) { - fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); - } - packageCuMemberBonusRepurchaseExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), fireIncome, fireIncome); - // 收益占比 - setBonusDetailDeduct(bonusConfigDTO, fireCuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); - repurchaseExpandRemark(saOrderExt, fireCuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt); - cuMemberBonusExpandList.add(fireCuMemberBonusExpand); - // 拓展收益取封顶最大值 - expandIncome = ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome); - } } + // 暂时不需要处理非中国的逻辑 +// else { +// // 判断收益 是否超过封顶值,超过的话变为封顶值 +// // 判断是否烧伤,判断原奖金是否>=封顶值,奖金到了就是烧伤 +// packageCuMemberBonusRepurchaseExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), maxIncome, actualIncome); +// if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getRepurExpandIncome(), weekRepExpandIncome), bdGrade.getRepurchaseCapping())) { +// if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { +// cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); +// } +// expandIncome = ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome); +// } else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getRepurchaseCapping())) { +// BigDecimal realIncome = ComputeUtil.computeSubtract(ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome), cuMemberBonus.getRepurExpandIncome()); +// //存在一半烧伤一半正常的值,拆2条 +// // 拓展明细表 进行修改 +// packageCuMemberBonusRepurchaseExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), realIncome, realIncome); +// CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class); +// BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome); +// if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) { +// fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); +// } +// packageCuMemberBonusRepurchaseExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), fireIncome, fireIncome); +// // 收益占比 +// setBonusDetailDeduct(bonusConfigDTO, fireCuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); +// repurchaseExpandRemark(saOrderExt, fireCuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt); +// cuMemberBonusExpandList.add(fireCuMemberBonusExpand); +// // 拓展收益取封顶最大值 +// expandIncome = ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome); +// } +// } + + // 收益占比 BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); + repurchaseExpandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt); + // 正常状态的辅导奖需要判断复购考核,复购考核不通过的状态变为烧伤 if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus() && EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) { @@ -1074,16 +1123,18 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); } } + if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { - if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { - cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome())); - setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand); - } else { - cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, weekRepExpandIncome)); - setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand); - } + cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome())); + setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand); +// if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { +// cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome())); +// setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand); +// } else { +// cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, weekRepExpandIncome)); +// setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand); +// } } - repurchaseExpandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt); cuMemberBonusExpandList.add(cuMemberBonusExpand); } diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java index e97059c0..3ede4c15 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java @@ -809,8 +809,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService { // 先计算复购在计算首购 // 计算复购 if (repurchaseOrderList.size() > 0) { - leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, rangeDtoMap, awardsMap, bonusConfigDTO, - systemConfigMap, repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, cuAwardsControlMap, cuBonusExpandExtMap); + leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, systemConfigMap, bonusConfigDTO, + repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, awardsMap, cuAwardsControlMap, cuBonusExpandExtMap, rangeDtoMap); } // 计算首购 if (firPurchaseOrderList.size() > 0) { @@ -971,15 +971,15 @@ public class BonusSettleServiceImpl implements IBonusSettleService { * @param bonusConfigDTO 各个国家奖金参数 * @param firPurchaseOrderList 首购订单 */ - private void calculateFirPurchaseOrder(Map riskControlMap, Map cuMemberSettleExtMap, String settleTableName, String settleDate, Map systemConfigMap, - BonusConfigDTO bonusConfigDTO, List firPurchaseOrderList, Integer period, Map weekMemberBonusMap, + private void calculateFirPurchaseOrder(Map riskControlMap, Map cuMemberSettleExtMap, String settleTableName, String settleDate, + Map systemConfigMap, BonusConfigDTO bonusConfigDTO, List firPurchaseOrderList, Integer period, Map weekMemberBonusMap, Map cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map awardsMap, Map cuAwardsControlMap, Map cuBonusExpandExtMap) { // 获得国家是三单循环还是四单循环 // 获得升级方式是纳入三单循环还是固定值 // 获取有订单国家的系统参数,获得三单循环还是四单循环 key 国家+系统参数key // 需要更新的会员结算表 cuMemberSettleExtMap - //***************************计算推荐奖(直推级差、直推三单循环)******************************/ + //***************************计算推荐奖(直推级差、直推三四单循环)******************************/ List cuMemberBonusPushList = bonusSettleFirstPurchaseHandle.calculateRecommendBonus(cuMemberSettleExtMap, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, cuMemberBonusMap, awardsMap); bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList); @@ -992,7 +992,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService { bonusRecordDetailVO.getCuMemberBonusExpandList().addAll(cuMemberBonusExpandList); } } - //*********************************计算领导奖************************/ + //*********************************计算领导奖(辅导收益)************************/ // 判断是否有量奖,有量奖有辅导奖 // List cuMemberBonusCoachList = bonusSettleFirstPurchaseHandle.calculateCoachBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, firPurchaseOrderList, // cuMemberBonusExpandList, period, cuMemberBonusMap, cuAwardsControlMap, riskControlMap); @@ -1079,16 +1079,18 @@ public class BonusSettleServiceImpl implements IBonusSettleService { } /** - * 计算首购订单的奖金 + * 计算复购订单的奖金 * * @param settleTableName 结算日表 * @param settleDate 结算日期 * @param bonusConfigDTO 各个国家奖金参数 - * @param purchaseOrderList 首购订单 + * @param purchaseOrderList 复购订单 + * @param rangeDtoMap 乐学奖金使用的汇率map */ - 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) { + private LeXueRangeParam calculatePurchaseOrder(Map riskControlMap, Map cuMemberSettleExtMap, String settleTableName, String settleDate, + Map systemConfigMap, BonusConfigDTO bonusConfigDTO, List purchaseOrderList, Integer period, Map weekMemberBonusMap, + Map cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map awardsMap, + Map cuAwardsControlMap, Map cuBonusExpandExtMap, Map rangeDtoMap) { //****************************复购直推***************************** // 查找10代血缘,验证复购考核,考核通过的给与奖金 紧缩 // List cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap); @@ -1099,7 +1101,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService { // 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) { diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuBonusExpandServiceImpl.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuBonusExpandServiceImpl.java index fc1f37e9..54f94b7d 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuBonusExpandServiceImpl.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuBonusExpandServiceImpl.java @@ -36,12 +36,12 @@ import java.util.*; public class CuBonusExpandServiceImpl extends ServiceImpl implements ICuBonusExpandService { @DubboReference - ISaOrderServiceApi saOrderServiceApi; + ISaOrderServiceApi iSaOrderServiceApi; @Autowired - private ICuMemberSettlePeriodService memberSettlePeriodService; + private ICuMemberSettlePeriodService iCuMemberSettlePeriodService; @Autowired - private IBonusSettleService bonusSettleService; + private IBonusSettleService iBonusSettleService; @Override public List queryBonusExpand(BonusExpandParam bonusExpandParam) { @@ -146,8 +146,8 @@ public class CuBonusExpandServiceImpl extends ServiceImpl saOrderExtList = saOrderServiceApi.queryRepeatSaOrderByDay(bonusExpandParam.getSettleDate(), endDate).getData(); + List saOrderExtList = iSaOrderServiceApi.queryRepeatSaOrderByDay(bonusExpandParam.getSettleDate(), endDate).getData(); baseMapper.truncateTable(); // 重算奖金 - bonusSettleService.repeatCuMemberBonusByExpand(settleDate, saOrderExtList); + iBonusSettleService.repeatCuMemberBonusByExpand(settleDate, saOrderExtList); // 更新波比、业绩 updateCuBonusExpandRatio(bonusExpandParam, "cu_member_repeat_bonus"); } diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/detail/service/impl/CuMemberAwardsServiceImpl.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/detail/service/impl/CuMemberAwardsServiceImpl.java index 3c70a75a..4184fa92 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/detail/service/impl/CuMemberAwardsServiceImpl.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/detail/service/impl/CuMemberAwardsServiceImpl.java @@ -1,5 +1,6 @@ package com.hzs.bonus.detail.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -16,6 +17,8 @@ import com.hzs.common.domain.member.ext.CuMemberSettleExt; import com.hzs.common.domain.system.config.BdAwards; import com.hzs.bonus.base.service.ICuMemberService; import com.hzs.bonus.detail.mapper.CuMemberAwardsMapper; +import com.hzs.system.config.IAwardsServiceApi; +import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.stream.Collectors; /** * 会员信息-奖衔升级记录 服务实现类 @@ -40,9 +44,19 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl countryAwardsMap, String settleTableName) { + // 获取奖衔列表(保留Q8以上的) + List bdAwardsList = iAwardsServiceApi.queryAwards(CountryConstants.CHINA_COUNTRY).getData(); + bdAwardsList = bdAwardsList.stream() + .filter(tmp -> tmp.getAwardsValue() >= EAwards.CHAIRMAN.getValue()) + .sorted(Comparator.comparing(BdAwards::getAwardsValue)) + .collect(Collectors.toList()); + // 查询结算日当天奖衔发生过变动的会员,本期 Date settleDate = DateUtils.parseStringToDate(settleDateStr); Integer period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId(); @@ -63,6 +77,10 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl 0) { // 将变动值插入临时表中 // 更新会员表 - iCuMemberService.updateCuMemberByPeriod(enoughAwardsMemberList, period); + iCuMemberService.updateCuMemberByPeriod(period); // 更新结算网体表 -- 结算日期到当前日期的所有日结算表 updateMemberAwardPeriod(settleDate); return Boolean.TRUE; } else { // 更新会员表 - iCuMemberService.updateCuMemberByPeriod(null, period); + iCuMemberService.updateCuMemberByPeriod(period); // 更新结算网体表 -- 结算日期到当前日期的所有日结算表 updateMemberAwardPeriod(settleDate); return Boolean.FALSE; @@ -181,6 +199,40 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl cuMemberSettleExtList = iCuMemberTreeService.listUpgradeAwards(settleTableName, bdAwards.getAwardsValue() - 5); + if (CollectionUtil.isNotEmpty(cuMemberSettleExtList)) { + // 存在可以升级的 + List cuMemberAwardsList = new ArrayList<>(cuMemberSettleExtList.size()); + // 封装升级记录 + for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) { + CuMemberAwards tmpCuMemberAwards = CuMemberAwards.builder() + .pkMember(cuMemberSettleExt.getPkMember()) + .period(period) + .upType(EUpgradeType.AUTO_UPGRADE.getValue()) + // 原等级 + .oldLevel(cuMemberSettleExt.getPkAwards()) + .newLevel(bdAwards.getPkId()) + // 默认免考 + .purchaseStatus(EYesNo.YES.getIntValue()) + .build(); + tmpCuMemberAwards.setPkCreator(MagicNumberConstants.PK_ADMIN); + tmpCuMemberAwards.setPkCountry(CountryConstants.CHINA_COUNTRY); + cuMemberAwardsList.add(tmpCuMemberAwards); + } + // 插入记录 + baseMapper.saveBatchCuMemberAwards(cuMemberAwardsList); + // 更新会员表 + iCuMemberService.updateCuMemberByPeriod(period); + // 更新结算网体表 -- 结算日期到当前日期的所有日结算表 + updateMemberAwardPeriod(settleDate); + } + } + @Override public void deleteCuMemberAwards(Long pkOrder, Long pkApprove, Date currentDateTime) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/risk/service/impl/CuMemberRiskControlServiceImpl.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/risk/service/impl/CuMemberRiskControlServiceImpl.java index dd5ebaac..ecb1c7c9 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/risk/service/impl/CuMemberRiskControlServiceImpl.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/risk/service/impl/CuMemberRiskControlServiceImpl.java @@ -35,9 +35,9 @@ import java.util.List; public class CuMemberRiskControlServiceImpl extends ServiceImpl implements ICuMemberRiskControlService { @DubboReference - IApprovalServiceApi approvalServiceApi; + IApprovalServiceApi iApprovalServiceApi; @DubboReference - ICuMemberServiceLogServiceApi memberServiceLogServiceApi; + ICuMemberServiceLogServiceApi iCuMemberServiceLogServiceApi; @Override public List queryCuMemberRiskControl(Date settleDate) { @@ -92,7 +92,7 @@ public class CuMemberRiskControlServiceImpl extends ServiceImpl submit = approvalServiceApi.submit(approvalSubmitDTO, memberRiskControlPetition.getLoginUser()); + R submit = iApprovalServiceApi.submit(approvalSubmitDTO, memberRiskControlPetition.getLoginUser()); if (!submit.isSuccess()) { throw new RuntimeException("K值风控 提交审批失败!"); } @@ -122,7 +122,7 @@ public class CuMemberRiskControlServiceImpl extends ServiceImpl + + + diff --git a/hzs-business/hzs-business-bonus/src/main/resources/mapper/member/bonus/CuBonusExpandMapper.xml b/hzs-business/hzs-business-bonus/src/main/resources/mapper/member/bonus/CuBonusExpandMapper.xml index ae94c729..2abbe001 100644 --- a/hzs-business/hzs-business-bonus/src/main/resources/mapper/member/bonus/CuBonusExpandMapper.xml +++ b/hzs-business/hzs-business-bonus/src/main/resources/mapper/member/bonus/CuBonusExpandMapper.xml @@ -144,7 +144,8 @@