Compare commits
	
		
			2 Commits
		
	
	
		
			edb598878e
			...
			86b7208d3d
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						86b7208d3d | |
| 
							
							
								
								 | 
						bacbb61168 | 
| 
						 | 
				
			
			@ -16,7 +16,8 @@ public interface ICuMemberRetailDetailService extends IService<CuMemberRetailDet
 | 
			
		|||
    /**
 | 
			
		||||
     * 根据结算会员获取对应的点位数据
 | 
			
		||||
     */
 | 
			
		||||
    void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, EBonusStage eBonusStage);
 | 
			
		||||
    void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
 | 
			
		||||
                                EBonusStage eBonusStage, List<Long> stageMemberList);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 指定会员获取对应的点位数据
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,8 +23,14 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
 | 
			
		|||
    private CuMemberBonusSettle cuMemberBonusSettle;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, EBonusStage eBonusStage) {
 | 
			
		||||
        List<List<?>> pkMemberList = cuMemberBonusSettle.handleCutList(memberRangeExtMap.keySet(), MagicNumberConstants.BATCH_QUERY_NUM);
 | 
			
		||||
    public void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
 | 
			
		||||
                                       EBonusStage eBonusStage, List<Long> stageMemberList) {
 | 
			
		||||
        List<List<?>> pkMemberList;
 | 
			
		||||
        if (CollectionUtil.isNotEmpty(stageMemberList)) {
 | 
			
		||||
            pkMemberList = cuMemberBonusSettle.handleCutList(stageMemberList, MagicNumberConstants.BATCH_QUERY_NUM);
 | 
			
		||||
        } else {
 | 
			
		||||
            pkMemberList = cuMemberBonusSettle.handleCutList(memberRangeExtMap.keySet(), MagicNumberConstants.BATCH_QUERY_NUM);
 | 
			
		||||
        }
 | 
			
		||||
        pkMemberList.forEach(tmpIdList -> {
 | 
			
		||||
            // 查询明细数据(指定阶段,未完成的)
 | 
			
		||||
            List<CuMemberRetailDetail> tmpList = baseMapper.listMemberRetailDetail(retailDetailTableName, tmpIdList, eBonusStage.getValue());
 | 
			
		||||
| 
						 | 
				
			
			@ -41,9 +47,16 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
 | 
			
		|||
                    if (null == cuMemberRetailRangeExt.getThreeDetailMap()) {
 | 
			
		||||
                        cuMemberRetailRangeExt.setThreeDetailMap(new LinkedHashMap<>());
 | 
			
		||||
                    }
 | 
			
		||||
                    // 使用有序map,为了后续业务处理方便
 | 
			
		||||
                    if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                        // 阶段一点位列表(使用有序map,为了后续业务处理方便)
 | 
			
		||||
                        // 阶段一点位列表
 | 
			
		||||
                        cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
 | 
			
		||||
                    } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                        // 阶段二点位列表
 | 
			
		||||
                        cuMemberRetailRangeExt.getTwoDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
 | 
			
		||||
                    } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                        // 阶段三点位列表
 | 
			
		||||
                        cuMemberRetailRangeExt.getThreeDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -59,12 +72,26 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
 | 
			
		|||
            // 明细数据放到对应的会员数据中
 | 
			
		||||
            for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailList) {
 | 
			
		||||
                CuMemberRetailRangeExt cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailDetail.getPkMember());
 | 
			
		||||
                // 阶段一点位列表(使用有序map,为了后续业务处理方便)
 | 
			
		||||
                if (null == cuMemberRetailRangeExt.getOneDetailMap()) {
 | 
			
		||||
                    cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>());
 | 
			
		||||
                }
 | 
			
		||||
                if (null == cuMemberRetailRangeExt.getTwoDetailMap()) {
 | 
			
		||||
                    cuMemberRetailRangeExt.setTwoDetailMap(new LinkedHashMap<>());
 | 
			
		||||
                }
 | 
			
		||||
                if (null == cuMemberRetailRangeExt.getThreeDetailMap()) {
 | 
			
		||||
                    cuMemberRetailRangeExt.setThreeDetailMap(new LinkedHashMap<>());
 | 
			
		||||
                }
 | 
			
		||||
                // 使用有序map,为了后续业务处理方便
 | 
			
		||||
                if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                    // 阶段一点位列表(使用有序map,为了后续业务处理方便)
 | 
			
		||||
                    if (null == cuMemberRetailRangeExt.getOneDetailMap()) {
 | 
			
		||||
                        cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>());
 | 
			
		||||
                    }
 | 
			
		||||
                    // 阶段一点位列表
 | 
			
		||||
                    cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
 | 
			
		||||
                } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                    // 阶段二点位列表
 | 
			
		||||
                    cuMemberRetailRangeExt.getTwoDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
 | 
			
		||||
                } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                    // 阶段三点位列表
 | 
			
		||||
                    cuMemberRetailRangeExt.getThreeDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,6 +106,24 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (null != value.getTwoDetailMap() && value.getTwoDetailMap().size() > 0) {
 | 
			
		||||
                Collection<CuMemberRetailDetail> tmpDetailColl = value.getTwoDetailMap().values();
 | 
			
		||||
                for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailColl) {
 | 
			
		||||
                    // 只有需要更新的才进行入库操作
 | 
			
		||||
                    if (null != cuMemberRetailDetail.getUpdateBool()) {
 | 
			
		||||
                        retailDetailColl.add(cuMemberRetailDetail);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (null != value.getThreeDetailMap() && value.getThreeDetailMap().size() > 0) {
 | 
			
		||||
                Collection<CuMemberRetailDetail> tmpDetailColl = value.getThreeDetailMap().values();
 | 
			
		||||
                for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailColl) {
 | 
			
		||||
                    // 只有需要更新的才进行入库操作
 | 
			
		||||
                    if (null != cuMemberRetailDetail.getUpdateBool()) {
 | 
			
		||||
                        retailDetailColl.add(cuMemberRetailDetail);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        List<List<?>> list = cuMemberBonusSettle.handleCutList(retailDetailColl);
 | 
			
		||||
        list.forEach(tmpList -> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
 | 
			
		|||
import java.math.BigDecimal;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 阶段奖金数据
 | 
			
		||||
 * 阶段数据
 | 
			
		||||
 */
 | 
			
		||||
@Builder
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
| 
						 | 
				
			
			@ -38,4 +38,13 @@ public class BonusStageData {
 | 
			
		|||
     */
 | 
			
		||||
    private Integer stageNum;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 二阶段点位
 | 
			
		||||
     */
 | 
			
		||||
    private CuMemberRetailDetail twoRetailDetail;
 | 
			
		||||
    /**
 | 
			
		||||
     * 三阶段点位
 | 
			
		||||
     */
 | 
			
		||||
    private CuMemberRetailDetail threeRetailDetail;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,10 +83,18 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
     */
 | 
			
		||||
    protected void stageIncomeRemark(SaOrderExt saOrderExt, CuMemberBonusStage cuMemberBonusStage,
 | 
			
		||||
                                      CuMemberRetailRangeExt sourceMember, CuMemberRetailRangeExt targetMember) {
 | 
			
		||||
        String remark = String.format(BonusMsgConstants.STAGE_INCOME, saOrderExt.getOrderCode(),
 | 
			
		||||
                sourceMember.getMemberCode() + sourceMember.getMemberName(),
 | 
			
		||||
                targetMember.getMemberCode() + targetMember.getMemberName(),
 | 
			
		||||
                cuMemberBonusStage.getChildNode(), cuMemberBonusStage.getStage());
 | 
			
		||||
        String remark;
 | 
			
		||||
        if (null != saOrderExt) {
 | 
			
		||||
            remark = String.format(BonusMsgConstants.STAGE_INCOME, saOrderExt.getOrderCode(),
 | 
			
		||||
                    sourceMember.getMemberCode() + sourceMember.getMemberName(),
 | 
			
		||||
                    targetMember.getMemberCode() + targetMember.getMemberName(),
 | 
			
		||||
                    cuMemberBonusStage.getChildNode(), cuMemberBonusStage.getStage());
 | 
			
		||||
        } else {
 | 
			
		||||
            remark = String.format(BonusMsgConstants.STAGE_INCOME_OTHER,
 | 
			
		||||
                    sourceMember.getMemberCode() + sourceMember.getMemberName(),
 | 
			
		||||
                    targetMember.getMemberCode() + targetMember.getMemberName(),
 | 
			
		||||
                    cuMemberBonusStage.getChildNode(), cuMemberBonusStage.getStage());
 | 
			
		||||
        }
 | 
			
		||||
        cuMemberBonusStage.setRemark(remark);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +256,9 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
        ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.INCOME_TAX, incomeTax);
 | 
			
		||||
        ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.REAL_INCOME, realIncome);
 | 
			
		||||
        // 收益占比
 | 
			
		||||
        ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.INCOME_RATIO, ComputeUtil.computeDivide(realIncome, ComputeUtil.computeDivide(orderAmount, exchangeRate)));
 | 
			
		||||
        if  (null != orderAmount && null != exchangeRate) {
 | 
			
		||||
            ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.INCOME_RATIO, ComputeUtil.computeDivide(realIncome, ComputeUtil.computeDivide(orderAmount, exchangeRate)));
 | 
			
		||||
        }
 | 
			
		||||
        return bdBonusDeduct;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -275,7 +275,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
        Date settleEndDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleStartDate);
 | 
			
		||||
 | 
			
		||||
        // 新零售订单(注册、复购)
 | 
			
		||||
        List<SaOrderExt> orderList = iBonusOrderService.listRetailSaOrder(settleStartDate, settleEndDate, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue()));
 | 
			
		||||
        List<SaOrderExt> orderList = iBonusOrderService.listRetailSaOrder(settleStartDate, settleEndDate, null,
 | 
			
		||||
                Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue()));
 | 
			
		||||
 | 
			
		||||
        // 更新当月会员, 将昨天业绩更到到今天,更新当月会员考核结果,有消费的考核通过
 | 
			
		||||
        // 结算期间表
 | 
			
		||||
