Compare commits
	
		
			7 Commits
		
	
	
		
			48863d8dc7
			...
			8642d1aca3
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						8642d1aca3 | |
| 
							
							
								
								 | 
						521de1ed7b | |
| 
							
							
								
								 | 
						f59c0ec32a | |
| 
							
							
								
								 | 
						d2fd2c87c8 | |
| 
							
							
								
								 | 
						817bca7553 | |
| 
							
							
								
								 | 
						8ccf1f4c9a | |
| 
							
							
								
								 | 
						9868e5fabb | 
| 
						 | 
				
			
			@ -127,4 +127,7 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
 | 
			
		|||
     * @param memberList
 | 
			
		||||
     */
 | 
			
		||||
    void updateMemberRetailSecondRangeParent(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("memberList") List<CuMemberExt> memberList, @Param("updateType") Integer updateType, @Param("symbol") String symbol);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    void initMemberRetailSecondRange(@Param("tableName") String tableName, @Param("member") CuMemberExt memberList);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,4 +87,5 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
 | 
			
		|||
 | 
			
		||||
    void updateMemberRetailSecondRangeParent(String settleTableName, SaOrderExt orderExt, List<CuMemberExt> pkMemberList, Integer updateType, String symbol);
 | 
			
		||||
 | 
			
		||||
    void initMemberRetailSecondRange(String tableName, CuMemberExt member);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,11 +32,17 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
 | 
			
		|||
                // 明细数据放到对应的会员数据中
 | 
			
		||||
                for (CuMemberRetailDetail cuMemberRetailDetail : tmpList) {
 | 
			
		||||
                    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()) {
 | 
			
		||||
                        // 阶段一点位列表(使用有序map,为了后续业务处理方便)
 | 
			
		||||
                        if (null == cuMemberRetailRangeExt.getOneDetailMap()) {
 | 
			
		||||
                            cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>());
 | 
			
		||||
                        }
 | 
			
		||||
                        cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,6 +149,11 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
 | 
			
		|||
        baseMapper.updateMemberRetailSecondRangeParent(settleTableName, orderExt, pkMemberList, updateType, symbol);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void initMemberRetailSecondRange(String tableName, CuMemberExt member) {
 | 
			
		||||
        baseMapper.initMemberRetailSecondRange(tableName, member);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private List<List<?>> setUpdCuMemberTreeLists(Map<Long, CuMemberRetailRangeExt> cuMemberTreeMap) {
 | 
			
		||||
        List<CuMemberRetailRangeExt> cuMemberTreeList = new ArrayList<>();
 | 
			
		||||
        cuMemberTreeMap.forEach((key, value) -> cuMemberTreeList.add(value));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@ import com.hzs.common.domain.member.base.CuMember;
 | 
			
		|||
import com.hzs.common.domain.member.detail.CuMemberAwards;
 | 
			
		||||
import org.apache.ibatis.annotations.Param;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +14,8 @@ import java.util.List;
 | 
			
		|||
 */
 | 
			
		||||
public interface CuMemberMapper extends BaseMapper<CuMember> {
 | 
			
		||||
 | 
			
		||||
    CuMember getByPkId(@Param("pkId") Serializable id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 更新会员奖衔根据临时表
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,9 @@ package com.hzs.bonus.base.service;
 | 
			
		|||
import com.baomidou.mybatisplus.extension.service.IService;
 | 
			
		||||
import com.hzs.common.domain.member.base.CuMember;
 | 
			
		||||
import com.hzs.common.domain.member.detail.CuMemberAwards;
 | 
			
		||||
import org.apache.ibatis.annotations.Param;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +14,7 @@ import java.util.List;
 | 
			
		|||
 */
 | 
			
		||||
public interface ICuMemberService extends IService<CuMember> {
 | 
			
		||||
 | 
			
		||||
    CuMember getByPkId(Serializable id);
 | 
			
		||||
    /**
 | 
			
		||||
     * 更新会员奖衔根据临时表 -- 日结
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ import com.hzs.common.domain.member.detail.CuMemberAwards;
 | 
			
		|||
import com.hzs.bonus.base.mapper.CuMemberMapper;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +17,11 @@ import java.util.*;
 | 
			
		|||
@Service
 | 
			
		||||
public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> implements ICuMemberService {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public CuMember getByPkId(Serializable id) {
 | 
			
		||||
        return baseMapper.getByPkId(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void updateCuMemberRetailRangeByPeriod(Integer period) {
 | 
			
		||||
        baseMapper.updateCuMemberRetailAwardsByPeriod(period, EAwardsType.RANGE_TYPE.getValue());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,15 +1,15 @@
 | 
			
		|||
package com.hzs.bonus.bonus.service;
 | 
			
		||||
 | 
			
		||||
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.ext.CuMemberRetailRangeExt;
 | 
			
		||||
import com.hzs.common.domain.member.bonus.CuMemberBonus;
 | 
			
		||||
import com.hzs.common.domain.member.bonus.CuMemberBonusStage;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 会员奖金-阶段收益明细表 服务类
 | 
			
		||||
| 
						 | 
				
			
			@ -40,29 +40,57 @@ public interface ICuMemberBonusStageService extends IService<CuMemberBonusStage>
 | 
			
		|||
    /**
 | 
			
		||||
     * 填充指定点位
 | 
			
		||||
     */
 | 
			
		||||
    void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point,
 | 
			
		||||
                          Long pkMember, Integer childNode);
 | 
			
		||||
    boolean fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point,
 | 
			
		||||
                             CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage,
 | 
			
		||||
                             List<BonusStageData> bonusStageDataList);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 处理新点位是推荐第一层
 | 
			
		||||
     */
 | 
			
		||||
    void handlePointFirst(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
 | 
			
		||||
                          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,
 | 
			
		||||
                           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,
 | 
			
		||||
                          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);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
package com.hzs.bonus.bonus.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
 | 
			
		||||
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
 | 
			
		||||
import com.hzs.common.core.constant.BonusFieldConstants;
 | 
			
		||||
import com.hzs.common.core.constant.MagicNumberConstants;
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +142,7 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
        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) {
 | 
			
		||||
        if (cuMemberBonusMap.containsKey(pkMember)) {
 | 
			
		||||
            return cuMemberBonusMap.get(pkMember);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,12 @@
 | 
			
		|||
package com.hzs.bonus.bonus.service.impl;
 | 
			
		||||
 | 
			
		||||
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.ICuMemberRetailRangeService;
 | 
			
		||||
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.vo.BonusRecordDetailVO;
 | 
			
		||||
import com.hzs.bonus.constant.BonusConstants;
 | 
			
		||||
import com.hzs.bonus.detail.service.ICuMemberAwardsService;
 | 
			
		||||
import com.hzs.bonus.order.service.IBonusOrderService;
 | 
			
		||||
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.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.math.RoundingMode;
 | 
			
		||||
import java.time.temporal.ChronoUnit;
 | 
			
		||||
| 
						 | 
				
			
			@ -328,29 +325,33 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
            List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
            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%
 | 
			
		||||
                    this.calculateDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
 | 
			
		||||
                            bonusConfigDTO, period, cuMemberBonusMap);
 | 
			
		||||
 | 
			
		||||
                    // TODO 阶段收益 -- 来源订单金额
 | 
			
		||||
                    this.calculateStageIncome(cuMemberBonusStageList, memberRangeExtMap, saOrderExt,
 | 
			
		||||
                            settleStartDate, rangeTableName, rangeDetailTableName);
 | 
			
		||||
                    this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
 | 
			
		||||
                            memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    // TODO 领导级差收益 -- 来源PV
 | 
			
		||||
                    // TODO 领导平差收益 -- 来源PV
 | 
			
		||||
                } else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
 | 
			
		||||
                    // 商城专区
 | 
			
		||||
                    // TODO 见点收益 -- 来源订单业绩,血缘上20代,每代拿业绩的10%
 | 
			
		||||
                    // 见点收益 -- 来源订单业绩,血缘上20代,每代拿业绩的10%
 | 
			
		||||
                    this.calculateRepurDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
 | 
			
		||||
                            bonusConfigDTO, period, cuMemberBonusMap);
 | 
			
		||||
                    // TODO 阶段收益 -- 来源订单业绩
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理
 | 
			
		||||
 | 
			
		||||
            if (cuMemberBonusPushList.size() > 0) {
 | 
			
		||||
                bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -371,7 +372,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
            }
 | 
			
		||||
            // 更新日结数据
 | 
			
		||||
            iCuMemberRetailRangeService.updateCuMemberRetailRange(rangeTableName, memberRangeExtMap);
 | 
			
		||||
            CuMemberRetailRangeExt tt = memberRangeExtMap.get(20363L);
 | 
			
		||||
            // 更新日结明细数据
 | 
			
		||||
            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,
 | 
			
		||||
                                      Date settleDate, String rangeTableName, String rangeDetailTableName) {
 | 
			
		||||
    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) {
 | 
			
		||||
| 
						 | 
				
			
			@ -951,8 +953,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
        }
 | 
			
		||||
        // 当前会员子点位总数
 | 
			
		||||
        int pointCount = sourceMember.getPointCount();
 | 
			
		||||
 | 
			
		||||
        newPointInt:
 | 
			
		||||
        for (int i = 1; i <= newPointInt; i++) {
 | 
			
		||||
            // 订单会员生成的新点位
 | 
			
		||||
            CuMemberRetailDetail newRetailDetail = CuMemberRetailDetail.builder()
 | 
			
		||||
| 
						 | 
				
			
			@ -968,6 +968,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
                    .build();
 | 
			
		||||
            detailList.put(newRetailDetail.getChildNode(), newRetailDetail);
 | 
			
		||||
 | 
			
		||||
            // 阶段奖金处理列表
 | 
			
		||||
            List<BonusStageData> bonusStageDataList = new ArrayList<>();
 | 
			
		||||
            // 推荐人
 | 
			
		||||
            Long pkParent = sourceMember.getPkParent();
 | 
			
		||||
            while (true) {
 | 
			
		||||
| 
						 | 
				
			
			@ -984,143 +986,58 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
 | 
			
		|||
                    // 推荐人没有未完成点位,继续往上找
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
 | 
			
		||||
                    // 第一层填充
 | 
			
		||||
                    CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue();
 | 
			
		||||
                    // 遍历推荐人点位,使用第一个未完成的点位,进行填充
 | 
			
		||||
                    if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) {
 | 
			
		||||
                        if (null == parentRetailDetail.getPointMember11()) {
 | 
			
		||||
                            iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_11,
 | 
			
		||||
                                    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;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                // 推荐人第一层点位处理
 | 
			
		||||
                boolean forBool = iCuMemberBonusStageService.firstLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
 | 
			
		||||
                        memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                if (forBool) {
 | 
			
		||||
                    // 在第一层找到并填充点位,就开始下一个点位的处理
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
 | 
			
		||||
                    // 第二层填充
 | 
			
		||||
                    CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue();
 | 
			
		||||
                    // 遍历推荐人点位,使用第一个未完成的点位,进行填充
 | 
			
		||||
                    if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) {
 | 
			
		||||
                        if (null == parentRetailDetail.getPointMember21()) {
 | 
			
		||||
                            iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_21,
 | 
			
		||||
                                    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;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                // 推荐人第二层点位处理
 | 
			
		||||
                forBool = iCuMemberBonusStageService.secondLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
 | 
			
		||||
                        memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                if (forBool) {
 | 
			
		||||
                    // 在第二层找到并填充点位,就开始下一个点位的处理
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                for (Map.Entry<Integer, CuMemberRetailDetail> integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) {
 | 
			
		||||
                    // 第三层填充
 | 
			
		||||
                    CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue();
 | 
			
		||||
                    // 遍历推荐人点位,使用第一个未完成的点位,进行填充
 | 
			
		||||
                    if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) {
 | 
			
		||||
                        if (null == parentRetailDetail.getPointMember31()) {
 | 
			
		||||
                            iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_31,
 | 
			
		||||
                                    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;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                // 推荐人第三层点位处理
 | 
			
		||||
                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.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);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,9 @@
 | 
			
		|||
package com.hzs.bonus.bonus.service.impl;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.bean.BeanUtil;
 | 
			
		||||
import cn.hutool.core.collection.CollectionUtil;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
 | 
			
		||||
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
 | 
			
		||||
import com.hzs.bonus.base.service.ICuMemberService;
 | 
			
		||||
| 
						 | 
				
			
			@ -26,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
 | 
			
		|||
 | 
			
		||||
import java.time.temporal.ChronoUnit;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 奖金结算服务类
 | 
			
		||||
| 
						 | 
				
			
			@ -182,7 +185,15 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
        // 秒结表名
 | 
			
		||||
        String secondRangeTableName = TableNameConstants.CU_MEMBER_RETAIL_S + currentPeriod;
 | 
			
		||||
        List<CuMemberExt> memberList = iCuMemberRetailRangeService.findParentMemberList(orderExt.getPkMember());
 | 
			
		||||
        CuMember self = iCuMemberService.getById(orderExt.getPkId());
 | 
			
		||||
        CuMember self = iCuMemberService.getByPkId(orderExt.getPkMember());
 | 
			
		||||
        CuMemberExt initSelf = new CuMemberExt();
 | 
			
		||||
        BeanUtil.copyProperties(self, initSelf);
 | 
			
		||||
        List<CuMemberExt> initMemberList = new ArrayList<>();
 | 
			
		||||
        initMemberList.add(initSelf);
 | 
			
		||||
        initMemberList.addAll(memberList);
 | 
			
		||||
        for (CuMemberExt memberExt : initMemberList) {
 | 
			
		||||
            iCuMemberRetailRangeService.initMemberRetailSecondRange(secondRangeTableName, memberExt);
 | 
			
		||||
        }
 | 
			
		||||
        iCuMemberRetailRangeService.updateMemberRetailSecondRangeSelf(secondRangeTableName, orderExt, self, updateType, symbol);
 | 
			
		||||
        iCuMemberRetailRangeService.updateMemberRetailSecondRangeParent(secondRangeTableName, orderExt, memberList, updateType, symbol);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,13 +6,13 @@ import cn.hutool.core.util.ReflectUtil;
 | 
			
		|||
import com.hzs.bonus.achieve.mapper.CuMemberRetailRangeMapper;
 | 
			
		||||
import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService;
 | 
			
		||||
import com.hzs.bonus.achieve.service.impl.CuMemberBonusSettle;
 | 
			
		||||
import com.hzs.bonus.bonus.dto.BonusStageData;
 | 
			
		||||
import com.hzs.bonus.bonus.mapper.CuMemberBonusStageMapper;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import com.hzs.bonus.bonus.service.ICuMemberBonusStageService;
 | 
			
		||||
import com.hzs.bonus.constant.BonusConstants;
 | 
			
		||||
import com.hzs.common.core.constant.MagicNumberConstants;
 | 
			
		||||
import com.hzs.common.core.enums.EBonusStage;
 | 
			
		||||
import com.hzs.common.core.enums.ECalType;
 | 
			
		||||
import com.hzs.common.core.enums.*;
 | 
			
		||||
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
 | 
			
		||||
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
 | 
			
		||||
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,
 | 
			
		||||
                                          CuMemberRetailDetail newRetailDetail, String node) {
 | 
			
		||||
                                          CuMemberRetailDetail newRetailDetail, String node, Date settleDate, EBonusStage eBonusStage,
 | 
			
		||||
                                          List<BonusStageData> bonusStageDataList) {
 | 
			
		||||
        if (null == targetRetailDetail) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -122,60 +123,80 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
                switch (suffix) {
 | 
			
		||||
                    case BonusConstants.POINT_11:
 | 
			
		||||
                        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)) {
 | 
			
		||||
                            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)) {
 | 
			
		||||
                            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)) {
 | 
			
		||||
                            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)) {
 | 
			
		||||
                            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)) {
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_34, newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_34,
 | 
			
		||||
                                    newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    case BonusConstants.POINT_12:
 | 
			
		||||
                        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)) {
 | 
			
		||||
                            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)) {
 | 
			
		||||
                            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)) {
 | 
			
		||||
                            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)) {
 | 
			
		||||
                            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)) {
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_38, newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_38,
 | 
			
		||||
                                    newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    case BonusConstants.POINT_21:
 | 
			
		||||
                        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)) {
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_32, newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_32,
 | 
			
		||||
                                    newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    case BonusConstants.POINT_22:
 | 
			
		||||
                        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)) {
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_34, newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_34,
 | 
			
		||||
                                    newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    case BonusConstants.POINT_23:
 | 
			
		||||
                        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)) {
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_36, newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_36,
 | 
			
		||||
                                    newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    case BonusConstants.POINT_24:
 | 
			
		||||
                        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)) {
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_38, newRetailDetail.getPkMember(), newRetailDetail.getChildNode());
 | 
			
		||||
                            this.fillRetailDetail(targetRetailDetail, BonusConstants.POINT_38,
 | 
			
		||||
                                    newRetailDetail, settleDate, eBonusStage, bonusStageDataList);
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +209,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
     * 向下填充子点位
 | 
			
		||||
     */
 | 
			
		||||
    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) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -199,28 +221,34 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
                    || BonusConstants.POINT_33.equals(node)
 | 
			
		||||
                    || BonusConstants.POINT_35.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)
 | 
			
		||||
                    || BonusConstants.POINT_24.equals(node)
 | 
			
		||||
                    || BonusConstants.POINT_32.equals(node)
 | 
			
		||||
                    || BonusConstants.POINT_34.equals(node)
 | 
			
		||||
                    || BonusConstants.POINT_36.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)) {
 | 
			
		||||
            if (BonusConstants.POINT_31.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)
 | 
			
		||||
                    || 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)
 | 
			
		||||
                    || 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)
 | 
			
		||||
                    || 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
 | 
			
		||||
    public void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point,
 | 
			
		||||
                                 Long pkMember, Integer childNode) {
 | 
			
		||||
        ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + point, pkMember);
 | 
			
		||||
        ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + point, childNode);
 | 
			
		||||
    public boolean fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point,
 | 
			
		||||
                                    CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage,
 | 
			
		||||
                                    List<BonusStageData> bonusStageDataList) {
 | 
			
		||||
        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);
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
    public void handlePointFirst(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
 | 
			
		||||
                                 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.setPointFirst(newParentRetailDetail.getChildNode());
 | 
			
		||||
| 
						 | 
				
			
			@ -273,7 +351,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPointMemberFirst());
 | 
			
		||||
                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) {
 | 
			
		||||
                newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberSecond());
 | 
			
		||||
                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
 | 
			
		||||
    public void handlePointSecond(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
 | 
			
		||||
                                  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.setPointSecond(newParentRetailDetail.getChildNode());
 | 
			
		||||
| 
						 | 
				
			
			@ -341,7 +422,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberFirst());
 | 
			
		||||
                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) {
 | 
			
		||||
                newRetailDetail.setPointMemberFirst(memberDetail.getPkMember());
 | 
			
		||||
                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
 | 
			
		||||
    public void handlePointThird(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
 | 
			
		||||
                                 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.setPointThird(newParentRetailDetail.getChildNode());
 | 
			
		||||
| 
						 | 
				
			
			@ -431,7 +515,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
 | 
			
		|||
            if (null != memberDetail) {
 | 
			
		||||
                newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember());
 | 
			
		||||
                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) {
 | 
			
		||||
                newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember());
 | 
			
		||||
                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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ import cn.hutool.core.util.ReflectUtil;
 | 
			
		|||
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +12,15 @@ import java.util.Map;
 | 
			
		|||
 | 
			
		||||
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_12 = "12";
 | 
			
		||||
    public static final String POINT_21 = "21";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -540,7 +540,7 @@
 | 
			
		|||
        ALL_CONSUME_NEW_AMOUNT = ALL_CONSUME_NEW_AMOUNT ${symbol} #{orderExt.orderAmount},
 | 
			
		||||
        ALL_CONSUME_NEW_PV = ALL_CONSUME_NEW_PV ${symbol} #{orderExt.orderAchieve}
 | 
			
		||||
        WHERE
 | 
			
		||||
        PK_MEMBER = #{pkMember}
 | 
			
		||||
        PK_MEMBER = #{cuMember.pkId}
 | 
			
		||||
    </update>
 | 
			
		||||
    <update id="updateMemberRetailSecondRangeParent">
 | 
			
		||||
        UPDATE ${tableName}
 | 
			
		||||
| 
						 | 
				
			
			@ -554,13 +554,56 @@
 | 
			
		|||
            REP_TEAM_NEW_PV = REP_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve},
 | 
			
		||||
        </if>
 | 
			
		||||
        ALL_TEAM_NEW_AMOUNT = ALL_TEAM_NEW_AMOUNT ${symbol} #{orderExt.orderAmount},
 | 
			
		||||
        ALL_TEAM_NEW_PV = ALL_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve},
 | 
			
		||||
        ALL_TEAM_NEW_PV = ALL_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve}
 | 
			
		||||
        WHERE
 | 
			
		||||
        PK_MEMBER in
 | 
			
		||||
        <foreach collection="memberList" item="member" separator="," open="(" close=")">
 | 
			
		||||
            #{member.pkId}
 | 
			
		||||
        </foreach>
 | 
			
		||||
    </update>
 | 
			
		||||
    <insert id="initMemberRetailSecondRange">
 | 
			
		||||
            INSERT INTO ${tableName} (
 | 
			
		||||
            "PK_MEMBER",
 | 
			
		||||
            "PK_PARENT",
 | 
			
		||||
            "PK_GRADE",
 | 
			
		||||
            "PK_AWARDS",
 | 
			
		||||
            "ALL_CONSUME_NEW_AMOUNT",
 | 
			
		||||
            "ALL_CONSUME_NEW_PV",
 | 
			
		||||
            "ALL_TEAM_NEW_AMOUNT",
 | 
			
		||||
            "ALL_TEAM_NEW_PV",
 | 
			
		||||
            "REG_CONSUME_NEW_AMOUNT",
 | 
			
		||||
            "REG_CONSUME_NEW_PV",
 | 
			
		||||
            "REG_TEAM_NEW_AMOUNT",
 | 
			
		||||
            "REG_TEAM_NEW_PV",
 | 
			
		||||
            "REP_CONSUME_NEW_AMOUNT",
 | 
			
		||||
            "REP_CONSUME_NEW_PV",
 | 
			
		||||
            "REP_TEAM_NEW_AMOUNT",
 | 
			
		||||
            "REP_TEAM_NEW_PV"
 | 
			
		||||
            )
 | 
			
		||||
            SELECT
 | 
			
		||||
            #{member.pkId},
 | 
			
		||||
            #{member.pkParent},
 | 
			
		||||
            #{member.pkSettleGrade},
 | 
			
		||||
            #{member.pkAwards},
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            0
 | 
			
		||||
            FROM DUAL
 | 
			
		||||
            WHERE NOT EXISTS (
 | 
			
		||||
            SELECT 1
 | 
			
		||||
            FROM ${tableName}
 | 
			
		||||
            WHERE "PK_MEMBER" = #{member.pkId}
 | 
			
		||||
            )
 | 
			
		||||
    </insert>
 | 
			
		||||
 | 
			
		||||
    <select id="queryCuMemberRetailRangeParent" resultMap="CuMemberRetailRangeExt">
 | 
			
		||||
        <foreach collection="saOrderExtList" item="item" close=" " open=" " separator="union">
 | 
			
		||||
| 
						 | 
				
			
			@ -808,12 +851,14 @@
 | 
			
		|||
        where pk_parent = #{pkParent}
 | 
			
		||||
    </select>
 | 
			
		||||
    <select id="findParentMemberList" resultType="com.hzs.common.domain.member.ext.CuMemberExt">
 | 
			
		||||
        select cm.*
 | 
			
		||||
        from cu_member cm
 | 
			
		||||
            start
 | 
			
		||||
        with cm.pk_id = #{pkMember}
 | 
			
		||||
        connect by cm.pk_id = prior cm.pk_parent
 | 
			
		||||
        order by level
 | 
			
		||||
        select * from (
 | 
			
		||||
            select cm.*
 | 
			
		||||
            from cu_member cm
 | 
			
		||||
                start
 | 
			
		||||
            with cm.pk_id = #{pkMember}
 | 
			
		||||
            connect by cm.pk_id = prior cm.pk_parent
 | 
			
		||||
            order by level
 | 
			
		||||
            ) r where r.pk_id != #{pkMember}
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
</mapper>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -343,7 +343,7 @@
 | 
			
		|||
        create unique index PK_${tableName}
 | 
			
		||||
        on ${tableName}
 | 
			
		||||
        (
 | 
			
		||||
        PK_MEMBER, CHILD_NODE
 | 
			
		||||
        PK_MEMBER, CHILD_NODE, STAGE
 | 
			
		||||
        )
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -239,5 +239,9 @@
 | 
			
		|||
        </if>
 | 
			
		||||
        a.modified_time = sysdate
 | 
			
		||||
    </update>
 | 
			
		||||
    <select id="getByPkId" resultType="com.hzs.common.domain.member.base.CuMember"
 | 
			
		||||
            parameterType="java.io.Serializable">
 | 
			
		||||
        select * from cu_member where pk_id = ${pkId}
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
</mapper>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,8 +26,7 @@
 | 
			
		|||
            values (
 | 
			
		||||
            #{item.pkBonus}, #{item.pkOrder}, #{item.pkBonusItems}, #{item.incomeStatus},
 | 
			
		||||
            #{item.calType}, #{item.calAchieve}, #{item.calValue},
 | 
			
		||||
            #{item.pretaxIncome}, #{item.incomeTax}, #{item.realIncome},
 | 
			
		||||
            #{item.round}, #{item.second}, #{item.remark},
 | 
			
		||||
            #{item.pretaxIncome}, #{item.incomeTax}, #{item.realIncome}, #{item.remark},
 | 
			
		||||
            #{item.incomeRatio}, #{item.incomeDialRatio}, #{item.orderDialRatio},
 | 
			
		||||
            #{item.pkCreator}, #{item.childNode}, #{item.stage}, #{item.stageNum})
 | 
			
		||||
        </foreach>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -219,7 +219,7 @@ public class MemberStructureController extends BaseController {
 | 
			
		|||
    @Log(module = EOperationModule.MEMBER_RETAIL_TREE, business = EOperationBusiness.MEMBER_RETAIL_TREE, method = EOperationMethod.SELECT)
 | 
			
		||||
    @GetMapping("/three-framework")
 | 
			
		||||
    public AjaxResult Framework(Long memberSettlePeriodId, String memberCode,Integer stage,String childNode,Integer stageStatus) {
 | 
			
		||||
        if (memberSettlePeriodId == null || memberCode == null ||  stage == null || stageStatus == null || childNode == null) {
 | 
			
		||||
        if (memberSettlePeriodId == null || memberCode == null ||  stage == null || childNode == null) {
 | 
			
		||||
            log.error("参数错误");
 | 
			
		||||
            return AjaxResult.error(CommonMsgConstants.MISSING_PARAM);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -229,7 +229,7 @@ public class MemberStructureController extends BaseController {
 | 
			
		|||
        log.info("日结表名称{}",settleTableName);
 | 
			
		||||
        // 校验当前日结表是否存在
 | 
			
		||||
        Integer isFind = iCumemberRetailDetail.getFindCumemberRetailDetail(settleTableName);
 | 
			
		||||
        if (isFind != 1) {
 | 
			
		||||
        if (isFind == null || isFind != 1) {
 | 
			
		||||
            log.error("当前表名不存在{}",settleTableName);
 | 
			
		||||
            return AjaxResult.error("当前日结信息表不存在",settleTableName);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -251,7 +251,7 @@ public class MemberStructureController extends BaseController {
 | 
			
		|||
    @Log(module = EOperationModule.MEMBER_RETAIL_CHILDNODE, business = EOperationBusiness.MEMBER_RETAIL_CHILDNODE, method = EOperationMethod.SELECT)
 | 
			
		||||
    @GetMapping("/childList")
 | 
			
		||||
    public AjaxResult Framework(Long memberSettlePeriodId, String memberCode,Integer stage,Integer stageStatus) {
 | 
			
		||||
        if (memberSettlePeriodId == null || memberCode == null ||  stage == null || stageStatus == null) {
 | 
			
		||||
        if (memberSettlePeriodId == null || memberCode == null ||  stage == null) {
 | 
			
		||||
            log.error("参数错误");
 | 
			
		||||
            return AjaxResult.error(CommonMsgConstants.MISSING_PARAM);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -261,7 +261,7 @@ public class MemberStructureController extends BaseController {
 | 
			
		|||
        log.info("日结表名称{}",settleTableName);
 | 
			
		||||
        // 校验当前日结表是否存在
 | 
			
		||||
        Integer isFind = iCumemberRetailDetail.getFindCumemberRetailDetail(settleTableName);
 | 
			
		||||
        if (isFind != 1) {
 | 
			
		||||
        if (isFind == null || isFind != 1) {
 | 
			
		||||
            log.error("当前表名不存在{}",settleTableName);
 | 
			
		||||
            return AjaxResult.error("当前日结信息表不存在",settleTableName);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,9 @@
 | 
			
		|||
        WHERE
 | 
			
		||||
          cu.MEMBER_CODE = #{ memberCode }
 | 
			
		||||
          AND cud.STAGE = #{ stage }
 | 
			
		||||
          AND cud.STAGE_STATUS = #{ stageStatus }
 | 
			
		||||
        <if test="stageStatus != null">
 | 
			
		||||
            and cud.STAGE_STATUS = #{stageStatus}
 | 
			
		||||
        </if>
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="getFindCumemberRetailDetail" resultType="java.lang.Integer">
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +31,9 @@
 | 
			
		|||
        WHERE
 | 
			
		||||
            cu.MEMBER_CODE = #{ memberCode }
 | 
			
		||||
          AND STAGE = #{stage}
 | 
			
		||||
          AND STAGE_STATUS = #{stageStatus}
 | 
			
		||||
          <if test="stageStatus != null">
 | 
			
		||||
              and cud.STAGE_STATUS = #{stageStatus}
 | 
			
		||||
          </if>
 | 
			
		||||
          AND CHILD_NODE = #{childNode}
 | 
			
		||||
    </select>
 | 
			
		||||
</mapper>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,12 +13,9 @@ import com.hzs.common.core.utils.poi.ExcelUtil;
 | 
			
		|||
import com.hzs.common.core.web.controller.BaseController;
 | 
			
		||||
import com.hzs.common.core.web.page.TableDataInfo;
 | 
			
		||||
import com.hzs.common.domain.member.base.CuMember;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
 | 
			
		||||
import com.hzs.common.security.utils.SecurityUtils;
 | 
			
		||||
import com.hzs.common.service.ITransactionCommonService;
 | 
			
		||||
import com.hzs.member.base.IMemberServiceApi;
 | 
			
		||||
import com.hzs.report.member.service.IMemberService;
 | 
			
		||||
import com.hzs.report.member.vo.MallPVStatVO;
 | 
			
		||||
import com.hzs.report.member.vo.UmbrellaBelowPushVO;
 | 
			
		||||
import com.hzs.sale.order.ISaOrderServiceApi;
 | 
			
		||||
import org.apache.dubbo.config.annotation.DubboReference;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,6 @@ import com.hzs.common.core.utils.DateUtils;
 | 
			
		|||
import com.hzs.common.core.utils.StringUtils;
 | 
			
		||||
import com.hzs.common.core.utils.poi.ExcelUtil;
 | 
			
		||||
import com.hzs.common.core.web.controller.BaseController;
 | 
			
		||||
import com.hzs.common.core.web.domain.AjaxResult;
 | 
			
		||||
import com.hzs.common.core.web.page.PageDomain;
 | 
			
		||||
import com.hzs.common.core.web.page.TableDataInfo;
 | 
			
		||||
import com.hzs.common.core.web.page.TableSupport;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -616,7 +616,7 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
 | 
			
		|||
        saOrderExt.setPayType(EOrderPayType.ONLINE.getValue());
 | 
			
		||||
 | 
			
		||||
        RetailOrderRegisterParam registerParam = redisService.getCacheObject(CacheConstants.RETAIL_TEMP_REG_PARAM + pkMember + orderCode);
 | 
			
		||||
        boolean isShared = ObjectUtil.isNotEmpty(registerParam.getCuMemberShare());
 | 
			
		||||
        boolean isShared = ObjectUtil.isNotEmpty(registerParam) && ObjectUtil.isNotEmpty(registerParam.getCuMemberShare());
 | 
			
		||||
        if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
 | 
			
		||||
        || (isShared && EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType())
 | 
			
		||||
        ) {
 | 
			
		||||
| 
						 | 
				
			
			@ -745,18 +745,16 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
 | 
			
		|||
     */
 | 
			
		||||
    private Boolean handleMemberActivate(CuMember cuMember, SaOrderExt saOrder) {
 | 
			
		||||
        if ((null == cuMember.getIsActivate() || EYesNo.YES.getIntValue() != cuMember.getIsActivate())
 | 
			
		||||
                && EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType()
 | 
			
		||||
                && (EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType() || EOrderType.RETAIL_REPURCHASE.getValue() == saOrder.getOrderType())
 | 
			
		||||
        ) {
 | 
			
		||||
            // 会员激活状态为空 或 未激活,并且是 注册、升级 订单,判断会员是否激活
 | 
			
		||||
            if (saOrder.getBoxNum().compareTo(BigDecimal.ZERO) > 0) {
 | 
			
		||||
                // 存在指定盒数商品
 | 
			
		||||
                cuMember.setIsActivate(EYesNo.YES.getIntValue());
 | 
			
		||||
                if (EPayStatus.UNPAID.getValue() == cuMember.getPayStatus()) {
 | 
			
		||||
                    cuMember.setPayTime(saOrder.getPayTime());
 | 
			
		||||
                    cuMember.setPayStatus(EPayStatus.PAID.getValue());
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            // 存在指定盒数商品
 | 
			
		||||
            cuMember.setIsActivate(EYesNo.YES.getIntValue());
 | 
			
		||||
            if (EPayStatus.UNPAID.getValue() == cuMember.getPayStatus()) {
 | 
			
		||||
                cuMember.setPayTime(saOrder.getPayTime());
 | 
			
		||||
                cuMember.setPayStatus(EPayStatus.PAID.getValue());
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1154,7 +1154,10 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
 | 
			
		|||
            saOrderChargeLogService.save(saOrderChargeLog);
 | 
			
		||||
 | 
			
		||||
            // 撤销注册订单
 | 
			
		||||
            if (myOrderVO.getOrderType() == EOrderType.RETAIL_REGISTER.getValue()) {
 | 
			
		||||
            CuMember member = memberServiceApi.getMember(myOrderVO.getPkMember()).getData();
 | 
			
		||||
            if (myOrderVO.getOrderType() == EOrderType.RETAIL_REGISTER.getValue()
 | 
			
		||||
            || (myOrderVO.getOrderType() == EOrderType.RETAIL_REPURCHASE.getValue() && myOrderVO.getPayTime().equals(member.getPayTime()))
 | 
			
		||||
            ) {
 | 
			
		||||
                // 逻辑删除会员
 | 
			
		||||
                if (!memberServiceApi.singleRevokeMemberBySelfRevokeOrder(pkApprove, saOrderExt, businessCommissionDTO).getData()) {
 | 
			
		||||
                    throw new ServiceException("撤单失败");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
package com.hzs.common.core.utils;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.date.DateUtil;
 | 
			
		||||
import org.apache.commons.lang3.time.DateFormatUtils;
 | 
			
		||||
 | 
			
		||||
import java.text.ParseException;
 | 
			
		||||
| 
						 | 
				
			
			@ -910,4 +911,28 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 | 
			
		|||
        return daysStrList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public static Date getStartOfDay(Date date) {
 | 
			
		||||
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
 | 
			
		||||
        LocalDateTime endOfDay = localDateTime.withHour(0).withMinute(0).withSecond(0).withNano(0);
 | 
			
		||||
        return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
 | 
			
		||||
    }
 | 
			
		||||
    public static Date getEndOfDay(Date date) {
 | 
			
		||||
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
 | 
			
		||||
        LocalDateTime endOfDay = localDateTime.withHour(23).withMinute(59).withSecond(59).withNano(999999999);
 | 
			
		||||
        return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Date getStartOfDay(String day) {
 | 
			
		||||
        Date date = DateUtil.parse(day, "yyyy-MM-dd");
 | 
			
		||||
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
 | 
			
		||||
        LocalDateTime endOfDay = localDateTime.withHour(0).withMinute(0).withSecond(0).withNano(0);
 | 
			
		||||
        return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
 | 
			
		||||
    }
 | 
			
		||||
    public static Date getEndOfDay(String day) {
 | 
			
		||||
        Date date = DateUtil.parse(day, "yyyy-MM-dd");
 | 
			
		||||
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
 | 
			
		||||
        LocalDateTime endOfDay = localDateTime.withHour(23).withMinute(59).withSecond(59).withNano(999999999);
 | 
			
		||||
        return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -130,8 +130,16 @@ public class CuMemberRetailRangeExt extends CuMemberRetailRange {
 | 
			
		|||
    //  秒结 end
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 阶段一点位列表
 | 
			
		||||
     * 一阶段点位列表
 | 
			
		||||
     */
 | 
			
		||||
    private LinkedHashMap<Integer, CuMemberRetailDetail> oneDetailMap;
 | 
			
		||||
    /**
 | 
			
		||||
     * 二阶段点位列表
 | 
			
		||||
     */
 | 
			
		||||
    private LinkedHashMap<Integer, CuMemberRetailDetail> twoDetailMap;
 | 
			
		||||
    /**
 | 
			
		||||
     * 三阶段点位列表
 | 
			
		||||
     */
 | 
			
		||||
    private LinkedHashMap<Integer, CuMemberRetailDetail> threeDetailMap;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ public class CuMemberBonus extends BaseEntity {
 | 
			
		|||
    private BigDecimal carAwardPoints;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 注册阶段收益-众康
 | 
			
		||||
     * 阶段收益-众康
 | 
			
		||||
     */
 | 
			
		||||
    @TableField("STORE_INCOME")
 | 
			
		||||
    private BigDecimal storeIncome;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue