## 复购区域分红改为支持比率+比值;

This commit is contained in:
cabbage 2025-07-02 18:08:33 +08:00
parent 97aa32d3a0
commit 5be813550e
2 changed files with 88 additions and 16 deletions

View File

@ -552,25 +552,27 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
) { ) {
// 注册或升级订单并且存在盒数产品才有 直推级差收益 平级收益 // 注册或升级订单并且存在盒数产品才有 直推级差收益 平级收益
for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) {
// 直推级差 + 平级收益 if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) {
cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, gradeMap, bonusConfigDTO, period, saOrderItems, saOrderExt)); // 盒数商品 计算 直推级差 + 平级收益
cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, gradeMap, bonusConfigDTO, period, saOrderItems, saOrderExt));
}
// 计算完奖金算等级 // 计算完奖金算等级
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() // if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) { // || EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
// 订单存在升级记录 // // 订单存在升级记录
if (memberLevelMap.containsKey(saOrderExt.getPkId())) { if (memberLevelMap.containsKey(saOrderExt.getPkId())) {
CuMemberLevel cuMemberLevel = memberLevelMap.get(saOrderExt.getPkId()); CuMemberLevel cuMemberLevel = memberLevelMap.get(saOrderExt.getPkId());
if (gradeIdMap.containsKey(cuMemberLevel.getNewLevel())) { if (gradeIdMap.containsKey(cuMemberLevel.getNewLevel())) {
BdGrade bdGrade = gradeIdMap.get(cuMemberLevel.getNewLevel()); BdGrade bdGrade = gradeIdMap.get(cuMemberLevel.getNewLevel());
if (bdGrade.getGradeValue() > sourceMemberRangeExt.getGradeValue()) { if (bdGrade.getGradeValue() > sourceMemberRangeExt.getGradeValue()) {
sourceMemberRangeExt.setPkGrade(bdGrade.getPkId()); sourceMemberRangeExt.setPkGrade(bdGrade.getPkId());
sourceMemberRangeExt.setGradeValue(bdGrade.getGradeValue()); sourceMemberRangeExt.setGradeValue(bdGrade.getGradeValue());
sourceMemberRangeExt.setGradeName(bdGrade.getGradeName()); sourceMemberRangeExt.setGradeName(bdGrade.getGradeName());
}
} }
} }
} }
// }
} }
} }
@ -1403,9 +1405,16 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
} else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrder.getOrderType()) { } else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrder.getOrderType()) {
// 复购订单 区域收益 = 复购区域分红 * 商品数量 // 复购订单 区域收益 = 复购区域分红 * 商品数量
for (SaOrderWaresExt saOrderWaresExt : saOrder.getOrderWaresExtList()) { 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, CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, RetailConstants.SAME_RATIO, benefitIncome,
cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME); cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME);
// 计算业绩以盒数做为基础 // 计算业绩以盒数做为基础

View File

@ -61,6 +61,7 @@
<result column="WARES_PRICE" property="waresPrice"/> <result column="WARES_PRICE" property="waresPrice"/>
<result column="WARES_CODE" property="waresCode"/> <result column="WARES_CODE" property="waresCode"/>
<result column="AREA_INCOME" property="areaIncome"/> <result column="AREA_INCOME" property="areaIncome"/>
<result column="AREA_INCOME_TYPE" property="areaIncomeType"/>
<result column="WARES_BOX_NUM" property="waresBoxNum"/> <result column="WARES_BOX_NUM" property="waresBoxNum"/>
</collection> </collection>
<collection property="orderItemsExtList" ofType="com.hzs.common.domain.sale.ext.SaOrderItemsExt"> <collection property="orderItemsExtList" ofType="com.hzs.common.domain.sale.ext.SaOrderItemsExt">
@ -154,9 +155,10 @@
nvl(st.pk_order,0) pk_order, nvl(st.pk_order,0) pk_order,
nvl(st.pk_wares,0) pk_wares, nvl(st.pk_wares,0) pk_wares,
nvl(st.wares_price,0) wares_price, nvl(st.wares_price,0) wares_price,
nvl(bw.wares_code,'~') wares_code,
nvl(st.wares_quantity,0) wares_quantity, nvl(st.wares_quantity,0) wares_quantity,
nvl(bw.wares_code,'~') wares_code,
nvl(bw.area_income, 0) area_income, nvl(bw.area_income, 0) area_income,
nvl(bw.area_income_type, 0) area_income_type,
nvl(bw.box_num, 0) wares_box_num nvl(bw.box_num, 0) wares_box_num
from sa_order so from sa_order so
left join sa_order_wares st left join sa_order_wares st
@ -164,6 +166,67 @@
left join bd_wares bw left join bd_wares bw
on bw.pk_id = st.pk_wares and bw.del_flag = 0 on bw.pk_id = st.pk_wares and bw.del_flag = 0
where so.order_status = 1 where so.order_status = 1
and so.order_type in (41, 42)
<if test="orderCode != null and orderCode != ''">
and so.order_code=#{orderCode}
</if>
and so.pay_time >= #{startDate}
and so.pay_time &lt; #{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)
<if test="orderCode != null and orderCode != ''">
and so.order_code=#{orderCode}
</if>
and so.pay_time >= #{startDate}
and so.pay_time &lt; #{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)
<if test="orderCode != null and orderCode != ''"> <if test="orderCode != null and orderCode != ''">
and so.order_code=#{orderCode} and so.order_code=#{orderCode}
</if> </if>