From 2376c525cc1ab180fb78a77556d91ee315b7ef50 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Wed, 9 Apr 2025 20:52:16 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E4=B9=90=E5=AD=A6=E5=A4=8D=E8=B4=AD?= =?UTF-8?q?=E7=BA=A7=E5=B7=AE=E6=B3=95=E5=AE=9D=E5=88=B8=E7=BB=93=E7=AE=97?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/service/impl/BonusSettleHandle.java | 25 +-- .../impl/BonusSettlePurchaseHandle.java | 186 ++++++++++++++---- .../service/impl/BonusSettleServiceImpl.java | 26 +-- .../impl/CuMemberBonusServiceImpl.java | 3 - .../member/achieve/CuMemberTreeMapper.xml | 182 +++++++++++------ .../impl/AcPickMemberLogServiceImpl.java | 11 +- .../mapper/sale/order/SaOrderMapper.xml | 7 +- 7 files changed, 301 insertions(+), 139 deletions(-) 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 6fc16fed..fd8bfaa8 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 @@ -651,14 +651,12 @@ public abstract class BonusSettleHandle { } /** + * 获得 报单服务费收益的备注 + * * @param saOrderExt 订单编号 * @param cuMemberBonusRange 报单服务费 * @param sourceCuMemberSettleExt 提供奖金的人 * @param targetCuMemberSettleExt 获得奖金的人 - * @Description: 获得 报单服务费收益的备注 - * @return: String - * @Author: sui q - * @Date: 2022/11/17 11:22 */ protected void xueRangeRemark(SaOrderExt saOrderExt, CuMemberBonusRange cuMemberBonusRange, CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) { @@ -858,13 +856,11 @@ public abstract class BonusSettleHandle { } /** + * 根据订单获取会员的血缘父级,用于嗨粉推荐、复购极差 + * * @param cuMemberSettleExtMap 树关系 * @param settleTableName 结算表 * @param saOrderList 订单 - * @Description: 根据订单获取会员的血缘父级,用于嗨粉推荐、复购极差 - * @return: void - * @Author: sui q - * @Date: 2023/1/4 14:10 */ protected List getMemberParentBySaOrder(Map cuMemberSettleExtMap, String settleTableName, List saOrderList) { Set memberSet = new HashSet<>(); @@ -946,12 +942,10 @@ public abstract class BonusSettleHandle { } /** + * 设置奖金扣项,计算税前收益,扣税,实际收益, 设置主表 + * * @param cuMemberBonus 奖金明细 * @param bonusDetail 奖金明细表 - * @Description: 设置奖金扣项,计算税前收益,扣税,实际收益, 设置主表 - * @return: void - * @Author: sui q - * @Date: 2023/1/11 11:17 */ protected void setBonusDeduct(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) { BigDecimal pretaxIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.PRETAX_INCOME); @@ -966,12 +960,10 @@ public abstract class BonusSettleHandle { } /** + * 获得需要查询的会员,免考通过的不需要查询考核记录 + * * @param cuMemberSettleExtMap 存储目前有的会员数据 * @param cuMemberSettleExtList 需要查询的会员数据 - * @Description: 获得需要查询的会员,免考通过的不需要查询考核记录 - * @return: List - * @Author: sui q - * @Date: 2022/11/17 17:57 */ protected List getQueryMemberSettleExtList(Map cuMemberSettleExtMap, List cuMemberSettleExtList) { // 过滤数据,免考的会员不进行查询 @@ -1006,6 +998,7 @@ public abstract class BonusSettleHandle { * @Date: 2023/1/11 13:59 */ protected void setPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) { + // 处理扣项 setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail); BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME); cuMemberBonus.setRepurRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getRepurRealSubtotal(), realIncome)); 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 07477987..9204dc5e 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 @@ -428,8 +428,12 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { }*/ }); List cuMemberBonusRangeList = new ArrayList<>(); - List cuMemberSettleExtList = getMemberParentBySaOrder(cuMemberSettleExtMap, settleTableName, purchaseOrderList); - Map cuMemberAssessMap = getCuMemberAssessMap(cuMemberSettleExtMap, settleDate, cuMemberSettleExtList); + // TODO new 乐学不需要考核相关 +// List cuMemberSettleExtList = getMemberParentBySaOrder(cuMemberSettleExtMap, settleTableName, purchaseOrderList); +// Map cuMemberAssessMap = getCuMemberAssessMap(cuMemberSettleExtMap, settleDate, cuMemberSettleExtList); + + Map cuMemberAssessMap = null; + // if (chinaRangeOrderList.size() > 0) { // Map> saOrderRangeDtoMap = saOrderServiceApi.queryOrderRangeVO(chinaRangeOrderList).getData(); // Map rangePkDtoMap = new HashMap<>(ComputeUtil.mapInitCapacity(rangeDtoMap.size())); @@ -502,6 +506,7 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { // } // } // } + // TODO new 乐学复购级差,商品4个等级购买差价300,这个位置进行拨出 if (specialOrderList.size() > 0) { for (SaOrderExt saOrderExt : specialOrderList) { for (SaOrderItems saOrderItems : saOrderExt.getOrderItemsExtList()) { @@ -590,6 +595,7 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { } } } + // TODO new 乐学特殊级差 calculateLeXueRangeBonus(settleTableName, rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, leXueRangeParam, specialOrderList, cuMemberBonusRangeList); } return cuMemberBonusRangeList; @@ -616,22 +622,44 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { cuMemberBonusRangeList.add(cuMemberBonusRange); } + /** + * 乐学特殊复购级差,根据法宝券进行计算奖金 + * 每个等级最多拨出一张法宝券,给200奖金,遇到V4为止 + * + * @param settleTableName + * @param rangeDtoMap + * @param bonusConfigDTO + * @param period + * @param cuMemberBonusMap + * @param leXueRangeParam + * @param specialOrderList + * @param cuMemberBonusRangeList + */ private void calculateLeXueRangeBonus(String settleTableName, Map rangeDtoMap, BonusConfigDTO bonusConfigDTO, Integer period, Map cuMemberBonusMap, LeXueRangeParam leXueRangeParam, List specialOrderList, List cuMemberBonusRangeList) { // 计算乐学易考特殊复购极差,找第一个vip,svip,找到有代金券,代金券-1,奖金给金额,第一个是svip后,就不给 if (specialOrderList.size() > 0) { - // 查找订单血缘 + // 查找订单血缘上会员 Set expandMemberSet = specialOrderList.stream().distinct().map(SaOrderExt::getPkMember).collect(Collectors.toSet()); List specialMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParentForSpecial(settleTableName, expandMemberSet); + // 重算的时候首先先把数量还回来,在重新计算,查询订单扣除的记录 List acPickMemberLogList = acPickServiceApi.queryPickMemberLog(specialOrderList).getData(); + // key: 会员ID + 提货专区ID Map pickMemberLogMap = new HashMap<>(ComputeUtil.mapInitCapacity(acPickMemberLogList.size())); + // key: 会员ID + 订单ID + Map orderMemberMap = new HashMap<>(ComputeUtil.mapInitCapacity(acPickMemberLogList.size())); if (CollectionUtil.isNotEmpty(acPickMemberLogList)) { - acPickMemberLogList.forEach(acPickMemberLog -> - pickMemberLogMap.put(acPickMemberLog.getPkMember().toString() + acPickMemberLog.getPkId(), acPickMemberLog)); + acPickMemberLogList.forEach(acPickMemberLog -> { + pickMemberLogMap.put(acPickMemberLog.getPkMember().toString() + acPickMemberLog.getPkId(), acPickMemberLog); + orderMemberMap.put(acPickMemberLog.getPkMember() + acPickMemberLog.getPickOrder(), acPickMemberLog); + } + ); + leXueRangeParam.setAcPickMemberLogList(acPickMemberLogList); } + // 初始化父类网体的值 Map specialmeberSettleExtMap = new HashMap<>(); getMemberSettle(specialmeberSettleExtMap, specialMemberSettleExtList); @@ -645,53 +673,123 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { List acPickExtList = new ArrayList<>(); for (SaOrderExt saOrderExt : specialOrderList) { for (SaOrderItemsExt saOrderItemsExt : saOrderExt.getOrderItemsExtList()) { - if (EYesNo.YES.getIntValue() == saOrderItemsExt.getIsGift() || ComputeUtil.compareEqual(saOrderItemsExt.getPrice(), BigDecimal.ZERO) || - ComputeUtil.compareEqual(saOrderItemsExt.getAchievement(), BigDecimal.ZERO)) { + if (EYesNo.YES.getIntValue() == saOrderItemsExt.getIsGift() + || ComputeUtil.compareEqual(saOrderItemsExt.getPrice(), BigDecimal.ZERO) + || ComputeUtil.compareEqual(saOrderItemsExt.getAchievement(), BigDecimal.ZERO)) { + // 赠品 或者 金额为0 或者 业绩为0 则不进行处理 continue; } + // 订单对应的会员 CuMemberSettleExt sourceMemberSettleExt = specialmeberSettleExtMap.get(saOrderExt.getPkMember()); - if (sourceMemberSettleExt == null) { - continue; + if (null == sourceMemberSettleExt) { + break; } - // 找不到父级了或者找到第一个svip直接跳出 - boolean flag = Boolean.TRUE; + if (validatePkBonusItems(bonusConfigDTO, sourceMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_RANGE_INCOME.getValue())) { + // 没有这个奖项,直接退出 + break; + } + + // 订单会员推荐人 Long pkParent = sourceMemberSettleExt.getPkParent(); + // 订单会员等级 int gradeValue = sourceMemberSettleExt.getGradeValue(); + + // 订单是否使用法宝券(true 使用了法宝券) + boolean useFlag = null != orderMemberMap.get(saOrderExt.getPkMember() + saOrderExt.getOrderCode()) ? Boolean.TRUE : Boolean.FALSE; + if (EGrade.S_VIP.getValue() == gradeValue && useFlag) { + // 下单会员是 V4 并且 使用了法宝券,直接结束 + break; + } + + // 找不到父级了或者找到第一个svip直接跳出 + boolean V1Flag = Boolean.TRUE; + boolean V2Flag = Boolean.TRUE; + boolean V3Flag = Boolean.TRUE; while (true) { CuMemberSettleExt targetMemberSettleExt = specialmeberSettleExtMap.get(pkParent); - if (targetMemberSettleExt == null) { + if (null == targetMemberSettleExt) { + // 上面没有推荐人了,直接结束 break; } - if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && flag) { - // 获得奖金 - // 验证是否有奖金 - if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_RANGE_INCOME.getValue())) { + + if (useFlag) { + // 订单使用了法宝券,查询大于当前会员的 + if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) { + // 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过 + AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, + targetMemberSettleExt, cuMemberBonusRangeList); + if (null != acPickExt) { + acPickExtList.add(acPickExt); + } pkParent = targetMemberSettleExt.getPkParent(); sourceMemberSettleExt = targetMemberSettleExt; - continue; - } - AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, - targetMemberSettleExt, cuMemberBonusRangeList); - if (acPickExt != null) { - acPickExtList.add(acPickExt); - } - pkParent = targetMemberSettleExt.getPkParent(); - sourceMemberSettleExt = targetMemberSettleExt; - flag = Boolean.FALSE; - } else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) { - // 获得奖金 - if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_RANGE_INCOME.getValue())) { + V2Flag = Boolean.FALSE; + } else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) { + // 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过 + AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, + targetMemberSettleExt, cuMemberBonusRangeList); + if (null != acPickExt) { + acPickExtList.add(acPickExt); + } + pkParent = targetMemberSettleExt.getPkParent(); + sourceMemberSettleExt = targetMemberSettleExt; + V3Flag = Boolean.FALSE; + } else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) { + // 订单会员等级小于推荐人等级 并且 推荐人是 V4 + AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, + targetMemberSettleExt, cuMemberBonusRangeList); + if (null != acPickExt) { + acPickExtList.add(acPickExt); + } break; + } else { + pkParent = targetMemberSettleExt.getPkParent(); + sourceMemberSettleExt = targetMemberSettleExt; } - AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, - targetMemberSettleExt, cuMemberBonusRangeList); - if (acPickExt != null) { - acPickExtList.add(acPickExt); - } - break; } else { - pkParent = targetMemberSettleExt.getPkParent(); - sourceMemberSettleExt = targetMemberSettleExt; + // 订单没有使用法宝券 + if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.YOU_KE.getValue() == targetMemberSettleExt.getGradeValue() && V1Flag && V2Flag && V3Flag) { + // 订单会员等级小于推荐人等级 并且 推荐人是 V1 并且 V1 V2 V3 都没有算过 + AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, + targetMemberSettleExt, cuMemberBonusRangeList); + if (null != acPickExt) { + acPickExtList.add(acPickExt); + } + pkParent = targetMemberSettleExt.getPkParent(); + sourceMemberSettleExt = targetMemberSettleExt; + V1Flag = Boolean.FALSE; + } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) { + // 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过 + AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, + targetMemberSettleExt, cuMemberBonusRangeList); + if (null != acPickExt) { + acPickExtList.add(acPickExt); + } + pkParent = targetMemberSettleExt.getPkParent(); + sourceMemberSettleExt = targetMemberSettleExt; + V2Flag = Boolean.FALSE; + } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) { + // 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过 + AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, + targetMemberSettleExt, cuMemberBonusRangeList); + if (null != acPickExt) { + acPickExtList.add(acPickExt); + } + pkParent = targetMemberSettleExt.getPkParent(); + sourceMemberSettleExt = targetMemberSettleExt; + V3Flag = Boolean.FALSE; + } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) { + // 订单会员等级小于推荐人等级 并且 推荐人是 V4 + AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, + targetMemberSettleExt, cuMemberBonusRangeList); + if (null != acPickExt) { + acPickExtList.add(acPickExt); + } + break; + } else { + pkParent = targetMemberSettleExt.getPkParent(); + sourceMemberSettleExt = targetMemberSettleExt; + } } } } @@ -702,6 +800,20 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { } } + /** + * 计算封装乐学复购特殊级差(法宝券)返回扣除提货法宝券 + * + * @param rangeDtoMap + * @param bonusConfigDTO + * @param period + * @param cuMemberBonusMap + * @param saOrderExt + * @param saOrderItemsExt + * @param sourceMemberSettleExt + * @param targetMemberSettleExt + * @param cuMemberBonusRangeList + * @return + */ private AcPickExt calculateRangeBonus(Map rangeDtoMap, BonusConfigDTO bonusConfigDTO, Integer period, Map cuMemberBonusMap, SaOrderExt saOrderExt, SaOrderItemsExt saOrderItemsExt, CuMemberSettleExt sourceMemberSettleExt, 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 197f76ae..30008f49 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 @@ -357,6 +357,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService { validateSettleTable(yesterday, yesterdayTableName); Map awardsMap = awardsServiceApi.getAwards().getData(); cuMemberTreeService.initCuMemberTreeTable(yesterdayTableName, currentSettleTableName); + // 查看是否有特殊业务,有特殊业务的处理,特殊业务,注水处理 List cuMemberAchieveLogList = cuMemberAchieveLogService.queryMemberAchieveLogByPeriod(period); // 有特殊业务 @@ -368,32 +369,25 @@ public class BonusSettleServiceImpl implements IBonusSettleService { cuMemberAchieveService.mergeCuMemberSettleByAchieveLogByDate(currentSettleTableName, DateUtils.parseStringToDate(settleDate)); // 判断特殊业务是否有到期日期,有到期的需要使用真实业绩,昨天的期间真实更新当前的 cuMemberAchieveService.updateCuMemberSettleAchieveByDueDate(currentSettleTableName, yesterdayTableName, DateUtils.parseStringToDate(settleDate)); -// // 每月10号进行甩网,将业绩从A甩到B, 甩网业绩修改为按照每日甩业绩 -// List retMemberAchieveExtList = null; -// if (settleDate.endsWith("10")) { -// retMemberAchieveExtList = execNetAchieve(period, settleDate, currentSettleTableName); -// } + // 根据日期开始计算网体 + 业绩 //********************* 更新网体*************/ // 按照订单时间开始奖金结算,当订单类型为注册订单需要进行上网,更新网体 // 根据订单开始更新业绩 // 订单按照体系开始分类 // Map> saOrderMap = new HashMap<>(ComputeUtil.mapInitCapacity(saOrderExtList.size())); - // suiqing 退单需要处理 + // 退单需要处理 // 用于记录每天的撤单、退单数据数据,7天的网体均变为死点 List revokeRegSaOrderList = new ArrayList<>(); List revokeUpdSaOrderList = new ArrayList<>(); // 区分体系,体系按照多线程进行更新业绩 // 首购订单 (注册+升级) 直推奖、量奖、领导奖、(注册)报单服务费 - // 嗨粉订单 (嗨粉) 嗨粉极差 // 复购订单 (复购量奖、复购极差) // 其他订单 只累计业绩 仅算奖衔 - // 分红奖金 是固定的 // 云代奖金 1% 待考虑 // 首购订单 List firPurchaseOrderList = new ArrayList<>(); - // 注意 // 复购订单 List repurchaseOrderList = new ArrayList<>(); // 商城订单 @@ -432,6 +426,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService { // 计算完奖衔回退业绩,最终根据新增进行回写 // cuMemberTreeService.updateCuMemberBackSettle(cuMemberAchieveHashMap, currentSettleTableName); //********************************重新考核*********************************/ + // TODO new 乐学没有分红、复购考核,这个位置需要去掉 cuMemberAssessService.retryCalculationAssess(DateUtils.parseStringToDate(settleDate), Boolean.TRUE); //*********************************计算奖金********************************/ // 首购订单 (注册+升级) 直推奖、量奖、领导奖、(注册)报单服务费 @@ -440,6 +435,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService { //计算 直推奖、拓展奖、辅导奖 Map cuMemberSettleExtMap = new HashMap<>(); BonusRecordDetailVO recordDetailVO = new BonusRecordDetailVO(); + // 计算奖金 // 乐学易考奖金计算,回写代金券数量 LeXueRangeParam leXueRangeParam = calculateBonusBySaOrderList(settleDate, period, currentSettleTableName, @@ -736,6 +732,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService { } /** + * 根据不同的订单类型计算奖金 + * * @param settleDate 结算日期 * @param period 期间 * @param currentSettleTableName 结算日表 @@ -743,10 +741,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService { * @param bonusConfigDTO 奖金配置 * @param cuMemberBonusMap 最终的奖金列表 * @param cuMemberSettleExtMap 会员结算map - * @Description: 根据不同的订单类型计算奖金 - * @return: void - * @Author: sui q - * @Date: 2023/2/13 15:09 */ private LeXueRangeParam calculateBonusBySaOrderList(String settleDate, Integer period, String currentSettleTableName, List firPurchaseOrderList, List repurchaseOrderList, List mallOrderList, @@ -1036,14 +1030,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService { } /** + * 计算首购订单的奖金 + * * @param settleTableName 结算日表 * @param settleDate 结算日期 * @param bonusConfigDTO 各个国家奖金参数 * @param purchaseOrderList 首购订单 - * @Desccription: 计算首购订单的奖金 - * @return: Map 需要更新的 - * @Author: sui q - * @Date: 2022/11/10 17:40 */ 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, diff --git a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java index ba423820..b3dedc68 100644 --- a/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java +++ b/hzs-business/hzs-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java @@ -640,9 +640,6 @@ public class CuMemberBonusServiceImpl extends ServiceImpl - select pk_member,pk_parent,member_code,member_name,a.pk_awards,account_status,a.register_authority,customer_type, + select + pk_member,pk_parent,member_code,member_name,a.pk_awards,account_status,a.register_authority,customer_type, income_status,pk_settle_country,purchase_status,share_status,is_maker_space, a_balance,b_balance,r_a_balance,r_b_balance,rep_a_balance,rep_b_balance,r_rep_a_balance,r_rep_b_balance, register_amount,register_pv,upgrade_amount,upgrade_pv,repurchase_amount,pk_center_code, @@ -240,9 +241,7 @@ CREATE OR REPLACE TRIGGER - ${tableName} - _ - TRIG + ${tableName}_TRIG BEFORE INSERT OR @@ -277,6 +276,7 @@ END IF; END; + select pk_member,pk_parent,member_code,member_name,pk_awards,account_status, @@ -294,8 +294,10 @@ insert into ${settleTableName}(pk_member, pk_parent, pk_place_parent, place_dept, member_code, member_name, - customer_type, phone, pk_grade, pk_awards, account_status, pay_status, register_authority, category, - purchase_type, purchase_status, share_status, income_status, pk_team_code, is_maker_space, + customer_type, phone, pk_grade, pk_awards, account_status, pay_status, + register_authority, category, + purchase_type, purchase_status, share_status, income_status, pk_team_code, + is_maker_space, pk_center_code, pk_vertex, pk_settle_country, is_real_name, pk_country, pk_rate, store_level, is_maker_gift, expire_status) select cm.pk_id, @@ -352,7 +354,8 @@ insert into ${targetTableName}(period, pk_member, pk_parent, pk_place_parent, place_dept, member_code, - member_name, customer_type, phone, pk_grade, pk_awards, account_status, pay_status, + member_name, customer_type, phone, pk_grade, pk_awards, account_status, + pay_status, register_authority, category, purchase_type, purchase_status, share_status, income_status, pk_team_code, pk_center_code, pk_vertex, pk_settle_country, is_real_name, is_bus_license, is_maker_space, pk_country) @@ -412,19 +415,19 @@ - create index ${tableName}_parent on ${tableName}(pk_parent) + create index ${tableName}_parent on ${tableName} ( pk_parent ) - create index ${tableName}_place on ${tableName}(pk_place_parent,place_dept) + create index ${tableName}_place on ${tableName} ( pk_place_parent, place_dept ) - create unique index ${tableName}_PK_M on ${tableName}(PK_MEMBER,period) + create unique index ${tableName}_PK_M on ${tableName} ( PK_MEMBER, period ) - create unique index ${tableName}_PK_M on ${tableName}(PK_MEMBER) + create unique index ${tableName}_PK_M on ${tableName} ( PK_MEMBER ) @@ -451,16 +454,25 @@ insert into ${settleTableName}(pk_member, PK_PARENT, PK_PLACE_PARENT, PLACE_DEPT, MEMBER_CODE, member_name, - CUSTOMER_TYPE, PHONE, PK_GRADE, PK_AWARDS, ACCOUNT_STATUS, PAY_STATUS, REGISTER_AUTHORITY, - CATEGORY, PURCHASE_TYPE, PURCHASE_STATUS, SHARE_STATUS, INCOME_STATUS, PK_TEAM_CODE, PK_CENTER_CODE, - PK_VERTEX, PK_SETTLE_COUNTRY, IS_REAL_NAME, IS_BUS_LICENSE, IS_MAKER_SPACE, PK_COUNTRY, PK_RATE, + CUSTOMER_TYPE, PHONE, PK_GRADE, PK_AWARDS, ACCOUNT_STATUS, PAY_STATUS, + REGISTER_AUTHORITY, + CATEGORY, PURCHASE_TYPE, PURCHASE_STATUS, SHARE_STATUS, INCOME_STATUS, + PK_TEAM_CODE, PK_CENTER_CODE, + PK_VERTEX, PK_SETTLE_COUNTRY, IS_REAL_NAME, IS_BUS_LICENSE, IS_MAKER_SPACE, + PK_COUNTRY, PK_RATE, a_balance, b_balance, A_SUM_AMOUNT, B_SUM_AMOUNT, A_SUM_PV, B_SUM_PV, - A_NEW_AMOUNT, B_NEW_AMOUNT, A_NEW_PV, B_NEW_PV, A_SUM_REAL_AMOUNT, B_SUM_REAL_AMOUNT, A_SUM_REAL_PV, B_SUM_REAL_PV, - REP_A_BALANCE, REP_B_BALANCE, REP_A_NEW_AMOUNT, REP_B_NEW_AMOUNT, REP_A_NEW_PV, REP_B_NEW_PV, REP_A_SUM_AMOUNT, - REP_B_SUM_AMOUNT, REP_A_SUM_PV, REP_B_SUM_PV, REGISTER_AMOUNT, REGISTER_PV, REGISTER_NEW_AMOUNT, REGISTER_NEW_PV, - UPGRADE_AMOUNT, UPGRADE_PV, UPGRADE_NEW_AMOUNT, UPGRADE_NEW_PV, REPURCHASE_AMOUNT, REPURCHASE_PV, - REPURCHASE_NEW_AMOUNT, REPURCHASE_NEW_PV, HI_FUN_AMOUNT, HI_FUN_PV, HI_FUN_NEW_AMOUNT, HI_FUN_NEW_PV, - MALL_AMOUNT, MALL_PV, MALL_NEW_AMOUNT, MALL_NEW_PV, REGISTER_BLO_NEW_PV, UPGRADE_BLO_NEW_PV, REPURCHASE_BLO_NEW_PV, + A_NEW_AMOUNT, B_NEW_AMOUNT, A_NEW_PV, B_NEW_PV, A_SUM_REAL_AMOUNT, + B_SUM_REAL_AMOUNT, A_SUM_REAL_PV, B_SUM_REAL_PV, + REP_A_BALANCE, REP_B_BALANCE, REP_A_NEW_AMOUNT, REP_B_NEW_AMOUNT, REP_A_NEW_PV, + REP_B_NEW_PV, REP_A_SUM_AMOUNT, + REP_B_SUM_AMOUNT, REP_A_SUM_PV, REP_B_SUM_PV, REGISTER_AMOUNT, REGISTER_PV, + REGISTER_NEW_AMOUNT, REGISTER_NEW_PV, + UPGRADE_AMOUNT, UPGRADE_PV, UPGRADE_NEW_AMOUNT, UPGRADE_NEW_PV, + REPURCHASE_AMOUNT, REPURCHASE_PV, + REPURCHASE_NEW_AMOUNT, REPURCHASE_NEW_PV, HI_FUN_AMOUNT, HI_FUN_PV, + HI_FUN_NEW_AMOUNT, HI_FUN_NEW_PV, + MALL_AMOUNT, MALL_PV, MALL_NEW_AMOUNT, MALL_NEW_PV, REGISTER_BLO_NEW_PV, + UPGRADE_BLO_NEW_PV, REPURCHASE_BLO_NEW_PV, HI_FUN_BLO_NEW_PV, MALL_BLO_NEW_PV, MIN_ACHIEVE, ROUND, SECOND) select ca.pk_member, ca.PK_PARENT, @@ -549,9 +561,11 @@ insert into ${settleTableName}(pk_member, pk_parent, member_code, member_name, - customer_type, phone, pk_grade, pk_awards, pk_range_awards, pk_benefit_awards, account_status, pay_status, register_authority, category, + customer_type, phone, pk_grade, pk_awards, pk_range_awards, pk_benefit_awards, + account_status, pay_status, register_authority, category, purchase_status, income_status, pk_team_code, - pk_center_code, pk_vertex, pk_settle_country, is_real_name, pk_country, pk_rate, assess_status, month_member, range_store_status, pay_time) + pk_center_code, pk_vertex, pk_settle_country, is_real_name, pk_country, pk_rate, + assess_status, month_member, range_store_status, pay_time) select cm.pk_id, pk_parent, member_code, @@ -610,6 +624,7 @@ + merge into ${settleTableName} a using ( @@ -635,24 +650,33 @@ when matched then update set a.purchase_status = 0,a.purchase_type = b.purchase_type + merge into ${settleTableName} a using( select * from ( select #{item.pkMember} pk_member,#{item.aBalance} a_balance, #{item.bBalance} b_balance, - #{item.aNewAmount} a_new_amount,#{item.bNewAmount} b_new_amount,#{item.aNewPv} a_new_pv,#{item.bNewPv} b_new_pv, + #{item.aNewAmount} a_new_amount,#{item.bNewAmount} b_new_amount,#{item.aNewPv} a_new_pv,#{item.bNewPv} + b_new_pv, #{item.repABalance} rep_a_balance,#{item.repBBalance} rep_b_balance,#{item.repANewAmount} rep_a_new_amount, #{item.repBNewAmount} rep_b_new_amount,#{item.repANewPv} rep_a_new_pv,#{item.repBNewPv} rep_b_new_pv, - #{item.registerAmount} register_amount,#{item.registerPv} register_pv,#{item.registerNewAmount} register_new_amount,#{item.registerNewPv} register_new_pv, - #{item.upgradeAmount} upgrade_amount,#{item.upgradePv} upgrade_pv,#{item.upgradeNewAmount} upgrade_new_amount,#{item.upgradeNewPv} upgrade_new_pv, - #{item.repurchaseAmount} repurchase_amount,#{item.repurchasePv} repurchase_pv,#{item.repurchaseNewAmount} repurchase_new_amount,#{item.repurchaseNewPv} repurchase_new_pV, - #{item.hiFunAmount} hi_fun_amount,#{item.hiFunPv} hi_fun_pv,#{item.hiFunNewAmount} hi_fun_new_amount,#{item.hiFunNewPv} hi_fun_new_pv, - #{item.mallAmount} mall_amount,#{item.mallPv} mall_pv,#{item.mallNewAmount} mall_new_amount,#{item.mallNewPv} mall_new_pv, - #{item.registerBloNewPv} register_blo_new_pv,#{item.upgradeBloNewPv} upgrade_blo_new_pv,#{item.repurchaseBloNewPv} repurchase_blo_new_pv, + #{item.registerAmount} register_amount,#{item.registerPv} register_pv,#{item.registerNewAmount} + register_new_amount,#{item.registerNewPv} register_new_pv, + #{item.upgradeAmount} upgrade_amount,#{item.upgradePv} upgrade_pv,#{item.upgradeNewAmount} + upgrade_new_amount,#{item.upgradeNewPv} upgrade_new_pv, + #{item.repurchaseAmount} repurchase_amount,#{item.repurchasePv} repurchase_pv,#{item.repurchaseNewAmount} + repurchase_new_amount,#{item.repurchaseNewPv} repurchase_new_pV, + #{item.hiFunAmount} hi_fun_amount,#{item.hiFunPv} hi_fun_pv,#{item.hiFunNewAmount} + hi_fun_new_amount,#{item.hiFunNewPv} hi_fun_new_pv, + #{item.mallAmount} mall_amount,#{item.mallPv} mall_pv,#{item.mallNewAmount} + mall_new_amount,#{item.mallNewPv} mall_new_pv, + #{item.registerBloNewPv} register_blo_new_pv,#{item.upgradeBloNewPv} + upgrade_blo_new_pv,#{item.repurchaseBloNewPv} repurchase_blo_new_pv, #{item.hiFunBloNewPv} hi_fun_blo_new_pv,#{item.mallBloNewPv} mall_blo_new_pv, #{item.rABalance} r_a_balance,#{item.rBBalance} r_b_balance,#{item.rRepABalance} r_rep_a_balance, - #{item.rRepBBalance} r_rep_b_balance,#{item.minAchieve} min_achieve,#{item.round} round,#{item.second} second from dual + #{item.rRepBBalance} r_rep_b_balance,#{item.minAchieve} min_achieve,#{item.round} round,#{item.second} + second from dual ) ) b on (a.pk_member = b.pk_member) @@ -661,7 +685,8 @@ a.b_new_amount=b.b_new_amount,a.a_new_pv=b.a_new_pv,a.b_new_pv=b.b_new_pv,a.rep_a_balance=b.rep_a_balance, a.rep_b_balance=b.rep_b_balance, a.rep_a_new_amount=b.rep_a_new_amount,a.rep_b_new_amount=b.rep_b_new_amount, a.rep_a_new_pv=b.rep_a_new_pv,a.rep_b_new_pv=b.rep_b_new_pv, - a.register_amount = b.register_amount,a.register_pv=b.register_pv,a.register_new_amount = b.register_new_amount,a.register_new_pv=b.register_new_pv, + a.register_amount = b.register_amount,a.register_pv=b.register_pv,a.register_new_amount = + b.register_new_amount,a.register_new_pv=b.register_new_pv, a.upgrade_amount=b.upgrade_amount,a.upgrade_pv=b.upgrade_pv,a.upgrade_new_amount=b.upgrade_new_amount,a.upgrade_new_pv=b.upgrade_new_pv, a.repurchase_amount=b.repurchase_amount,a.repurchase_pv=b.repurchase_pv,a.repurchase_new_amount=b.repurchase_new_amount,a.repurchase_new_pv=b.repurchase_new_pv, a.hi_fun_amount=b.hi_fun_amount,a.hi_fun_pv=b.hi_fun_pv,a.hi_fun_new_amount=b.hi_fun_new_amount,a.hi_fun_new_pv=b.hi_fun_new_pv, @@ -689,12 +714,14 @@ using( select #{item.pkMember} pk_member,#{item.aBalance} a_balance, #{item.bBalance} b_balance, - #{item.aNewAmount} a_new_amount,#{item.bNewAmount} b_new_amount,#{item.aNewPv} a_new_pv,#{item.bNewPv} b_new_pv, + #{item.aNewAmount} a_new_amount,#{item.bNewAmount} b_new_amount,#{item.aNewPv} a_new_pv,#{item.bNewPv} + b_new_pv, #{item.repABalance} rep_a_balance,#{item.repBBalance} rep_b_balance,#{item.repANewAmount} rep_a_new_amount, #{item.repBNewAmount} rep_b_new_amount,#{item.repANewPv} rep_a_new_pv,#{item.repBNewPv} rep_b_new_pv, #{item.registerAmount} register_amount,#{item.registerPv} register_pv,#{item.registerNewPv} register_new_pv, #{item.upgradeAmount} upgrade_amount,#{item.upgradePv} upgrade_pv,#{item.upgradeNewPv} upgrade_new_pv, - #{item.repurchaseAmount} repurchase_amount,#{item.repurchasePv} repurchase_pv,#{item.repurchaseNewPv} repurchase_new_pv, + #{item.repurchaseAmount} repurchase_amount,#{item.repurchasePv} repurchase_pv,#{item.repurchaseNewPv} + repurchase_new_pv, #{item.hiFunAmount} hi_fun_amount,#{item.hiFunPv} hi_fun_pv,#{item.hiFunNewPv} hi_fun_new_pv, #{item.mallAmount} mall_amount,#{item.mallPv} mall_pv,#{item.mallNewPv} mall_new_pv, #{item.minAchieve} min_achieve,#{item.round} round,#{item.second} second from dual @@ -743,7 +770,8 @@ nvl(ST.REP_B_NEW_PV,0) REP_B_NEW_PV,nvl(yt.REP_A_SUM_AMOUNT,0) REP_A_SUM_AMOUNT, nvl(yt.REP_B_SUM_AMOUNT,0) REP_B_SUM_AMOUNT,nvl(yt.REP_A_SUM_PV,0) REP_A_SUM_PV, nvl(yt.REP_B_SUM_PV,0) REP_B_SUM_PV, - nvl(ST.ROUND,0) ROUND,nvl(nvl(ST.SECOND,yt.second),1) SECOND,nvl(ST.MIN_ACHIEVE,0) MIN_ACHIEVE,b.expire_status from + nvl(ST.ROUND,0) ROUND,nvl(nvl(ST.SECOND,yt.second),1) SECOND,nvl(ST.MIN_ACHIEVE,0) MIN_ACHIEVE,b.expire_status + from (select t.pk_id,t.pk_settle_country,t.expire_status from cu_member t where t.del_flag = 0 start with t.pk_id = #{pkMember} connect by t.pk_id = prior @@ -858,7 +886,8 @@ share_status, income_status, pk_team_code, pk_center_code, pk_vertex, pk_settle_country, is_real_name, is_bus_license, is_maker_space, pk_country) values (b.period, b.pk_member, b.pk_parent, b.pk_place_parent, b.place_dept, b.member_code, - b.member_name, b.customer_type, b.phone, b.pk_grade, b.pk_awards, b.account_status, b.pay_status, + b.member_name, b.customer_type, b.phone, b.pk_grade, b.pk_awards, b.account_status, + b.pay_status, b.register_authority, b.category, b.purchase_type, b.purchase_status, b.share_status, b.income_status, b.pk_team_code, b.pk_center_code, b.pk_vertex, b.pk_settle_country, b.is_real_name, b.is_bus_license, b.is_maker_space, b.pk_country) @@ -1180,6 +1209,7 @@ and bw.community_check <= a.b_sum_real_pv order by pk_member desc + + + - + select count(cr.PK_MEMBER) parentMemberCount,cr.PK_PARENT pkMember from cu_member_settle981 cr where + cr.PK_PARENT in @@ -2073,7 +2128,8 @@