| 
						 | 
				
			
			@ -294,6 +295,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
        // 初始化结算明细数据(昨天数据更新到今天数据)
 | 
			
		||||
        iCuMemberRetailRangeService.mergeMemberRetailRangeDetailByYesterday(rangeDetailTableName, yesterdayRangeDetailTableName);
 | 
			
		||||
 | 
			
		||||
        // 升阶段点位列表
 | 
			
		||||
        List<CuMemberRetailDetail> stageList = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        if (orderList.size() > 0) {
 | 
			
		||||
            // 按照血缘,查询该会员所有伞上会员
 | 
			
		||||
            List<CuMemberRetailRangeExt> memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeParent(rangeTableName, orderList);
 | 
			
		||||
| 
						 | 
				
			
			@ -306,7 +310,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // 查询血缘会员明细数据(一阶段)
 | 
			
		||||
            iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.ONE);
 | 
			
		||||
            iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.ONE, null);
 | 
			
		||||
 | 
			
		||||
            // 奖衔
 | 
			
		||||
            Map<Integer, BdAwards> retailAwardsMap = new HashMap<>();
 | 
			
		||||
| 
						 | 
				
			
			@ -331,11 +335,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
                    // 直推收益 -- 来源订单金额,直推拿金额的10%
 | 
			
		||||
                    this.calculateDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
 | 
			
		||||
                            bonusConfigDTO, period, cuMemberBonusMap);
 | 
			
		||||
 | 
			
		||||
                    // TODO 阶段收益 -- 来源订单金额
 | 
			
		||||
                    this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
 | 
			
		||||
                            memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE);
 | 
			
		||||
 | 
			
		||||
                    // 一阶段收益 -- 来源订单金额
 | 
			
		||||
                    stageList.addAll(this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
 | 
			
		||||
                            memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName));
 | 
			
		||||
 | 
			
		||||
                    // TODO 领导级差收益 -- 来源PV
 | 
			
		||||
                    // TODO 领导平差收益 -- 来源PV
 | 
			
		||||
| 
						 | 
				
			
			@ -344,13 +346,32 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
                    // 见点收益 -- 来源订单业绩,血缘上20代,每代拿业绩的10%
 | 
			
		||||
                    this.calculateRepurDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
 | 
			
		||||
                            bonusConfigDTO, period, cuMemberBonusMap);
 | 
			
		||||
                    // TODO 阶段收益 -- 来源订单业绩
 | 
			
		||||
 | 
			
		||||
                    // 一阶段收益 -- 来源订单累计业绩
 | 
			
		||||
                    stageList.addAll(this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
 | 
			
		||||
                            memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName));
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理
 | 
			
		||||
            // TODO 处理升二阶段点位
 | 
			
		||||
            if (CollectionUtil.isNotEmpty(stageList)) {
 | 
			
		||||
                List<Long> stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList());
 | 
			
		||||
                // 查询血缘会员明细数据(二阶段)
 | 
			
		||||
                iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.TWO, stageMemberList);
 | 
			
		||||
                // 二阶段收益
 | 
			
		||||
                stageList = this.calculateStageIncomeTwoThree(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
 | 
			
		||||
                        memberRangeExtMap, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.TWO, stageList);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // TODO 处理升三阶段点位
 | 
			
		||||
            if (CollectionUtil.isNotEmpty(stageList)) {
 | 
			
		||||
                List<Long> stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList());
 | 
			
		||||
                // 查询血缘会员明细数据(三段)
 | 
			
		||||
                iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.THREE, stageMemberList);
 | 
			
		||||
                // 二阶段收益
 | 
			
		||||
                this.calculateStageIncomeTwoThree(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
 | 
			
		||||
                        memberRangeExtMap, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.THREE, stageList);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (cuMemberBonusPushList.size() > 0) {
 | 
			
		||||
                bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
 | 
			
		||||
| 
						 | 
				
			
			@ -930,26 +951,44 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算阶段收益 -- 精品专区
 | 
			
		||||
     * 计算一阶段收益 -- 精品专区、商城专区
 | 
			
		||||
     */
 | 
			
		||||
    private void calculateStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
 | 
			
		||||
                                      BonusConfigDTO bonusConfigDTO, Integer period,
 | 
			
		||||
                                      Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
 | 
			
		||||
                                      Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage) {
 | 
			
		||||
        // 订单金额除50取整,为新増点位数量
 | 
			
		||||
        int newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
 | 
			
		||||
        if (newPointInt == 0) {
 | 
			
		||||
            // 当前精品专区订单不足生成点位
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private List<CuMemberRetailDetail> calculateStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
 | 
			
		||||
                                                            BonusConfigDTO bonusConfigDTO, Integer period,
 | 
			
		||||
                                                            Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
 | 
			
		||||
                                                            Date settleDate, String rangeTableName, String rangeDetailTableName) {
 | 
			
		||||
        List<CuMemberRetailDetail> returnRetailDetailList = new ArrayList<>();
 | 
			
		||||
        // 订单会员
 | 
			
		||||
        CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(saOrderExt.getPkMember());
 | 
			
		||||
        if (null == sourceMember) {
 | 
			
		||||
            log.error("阶段收益处理失败,订单会员不存在. orderCode: {}, pkMember: {}", saOrderExt.getOrderCode(), saOrderExt.getPkMember());
 | 
			
		||||
            return returnRetailDetailList;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        int newPointInt;
 | 
			
		||||
        if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
 | 
			
		||||
                || EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
 | 
			
		||||
            // 精品专区按订单金额计算
 | 
			
		||||
            // 订单金额除50取整,为新増点位数量
 | 
			
		||||
            newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
 | 
			
		||||
        } else {
 | 
			
		||||
            // 商城专区按累计业绩处理
 | 
			
		||||
            BigDecimal repPvBalance = sourceMember.getRepPvBalance().add(saOrderExt.getOrderAchieve());
 | 
			
		||||
            newPointInt = repPvBalance.divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
 | 
			
		||||
            sourceMember.setRepPvBalance(repPvBalance.subtract(RetailConstants.POINT_VAL.multiply(new BigDecimal(newPointInt))));
 | 
			
		||||
        }
 | 
			
		||||
        if (newPointInt == 0) {
 | 
			
		||||
            // 当前订单不足生成点位
 | 
			
		||||
            return returnRetailDetailList;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 会员一阶段子点位列表
 | 
			
		||||
        LinkedHashMap<Integer, CuMemberRetailDetail> detailList = sourceMember.getOneDetailMap();
 | 
			
		||||
        if (null == detailList) {
 | 
			
		||||
            detailList = new LinkedHashMap<>();
 | 
			
		||||
            sourceMember.setOneDetailMap(detailList);
 | 
			
		||||
            sourceMember.setTwoDetailMap(new LinkedHashMap<>());
 | 
			
		||||
            sourceMember.setThreeDetailMap(new LinkedHashMap<>());
 | 
			
		||||
        }
 | 
			
		||||
        // 当前会员子点位总数
 | 
			
		||||
        int pointCount = sourceMember.getPointCount();
 | 
			
		||||
| 
						 | 
				
			
			@ -968,76 +1007,136 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
                    .build();
 | 
			
		||||
            detailList.put(newRetailDetail.getChildNode(), newRetailDetail);
 | 
			
		||||
 | 
			
		||||
            // 阶段奖金处理列表
 | 
			
		||||
            List<BonusStageData> bonusStageDataList = new ArrayList<>();
 | 
			
		||||
            // 推荐人
 | 
			
		||||
            Long pkParent = sourceMember.getPkParent();
 | 
			
		||||
            while (true) {
 | 
			
		||||
                CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent);
 | 
			
		||||
                if (null == targetMember) {
 | 
			
		||||
                    // 没有推荐人了,则直接结束
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                pkParent = targetMember.getPkParent();
 | 
			
		||||
            this.handleStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
 | 
			
		||||
                    memberRangeExtMap, saOrderExt, settleDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE,
 | 
			
		||||
                    sourceMember, newRetailDetail, returnRetailDetailList);
 | 
			
		||||
        }
 | 
			
		||||
        return returnRetailDetailList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
                // 推荐人一阶段子点位列表
 | 
			
		||||
                LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList = targetMember.getOneDetailMap();
 | 
			
		||||
                if (CollectionUtil.isEmpty(parentDetailList)) {
 | 
			
		||||
                    // 推荐人没有未完成点位,继续往上找
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // 推荐人第一层点位处理
 | 
			
		||||
                boolean forBool = iCuMemberBonusStageService.firstLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
 | 
			
		||||
                        memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                if (forBool) {
 | 
			
		||||
                    // 在第一层找到并填充点位,就开始下一个点位的处理
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // 推荐人第二层点位处理
 | 
			
		||||
                forBool = iCuMemberBonusStageService.secondLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
 | 
			
		||||
                        memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                if (forBool) {
 | 
			
		||||
                    // 在第二层找到并填充点位,就开始下一个点位的处理
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // 推荐人第三层点位处理
 | 
			
		||||
                forBool = iCuMemberBonusStageService.thirdLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
 | 
			
		||||
                        memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                if (forBool) {
 | 
			
		||||
                    // 在第三层找到并填充点位,就开始下一个点位的处理
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算二、三阶段收益
 | 
			
		||||
     */
 | 
			
		||||
    private List<CuMemberRetailDetail> calculateStageIncomeTwoThree(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
 | 
			
		||||
                                                                    BonusConfigDTO bonusConfigDTO, Integer period,
 | 
			
		||||
                                                                    Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
 | 
			
		||||
                                                                    Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage,
 | 
			
		||||
                                                                    List<CuMemberRetailDetail> stageList) {
 | 
			
		||||
        List<CuMemberRetailDetail> returnRetailDetailList = new ArrayList<>();
 | 
			
		||||
        for (CuMemberRetailDetail memberRetailDetail : stageList) {
 | 
			
		||||
            // 订单会员
 | 
			
		||||
            CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(memberRetailDetail.getPkMember());
 | 
			
		||||
            if (null == sourceMember) {
 | 
			
		||||
                log.error("阶段收益处理失败,{}会员不存在. pkMember: {}", eBonusStage.getLabel(), memberRetailDetail.getPkMember());
 | 
			
		||||
                return returnRetailDetailList;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            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());
 | 
			
		||||
            this.handleStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
 | 
			
		||||
                    memberRangeExtMap, null, settleDate, rangeTableName, rangeDetailTableName, eBonusStage,
 | 
			
		||||
                    sourceMember, memberRetailDetail, returnRetailDetailList);
 | 
			
		||||
        }
 | 
			
		||||
        return returnRetailDetailList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
                    // 阶段奖金
 | 
			
		||||
                    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);
 | 
			
		||||
                }
 | 
			
		||||
    /**
 | 
			
		||||
     * 处理阶段收益(一、二、三阶段)
 | 
			
		||||
     */
 | 
			
		||||
    private void handleStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
 | 
			
		||||
                                   BonusConfigDTO bonusConfigDTO, Integer period,
 | 
			
		||||
                                   Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
 | 
			
		||||
                                   Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage,
 | 
			
		||||
                                   CuMemberRetailRangeExt sourceMember, CuMemberRetailDetail newRetailDetail,
 | 
			
		||||
                                   List<CuMemberRetailDetail> returnRetailDetailList) {
 | 
			
		||||
        // 阶段奖金处理列表
 | 
			
		||||
        List<BonusStageData> bonusStageDataList = new ArrayList<>();
 | 
			
		||||
        // 推荐人
 | 
			
		||||
        Long pkParent = sourceMember.getPkParent();
 | 
			
		||||
        while (true) {
 | 
			
		||||
            CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent);
 | 
			
		||||
            if (null == targetMember) {
 | 
			
		||||
                // 没有推荐人了,则直接结束
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            pkParent = targetMember.getPkParent();
 | 
			
		||||
 | 
			
		||||
            // 推荐人一阶段子点位列表
 | 
			
		||||
            LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList = null;
 | 
			
		||||
            if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                parentDetailList = targetMember.getOneDetailMap();
 | 
			
		||||
            } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                parentDetailList = targetMember.getTwoDetailMap();
 | 
			
		||||
            } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                parentDetailList = targetMember.getThreeDetailMap();
 | 
			
		||||
            }
 | 
			
		||||
            if (CollectionUtil.isEmpty(parentDetailList)) {
 | 
			
		||||
                // 推荐人没有未完成点位,继续往上找
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 推荐人第一层点位处理
 | 
			
		||||
            boolean forBool = iCuMemberBonusStageService.firstLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
 | 
			
		||||
                    memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
            if (forBool) {
 | 
			
		||||
                // 在第一层找到并填充点位,就开始下一个点位的处理
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 推荐人第二层点位处理
 | 
			
		||||
            forBool = iCuMemberBonusStageService.secondLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
 | 
			
		||||
                    memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
            if (forBool) {
 | 
			
		||||
                // 在第二层找到并填充点位,就开始下一个点位的处理
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 推荐人第三层点位处理
 | 
			
		||||
            forBool = iCuMemberBonusStageService.thirdLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
 | 
			
		||||
                    memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
            if (forBool) {
 | 
			
		||||
                // 在第三层找到并填充点位,就开始下一个点位的处理
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        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 != null ? saOrderExt.getPkRate() : 0) : 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 != null ? saOrderExt.getOrderAmount() : null, saOrderExt != null ? saOrderExt.getInExchangeRate() : null);
 | 
			
		||||
                if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusStage.getIncomeStatus()) {
 | 
			
		||||
                    cuMemberBonus.setStoreIncome(ComputeUtil.computeAdd(cuMemberBonus.getStoreIncome(), cuMemberBonusStage.getPretaxIncome()));
 | 
			
		||||
                    setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusStage);
 | 
			
		||||
                }
 | 
			
		||||
                cuMemberBonusStageList.add(cuMemberBonusStage);
 | 
			
		||||
 | 
			
		||||
                // 升阶段数据
 | 
			
		||||
                if (EBonusStage.ONE.getValue() == bonusStageData.getStage()) {
 | 
			
		||||
                    // 一阶段需要处理升阶段
 | 
			
		||||
                    CuMemberRetailDetail twoRetailDetail = bonusStageData.getTwoRetailDetail();
 | 
			
		||||
                    targetMember.getTwoDetailMap().put(twoRetailDetail.getChildNode(), twoRetailDetail);
 | 
			
		||||
                    returnRetailDetailList.add(twoRetailDetail);
 | 
			
		||||
                } else if (EBonusStage.TWO.getValue() == bonusStageData.getStage()) {
 | 
			
		||||
                    // 二阶段需要处理升阶段
 | 
			
		||||
                    CuMemberRetailDetail threeRetailDetail = bonusStageData.getThreeRetailDetail();
 | 
			
		||||
                    targetMember.getThreeDetailMap().put(threeRetailDetail.getChildNode(), threeRetailDetail);
 | 
			
		||||
                    returnRetailDetailList.add(threeRetailDetail);
 | 
			
		||||
                } else if (EBonusStage.THREE.getValue() == bonusStageData.getStage()) {
 | 
			
		||||
                    // TODO 三阶段需要赠送点位
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -284,27 +284,55 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
                if (isFinish) {
 | 
			
		||||
                    targetRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue());
 | 
			
		||||
                    targetRetailDetail.setStageDate(settleDate);
 | 
			
		||||
                    // TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理
 | 
			
		||||
                    if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                        // 一阶段,全满发放阶段奖
 | 
			
		||||
                        // 返回奖金收益处理数据
 | 
			
		||||
                        bonusStageDataList.add(BonusStageData.builder()
 | 
			
		||||
                        BonusStageData bonusStageData = BonusStageData.builder()
 | 
			
		||||
                                .bonusIncome(BonusConstants.ONE_BONUS)
 | 
			
		||||
                                .targetPkMember(targetRetailDetail.getPkMember())
 | 
			
		||||
                                .targetChildNode(targetRetailDetail.getChildNode())
 | 
			
		||||
                                .stage(eBonusStage.getValue())
 | 
			
		||||
                                .stageNum(14)
 | 
			
		||||
                                .build();
 | 
			
		||||
                        // 生成二阶段点位
 | 
			
		||||
                        bonusStageData.setTwoRetailDetail(CuMemberRetailDetail.builder()
 | 
			
		||||
                                .pkMember(targetRetailDetail.getPkMember())
 | 
			
		||||
                                .childNode(targetRetailDetail.getChildNode())
 | 
			
		||||
                                .pkParent(targetRetailDetail.getPkParent())
 | 
			
		||||
                                .stage(EBonusStage.TWO.getValue())
 | 
			
		||||
                                .stageStatus(EBonusStageStatus.NO.getValue())
 | 
			
		||||
                                .pointType(targetRetailDetail.getPointType())
 | 
			
		||||
                                .pointGift(targetRetailDetail.getPointGift())
 | 
			
		||||
                                .creationTime(settleDate)
 | 
			
		||||
                                .updateBool(0)
 | 
			
		||||
                                .build());
 | 
			
		||||
                        bonusStageDataList.add(bonusStageData);
 | 
			
		||||
                    } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                        // 二阶段,全满发放阶段奖
 | 
			
		||||
                        // 返回奖金收益处理数据
 | 
			
		||||
                        bonusStageDataList.add(BonusStageData.builder()
 | 
			
		||||
                        BonusStageData bonusStageData = BonusStageData.builder()
 | 
			
		||||
                                .bonusIncome(BonusConstants.TWO_BONUS)
 | 
			
		||||
                                .targetPkMember(targetRetailDetail.getPkMember())
 | 
			
		||||
                                .targetChildNode(targetRetailDetail.getChildNode())
 | 
			
		||||
                                .stage(eBonusStage.getValue())
 | 
			
		||||
                                .stageNum(14)
 | 
			
		||||
                                .build();
 | 
			
		||||
                        bonusStageData.setThreeRetailDetail(CuMemberRetailDetail.builder()
 | 
			
		||||
                                .pkMember(targetRetailDetail.getPkMember())
 | 
			
		||||
                                .childNode(targetRetailDetail.getChildNode())
 | 
			
		||||
                                .pkParent(targetRetailDetail.getPkParent())
 | 
			
		||||
                                .stage(EBonusStage.THREE.getValue())
 | 
			
		||||
                                .stageStatus(EBonusStageStatus.NO.getValue())
 | 
			
		||||
                                .pointType(targetRetailDetail.getPointType())
 | 
			
		||||
                                .pointGift(targetRetailDetail.getPointGift())
 | 
			
		||||
                                .creationTime(settleDate)
 | 
			
		||||
                                .updateBool(0)
 | 
			
		||||
                                .build());
 | 
			
		||||
                        bonusStageDataList.add(bonusStageData);
 | 
			
		||||
                    } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
                        // TODO 三阶段发放特殊处理
 | 
			
		||||
                        // TODO 三阶段填充满,判断是否需要赠送点位
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -347,7 +375,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
        // 新点位的上第二层
 | 
			
		||||
        CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst());
 | 
			
		||||
        if (null != firstMemberRetail) {
 | 
			
		||||
            CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointFirst());
 | 
			
		||||
            CuMemberRetailDetail memberDetail = this.getRetailDetailMap(firstMemberRetail, eBonusStage).get(newParentRetailDetail.getPointFirst());
 | 
			
		||||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPointMemberFirst());
 | 
			
		||||
                newRetailDetail.setPointSecond(newParentRetailDetail.getPointFirst());
 | 
			
		||||
| 
						 | 
				
			
			@ -359,7 +387,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
        // 新点位的上第三层
 | 
			
		||||
        CuMemberRetailRangeExt secondMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberSecond());
 | 
			
		||||
        if (null != secondMemberRetail) {
 | 
			
		||||
            CuMemberRetailDetail memberDetail = secondMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointSecond());
 | 
			
		||||
            CuMemberRetailDetail memberDetail = this.getRetailDetailMap(firstMemberRetail, eBonusStage).get(newParentRetailDetail.getPointSecond());
 | 
			
		||||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberSecond());
 | 
			
		||||
                newRetailDetail.setPointThird(newParentRetailDetail.getPointSecond());
 | 
			
		||||
| 
						 | 
				
			
			@ -418,7 +446,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
        // 新点位的上第三层
 | 
			
		||||
        CuMemberRetailRangeExt thirdMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst());
 | 
			
		||||
        if (null != thirdMemberRetail) {
 | 
			
		||||
            CuMemberRetailDetail memberDetail = thirdMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointFirst());
 | 
			
		||||
            CuMemberRetailDetail memberDetail = this.getRetailDetailMap(thirdMemberRetail, eBonusStage).get(newParentRetailDetail.getPointFirst());
 | 
			
		||||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberFirst());
 | 
			
		||||
                newRetailDetail.setPointThird(newParentRetailDetail.getPointFirst());
 | 
			
		||||
| 
						 | 
				
			
			@ -430,7 +458,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
        // 新点位的上第一层
 | 
			
		||||
        CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(downFirstMember);
 | 
			
		||||
        if (null != firstMemberRetail) {
 | 
			
		||||
            CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(downFirstPoint);
 | 
			
		||||
            CuMemberRetailDetail memberDetail = this.getRetailDetailMap(firstMemberRetail, eBonusStage).get(downFirstPoint);
 | 
			
		||||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberFirst(memberDetail.getPkMember());
 | 
			
		||||
                newRetailDetail.setPointFirst(memberDetail.getChildNode());
 | 
			
		||||
| 
						 | 
				
			
			@ -511,7 +539,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
        // 新点位的上第二层
 | 
			
		||||
        CuMemberRetailRangeExt secondMemberRetail = memberRangeExtMap.get(downSecondMember);
 | 
			
		||||
        if (null != secondMemberRetail) {
 | 
			
		||||
            CuMemberRetailDetail memberDetail = secondMemberRetail.getOneDetailMap().get(downSecondPoint);
 | 
			
		||||
            CuMemberRetailDetail memberDetail = this.getRetailDetailMap(secondMemberRetail, eBonusStage).get(downSecondPoint);
 | 
			
		||||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember());
 | 
			
		||||
                newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode());
 | 
			
		||||
| 
						 | 
				
			
			@ -523,7 +551,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
        // 新点位的上第一层
 | 
			
		||||
        CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(downFirstMember);
 | 
			
		||||
        if (null != firstMemberRetail) {
 | 
			
		||||
            CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(downFirstPoint);
 | 
			
		||||
            CuMemberRetailDetail memberDetail = this.getRetailDetailMap(firstMemberRetail, eBonusStage).get(downFirstPoint);
 | 
			
		||||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember());
 | 
			
		||||
                newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode());
 | 
			
		||||
| 
						 | 
				
			
			@ -708,4 +736,16 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private LinkedHashMap<Integer, CuMemberRetailDetail> getRetailDetailMap(CuMemberRetailRangeExt memberRetail, EBonusStage eBonusStage) {
 | 
			
		||||
        if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
            return memberRetail.getOneDetailMap();
 | 
			
		||||
        } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
            return memberRetail.getTwoDetailMap();
 | 
			
		||||
        } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
 | 
			
		||||
            return memberRetail.getThreeDetailMap();
 | 
			
		||||
        }
 | 
			
		||||
        return new LinkedHashMap<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,6 +51,7 @@
 | 
			
		|||
        <result column="rep_team_new_amount" property="repTeamNewAmount"/>
 | 
			
		||||
        <result column="rep_team_new_pv" property="repTeamNewPv"/>
 | 
			
		||||
        <result column="point_count" property="pointCount"/>
 | 
			
		||||
        <result column="rep_pv_balance" property="repPvBalance"/>
 | 
			
		||||
 | 
			
		||||
        <result column="AWARDS_VALUE" property="awardsValue"/>
 | 
			
		||||
        <result column="AWARDS_NAME" property="awardsName"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +93,9 @@
 | 
			
		|||
            rep_consume_new_amount = 0,
 | 
			
		||||
            rep_consume_new_pv     = 0,
 | 
			
		||||
            rep_team_new_amount    = 0,
 | 
			
		||||
            rep_team_new_pv        = 0
 | 
			
		||||
            rep_team_new_pv        = 0,
 | 
			
		||||
            point_count            = 0,
 | 
			
		||||
            rep_pv_balance         = 0
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
    <update id="mergeMemberRetailRangeByYesterday">
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +106,8 @@
 | 
			
		|||
        consume_amount, month_consume_amount,
 | 
			
		||||
        team_consume_pv, team_month_pv,
 | 
			
		||||
        team_consume_amount, team_month_amount,
 | 
			
		||||
        recommend_num, team_num, big_team_pv, small_team_pv
 | 
			
		||||
        recommend_num, team_num, big_team_pv, small_team_pv,
 | 
			
		||||
        point_count, rep_pv_balance
 | 
			
		||||
        from ${yesterdayRangeTableName}
 | 
			
		||||
        ) b
 | 
			
		||||
        on (a.pk_member = b.pk_member)
 | 
			
		||||
