## 区域分红收益处理;

This commit is contained in:
cabbage 2025-06-11 13:49:11 +08:00
parent 75ad4f97a3
commit ffc688d029
4 changed files with 99 additions and 84 deletions

View File

@ -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);

View File

@ -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<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>();
// 计算奖金 计算平级收益
@ -184,8 +184,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
List<CuMemberRetailRangeExt> 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 {
// 会员结算mapkey会员IDvalue结算扩展
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap = new HashMap<>();
// 购买升级等级mapkey:等级值value:等级对象
Map<Integer, BdGrade> retaiBuyGradeMap = new TreeMap<>();
// 团队升级等级mapkey:等级值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<CuMemberBonusRange> calculateRetailRangeBonus(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Integer, BdGrade> gradeMap, BonusConfigDTO bonusConfigDTO,
Integer period, SaOrderWaresExt saOrderItems, SaOrderExt saOrderExt) {
List<CuMemberBonusRange> calculateRetailRangeBonus(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Map<Long, CuMemberBonus> cuMemberBonusMap,
Map<Integer, BdGrade> gradeMap, BonusConfigDTO bonusConfigDTO, Integer period,
SaOrderWaresExt saOrderItems, SaOrderExt saOrderExt) {
List<CuMemberBonusRange> memberBonusRangeList = new ArrayList<>();
// 用等级计算按照一级级算
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
@ -1422,30 +1423,57 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
return memberBonusRangeList;
}
CuMemberBonusDetail calculateRetailAreaBonus(Map<String, CuMemberRetailRangeExt> countyRangeExtMap, SaOrder saOrder,
/**
* 计算区域奖
*
* @param countyRangeExtMap
* @param saOrder
* @param bonusConfigDTO
* @param period
* @param memberRangeExtMap
* @param cuMemberBonusMap
* @return
*/
CuMemberBonusDetail calculateRetailAreaBonus(Map<String, CuMemberRetailRangeExt> countyRangeExtMap,
BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
Map<Long, CuMemberBonus> cuMemberBonusMap) {
CuMemberRetailRangeExt sourceRetailRangeExt = memberRangeExtMap.get(saOrder.getPkMember());
CuMemberRetailRangeExt cuMemberRetailRangeExt = countyRangeExtMap.get(sourceRetailRangeExt.getSystemType() + "_" + saOrder.getRecCounty());
if (cuMemberRetailRangeExt == null) {
Map<Long, CuMemberBonus> 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 奖金主表

View File

@ -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
</select>
<select id="querySaOrderByTime" resultMap="saOrderExtResultMap">

View File

@ -1,5 +1,6 @@
package com.hzs.common.core.constant;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
@ -8,6 +9,11 @@ import java.util.List;
*/
public class RetailProductConstants {
/**
* 区域分红每盒2元
*/
public static final BigDecimal AREA_BOX_BONUS = new BigDecimal("2");
/**
* 盒数产品列表
*/