From ffc688d029e932fb03e0e2054b143cc9ed5b34a0 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Wed, 11 Jun 2025 13:49:11 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E5=8C=BA=E5=9F=9F=E5=88=86=E7=BA=A2?= =?UTF-8?q?=E6=94=B6=E7=9B=8A=E5=A4=84=E7=90=86=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/service/impl/BonusSettleHandle.java | 25 +-- .../service/impl/BonusSettleRangeHandle.java | 148 +++++++++++------- .../mapper/bonus/order/BonusOrderMapper.xml | 4 +- .../core/constant/RetailProductConstants.java | 6 + 4 files changed, 99 insertions(+), 84 deletions(-) diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java index a37cd1e7..03663c1b 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java @@ -192,7 +192,7 @@ public abstract class BonusSettleHandle { */ protected Boolean validatePkBonusItems(BonusConfigDTO bonusConfigDTO, Integer pkCountry, Integer bonusItems) { BdBonusItemsExt bdBonusItemsExt = bonusConfigDTO.getBonusItemsExtMap().get(pkCountry.toString() + bonusItems); - return bdBonusItemsExt == null || bdBonusItemsExt.getPkId() == null; + return null == bdBonusItemsExt || null == bdBonusItemsExt.getPkId(); } /** @@ -1124,10 +1124,7 @@ public abstract class BonusSettleHandle { } /** - * @Description: 云代计算 扣项,小计,总计 - * @return: void - * @Author: sui q - * @Date: 2023/1/11 13:59 + * 扣项,小计,总计 */ protected void setRetailTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) { setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail); @@ -1137,23 +1134,7 @@ public abstract class BonusSettleHandle { } /** - * @Description: 云代计算 扣项,小计,总计 - * @return: void - * @Author: sui q - * @Date: 2023/1/11 13:59 - */ - protected void setMakerTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) { - setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail); - BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME); - cuMemberBonus.setMakerRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getMakerRealSubtotal(), realIncome)); - cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome)); - } - - /** - * @Description: 云代计算 扣项,小计,总计 - * @return: void - * @Author: sui q - * @Date: 2023/1/11 13:59 + * 扣项,小计,总计 */ protected void setRepurchaseCouponTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) { setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail); diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java index fe8cc744..639a5326 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java @@ -130,17 +130,18 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 计算自消费奖衔 CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember()); // 先算等级 注册、升级计算等级 - // 订单指定产品盒数(计算等级使用) - int boxNum = saOrderExt.getBoxNum(); -// int boxNum = 0; -// for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { -// for (String waresCode : RetailProductConstants.ALL_BOX_WARES_LIST) { -// if (saOrderItems.getWaresCode().equals(waresCode)) { -// boxNum += saOrderItems.getWaresQuantity(); -// break; -// } -// } -// } + // 订单指定产品盒数 + int boxNum = 0; + for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { + for (String waresCode : RetailProductConstants.ALL_BOX_WARES_LIST) { + if (saOrderItems.getWaresCode().equals(waresCode)) { + boxNum += saOrderItems.getWaresQuantity(); + break; + } + } + } + saOrderExt.setBoxNum(boxNum); + // 订单业绩 BigDecimal orderAchieve = saOrderExt.getOrderAchieve(); if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType() @@ -163,7 +164,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 计算团队业绩、盒数,计算等级、奖衔 cuMemberAwardsList.addAll(calculateRetailRangeGradeAwards(currentPeriod, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, boxNum, cuMemberGradeList)); - // TODO new 奖金处理 List cuMemberBonusRangeList = new ArrayList<>(); // 计算奖金 计算平级收益 @@ -184,8 +184,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { List countyRangeExtList = iCuMemberRetailRangeService.batchQueryMemberRetailSecondRangeByCounty(rangeTableName, secondRangeTableName, saOrderExt.getRecCounty()); countyRangeExtList.forEach(cuMemberRetailRangeExt -> countyRangeExtMap.put(cuMemberRetailRangeExt.getSystemType() + "_" + cuMemberRetailRangeExt.getRegionAddress(), cuMemberRetailRangeExt)); + // 计算区域奖 - CuMemberBonusDetail cuMemberBonusDetail = calculateRetailAreaBonus(countyRangeExtMap, saOrderExt, bonusConfigDTO, currentPeriod, memberRangeExtMap, cuMemberBonusMap); + CuMemberBonusDetail cuMemberBonusDetail = calculateRetailAreaBonus(countyRangeExtMap, bonusConfigDTO, currentPeriod, memberRangeExtMap, cuMemberBonusMap, saOrderExt); if (cuMemberBonusDetail != null) { cuMemberBonusDetailList.add(cuMemberBonusDetail); } @@ -409,8 +410,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 更新网体 iCuMemberRetailRangeService.mergeMemberRetailRangeByYesterday(settleEndDate, rangeTableName, yesterdayRangeTableName, isSameMonth); - //////////////// TODO ////////////////////// - // 回退历史注水 iCuMemberRetailRangeService.mergeCuMemberRetailBackBoxBySpecial(rangeTableName, yesterdayRangeTableName, period); // 更新注水 @@ -426,7 +425,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 会员结算map(key:会员ID,value:结算扩展) Map memberRangeExtMap = new HashMap<>(); - // 购买升级等级map(key:等级值,value:等级对象) Map retaiBuyGradeMap = new TreeMap<>(); // 团队升级等级map(key:等级值,value:等级对象) @@ -537,31 +535,35 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // TODO new 奖金处理 - // 计算奖金 计算极差平级收益 - for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { - for (String waresCode : RetailProductConstants.ALL_BOX_WARES_LIST) { - if (saOrderItems.getWaresCode() != null && saOrderItems.getWaresCode().equals(waresCode)) { + // 计算奖金 直推级差 + 平级收益 + if ((EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() + || EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) + && boxNum > 0 + ) { + // 注册或升级订单并且存在盒数产品,才有 直推级差收益 和 平级收益 + for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { + // 直推级差 + 平级收益 + cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, gradeMap, bonusConfigDTO, period, saOrderItems, saOrderExt)); + + // 计算完奖金算等级 + if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() || + EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType() || + EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) { + // 计算个人等级,消费等级 int waresQuantity = saOrderItems.getWaresQuantity(); - cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, gradeMap, bonusConfigDTO, period, saOrderItems, saOrderExt)); - // 计算完奖金算等级 - if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() || - EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType() || - EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) { - // 计算个人等级,消费等级 - int buyBoxNum = sourceMemberRangeExt.getBuyNum() + waresQuantity; - if (memberLevelMap.containsKey(saOrderExt.getPkId())) { - CuMemberLevel cuMemberLevel = memberLevelMap.get(saOrderExt.getPkId()); - if (gradeIdMap.containsKey(cuMemberLevel.getNewLevel())) { - BdGrade bdGrade = gradeIdMap.get(cuMemberLevel.getNewLevel()); - if (bdGrade.getGradeValue() > sourceMemberRangeExt.getGradeValue()) { - sourceMemberRangeExt.setGradeValue(bdGrade.getGradeValue()); - sourceMemberRangeExt.setPkGrade(bdGrade.getPkId()); - sourceMemberRangeExt.setGradeName(bdGrade.getGradeName()); - if (sourceMemberRangeExt.getSameDate() == EYesNo.NO.getIntValue()) { - sourceMemberRangeExt.setBuyNum(bdGrade.getBoxNumber()); - } else { - sourceMemberRangeExt.setBuyNum(buyBoxNum); - } + int buyBoxNum = sourceMemberRangeExt.getBuyNum() + waresQuantity; + if (memberLevelMap.containsKey(saOrderExt.getPkId())) { + CuMemberLevel cuMemberLevel = memberLevelMap.get(saOrderExt.getPkId()); + if (gradeIdMap.containsKey(cuMemberLevel.getNewLevel())) { + BdGrade bdGrade = gradeIdMap.get(cuMemberLevel.getNewLevel()); + if (bdGrade.getGradeValue() > sourceMemberRangeExt.getGradeValue()) { + sourceMemberRangeExt.setGradeValue(bdGrade.getGradeValue()); + sourceMemberRangeExt.setPkGrade(bdGrade.getPkId()); + sourceMemberRangeExt.setGradeName(bdGrade.getGradeName()); + if (sourceMemberRangeExt.getSameDate() == EYesNo.NO.getIntValue()) { + sourceMemberRangeExt.setBuyNum(bdGrade.getBoxNumber()); + } else { + sourceMemberRangeExt.setBuyNum(buyBoxNum); } } } @@ -569,11 +571,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } } } - if (saOrderExt.getOrderType().equals(EOrderType.RETAIL_CONSUME.getValue())) { - continue; - } -// 计算区域奖 - CuMemberBonusDetail cuMemberBonusDetail = calculateRetailAreaBonus(countyRangeExtMap, saOrderExt, bonusConfigDTO, period, memberRangeExtMap, cuMemberBonusMap); + + // 计算区域奖 + CuMemberBonusDetail cuMemberBonusDetail = calculateRetailAreaBonus(countyRangeExtMap, bonusConfigDTO, period, memberRangeExtMap, cuMemberBonusMap, saOrderExt); if (cuMemberBonusDetail != null) { cuMemberBonusDetailList.add(cuMemberBonusDetail); } @@ -1268,8 +1268,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { /** * 计算极差收益,根据极差收益计算平级收益 */ - List calculateRetailRangeBonus(Map memberRangeExtMap, Map cuMemberBonusMap, Map gradeMap, BonusConfigDTO bonusConfigDTO, - Integer period, SaOrderWaresExt saOrderItems, SaOrderExt saOrderExt) { + List calculateRetailRangeBonus(Map memberRangeExtMap, Map cuMemberBonusMap, + Map gradeMap, BonusConfigDTO bonusConfigDTO, Integer period, + SaOrderWaresExt saOrderItems, SaOrderExt saOrderExt) { List memberBonusRangeList = new ArrayList<>(); // 用等级计算,按照一级级算 CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember()); @@ -1422,30 +1423,57 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { return memberBonusRangeList; } - CuMemberBonusDetail calculateRetailAreaBonus(Map countyRangeExtMap, SaOrder saOrder, + /** + * 计算区域奖 + * + * @param countyRangeExtMap + * @param saOrder + * @param bonusConfigDTO + * @param period + * @param memberRangeExtMap + * @param cuMemberBonusMap + * @return + */ + CuMemberBonusDetail calculateRetailAreaBonus(Map countyRangeExtMap, BonusConfigDTO bonusConfigDTO, Integer period, Map memberRangeExtMap, - Map cuMemberBonusMap) { - CuMemberRetailRangeExt sourceRetailRangeExt = memberRangeExtMap.get(saOrder.getPkMember()); - CuMemberRetailRangeExt cuMemberRetailRangeExt = countyRangeExtMap.get(sourceRetailRangeExt.getSystemType() + "_" + saOrder.getRecCounty()); - if (cuMemberRetailRangeExt == null) { + Map cuMemberBonusMap, SaOrder saOrder) { + // 重消订单没有区域分红 + if (saOrder.getOrderType().equals(EOrderType.RETAIL_CONSUME.getValue())) { return null; } + // 区域分红根据商品盒数来,如果没有盒数,直接返回为空 + if (saOrder.getBoxNum() == 0) { + return null; + } + + CuMemberRetailRangeExt sourceRetailRangeExt = memberRangeExtMap.get(saOrder.getPkMember()); + // 获取对应区域会员 + CuMemberRetailRangeExt cuMemberRetailRangeExt = countyRangeExtMap.get(sourceRetailRangeExt.getSystemType() + "_" + saOrder.getRecCounty()); + if (null == cuMemberRetailRangeExt) { + return null; + } + // 获取区域会员结算数据 if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) { cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember()); } - if (ECategory.NORMAL.getValue() != cuMemberRetailRangeExt.getCategory() || - EAccountStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getAccountStatus() || - cuMemberRetailRangeExt.getEnableStatus() == EYesNo.NO.getIntValue()) { + + // 非正常用户 或者 停止收益 或 未激活,不能获取区域收益 + if (ECategory.NORMAL.getValue() != cuMemberRetailRangeExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == cuMemberRetailRangeExt.getAccountStatus() + || cuMemberRetailRangeExt.getEnableStatus() == EYesNo.NO.getIntValue()) { return null; } // 验证是否有奖金 if (validatePkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_AREA_INCOME.getValue())) { return null; } - BigDecimal bonusRatio = BigDecimal.valueOf(0.4); - BigDecimal benefitIncome = ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), bonusRatio); - CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, bonusRatio, benefitIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME); - cuMemberBonusDetail.setCalAchieve(saOrder.getOrderAchieve()); + + BigDecimal boxNumBig = new BigDecimal(saOrder.getBoxNum()); + // 处理区域收益(每盒2元) + BigDecimal benefitIncome = RetailProductConstants.AREA_BOX_BONUS.multiply(boxNumBig); + CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, BigDecimal.ZERO, benefitIncome, + cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME); + cuMemberBonusDetail.setCalAchieve(boxNumBig); cuMemberBonusDetail.setPkOrder(saOrder.getPkId()); String remark = String.format(BonusMsgConstants.RETAIL_AREA_INCOME, saOrder.getOrderCode(), memberRangeExtMap.get(saOrder.getPkMember()).getMemberCode() + memberRangeExtMap.get(saOrder.getPkMember()).getMemberName(), @@ -1963,7 +1991,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } /** - * 奖金明细 报单服务费、分红、云代首购、云代复购、海豆收益 + * 奖金明细 * * @param saOrderExt 订单 * @param cuMemberBonus 奖金主表 diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml index 5a294639..5e45a63b 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml @@ -156,7 +156,7 @@ nvl(st.wares_quantity,0) wares_quantity from sa_order so left join sa_order_wares st - on so.pk_id = st.pk_order and st.wares_price >0 + on so.pk_id = st.pk_order and st.wares_price > 0 left join bd_wares bw on bw.pk_id = st.pk_wares and bw.del_flag = 0 where so.order_status = 1 @@ -168,7 +168,7 @@ ) od left join bd_currency bc on od.pk_rate = bc.pk_id - order by pay_time,wares_price desc + order by pay_time, wares_price desc