Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
sangelxiu1 2025-09-23 09:49:25 +08:00
commit b925f2c074
11 changed files with 479 additions and 209 deletions

View File

@ -32,11 +32,17 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
// 明细数据放到对应的会员数据中 // 明细数据放到对应的会员数据中
for (CuMemberRetailDetail cuMemberRetailDetail : tmpList) { for (CuMemberRetailDetail cuMemberRetailDetail : tmpList) {
CuMemberRetailRangeExt cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailDetail.getPkMember()); CuMemberRetailRangeExt cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailDetail.getPkMember());
if (null == cuMemberRetailRangeExt.getOneDetailMap()) {
cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>());
}
if (null == cuMemberRetailRangeExt.getTwoDetailMap()) {
cuMemberRetailRangeExt.setTwoDetailMap(new LinkedHashMap<>());
}
if (null == cuMemberRetailRangeExt.getThreeDetailMap()) {
cuMemberRetailRangeExt.setThreeDetailMap(new LinkedHashMap<>());
}
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
// 阶段一点位列表使用有序map为了后续业务处理方便 // 阶段一点位列表使用有序map为了后续业务处理方便
if (null == cuMemberRetailRangeExt.getOneDetailMap()) {
cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>());
}
cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
} }
} }

View File

@ -0,0 +1,41 @@
package com.hzs.bonus.bonus.dto;
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* 阶段奖金数据
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class BonusStageData {
/**
* 阶段奖金
*/
private BigDecimal bonusIncome;
/**
* 奖金获取会员
*/
private Long targetPkMember;
/**
* 奖金达标子点位
*/
private Integer targetChildNode;
/**
* 第几阶段
*/
private Integer stage;
/**
* 第几个点位
*/
private Integer stageNum;
}

View File

@ -1,15 +1,15 @@
package com.hzs.bonus.bonus.service; package com.hzs.bonus.bonus.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.bonus.bonus.dto.BonusStageData;
import com.hzs.common.core.enums.EBonusStage;
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail; import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt; import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.bonus.CuMemberBonus; import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.bonus.CuMemberBonusStage; import com.hzs.common.domain.member.bonus.CuMemberBonusStage;
import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.common.domain.sale.ext.SaOrderExt;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Set;
/** /**
* 会员奖金-阶段收益明细表 服务类 * 会员奖金-阶段收益明细表 服务类
@ -40,29 +40,57 @@ public interface ICuMemberBonusStageService extends IService<CuMemberBonusStage>
/** /**
* 填充指定点位 * 填充指定点位
*/ */
void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point, boolean fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point,
Long pkMember, Integer childNode); CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList);
/** /**
* 处理新点位是推荐第一层 * 处理新点位是推荐第一层
*/ */
void handlePointFirst(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, void handlePointFirst(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode); String rangeTableName, String rangeDetailTableName, String newNode,
Date settleDate, EBonusStage eBonusStage, List<BonusStageData> bonusStageDataList);
/** /**
* 处理新点位是推荐第二层 * 处理新点位是推荐第二层
*/ */
void handlePointSecond(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, void handlePointSecond(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode); String rangeTableName, String rangeDetailTableName, String newNode,
Date settleDate, EBonusStage eBonusStage, List<BonusStageData> bonusStageDataList);
/** /**
* 处理新点位是推荐第三层 * 处理新点位是推荐第三层
*/ */
void handlePointThird(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, void handlePointThird(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode); String rangeTableName, String rangeDetailTableName, String newNode,
Date settleDate, EBonusStage eBonusStage, List<BonusStageData> bonusStageDataList);
/**
* 处理填充第一层
*/
boolean firstLevelhandle(LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList, CuMemberRetailDetail newRetailDetail,
String rangeTableName, String rangeDetailTableName,
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList);
/**
* 处理填充第二层
*/
boolean secondLevelhandle(LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList, CuMemberRetailDetail newRetailDetail,
String rangeTableName, String rangeDetailTableName,
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList);
/**
* 处理填充第三层
*/
boolean thirdLevelhandle(LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList, CuMemberRetailDetail newRetailDetail,
String rangeTableName, String rangeDetailTableName,
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList);
} }

View File

@ -1,6 +1,5 @@
package com.hzs.bonus.bonus.service.impl; package com.hzs.bonus.bonus.service.impl;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.achieve.service.ICuMemberTreeService; import com.hzs.bonus.achieve.service.ICuMemberTreeService;
import com.hzs.common.core.constant.BonusFieldConstants; import com.hzs.common.core.constant.BonusFieldConstants;
import com.hzs.common.core.constant.MagicNumberConstants; import com.hzs.common.core.constant.MagicNumberConstants;
@ -143,7 +142,7 @@ public abstract class BonusSettleHandle {
cuMemberBonusRange.setRemark(remark); cuMemberBonusRange.setRemark(remark);
} }
protected CuMemberBonus getCuMemberBonus(Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, public CuMemberBonus getCuMemberBonus(Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
Long pkMember, Integer incomeStatus, Integer pkCountry, Integer pkRate) { Long pkMember, Integer incomeStatus, Integer pkCountry, Integer pkRate) {
if (cuMemberBonusMap.containsKey(pkMember)) { if (cuMemberBonusMap.containsKey(pkMember)) {
return cuMemberBonusMap.get(pkMember); return cuMemberBonusMap.get(pkMember);

View File

@ -1,14 +1,12 @@
package com.hzs.bonus.bonus.service.impl; package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService; import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService; import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.bonus.base.service.ICuMemberService; import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.dto.BonusStageData;
import com.hzs.bonus.bonus.service.ICuMemberBonusStageService; import com.hzs.bonus.bonus.service.ICuMemberBonusStageService;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO; import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
import com.hzs.bonus.constant.BonusConstants;
import com.hzs.bonus.detail.service.ICuMemberAwardsService; import com.hzs.bonus.detail.service.ICuMemberAwardsService;
import com.hzs.bonus.order.service.IBonusOrderService; import com.hzs.bonus.order.service.IBonusOrderService;
import com.hzs.common.core.constant.MagicNumberConstants; import com.hzs.common.core.constant.MagicNumberConstants;
@ -31,7 +29,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
@ -328,29 +325,33 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>(); List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
for (SaOrderExt saOrderExt : orderList) { for (SaOrderExt saOrderExt : orderList) {
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()) { if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
// 精品专区 || EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
// 精品专区甄选专区
// 直推收益 -- 来源订单金额直推拿金额的10% // 直推收益 -- 来源订单金额直推拿金额的10%
this.calculateDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt, this.calculateDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
bonusConfigDTO, period, cuMemberBonusMap); bonusConfigDTO, period, cuMemberBonusMap);
// TODO 阶段收益 -- 来源订单金额 // TODO 阶段收益 -- 来源订单金额
this.calculateStageIncome(cuMemberBonusStageList, memberRangeExtMap, saOrderExt, this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
settleStartDate, rangeTableName, rangeDetailTableName); memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE);
// TODO 领导级差收益 -- 来源PV // TODO 领导级差收益 -- 来源PV
// TODO 领导平差收益 -- 来源PV // TODO 领导平差收益 -- 来源PV
} else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) { } else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 商城专区 // 商城专区
// TODO 见点收益 -- 来源订单业绩血缘上20代每代拿业绩的10% // 见点收益 -- 来源订单业绩血缘上20代每代拿业绩的10%
this.calculateRepurDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt, this.calculateRepurDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
bonusConfigDTO, period, cuMemberBonusMap); bonusConfigDTO, period, cuMemberBonusMap);
// TODO 阶段收益 -- 来源订单业绩 // TODO 阶段收益 -- 来源订单业绩
} }
} }
// TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理
if (cuMemberBonusPushList.size() > 0) { if (cuMemberBonusPushList.size() > 0) {
bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList); bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
} }
@ -371,7 +372,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
} }
// 更新日结数据 // 更新日结数据
iCuMemberRetailRangeService.updateCuMemberRetailRange(rangeTableName, memberRangeExtMap); iCuMemberRetailRangeService.updateCuMemberRetailRange(rangeTableName, memberRangeExtMap);
CuMemberRetailRangeExt tt = memberRangeExtMap.get(20363L);
// 更新日结明细数据 // 更新日结明细数据
iCuMemberRetailRangeService.updateCuMemberRetailDetail(rangeDetailTableName, memberRangeExtMap); iCuMemberRetailRangeService.updateCuMemberRetailDetail(rangeDetailTableName, memberRangeExtMap);
} }
@ -932,8 +932,10 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
/** /**
* 计算阶段收益 -- 精品专区 * 计算阶段收益 -- 精品专区
*/ */
private void calculateStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt, private void calculateStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
Date settleDate, String rangeTableName, String rangeDetailTableName) { BonusConfigDTO bonusConfigDTO, Integer period,
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage) {
// 订单金额除50取整为新増点位数量 // 订单金额除50取整为新増点位数量
int newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue(); int newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
if (newPointInt == 0) { if (newPointInt == 0) {
@ -951,8 +953,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
} }
// 当前会员子点位总数 // 当前会员子点位总数
int pointCount = sourceMember.getPointCount(); int pointCount = sourceMember.getPointCount();
newPointInt:
for (int i = 1; i <= newPointInt; i++) { for (int i = 1; i <= newPointInt; i++) {
// 订单会员生成的新点位 // 订单会员生成的新点位
CuMemberRetailDetail newRetailDetail = CuMemberRetailDetail.builder() CuMemberRetailDetail newRetailDetail = CuMemberRetailDetail.builder()
@ -968,6 +968,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
.build(); .build();
detailList.put(newRetailDetail.getChildNode(), newRetailDetail); detailList.put(newRetailDetail.getChildNode(), newRetailDetail);
// 阶段奖金处理列表
List<BonusStageData> bonusStageDataList = new ArrayList<>();
// 推荐人 // 推荐人
Long pkParent = sourceMember.getPkParent(); Long pkParent = sourceMember.getPkParent();
while (true) { while (true) {
@ -984,143 +986,58 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 推荐人没有未完成点位继续往上找 // 推荐人没有未完成点位继续往上找
continue; continue;
} }
for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
// 第一层填充 // 推荐人第一层点位处理
CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue(); boolean forBool = iCuMemberBonusStageService.firstLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
// 遍历推荐人点位使用第一个未完成的点位进行填充 memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) { if (forBool) {
if (null == parentRetailDetail.getPointMember11()) { // 在第一层找到并填充点位就开始下一个点位的处理
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_11, break;
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第一层
iCuMemberBonusStageService.handlePointFirst(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_11);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember12()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_12,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第一层
iCuMemberBonusStageService.handlePointFirst(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_12);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
}
}
} }
for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
// 第二层填充 // 推荐人第二层点位处理
CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue(); forBool = iCuMemberBonusStageService.secondLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
// 遍历推荐人点位使用第一个未完成的点位进行填充 memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) { if (forBool) {
if (null == parentRetailDetail.getPointMember21()) { // 在第二层找到并填充点位就开始下一个点位的处理
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_21, break;
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第二层
iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_21);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember22()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_22,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第二层
iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_22);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember23()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_23,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第二层
iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_23);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember24()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_24,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第二层
iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_24);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
}
}
} }
for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
// 第三层填充 // 推荐人第三层点位处理
CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue(); forBool = iCuMemberBonusStageService.thirdLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
// 遍历推荐人点位使用第一个未完成的点位进行填充 memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) { if (forBool) {
if (null == parentRetailDetail.getPointMember31()) { // 在第三层找到并填充点位就开始下一个点位的处理
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_31, break;
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_31);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember32()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_32,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_32);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember33()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_33,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_33);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember34()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_34,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_34);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember35()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_35,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_35);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember36()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_36,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_36);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember37()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_37,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_37);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
} else if (null == parentRetailDetail.getPointMember38()) {
iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_38,
newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_38);
// 当前新子点位填充完成进入下一个新子点位
continue newPointInt;
}
}
} }
} }
if (CollectionUtil.isNotEmpty(bonusStageDataList)) {
// 有需要生成奖金的数据
for (BonusStageData bonusStageData : bonusStageDataList) {
CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(bonusStageData.getTargetPkMember());
// 会员奖金数据
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMember.getPkMember(), targetMember.getIncomeStatus(),
targetMember.getPkSettleCountry(), targetMember.getPkRate() == null ? saOrderExt.getPkRate() : targetMember.getPkRate());
// 阶段奖金
int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMember.getPkSettleCountry(), EBonusItems.STAGE_INCOME.getValue());
// 阶段收益明细
CuMemberBonusStage cuMemberBonusStage = iCuMemberBonusStageService.getCuMemberBonusStage(saOrderExt, targetMember, cuMemberBonus, pkBonusItem);
cuMemberBonusStage.setPretaxIncome(bonusStageData.getBonusIncome());
cuMemberBonusStage.setChildNode(bonusStageData.getTargetChildNode());
cuMemberBonusStage.setStage(bonusStageData.getStage());
cuMemberBonusStage.setStageNum(bonusStageData.getStageNum());
stageIncomeRemark(saOrderExt, cuMemberBonusStage, sourceMember, targetMember);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusStage, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusStage.getIncomeStatus()) {
cuMemberBonus.setStoreIncome(ComputeUtil.computeAdd(cuMemberBonus.getStoreIncome(), cuMemberBonusStage.getPretaxIncome()));
setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusStage);
}
cuMemberBonusStageList.add(cuMemberBonusStage);
}
}
} }
} }

View File

@ -6,13 +6,13 @@ import cn.hutool.core.util.ReflectUtil;
import com.hzs.bonus.achieve.mapper.CuMemberRetailRangeMapper; import com.hzs.bonus.achieve.mapper.CuMemberRetailRangeMapper;
import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService; import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService;
import com.hzs.bonus.achieve.service.impl.CuMemberBonusSettle; import com.hzs.bonus.achieve.service.impl.CuMemberBonusSettle;
import com.hzs.bonus.bonus.dto.BonusStageData;
import com.hzs.bonus.bonus.mapper.CuMemberBonusStageMapper; import com.hzs.bonus.bonus.mapper.CuMemberBonusStageMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.bonus.service.ICuMemberBonusStageService; import com.hzs.bonus.bonus.service.ICuMemberBonusStageService;
import com.hzs.bonus.constant.BonusConstants; import com.hzs.bonus.constant.BonusConstants;
import com.hzs.common.core.constant.MagicNumberConstants; import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.enums.EBonusStage; import com.hzs.common.core.enums.*;
import com.hzs.common.core.enums.ECalType;
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail; import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt; import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.bonus.CuMemberBonus; import com.hzs.common.domain.member.bonus.CuMemberBonus;
@ -109,7 +109,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
* 向上填充子点位 * 向上填充子点位
*/ */
private void fillUpTargetRetailDetail(CuMemberRetailDetail targetRetailDetail, CuMemberRetailDetail newParentRetailDetail, private void fillUpTargetRetailDetail(CuMemberRetailDetail targetRetailDetail, CuMemberRetailDetail newParentRetailDetail,
CuMemberRetailDetail newRetailDetail, String node) { CuMemberRetailDetail newRetailDetail, String node, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList) {
if (null == targetRetailDetail) { if (null == targetRetailDetail) {
return; return;
} }
@ -122,60 +123,80 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
switch (suffix) { switch (suffix) {
case BonusConstants.POINT_11: case BonusConstants.POINT_11:
if (BonusConstants.POINT_11.equals(node)) { if (BonusConstants.POINT_11.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_21, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_21,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_12.equals(node)) { } else if (BonusConstants.POINT_12.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_22, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_22,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_21.equals(node)) { } else if (BonusConstants.POINT_21.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_31, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_31,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_22.equals(node)) { } else if (BonusConstants.POINT_22.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_32, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_32,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_23.equals(node)) { } else if (BonusConstants.POINT_23.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_33, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_33,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_24.equals(node)) { } else if (BonusConstants.POINT_24.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_34, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_34,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} }
break; break;
case BonusConstants.POINT_12: case BonusConstants.POINT_12:
if (BonusConstants.POINT_11.equals(node)) { if (BonusConstants.POINT_11.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_23, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_23,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_12.equals(node)) { } else if (BonusConstants.POINT_12.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_24, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_24,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_21.equals(node)) { } else if (BonusConstants.POINT_21.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_35, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_35,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_22.equals(node)) { } else if (BonusConstants.POINT_22.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_36, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_36,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_23.equals(node)) { } else if (BonusConstants.POINT_23.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_37, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_37,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_24.equals(node)) { } else if (BonusConstants.POINT_24.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_38, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_38,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} }
break; break;
case BonusConstants.POINT_21: case BonusConstants.POINT_21:
if (BonusConstants.POINT_11.equals(node)) { if (BonusConstants.POINT_11.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_31, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_31,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_12.equals(node)) { } else if (BonusConstants.POINT_12.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_32, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_32,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} }
break; break;
case BonusConstants.POINT_22: case BonusConstants.POINT_22:
if (BonusConstants.POINT_11.equals(node)) { if (BonusConstants.POINT_11.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_33, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_33,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_12.equals(node)) { } else if (BonusConstants.POINT_12.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_34, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_34,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} }
break; break;
case BonusConstants.POINT_23: case BonusConstants.POINT_23:
if (BonusConstants.POINT_11.equals(node)) { if (BonusConstants.POINT_11.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_35, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_35,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_12.equals(node)) { } else if (BonusConstants.POINT_12.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_36, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_36,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} }
break; break;
case BonusConstants.POINT_24: case BonusConstants.POINT_24:
if (BonusConstants.POINT_11.equals(node)) { if (BonusConstants.POINT_11.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_37, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_37,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_12.equals(node)) { } else if (BonusConstants.POINT_12.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_38, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_38,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} }
break; break;
} }
@ -188,7 +209,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
* 向下填充子点位 * 向下填充子点位
*/ */
private void fillDownTargetRetailDetail(CuMemberRetailDetail targetRetailDetail, CuMemberRetailDetail newRetailDetail, private void fillDownTargetRetailDetail(CuMemberRetailDetail targetRetailDetail, CuMemberRetailDetail newRetailDetail,
String node, Integer level) { String node, Integer level, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList) {
if (null == targetRetailDetail) { if (null == targetRetailDetail) {
return; return;
} }
@ -199,28 +221,34 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|| BonusConstants.POINT_33.equals(node) || BonusConstants.POINT_33.equals(node)
|| BonusConstants.POINT_35.equals(node) || BonusConstants.POINT_35.equals(node)
|| BonusConstants.POINT_37.equals(node)) { || BonusConstants.POINT_37.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_11, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_11,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_22.equals(node) } else if (BonusConstants.POINT_22.equals(node)
|| BonusConstants.POINT_24.equals(node) || BonusConstants.POINT_24.equals(node)
|| BonusConstants.POINT_32.equals(node) || BonusConstants.POINT_32.equals(node)
|| BonusConstants.POINT_34.equals(node) || BonusConstants.POINT_34.equals(node)
|| BonusConstants.POINT_36.equals(node) || BonusConstants.POINT_36.equals(node)
|| BonusConstants.POINT_38.equals(node)) { || BonusConstants.POINT_38.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_12, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_12,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} }
} else if (level.equals(2)) { } else if (level.equals(2)) {
if (BonusConstants.POINT_31.equals(node) if (BonusConstants.POINT_31.equals(node)
|| BonusConstants.POINT_35.equals(node)) { || BonusConstants.POINT_35.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_21, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_21,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_32.equals(node) } else if (BonusConstants.POINT_32.equals(node)
|| BonusConstants.POINT_36.equals(node)) { || BonusConstants.POINT_36.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_22, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_22,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_33.equals(node) } else if (BonusConstants.POINT_33.equals(node)
|| BonusConstants.POINT_37.equals(node)) { || BonusConstants.POINT_37.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_23, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_23,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} else if (BonusConstants.POINT_34.equals(node) } else if (BonusConstants.POINT_34.equals(node)
|| BonusConstants.POINT_38.equals(node)) { || BonusConstants.POINT_38.equals(node)) {
this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_24, newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_24,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
} }
} }
} }
@ -229,17 +257,67 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
* 填充点位 * 填充点位
*/ */
@Override @Override
public void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point, public boolean fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point,
Long pkMember, Integer childNode) { CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage,
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + point, pkMember); List<BonusStageData> bonusStageDataList) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + point, childNode); ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + point, sourceRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + point, sourceRetailDetail.getChildNode());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.UPDATE_FLAG, 0); ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.UPDATE_FLAG, 0);
switch (point) {
case BonusConstants.POINT_31:
case BonusConstants.POINT_32:
case BonusConstants.POINT_33:
case BonusConstants.POINT_34:
case BonusConstants.POINT_35:
case BonusConstants.POINT_36:
case BonusConstants.POINT_37:
case BonusConstants.POINT_38:
// 如果填充的点位是第三层理论上有可能已经全部填满需要判断是否已经完成
boolean isFinish = true;
for (String suffix : BonusConstants.FIELD_LIST) {
if (null == ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix)) {
isFinish = false;
break;
}
}
if (isFinish) {
targetRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue());
targetRetailDetail.setStageDate(settleDate);
// TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
// 一阶段全满发放阶段奖
// 返回奖金收益处理数据
bonusStageDataList.add(BonusStageData.builder()
.bonusIncome(BonusConstants.ONE_BONUS)
.targetPkMember(targetRetailDetail.getPkMember())
.targetChildNode(targetRetailDetail.getChildNode())
.stage(eBonusStage.getValue())
.stageNum(14)
.build());
} else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
// 二阶段全满发放阶段奖
// 返回奖金收益处理数据
bonusStageDataList.add(BonusStageData.builder()
.bonusIncome(BonusConstants.TWO_BONUS)
.targetPkMember(targetRetailDetail.getPkMember())
.targetChildNode(targetRetailDetail.getChildNode())
.stage(eBonusStage.getValue())
.stageNum(14)
.build());
}
return true;
}
break;
}
return false;
} }
@Override @Override
public void handlePointFirst(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, public void handlePointFirst(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode) { String rangeTableName, String rangeDetailTableName, String newNode,
Date settleDate, EBonusStage eBonusStage, List<BonusStageData> bonusStageDataList) {
// 新点位的上第一层 // 新点位的上第一层
newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember()); newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember());
newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode()); newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode());
@ -273,7 +351,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
if (null != memberDetail) { if (null != memberDetail) {
newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPointMemberFirst()); newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPointMemberFirst());
newRetailDetail.setPointSecond(newParentRetailDetail.getPointFirst()); newRetailDetail.setPointSecond(newParentRetailDetail.getPointFirst());
this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode); this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode, settleDate, eBonusStage,
bonusStageDataList);
} }
} }
@ -284,7 +363,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
if (null != memberDetail) { if (null != memberDetail) {
newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberSecond()); newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberSecond());
newRetailDetail.setPointThird(newParentRetailDetail.getPointSecond()); newRetailDetail.setPointThird(newParentRetailDetail.getPointSecond());
this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode); this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode, settleDate, eBonusStage,
bonusStageDataList);
} }
} }
} }
@ -292,7 +372,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
@Override @Override
public void handlePointSecond(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, public void handlePointSecond(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode) { String rangeTableName, String rangeDetailTableName, String newNode,
Date settleDate, EBonusStage eBonusStage, List<BonusStageData> bonusStageDataList) {
// 新点位的上第二层 // 新点位的上第二层
newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember()); newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember());
newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode()); newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode());
@ -341,7 +422,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
if (null != memberDetail) { if (null != memberDetail) {
newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberFirst()); newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberFirst());
newRetailDetail.setPointThird(newParentRetailDetail.getPointFirst()); newRetailDetail.setPointThird(newParentRetailDetail.getPointFirst());
this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode); this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode, settleDate, eBonusStage,
bonusStageDataList);
} }
} }
@ -352,7 +434,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
if (null != memberDetail) { if (null != memberDetail) {
newRetailDetail.setPointMemberFirst(memberDetail.getPkMember()); newRetailDetail.setPointMemberFirst(memberDetail.getPkMember());
newRetailDetail.setPointFirst(memberDetail.getChildNode()); newRetailDetail.setPointFirst(memberDetail.getChildNode());
this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 1); this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 1, settleDate, eBonusStage,
bonusStageDataList);
} }
} }
} }
@ -360,7 +443,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
@Override @Override
public void handlePointThird(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, public void handlePointThird(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode) { String rangeTableName, String rangeDetailTableName, String newNode,
Date settleDate, EBonusStage eBonusStage, List<BonusStageData> bonusStageDataList) {
// 新点位的上第三层 // 新点位的上第三层
newRetailDetail.setPointMemberThird(newParentRetailDetail.getPkMember()); newRetailDetail.setPointMemberThird(newParentRetailDetail.getPkMember());
newRetailDetail.setPointThird(newParentRetailDetail.getChildNode()); newRetailDetail.setPointThird(newParentRetailDetail.getChildNode());
@ -431,7 +515,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
if (null != memberDetail) { if (null != memberDetail) {
newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember()); newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember());
newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode()); newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode());
this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 2); this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 2, settleDate, eBonusStage,
bonusStageDataList);
} }
} }
@ -442,8 +527,185 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
if (null != memberDetail) { if (null != memberDetail) {
newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember()); newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember());
newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode()); newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode());
this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 1); this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 1, settleDate, eBonusStage,
bonusStageDataList);
} }
} }
} }
@Override
public boolean firstLevelhandle(LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList, CuMemberRetailDetail newRetailDetail,
String rangeTableName, String rangeDetailTableName,
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList) {
for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
// 第一层填充
CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue();
// 遍历推荐人点位使用第一个未完成的点位进行填充
if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) {
if (null == parentRetailDetail.getPointMember11()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_11,
newRetailDetail, settleDate, eBonusStage,
bonusStageDataList);
// 新点位是推荐人点位的第一层
this.handlePointFirst(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_11, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember12()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_12,
newRetailDetail, settleDate, eBonusStage,
bonusStageDataList);
// 新点位是推荐人点位的第一层
this.handlePointFirst(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_12, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
}
}
}
return false;
}
@Override
public boolean secondLevelhandle(LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList, CuMemberRetailDetail newRetailDetail,
String rangeTableName, String rangeDetailTableName,
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList) {
for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
// 第二层填充
CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue();
// 遍历推荐人点位使用第一个未完成的点位进行填充
if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) {
if (null == parentRetailDetail.getPointMember21()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_21,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第二层
this.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_21, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember22()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_22,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第二层
this.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_22, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember23()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_23,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第二层
this.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_23, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember24()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_24,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第二层
this.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_24, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
}
}
}
return false;
}
@Override
public boolean thirdLevelhandle(LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList, CuMemberRetailDetail newRetailDetail,
String rangeTableName, String rangeDetailTableName,
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList) {
for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
// 第三层填充
CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue();
// 遍历推荐人点位使用第一个未完成的点位进行填充
if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) {
if (null == parentRetailDetail.getPointMember31()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_31,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第三层
this.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_31, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember32()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_32,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第三层
this.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_32, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember33()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_33,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第三层
this.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_33, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember34()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_34,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第三层
this.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_34, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember35()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_35,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第三层
this.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_35, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember36()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_36,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第三层
this.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_36, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember37()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_37,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第三层
this.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_37, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
} else if (null == parentRetailDetail.getPointMember38()) {
this.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_38,
newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
// 新点位是推荐人点位的第三层
this.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, BonusConstants.POINT_38, settleDate, eBonusStage,
bonusStageDataList);
// 当前新子点位填充完成进入下一个新子点位
return true;
}
}
}
return false;
}
} }

View File

@ -4,6 +4,7 @@ import cn.hutool.core.util.ReflectUtil;
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail; import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -11,6 +12,15 @@ import java.util.Map;
public class BonusConstants { public class BonusConstants {
/**
* 一阶段奖金 -- 满14发35
*/
public static final BigDecimal ONE_BONUS = new BigDecimal("35");
/**
* 二阶段奖金 -- 满14发220
*/
public static final BigDecimal TWO_BONUS = new BigDecimal("220");
public static final String POINT_11 = "11"; public static final String POINT_11 = "11";
public static final String POINT_12 = "12"; public static final String POINT_12 = "12";
public static final String POINT_21 = "21"; public static final String POINT_21 = "21";

View File

@ -26,8 +26,7 @@
values ( values (
#{item.pkBonus}, #{item.pkOrder}, #{item.pkBonusItems}, #{item.incomeStatus}, #{item.pkBonus}, #{item.pkOrder}, #{item.pkBonusItems}, #{item.incomeStatus},
#{item.calType}, #{item.calAchieve}, #{item.calValue}, #{item.calType}, #{item.calAchieve}, #{item.calValue},
#{item.pretaxIncome}, #{item.incomeTax}, #{item.realIncome}, #{item.pretaxIncome}, #{item.incomeTax}, #{item.realIncome}, #{item.remark},
#{item.round}, #{item.second}, #{item.remark},
#{item.incomeRatio}, #{item.incomeDialRatio}, #{item.orderDialRatio}, #{item.incomeRatio}, #{item.incomeDialRatio}, #{item.orderDialRatio},
#{item.pkCreator}, #{item.childNode}, #{item.stage}, #{item.stageNum}) #{item.pkCreator}, #{item.childNode}, #{item.stage}, #{item.stageNum})
</foreach> </foreach>

View File

@ -229,7 +229,7 @@ public class MemberStructureController extends BaseController {
log.info("日结表名称{}",settleTableName); log.info("日结表名称{}",settleTableName);
// 校验当前日结表是否存在 // 校验当前日结表是否存在
Integer isFind = iCumemberRetailDetail.getFindCumemberRetailDetail(settleTableName); Integer isFind = iCumemberRetailDetail.getFindCumemberRetailDetail(settleTableName);
if (isFind != 1) { if (isFind == null || isFind != 1) {
log.error("当前表名不存在{}",settleTableName); log.error("当前表名不存在{}",settleTableName);
return AjaxResult.error("当前日结信息表不存在",settleTableName); return AjaxResult.error("当前日结信息表不存在",settleTableName);
} }
@ -261,7 +261,7 @@ public class MemberStructureController extends BaseController {
log.info("日结表名称{}",settleTableName); log.info("日结表名称{}",settleTableName);
// 校验当前日结表是否存在 // 校验当前日结表是否存在
Integer isFind = iCumemberRetailDetail.getFindCumemberRetailDetail(settleTableName); Integer isFind = iCumemberRetailDetail.getFindCumemberRetailDetail(settleTableName);
if (isFind != 1) { if (isFind == null || isFind != 1) {
log.error("当前表名不存在{}",settleTableName); log.error("当前表名不存在{}",settleTableName);
return AjaxResult.error("当前日结信息表不存在",settleTableName); return AjaxResult.error("当前日结信息表不存在",settleTableName);
} }

View File

@ -130,8 +130,16 @@ public class CuMemberRetailRangeExt extends CuMemberRetailRange {
// 秒结 end // 秒结 end
/** /**
* 阶段点位列表 * 阶段点位列表
*/ */
private LinkedHashMap<Integer, CuMemberRetailDetail> oneDetailMap; private LinkedHashMap<Integer, CuMemberRetailDetail> oneDetailMap;
/**
* 二阶段点位列表
*/
private LinkedHashMap<Integer, CuMemberRetailDetail> twoDetailMap;
/**
* 三阶段点位列表
*/
private LinkedHashMap<Integer, CuMemberRetailDetail> threeDetailMap;
} }

View File

@ -188,7 +188,7 @@ public class CuMemberBonus extends BaseEntity {
private BigDecimal carAwardPoints; private BigDecimal carAwardPoints;
/** /**
* 注册阶段收益-众康 * 阶段收益-众康
*/ */
@TableField("STORE_INCOME") @TableField("STORE_INCOME")
private BigDecimal storeIncome; private BigDecimal storeIncome;