| 
						 | 
				
			
			@ -115,7 +119,8 @@
 | 
			
		|||
        a.team_consume_pv = b.team_consume_pv,
 | 
			
		||||
        a.team_consume_amount = b.team_consume_amount,
 | 
			
		||||
        a.recommend_num = b.recommend_num, a.team_num = b.team_num,
 | 
			
		||||
        a.big_team_pv = b.big_team_pv, a.small_team_pv = b.small_team_pv
 | 
			
		||||
        a.big_team_pv = b.big_team_pv, a.small_team_pv = b.small_team_pv,
 | 
			
		||||
        a.point_count = b.point_count, a.rep_pv_balance = b.rep_pv_balance
 | 
			
		||||
        <if test="isSameMonth == 0">
 | 
			
		||||
            ,a.month_consume_pv = b.month_consume_pv
 | 
			
		||||
            ,a.month_consume_amount = b.month_consume_amount
 | 
			
		||||
| 
						 | 
				
			
			@ -322,7 +327,8 @@
 | 
			
		|||
            #{item.regConsumeNewAmount} reg_consume_new_amount, #{item.regConsumeNewPv} reg_consume_new_pv,
 | 
			
		||||
            #{item.regTeamNewAmount} reg_team_new_amount, #{item.regTeamNewPv} reg_team_new_pv,
 | 
			
		||||
            #{item.repConsumeNewAmount} rep_consume_new_amount, #{item.repConsumeNewPv} rep_consume_new_pv,
 | 
			
		||||
            #{item.repTeamNewAmount} rep_team_new_amount, #{item.repTeamNewPv} rep_team_new_pv
 | 
			
		||||
            #{item.repTeamNewAmount} rep_team_new_amount, #{item.repTeamNewPv} rep_team_new_pv,
 | 
			
		||||
            #{item.pointCount} point_count, #{item.repPvBalance} rep_pv_balance
 | 
			
		||||
            from dual
 | 
			
		||||
        </foreach>
 | 
			
		||||
        ) b
 | 
			
		||||
| 
						 | 
				
			
			@ -337,7 +343,8 @@
 | 
			
		|||
        a.reg_consume_new_amount = b.reg_consume_new_amount, a.reg_consume_new_pv = b.reg_consume_new_pv,
 | 
			
		||||
        a.reg_team_new_amount = b.reg_team_new_amount, a.reg_team_new_pv = b.reg_team_new_pv,
 | 
			
		||||
        a.rep_consume_new_amount = b.rep_consume_new_amount, a.rep_consume_new_pv = b.rep_consume_new_pv,
 | 
			
		||||
        a.rep_team_new_amount = b.rep_team_new_amount, a.rep_team_new_pv = b.rep_team_new_pv
 | 
			
		||||
        a.rep_team_new_amount = b.rep_team_new_amount, a.rep_team_new_pv = b.rep_team_new_pv,
 | 
			
		||||
        a.point_count = b.point_count, a.rep_pv_balance = b.rep_pv_balance
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
    <!-- 更新会员日结数据 -->
 | 
			
		||||
| 
						 | 
				
			
			@ -647,6 +654,7 @@
 | 
			
		|||
            rep_team_new_amount,
 | 
			
		||||
            rep_team_new_pv,
 | 
			
		||||
            point_count,
 | 
			
		||||
            rep_pv_balance,
 | 
			
		||||
            bw.awards_value,
 | 
			
		||||
            bw.awards_name
 | 
			
		||||
            from (
 | 
			
		||||
| 
						 | 
				
			
			@ -701,6 +709,8 @@
 | 
			
		|||
        rep_consume_new_pv,
 | 
			
		||||
        rep_team_new_amount,
 | 
			
		||||
        rep_team_new_pv,
 | 
			
		||||
        point_count,
 | 
			
		||||
        rep_pv_balance,
 | 
			
		||||
        bw.awards_value,
 | 
			
		||||
        bw.awards_name
 | 
			
		||||
        from ${tableName} a
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -298,43 +298,43 @@
 | 
			
		|||
            stage               NUMBER(1) default 1 not null,
 | 
			
		||||
            stage_status        NUMBER(1) default 1 not null,
 | 
			
		||||
            stage_date          DATE,
 | 
			
		||||
            point_11            NUMBER(8),
 | 
			
		||||
            point_member_11     NUMBER(20),
 | 
			
		||||
            point_12            NUMBER(8),
 | 
			
		||||
            point_11            NUMBER(8),
 | 
			
		||||
            point_member_12     NUMBER(20),
 | 
			
		||||
            point_21            NUMBER(8),
 | 
			
		||||
            point_12            NUMBER(8),
 | 
			
		||||
            point_member_21     NUMBER(20),
 | 
			
		||||
            point_22            NUMBER(8),
 | 
			
		||||
            point_21            NUMBER(8),
 | 
			
		||||
            point_member_22     NUMBER(20),
 | 
			
		||||
            point_23            NUMBER(8),
 | 
			
		||||
            point_22            NUMBER(8),
 | 
			
		||||
            point_member_23     NUMBER(20),
 | 
			
		||||
            point_24            NUMBER(8),
 | 
			
		||||
            point_23            NUMBER(8),
 | 
			
		||||
            point_member_24     NUMBER(20),
 | 
			
		||||
            point_31            NUMBER(8),
 | 
			
		||||
            point_24            NUMBER(8),
 | 
			
		||||
            point_member_31     NUMBER(20),
 | 
			
		||||
            point_32            NUMBER(8),
 | 
			
		||||
            point_31            NUMBER(8),
 | 
			
		||||
            point_member_32     NUMBER(20),
 | 
			
		||||
            point_33            NUMBER(8),
 | 
			
		||||
            point_32            NUMBER(8),
 | 
			
		||||
            point_member_33     NUMBER(20),
 | 
			
		||||
            point_34            NUMBER(8),
 | 
			
		||||
            point_33            NUMBER(8),
 | 
			
		||||
            point_member_34     NUMBER(20),
 | 
			
		||||
            point_35            NUMBER(8),
 | 
			
		||||
            point_34            NUMBER(8),
 | 
			
		||||
            point_member_35     NUMBER(20),
 | 
			
		||||
            point_36            NUMBER(8),
 | 
			
		||||
            point_35            NUMBER(8),
 | 
			
		||||
            point_member_36     NUMBER(20),
 | 
			
		||||
            point_37            NUMBER(8),
 | 
			
		||||
            point_36            NUMBER(8),
 | 
			
		||||
            point_member_37     NUMBER(20),
 | 
			
		||||
            point_38            NUMBER(8),
 | 
			
		||||
            point_37            NUMBER(8),
 | 
			
		||||
            point_member_38     NUMBER(20),
 | 
			
		||||
            point_38            NUMBER(8),
 | 
			
		||||
            point_type          NUMBER(1) default 0 not null,
 | 
			
		||||
            point_gift          NUMBER(1) default 0 not null,
 | 
			
		||||
            creation_time       DATE,
 | 
			
		||||
            point_first         NUMBER(8),
 | 
			
		||||
            point_member_first  NUMBER(20),
 | 
			
		||||
            point_second        NUMBER(8),
 | 
			
		||||
            point_first         NUMBER(8),
 | 
			
		||||
            point_member_second NUMBER(20),
 | 
			
		||||
            point_third         NUMBER(8),
 | 
			
		||||
            point_member_third  NUMBER(20)
 | 
			
		||||
            point_second        NUMBER(8),
 | 
			
		||||
            point_member_third  NUMBER(20),
 | 
			
		||||
            point_third         NUMBER(8)
 | 
			
		||||
        )
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -572,7 +572,8 @@
 | 
			
		|||
            rep_consume_new_pv     number(17,6) default 0 not null,
 | 
			
		||||
            rep_team_new_amount    number(17,6) default 0 not null,
 | 
			
		||||
            rep_team_new_pv        number(17,6) default 0 not null,
 | 
			
		||||
            point_count        number(8) default 0 not null
 | 
			
		||||
            point_count            number(8) default 0 not null,
 | 
			
		||||
            rep_pv_balance         number(17,6) default 0 not null
 | 
			
		||||
        )
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,7 @@
 | 
			
		|||
        where so.del_flag = 0
 | 
			
		||||
        and so.order_status = 1
 | 
			
		||||
        <if test="orderCode != null and orderCode != ''">
 | 
			
		||||
            and so.order_code=#{orderCode}
 | 
			
		||||
            and so.order_code = #{orderCode}
 | 
			
		||||
        </if>
 | 
			
		||||
        <if test="orderTypeList != null and orderTypeList.size > 0">
 | 
			
		||||
            and so.order_type in
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ package com.hzs.report.order.service.impl;
 | 
			
		|||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import com.hzs.common.core.constant.MagicNumberConstants;
 | 
			
		||||
