3
0
Fork 0

## 撤单处理盒数、业绩等;

This commit is contained in:
cabbage 2025-06-11 15:39:32 +08:00
parent 9289057d55
commit 5cedaa4f2e
8 changed files with 157 additions and 108 deletions

View File

@ -57,7 +57,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
private IBonusOrderService iBonusOrderService; private IBonusOrderService iBonusOrderService;
/** /**
* 实时计算当月奖衔 * 实时计算秒结数据业绩盒数等级奖衔日奖
*/ */
List<CuMemberBonusRange> calculateCuMemberRetailRangeBonusBySecond(String settleDate, SaOrderExt saOrderExt, BonusConfigDTO bonusConfigDTO, List<CuMemberBonusRange> calculateCuMemberRetailRangeBonusBySecond(String settleDate, SaOrderExt saOrderExt, BonusConfigDTO bonusConfigDTO,
String secondRangeTableName, int beforePeriod, int currentPeriod, String secondRangeTableName, int beforePeriod, int currentPeriod,
@ -191,7 +191,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
cuMemberBonusDetailList.add(cuMemberBonusDetail); cuMemberBonusDetailList.add(cuMemberBonusDetail);
} }
// 回退会员等级 // 回退会员等级
iCuMemberGradeService.updateCuMemberGrade(secondRangeTableName, saOrderExt.getPkId()); iCuMemberGradeService.updateCuMemberGrade(secondRangeTableName, saOrderExt.getPkId());
if (cuMemberGradeList.size() > 0) { if (cuMemberGradeList.size() > 0) {
@ -215,32 +214,43 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
} }
/** /**
* 实时计算当月奖衔 * 实时计算撤单数据业绩盒数等级奖衔日奖
*/ */
void calculateCuMemberBackRetailIncome(SaOrderExt saOrderExt, BonusConfigDTO bonusConfigDTO, void calculateCuMemberBackRetailIncome(SaOrderExt saOrderExt, BonusConfigDTO bonusConfigDTO,
String secondRangeTableName, int beforePeriod, int currentPeriod) { String secondRangeTableName, int beforePeriod, int currentPeriod) {
// 当天的撤单 // 当天的撤单
List<CuMemberRetailRangeExt> memberRetailRangeExtList; List<CuMemberRetailRangeExt> memberRetailRangeExtList;
String rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + beforePeriod; String rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + beforePeriod;
if (DateUtils.isSameDay(saOrderExt.getPayTime(), DateUtils.currentDate())) { if (DateUtils.isSameDay(saOrderExt.getPayTime(), DateUtils.currentDate())) {
// 按照血缘查询该会员所有伞上会员 // 当天撤单
// 实时网体查询血缘伞上会员更新秒结表等级奖衔
iCuMemberRetailRangeService.mergeMemberRetailGradeByMember(secondRangeTableName, saOrderExt.getPkMember()); iCuMemberRetailRangeService.mergeMemberRetailGradeByMember(secondRangeTableName, saOrderExt.getPkMember());
// 恢复奖衔 // 恢复秒结表奖衔
iCuMemberAwardsService.mergeCuMemberBackAwards(secondRangeTableName, saOrderExt.getPkMember(), currentPeriod); iCuMemberAwardsService.mergeCuMemberBackAwards(secondRangeTableName, saOrderExt.getPkMember(), currentPeriod);
// 查询 昨天日结 + 今天秒结 血缘上会员结算数据
memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeParent(rangeTableName, secondRangeTableName, saOrderExt.getPkMember()); memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeParent(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
} else { } else {
// 非当天撤单
rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + currentPeriod; rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + currentPeriod;
List<SaOrderExt> retailOrderList = new ArrayList<>(); List<SaOrderExt> retailOrderList = new ArrayList<>();
retailOrderList.add(saOrderExt); retailOrderList.add(saOrderExt);
// 实时网体查询血缘上会员更新订单支付日结表等级奖衔
iCuMemberRetailRangeService.mergeMemberRetailGradeByMember(rangeTableName, saOrderExt.getPkMember()); iCuMemberRetailRangeService.mergeMemberRetailGradeByMember(rangeTableName, saOrderExt.getPkMember());
// 恢复奖衔 // 恢复日结表奖衔
iCuMemberAwardsService.mergeCuMemberBackAwards(rangeTableName, saOrderExt.getPkMember(), beforePeriod); iCuMemberAwardsService.mergeCuMemberBackAwards(rangeTableName, saOrderExt.getPkMember(), beforePeriod);
// 查询 订单下单日结 血缘上会员结算数据
memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeParent(rangeTableName, retailOrderList); memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeParent(rangeTableName, retailOrderList);
} }
// 会员结算mapkey会员IDvalue结算扩展
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap = new HashMap<>(); Map<Long, CuMemberRetailRangeExt> memberRangeExtMap = new HashMap<>();
// 团队升级等级mapkey:等级值value:等级对象
Map<Integer, BdGrade> retailTeamGradeMap = new TreeMap<>(); Map<Integer, BdGrade> retailTeamGradeMap = new TreeMap<>();
// 等级mapkey:等级IDvalue:等级对象
Map<Integer, BdGrade> gradeIdMap = new HashMap<>(); Map<Integer, BdGrade> gradeIdMap = new HashMap<>();
// 等级列表
List<BdGrade> retaiGradeList = bonusConfigDTO.getRetaiGradeList(); List<BdGrade> retaiGradeList = bonusConfigDTO.getRetaiGradeList();
// 等级 // 等级
for (BdGrade bdGrade : retaiGradeList) { for (BdGrade bdGrade : retaiGradeList) {
@ -249,18 +259,20 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
} }
gradeIdMap.put(bdGrade.getPkId(), bdGrade); gradeIdMap.put(bdGrade.getPkId(), bdGrade);
} }
// 奖衔mapkey:奖衔值value奖衔对象
Map<Integer, BdAwards> retailAwardsMap = new HashMap<>(); Map<Integer, BdAwards> retailAwardsMap = new HashMap<>();
List<BdAwards> awardsList = bonusConfigDTO.getAwardsList(); List<BdAwards> awardsList = bonusConfigDTO.getAwardsList();
awardsList.forEach(bdAwards -> retailAwardsMap.put(bdAwards.getAwardsValue(), bdAwards)); awardsList.forEach(bdAwards -> retailAwardsMap.put(bdAwards.getAwardsValue(), bdAwards));
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : memberRetailRangeExtList) { for (CuMemberRetailRangeExt cuMemberRetailRangeExt : memberRetailRangeExtList) {
if (!memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) { if (!memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
cuMemberRetailRangeExt.setBuyNum(0); cuMemberRetailRangeExt.setBuyNum(0);
// 转换等级购买数量
memberRangeExtMap.put(cuMemberRetailRangeExt.getPkMember(), cuMemberRetailRangeExt); memberRangeExtMap.put(cuMemberRetailRangeExt.getPkMember(), cuMemberRetailRangeExt);
} }
} }
Map<String, CuMemberGrade> cuMemberGradeMap = new HashMap<>();
Map<String, CuMemberAwards> cuMemberAwardsMap = new HashMap<>(); // 计算自消费奖衔
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember()); CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
// 先算等级 注册升级计算等级 // 先算等级 注册升级计算等级
int boxNum = 0; int boxNum = 0;
@ -272,23 +284,32 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
} }
} }
} }
saOrderExt.setBoxNum(boxNum);
// 订单业绩
BigDecimal orderAchieve = saOrderExt.getOrderAchieve(); BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
// if (saOrderExt.getOrderType().equals(EOrderType.RETAIL_REGISTER.getValue()) || if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()
// saOrderExt.getOrderType().equals(EOrderType.RETAIL_UPGRADE.getValue())) { || EOrderType.RETAIL_CONSUME.getValue() == saOrderExt.getOrderType()
// orderAchieve = BigDecimal.ZERO; ) {
// }else{ // 复购重消盒数业绩算个人累计数据盒数业绩
//
// }
// 个人累计消费pv
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() - boxNum); sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() - boxNum);
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() - boxNum); sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() - boxNum);
sourceMemberRangeExt.setConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getConsumePv(), orderAchieve)); sourceMemberRangeExt.setConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getConsumePv(), orderAchieve));
sourceMemberRangeExt.setMonthConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getMonthConsumePv(), orderAchieve)); sourceMemberRangeExt.setMonthConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getMonthConsumePv(), orderAchieve));
sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getNewConsumePv(), orderAchieve)); sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getNewConsumePv(), orderAchieve));
// 团队业绩计算奖衔 }
// 会员等级map
Map<String, CuMemberGrade> cuMemberGradeMap = new HashMap<>();
// 会员奖衔map
Map<String, CuMemberAwards> cuMemberAwardsMap = new HashMap<>();
// 计算自己等级奖衔等
calculateBackGrade(currentPeriod, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, cuMemberGradeMap, cuMemberAwardsMap, sourceMemberRangeExt); calculateBackGrade(currentPeriod, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, cuMemberGradeMap, cuMemberAwardsMap, sourceMemberRangeExt);
// 计算团队业绩盒数计算等级奖衔
List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = calculateRetailBackRangeGradeAwards(currentPeriod, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, boxNum, cuMemberGradeMap, cuMemberAwardsMap); List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = calculateRetailBackRangeGradeAwards(currentPeriod, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, boxNum, cuMemberGradeMap, cuMemberAwardsMap);
cuMemberRetailRangeExtList.add(sourceMemberRangeExt); cuMemberRetailRangeExtList.add(sourceMemberRangeExt);
// 查询期间的等级和奖衔 // 查询期间的等级和奖衔
List<CuMemberGrade> memberGradeList = iCuMemberGradeService.queryCuMemberGrade(cuMemberRetailRangeExtList, currentPeriod); List<CuMemberGrade> memberGradeList = iCuMemberGradeService.queryCuMemberGrade(cuMemberRetailRangeExtList, currentPeriod);
// 查询最大的手动奖衔 // 查询最大的手动奖衔
@ -926,7 +947,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 如果等级值 大于 当前会员等级值 并且 等级要求累计盒数 小于等于 团队累计盒数 + 累计消费盒数则可以进行升级 // 如果等级值 大于 当前会员等级值 并且 等级要求累计盒数 小于等于 团队累计盒数 + 累计消费盒数则可以进行升级
if (bdGrade.getGradeValue() > targetMemberRangeExt.getGradeValue() if (bdGrade.getGradeValue() > targetMemberRangeExt.getGradeValue()
&& bdGrade.getBoxTotal() <= (targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum())) { && bdGrade.getBoxTotal() <= (targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum())) {
// 验证小区计算小区累计盒数 查询伞下会员 // 验证小区计算小区累计盒数 查询伞下会员
List<CuMemberRetailRangeExt> cuMemberRangeExtList; List<CuMemberRetailRangeExt> cuMemberRangeExtList;
if (secondRangeTableName != null) { if (secondRangeTableName != null) {
@ -982,7 +1002,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 先验证累计业绩 // 先验证累计业绩
// new 升级奖衔判断为当月累计业绩累计业绩为团队业绩 + 个人消费业绩 // new 升级奖衔判断为当月累计业绩累计业绩为团队业绩 + 个人消费业绩
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), bdAwards.getTotalCheck())) { if (ComputeUtil.compareValue(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), bdAwards.getTotalCheck())) {
// 累计业绩足够 // 累计业绩足够即可升奖衔
// BigDecimal consumeBigPv = BigDecimal.ZERO; // BigDecimal consumeBigPv = BigDecimal.ZERO;
// if (ComputeUtil.compareValue(bdAwards.getCommunityCheck())) { // if (ComputeUtil.compareValue(bdAwards.getCommunityCheck())) {
// // 验证小区计算小区业绩 // // 验证小区计算小区业绩
@ -1002,12 +1022,11 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// } // }
// } // }
// } // }
// // new 新制度奖衔不校验小区
// BigDecimal smallAreaPv = ComputeUtil.computeSubtract(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), consumeBigPv); // BigDecimal smallAreaPv = ComputeUtil.computeSubtract(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), consumeBigPv);
// if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getCommunityCheck())) { // if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getCommunityCheck())) {
cuMemberAwardsList.add(getCuMemberRetailAwards(targetMemberRangeExt, period, saOrderExt, bdAwards, EAwardsType.RANGE_TYPE.getValue())); cuMemberAwardsList.add(getCuMemberRetailAwards(targetMemberRangeExt, period, saOrderExt, bdAwards, EAwardsType.RANGE_TYPE.getValue()));
targetMemberRangeExt.setAwardsValue(bdAwards.getAwardsValue());
targetMemberRangeExt.setPkAwards(bdAwards.getPkId()); targetMemberRangeExt.setPkAwards(bdAwards.getPkId());
targetMemberRangeExt.setAwardsValue(bdAwards.getAwardsValue());
targetMemberRangeExt.setAwardsName(bdAwards.getAwardsName()); targetMemberRangeExt.setAwardsName(bdAwards.getAwardsName());
continue; continue;
// } // }
@ -1075,11 +1094,17 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
public List<CuMemberRetailRangeExt> calculateRetailBackRangeGradeAwards(Integer period, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, String rangeTableName, SaOrderExt saOrderExt, public List<CuMemberRetailRangeExt> calculateRetailBackRangeGradeAwards(Integer period, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, String rangeTableName, SaOrderExt saOrderExt,
Map<Integer, BdGrade> retailTeamGradeMap, Map<Integer, BdAwards> retailAwardsMap, String secondRangeTableName, Map<Integer, BdGrade> retailTeamGradeMap, Map<Integer, BdAwards> retailAwardsMap, String secondRangeTableName,
Integer boxNum, Map<String, CuMemberGrade> cuMemberGradeMap, Map<String, CuMemberAwards> cuMemberAwardsMap) { Integer boxNum, Map<String, CuMemberGrade> cuMemberGradeMap, Map<String, CuMemberAwards> cuMemberAwardsMap) {
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(sourceMemberRangeExt.getPkParent());
List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = new ArrayList<>(); List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = new ArrayList<>();
// 订单会员
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
// 订单会员的推荐人
CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(sourceMemberRangeExt.getPkParent());
BigDecimal orderAchieve = saOrderExt.getOrderAchieve(); BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
BigDecimal orderAmount = saOrderExt.getOrderAmount(); BigDecimal orderAmount = saOrderExt.getOrderAmount();
while (targetMemberRangeExt != null) {
// 激活的账号才能累计业绩和盒数有注册升级订单
if (targetMemberRangeExt.getEnableStatus() == EYesNo.YES.getIntValue()) {
// 累计业绩 // 累计业绩
targetMemberRangeExt.setTeamConsumeAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumeAmount(), orderAmount)); targetMemberRangeExt.setTeamConsumeAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumeAmount(), orderAmount));
targetMemberRangeExt.setTeamConsumePv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumePv(), orderAchieve)); targetMemberRangeExt.setTeamConsumePv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumePv(), orderAchieve));
@ -1087,14 +1112,13 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
targetMemberRangeExt.setTeamMonthPv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), orderAchieve)); targetMemberRangeExt.setTeamMonthPv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), orderAchieve));
targetMemberRangeExt.setTeamNewAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamNewAmount(), orderAmount)); targetMemberRangeExt.setTeamNewAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamNewAmount(), orderAmount));
targetMemberRangeExt.setTeamNewPv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamNewPv(), orderAchieve)); targetMemberRangeExt.setTeamNewPv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamNewPv(), orderAchieve));
while (targetMemberRangeExt != null) {
// 累计盒数 // 累计盒数
if (targetMemberRangeExt.getEnableStatus() == EYesNo.YES.getIntValue()) {
targetMemberRangeExt.setTeamBoxNum(targetMemberRangeExt.getTeamBoxNum() - boxNum); targetMemberRangeExt.setTeamBoxNum(targetMemberRangeExt.getTeamBoxNum() - boxNum);
targetMemberRangeExt.setMonthBoxNum(targetMemberRangeExt.getMonthBoxNum() - boxNum); targetMemberRangeExt.setMonthBoxNum(targetMemberRangeExt.getMonthBoxNum() - boxNum);
targetMemberRangeExt.setTeamNewBoxNum(targetMemberRangeExt.getTeamNewBoxNum() - boxNum); targetMemberRangeExt.setTeamNewBoxNum(targetMemberRangeExt.getTeamNewBoxNum() - boxNum);
cuMemberRetailRangeExtList.add(targetMemberRangeExt); // 计算等级
calculateBackGrade(period, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, cuMemberGradeMap, cuMemberAwardsMap, targetMemberRangeExt); calculateBackGrade(period, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, cuMemberGradeMap, cuMemberAwardsMap, targetMemberRangeExt);
cuMemberRetailRangeExtList.add(targetMemberRangeExt);
} }
// 计算等级 // 计算等级
targetMemberRangeExt = memberRangeExtMap.get(targetMemberRangeExt.getPkParent()); targetMemberRangeExt = memberRangeExtMap.get(targetMemberRangeExt.getPkParent());
@ -1102,34 +1126,51 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
return cuMemberRetailRangeExtList; return cuMemberRetailRangeExtList;
} }
private void calculateBackGrade(Integer period, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, String rangeTableName, SaOrderExt saOrderExt, Map<Integer, BdGrade> retailTeamGradeMap, Map<Integer, BdAwards> retailAwardsMap, String secondRangeTableName, Map<String, CuMemberGrade> cuMemberGradeMap, Map<String, CuMemberAwards> cuMemberAwardsMap, CuMemberRetailRangeExt targetMemberRangeExt) { private void calculateBackGrade(Integer period, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, String rangeTableName,
SaOrderExt saOrderExt, Map<Integer, BdGrade> retailTeamGradeMap, Map<Integer, BdAwards> retailAwardsMap,
String secondRangeTableName, Map<String, CuMemberGrade> cuMemberGradeMap, Map<String, CuMemberAwards> cuMemberAwardsMap,
CuMemberRetailRangeExt targetMemberRangeExt) {
// 遍历团队等级mapV4,V5
for (Integer gradeValue : retailTeamGradeMap.keySet()) { for (Integer gradeValue : retailTeamGradeMap.keySet()) {
BdGrade bdGrade = retailTeamGradeMap.get(gradeValue); BdGrade bdGrade = retailTeamGradeMap.get(gradeValue);
if (bdGrade.getBoxTotal() <= (targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum())) { if (bdGrade.getBoxTotal() <= (targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum())) {
// 验证小区计算小区累计盒数 查询伞下会员 // 验证小区计算小区累计盒数 查询伞下会员
List<CuMemberRetailRangeExt> cuMemberRangeExtList; List<CuMemberRetailRangeExt> cuMemberRangeExtList;
if (secondRangeTableName != null) { if (secondRangeTableName != null) {
// 秒结表关联昨日结算表查询订单会员直推数据
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember()); cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
} else { } else {
// 昨日结算表查询订单会员直推数据
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember()); cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
} }
// 有注水的大区无限大新增全算小区
// 大区盒数
int bigBoxNum = targetMemberRangeExt.getConsumeBoxNum(); int bigBoxNum = targetMemberRangeExt.getConsumeBoxNum();
if (targetMemberRangeExt.getBigBoxNum() > 0) { if (targetMemberRangeExt.getBigBoxNum() > 0) {
// 大区存在注水盒数直接使用大区注水盒数
bigBoxNum = targetMemberRangeExt.getBigBoxNum(); bigBoxNum = targetMemberRangeExt.getBigBoxNum();
} else { } else {
// 秒结 cuMemberRangeExtList 为直推会员数据 memberRangeExtMap 为会员伞上数据这块应该永远不会处理
// 日结这块处理直推判断大小区没问题
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) { for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) { if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember()); cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
} }
// 伞下团队累计盒数 + 自己消费盒数 - 大区注水 - 小区注水
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum() int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum()
- cuMemberRetailRangeExt.getBigBoxNum() - cuMemberRetailRangeExt.getSmallBoxNum(); - cuMemberRetailRangeExt.getBigBoxNum() - cuMemberRetailRangeExt.getSmallBoxNum();
if (areaBoxNum > bigBoxNum) { if (areaBoxNum > bigBoxNum) {
// 实际订单累计盒数 大于 累计消费盒数实际订单累计盒数为大区
bigBoxNum = areaBoxNum; bigBoxNum = areaBoxNum;
} }
} }
} }
// 小区盒数
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() - bigBoxNum; int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() - bigBoxNum;
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) { if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
// 小区盒数 大于等于 升级小区盒数
CuMemberGrade cuMemberGrade = getCuMemberGrade(period, targetMemberRangeExt, bdGrade); CuMemberGrade cuMemberGrade = getCuMemberGrade(period, targetMemberRangeExt, bdGrade);
cuMemberGradeMap.put(cuMemberGrade.getPkMember() + "_" + cuMemberGrade.getNewLevel(), cuMemberGrade); cuMemberGradeMap.put(cuMemberGrade.getPkMember() + "_" + cuMemberGrade.getNewLevel(), cuMemberGrade);
targetMemberRangeExt.setGradeValue(bdGrade.getGradeValue()); targetMemberRangeExt.setGradeValue(bdGrade.getGradeValue());
@ -1138,39 +1179,42 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
} }
} }
} }
// 计算奖衔 // 计算奖衔荣誉级别
while (true) { while (true) {
int awardsValue = targetMemberRangeExt.getAwardsValue() + 5; int awardsValue = targetMemberRangeExt.getAwardsValue() + 5;
if (targetMemberRangeExt.getGradeValue().equals(EGrade.S_VIP.getValue()) && retailAwardsMap.containsKey(awardsValue)) { if (targetMemberRangeExt.getGradeValue().equals(EGrade.S_VIP.getValue()) && retailAwardsMap.containsKey(awardsValue)) {
// 等级达到V5 并且 存在下个奖衔判断是否能升奖衔
BdAwards bdAwards = retailAwardsMap.get(awardsValue); BdAwards bdAwards = retailAwardsMap.get(awardsValue);
// 先验证累计业绩 // 先验证累计业绩
// new 升级奖衔判断为当月累计业绩累计业绩为团队业绩 + 个人消费业绩
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), bdAwards.getTotalCheck())) { if (ComputeUtil.compareValue(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), bdAwards.getTotalCheck())) {
// 验证小区计算小区业绩 // 累计业绩足够即可升奖衔
List<CuMemberRetailRangeExt> cuMemberRangeExtList; // // 验证小区计算小区业绩
if (secondRangeTableName != null) { // List<CuMemberRetailRangeExt> cuMemberRangeExtList;
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember()); // if (secondRangeTableName != null) {
} else { // cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember()); // } else {
} // cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
BigDecimal consumeBigPv = BigDecimal.ZERO; // }
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) { // BigDecimal consumeBigPv = BigDecimal.ZERO;
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) { // for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember()); // if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
} // cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
BigDecimal consumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getTeamMonthPv()); // }
if (ComputeUtil.compareGreaterThan(consumePv, consumeBigPv)) { // BigDecimal consumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getTeamMonthPv());
consumeBigPv = consumePv; // if (ComputeUtil.compareGreaterThan(consumePv, consumeBigPv)) {
} // consumeBigPv = consumePv;
} // }
BigDecimal smallAreaPv = ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), consumeBigPv); // }
if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getCommunityCheck())) { // BigDecimal smallAreaPv = ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), consumeBigPv);
// if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getCommunityCheck())) {
CuMemberAwards cuMemberRetailAwards = getCuMemberRetailAwards(targetMemberRangeExt, period, saOrderExt, bdAwards, EAwardsType.RANGE_TYPE.getValue()); CuMemberAwards cuMemberRetailAwards = getCuMemberRetailAwards(targetMemberRangeExt, period, saOrderExt, bdAwards, EAwardsType.RANGE_TYPE.getValue());
cuMemberAwardsMap.put(cuMemberRetailAwards.getPkMember() + "_" + cuMemberRetailAwards.getNewLevel(), cuMemberRetailAwards); cuMemberAwardsMap.put(cuMemberRetailAwards.getPkMember() + "_" + cuMemberRetailAwards.getNewLevel(), cuMemberRetailAwards);
targetMemberRangeExt.setAwardsValue(bdAwards.getAwardsValue());
targetMemberRangeExt.setPkAwards(bdAwards.getPkId()); targetMemberRangeExt.setPkAwards(bdAwards.getPkId());
targetMemberRangeExt.setAwardsValue(bdAwards.getAwardsValue());
targetMemberRangeExt.setAwardsName(bdAwards.getAwardsName()); targetMemberRangeExt.setAwardsName(bdAwards.getAwardsName());
continue; continue;
} // }
} }
} }
break; break;

View File

@ -214,7 +214,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// 订单下单处理正向 // 订单下单处理正向
// 会员奖金明细 // 会员奖金明细
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>(); List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// 实时计算当月奖衔 // 实时计算秒结数据业绩盒数等级奖衔日奖
List<CuMemberBonusRange> cuMemberBonusRangeList = bonusSettleRangeHandle.calculateCuMemberRetailRangeBonusBySecond(settleDate, saOrderExt, bonusConfigDTO, List<CuMemberBonusRange> cuMemberBonusRangeList = bonusSettleRangeHandle.calculateCuMemberRetailRangeBonusBySecond(settleDate, saOrderExt, bonusConfigDTO,
secondRangeTableName, beforePeriod, currentPeriod, cuMemberBonusMap, cuMemberBonusDetailList); secondRangeTableName, beforePeriod, currentPeriod, cuMemberBonusMap, cuMemberBonusDetailList);
saveCuMemberBonus(currentPeriod, settleDate, cuMemberBonusMap); saveCuMemberBonus(currentPeriod, settleDate, cuMemberBonusMap);
@ -236,6 +236,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
settleDate = DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(1, ChronoUnit.DAYS)); settleDate = DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(1, ChronoUnit.DAYS));
currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId(); currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId();
} }
// 实时计算撤单数据业绩盒数等级奖衔日奖
bonusSettleRangeHandle.calculateCuMemberBackRetailIncome(saOrderExt, bonusConfigDTO, bonusSettleRangeHandle.calculateCuMemberBackRetailIncome(saOrderExt, bonusConfigDTO,
secondRangeTableName, beforePeriod, currentPeriod); secondRangeTableName, beforePeriod, currentPeriod);
// 处理收益 // 处理收益

View File

@ -683,7 +683,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
public void mergeBackMemberBonusIncome(Long pkOrder) { public void mergeBackMemberBonusIncome(Long pkOrder) {
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_RANGE_INCOME.getValue()); baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_RANGE_INCOME.getValue());
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_SAME_LEVEL_INCOME.getValue()); baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_SAME_LEVEL_INCOME.getValue());
// baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_AREA_INCOME.getValue()); baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_AREA_INCOME.getValue());
} }
@Override @Override

View File

@ -56,21 +56,22 @@
<insert id="batchInsertCuMemberBonusDetail"> <insert id="batchInsertCuMemberBonusDetail">
insert ALL insert ALL
<foreach item="item" index="index" collection="cuMemberBonusDetailList" separator=" "> <foreach item="item" index="index" collection="cuMemberBonusDetailList" separator=" ">
into cu_member_bonus_detail(pk_bonus,pk_order,pk_bonus_items,income_status, into cu_member_bonus_detail (
pk_bonus, pk_order, pk_bonus_items, income_status,
cal_type, cal_achieve, cal_value, pretax_income, cal_type, cal_achieve, cal_value, pretax_income,
income_tax, real_income, remark, income_tax, real_income, remark,
income_ratio,income_dial_ratio,order_dial_ratio,pk_country,pk_creator) income_ratio, income_dial_ratio, order_dial_ratio,
values pk_country, pk_creator)
( values (
#{item.pkBonus}, nvl(#{item.pkOrder, jdbcType=BIGINT},0), #{item.pkBonusItems}, #{item.incomeStatus}, #{item.pkBonus}, nvl(#{item.pkOrder, jdbcType=BIGINT},0), #{item.pkBonusItems}, #{item.incomeStatus},
#{item.calType}, #{item.calAchieve, jdbcType=NUMERIC}, #{item.calValue, jdbcType=NUMERIC}, #{item.pretaxIncome, jdbcType=NUMERIC}, #{item.calType}, #{item.calAchieve, jdbcType=NUMERIC}, #{item.calValue, jdbcType=NUMERIC}, #{item.pretaxIncome, jdbcType=NUMERIC},
#{item.incomeTax,jdbcType=NUMERIC},#{item.realIncome,jdbcType=NUMERIC}, #{item.incomeTax, jdbcType=NUMERIC}, #{item.realIncome, jdbcType=NUMERIC}, #{item.remark},
#{item.remark},#{item.incomeRatio,jdbcType=NUMERIC},#{item.incomeDialRatio,jdbcType=NUMERIC},#{item.orderDialRatio,jdbcType=NUMERIC}, #{item.incomeRatio, jdbcType=NUMERIC}, #{item.incomeDialRatio, jdbcType=NUMERIC}, #{item.orderDialRatio, jdbcType=NUMERIC},
#{item.pkCountry},#{item.pkCreator} #{item.pkCountry},#{item.pkCreator})
)
</foreach> </foreach>
SELECT 1 FROM dual SELECT 1 FROM dual
</insert> </insert>
<insert id="insertCuMemberBonusDetail"> <insert id="insertCuMemberBonusDetail">
insert into cu_member_bonus_detail(pk_bonus, pk_order, pk_bonus_items, income_status, insert into cu_member_bonus_detail(pk_bonus, pk_order, pk_bonus_items, income_status,
cal_type, cal_achieve, cal_value, pretax_income, cal_type, cal_achieve, cal_value, pretax_income,

View File

@ -74,6 +74,7 @@
and pk_country = #{pkCountry} and pk_country = #{pkCountry}
</if> </if>
</update> </update>
<update id="mergeBackRangeBonusIncome"> <update id="mergeBackRangeBonusIncome">
merge into cu_member_bonus a merge into cu_member_bonus a
using( using(
@ -104,6 +105,7 @@
,a.retail_area_income = a.retail_area_income - b.pretax_income ,a.retail_area_income = a.retail_area_income - b.pretax_income
</if> </if>
</update> </update>
<delete id="deleteCuMemberBonus"> <delete id="deleteCuMemberBonus">
delete delete
from cu_member_bonus from cu_member_bonus

View File

@ -48,7 +48,6 @@
<result column="SETTLE_COUNTRY" property="settleCountry"/> <result column="SETTLE_COUNTRY" property="settleCountry"/>
<result column="PERIOD" property="period"/> <result column="PERIOD" property="period"/>
<result column="OUT_EXCHANGE_RATE" property="outExchangeRate"/> <result column="OUT_EXCHANGE_RATE" property="outExchangeRate"/>
<result column="service_code" property="serviceCode"/> <result column="service_code" property="serviceCode"/>
<result column="pk_vertex" property="pkVertex"/> <result column="pk_vertex" property="pkVertex"/>
<result column="nick_name" property="nickName"/> <result column="nick_name" property="nickName"/>
@ -57,18 +56,20 @@
<insert id="batchInsertCuMemberBonusRange"> <insert id="batchInsertCuMemberBonusRange">
insert ALL insert ALL
<foreach item="item" index="index" collection="cuMemberBonusRangeList" separator=" "> <foreach item="item" index="index" collection="cuMemberBonusRangeList" separator=" ">
into cu_member_bonus_range(pk_bonus,pk_order,pk_order_items,pk_bonus_items,income_status, into cu_member_bonus_range (
cal_type,cal_achieve,cal_value,pk_range,pk_before_range,pretax_income, pk_bonus, pk_order, pk_order_items, pk_bonus_items,
income_status, cal_type, cal_achieve, cal_value,
pk_range, pk_before_range, pretax_income,
income_tax, real_income, remark, income_tax, real_income, remark,
income_ratio,income_dial_ratio,order_dial_ratio,pk_country,pk_creator) income_ratio, income_dial_ratio, order_dial_ratio,
values pk_country, pk_creator)
( values (
#{item.pkBonus},#{item.pkOrder},#{item.pkOrderItems},#{item.pkBonusItems},#{item.incomeStatus}, #{item.pkBonus}, #{item.pkOrder}, #{item.pkOrderItems}, #{item.pkBonusItems},
#{item.calType},#{item.calAchieve},#{item.calValue},#{item.pkRange},#{item.pkBeforeRange}, #{item.incomeStatus}, #{item.calType}, #{item.calAchieve}, #{item.calValue},
#{item.pretaxIncome},#{item.incomeTax},#{item.realIncome}, #{item.pkRange}, #{item.pkBeforeRange}, #{item.pretaxIncome},
#{item.remark},#{item.incomeRatio},#{item.incomeDialRatio},#{item.orderDialRatio}, #{item.incomeTax}, #{item.realIncome}, #{item.remark},
#{item.pkCountry},#{item.pkCreator} #{item.incomeRatio}, #{item.incomeDialRatio}, #{item.orderDialRatio},
) #{item.pkCountry}, #{item.pkCreator})
</foreach> </foreach>
SELECT 1 FROM dual SELECT 1 FROM dual
</insert> </insert>