From 2c292a0ec1411b82a922973391d97d01dd26a8c7 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Wed, 2 Jul 2025 18:08:33 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E5=A4=8D=E8=B4=AD=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E5=88=86=E7=BA=A2=E6=94=B9=E4=B8=BA=E6=94=AF=E6=8C=81=E6=AF=94?= =?UTF-8?q?=E7=8E=87+=E6=AF=94=E5=80=BC=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/BonusSettleRangeHandle.java | 39 ++++++----- .../mapper/bonus/order/BonusOrderMapper.xml | 65 ++++++++++++++++++- 2 files changed, 88 insertions(+), 16 deletions(-) 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 f4c6c3f8..bbe9b5d4 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 @@ -552,25 +552,27 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { ) { // 注册或升级订单并且存在盒数产品,才有 直推级差收益 和 平级收益 for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { - // 直推级差 + 平级收益 - cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, gradeMap, bonusConfigDTO, period, saOrderItems, saOrderExt)); + if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) { + // 盒数商品 计算 直推级差 + 平级收益 + cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, gradeMap, bonusConfigDTO, period, saOrderItems, saOrderExt)); + } // 计算完奖金算等级 - if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() - || EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) { - // 订单存在升级记录 - 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.setPkGrade(bdGrade.getPkId()); - sourceMemberRangeExt.setGradeValue(bdGrade.getGradeValue()); - sourceMemberRangeExt.setGradeName(bdGrade.getGradeName()); - } +// if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() +// || EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) { +// // 订单存在升级记录 + 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.setPkGrade(bdGrade.getPkId()); + sourceMemberRangeExt.setGradeValue(bdGrade.getGradeValue()); + sourceMemberRangeExt.setGradeName(bdGrade.getGradeName()); } } } +// } } } @@ -1403,9 +1405,16 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrder.getOrderType()) { // 复购订单, 区域收益 = 复购区域分红 * 商品数量 for (SaOrderWaresExt saOrderWaresExt : saOrder.getOrderWaresExtList()) { - benefitIncome = benefitIncome.add(saOrderWaresExt.getAreaIncome().multiply(new BigDecimal(saOrderWaresExt.getWaresQuantity()))); + if (ERatioType.VALUE.getValue() == saOrderWaresExt.getAreaIncomeType()) { + // 按比值处理 + benefitIncome = benefitIncome.add(saOrderWaresExt.getAreaIncome().multiply(new BigDecimal(saOrderWaresExt.getWaresQuantity()))); + } else { + // 按比率处理 + benefitIncome = benefitIncome.add(saOrderWaresExt.getWaresPrice().multiply(saOrderWaresExt.getAreaIncome()).divide(new BigDecimal("100"), 6, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(saOrderWaresExt.getWaresQuantity()))); + } } } + CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, RetailConstants.SAME_RATIO, benefitIncome, cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME); // 计算业绩以盒数做为基础 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 7b1ad32b..1ea855a1 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 @@ -61,6 +61,7 @@ + @@ -154,9 +155,10 @@ nvl(st.pk_order,0) pk_order, nvl(st.pk_wares,0) pk_wares, nvl(st.wares_price,0) wares_price, - nvl(bw.wares_code,'~') wares_code, nvl(st.wares_quantity,0) wares_quantity, + nvl(bw.wares_code,'~') wares_code, nvl(bw.area_income, 0) area_income, + nvl(bw.area_income_type, 0) area_income_type, nvl(bw.box_num, 0) wares_box_num from sa_order so left join sa_order_wares st @@ -164,6 +166,67 @@ left join bd_wares bw on bw.pk_id = st.pk_wares and bw.del_flag = 0 where so.order_status = 1 + and so.order_type in (41, 42) + + and so.order_code=#{orderCode} + + and so.pay_time >= #{startDate} + and so.pay_time < #{endDate} + union + select so.pk_id, + so.pk_member, + so.order_code, + so.order_type, + so.pk_rate, + so.rec_province, + so.rec_city, + so.rec_county, + so.order_amount, + so.order_achieve, + so.order_ass_achieve, + so.upload_achieve, + so.pk_reference, + so.pk_vertex, + so.pk_country, + so.del_flag, + so.pay_time, + so.pk_creator, + so.consume_amount, + so.box_num, + soi.items_id, + soi.pk_order, + soi.pk_wares, + soi.wares_price, + soi.wares_quantity, + nvl(bw.wares_code, '~') wares_code, + nvl(bw.area_income, 0) area_income, + nvl(bw.area_income_type, 0) area_income_type, + nvl(bw.box_num, 0) wares_box_num + from sa_order so + left join (select max(soi.pk_id) items_id, + nvl(soi.pk_order, 0) pk_order, + nvl(soi.pk_wares, 0) pk_wares, + sum(soi.achievement * soi.quantity) wares_price, + max(soi.wares_quantity) wares_quantity + from sa_order so + left join sa_order_items soi + on soi.pk_order = so.pk_id + and soi.del_flag = 0 + and soi.is_gift = 1 + where so.order_status = 1 + and so.order_type in (43) + + and so.order_code=#{orderCode} + + and so.pay_time >= #{startDate} + and so.pay_time < #{endDate} + group by soi.pk_order, soi.pk_wares) soi + on soi.pk_order = so.pk_id + left join bd_wares bw + on bw.pk_id = soi.pk_wares + and bw.del_flag = 0 + where so.order_status = 1 + and so.order_type in (43) and so.order_code=#{orderCode}