import com.hzs.common.core.enums.EOrderType;
 | 
			
		||||
import com.hzs.common.core.utils.DateUtils;
 | 
			
		||||
import com.hzs.common.domain.report.CuMemberPerformanceSummary;
 | 
			
		||||
| 
						 | 
				
			
			@ -78,6 +79,7 @@ public class CuMemberPerformanceSummaryServiceImpl extends ServiceImpl<CuMemberP
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        summary.setDividendPv(summary.getTotalPv().multiply(new BigDecimal("0.015")));
 | 
			
		||||
        summary.setPkCreator(MagicNumberConstants.PK_ADMIN);
 | 
			
		||||
        baseMapper.insert(summary);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,10 @@ public class BonusMsgConstants {
 | 
			
		|||
     * 阶段 收益说明
 | 
			
		||||
     */
 | 
			
		||||
    public static String STAGE_INCOME = "订单编号%s,%s为%s贡献了阶段收益,%s子点位%s阶段。";
 | 
			
		||||
    /**
 | 
			
		||||
     * 二、三阶段 收益说明
 | 
			
		||||
     */
 | 
			
		||||
    public static String STAGE_INCOME_OTHER = "%s为%s贡献了阶段收益,%s子点位%s阶段。";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 直推级差收益说明
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,4 +195,10 @@ public class CuMemberRetailRange extends BaseEntity {
 | 
			
		|||
    @TableField("point_count")
 | 
			
		||||
    private Integer pointCount;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 复购业绩余额
 | 
			
		||||
     */
 | 
			
		||||
    @TableField("REP_PV_BALANCE")
 | 
			
		||||
    private BigDecimal repPvBalance;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ package com.hzs.common.domain.report;
 | 
			
		|||
import java.math.BigDecimal;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.KeySequence;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableId;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +31,7 @@ public class CuMemberPerformanceSummary extends BaseEntity {
 | 
			
		|||
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    @TableField("PK_ID")
 | 
			
		||||
    @TableId("PK_ID")
 | 
			
		||||
    private Long pkId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue