From 566762ebad9e2bb172117ef5fd29f67970581ef6 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Tue, 15 Jul 2025 18:07:38 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E9=A1=BE=E5=AE=A2=E4=B8=8D=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=A5=96=E9=87=91=E4=B8=8D=E4=BC=9A=E8=8E=B7=E5=BE=97?= =?UTF-8?q?=E5=A5=96=E9=87=91=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/BonusSettleAgentHandle.java | 210 +--------- .../impl/BonusSettleFirstPurchaseHandle.java | 30 +- .../service/impl/BonusSettleHiFunHandle.java | 381 +----------------- .../impl/BonusSettleNewExpandHandle.java | 12 +- .../impl/BonusSettlePurchaseHandle.java | 29 +- .../service/impl/BonusSettleServiceImpl.java | 78 +--- .../member/achieve/CuMemberTreeMapper.xml | 3 +- 7 files changed, 56 insertions(+), 687 deletions(-) diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java index 9c966714..be5feccb 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java @@ -1,220 +1,12 @@ package com.hzs.bonus.bonus.service.impl; -import cn.hutool.core.collection.CollectionUtil; -import com.hzs.activity.base.IActivityServiceApi; -import com.hzs.common.core.constant.TableNameConstants; -import com.hzs.common.core.constant.msg.BonusMsgConstants; -import com.hzs.common.core.enums.*; -import com.hzs.common.core.utils.ComputeUtil; -import com.hzs.common.core.utils.DateUtils; -import com.hzs.common.domain.activity.recommend.AcRepurSharOrderType; -import com.hzs.common.domain.activity.recommend.ext.AcRepurSharRuleConfigExt; -import com.hzs.common.domain.bonus.BdBonusDeduct; -import com.hzs.common.domain.member.base.CuMemberAgent; -import com.hzs.common.domain.member.bonus.CuMemberBonus; -import com.hzs.common.domain.member.bonus.CuMemberBonusDetail; -import com.hzs.common.domain.member.ext.CuMemberSettleExt; -import com.hzs.common.domain.sale.order.SaOrder; -import com.hzs.common.domain.system.config.BdBonusCloud; -import com.hzs.bonus.base.service.ICuMemberAgentService; -import com.hzs.system.config.dto.BonusConfigDTO; -import com.hzs.system.sys.dto.BdCurrencyDTO; -import org.apache.dubbo.config.annotation.DubboReference; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.math.BigDecimal; -import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.stream.Collectors; - /** - * @Description: - * @Author: sui q - * @Time: 2023/1/4 17:19 - * @Classname: BonusSettleAgentHandle - * @PackageName: com.hzs.member.bonus.service.impl + * 计算云代奖金 */ @Component public class BonusSettleAgentHandle extends BonusSettleHandle { - @DubboReference - IActivityServiceApi iActivityServiceApi; - // 代理直推 推荐给多少钱 代理复购 区域 所有订单的1% - @Autowired - private ICuMemberAgentService iCuMemberAgentService; - - /** - * 计算嗨粉奖金 - * - * @param period 期间 - * @param bonusConfigDTO 参数 - * @param cuMemberBonusMap 所有计算出来的奖金汇总 - */ - List calculateCloudAgentAreaBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, Integer period, Map cuMemberBonusMap) { - List cuMemberBonusDetailList = new ArrayList<>(); - // 云代区域 月奖 - // 查询时间范围内订单 - Date settleDate = DateUtils.parseStringToDate(settleDateStr); - // 上个月最后一天 - settleDate = DateUtils.beforeMonthLastDate(settleDate); - // 结算月第一天 - Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(settleDate); - // 结算月下月第一天 - Date nextMonthFirstDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate); - List currentMonthOrderList = iSaOrderServiceApi.querySaOrderByDayForCloud(currentMonthFirstDate, nextMonthFirstDate).getData(); - // 查询月末会员状态 - Integer lastPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId(); - String currentSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + lastPeriod; - Set pkMemberSet = new HashSet<>(); - // 获取配置 - Map bdBonusCloudMap = bonusConfigDTO.getBonusCloudMap(); - if (bdBonusCloudMap == null) { - return cuMemberBonusDetailList; - } - // 计算奖金 云代首购 首购订单1% 云代复购 复购订单1% - // 查询会员,查询出所有代理的会员 - Map> cuMemberAgentMap = iCuMemberAgentService.queryCuMemberAgent(); - List saOrderList = new ArrayList<>(); - for (SaOrder saOrder : currentMonthOrderList) { - if (saOrder.getPkCountry() == null || saOrder.getRecProvince() == null || saOrder.getRecCity() == null) { - continue; - } - String key = saOrder.getPkCountry().toString() + saOrder.getRecProvince() + saOrder.getRecCity(); - if (!cuMemberAgentMap.containsKey(key)) { - continue; - } else { - saOrderList.add(saOrder); - } - pkMemberSet.add(saOrder.getPkMember()); - List cuMemberAgentList = cuMemberAgentMap.get(key); - cuMemberAgentList.forEach(cuMemberAgent -> - pkMemberSet.add(cuMemberAgent.getPkMember())); - } - List cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet); - Map cuMemberSettleExtMap = new HashMap<>(); - getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); - Map currencyDtoMap = bonusConfigDTO.getCurrencyDtoMap(); - for (SaOrder saOrder : saOrderList) { - String key = saOrder.getPkCountry().toString() + saOrder.getRecProvince().toString() + saOrder.getRecCity().toString(); - List cuMemberAgentList = cuMemberAgentMap.get(key); - BigDecimal exchangeRate = BigDecimal.ONE; - if (currencyDtoMap.containsKey(saOrder.getPkCountry().toString() + saOrder.getPkRate())) { - exchangeRate = currencyDtoMap.get(saOrder.getPkCountry().toString() + saOrder.getPkRate()).getInExchangeRate(); - } - // 云代首购 - CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrder.getPkMember()); - if (sourceMemberSettleExt == null) { - continue; - } - if (EOrderType.REGISTER_ORDER.getValue() == saOrder.getOrderType() || - EOrderType.UPGRADE_ORDER.getValue() == saOrder.getOrderType() || - Objects.equals(EOrderType.FICTITIOUS_ORDER.getValue(), saOrder.getOrderType()) || - Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrder.getOrderType()) || - Objects.equals(EOrderType.SPECIAL_UPGRADE_ORDER.getValue(), saOrder.getOrderType())) { - BdBonusCloud bdBonusCloud = bdBonusCloudMap.get(saOrder.getPkCountry().toString() + ECloudType.CLOUD_TYPE_FIRST_PURCHASE.getValue()); - for (CuMemberAgent cuMemberAgent : cuMemberAgentList) { - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberAgent.getPkMember()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || - EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { - continue; - } - if (cuMemberAgent.getAgentGrade() == 7 && cuMemberAgent.getAgentCounty() != null && saOrder.getRecCounty() != null && - !Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) { - continue; - } else { - if (cuMemberAgent.getAgentGrade() == 8 && cuMemberAgent.getAgentCounty() != null && - !Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) { - continue; - } - } - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt); - CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus); - // 计算比例 - cuMemberBonusDetail.setCalValue(bdBonusCloud.getCloudRatio()); - cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_FIRST_PURCHASE.getValue())); - cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), bdBonusCloud.getCloudRatio())); - cloudAgentRemark(saOrder, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt, BonusMsgConstants.CLOUD_AGENT_FIRST_REPURCHASE); - cuMemberBonusDetailList.add(cuMemberBonusDetail); - BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate); - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) { - cuMemberBonus.setCloudPurIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudPurIncome(), cuMemberBonusDetail.getPretaxIncome())); - setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail); - } - } - } else { - // 云代复购 - BdBonusCloud bdBonusCloud = bdBonusCloudMap.get(saOrder.getPkCountry().toString() + ECloudType.CLOUD_TYPE_PURCHASE.getValue()); - for (CuMemberAgent cuMemberAgent : cuMemberAgentList) { - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberAgent.getPkMember()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || - EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { - continue; - } - if (cuMemberAgent.getAgentGrade() == 7 && cuMemberAgent.getAgentCounty() != null && saOrder.getRecCounty() != null && - !Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) { - continue; - } else { - if (cuMemberAgent.getAgentGrade() == 8 && cuMemberAgent.getAgentCounty() != null && - !Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) { - continue; - } - } - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt); - CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus); - // 计算比例 - cuMemberBonusDetail.setCalValue(bdBonusCloud.getCloudRatio()); - cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_REPURCHASE.getValue())); - cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), bdBonusCloud.getCloudRatio())); - cloudAgentRemark(saOrder, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt, BonusMsgConstants.CLOUD_AGENT_REPURCHASE); - cuMemberBonusDetailList.add(cuMemberBonusDetail); - - BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate); - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) { - cuMemberBonus.setCloudRepurIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudRepurIncome(), cuMemberBonusDetail.getPretaxIncome())); - setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail); - } - } - } - } - - // 复购券均分收益规则 - 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 = 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 = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, memberSet); - getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); - for (SaOrder saOrder : orderList) { - BigDecimal exchangeRate = BigDecimal.ONE; - if (currencyDtoMap.containsKey(saOrder.getPkCountry().toString() + saOrder.getPkRate())) { - exchangeRate = currencyDtoMap.get(saOrder.getPkCountry().toString() + saOrder.getPkRate()).getInExchangeRate(); - } - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrder.getPkMember()); - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt); - CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus); - // 计算比例 - cuMemberBonusDetail.setCalValue(acRepurSharRuleConfigExt.getRatioValue()); - cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS_SHARE.getValue())); - cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), acRepurSharRuleConfigExt.getRatioValue())); - shareCouponRemark(cuMemberBonusDetail, DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, settleDate)); - cuMemberBonusDetailList.add(cuMemberBonusDetail); - BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate); - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) { - cuMemberBonus.setRepurCouponShare(cuMemberBonusDetail.getPretaxIncome()); - setRepurchaseCouponTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail); - } - } - } - } - } - return cuMemberBonusDetailList; - } } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleFirstPurchaseHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleFirstPurchaseHandle.java index e913dad5..21c1e860 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleFirstPurchaseHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleFirstPurchaseHandle.java @@ -96,9 +96,11 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { if (targetMemberSettleExt == null) { return null; } - // 死点 或 停算收益 没有奖金 + // 死点 或 停算收益 或 顾客 没有奖金 if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() - || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 return null; } // 当前国家是否有该奖项 @@ -347,9 +349,11 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { for (int i = 1; i <= startTouch; i++) { for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null + if (null == targetMemberSettleExt || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() - || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } // 验证是否有当前奖金项 @@ -376,7 +380,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() - || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } // 验证是否有当前奖金项 @@ -432,10 +438,12 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) { // 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序 CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null + if (null == targetMemberSettleExt || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() - || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { + || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } // 验证是否计算奖金 @@ -597,8 +605,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { } pkMember = targetMemberSettleExt.getPkParent(); if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() - || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { - // 会员状态不正常 或者 停算收益 直接跳过 + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员状态不正常 或者 停算收益 或 顾客等级 直接跳过 continue; } if (firstBool) { @@ -805,7 +814,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle { if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() - || ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) { + || ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { // 非正常会员、停算收益、不是服务中心,都不进行处理 return null; } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java index 626b33ae..4574a0a7 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java @@ -1,391 +1,12 @@ package com.hzs.bonus.bonus.service.impl; -import com.hzs.common.core.constant.BonusFieldConstants; -import com.hzs.common.core.enums.*; -import com.hzs.common.core.utils.ComputeUtil; -import com.hzs.common.core.utils.reflect.ReflectUtils; -import com.hzs.common.domain.bonus.BdBonusDeduct; -import com.hzs.common.domain.member.base.CuAwardsControl; -import com.hzs.common.domain.member.bonus.CuMemberBonus; -import com.hzs.common.domain.member.bonus.CuMemberBonusDetail; -import com.hzs.common.domain.member.ext.CuMemberSettleExt; -import com.hzs.common.domain.sale.ext.SaOrderExt; -import com.hzs.common.domain.sale.ext.SaOrderItemsExt; -import com.hzs.common.domain.system.config.BdAwards; -import com.hzs.system.config.dto.BonusConfigDTO; -import com.hzs.system.config.dto.BonusHiPinkDTO; -import com.hzs.system.config.dto.RangeDTO; import org.springframework.stereotype.Component; -import java.math.BigDecimal; -import java.util.*; - /** - * @Description: 计算嗨粉订单 - * @Author: sui q - * @Time: 2023/1/4 13:38 - * @Classname: BonusSettleHiFunHandle - * @PackageName: com.hzs.member.bonus.service.impl + * 计算嗨粉订单 */ @Component public class BonusSettleHiFunHandle extends BonusSettleHandle { - /** - * @param period 期间 - * @param bonusConfigDTO 参数 - * @param hiFunSaOrderList 复购订单 - * @param cuMemberBonusMap 所有计算出来的奖金汇总 - * @Description: 计算嗨粉奖金 - * @return: void - * @Author: sui q - * @Date: 2022/11/10 14:17 - */ - List calculateHiFunPushBonus(Map cuMemberSettleExtMap, String settleTableName, Map rangeDtoMap, Map awardsMap, - BonusConfigDTO bonusConfigDTO, List hiFunSaOrderList, Integer period, Map cuMemberBonusMap, Map cuAwardsControlMap) { - // 根据订单明细开始计算奖金,计算嗨粉推荐奖 - List cuMemberBonusDetailList = new ArrayList<>(); - // cuMemberSettleExtMap 需要含自己 - getMemberParentBySaOrder(cuMemberSettleExtMap, settleTableName, hiFunSaOrderList); - // 拆分为2种,一种是嗨粉,一种是1000pv的,奖金不一样 - List oldHaiFunOrderList = new ArrayList<>(); -// List newHaiFunOrderList = new ArrayList<>(); - for (SaOrderExt saOrderExt : hiFunSaOrderList) { - if (EOrderTypeExtend.NORMAL.getValue() == saOrderExt.getOrderTypeExtend()) { - oldHaiFunOrderList.add(saOrderExt); - } - } - // 原来413嗨粉推荐海粉极差收益 - oldHaiFunOrderList.forEach(saOrderExt -> { - List bonusDetailList = calculateHiFunPushBonusOne(cuMemberSettleExtMap, rangeDtoMap, awardsMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, cuAwardsControlMap); - if (bonusDetailList.size() > 0) { - cuMemberBonusDetailList.addAll(bonusDetailList); - } - }); -// // 新5680 推荐海粉极差收益 -// newHaiFunOrderList.forEach(saOrderExt -> { -// // 海粉极差 -// List bonusDetailList = calculateNewHiFunPushBonusOne(cuMemberSettleExtMap, rangeDtoMap, awardsMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, cuAwardsControlMap); -// if (bonusDetailList.size() > 0) { -// cuMemberBonusDetailList.addAll(bonusDetailList); -// } -// if(saOrderExt.getPkMember().equals(saOrderExt.getPkCreator())){ -// return; -// } -// // 给注册人复购券 -// // 获得奖金 -// CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); -// CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkCreator()); -// if (targetMemberSettleExt == null || validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS.getValue())) { -// return; -// } -// CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); -// CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus); -// // 计算类型 -// cuMemberBonusDetail.setCalType(ECalType.VALUE.getValue()); -// // 计算值 -// cuMemberBonusDetail.setCalValue(BigDecimal.ZERO); -// cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS.getValue())); -// cuMemberBonusDetail.setPretaxIncome(BigDecimal.valueOf(15.46875)); -// BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); -// if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) { -// cuMemberBonus.setRepurCoupon(ComputeUtil.computeAdd(cuMemberBonus.getRepurCoupon(), cuMemberBonusDetail.getPretaxIncome())); -// setRepurchaseCouponTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail); -// } -// repurchaseCouponsRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt); -// cuMemberBonusDetailList.add(cuMemberBonusDetail); -// }); - return cuMemberBonusDetailList; - } - - /** - * @param settleTableName 结算表 - * @param period 期间 - * @param bonusConfigDTO 参数 - * @param haiFunOrderList 订单列表 - * @param cuMemberBonusMap 所有计算出来的奖金汇总 - * @Description: 计算报单服务费 - * @return: List - * @Author: sui q - * @Date: 2022/11/17 14:14 - */ - List calculateHaiFunBonus(Map cuMemberSettleExtMap, String settleTableName, BonusConfigDTO bonusConfigDTO, - List haiFunOrderList, Integer period, Map cuMemberBonusMap) { - List cuMemberBonusDetailList = new ArrayList<>(); - // 先过滤数据,验证报单人是否在网体列表中,不在需要从数据库中查询 - Set haiFunMemberSet = new HashSet<>(); - haiFunOrderList.forEach(saOrderExt -> { - CuMemberSettleExt cuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); - if (cuMemberSettleExt == null || cuMemberSettleExtMap.get(cuMemberSettleExt.getPkParent()) == null) { - haiFunMemberSet.add(saOrderExt.getPkMember()); - } - }); - if (haiFunMemberSet.size() > 0) { - List cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet); - // 初始化父类网体的值 - getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); - } - // 计算海粉推荐 - for (SaOrderExt saOrderExt : haiFunOrderList) { - List cuMemberBonusDetails = calculateHaiFunBonusOne(cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt); - if (cuMemberBonusDetails.size() > 0) { - cuMemberBonusDetailList.addAll(cuMemberBonusDetails); - } - } - // 查询会员 - return cuMemberBonusDetailList; - } - - - /** - * @Description: 计算海粉推荐奖 - * @return: CuMemberBonusDetail - * @Author: sui q - * @Date: 2023/2/8 17:22 - */ - List calculateHaiFunBonusOne(Map cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Integer period, Map cuMemberBonusMap, SaOrderExt saOrderExt) { - List cuMemberBonusDetailList = new ArrayList<>(); - CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); - if (sourceMemberSettleExt == null) { - return cuMemberBonusDetailList; - } - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkParent()); - if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { - return cuMemberBonusDetailList; - } - // 验证是否有奖金 -// if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HAI_DOU_INCOME.getValue())) { -// return cuMemberBonusDetailList; -// } - for (SaOrderItemsExt saOrderItemsExt : saOrderExt.getOrderItemsExtList()) { - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); - // 海粉直推奖金明细 - CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus); - // 计算比例 - cuMemberBonusDetail.setCalValue(BigDecimal.ZERO); -// cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HAI_DOU_INCOME.getValue())); - cuMemberBonusDetail.setPretaxIncome(saOrderItemsExt.getShareAchieve()); - // 收益占比 - BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); - haiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt); - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) { - cuMemberBonus.setHaiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHaiFunIncome(), cuMemberBonusDetail.getPretaxIncome())); - setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail); - BigDecimal realIncome = ReflectUtils.invokeGetter(cuMemberBonusDetail, BonusFieldConstants.REAL_INCOME); - cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome)); - } - cuMemberBonusDetailList.add(cuMemberBonusDetail); - } - - return cuMemberBonusDetailList; - } - - /** - * @Description: 计算嗨粉奖金,嗨粉推荐,嗨粉极差 - * @return: List - * @Author: sui q - * @Date: 2023/2/9 10:25 - */ - protected List calculateHiFunPushBonusOne(Map cuMemberSettleExtMap, Map rangeDtoMap, Map awardsMap, BonusConfigDTO bonusConfigDTO, Integer period, Map cuMemberBonusMap, SaOrderExt saOrderExt, Map cuAwardsControlMap) { - List cuMemberBonusDetailList = new ArrayList<>(); - CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); - if (sourceMemberSettleExt == null) { - return cuMemberBonusDetailList; - } - BigDecimal waresNum = ComputeUtil.computeDivide(saOrderExt.getOrderAmount(), BigDecimal.valueOf(413)); - sourceMemberSettleExt.setHiFunAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); - sourceMemberSettleExt.setHiFunPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunPv(), saOrderExt.getOrderAchieve())); - sourceMemberSettleExt.setHiFunNewAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); - sourceMemberSettleExt.setHiFunNewPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewPv(), saOrderExt.getOrderAchieve())); - Map> bonusHiPinkDtoMap = bonusConfigDTO.getBonusHiPinkDtoMap(); - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference()); - // 找到最大的奖金 - BigDecimal maxBonusValue = BigDecimal.ZERO; - List bonusHiPinkDTOList = bonusHiPinkDtoMap.get(saOrderExt.getPkCountry()); - for (BonusHiPinkDTO bonusHiPinkDTO : bonusHiPinkDTOList) { - if (ComputeUtil.compareGreaterThan(bonusHiPinkDTO.getBonusValue(), maxBonusValue)) { - maxBonusValue = bonusHiPinkDTO.getBonusValue(); - } - } - BigDecimal income = BigDecimal.ZERO; - boolean flag = false; - int i = 0; - while (targetMemberSettleExt != null && targetMemberSettleExt.getPkParent() != 0) { - // 嗨粉直推奖励的配置,从第一级开始获取 - BonusHiPinkDTO startBonusHiPinkDto = bonusHiPinkDTOList.get(i); - targetMemberSettleExt = getCuMemberTree(cuMemberSettleExtMap, rangeDtoMap, awardsMap, targetMemberSettleExt, startBonusHiPinkDto, cuAwardsControlMap); - if (targetMemberSettleExt == null) { - break; - } - String key = getMemberKey(awardsMap, targetMemberSettleExt); - if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || - validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue())) { - targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent()); - continue; - } - for (int x = i; x < bonusHiPinkDTOList.size(); x++) { - BonusHiPinkDTO bonusHiPinkDTO = bonusHiPinkDTOList.get(x); - String hiKey = bonusHiPinkDTO.getRangeType().toString() + bonusHiPinkDTO.getPkLevel(); - if (key.equals(hiKey)) { - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); - BigDecimal bonusIncome = ComputeUtil.computeSubtract(bonusHiPinkDTO.getBonusValue(), income); - bonusIncome = ComputeUtil.computeMultiply(bonusIncome, waresNum); - if (ComputeUtil.compareValue(BigDecimal.ZERO, bonusIncome)) { -// flag = true; - break; - } - // 直推奖金明细 - CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus); - cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue())); - // 计算比例 - cuMemberBonusDetail.setCalValue(bonusHiPinkDTO.getBonusValue()); - cuMemberBonusDetail.setPretaxIncome(bonusIncome); - // 收益占比 - BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); - hiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt); - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) { - cuMemberBonus.setHiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHiFunIncome(), cuMemberBonusDetail.getPretaxIncome())); - setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail); - cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), cuMemberBonusDetail.getRealIncome())); - } - income = bonusHiPinkDTO.getBonusValue(); - cuMemberBonusDetailList.add(cuMemberBonusDetail); - if (ComputeUtil.compareEqual(maxBonusValue, bonusHiPinkDTO.getBonusValue())) { - flag = true; - } - if (x < bonusHiPinkDTOList.size() - 1) { - i = x + 1; - } else { - flag = true; - } - break; - } - } - targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent()); - if (flag) { - break; - } - } - return cuMemberBonusDetailList; - } - - /** - * @Description: 计算嗨粉奖金,嗨粉推荐,嗨粉极差 - * @return: List - * @Author: sui q - * @Date: 2023/2/9 10:25 - */ - protected List calculateNewHiFunPushBonusOne(Map cuMemberSettleExtMap, Map rangeDtoMap, Map awardsMap, BonusConfigDTO bonusConfigDTO, Integer period, Map cuMemberBonusMap, SaOrderExt saOrderExt, Map cuAwardsControlMap) { - List cuMemberBonusDetailList = new ArrayList<>(); - CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); - if (sourceMemberSettleExt == null) { - return cuMemberBonusDetailList; - } - sourceMemberSettleExt.setHiFunAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); - sourceMemberSettleExt.setHiFunPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunPv(), saOrderExt.getOrderAchieve())); - sourceMemberSettleExt.setHiFunNewAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); - sourceMemberSettleExt.setHiFunNewPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewPv(), saOrderExt.getOrderAchieve())); -// Map> bonusHiPinkDtoMap = bonusConfigDTO.getBonusHiPinkDtoMap(); - CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference()); - // 找到最大的奖金 -// BigDecimal maxBonusValue = BigDecimal.ZERO; - BigDecimal maxBonusValue = BigDecimal.valueOf(1200); - BigDecimal grantBonusValue = BigDecimal.ZERO; -// List bonusHiPinkDTOList = bonusHiPinkDtoMap.get(saOrderExt.getPkCountry()); -// for (BonusHiPinkDTO bonusHiPinkDTO : bonusHiPinkDTOList) { -// if (ComputeUtil.compareGreaterThan(bonusHiPinkDTO.getBonusValue(), maxBonusValue)) { -// maxBonusValue = bonusHiPinkDTO.getBonusValue(); -// } -// } -// BigDecimal income = BigDecimal.ZERO; - Integer gradeValue = EGrade.YOU_KE.getValue(); - while (targetMemberSettleExt != null && targetMemberSettleExt.getPkParent() != 0) { - // 嗨粉直推奖励的配置,从第一级开始获取 - targetMemberSettleExt = getCuMemberTree(cuMemberSettleExtMap, targetMemberSettleExt, gradeValue); - if (targetMemberSettleExt == null) { - break; - } - if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || - validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue())) { - targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent()); - continue; - } - BigDecimal memberMaxBonusValue = BigDecimal.ZERO; - if (targetMemberSettleExt.getGradeValue() == EGrade.YOU_KE.getValue() || targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) { - memberMaxBonusValue = BigDecimal.valueOf(800); - } else if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) { - memberMaxBonusValue = BigDecimal.valueOf(1000); - } else if (targetMemberSettleExt.getGradeValue() == EGrade.S_VIP.getValue()) { - memberMaxBonusValue = BigDecimal.valueOf(1200); - } - - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); - BigDecimal bonusIncome = ComputeUtil.computeSubtract(memberMaxBonusValue, grantBonusValue); - if (ComputeUtil.compareValue(BigDecimal.ZERO, bonusIncome)) { - targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent()); - continue; - } - // 直推奖金明细 - CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus); - cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue())); - // 计算比例 - cuMemberBonusDetail.setCalValue(BigDecimal.ZERO); - cuMemberBonusDetail.setPretaxIncome(bonusIncome); - // 收益占比 - BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); - hiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt); - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) { - cuMemberBonus.setHiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHiFunIncome(), cuMemberBonusDetail.getPretaxIncome())); - setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail); - cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), cuMemberBonusDetail.getRealIncome())); - } - grantBonusValue = ComputeUtil.computeAdd(grantBonusValue, bonusIncome); - cuMemberBonusDetailList.add(cuMemberBonusDetail); - if (ComputeUtil.compareEqual(maxBonusValue, grantBonusValue)) { - break; - } else { - targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent()); - } - } - return cuMemberBonusDetailList; - } - - /** - * 根据极差获取会员 - */ - private CuMemberSettleExt getCuMemberTree(Map cuMemberTreeMap, Map rangeDtoMap, - Map awardsMap, CuMemberSettleExt parentMemberTree, BonusHiPinkDTO bonusHiPinkDTO, Map cuAwardsControlMap) { - if (parentMemberTree == null) { - return null; - } - // 获取目标会员的极差配置信息 等级还是奖衔 - RangeDTO rangeDto = getRangeDto(rangeDtoMap, awardsMap, parentMemberTree, cuAwardsControlMap); - // 嗨粉直推奖励的配置,获取目标奖励的配置 - RangeDTO targetRangeDto = rangeDtoMap.get(bonusHiPinkDTO.getPkCountry().toString() + bonusHiPinkDTO.getRangeType() + bonusHiPinkDTO.getPkLevel()); - if (rangeDto == null || targetRangeDto == null) { - return null; - } - // 判断目标会员极差奖励,目标会员的极差等级不足 直推奖励的配置,取上一级,一直取到 目标会员的 极差等级>= 直推推荐奖励配置的 - if (rangeDto.getRangeValue() < targetRangeDto.getRangeValue()) { - parentMemberTree = cuMemberTreeMap.get(parentMemberTree.getPkParent()); - parentMemberTree = getCuMemberTree(cuMemberTreeMap, rangeDtoMap, awardsMap, parentMemberTree, bonusHiPinkDTO, cuAwardsControlMap); - } - return parentMemberTree; - } - - /** - * 根据极差获取会员 - */ - private CuMemberSettleExt getCuMemberTree(Map cuMemberTreeMap, CuMemberSettleExt parentMemberTree, Integer startGradeValue) { - if (parentMemberTree == null) { - return null; - } - // 判断目标会员极差奖励,目标会员的极差等级不足 直推奖励的配置,取上一级,一直取到 目标会员的 极差等级>= 直推推荐奖励配置的 - if (parentMemberTree.getGradeValue() < startGradeValue) { - parentMemberTree = cuMemberTreeMap.get(parentMemberTree.getPkParent()); - parentMemberTree = getCuMemberTree(cuMemberTreeMap, parentMemberTree, startGradeValue); - } - return parentMemberTree; - } } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleNewExpandHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleNewExpandHandle.java index 65b5a9c0..50cad3e8 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleNewExpandHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleNewExpandHandle.java @@ -118,7 +118,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle { CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); if (null == targetMemberSettleExt || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() - || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } // 验证是否有当前奖金项 @@ -146,7 +148,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle { CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() - || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } // 验证是否有当前奖金项 @@ -183,7 +187,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle { if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() - || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { + || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java index 7442cd99..1bda9b9a 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java @@ -41,9 +41,6 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { @Autowired private BonusSettleFirstPurchaseHandle bonusSettleFirstPurchaseHandle; - @DubboReference - IAcPickServiceApi iAcPickServiceApi; - List calculateRepurchasePushBonusOne(Map cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Map cuMemberAssessMap, Integer period, Map cuMemberBonusMap, SaOrderExt saOrderExt) { @@ -60,9 +57,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { if (targetMemberSettleExt == null) { break; } - // 死点没有奖金 - if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + // 死点 停算 顾客 没有奖金 + if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 pkParent = targetMemberSettleExt.getPkParent(); continue; } @@ -244,9 +243,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { for (int i = 1; i <= startTouch; i++) { for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null + if (null == targetMemberSettleExt || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() - || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } // 验证是否有当前奖金项 @@ -272,9 +273,11 @@ 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 + if (null == targetMemberSettleExt || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() - || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } // 验证是否有当前奖金项 @@ -306,10 +309,12 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) { // 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序 CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent()); - if (targetMemberSettleExt == null + if (null == targetMemberSettleExt || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() - || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { + || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue() + || EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 continue; } // 验证是否计算奖金 diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java index 485f23b5..d7485eb5 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java @@ -673,8 +673,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService { } /* - * @description: 执行甩网业绩 - * @param: null null + * 执行甩网业绩 **/ private List execNetAchieve(Integer period, String settleDate, String currentSettleTableName) { List memberSwingNetExtList = iMemberServiceApi.queryCuMemberSwingNetExt().getData(); @@ -1152,10 +1151,10 @@ public class BonusSettleServiceImpl implements IBonusSettleService { * @param rangeDtoMap 乐学奖金使用的汇率map */ private void 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, List awardsList, Map cuAwardsControlMap, Map cuBonusExpandExtMap, - Map rangeDtoMap, boolean newExpandFlag) { + Map systemConfigMap, BonusConfigDTO bonusConfigDTO, List purchaseOrderList, Integer period, + Map weekMemberBonusMap, Map cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, + Map awardsMap, List awardsList, Map cuAwardsControlMap, Map cuBonusExpandExtMap, + Map rangeDtoMap, boolean newExpandFlag) { //****************************复购直推***************************** // 查找10代血缘,验证复购考核,考核通过的给与奖金 紧缩 // List cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap); @@ -1243,26 +1242,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService { }); } - /** - * @param settleDate 结算日期 - * @param bonusConfigDTO 各个国家奖金参数 - * @Desccription: 计算云代的奖金 - * @return: Map 需要更新的 - */ - private void calculateCloudAgentOrder(String settleDate, BonusConfigDTO bonusConfigDTO, Integer period, BonusRecordDetailVO bonusRecordDetailVO, Map cuMemberBonusMap) { - List cuMemberBonusDetailList = bonusSettleAgentHandle.calculateCloudAgentAreaBonus(settleDate, bonusConfigDTO, period, cuMemberBonusMap); - if (cuMemberBonusDetailList.size() > 0) { - if (bonusRecordDetailVO.getCuMemberBonusDetailList() != null) { - bonusRecordDetailVO.getCuMemberBonusDetailList().addAll(cuMemberBonusDetailList); - } else { - bonusRecordDetailVO.setCuMemberBonusDetailList(cuMemberBonusDetailList); - } - } - } - /* - * @description: 计算复购券收益 - * @param: null null + * 计算复购券收益 **/ private void calculateRepurchaseCoupons(Date settleDate, List firPurchaseOrderList, Integer period, BonusConfigDTO bonusConfigDTO, Map cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map cuMemberSettleExtMap) { @@ -1276,51 +1257,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService { } } - /** - * @param settleDateStr 结算日期 - * @Desccription: 计算云代的奖金 - * @return: Map 需要更新的 - */ - private void calculateShareBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, - Integer period, BonusRecordDetailVO bonusRecordDetailVO, Map cuMemberBonusMap, Map cuAwardsControlMap) { - List cuMemberBonusDetailList = bonusSettleFirstPurchaseHandle.calculateShareBonus(settleDateStr, bonusConfigDTO, period, cuMemberBonusMap, cuAwardsControlMap); - if (CollectionUtil.isNotEmpty(cuMemberBonusDetailList)) { - if (bonusRecordDetailVO.getCuMemberBonusDetailList() != null) { - bonusRecordDetailVO.getCuMemberBonusDetailList().addAll(cuMemberBonusDetailList); - } else { - bonusRecordDetailVO.setCuMemberBonusDetailList(cuMemberBonusDetailList); - } - } - } - - /** - * 计算嗨粉订单的奖金 - * - * @return: void - */ - private void calculateHiFunOrder(Map cuMemberSettleExtMap, String settleTableName, Map rangeDtoMap, - Map awardsMap, BonusConfigDTO bonusConfigDTO, List hiFunOrderList, Integer period, Map cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map cuAwardsControlMap) { - //*****************************嗨粉推荐奖金*****************************/ - List cuMemberBonusDetailList = bonusSettleHiFunHandle.calculateHiFunPushBonus(cuMemberSettleExtMap, settleTableName, rangeDtoMap, awardsMap, - bonusConfigDTO, hiFunOrderList, period, cuMemberBonusMap, cuAwardsControlMap); - addCuMemberBonusDetail(bonusRecordDetailVO, cuMemberBonusDetailList); - Map memberBonusDetailCalVoMap = new HashMap<>(ComputeUtil.mapInitCapacity(MagicNumberConstants.DELETE_DATA_BATCH_UPDATE_NUM)); - cuMemberBonusDetailList.forEach(cuMemberBonusDetail -> { - MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusDetail); - memberBonusDetailCalVO.setHiFunIncome(ComputeUtil.computeAdd(memberBonusDetailCalVO.getHiFunIncome(), cuMemberBonusDetail.getRealIncome())); - }); - Map saOrderExtMap = new HashMap<>(ComputeUtil.mapInitCapacity(hiFunOrderList.size())); - hiFunOrderList.forEach(saOrderExt -> - saOrderExtMap.put(saOrderExt.getPkId(), saOrderExt)); - // 嗨粉收益 - cuMemberBonusDetailList.forEach(cuMemberBonusDetail -> { - MemberBonusDetailCalVO memberBonusDetailCalVO = memberBonusDetailCalVoMap.get(cuMemberBonusDetail.getPkOrder()); - SaOrderExt saOrderExt = saOrderExtMap.get(memberBonusDetailCalVO.getPkOrder()); - cuMemberBonusDetail.setIncomeDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getHiFunIncome(), memberBonusDetailCalVO.getRealIncome())); - cuMemberBonusDetail.setOrderDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getRealIncome(), ComputeUtil.computeDivide(saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()))); - }); - } - private static void addCuMemberBonusDetail(BonusRecordDetailVO bonusRecordDetailVO, List cuMemberBonusDetailList) { if (cuMemberBonusDetailList.size() > 0) { if (bonusRecordDetailVO.getCuMemberBonusDetailList() != null) { @@ -1333,8 +1269,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService { /** * 计算订单奖金累计值 - * - * @return: void */ private MemberBonusDetailCalVO calculateOrderRatio(Map memberBonusDetailVoMap, Object cuMemberBonus) { Long pkOrder = ReflectUtils.invokeGetter(cuMemberBonus, "pkOrder"); diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberTreeMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberTreeMapper.xml index be15f869..56cf4b7d 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberTreeMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberTreeMapper.xml @@ -882,7 +882,8 @@ left join ( select cmbd.pk_member, cmbd.after_grant_income from CU_MEMBER_BONUS_DELAY cmbd - where exists (select 1 + where exists + (select 1 from (select cmbd.pk_member, max(cmbd.period) period from cu_member_bonus_delay cmbd where cmbd.del_flag = 0