## 去掉乐学涉及的奖项、法宝券等;
This commit is contained in:
		
							parent
							
								
									ec226cc88e
								
							
						
					
					
						commit
						146aa63914
					
				| 
						 | 
				
			
			@ -1,76 +1,49 @@
 | 
			
		|||
package com.hzs.bonus.settle;
 | 
			
		||||
 | 
			
		||||
import com.hzs.common.core.domain.R;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
 | 
			
		||||
import com.hzs.common.domain.sale.order.SaOrder;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @description: 奖金结算
 | 
			
		||||
 * @author: sui q
 | 
			
		||||
 * @time: 2023/9/18 14:24
 | 
			
		||||
 * @classname: IMemberBonusSettleApi
 | 
			
		||||
 * @package_name: com.hzs.bonus.settle
 | 
			
		||||
 * version 1.0.0
 | 
			
		||||
 * 奖金结算
 | 
			
		||||
 */
 | 
			
		||||
public interface IMemberSettleBonusApi {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据秒结算会员奖金
 | 
			
		||||
     *
 | 
			
		||||
     * @param orderCode 订单
 | 
			
		||||
     * @return: List<SaOrderExt>
 | 
			
		||||
     * @Author: sui q
 | 
			
		||||
     * @Date: 2023/2/1 21:27
 | 
			
		||||
     */
 | 
			
		||||
    R<Boolean> calculateCumberBonusBySecond(String orderCode);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 定时任务每天自动计算奖金
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/4/10 14:23
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *  定时任务每天自动计算奖金
 | 
			
		||||
     **/
 | 
			
		||||
    R<Boolean> autoCalculateBonus(Date settleDate);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 备份网体
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2024/11/15 10:10
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *  备份网体
 | 
			
		||||
     **/
 | 
			
		||||
    void backupsSettleBonusEveryday();
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 定时任务每天自动公布奖金
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/4/10 14:23
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *  定时任务每天自动公布奖金
 | 
			
		||||
     **/
 | 
			
		||||
    void autoPublishBonus();
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 定时任务每天自动发放奖金
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/4/10 14:23
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *  定时任务每天自动发放奖金
 | 
			
		||||
     **/
 | 
			
		||||
    void autoGrantBonus();
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 每日生成业绩、月表统计数据
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/9/1 9:50
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *  每日生成业绩、月表统计数据
 | 
			
		||||
     **/
 | 
			
		||||
    void insertCuMemberAchieveByEveryDay();
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 退单回退业绩
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/9/22 9:27
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *  退单回退业绩
 | 
			
		||||
     **/
 | 
			
		||||
    Boolean chargeBackSaOrder(SaOrder saOrder);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,17 +3,12 @@ package com.hzs.activity.pick;
 | 
			
		|||
import com.hzs.common.core.domain.R;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.AcPickMemberLog;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.ext.AcPickExt;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 提货相关dubbo服务入口
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/5/15 11:20
 | 
			
		||||
 * @Classname: IAcPickServiceApi
 | 
			
		||||
 * @PackageName: com.hzs.activity.base
 | 
			
		||||
 * 提货相关dubbo服务入口
 | 
			
		||||
 */
 | 
			
		||||
public interface IAcPickServiceApi {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -27,29 +22,10 @@ public interface IAcPickServiceApi {
 | 
			
		|||
    R<?> handlePickOrder(Long pkMember, String orderCode);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 更新提货单
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/5/30 19:49
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *  更新提货单
 | 
			
		||||
     **/
 | 
			
		||||
    R<Boolean> updatePickUse(List<AcPickExt> acPickExtList, Integer signSource, List<AcPickMemberLog> acPickMemberLogList);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 更新提货单
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/5/30 19:49
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     **/
 | 
			
		||||
    R<Boolean> updatePickUse(List<AcPickExt> acPickExtList, List<AcPickMemberLog> acPickMemberLogList);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 查询会员提货使用记录
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/6/3 10:51
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     **/
 | 
			
		||||
    R<List<AcPickMemberLog>> queryPickMemberLog(List<SaOrderExt> saOrderExtList);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据订单查询邮费
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,24 +0,0 @@
 | 
			
		|||
package com.hzs.bonus.bonus.param;
 | 
			
		||||
 | 
			
		||||
import com.hzs.common.domain.activity.pick.AcPickMemberLog;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.ext.AcPickExt;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @description: 计算乐学易考特殊极差的param
 | 
			
		||||
 * @author: sui q
 | 
			
		||||
 * @time: 2023/6/3 14:37
 | 
			
		||||
 * @classname: LeXueRangeParam
 | 
			
		||||
 * @package_name: com.hzs.member.bonus.param
 | 
			
		||||
 * version 1.0.0
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class LeXueRangeParam implements Serializable {
 | 
			
		||||
 | 
			
		||||
    private List<AcPickExt> acPickExtList;
 | 
			
		||||
 | 
			
		||||
    private List<AcPickMemberLog> acPickMemberLogList;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,68 +0,0 @@
 | 
			
		|||
package com.hzs.bonus.bonus.param;/**
 | 
			
		||||
 * @Description:
 | 
			
		||||
 * @Author: yuhui
 | 
			
		||||
 * @Time: 2023/6/7 14:43
 | 
			
		||||
 * @Classname: TripleCycleListParam
 | 
			
		||||
 * @PackageName: com.hzs.member.marketnews.param
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonFormat;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *@BelongsProject: hzs_cloud
 | 
			
		||||
 *@BelongsPackage: com.hzs.member.marketnews.param
 | 
			
		||||
 *@Author: yh
 | 
			
		||||
 *@CreateTime: 2023-06-07  14:43
 | 
			
		||||
 *@Description: TODO
 | 
			
		||||
 *@Version: 1.0
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class TripleCycleListParam {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 会员主键
 | 
			
		||||
     */
 | 
			
		||||
    private Long pkMember;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 会员编号
 | 
			
		||||
     */
 | 
			
		||||
    private String memberCode;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 会员姓名
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    private String memberName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 开始时间
 | 
			
		||||
     */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd")
 | 
			
		||||
    private Date startCreationTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 结束时间
 | 
			
		||||
     */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd")
 | 
			
		||||
    private Date endCreationTime;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 国家
 | 
			
		||||
     */
 | 
			
		||||
    private Integer pkCountry;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 注册等级
 | 
			
		||||
     */
 | 
			
		||||
    private Integer pkRegisterGrade;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询会员信息
 | 
			
		||||
     */
 | 
			
		||||
    private String memberInfo;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -17,12 +17,7 @@ import java.time.temporal.ChronoUnit;
 | 
			
		|||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @description: 奖金计算
 | 
			
		||||
 * @author: sui q
 | 
			
		||||
 * @time: 2023/9/18 14:26
 | 
			
		||||
 * @classname: MemberBonusSettleProvider
 | 
			
		||||
 * @package_name: com.hzs.bonus.bonus.settle
 | 
			
		||||
 * version 1.0.0
 | 
			
		||||
 * 奖金计算
 | 
			
		||||
 */
 | 
			
		||||
@DubboService
 | 
			
		||||
@Slf4j
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ public interface ICuMemberBonusService extends IService<CuMemberBonus> {
 | 
			
		|||
    TableDataInfo queryMemberBonusDetailVoByCondition(BonusParam bonusParam);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 查询创客空间奖金来源
 | 
			
		||||
     *  查询创客空间奖金来源
 | 
			
		||||
     **/
 | 
			
		||||
    List<MemberBonusDetailVO> queryMemberMarkBonusDetailSource(BonusParam bonusParam);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ public interface ICuMemberBonusService extends IService<CuMemberBonus> {
 | 
			
		|||
    void insertOrUpdateCuMemberBonus(List<CuMemberBonus> cuMemberBonusList);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 查询会员奖金
 | 
			
		||||
     *  查询会员奖金
 | 
			
		||||
     **/
 | 
			
		||||
    List<CuMemberBonus> queryCuMemberBonus(int period, List<CuMemberBonus> cuMemberBonusList);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -130,24 +130,24 @@ public interface ICuMemberBonusService extends IService<CuMemberBonus> {
 | 
			
		|||
    List<CuMemberBonus> queryCuMemberBonusByCondition(Integer pkCountry, Integer grantStatus, Integer startPeriod, Integer endPeriod);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 定时任务每天自动计算奖金
 | 
			
		||||
     *  定时任务每天自动计算奖金
 | 
			
		||||
     * @param: startDate 开始时间
 | 
			
		||||
     * @param: endDate 结束时间
 | 
			
		||||
     **/
 | 
			
		||||
    Boolean autoCalculateBonus(Date startDate, Date endDate);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 备份网体
 | 
			
		||||
     *  备份网体
 | 
			
		||||
     **/
 | 
			
		||||
    void backupsSettleBonusEveryday();
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 查询会员奖金根据期间
 | 
			
		||||
     *  查询会员奖金根据期间
 | 
			
		||||
     **/
 | 
			
		||||
    Set<Long> queryMemberBonusByPeriod(Integer period);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 查询会员一周周期的拓展累计,复购拓展累计
 | 
			
		||||
     *  查询会员一周周期的拓展累计,复购拓展累计
 | 
			
		||||
     **/
 | 
			
		||||
    Map<Long, CuMemberBonus> queryWeekMemberBonus(int startPeriod, int endPeriod);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,12 +48,12 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
 | 
			
		|||
    private ICuMemberBonusDelayService iCuMemberBonusDelayService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算直推奖
 | 
			
		||||
     *
 | 
			
		||||
     * @param settleTableName      结算表
 | 
			
		||||
     * @param bonusConfigDTO       参数
 | 
			
		||||
     * @param systemConfigMap      系统参数
 | 
			
		||||
     * @param firPurchaseOrderList 首单
 | 
			
		||||
     * @Description: 计算直推奖
 | 
			
		||||
     * @return: void
 | 
			
		||||
     */
 | 
			
		||||
    List<CuMemberBonusPush> calculateRecommendBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, BonusConfigDTO bonusConfigDTO,
 | 
			
		||||
                                                    Map<String, String> systemConfigMap, List<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<String, BdAwards> awardsMap) {
 | 
			
		||||
| 
						 | 
				
			
			@ -75,141 +75,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
 | 
			
		|||
                cuMemberBonusPushList.add(cuMemberBonusPush);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // TODO new 乐学直推级差收益,需要按新逻辑修改(级差等级4个,封顶上限修改)
 | 
			
		||||
        // V2订单6000,最多发3000,V1拿400,V4最多拿3000,前面等级没拿,后面等级就多拿一份
 | 
			
		||||
        List<SaOrderExt> specialOrderList = new ArrayList<>();
 | 
			
		||||
        firPurchaseOrderList.forEach(saOrderExt -> {
 | 
			
		||||
            if (EOrderType.SPECIAL_REGISTER_ORDER.getValue() == saOrderExt.getOrderType() ||
 | 
			
		||||
                    EOrderType.SPECIAL_UPGRADE_ORDER.getValue() == saOrderExt.getOrderType()) {
 | 
			
		||||
                specialOrderList.add(saOrderExt);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        if (specialOrderList.size() > 0) {
 | 
			
		||||
            Set<Long> memberSet = new HashSet<>();
 | 
			
		||||
            specialOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember()));
 | 
			
		||||
            cuMemberSettleExtList = iCuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet);
 | 
			
		||||
            getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
 | 
			
		||||
            // 计算奖金
 | 
			
		||||
            for (SaOrderExt saOrderExt : specialOrderList) {
 | 
			
		||||
                // 订单能发放总奖金
 | 
			
		||||
                BigDecimal maxBonus;
 | 
			
		||||
                // 根据金额验证最大金额
 | 
			
		||||
                if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V4_AMOUNT)) {
 | 
			
		||||
                    // 订单金额大于 128000,封顶奖金 43000
 | 
			
		||||
                    maxBonus = MagicNumberConstants.V4_V4_BONUS;
 | 
			
		||||
                } else if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V3_AMOUNT)) {
 | 
			
		||||
                    // 订单金额大于 36000,封顶奖金 18000
 | 
			
		||||
                    maxBonus = MagicNumberConstants.V4_V3_BONUS;
 | 
			
		||||
                } else if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V2_AMOUNT)) {
 | 
			
		||||
                    // 订单金额大于 6000,封顶奖金 3000
 | 
			
		||||
                    maxBonus = MagicNumberConstants.V4_V2_BONUS;
 | 
			
		||||
                } else if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V1_AMOUNT)) {
 | 
			
		||||
                    // 订单金额大于 2000,封顶奖金 1000
 | 
			
		||||
                    maxBonus = MagicNumberConstants.V4_V1_BONUS;
 | 
			
		||||
                } else {
 | 
			
		||||
                    // 订单金额小于 2000,没有奖金
 | 
			
		||||
                    maxBonus = BigDecimal.ZERO;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                CuMemberSettleExt sourceSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
 | 
			
		||||
                Long pkParent = sourceSettleExt.getPkParent();
 | 
			
		||||
                // 已发放奖金
 | 
			
		||||
                BigDecimal grantBonus = BigDecimal.ZERO;
 | 
			
		||||
                while (ComputeUtil.compareGreaterThan(maxBonus, grantBonus)) {
 | 
			
		||||
                    CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(pkParent);
 | 
			
		||||
                    if (targetMemberSettleExt == null) {
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    // 死点没有奖金
 | 
			
		||||
                    if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
 | 
			
		||||
                            || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
 | 
			
		||||
                            || validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIRECT_INCOME.getValue())) {
 | 
			
		||||
                        // 非正常点位 或 停算收益 或 没有这个奖项,则直接跳过当前人
 | 
			
		||||
                        pkParent = targetMemberSettleExt.getPkParent();
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    // 初始化会员奖金汇总
 | 
			
		||||
                    CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
 | 
			
		||||
                    // 直推奖金明细
 | 
			
		||||
                    int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIRECT_INCOME.getValue());
 | 
			
		||||
                    CuMemberBonusPush cuMemberBonusPush = getCuMemberBonusPush(saOrderExt, targetMemberSettleExt, cuMemberBonus, pkBonusItem);
 | 
			
		||||
                    // 不算轮次
 | 
			
		||||
                    cuMemberBonusPush.setCalType(ECalType.VALUE.getValue());
 | 
			
		||||
                    cuMemberBonusPush.setRound(-1);
 | 
			
		||||
                    cuMemberBonusPush.setSecond(0);
 | 
			
		||||
                    // 值
 | 
			
		||||
                    cuMemberBonusPush.setCalValue(BigDecimal.ZERO);
 | 
			
		||||
                    BigDecimal pretaxIncome;
 | 
			
		||||
                    // 验证等级,根据等级给奖金
 | 
			
		||||
                    if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V4_AMOUNT)) {
 | 
			
		||||
                        // 订单金额 128000,V4推拿43000,V3推拿10800,V2推拿1800,V1推拿400
 | 
			
		||||
                        pretaxIncome = computePushRangeBonus(targetMemberSettleExt, MagicNumberConstants.V4_V4_BONUS, MagicNumberConstants.V3_V4_BONUS, MagicNumberConstants.V2_V4_BONUS, MagicNumberConstants.V1_V_BONUS);
 | 
			
		||||
                    } else if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V3_AMOUNT)) {
 | 
			
		||||
                        // 订单金额 36000,V4推拿18000,V3推拿10800,V2推拿1800,V1推拿400
 | 
			
		||||
                        pretaxIncome = computePushRangeBonus(targetMemberSettleExt, MagicNumberConstants.V4_V3_BONUS, MagicNumberConstants.V3_V3_BONUS, MagicNumberConstants.V2_V3_BONUS, MagicNumberConstants.V1_V_BONUS);
 | 
			
		||||
                    } else if (ComputeUtil.compareValue(saOrderExt.getOrderAmount(), MagicNumberConstants.V2_AMOUNT)) {
 | 
			
		||||
                        // 订单金额 6000,V4推拿3000,V3推拿2400,V2推拿1800,V1推拿400
 | 
			
		||||
                        pretaxIncome = computePushRangeBonus(targetMemberSettleExt, MagicNumberConstants.V4_V2_BONUS, MagicNumberConstants.V3_V2_BONUS, MagicNumberConstants.V2_V2_BONUS, MagicNumberConstants.V1_V_BONUS);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        // 订单金额 2000,V4推拿1000,V3推拿800,V2推拿600,V1推拿400
 | 
			
		||||
                        pretaxIncome = computePushRangeBonus(targetMemberSettleExt, MagicNumberConstants.V4_V1_BONUS, MagicNumberConstants.V3_V1_BONUS, MagicNumberConstants.V2_V1_BONUS, MagicNumberConstants.V1_V_BONUS);
 | 
			
		||||
                    }
 | 
			
		||||
                    pretaxIncome = ComputeUtil.computeSubtract(pretaxIncome, grantBonus);
 | 
			
		||||
                    if (!ComputeUtil.compareValue(pretaxIncome)) {
 | 
			
		||||
                        pkParent = targetMemberSettleExt.getPkParent();
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    grantBonus = ComputeUtil.computeAdd(grantBonus, pretaxIncome);
 | 
			
		||||
                    cuMemberBonusPush.setPretaxIncome(pretaxIncome);
 | 
			
		||||
                    cuMemberBonusPush.setRealIncome(pretaxIncome);
 | 
			
		||||
                    cuMemberBonusPush.setIncomeTax(BigDecimal.ZERO);
 | 
			
		||||
 | 
			
		||||
                    // TODO new 需要扣除20%
 | 
			
		||||
                    BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusPush, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
 | 
			
		||||
                    if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusPush.getIncomeStatus()) {
 | 
			
		||||
                        cuMemberBonus.setGlobalPoints(ComputeUtil.computeAdd(cuMemberBonus.getGlobalPoints(), cuMemberBonusPush.getPretaxIncome()));
 | 
			
		||||
 | 
			
		||||
                        // 实发收益总计
 | 
			
		||||
//                        BigDecimal realIncome = ReflectUtils.invokeGetter(cuMemberBonusPush, BonusFieldConstants.REAL_INCOME);
 | 
			
		||||
//                        cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
 | 
			
		||||
 | 
			
		||||
                        // TODO new 首购实发小计、实发收益总计,比原来多累计到首购实发小计
 | 
			
		||||
                        setFirstPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusPush);
 | 
			
		||||
                    }
 | 
			
		||||
                    cuMemberBonusPush.setRemark(String.format(BonusMsgConstants.RECOMMEND_SPECIAL_DIRECT, saOrderExt.getOrderCode(),
 | 
			
		||||
                            sourceSettleExt.getMemberCode() + sourceSettleExt.getMemberName(),
 | 
			
		||||
                            targetMemberSettleExt.getMemberCode() + targetMemberSettleExt.getMemberName(),
 | 
			
		||||
                            cuMemberBonusPush.getRealIncome()));
 | 
			
		||||
 | 
			
		||||
                    cuMemberBonusPushList.add(cuMemberBonusPush);
 | 
			
		||||
                    pkParent = targetMemberSettleExt.getPkParent();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return cuMemberBonusPushList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算直推奖金
 | 
			
		||||
     */
 | 
			
		||||
    private BigDecimal computePushRangeBonus(CuMemberSettleExt targetMemberSettleExt,
 | 
			
		||||
                                             BigDecimal V4Bonus, BigDecimal V3Bonus,
 | 
			
		||||
                                             BigDecimal V2Bonus, BigDecimal V1Bonus) {
 | 
			
		||||
        BigDecimal pretaxIncome;
 | 
			
		||||
        if (targetMemberSettleExt.getGradeValue() == EGrade.S_VIP.getValue()) {
 | 
			
		||||
            pretaxIncome = V4Bonus;
 | 
			
		||||
        } else if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
 | 
			
		||||
            pretaxIncome = V3Bonus;
 | 
			
		||||
        } else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) {
 | 
			
		||||
            pretaxIncome = V2Bonus;
 | 
			
		||||
        } else {
 | 
			
		||||
            pretaxIncome = V1Bonus;
 | 
			
		||||
        }
 | 
			
		||||
        return pretaxIncome;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算某条订单的推荐奖金
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,17 +126,13 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
        BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry());
 | 
			
		||||
        // 4-N 拓展比例(一般为26%)
 | 
			
		||||
        BigDecimal expandRatio = bonusExpand.getExpandRatio();
 | 
			
		||||
//        log.info("expandRatio 配置N使用的比例 : {}", expandRatio);
 | 
			
		||||
        if (ComputeUtil.compareValue(editExpandRatio)) {
 | 
			
		||||
            expandRatio = editExpandRatio;
 | 
			
		||||
        }
 | 
			
		||||
//        log.info("expandRatio 2 : {}", expandRatio);
 | 
			
		||||
        BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, BigDecimal.valueOf(endTouch));
 | 
			
		||||
        if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getRepurchaseRatio())) {
 | 
			
		||||
//            log.info("expandRatio 3 : {}", bdGrade.getRepurchaseRatio());
 | 
			
		||||
            return bdGrade.getRepurchaseRatio();
 | 
			
		||||
        }
 | 
			
		||||
//        log.info("expandRatio N均过比较 : {}", countryExpandRatio);
 | 
			
		||||
        return countryExpandRatio;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -362,10 +358,11 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得 直推收益的备注
 | 
			
		||||
     *
 | 
			
		||||
     * @param saOrderExt           订单编号
 | 
			
		||||
     * @param cuMemberBonusPush    直推奖
 | 
			
		||||
     * @param cuMemberSettleExtMap 存储会员网体的map
 | 
			
		||||
     * @Description: 获得 直推收益的备注
 | 
			
		||||
     */
 | 
			
		||||
    protected void recommendRemark(SaOrderExt saOrderExt, CuMemberBonusPush cuMemberBonusPush, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap) {
 | 
			
		||||
        CuMemberSettleExt sourceCuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
 | 
			
		||||
| 
						 | 
				
			
			@ -386,12 +383,10 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 记录需要修改的会员结算表数据, 安置的
 | 
			
		||||
     *
 | 
			
		||||
     * @param cuMemberSettleExtMap  会员结算
 | 
			
		||||
     * @param cuMemberSettleExtList 查询出来的结算数据
 | 
			
		||||
     * @Description: 记录需要修改的会员结算表数据, 安置的
 | 
			
		||||
     * @return: void
 | 
			
		||||
     * @Author: sui q
 | 
			
		||||
     * @Date: 2022/11/15 9:52
 | 
			
		||||
     */
 | 
			
		||||
    protected void getSecondMemberSettle(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, List<CuMemberSettleExt> cuMemberSettleExtList) {
 | 
			
		||||
        cuMemberSettleExtList.forEach(cuMemberSettleExt -> {
 | 
			
		||||
| 
						 | 
				
			
			@ -693,31 +688,12 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得 分享极差收益的备注
 | 
			
		||||
     * 获得 报单服务费收益的备注
 | 
			
		||||
     *
 | 
			
		||||
     * @param saOrderExt              订单编号
 | 
			
		||||
     * @param cuMemberBonusRange      报单服务费
 | 
			
		||||
     * @param sourceCuMemberSettleExt 提供奖金的人
 | 
			
		||||
     * @param targetCuMemberSettleExt 获得奖金的人
 | 
			
		||||
     */
 | 
			
		||||
    protected void xueRangeRemark(SaOrderExt saOrderExt, CuMemberBonusRange cuMemberBonusRange, CuMemberSettleExt sourceCuMemberSettleExt,
 | 
			
		||||
                                  CuMemberSettleExt targetCuMemberSettleExt) {
 | 
			
		||||
        String remark = String.format(BonusMsgConstants.LE_XUE_SHARE_RANGE, saOrderExt.getOrderCode(),
 | 
			
		||||
                sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
 | 
			
		||||
                targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
 | 
			
		||||
                ComputeUtil.computeDivide(targetCuMemberSettleExt.getRetailPrice(), BigDecimal.valueOf(1)), targetCuMemberSettleExt.getGradeValue());
 | 
			
		||||
        cuMemberBonusRange.setRemark(remark);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param saOrder                 订单编号
 | 
			
		||||
     * @param cuMemberBonusDetail     云代首购
 | 
			
		||||
     * @param sourceCuMemberSettleExt 提供奖金的人
 | 
			
		||||
     * @param targetCuMemberSettleExt 获得奖金的人
 | 
			
		||||
     * @Description: 获得 报单服务费收益的备注
 | 
			
		||||
     * @return: String
 | 
			
		||||
     * @Author: sui q
 | 
			
		||||
     * @Date: 2022/11/17 11:22
 | 
			
		||||
     */
 | 
			
		||||
    protected void cloudAgentRemark(SaOrder saOrder, CuMemberBonusDetail cuMemberBonusDetail, CuMemberSettleExt sourceCuMemberSettleExt,
 | 
			
		||||
                                    CuMemberSettleExt targetCuMemberSettleExt, String msg) {
 | 
			
		||||
| 
						 | 
				
			
			@ -729,14 +705,12 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得 报单服务费收益的备注
 | 
			
		||||
     *
 | 
			
		||||
     * @param saOrder                 订单编号
 | 
			
		||||
     * @param cuMemberBonusDetail     云代首购
 | 
			
		||||
     * @param sourceCuMemberSettleExt 提供奖金的人
 | 
			
		||||
     * @param targetCuMemberSettleExt 获得奖金的人
 | 
			
		||||
     * @Description: 获得 报单服务费收益的备注
 | 
			
		||||
     * @return: String
 | 
			
		||||
     * @Author: sui q
 | 
			
		||||
     * @Date: 2022/11/17 11:22
 | 
			
		||||
     */
 | 
			
		||||
    protected void repurchaseCouponsRemark(SaOrder saOrder, CuMemberBonusDetail cuMemberBonusDetail, CuMemberSettleExt sourceCuMemberSettleExt,
 | 
			
		||||
                                           CuMemberSettleExt targetCuMemberSettleExt) {
 | 
			
		||||
| 
						 | 
				
			
			@ -987,12 +961,10 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取会员的极差等级,验证会员是否有奖衔
 | 
			
		||||
     *
 | 
			
		||||
     * @param awardsMap        奖衔
 | 
			
		||||
     * @param parentMemberTree 会员树历史记录
 | 
			
		||||
     * @Description: 获取会员的极差等级,验证会员是否有奖衔
 | 
			
		||||
     * @return: String
 | 
			
		||||
     * @Author: sui q
 | 
			
		||||
     * @Date: 2023/1/4 14:22
 | 
			
		||||
     */
 | 
			
		||||
    protected String getMemberCountryKey(Map<String, BdAwards> awardsMap, CuMemberTree parentMemberTree, Map<Long, CuAwardsControl> cuAwardsControlMap) {
 | 
			
		||||
        Integer pkAwards = getPkRealAwards(parentMemberTree.getPkMember(), parentMemberTree.getPkAwards(), cuAwardsControlMap);
 | 
			
		||||
| 
						 | 
				
			
			@ -1010,12 +982,10 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取会员的极差等级,验证会员是否有奖衔
 | 
			
		||||
     *
 | 
			
		||||
     * @param awardsMap        奖衔
 | 
			
		||||
     * @param parentMemberTree 会员树历史记录
 | 
			
		||||
     * @Description: 获取会员的极差等级,验证会员是否有奖衔
 | 
			
		||||
     * @return: String
 | 
			
		||||
     * @Author: sui q
 | 
			
		||||
     * @Date: 2023/1/4 14:22
 | 
			
		||||
     */
 | 
			
		||||
    protected String getMemberKey(Map<String, BdAwards> awardsMap, CuMemberTree parentMemberTree) {
 | 
			
		||||
        String key = Integer.toString(ERangeType.AWARDS.getValue()) + parentMemberTree.getPkAwards();
 | 
			
		||||
| 
						 | 
				
			
			@ -1027,13 +997,11 @@ public abstract class BonusSettleHandle {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 奖金明细 报单服务费、分红、云代首购、云代复购、海豆收益
 | 
			
		||||
     *
 | 
			
		||||
     * @param saOrderExt            订单
 | 
			
		||||
     * @param targetMemberSettleExt 奖金网体
 | 
			
		||||
     * @param cuMemberBonus         奖金主表
 | 
			
		||||
     * @Description: 奖金明细 报单服务费、分红、云代首购、云代复购、海豆收益
 | 
			
		||||
     * @return: CuMemberBonusDetail
 | 
			
		||||
     * @Author: sui q
 | 
			
		||||
     * @Date: 2023/1/5 16:31
 | 
			
		||||
     */
 | 
			
		||||
    protected CuMemberBonusDetail getCuMemberBonusDetail(SaOrder saOrderExt, CuMemberSettleExt targetMemberSettleExt, CuMemberBonus cuMemberBonus) {
 | 
			
		||||
        CuMemberBonusDetail cuMemberBonusDetail = CuMemberBonusDetail.builder()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,15 +3,12 @@ package com.hzs.bonus.bonus.service.impl;
 | 
			
		|||
import cn.hutool.core.bean.BeanUtil;
 | 
			
		||||
import cn.hutool.core.collection.CollectionUtil;
 | 
			
		||||
import com.hzs.activity.pick.IAcPickServiceApi;
 | 
			
		||||
import com.hzs.bonus.bonus.param.LeXueRangeParam;
 | 
			
		||||
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
 | 
			
		||||
import com.hzs.common.core.constant.CountryConstants;
 | 
			
		||||
import com.hzs.common.core.constant.MagicNumberConstants;
 | 
			
		||||
import com.hzs.common.core.constant.msg.BonusMsgConstants;
 | 
			
		||||
import com.hzs.common.core.enums.*;
 | 
			
		||||
import com.hzs.common.core.utils.ComputeUtil;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.AcPickMemberLog;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.ext.AcPickExt;
 | 
			
		||||
import com.hzs.common.domain.bonus.BdBonusDeduct;
 | 
			
		||||
import com.hzs.common.domain.bonus.risk.CuMemberRiskControl;
 | 
			
		||||
import com.hzs.common.domain.member.base.CuAwardsControl;
 | 
			
		||||
| 
						 | 
				
			
			@ -20,8 +17,6 @@ import com.hzs.common.domain.member.detail.CuMemberAssess;
 | 
			
		|||
import com.hzs.common.domain.member.ext.CuBonusExpandExt;
 | 
			
		||||
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
 | 
			
		||||
import com.hzs.common.domain.sale.order.SaOrderItems;
 | 
			
		||||
import com.hzs.common.domain.system.config.BdAwards;
 | 
			
		||||
import com.hzs.common.domain.system.config.BdGrade;
 | 
			
		||||
import com.hzs.system.config.dto.BonusConfigDTO;
 | 
			
		||||
| 
						 | 
				
			
			@ -35,12 +30,9 @@ import org.springframework.stereotype.Component;
 | 
			
		|||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 计算复购的奖金处理类
 | 
			
		||||
 * @Classname: BonusSettlePurchaseHandle
 | 
			
		||||
 * @PackageName: com.hzs.member.bonus.service.impl
 | 
			
		||||
 * 计算复购的奖金处理类
 | 
			
		||||
 */
 | 
			
		||||
@Slf4j
 | 
			
		||||
@Component
 | 
			
		||||
| 
						 | 
				
			
			@ -384,37 +376,13 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
 | 
			
		|||
     */
 | 
			
		||||
    List<CuMemberBonusRange> calculateRepurchaseRangeBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate, Map<String, RangeDTO> rangeDtoMap, Map<String, BdAwards> awardsMap,
 | 
			
		||||
                                                           BonusConfigDTO bonusConfigDTO, List<SaOrderExt> purchaseOrderList, Integer period,
 | 
			
		||||
                                                           Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap, LeXueRangeParam leXueRangeParam) {
 | 
			
		||||
        // 计算复购极差的订单
 | 
			
		||||
//        List<SaOrderExt> chinaRangeOrderList = new ArrayList<>();
 | 
			
		||||
        // 计算乐学易考特殊复购极差的订单
 | 
			
		||||
        List<SaOrderExt> specialOrderList = new ArrayList<>();
 | 
			
		||||
        purchaseOrderList.forEach(saOrderExt -> {
 | 
			
		||||
            /*if (Objects.equals(EOrderType.REPURCHASE_ORDER.getValue(), saOrderExt.getOrderType()) ||
 | 
			
		||||
                    Objects.equals(EOrderType.THIRD_ORDER.getValue(), saOrderExt.getOrderType())) {
 | 
			
		||||
                rangeOrderList.add(saOrderExt);
 | 
			
		||||
            } else */
 | 
			
		||||
            if (Objects.equals(EOrderType.SPECIAL_REPURCHASE_ORDER.getValue(), saOrderExt.getOrderType())) {
 | 
			
		||||
//                rangeOrderList.add(saOrderExt);
 | 
			
		||||
                specialOrderList.add(saOrderExt);
 | 
			
		||||
            }/* else if (Objects.equals(saOrderExt.getPkCountry(), CountryConstants.CHINA_COUNTRY)) {
 | 
			
		||||
                if (!Objects.equals(EOrderType.FANS_ORDER.getValue(), saOrderExt.getOrderType()) &&
 | 
			
		||||
                        !Objects.equals(EOrderType.HAI_FUN_UPGRADE_ORDER.getValue(), saOrderExt.getOrderType())) {
 | 
			
		||||
                    chinaRangeOrderList.add(saOrderExt);
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                overseasRangeOrderList.add(saOrderExt);
 | 
			
		||||
            }*/
 | 
			
		||||
        });
 | 
			
		||||
                                                           Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap) {
 | 
			
		||||
        List<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>();
 | 
			
		||||
        // 处理血缘上网体信息
 | 
			
		||||
        getMemberParentBySaOrder(cuMemberSettleExtMap, settleTableName, purchaseOrderList);
 | 
			
		||||
        // TODO new 乐学不需要考核相关
 | 
			
		||||
        // 考核相关
 | 
			
		||||
//        List<CuMemberSettleExt> cuMemberSettleExtList = getMemberParentBySaOrder(cuMemberSettleExtMap, settleTableName, purchaseOrderList);
 | 
			
		||||
//        Map<Long, CuMemberAssess> cuMemberAssessMap = getCuMemberAssessMap(cuMemberSettleExtMap, settleDate, cuMemberSettleExtList);
 | 
			
		||||
 | 
			
		||||
        Map<Long, CuMemberAssess> cuMemberAssessMap = null;
 | 
			
		||||
 | 
			
		||||
//        if (chinaRangeOrderList.size() > 0) {
 | 
			
		||||
//            Map<String, List<SaOrderRangeDto>> saOrderRangeDtoMap = saOrderServiceApi.queryOrderRangeVO(chinaRangeOrderList).getData();
 | 
			
		||||
//            Map<String, RangeDTO> rangePkDtoMap = new HashMap<>(ComputeUtil.mapInitCapacity(rangeDtoMap.size()));
 | 
			
		||||
| 
						 | 
				
			
			@ -487,104 +455,6 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
 | 
			
		|||
//                }
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
        // 乐学复购级差,商品4个等级购买差价300,这个位置进行拨出
 | 
			
		||||
        if (specialOrderList.size() > 0) {
 | 
			
		||||
            for (SaOrderExt saOrderExt : specialOrderList) {
 | 
			
		||||
                for (SaOrderItems saOrderItems : saOrderExt.getOrderItemsExtList()) {
 | 
			
		||||
                    if (EYesNo.YES.getIntValue() == saOrderItems.getIsGift() || ComputeUtil.compareGreaterThan(MagicNumberConstants.LXYK_V3, saOrderItems.getPrice())) {
 | 
			
		||||
                        // 赠品或者商品价格小于2680,不需要处理,2380已经是V4价格了,不存在往上拨出的极差
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    // 最大发放奖金
 | 
			
		||||
                    BigDecimal maxBonus;
 | 
			
		||||
                    if (ComputeUtil.compareValue(saOrderItems.getPrice(), MagicNumberConstants.LXYK_V1)) {
 | 
			
		||||
                        // 价格大于等于3280,最多拨900
 | 
			
		||||
                        // 2025.04.28 需求调整去掉 V1 等级,最低为2980,最多拨600
 | 
			
		||||
                        maxBonus = MagicNumberConstants.LXYK_BONUS_600;
 | 
			
		||||
                    } else if (ComputeUtil.compareValue(saOrderItems.getPrice(), MagicNumberConstants.LXYK_V2)) {
 | 
			
		||||
                        // 价格大于等于2980,最多拨600
 | 
			
		||||
                        maxBonus = MagicNumberConstants.LXYK_BONUS_600;
 | 
			
		||||
                    } else if (ComputeUtil.compareValue(saOrderItems.getPrice(), MagicNumberConstants.LXYK_V3)) {
 | 
			
		||||
                        // 价格大于等于2680,最多拨拨300
 | 
			
		||||
                        maxBonus = MagicNumberConstants.LXYK_BONUS_300;
 | 
			
		||||
                    } else {
 | 
			
		||||
                        maxBonus = BigDecimal.ZERO;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    // 获取血缘伞上的推荐人 一定要发完,从推荐人开始发
 | 
			
		||||
                    // 当前会员
 | 
			
		||||
                    CuMemberSettleExt sourceMemberTree = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
 | 
			
		||||
 | 
			
		||||
                    // 累计发放奖金
 | 
			
		||||
                    BigDecimal grantBonus = BigDecimal.ZERO;
 | 
			
		||||
                    while (ComputeUtil.compareGreaterThan(maxBonus, grantBonus)) {
 | 
			
		||||
                        // 最大发放奖金 大于 累计发放奖金,则继续处理
 | 
			
		||||
                        if (null == sourceMemberTree) {
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                        int pkGrade = sourceMemberTree.getPkGrade();
 | 
			
		||||
                        if (pkGrade == 3 || pkGrade == 4) {
 | 
			
		||||
                            // 如果是 V1 直接跳过,开始计算 V2
 | 
			
		||||
                            // 2025.04.28 需求调整去掉 V1 等级,V1 V2 就直接跳过,开始计算V3
 | 
			
		||||
                            pkGrade = 5;
 | 
			
		||||
                        }
 | 
			
		||||
                        // 推荐人
 | 
			
		||||
                        CuMemberSettleExt parentMemberTree = cuMemberSettleExtMap.get(sourceMemberTree.getPkParent());
 | 
			
		||||
                        // 找血缘线上高等级推荐人
 | 
			
		||||
                        parentMemberTree = getSpecialRangeCuMemberTree(cuMemberSettleExtMap, bonusConfigDTO, sourceMemberTree, parentMemberTree, cuMemberAssessMap, pkGrade);
 | 
			
		||||
                        if (null == parentMemberTree) {
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                        // 级差奖金
 | 
			
		||||
                        BigDecimal rangeOrder = BigDecimal.ZERO;
 | 
			
		||||
//                        if (parentMemberTree.getPkGrade() == 4) {
 | 
			
		||||
//                            // V2 拿 300
 | 
			
		||||
//                            // 2025.04.28 需求调整去掉 V1 等级,V2 不需要拿了
 | 
			
		||||
//                            rangeOrder = MagicNumberConstants.LXYK_BONUS_300;
 | 
			
		||||
//                        } else
 | 
			
		||||
                        if (parentMemberTree.getPkGrade() == 5) {
 | 
			
		||||
                            // V3前没有V2,拿600; V3前有V2,拿300
 | 
			
		||||
                            // 2025.04.28 需求调整去掉 V1 等级,V3 拿300
 | 
			
		||||
                            rangeOrder = MagicNumberConstants.LXYK_BONUS_300;
 | 
			
		||||
//                            if (ComputeUtil.computeSubtract(maxBonus, grantBonus).compareTo(new BigDecimal(900)) == 0) {
 | 
			
		||||
//                                rangeOrder = MagicNumberConstants.LXYK_BONUS_600;
 | 
			
		||||
//                            } else {
 | 
			
		||||
//                                rangeOrder = MagicNumberConstants.LXYK_BONUS_300;
 | 
			
		||||
//                            }
 | 
			
		||||
                        } else if (parentMemberTree.getPkGrade() == 6) {
 | 
			
		||||
                            // V4 拿剩下所有
 | 
			
		||||
                            rangeOrder = ComputeUtil.computeSubtract(maxBonus, grantBonus);
 | 
			
		||||
                        }
 | 
			
		||||
                        grantBonus = ComputeUtil.computeAdd(grantBonus, rangeOrder);
 | 
			
		||||
                        // 实际发放复购级差(多个商品情况下,需要乘商品数量)
 | 
			
		||||
                        BigDecimal repurchaseRangeBonus = ComputeUtil.computeMultiply(rangeOrder, saOrderItems.getWaresQuantity());
 | 
			
		||||
 | 
			
		||||
                        CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, parentMemberTree);
 | 
			
		||||
                        CuMemberBonusRange cuMemberBonusRange = getCuMemberBonusRange(bonusConfigDTO, saOrderExt, parentMemberTree, cuMemberBonus);
 | 
			
		||||
                        cuMemberBonusRange.setCalAchieve(saOrderExt.getOrderAchieve());
 | 
			
		||||
                        cuMemberBonusRange.setCalValue(BigDecimal.ZERO);
 | 
			
		||||
                        cuMemberBonusRange.setPretaxIncome(repurchaseRangeBonus);
 | 
			
		||||
                        cuMemberBonusRange.setPkRange(0);
 | 
			
		||||
                        cuMemberBonusRange.setPkBeforeRange(0);
 | 
			
		||||
                        cuMemberBonusRange.setPkOrderItems(0L);
 | 
			
		||||
                        String remark = String.format(BonusMsgConstants.LE_SHARE_RANGE, saOrderExt.getOrderCode(),
 | 
			
		||||
                                sourceMemberTree.getMemberCode() + sourceMemberTree.getMemberName(),
 | 
			
		||||
                                parentMemberTree.getMemberCode() + parentMemberTree.getMemberName(), repurchaseRangeBonus);
 | 
			
		||||
                        cuMemberBonusRange.setRemark(remark);
 | 
			
		||||
                        // 封装复购级差,处理明细、扣项等
 | 
			
		||||
                        packageRepurchaseRange(bonusConfigDTO, cuMemberBonusRangeList, saOrderExt, cuMemberBonus, cuMemberBonusRange, repurchaseRangeBonus);
 | 
			
		||||
                        // 发放到最高级后跳出
 | 
			
		||||
                        if (parentMemberTree.getPkGrade() == 6) {
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                        sourceMemberTree = cuMemberSettleExtMap.get(parentMemberTree.getPkMember());
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // 学特殊级差
 | 
			
		||||
            calculateLeXueRangeBonus(settleTableName, rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, leXueRangeParam, specialOrderList, cuMemberBonusRangeList);
 | 
			
		||||
        }
 | 
			
		||||
        return cuMemberBonusRangeList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -609,285 +479,6 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
 | 
			
		|||
        cuMemberBonusRangeList.add(cuMemberBonusRange);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学特殊复购级差,根据法宝券进行计算奖金
 | 
			
		||||
     * 每个等级最多拨出一张法宝券,给200奖金,遇到V4为止
 | 
			
		||||
     * 如果购买时会员没有使用券,那么同等级也可以拨出一张
 | 
			
		||||
     *
 | 
			
		||||
     * @param settleTableName
 | 
			
		||||
     * @param rangeDtoMap
 | 
			
		||||
     * @param bonusConfigDTO
 | 
			
		||||
     * @param period
 | 
			
		||||
     * @param cuMemberBonusMap
 | 
			
		||||
     * @param leXueRangeParam
 | 
			
		||||
     * @param specialOrderList
 | 
			
		||||
     * @param cuMemberBonusRangeList
 | 
			
		||||
     */
 | 
			
		||||
    private void calculateLeXueRangeBonus(String settleTableName, Map<String, RangeDTO> rangeDtoMap, BonusConfigDTO bonusConfigDTO,
 | 
			
		||||
                                          Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, LeXueRangeParam leXueRangeParam,
 | 
			
		||||
                                          List<SaOrderExt> specialOrderList, List<CuMemberBonusRange> cuMemberBonusRangeList) {
 | 
			
		||||
        // 旧逻辑: 计算乐学易考特殊复购极差,找第一个vip,svip,找到有代金券,代金券-1,奖金给金额,第一个是svip后,就不给
 | 
			
		||||
        if (specialOrderList.size() > 0) {
 | 
			
		||||
            // 查找订单血缘上会员
 | 
			
		||||
            Set<Long> expandMemberSet = specialOrderList.stream().distinct().map(SaOrderExt::getPkMember).collect(Collectors.toSet());
 | 
			
		||||
            List<CuMemberSettleExt> specialMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParentForSpecial(settleTableName, expandMemberSet);
 | 
			
		||||
 | 
			
		||||
            // 重算的时候首先先把数量还回来,在重新计算,查询订单扣除的记录
 | 
			
		||||
            List<AcPickMemberLog> acPickMemberLogList = iAcPickServiceApi.queryPickMemberLog(specialOrderList).getData();
 | 
			
		||||
            // key: 会员ID + 提货专区ID
 | 
			
		||||
            Map<String, AcPickMemberLog> pickMemberLogMap = new HashMap<>(ComputeUtil.mapInitCapacity(acPickMemberLogList.size()));
 | 
			
		||||
            if (CollectionUtil.isNotEmpty(acPickMemberLogList)) {
 | 
			
		||||
                acPickMemberLogList.forEach(acPickMemberLog -> pickMemberLogMap.put(acPickMemberLog.getPkMember().toString() + acPickMemberLog.getPkPick(), acPickMemberLog));
 | 
			
		||||
                leXueRangeParam.setAcPickMemberLogList(acPickMemberLogList);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 初始化父类网体的值
 | 
			
		||||
            Map<Long, CuMemberSettleExt> specialmeberSettleExtMap = new HashMap<>();
 | 
			
		||||
            getMemberSettle(specialmeberSettleExtMap, specialMemberSettleExtList);
 | 
			
		||||
            // 还原数量
 | 
			
		||||
            specialmeberSettleExtMap.forEach((pkMember, cumemberSettleExt) -> {
 | 
			
		||||
                String key = pkMember.toString() + cumemberSettleExt.getApPkId();
 | 
			
		||||
                if (pickMemberLogMap.containsKey(key)) {
 | 
			
		||||
                    cumemberSettleExt.setUsableQuantity(cumemberSettleExt.getUsableQuantity() + pickMemberLogMap.get(key).getPickQuantity());
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
            List<AcPickExt> acPickExtList = new ArrayList<>();
 | 
			
		||||
            for (SaOrderExt saOrderExt : specialOrderList) {
 | 
			
		||||
                // 商品使用法宝券数量(key: 商品ID,value: 法宝券数量)
 | 
			
		||||
                Map<Integer, Integer> productPickMap = new HashMap<>();
 | 
			
		||||
                for (SaOrderItemsExt saOrderItemsExt : saOrderExt.getOrderItemsExtList()) {
 | 
			
		||||
                    if (null != saOrderItemsExt.getUsePick() && saOrderItemsExt.getUsePick() != 0) {
 | 
			
		||||
                        productPickMap.put(saOrderItemsExt.getPkWares(), saOrderItemsExt.getUsePick());
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                for (SaOrderItemsExt saOrderItemsExt : saOrderExt.getOrderItemsExtList()) {
 | 
			
		||||
                    if (EYesNo.YES.getIntValue() == saOrderItemsExt.getIsGift()
 | 
			
		||||
                            || ComputeUtil.compareEqual(saOrderItemsExt.getPrice(), BigDecimal.ZERO)
 | 
			
		||||
                            || ComputeUtil.compareEqual(saOrderItemsExt.getAchievement(), BigDecimal.ZERO)) {
 | 
			
		||||
                        // 赠品 或者 金额为0 或者 业绩为0 则不进行处理
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    // 订单对应的会员
 | 
			
		||||
                    CuMemberSettleExt sourceMemberSettleExt = specialmeberSettleExtMap.get(saOrderExt.getPkMember());
 | 
			
		||||
                    if (null == sourceMemberSettleExt) {
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (validatePkBonusItems(bonusConfigDTO, sourceMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_RANGE_INCOME.getValue())) {
 | 
			
		||||
                        // 没有这个奖项,直接退出
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    // 当前订单明细使用了法宝券
 | 
			
		||||
                    Integer useNum = productPickMap.get(saOrderItemsExt.getPkWares());
 | 
			
		||||
 | 
			
		||||
                    if (null != useNum) {
 | 
			
		||||
                        // 订单使用了法宝券
 | 
			
		||||
                        if (useNum.equals(saOrderItemsExt.getWaresQuantity())) {
 | 
			
		||||
                            // 法宝券和商品数量一致
 | 
			
		||||
                            this.usePick(specialmeberSettleExtMap, rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                                    sourceMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
 | 
			
		||||
                        } else {
 | 
			
		||||
                            // 法宝券和商品数量不一致,需要拆分处理
 | 
			
		||||
                            // 使用法宝券部分处理
 | 
			
		||||
                            SaOrderItemsExt tmpItems1 = BeanUtil.copyProperties(saOrderItemsExt, SaOrderItemsExt.class);
 | 
			
		||||
                            tmpItems1.setWaresQuantity(useNum);
 | 
			
		||||
                            tmpItems1.setUsePick(useNum);
 | 
			
		||||
                            this.usePick(specialmeberSettleExtMap, rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, tmpItems1,
 | 
			
		||||
                                    sourceMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
 | 
			
		||||
 | 
			
		||||
                            // 未使用法宝券部分处理
 | 
			
		||||
                            SaOrderItemsExt tmpItems2 = BeanUtil.copyProperties(saOrderItemsExt, SaOrderItemsExt.class);
 | 
			
		||||
                            tmpItems2.setWaresQuantity(saOrderItemsExt.getWaresQuantity() - useNum);
 | 
			
		||||
                            tmpItems2.setUsePick(saOrderItemsExt.getWaresQuantity() - useNum);
 | 
			
		||||
                            this.notUsePick(specialmeberSettleExtMap, rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, tmpItems2,
 | 
			
		||||
                                    sourceMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        // 没使用法宝券
 | 
			
		||||
                        this.notUsePick(specialmeberSettleExtMap, rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                                sourceMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (acPickExtList.size() > 0) {
 | 
			
		||||
                leXueRangeParam.setAcPickExtList(acPickExtList);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 使用法宝券处理
 | 
			
		||||
     */
 | 
			
		||||
    private void usePick(Map<Long, CuMemberSettleExt> specialmeberSettleExtMap, Map<String, RangeDTO> rangeDtoMap, BonusConfigDTO bonusConfigDTO, Integer period,
 | 
			
		||||
                         Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt, SaOrderItemsExt saOrderItemsExt, CuMemberSettleExt sourceMemberSettleExt,
 | 
			
		||||
                         List<CuMemberBonusRange> cuMemberBonusRangeList, List<AcPickExt> acPickExtList) {
 | 
			
		||||
        // 订单会员推荐人
 | 
			
		||||
        Long pkParent = sourceMemberSettleExt.getPkParent();
 | 
			
		||||
        // 订单会员等级
 | 
			
		||||
        int gradeValue = sourceMemberSettleExt.getGradeValue();
 | 
			
		||||
 | 
			
		||||
        // 找不到父级了或者找到第一个svip直接跳出
 | 
			
		||||
        boolean V2Flag = Boolean.TRUE;
 | 
			
		||||
        boolean V3Flag = Boolean.TRUE;
 | 
			
		||||
        while (true) {
 | 
			
		||||
            CuMemberSettleExt targetMemberSettleExt = specialmeberSettleExtMap.get(pkParent);
 | 
			
		||||
            if (null == targetMemberSettleExt) {
 | 
			
		||||
                // 上面没有推荐人了,直接结束
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 法宝券和商品数量一致
 | 
			
		||||
            if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) {
 | 
			
		||||
                // 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过
 | 
			
		||||
                if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                        sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
 | 
			
		||||
                    V2Flag = Boolean.FALSE;
 | 
			
		||||
                }
 | 
			
		||||
            } else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) {
 | 
			
		||||
                // 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过
 | 
			
		||||
                if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                        sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
 | 
			
		||||
                    V3Flag = Boolean.FALSE;
 | 
			
		||||
                }
 | 
			
		||||
            } else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) {
 | 
			
		||||
                // 订单会员等级小于推荐人等级 并且 推荐人是 V4
 | 
			
		||||
                if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                        sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            pkParent = targetMemberSettleExt.getPkParent();
 | 
			
		||||
            sourceMemberSettleExt = targetMemberSettleExt;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 未使用法宝券处理
 | 
			
		||||
     */
 | 
			
		||||
    private void notUsePick(Map<Long, CuMemberSettleExt> specialmeberSettleExtMap, Map<String, RangeDTO> rangeDtoMap, BonusConfigDTO bonusConfigDTO, Integer period,
 | 
			
		||||
                            Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt, SaOrderItemsExt saOrderItemsExt, CuMemberSettleExt sourceMemberSettleExt,
 | 
			
		||||
                            List<CuMemberBonusRange> cuMemberBonusRangeList, List<AcPickExt> acPickExtList) {
 | 
			
		||||
        // 订单会员推荐人
 | 
			
		||||
        Long pkParent = sourceMemberSettleExt.getPkParent();
 | 
			
		||||
        // 订单会员等级
 | 
			
		||||
        int gradeValue = sourceMemberSettleExt.getGradeValue();
 | 
			
		||||
 | 
			
		||||
        // 找不到父级了或者找到第一个svip直接跳出
 | 
			
		||||
        boolean V1Flag = Boolean.TRUE;
 | 
			
		||||
        boolean V2Flag = Boolean.TRUE;
 | 
			
		||||
        boolean V3Flag = Boolean.TRUE;
 | 
			
		||||
        while (true) {
 | 
			
		||||
            CuMemberSettleExt targetMemberSettleExt = specialmeberSettleExtMap.get(pkParent);
 | 
			
		||||
            if (null == targetMemberSettleExt) {
 | 
			
		||||
                // 上面没有推荐人了,直接结束
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 法宝券和商品数量一致
 | 
			
		||||
            if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.YOU_KE.getValue() == targetMemberSettleExt.getGradeValue() && V1Flag && V2Flag && V3Flag) {
 | 
			
		||||
                // 订单会员等级小于推荐人等级 并且 推荐人是 V1 并且 V1 V2 V3 都没有算过
 | 
			
		||||
                if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                        sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
 | 
			
		||||
                    V1Flag = Boolean.FALSE;
 | 
			
		||||
                }
 | 
			
		||||
            } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) {
 | 
			
		||||
                // 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过
 | 
			
		||||
                if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                        sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
 | 
			
		||||
                    V2Flag = Boolean.FALSE;
 | 
			
		||||
                }
 | 
			
		||||
            } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) {
 | 
			
		||||
                // 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过
 | 
			
		||||
                if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                        sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
 | 
			
		||||
                    V3Flag = Boolean.FALSE;
 | 
			
		||||
                }
 | 
			
		||||
            } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) {
 | 
			
		||||
                // 订单会员等级小于推荐人等级 并且 推荐人是 V4
 | 
			
		||||
                if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
 | 
			
		||||
                        sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            pkParent = targetMemberSettleExt.getPkParent();
 | 
			
		||||
            sourceMemberSettleExt = targetMemberSettleExt;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 封装法宝券抵扣相关
 | 
			
		||||
     */
 | 
			
		||||
    private boolean handlePick(Map<String, RangeDTO> rangeDtoMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
 | 
			
		||||
                               SaOrderExt saOrderExt, SaOrderItemsExt saOrderItemsExt, CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt,
 | 
			
		||||
                               List<CuMemberBonusRange> cuMemberBonusRangeList, List<AcPickExt> acPickExtList) {
 | 
			
		||||
        AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt,
 | 
			
		||||
                targetMemberSettleExt, cuMemberBonusRangeList);
 | 
			
		||||
        if (null != acPickExt) {
 | 
			
		||||
            acPickExtList.add(acPickExt);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计算封装乐学复购特殊级差(法宝券)返回扣除提货法宝券
 | 
			
		||||
     *
 | 
			
		||||
     * @param rangeDtoMap
 | 
			
		||||
     * @param bonusConfigDTO
 | 
			
		||||
     * @param period
 | 
			
		||||
     * @param cuMemberBonusMap
 | 
			
		||||
     * @param saOrderExt
 | 
			
		||||
     * @param saOrderItemsExt
 | 
			
		||||
     * @param sourceMemberSettleExt
 | 
			
		||||
     * @param targetMemberSettleExt
 | 
			
		||||
     * @param cuMemberBonusRangeList
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    private AcPickExt calculateRangeBonus(Map<String, RangeDTO> rangeDtoMap, BonusConfigDTO bonusConfigDTO, Integer period,
 | 
			
		||||
                                          Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt, SaOrderItemsExt saOrderItemsExt,
 | 
			
		||||
                                          CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt,
 | 
			
		||||
                                          List<CuMemberBonusRange> cuMemberBonusRangeList) {
 | 
			
		||||
        if (targetMemberSettleExt.getUsableQuantity() != null && targetMemberSettleExt.getUsableQuantity() > 0) {
 | 
			
		||||
            // 扣减数量(如果剩余法宝券 大于等于 商品数量,则使用商品数量,否则使用法宝券数量)
 | 
			
		||||
            int waresQuantity = targetMemberSettleExt.getUsableQuantity() >= saOrderItemsExt.getWaresQuantity() ? saOrderItemsExt.getWaresQuantity() : targetMemberSettleExt.getUsableQuantity();
 | 
			
		||||
 | 
			
		||||
            CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
 | 
			
		||||
            CuMemberBonusRange cuMemberBonusRange = getCuMemberBonusRange(bonusConfigDTO, saOrderExt, targetMemberSettleExt, cuMemberBonus);
 | 
			
		||||
            cuMemberBonusRange.setCalAchieve(saOrderItemsExt.getAchievement());
 | 
			
		||||
            cuMemberBonusRange.setCalValue(BigDecimal.ZERO);
 | 
			
		||||
            cuMemberBonusRange.setPretaxIncome(ComputeUtil.computeMultiply(BigDecimal.valueOf(waresQuantity),
 | 
			
		||||
                    ComputeUtil.computeDivide(targetMemberSettleExt.getRetailPrice(), BigDecimal.valueOf(1))));
 | 
			
		||||
            String key = targetMemberSettleExt.getPkSettleCountry().toString() + ERangeType.GRADE.getValue() + targetMemberSettleExt.getPkGrade();
 | 
			
		||||
            cuMemberBonusRange.setPkRange(rangeDtoMap.get(key).getPkRange());
 | 
			
		||||
            String beforeKey = targetMemberSettleExt.getPkSettleCountry().toString() + ERangeType.GRADE.getValue() + targetMemberSettleExt.getPkGrade();
 | 
			
		||||
            cuMemberBonusRange.setPkBeforeRange(rangeDtoMap.get(beforeKey).getPkRange());
 | 
			
		||||
            cuMemberBonusRange.setIncomeRatio(ComputeUtil.computeDivide(ComputeUtil.computeMultiply(cuMemberBonusRange.getPretaxIncome(), BigDecimal.valueOf(1)), saOrderExt.getOrderAmount()));
 | 
			
		||||
            cuMemberBonusRange.setPkOrderItems(0L);
 | 
			
		||||
            // 计算比例
 | 
			
		||||
            cuMemberBonusRange.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_RANGE_INCOME.getValue()));
 | 
			
		||||
            // 收益占比
 | 
			
		||||
            BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusRange, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
 | 
			
		||||
            xueRangeRemark(saOrderExt, cuMemberBonusRange, sourceMemberSettleExt, targetMemberSettleExt);
 | 
			
		||||
            if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusRange.getIncomeStatus()) {
 | 
			
		||||
                cuMemberBonus.setRepurRangeIncome(ComputeUtil.computeAdd(cuMemberBonus.getRepurRangeIncome(), cuMemberBonusRange.getPretaxIncome()));
 | 
			
		||||
                setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange);
 | 
			
		||||
            }
 | 
			
		||||
            cuMemberBonusRangeList.add(cuMemberBonusRange);
 | 
			
		||||
            targetMemberSettleExt.setUsableQuantity(targetMemberSettleExt.getUsableQuantity() - waresQuantity);
 | 
			
		||||
            AcPickExt acPickExt = new AcPickExt();
 | 
			
		||||
            acPickExt.setPkId(targetMemberSettleExt.getApPkId());
 | 
			
		||||
            acPickExt.setPkMember(targetMemberSettleExt.getPkMember());
 | 
			
		||||
            acPickExt.setOrderCode(saOrderExt.getOrderCode());
 | 
			
		||||
            acPickExt.setPickType(EPickType.COUPON.getValue());
 | 
			
		||||
            acPickExt.setUsedQuantity(waresQuantity);
 | 
			
		||||
            acPickExt.setPkBaseConfig(0L);
 | 
			
		||||
            acPickExt.setPkDataId(targetMemberSettleExt.getPkDataId());
 | 
			
		||||
            return acPickExt;
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学复购极差,找下一个等级的推荐人
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,6 @@ package com.hzs.bonus.bonus.service.impl;
 | 
			
		|||
import cn.hutool.core.bean.BeanUtil;
 | 
			
		||||
import cn.hutool.core.collection.CollectionUtil;
 | 
			
		||||
import cn.hutool.json.JSONUtil;
 | 
			
		||||
import com.hzs.activity.pick.IAcPickServiceApi;
 | 
			
		||||
import com.hzs.bonus.achieve.param.MemberAchieveParam;
 | 
			
		||||
import com.hzs.bonus.achieve.service.ICuMemberAchieveService;
 | 
			
		||||
import com.hzs.bonus.achieve.service.ICuMemberRangeService;
 | 
			
		||||
| 
						 | 
				
			
			@ -14,12 +13,10 @@ import com.hzs.bonus.base.service.ICuMemberAchieveLogService;
 | 
			
		|||
import com.hzs.bonus.base.service.ICuMemberService;
 | 
			
		||||
import com.hzs.bonus.bonus.param.BdWaresBonusParam;
 | 
			
		||||
import com.hzs.bonus.bonus.param.BonusExpandParam;
 | 
			
		||||
import com.hzs.bonus.bonus.param.LeXueRangeParam;
 | 
			
		||||
import com.hzs.bonus.bonus.service.*;
 | 
			
		||||
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
 | 
			
		||||
import com.hzs.bonus.bonus.vo.MemberBonusDetailCalVO;
 | 
			
		||||
import com.hzs.bonus.detail.service.ICuMemberAwardsService;
 | 
			
		||||
import com.hzs.bonus.detail.service.ICuMemberLevelService;
 | 
			
		||||
import com.hzs.bonus.risk.service.ICuMemberRiskControlService;
 | 
			
		||||
import com.hzs.bonus.swing.service.ICuMemberSwingNetLogService;
 | 
			
		||||
import com.hzs.common.core.config.BdConfig;
 | 
			
		||||
| 
						 | 
				
			
			@ -90,8 +87,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
    IMemberServiceApi iMemberServiceApi;
 | 
			
		||||
    @DubboReference
 | 
			
		||||
    ISaOrderServiceApi iSaOrderServiceApi;
 | 
			
		||||
    @DubboReference
 | 
			
		||||
    IAcPickServiceApi iAcPickServiceApi;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ICuMemberTreeService iCuMemberTreeService;
 | 
			
		||||
| 
						 | 
				
			
			@ -100,8 +95,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
    @Autowired
 | 
			
		||||
    private ICuMemberAwardsService iCuMemberAwardsService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ICuMemberLevelService iCuMemberLevelService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ICuMemberService iCuMemberService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ICuMemberAchieveLogService iCuMemberAchieveLogService;
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +292,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
            // c)增加奖衔记录表
 | 
			
		||||
            Map<String, BdAwards> awardsMap = iAwardsServiceApi.getAwards().getData();
 | 
			
		||||
            List<CuMemberBonusRange> cuMemberBonusRangeList = bonusSettlePurchaseHandle.calculateRepurchaseRangeBonus(cuMemberSettleExtMap, settleTableName, settleDate, rangeDtoMap, awardsMap,
 | 
			
		||||
                    bonusConfigDTO, Collections.singletonList(saOrderExt), period, cuMemberBonusMap, cuAwardsControlMap, new LeXueRangeParam());
 | 
			
		||||
                    bonusConfigDTO, Collections.singletonList(saOrderExt), period, cuMemberBonusMap, cuAwardsControlMap);
 | 
			
		||||
            if (cuMemberBonusMap.size() > 0) {
 | 
			
		||||
                saveCuMemberBonus(period, settleDate, cuMemberBonusMap);
 | 
			
		||||
                Set<Long> memberIdSet = iCuMemberBonusService.queryMemberBonusByPeriod(period);
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +349,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @Description: 每日计算会员奖金,最终的奖金
 | 
			
		||||
     * 每日计算会员奖金,最终的奖金
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class)
 | 
			
		||||
| 
						 | 
				
			
			@ -477,8 +470,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
            // 奖金记录明细(统一入库使用)
 | 
			
		||||
            BonusRecordDetailVO recordDetailVO = new BonusRecordDetailVO();
 | 
			
		||||
            // 计算奖金(主入口)
 | 
			
		||||
            // 乐学易考奖金计算,回写代金券数量
 | 
			
		||||
            LeXueRangeParam leXueRangeParam = calculateBonusBySaOrderList(settleDate, period, yesterdayPeriod, currentSettleTableName,
 | 
			
		||||
            calculateBonusBySaOrderList(settleDate, period, yesterdayPeriod, currentSettleTableName,
 | 
			
		||||
                    firPurchaseOrderList, repurchaseOrderList, mallOrderList, awardsMap, gradeMap, bonusConfigDTO, cuMemberBonusMap,
 | 
			
		||||
                    recordDetailVO, cuMemberSettleExtMap, expandOrderList, newExpandFlag);
 | 
			
		||||
            // 计算复购券
 | 
			
		||||
| 
						 | 
				
			
			@ -559,15 +551,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
            }
 | 
			
		||||
            // 奖金计算结束,统计拨比、业绩、4-N拨比
 | 
			
		||||
            iCuBonusExpandService.updateCuBonusExpandRatio(BonusExpandParam.builder().settleDate(DateUtils.parseStringToDate(settleDate)).build(), "cu_member_bonus");
 | 
			
		||||
 | 
			
		||||
            if (leXueRangeParam != null) {
 | 
			
		||||
                // 乐学相关,处理提货数据
 | 
			
		||||
                if (CollectionUtil.isNotEmpty(leXueRangeParam.getAcPickExtList())) {
 | 
			
		||||
                    if (!iAcPickServiceApi.updatePickUse(leXueRangeParam.getAcPickExtList(), leXueRangeParam.getAcPickMemberLogList()).getData()) {
 | 
			
		||||
                        throw new RuntimeException("更新提货专区数量失败");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
| 
						 | 
				
			
			@ -794,12 +777,11 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
     * @param cuMemberSettleExtMap 会员结算map
 | 
			
		||||
     * @param expandOrderList      拓展收益订单(首购+复购)
 | 
			
		||||
     */
 | 
			
		||||
    private LeXueRangeParam calculateBonusBySaOrderList(String settleDate, Integer period, Integer yesterdayPeriod, String settleTableName,
 | 
			
		||||
                                                        List<SaOrderExt> firPurchaseOrderList, List<SaOrderExt> repurchaseOrderList, List<SaOrderExt> mallOrderList,
 | 
			
		||||
                                                        Map<String, BdAwards> awardsMap, Map<Integer, BdGrade> gradeMap, BonusConfigDTO bonusConfigDTO,
 | 
			
		||||
                                                        Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO,
 | 
			
		||||
                                                        Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, List<SaOrderExt> expandOrderList, boolean newExpandFlag) {
 | 
			
		||||
        LeXueRangeParam leXueRangeParam = null;
 | 
			
		||||
    private void calculateBonusBySaOrderList(String settleDate, Integer period, Integer yesterdayPeriod, String settleTableName,
 | 
			
		||||
                                             List<SaOrderExt> firPurchaseOrderList, List<SaOrderExt> repurchaseOrderList, List<SaOrderExt> mallOrderList,
 | 
			
		||||
                                             Map<String, BdAwards> awardsMap, Map<Integer, BdGrade> gradeMap, BonusConfigDTO bonusConfigDTO,
 | 
			
		||||
                                             Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO,
 | 
			
		||||
                                             Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, List<SaOrderExt> expandOrderList, boolean newExpandFlag) {
 | 
			
		||||
        Map<Long, CuAwardsControl> cuAwardsControlMap = getCuAwardsControlMap();
 | 
			
		||||
        Map<Long, CuMemberBonus> weekMemberBonusMap = getWeekMemberBonusMap(settleDate, period);
 | 
			
		||||
        Map<String, String> systemConfigMap = iSystemConfigServiceApi.getBonusSystemConfig().getData();
 | 
			
		||||
| 
						 | 
				
			
			@ -822,7 +804,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
        // 先计算复购在计算首购
 | 
			
		||||
        // 计算复购
 | 
			
		||||
        if (CollectionUtil.isNotEmpty(repurchaseOrderList)) {
 | 
			
		||||
            leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, settleTableName, settleDate, systemConfigMap, bonusConfigDTO,
 | 
			
		||||
            calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, settleTableName, settleDate, systemConfigMap, bonusConfigDTO,
 | 
			
		||||
                    repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, bonusRecordDetailVO, awardsMap, awardsList, cuAwardsControlMap, cuBonusExpandExtMap, rangeDtoMap,
 | 
			
		||||
                    newExpandFlag);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -861,8 +843,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
            cuMemberBonusCoach.setIncomeDialRatio(BigDecimal.ZERO);
 | 
			
		||||
            cuMemberBonusCoach.setOrderDialRatio(BigDecimal.ZERO);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return leXueRangeParam;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Map<Long, CuMemberBonus> getWeekMemberBonusMap(String settleDate, Integer period) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1171,7 +1151,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
     * @param purchaseOrderList 复购订单
 | 
			
		||||
     * @param rangeDtoMap       乐学奖金使用的汇率map
 | 
			
		||||
     */
 | 
			
		||||
    private LeXueRangeParam calculatePurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate,
 | 
			
		||||
    private void calculatePurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate,
 | 
			
		||||
                                                   Map<String, String> systemConfigMap, BonusConfigDTO bonusConfigDTO, List<SaOrderExt> purchaseOrderList, Integer period,
 | 
			
		||||
                                                   Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO,
 | 
			
		||||
                                                   Map<String, BdAwards> awardsMap, List<BdAwards> awardsList, Map<Long, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap,
 | 
			
		||||
| 
						 | 
				
			
			@ -1208,10 +1188,9 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
            bonusRecordDetailVO.setCuMemberBonusCoachList(cuMemberBonusCoachList);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //****************************乐学极差(复购)*****************************/
 | 
			
		||||
        LeXueRangeParam leXueRangeParam = new LeXueRangeParam();
 | 
			
		||||
        //****************************复购极差*****************************/
 | 
			
		||||
        List<CuMemberBonusRange> cuMemberBonusRangeList = bonusSettlePurchaseHandle.calculateRepurchaseRangeBonus(cuMemberSettleExtMap, settleTableName, settleDate, rangeDtoMap, awardsMap,
 | 
			
		||||
                bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap, cuAwardsControlMap, leXueRangeParam);
 | 
			
		||||
                bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap, cuAwardsControlMap);
 | 
			
		||||
        bonusRecordDetailVO.setCuMemberBonusRangeList(cuMemberBonusRangeList);
 | 
			
		||||
 | 
			
		||||
        Map<Long, MemberBonusDetailCalVO> memberBonusDetailCalVoMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size()));
 | 
			
		||||
| 
						 | 
				
			
			@ -1262,8 +1241,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
            cuMemberBonusRange.setIncomeDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getRepRangeIncome(), memberBonusDetailCalVO.getRealIncome()));
 | 
			
		||||
            cuMemberBonusRange.setOrderDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getRealIncome(), saOrderExt.getOrderAmount()));
 | 
			
		||||
        });
 | 
			
		||||
        // 插入奖金表 奖金明细表
 | 
			
		||||
        return leXueRangeParam;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			@ -1317,7 +1294,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @Description: 计算嗨粉订单的奖金
 | 
			
		||||
     * 计算嗨粉订单的奖金
 | 
			
		||||
     *
 | 
			
		||||
     * @return: void
 | 
			
		||||
     */
 | 
			
		||||
    private void calculateHiFunOrder(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, Map<String, RangeDTO> rangeDtoMap,
 | 
			
		||||
| 
						 | 
				
			
			@ -1354,7 +1332,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @Description: 计算订单奖金累计值
 | 
			
		||||
     * 计算订单奖金累计值
 | 
			
		||||
     *
 | 
			
		||||
     * @return: void
 | 
			
		||||
     */
 | 
			
		||||
    private MemberBonusDetailCalVO calculateOrderRatio(Map<Long, MemberBonusDetailCalVO> memberBonusDetailVoMap, Object cuMemberBonus) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,42 +66,17 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
 | 
			
		|||
    private ICuMemberTreeService iCuMemberTreeService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private IBonusSettleService iBonusSettleService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private CuMemberBonusDetailMapper cuMemberBonusDetailMapper;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private CuMemberBonusPushMapper cuMemberBonusPushMapper;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private CuMemberBonusExpandMapper cuMemberBonusExpandMapper;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private CuMemberBonusCoachMapper cuMemberBonusCoachMapper;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private CuMemberBonusRangeMapper cuMemberBonusRangeMapper;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public void setCuMemberBonusPushMapper(CuMemberBonusPushMapper cuMemberBonusPushMapper) {
 | 
			
		||||
        this.cuMemberBonusPushMapper = cuMemberBonusPushMapper;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public void setCuMemberBonusExpandMapper(CuMemberBonusExpandMapper cuMemberBonusExpandMapper) {
 | 
			
		||||
        this.cuMemberBonusExpandMapper = cuMemberBonusExpandMapper;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public void setCuMemberBonusCoachMapper(CuMemberBonusCoachMapper cuMemberBonusCoachMapper) {
 | 
			
		||||
        this.cuMemberBonusCoachMapper = cuMemberBonusCoachMapper;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public void setCuMemberBonusRangeMapper(CuMemberBonusRangeMapper cuMemberBonusRangeMapper) {
 | 
			
		||||
        this.cuMemberBonusRangeMapper = cuMemberBonusRangeMapper;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public void setCuMemberBonusDetailMapper(CuMemberBonusDetailMapper cuMemberBonusDetailMapper) {
 | 
			
		||||
        this.cuMemberBonusDetailMapper = cuMemberBonusDetailMapper;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<Long> batchQueryCuMemberBonusSeq(Integer rowNum) {
 | 
			
		||||
        return baseMapper.batchQueryCuMemberBonusSeq(rowNum);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,23 +127,6 @@ public class ApiPickController extends BaseController {
 | 
			
		|||
                        .quantity(quantity)
 | 
			
		||||
                        .build());
 | 
			
		||||
                break;
 | 
			
		||||
//            case MAKER_SEA_BUCKTHORN:
 | 
			
		||||
//            case REPURCHASE_PICK:
 | 
			
		||||
//                // 迁移创客沙棘提货、迁移复购提货处理
 | 
			
		||||
//                if (quantity % acPick.getBaseQuantity() != 0) {
 | 
			
		||||
//                    // 提货数量只能为%s的倍数
 | 
			
		||||
//                    return AjaxResult.error(TransactionUtils.getContent(ActivityMsgConstants.PICK_QUANTITY_BASE, acPick.getBaseQuantity()));
 | 
			
		||||
//                }
 | 
			
		||||
//                // 查询产品
 | 
			
		||||
//                ProductDTO seaProductDTO = iProductServiceApi.getProduct(acPick.getPkDataId().intValue()).getData();
 | 
			
		||||
//                // 处理提货产品明细
 | 
			
		||||
//                detailList.add(ApiPickDetailVO.builder()
 | 
			
		||||
//                        .productName(seaProductDTO.getProductName())
 | 
			
		||||
//                        .specsName(acPick.getSpecsName())
 | 
			
		||||
//                        .cover(StringUtils.isNotEmpty(acPick.getPickCover()) ? acPick.getPickCover() : seaProductDTO.getCover())
 | 
			
		||||
//                        .quantity(quantity)
 | 
			
		||||
//                        .build());
 | 
			
		||||
//                break;
 | 
			
		||||
            case LOTTERY_DRAW:
 | 
			
		||||
            case CONSUMPTION_GIFT:
 | 
			
		||||
            case DIRECT_PUSH_GIFT:
 | 
			
		||||
| 
						 | 
				
			
			@ -309,33 +292,6 @@ public class ApiPickController extends BaseController {
 | 
			
		|||
                productOrderItems.setPkStorehouse(saOrder.getPkStorehouse());
 | 
			
		||||
                orderItemsList.add(productOrderItems);
 | 
			
		||||
                break;
 | 
			
		||||
//            case MAKER_SEA_BUCKTHORN:
 | 
			
		||||
//            case REPURCHASE_PICK:
 | 
			
		||||
//                // 迁移创客沙棘提货、迁移复购提货处理
 | 
			
		||||
//                if (param.getQuantity() % acPick.getBaseQuantity() != 0) {
 | 
			
		||||
//                    // 提货数量只能为%s的倍数
 | 
			
		||||
//                    return AjaxResult.error(TransactionUtils.getContent(ActivityMsgConstants.PICK_QUANTITY_BASE, acPick.getBaseQuantity()));
 | 
			
		||||
//                }
 | 
			
		||||
//                // 查询产品信息
 | 
			
		||||
//                ProductDTO msbProductDTO = iProductServiceApi.getProduct(acPick.getPkDataId().intValue()).getData();
 | 
			
		||||
//
 | 
			
		||||
//                // 处理提货产品明细
 | 
			
		||||
//                SaOrderItems msbOrderItems = new SaOrderItems();
 | 
			
		||||
//                msbOrderItems.setPkProduct(acPick.getPkDataId().intValue());
 | 
			
		||||
//                msbOrderItems.setPkRate(currencyDTO.getPkId());
 | 
			
		||||
//                msbOrderItems.setQuantity(param.getQuantity());
 | 
			
		||||
//                msbOrderItems.setPkGrade(cuMember.getPkSettleGrade());
 | 
			
		||||
//                msbOrderItems.setPkAwards(cuMember.getPkAwards());
 | 
			
		||||
//                msbOrderItems.setOrderStatus(EOrderStatus.PAY.getValue());
 | 
			
		||||
//                msbOrderItems.setPkCreator(userId);
 | 
			
		||||
//                msbOrderItems.setCreationTime(nowDate);
 | 
			
		||||
//                msbOrderItems.setSpecsName(acPick.getSpecsName());
 | 
			
		||||
//                msbOrderItems.setSpecsNameId(acPick.getSpecsNameId());
 | 
			
		||||
//                msbOrderItems.setPkCountry(pkCountry);
 | 
			
		||||
//                msbOrderItems.setWaresQuantity(param.getQuantity());
 | 
			
		||||
//                msbOrderItems.setSkuCode(CommonUtil.createSkuCode(msbProductDTO.getProductCode(), acPick.getSpecsNameId()));
 | 
			
		||||
//                orderItemsList.add(msbOrderItems);
 | 
			
		||||
//                break;
 | 
			
		||||
            case LOTTERY_DRAW:
 | 
			
		||||
            case CONSUMPTION_GIFT:
 | 
			
		||||
            case DIRECT_PUSH_GIFT:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,11 +38,7 @@ import java.util.*;
 | 
			
		|||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 提货处理控制器
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/4/21 17:59
 | 
			
		||||
 * @Classname: AcPickController
 | 
			
		||||
 * @PackageName: com.hzs.activity.pick.controller.manage
 | 
			
		||||
 * 提货处理控制器
 | 
			
		||||
 */
 | 
			
		||||
@RequestMapping("/manage/pick")
 | 
			
		||||
@RestController
 | 
			
		||||
| 
						 | 
				
			
			@ -96,9 +92,8 @@ public class AcPickController extends BaseController {
 | 
			
		|||
 | 
			
		||||
                acPickQueryVO.setPickTypeVal(EPickType.getEnumByValue(acPickQueryVO.getPickType()).getLabel());
 | 
			
		||||
 | 
			
		||||
                if (EPickType.PICK_PRODUCT.getValue() == acPickExt.getPickType()
 | 
			
		||||
                        || EPickType.COUPON.getValue() == acPickExt.getPickType()) {
 | 
			
		||||
                    // 提货产品、乐学易考代金券
 | 
			
		||||
                if (EPickType.PICK_PRODUCT.getValue() == acPickExt.getPickType()) {
 | 
			
		||||
                    // 提货产品
 | 
			
		||||
                    acPickQueryVO.setDetailList(Collections.singletonList(AcPickQueryDetailVO.builder()
 | 
			
		||||
                            .productName(acPickExt.getProductName())
 | 
			
		||||
                            .quantity(acPickExt.getBaseQuantity())
 | 
			
		||||
| 
						 | 
				
			
			@ -159,8 +154,7 @@ public class AcPickController extends BaseController {
 | 
			
		|||
 | 
			
		||||
                acPickQueryVO.setPickTypeVal(EPickType.getEnumByValue(acPickQueryVO.getPickType()).getLabel());
 | 
			
		||||
 | 
			
		||||
                if (EPickType.PICK_PRODUCT.getValue() == acPickExt.getPickType()
 | 
			
		||||
                        || EPickType.COUPON.getValue() == acPickExt.getPickType()) {
 | 
			
		||||
                if (EPickType.PICK_PRODUCT.getValue() == acPickExt.getPickType()) {
 | 
			
		||||
                    // 产品处理
 | 
			
		||||
                    acPickQueryVO.setDetailList(Collections.singletonList(AcPickQueryDetailVO.builder()
 | 
			
		||||
                            .productName(acPickExt.getProductName())
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +198,7 @@ public class AcPickController extends BaseController {
 | 
			
		|||
        AcPickExt acPickExt = iAcPickService.queryDetail(pkId, pkCountry);
 | 
			
		||||
        if (null != acPickExt) {
 | 
			
		||||
            acPickQueryVO = BeanUtil.copyProperties(acPickExt, AcPickQueryVO.class);
 | 
			
		||||
            if (EPickType.PICK_PRODUCT.getValue() == acPickExt.getPickType() || EPickType.COUPON.getValue() == acPickExt.getPickType()) {
 | 
			
		||||
            if (EPickType.PICK_PRODUCT.getValue() == acPickExt.getPickType()) {
 | 
			
		||||
                // 产品处理
 | 
			
		||||
                acPickQueryVO.setDetailList(Collections.singletonList(AcPickQueryDetailVO.builder()
 | 
			
		||||
                        .pkProduct(acPickExt.getPkDataId().intValue())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,9 +13,6 @@ import java.util.List;
 | 
			
		|||
 | 
			
		||||
/**
 | 
			
		||||
 * 提货基础表 Mapper 接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author hzs
 | 
			
		||||
 * @since 2023-04-21
 | 
			
		||||
 */
 | 
			
		||||
public interface AcPickMapper extends BaseMapper<AcPick> {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -53,25 +50,6 @@ public interface AcPickMapper extends BaseMapper<AcPick> {
 | 
			
		|||
                          @Param("quantity") Integer quantity,
 | 
			
		||||
                          @Param("pkModified") Long pkModified);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据会员和类型回退使用数量
 | 
			
		||||
     *
 | 
			
		||||
     * @param pkMember     会员ID
 | 
			
		||||
     * @param pickType     提货类型
 | 
			
		||||
     * @param pkBaseConfig 活动配置ID(产品时为0) -- 可为null
 | 
			
		||||
     * @param pkDataId     数据ID(产品为产品ID,活动为活动ID) -- 可为null
 | 
			
		||||
     * @param quantity     数量
 | 
			
		||||
     * @param pkModified   操作人
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int updatePickUsableByMember(@Param("pkMember") Long pkMember,
 | 
			
		||||
                                 @Param("pickType") Integer pickType,
 | 
			
		||||
                                 @Param("pkBaseConfig") Long pkBaseConfig,
 | 
			
		||||
                                 @Param("pkDataId") Long pkDataId,
 | 
			
		||||
                                 @Param("quantity") Integer quantity,
 | 
			
		||||
                                 @Param("pkModified") Long pkModified);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据会员和活动类型回退使用数量
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -101,14 +79,6 @@ public interface AcPickMapper extends BaseMapper<AcPick> {
 | 
			
		|||
    int updatePickUseBatch(@Param("list") List<AcPickExt> acPickExtList,
 | 
			
		||||
                           @Param("quantity") Integer quantity);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量更新使用数量
 | 
			
		||||
     *
 | 
			
		||||
     * @param acPickExtList 批量更新数据
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int updatePickUseCouponBatch(@Param("list") List<AcPickExt> acPickExtList);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量更新使用数量
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -116,14 +86,6 @@ public interface AcPickMapper extends BaseMapper<AcPick> {
 | 
			
		|||
     */
 | 
			
		||||
    int updateBackPickUseBatch(@Param("list") List<AcPickMemberLog> acPickMemberLogList);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据主键更新提货数量
 | 
			
		||||
     *
 | 
			
		||||
     * @param acPick
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int updatePickQuantityByPkId(@Param("acPick") AcPick acPick);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据主键更新提货数据
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -168,16 +130,6 @@ public interface AcPickMapper extends BaseMapper<AcPick> {
 | 
			
		|||
     */
 | 
			
		||||
    List<ApiPickListVO> pickList(@Param("pkMember") Long pkMember, @Param("pkCountry") Integer pkCountry);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 更新代言礼包提货数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param pkMember       会员ID
 | 
			
		||||
     * @param pkProduct      产品ID
 | 
			
		||||
     * @param usableQuantity 更新数量
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int updateRepurchasePick(@Param("pkMember") Long pkMember, @Param("pkProduct") Long pkProduct, @Param("usableQuantity") Integer usableQuantity);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 撤单扣减乐学代金券
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,9 +10,6 @@ import java.util.List;
 | 
			
		|||
 | 
			
		||||
/**
 | 
			
		||||
 * 会员提货记录 Mapper 接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author hzs
 | 
			
		||||
 * @since 2023-05-15
 | 
			
		||||
 */
 | 
			
		||||
public interface AcPickMemberLogMapper extends BaseMapper<AcPickMemberLog> {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -36,20 +33,8 @@ public interface AcPickMemberLogMapper extends BaseMapper<AcPickMemberLog> {
 | 
			
		|||
                    @Param("quantity") Integer quantity,
 | 
			
		||||
                    @Param("source") Integer source);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量插入提货日志
 | 
			
		||||
     *
 | 
			
		||||
     * @param acPickExtList 批量插入数据
 | 
			
		||||
     * @param source        来源(1=后台,2=前台)
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int insertBatchPick(@Param("list") List<AcPickExt> acPickExtList, @Param("source") Integer source);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 批量删除使用记录数据
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/6/3 13:52
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *批量删除使用记录数据
 | 
			
		||||
     **/
 | 
			
		||||
    int deleteBatch(@Param("acPickMemberLogList") List<AcPickMemberLog> acPickMemberLogList);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,11 +8,7 @@ import lombok.NoArgsConstructor;
 | 
			
		|||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 提货查询列表入参
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/4/21 18:01
 | 
			
		||||
 * @Classname: AcPickQueryParam
 | 
			
		||||
 * @PackageName: com.hzs.activity.pick.param
 | 
			
		||||
 * 提货查询列表入参
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@Builder
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,49 +0,0 @@
 | 
			
		|||
package com.hzs.activity.pick.param;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 复购提货(迁移)入参
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/5/31 17:29
 | 
			
		||||
 * @Classname: AcRepurchasePickParam
 | 
			
		||||
 * @PackageName: com.hzs.activity.pick.param
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class AcRepurchasePickParam {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 会员编号
 | 
			
		||||
     */
 | 
			
		||||
    private String memberCode;
 | 
			
		||||
    /**
 | 
			
		||||
     * 会员名称
 | 
			
		||||
     */
 | 
			
		||||
    private String memberName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 结算等级
 | 
			
		||||
     */
 | 
			
		||||
    private Integer pkGrade;
 | 
			
		||||
    /**
 | 
			
		||||
     * 真实奖衔
 | 
			
		||||
     */
 | 
			
		||||
    private Integer pkAwards;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 所属团队
 | 
			
		||||
     */
 | 
			
		||||
    private String teamName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 订单编号
 | 
			
		||||
     */
 | 
			
		||||
    private String orderCode;
 | 
			
		||||
    /**
 | 
			
		||||
     * 购买时间
 | 
			
		||||
     */
 | 
			
		||||
    private Date[] payTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +9,6 @@ import com.hzs.common.core.exception.ServiceException;
 | 
			
		|||
import com.hzs.common.domain.activity.pick.AcPick;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.AcPickMemberLog;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.ext.AcPickExt;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.apache.dubbo.config.annotation.DubboService;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,11 +17,7 @@ import java.math.BigDecimal;
 | 
			
		|||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 提货相关dubbo服务入口
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/5/15 11:21
 | 
			
		||||
 * @Classname: AcPickProviderApi
 | 
			
		||||
 * @PackageName: com.hzs.activity.pick.provider
 | 
			
		||||
 * 提货相关dubbo服务入口
 | 
			
		||||
 */
 | 
			
		||||
@Slf4j
 | 
			
		||||
@DubboService
 | 
			
		||||
| 
						 | 
				
			
			@ -31,7 +26,7 @@ public class AcPickProviderApi implements IAcPickServiceApi {
 | 
			
		|||
    @Autowired
 | 
			
		||||
    private IAcPickService iAcPickService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private IAcPickMemberLogService acPickMemberLogService;
 | 
			
		||||
    private IAcPickMemberLogService iAcPickMemberLogService;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public R<?> handlePickOrder(Long pkMember, String orderCode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -55,27 +50,12 @@ public class AcPickProviderApi implements IAcPickServiceApi {
 | 
			
		|||
        return R.fail();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public R<Boolean> updatePickUse(List<AcPickExt> acPickExtList, List<AcPickMemberLog> acPickMemberLogList) {
 | 
			
		||||
        try {
 | 
			
		||||
            return R.ok(iAcPickService.updatePickUse(acPickExtList, acPickMemberLogList));
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            log.error("更新提货单失败", e);
 | 
			
		||||
        }
 | 
			
		||||
        return R.fail();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public R<List<AcPickMemberLog>> queryPickMemberLog(List<SaOrderExt> saOrderExtList) {
 | 
			
		||||
        return R.ok(acPickMemberLogService.queryPickMemberLog(saOrderExtList));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public R<BigDecimal> queryOrderPostage(String orderCode, Integer recProvince, Integer recCity, Integer pkCountry) {
 | 
			
		||||
        try {
 | 
			
		||||
            LambdaQueryWrapper<AcPickMemberLog> queryWrapper = new LambdaQueryWrapper<>();
 | 
			
		||||
            queryWrapper.eq(AcPickMemberLog::getPickOrder, orderCode);
 | 
			
		||||
            AcPickMemberLog acPickMemberLog = acPickMemberLogService.getOne(queryWrapper);
 | 
			
		||||
            AcPickMemberLog acPickMemberLog = iAcPickMemberLogService.getOne(queryWrapper);
 | 
			
		||||
            if (null != acPickMemberLog) {
 | 
			
		||||
                AcPick acPick = iAcPickService.getById(acPickMemberLog.getPkPick());
 | 
			
		||||
                if (null != acPick) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,15 +4,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
 | 
			
		|||
import com.hzs.activity.pick.vo.AcPickMemberLogVO;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.AcPickMemberLog;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.ext.AcPickExt;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 会员提货记录 服务类
 | 
			
		||||
 *
 | 
			
		||||
 * @author hzs
 | 
			
		||||
 * @since 2023-05-15
 | 
			
		||||
 */
 | 
			
		||||
public interface IAcPickMemberLogService extends IService<AcPickMemberLog> {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -34,28 +30,9 @@ public interface IAcPickMemberLogService extends IService<AcPickMemberLog> {
 | 
			
		|||
     */
 | 
			
		||||
    int insertBatch(List<AcPickExt> acPickExtList, Integer quantity, Integer source);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量插入提货日志
 | 
			
		||||
     *
 | 
			
		||||
     * @param acPickExtList 批量插入数据
 | 
			
		||||
     * @param source        来源(1=后台,2=前台)
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int insertBatchPick(List<AcPickExt> acPickExtList, Integer source);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 批量删除使用记录数据
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/6/3 13:52
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     *  批量删除使用记录数据
 | 
			
		||||
     **/
 | 
			
		||||
    int deleteBatch(List<AcPickMemberLog> acPickMemberLogList);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 查询会员提货使用记录
 | 
			
		||||
     * @author: sui q
 | 
			
		||||
     * @date: 2023/6/3 10:51
 | 
			
		||||
     * @param: null null
 | 
			
		||||
     **/
 | 
			
		||||
    List<AcPickMemberLog> queryPickMemberLog(List<SaOrderExt> saOrderExtList);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,21 +41,6 @@ public interface IAcPickService extends IService<AcPick> {
 | 
			
		|||
                              Integer usableQuantity, String pickCover, Date receiveTime, Integer pkPostage,
 | 
			
		||||
                              Long pkCreator, Integer pkCountry, Long pkBaseId, String specsNameId, String specsName);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据会员和类型回退使用数量
 | 
			
		||||
     *
 | 
			
		||||
     * @param pkMember     会员ID
 | 
			
		||||
     * @param pickType     提货类型
 | 
			
		||||
     * @param pkBaseConfig 活动配置ID(产品时为0) -- 可为null
 | 
			
		||||
     * @param pkDataId     数据ID(产品为产品ID,活动为活动ID) -- 可为null
 | 
			
		||||
     * @param quantity     数量
 | 
			
		||||
     * @param pkModified   操作人
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int updatePickUsableByMember(Long pkMember, Integer pickType, Long pkBaseConfig,
 | 
			
		||||
                                 Long pkDataId, Integer quantity, Long pkModified);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据会员和活动类型回退使用数量
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -75,11 +60,6 @@ public interface IAcPickService extends IService<AcPick> {
 | 
			
		|||
     **/
 | 
			
		||||
    boolean updatePickUse(List<AcPickExt> acPickExtList, Integer signSource, List<AcPickMemberLog> acPickMemberLogList);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 更新提货单
 | 
			
		||||
     **/
 | 
			
		||||
    boolean updatePickUse(List<AcPickExt> acPickExtList, List<AcPickMemberLog> acPickMemberLogList);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询提货列表
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,17 @@
 | 
			
		|||
package com.hzs.activity.pick.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.hzs.activity.pick.mapper.AcPickMemberLogMapper;
 | 
			
		||||
import com.hzs.activity.pick.service.IAcPickMemberLogService;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import com.hzs.activity.pick.vo.AcPickMemberLogVO;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.AcPickMemberLog;
 | 
			
		||||
import com.hzs.common.domain.activity.pick.ext.AcPickExt;
 | 
			
		||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 会员提货记录 服务实现类
 | 
			
		||||
 *
 | 
			
		||||
 * @author hzs
 | 
			
		||||
 * @since 2023-05-15
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
public class AcPickMemberLogServiceImpl extends ServiceImpl<AcPickMemberLogMapper, AcPickMemberLog> implements IAcPickMemberLogService {
 | 
			
		||||
| 
						 | 
				
			
			@ -32,33 +26,9 @@ public class AcPickMemberLogServiceImpl extends ServiceImpl<AcPickMemberLogMappe
 | 
			
		|||
        return baseMapper.insertBatch(acPickExtList, quantity, source);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int insertBatchPick(List<AcPickExt> acPickExtList, Integer source) {
 | 
			
		||||
        return baseMapper.insertBatchPick(acPickExtList, source);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int deleteBatch(List<AcPickMemberLog> acPickMemberLogList) {
 | 
			
		||||
        return baseMapper.deleteBatch(acPickMemberLogList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<AcPickMemberLog> queryPickMemberLog(List<SaOrderExt> saOrderExtList) {
 | 
			
		||||
        List<AcPickMemberLog> retPickMemberLogList = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        Set<String> orderKey = new HashSet<>();
 | 
			
		||||
        saOrderExtList.forEach(saOrderExt -> orderKey.add(saOrderExt.getOrderCode() + saOrderExt.getPkMember()));
 | 
			
		||||
 | 
			
		||||
        Set<String> orderCodeSet = saOrderExtList.stream().distinct().map(SaOrderExt::getOrderCode).collect(Collectors.toSet());
 | 
			
		||||
        LambdaQueryWrapper<AcPickMemberLog> queryWrapper = new LambdaQueryWrapper<>();
 | 
			
		||||
        queryWrapper.in(AcPickMemberLog::getPickOrder, orderCodeSet);
 | 
			
		||||
        List<AcPickMemberLog> acPickMemberLogList = baseMapper.selectList(queryWrapper);
 | 
			
		||||
 | 
			
		||||
        for (AcPickMemberLog acPickMemberLog : acPickMemberLogList) {
 | 
			
		||||
            if (!orderKey.contains(acPickMemberLog.getPickOrder() + acPickMemberLog.getPkMember())) {
 | 
			
		||||
                retPickMemberLogList.add(acPickMemberLog);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return retPickMemberLogList;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -117,11 +117,6 @@ public class AcPickServiceImpl extends ServiceImpl<AcPickMapper, AcPick> impleme
 | 
			
		|||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int updatePickUsableByMember(Long pkMember, Integer pickType, Long pkBaseConfig, Long pkDataId, Integer quantity, Long pkModified) {
 | 
			
		||||
        return baseMapper.updatePickUsableByMember(pkMember, pickType, pkBaseConfig, pkDataId, quantity, pkModified);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int updatePickUsableByMemberAndActivityType(Long pkMember, Integer pickType, Long pkBaseConfig,
 | 
			
		||||
                                                       Long pkDataId, Integer quantity, Long pkModified) {
 | 
			
		||||
| 
						 | 
				
			
			@ -145,21 +140,6 @@ public class AcPickServiceImpl extends ServiceImpl<AcPickMapper, AcPick> impleme
 | 
			
		|||
        return Boolean.TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class)
 | 
			
		||||
    public boolean updatePickUse(List<AcPickExt> acPickExtList, List<AcPickMemberLog> acPickMemberLogList) {
 | 
			
		||||
        if (CollectionUtil.isNotEmpty(acPickMemberLogList)) {
 | 
			
		||||
            // 回退数量
 | 
			
		||||
            baseMapper.updateBackPickUseBatch(acPickMemberLogList);
 | 
			
		||||
            iAcPickMemberLogService.deleteBatch(acPickMemberLogList);
 | 
			
		||||
        }
 | 
			
		||||
        // 批量更新提货使用数量
 | 
			
		||||
        baseMapper.updatePickUseCouponBatch(acPickExtList);
 | 
			
		||||
        // 批量插入提货日志
 | 
			
		||||
        iAcPickMemberLogService.insertBatchPick(acPickExtList, ESignSource.BONUS.getValue());
 | 
			
		||||
        return Boolean.TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<AcPickExt> queryList(AcPickQueryParam param, Integer pkCountry) {
 | 
			
		||||
        return baseMapper.queryList(param, pkCountry);
 | 
			
		||||
| 
						 | 
				
			
			@ -259,7 +239,6 @@ public class AcPickServiceImpl extends ServiceImpl<AcPickMapper, AcPick> impleme
 | 
			
		|||
                updateList.add(acPick);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            // 产品信息
 | 
			
		||||
            BdProduct bdProduct = productMap.get(detailParam.getPkProduct());
 | 
			
		||||
            // 操作日志内容
 | 
			
		||||
| 
						 | 
				
			
			@ -422,8 +401,7 @@ public class AcPickServiceImpl extends ServiceImpl<AcPickMapper, AcPick> impleme
 | 
			
		|||
            switch (ePickType) {
 | 
			
		||||
                case PICK_PRODUCT:
 | 
			
		||||
                case PRIZE:
 | 
			
		||||
                case COUPON:
 | 
			
		||||
                    // 提货产品、抽奖、创客沙棘提货、复购提货、代金券
 | 
			
		||||
                    // 提货产品、抽奖
 | 
			
		||||
                    if (null != detailParam.getPkProduct()) {
 | 
			
		||||
                        BdProduct product = iBdProductService.getProduct(detailParam.getPkProduct());
 | 
			
		||||
                        content.append(ePickType.getLabel()).append(",").append(product.getProductName()).append("(").append(delAcPick.getSpecsName()).append(");");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,41 +0,0 @@
 | 
			
		|||
package com.hzs.activity.pick.util;
 | 
			
		||||
 | 
			
		||||
import com.hzs.common.core.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 提货工具
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/3/29 10:07
 | 
			
		||||
 * @Classname: PickUtil
 | 
			
		||||
 * @PackageName: com.hzs.web.util
 | 
			
		||||
 */
 | 
			
		||||
public class PickUtil {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据省获取复购提货邮费
 | 
			
		||||
     *
 | 
			
		||||
     * @param province 省编号
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public static BigDecimal getPurchasePickPostage(String province) {
 | 
			
		||||
        if (StringUtils.isNotEmpty(province)) {
 | 
			
		||||
            switch (province) {
 | 
			
		||||
                case "620000":
 | 
			
		||||
                case "460000":
 | 
			
		||||
                case "150000":
 | 
			
		||||
                case "630000":
 | 
			
		||||
                case "640000":
 | 
			
		||||
                case "540000":
 | 
			
		||||
                case "650000":
 | 
			
		||||
                    // 甘肃、海南、内蒙古、青海、宁厦、西藏、新疆,邮费20元
 | 
			
		||||
                    return new BigDecimal("20");
 | 
			
		||||
                default:
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // 其它地区,邮费0元
 | 
			
		||||
        return BigDecimal.ZERO;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,11 +8,7 @@ import lombok.Data;
 | 
			
		|||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 会员提货日志
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/5/15 14:00
 | 
			
		||||
 * @Classname: AcPickMemberLogVO
 | 
			
		||||
 * @PackageName: com.hzs.activity.pick.vo
 | 
			
		||||
 * 会员提货日志
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class AcPickMemberLogVO {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,43 +0,0 @@
 | 
			
		|||
package com.hzs.activity.pick.vo;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 代言礼包详情VO
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/5/31 18:56
 | 
			
		||||
 * @Classname: AcRepurchasePickLogVO
 | 
			
		||||
 * @PackageName: com.hzs.activity.pick.vo
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class AcRepurchasePickLogVO {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 订单编号
 | 
			
		||||
     */
 | 
			
		||||
    private String orderCode;
 | 
			
		||||
    /**
 | 
			
		||||
     * 产品名称
 | 
			
		||||
     */
 | 
			
		||||
    private String productName;
 | 
			
		||||
    /**
 | 
			
		||||
     * 产品编码
 | 
			
		||||
     */
 | 
			
		||||
    private String productCode;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 发放数量
 | 
			
		||||
     */
 | 
			
		||||
    private Integer receiveQuantity;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 发放年月
 | 
			
		||||
     */
 | 
			
		||||
    private String receiveMonth;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否提货(1=是,0=否)
 | 
			
		||||
     */
 | 
			
		||||
    private Integer receiveFlag;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,95 +0,0 @@
 | 
			
		|||
package com.hzs.activity.pick.vo;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonFormat;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
import com.hzs.common.core.annotation.Excel;
 | 
			
		||||
import com.hzs.common.core.annotation.Transaction;
 | 
			
		||||
import com.hzs.common.core.constant.EnumsPrefixConstants;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 复购提货(迁移)返回VO
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/5/31 17:09
 | 
			
		||||
 * @Classname: AcRepurchasePickExt
 | 
			
		||||
 * @PackageName: com.hzs.common.domain.activity.pick.ext
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class AcRepurchasePickVO {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 主键
 | 
			
		||||
     */
 | 
			
		||||
    private Long pkId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 会员编号
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "会员编号")
 | 
			
		||||
    private String memberCode;
 | 
			
		||||
    /**
 | 
			
		||||
     * 会员名称
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "会员姓名")
 | 
			
		||||
    private String memberName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 结算等级翻译KEY
 | 
			
		||||
     */
 | 
			
		||||
    @Transaction(transactionKey = EnumsPrefixConstants.KEY_GRADE)
 | 
			
		||||
    @JsonIgnore
 | 
			
		||||
    private Integer gradeKey;
 | 
			
		||||
    /**
 | 
			
		||||
     * 结算等级显示
 | 
			
		||||
     */
 | 
			
		||||
    @Transaction(transactionKey = EnumsPrefixConstants.KEY_AWARD)
 | 
			
		||||
    @Excel(name = "结算等级")
 | 
			
		||||
    private String gradeKeyVal;
 | 
			
		||||
    /**
 | 
			
		||||
     * 真实奖衔翻译KEY
 | 
			
		||||
     */
 | 
			
		||||
    @JsonIgnore
 | 
			
		||||
    private Integer awardsKey;
 | 
			
		||||
    /**
 | 
			
		||||
     * 真实奖衔显示
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "真实奖衔")
 | 
			
		||||
    private String awardsKeyVal;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 所属团队
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "所属团队")
 | 
			
		||||
    private String teamName;
 | 
			
		||||
    /**
 | 
			
		||||
     * 商品名称
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "商品名称")
 | 
			
		||||
    private String waresName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 礼包数量
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "礼包数量")
 | 
			
		||||
    private Integer buyQuantity;
 | 
			
		||||
    /**
 | 
			
		||||
     * 可提数量
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "可提数量")
 | 
			
		||||
    private Integer usableQuantity;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 订单编号
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "订单编号")
 | 
			
		||||
    private String orderCode;
 | 
			
		||||
    /**
 | 
			
		||||
     * 支付时间
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "支付时间")
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    private Date payTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -6,11 +6,7 @@ import lombok.Data;
 | 
			
		|||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 会员提货列表VO
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/4/24 16:15
 | 
			
		||||
 * @Classname: ApiPickVO
 | 
			
		||||
 * @PackageName: com.hzs.activity.pick.vo
 | 
			
		||||
 * 会员提货列表VO
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class ApiPickListVO {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,6 @@ import com.hzs.common.domain.sale.product.BdProduct;
 | 
			
		|||
import com.hzs.common.domain.sale.wares.BdWaresRange;
 | 
			
		||||
import com.hzs.common.domain.system.base.BdStorehouse;
 | 
			
		||||
import com.hzs.common.domain.system.config.BdAreaFreePostage;
 | 
			
		||||
import com.hzs.common.domain.system.config.BdAwards;
 | 
			
		||||
import com.hzs.common.security.utils.SecurityUtils;
 | 
			
		||||
import com.hzs.common.util.TransactionUtils;
 | 
			
		||||
import com.hzs.member.base.IMemberTeamServiceApi;
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +45,6 @@ import com.hzs.system.base.ICurrencyServiceApi;
 | 
			
		|||
import com.hzs.system.base.ISystemConfigServiceApi;
 | 
			
		||||
import com.hzs.system.base.dto.CurrencyDTO;
 | 
			
		||||
import com.hzs.system.config.IAreaFreePostageServiceApi;
 | 
			
		||||
import com.hzs.system.config.IAwardsServiceApi;
 | 
			
		||||
import com.hzs.system.config.IGradeServiceApi;
 | 
			
		||||
import com.hzs.system.config.dto.AreaCurrencyDTO;
 | 
			
		||||
import com.hzs.system.config.dto.GradeDTO;
 | 
			
		||||
| 
						 | 
				
			
			@ -74,8 +72,6 @@ public class SaOrderHandle {
 | 
			
		|||
    @DubboReference
 | 
			
		||||
    IMemberTeamServiceApi memberTeamServiceApi;
 | 
			
		||||
    @DubboReference
 | 
			
		||||
    IAwardsServiceApi awardsServiceApi;
 | 
			
		||||
    @DubboReference
 | 
			
		||||
    ISystemConfigServiceApi systemConfigServiceApi;
 | 
			
		||||
    @DubboReference
 | 
			
		||||
    IAreaFreePostageServiceApi iAreaFreePostageServiceApi;
 | 
			
		||||
| 
						 | 
				
			
			@ -268,24 +264,6 @@ public class SaOrderHandle {
 | 
			
		|||
 | 
			
		||||
        for (BdWaresDetailExt waresDetailExt : bdWaresDetailExtList) {
 | 
			
		||||
            SaOrderItems saOrderItems = getSaOrderItems(cuMember, saOrder, currency, saOrderItemsList, waresDetailExt);
 | 
			
		||||
            // 特殊会员产品处理
 | 
			
		||||
            if (null != saOrder
 | 
			
		||||
                    && EOrderType.SPECIAL_REPURCHASE_ORDER.getValue() == saOrder.getOrderType()
 | 
			
		||||
                    && EYesNo.NO.getIntValue() == saOrderItems.getIsGift()) {
 | 
			
		||||
 | 
			
		||||
                // 乐学复购,价格根据等级固定
 | 
			
		||||
                if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.S_VIP.getValue()).getPkId())) {
 | 
			
		||||
                    saOrderItems.setPrice(MagicNumberConstants.LXYK_V4);
 | 
			
		||||
                } else if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.VIP.getValue()).getPkId())) {
 | 
			
		||||
                    saOrderItems.setPrice(MagicNumberConstants.LXYK_V3);
 | 
			
		||||
                } else if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.MAKER.getValue()).getPkId())) {
 | 
			
		||||
                    saOrderItems.setPrice(MagicNumberConstants.LXYK_V2);
 | 
			
		||||
                } else {
 | 
			
		||||
                    saOrderItems.setPrice(MagicNumberConstants.LXYK_V1);
 | 
			
		||||
                }
 | 
			
		||||
                // TODO new 乐学复购商品业绩为600
 | 
			
		||||
                saOrderItems.setAchievement(MagicNumberConstants.LXYK_PV);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 免邮的话不需要计算邮费
 | 
			
		||||
            if (EYesNo.YES.getIntValue() == waresDetailExt.getIsFreeMail()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,7 +57,6 @@ import com.hzs.sale.order.param.*;
 | 
			
		|||
import com.hzs.sale.order.service.*;
 | 
			
		||||
import com.hzs.sale.order.vo.*;
 | 
			
		||||
import com.hzs.sale.product.service.IBdProductExtendService;
 | 
			
		||||
import com.hzs.sale.product.service.IBdProductService;
 | 
			
		||||
import com.hzs.sale.wares.service.*;
 | 
			
		||||
import com.hzs.system.base.IAreaServiceApi;
 | 
			
		||||
import com.hzs.system.base.ICountryServiceApi;
 | 
			
		||||
| 
						 | 
				
			
			@ -139,8 +138,6 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
 | 
			
		|||
    @Autowired
 | 
			
		||||
    private IBdWaresSpecsRelationService iBdWaresSpecsRelationService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private IBdProductService iBdProductService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISaDeliverItemsService iSaDeliverItemsService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private IAcPickService iAcPickService;
 | 
			
		||||
| 
						 | 
				
			
			@ -731,9 +728,6 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
 | 
			
		|||
        saOrderExt.setPayTime(currentDateTime);
 | 
			
		||||
        saOrderExt.setOrderStatus(EOrderStatus.PAY.getValue());
 | 
			
		||||
 | 
			
		||||
//        // 乐学注册、乐学升级订单处理法宝券
 | 
			
		||||
//        this.handleLxPick(saOrderExt);
 | 
			
		||||
 | 
			
		||||
        if (isToBePay && !isHaiFun) {
 | 
			
		||||
            // 根据业绩判断自动上树 -- 目前使用
 | 
			
		||||
            newCuMember.setPkModified(pkCreator);
 | 
			
		||||
| 
						 | 
				
			
			@ -891,23 +885,9 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
 | 
			
		|||
        if (oldGradeDTO.getGradeValue() >= cuMember.getPkSettleGradeValue() && !Objects.equals(Integer.toString(EUpgradeWay.TOTAL.getValue()), upgradeWay)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
//        // 验证等级,原等级<新等级
 | 
			
		||||
//        if (oldGradeDTO.getGradeValue() >= cuMember.getPkSettleGradeValue()) {
 | 
			
		||||
//            if (saOrderExt.getOrderType().equals(EOrderType.SPECIAL_UPGRADE_ORDER.getValue())) {
 | 
			
		||||
//                // TODO new 乐学升级,如果V2可以购买订单金额大于36000的,如果V3可以购买订单金额大于128000的
 | 
			
		||||
//                if (!((EGrade.MAKER.getValue() == cuMember.getPkSettleGradeValue() && saOrderExt.getOrderAmount().compareTo(MagicNumberConstants.V3_AMOUNT) >= 0)
 | 
			
		||||
//                        || (EGrade.VIP.getValue() == cuMember.getPkSettleGradeValue() && saOrderExt.getOrderAmount().compareTo(MagicNumberConstants.V4_AMOUNT) >= 0))
 | 
			
		||||
//                ) {
 | 
			
		||||
//                    return false;
 | 
			
		||||
//                }
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
        // 封装保存订单数据
 | 
			
		||||
        encapsulationSaOrder(saOrderExt);
 | 
			
		||||
 | 
			
		||||
//        // 乐学注册、乐学升级订单处理法宝券
 | 
			
		||||
//        this.handleLxPick(saOrderExt);
 | 
			
		||||
 | 
			
		||||
        // 更新订单信息
 | 
			
		||||
        updateSaOrder(saOrderExt);
 | 
			
		||||
        // 处理会员信息,更新会员等级,扣款
 | 
			
		||||
| 
						 | 
				
			
			@ -2431,32 +2411,4 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
 | 
			
		|||
        return baseMapper.singleItemStat(singleItemStatParam);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 注册、升级处理乐学法宝券
 | 
			
		||||
     *
 | 
			
		||||
     * @param saOrderExt
 | 
			
		||||
     */
 | 
			
		||||
    private void handleLxPick(SaOrderExt saOrderExt) {
 | 
			
		||||
        Set<Integer> productIdList = saOrderExt.getOrderItemsList().stream().map(SaOrderItems::getPkProduct).collect(Collectors.toSet());
 | 
			
		||||
        List<BdProductExt> productExtList = iBdProductService.queryProductById(productIdList, saOrderExt.getPkCountry(), ERepurchaseType.LE_XUE_REGISTER.getValue());
 | 
			
		||||
        if (CollectionUtil.isNotEmpty(productExtList)) {
 | 
			
		||||
            Map<Integer, BdProductExt> productDtoMap = new HashMap<>(ComputeUtil.mapInitCapacity(productExtList.size()));
 | 
			
		||||
            productExtList.forEach(productDTO ->
 | 
			
		||||
                    productDtoMap.put(productDTO.getPkId(), productDTO));
 | 
			
		||||
            // 记录数量
 | 
			
		||||
            for (SaOrderItems saOrderItems : saOrderExt.getOrderItemsList()) {
 | 
			
		||||
                if (productDtoMap.containsKey(saOrderItems.getPkProduct())) {
 | 
			
		||||
                    BdProductExt productDTO = productDtoMap.get(saOrderItems.getPkProduct());
 | 
			
		||||
                    // 加入提货单
 | 
			
		||||
                    iAcPickService.addPickByActivity(saOrderExt.getPkMember(), EPickType.COUPON.getValue(), 0L, saOrderItems.getPkProduct().longValue(),
 | 
			
		||||
                            saOrderItems.getQuantity(), productDTO.getCover(), null, null,
 | 
			
		||||
                            saOrderExt.getPkCreator(), saOrderExt.getPkCountry(), null, saOrderItems.getSpecsNameId(), saOrderItems.getSpecsName());
 | 
			
		||||
 | 
			
		||||
                    // 法宝券数量冗余在订单主表
 | 
			
		||||
                    saOrderExt.setBoxNum(saOrderItems.getQuantity());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,12 +30,6 @@ public interface BdProductMapper extends BaseMapper<BdProduct> {
 | 
			
		|||
     */
 | 
			
		||||
    List<ProductVo> selectByQueryList(ProductParams productParams);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 根据产品id查询产品
 | 
			
		||||
     **/
 | 
			
		||||
    List<BdProductExt> queryProductExtById(@Param("productIdSet") Set<Integer> productIdSet, @Param("pkCountry") Integer pkCountry,
 | 
			
		||||
                                           @Param("repurchaseType") Integer repurchaseType);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 根据规格、主键查询产品
 | 
			
		||||
     **/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,6 @@ import com.hzs.system.sys.dto.LoginUser;
 | 
			
		|||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 产品相关服务
 | 
			
		||||
| 
						 | 
				
			
			@ -28,12 +27,7 @@ public interface IBdProductService extends IService<BdProduct> {
 | 
			
		|||
    BdProduct getProduct(Integer pkProduct);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 根据产品id查询产品
 | 
			
		||||
     **/
 | 
			
		||||
    List<BdProductExt> queryProductById(Set<Integer> productIdSet, Integer pkCountry, Integer repurchaseType);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * @description: 根据规格、主键查询产品
 | 
			
		||||
     *  根据规格、主键查询产品
 | 
			
		||||
     **/
 | 
			
		||||
    List<BdProductExt> queryProductExtById(List<BdProductSpecs> productSpecsList, Integer pkCountry);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,11 +65,6 @@ public class BdProductServiceImpl extends ServiceImpl<BdProductMapper, BdProduct
 | 
			
		|||
        return baseMapper.selectById(pkProduct);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<BdProductExt> queryProductById(Set<Integer> productIdSet, Integer pkCountry, Integer repurchaseType) {
 | 
			
		||||
        return baseMapper.queryProductExtById(productIdSet, pkCountry, repurchaseType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<BdProductExt> queryProductExtById(List<BdProductSpecs> productSpecsList, Integer pkCountry) {
 | 
			
		||||
        return baseMapper.queryProductExtBySpecsId(productSpecsList, pkCountry);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -237,8 +237,7 @@ public class ApiBdWaresController extends BaseController {
 | 
			
		|||
                // 零售价
 | 
			
		||||
                BigDecimal retailPrice = BigDecimal.ZERO;
 | 
			
		||||
 | 
			
		||||
                if (EOrderType.REPURCHASE_ORDER.getValue() == cuWaresParams.getSpecialArea()
 | 
			
		||||
                        || EOrderType.SPECIAL_REPURCHASE_ORDER.getValue() == cuWaresParams.getSpecialArea()) {
 | 
			
		||||
                if (EOrderType.REPURCHASE_ORDER.getValue() == cuWaresParams.getSpecialArea()) {
 | 
			
		||||
                    for (BdWaresRange bdWaresRange : bdWaresRangeList) {
 | 
			
		||||
                        if (waresExt.getPkId().intValue() == bdWaresRange.getPkWares().intValue()) {
 | 
			
		||||
                            waresPrice = waresPrice.add(bdWaresRange.getPrice());
 | 
			
		||||
| 
						 | 
				
			
			@ -246,18 +245,6 @@ public class ApiBdWaresController extends BaseController {
 | 
			
		|||
                            assAchieve = assAchieve.add(bdWaresRange.getAssAchieve());
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (EOrderType.SPECIAL_REPURCHASE_ORDER.getValue() == cuWaresParams.getSpecialArea()) {
 | 
			
		||||
                        // 乐学复购,价格根据等级固定
 | 
			
		||||
                        if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.S_VIP.getValue()).getPkId())) {
 | 
			
		||||
                            waresPrice = MagicNumberConstants.LXYK_V4;
 | 
			
		||||
                        } else if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.VIP.getValue()).getPkId())) {
 | 
			
		||||
                            waresPrice = MagicNumberConstants.LXYK_V3;
 | 
			
		||||
                        } else if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.MAKER.getValue()).getPkId())) {
 | 
			
		||||
                            waresPrice = MagicNumberConstants.LXYK_V2;
 | 
			
		||||
                        } else {
 | 
			
		||||
                            waresPrice = MagicNumberConstants.LXYK_V1;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    List<BdWaresSpecsSkuExt> waresSpecsSku = waresSpecsSkuMap.get(waresExt.getPkId());
 | 
			
		||||
                    waresSpecsSku = waresSpecsSku.stream().peek(a -> a.setProductGift(a.getPkProduct() + "" + a.getIsGift())).collect(Collectors.toList());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
 | 
			
		|||
import cn.hutool.core.collection.CollectionUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import com.hzs.common.core.constant.CountryConstants;
 | 
			
		||||
import com.hzs.common.core.constant.MagicNumberConstants;
 | 
			
		||||
import com.hzs.common.core.domain.R;
 | 
			
		||||
import com.hzs.common.core.enums.*;
 | 
			
		||||
import com.hzs.common.core.utils.ComputeUtil;
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +15,6 @@ import com.hzs.common.domain.sale.ext.BdWaresSpecsSkuExt;
 | 
			
		|||
import com.hzs.common.domain.sale.wares.BdWaresLabel;
 | 
			
		||||
import com.hzs.common.domain.sale.wares.BdWaresRange;
 | 
			
		||||
import com.hzs.common.domain.sale.wares.BdWaresSpecsSku;
 | 
			
		||||
import com.hzs.common.domain.system.config.BdAwards;
 | 
			
		||||
import com.hzs.common.domain.system.config.BdLabel;
 | 
			
		||||
import com.hzs.common.domain.system.ext.BdLabelExt;
 | 
			
		||||
import com.hzs.common.security.utils.SecurityUtils;
 | 
			
		||||
| 
						 | 
				
			
			@ -30,10 +28,7 @@ import com.hzs.sale.wares.param.*;
 | 
			
		|||
import com.hzs.sale.wares.service.*;
 | 
			
		||||
import com.hzs.system.base.ICurrencyServiceApi;
 | 
			
		||||
import com.hzs.system.base.dto.CurrencyDTO;
 | 
			
		||||
import com.hzs.system.config.IAwardsServiceApi;
 | 
			
		||||
import com.hzs.system.config.IGradeServiceApi;
 | 
			
		||||
import com.hzs.system.config.IRangeServiceApi;
 | 
			
		||||
import com.hzs.system.config.dto.GradeDTO;
 | 
			
		||||
import com.hzs.system.config.dto.RangeDTO;
 | 
			
		||||
import org.apache.dubbo.config.annotation.DubboReference;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +36,6 @@ import org.springframework.stereotype.Service;
 | 
			
		|||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -67,10 +61,6 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
    IRangeServiceApi iRangeServiceApi;
 | 
			
		||||
    @DubboReference
 | 
			
		||||
    IMemberServiceApi iMemberServiceApi;
 | 
			
		||||
    @DubboReference
 | 
			
		||||
    IAwardsServiceApi iAwardsServiceApi;
 | 
			
		||||
    @DubboReference
 | 
			
		||||
    IGradeServiceApi iGradeServiceApi;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public CuWaresParams queryWaresSpecsSku(Integer specialArea, String waresCode, Long loginMemberId, Integer pkCountry) {
 | 
			
		||||
| 
						 | 
				
			
			@ -176,34 +166,6 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
            }
 | 
			
		||||
            productParams.clear();
 | 
			
		||||
            productParams.addAll(productParamsResultList);
 | 
			
		||||
 | 
			
		||||
            if (EOrderType.SPECIAL_REPURCHASE_ORDER.getValue() == specialArea) {
 | 
			
		||||
                // 乐学复购,价格根据等级固定
 | 
			
		||||
                // 等级
 | 
			
		||||
                R<List<GradeDTO>> gradeDTO = iGradeServiceApi.queryGradeList(pkCountry);
 | 
			
		||||
                List<GradeDTO> gradeList = gradeDTO.getData();
 | 
			
		||||
                Map<Integer, GradeDTO> gradeMap = gradeList.stream().collect(Collectors.toMap(GradeDTO::getGradeValue, Function.identity()));
 | 
			
		||||
 | 
			
		||||
                BigDecimal price;
 | 
			
		||||
                // 乐学复购,价格根据等级固定
 | 
			
		||||
                if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.S_VIP.getValue()).getPkId())) {
 | 
			
		||||
                    price = MagicNumberConstants.LXYK_V4;
 | 
			
		||||
                } else if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.VIP.getValue()).getPkId())) {
 | 
			
		||||
                    price = MagicNumberConstants.LXYK_V3;
 | 
			
		||||
                } else if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.MAKER.getValue()).getPkId())) {
 | 
			
		||||
                    price = MagicNumberConstants.LXYK_V2;
 | 
			
		||||
                } else {
 | 
			
		||||
                    price = MagicNumberConstants.LXYK_V1;
 | 
			
		||||
                }
 | 
			
		||||
                cuWaresParams.setWaresPrice(price);
 | 
			
		||||
 | 
			
		||||
                for (CuProductParams productParam : productParams) {
 | 
			
		||||
                    for (CuWaresItemsParams cuWaresItemsParams : productParam.getWaresItemsParamsList()) {
 | 
			
		||||
                        cuWaresItemsParams.setPriceTotal(new BigDecimal(price.intValue() / productParams.size()));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            cuWaresParams.setProductParams(productParams);
 | 
			
		||||
            cuWaresParams.setSpecialArea(specialArea);
 | 
			
		||||
            return cuWaresParams;
 | 
			
		||||
| 
						 | 
				
			
			@ -211,13 +173,6 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @description: 购物车查询数量专用
 | 
			
		||||
     * @author: zhang jing
 | 
			
		||||
     * @date: 2024/3/28 10:41
 | 
			
		||||
     * @param: [specialArea, waresCode, loginMemberId, pkCountry]
 | 
			
		||||
     * @return: com.hzs.sale.wares.param.CuWaresParams
 | 
			
		||||
     **/
 | 
			
		||||
    @Override
 | 
			
		||||
    public CuWaresParams queryWaresSpecsSkuCount(Integer specialArea, String waresCode, Long loginMemberId, Integer pkCountry) {
 | 
			
		||||
        List<BdWaresSpecsSkuExt> bdWaresSpecsSkuExtList;
 | 
			
		||||
| 
						 | 
				
			
			@ -273,7 +228,8 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @description: 查询商品sku信息购物车专用
 | 
			
		||||
     * 查询商品sku信息购物车专用
 | 
			
		||||
     *
 | 
			
		||||
     * @author: zhang jing
 | 
			
		||||
     * @date: 2024/3/28 14:34
 | 
			
		||||
     * @param: [specialArea, waresCode, loginMemberId, pkCountry]
 | 
			
		||||
| 
						 | 
				
			
			@ -348,31 +304,6 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
                .filter(param -> !param.getWaresItemsParamsList().isEmpty())
 | 
			
		||||
                .collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
        // 处理特殊情况下的价格修改
 | 
			
		||||
        if (EOrderType.SPECIAL_REPURCHASE_ORDER.getValue() == specialArea) {
 | 
			
		||||
            // 获取等级信息
 | 
			
		||||
            Map<Integer, GradeDTO> gradeMap = iGradeServiceApi.queryGradeList(pkCountry).getData().stream()
 | 
			
		||||
                    .collect(Collectors.toMap(GradeDTO::getGradeValue, Function.identity()));
 | 
			
		||||
            BigDecimal price;
 | 
			
		||||
            if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.S_VIP.getValue()).getPkId())) {
 | 
			
		||||
                price = MagicNumberConstants.LXYK_V4;
 | 
			
		||||
            } else if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.VIP.getValue()).getPkId())) {
 | 
			
		||||
                price = MagicNumberConstants.LXYK_V3;
 | 
			
		||||
            } else if (cuMember.getPkSettleGrade().equals(gradeMap.get(EGrade.MAKER.getValue()).getPkId())) {
 | 
			
		||||
                price = MagicNumberConstants.LXYK_V2;
 | 
			
		||||
            } else {
 | 
			
		||||
                price = MagicNumberConstants.LXYK_V1;
 | 
			
		||||
            }
 | 
			
		||||
            BigDecimal finalPrice = price;
 | 
			
		||||
            productParamsResultList.forEach(param -> param.getWaresItemsParamsList().forEach(item -> {
 | 
			
		||||
                if (EYesNo.NO.getIntValue() == item.getIsGift()) {
 | 
			
		||||
                    // 非赠品
 | 
			
		||||
                    item.setPrice(finalPrice);
 | 
			
		||||
                    item.setPriceTotal(finalPrice.multiply(new BigDecimal(item.getQuantity())));
 | 
			
		||||
                }
 | 
			
		||||
            }));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        cuWaresParams.setProductParams(productParamsResultList);
 | 
			
		||||
        cuWaresParams.setSpecialArea(specialArea);
 | 
			
		||||
        return cuWaresParams;
 | 
			
		||||
| 
						 | 
				
			
			@ -429,14 +360,6 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通过规格列表查询商品最小库存单位,
 | 
			
		||||
     *
 | 
			
		||||
     * @param cuWaresItemsParams 明细参数
 | 
			
		||||
     * @return: SpecsSkuParam
 | 
			
		||||
     * @Author: sui q
 | 
			
		||||
     * @Date: 2022/9/19 16:26
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public SpecsSkuParam queryWaresDetailSkuBySpecs(CuWaresItemsParams cuWaresItemsParams) {
 | 
			
		||||
        BdWaresSpecsSkuExt bdWaresSpecsSkuExt = baseMapper.queryWaresDetailSkuBySpecs(cuWaresItemsParams);
 | 
			
		||||
| 
						 | 
				
			
			@ -447,44 +370,21 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
                .build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据id修改值
 | 
			
		||||
     *
 | 
			
		||||
     * @param sku
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void updateBySkuId(BdWaresSpecsSku sku) {
 | 
			
		||||
        baseMapper.updateBySkuId(sku);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据id查询sku (可查询删除数据)
 | 
			
		||||
     *
 | 
			
		||||
     * @param pkWaresSpecsSku
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public BdWaresSpecsSku selectByWaresSpecsSkuIdAndDel(Integer pkWaresSpecsSku) {
 | 
			
		||||
        return baseMapper.selectByWaresSpecsSkuIdAndDel(pkWaresSpecsSku);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据商品id 查询
 | 
			
		||||
     *
 | 
			
		||||
     * @param waresIds
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<BdWaresSpecsSkuExt> selectByWaresSpecsSku(List<Integer> waresIds) {
 | 
			
		||||
        return baseMapper.selectByWaresSpecsSku(waresIds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据id 批量查询sku 信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param pkWaresSpecsSku
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<WaresItemWaresInfo> selectByPkIds(List<Integer> pkWaresSpecsSku) {
 | 
			
		||||
        return baseMapper.selectByPkIds(pkWaresSpecsSku);
 | 
			
		||||
| 
						 | 
				
			
			@ -541,31 +441,6 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
                waresItemVo.setAssAchieve(ComputeUtil.computeAdd(waresItemVo.getAssAchieve(), ComputeUtil.computeMultiply(waresItemWaresInfo.getAssAchieve(), waresItemWaresInfo.getQuantity())));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 复购乐学专区 无奖衔 或者 是 vip 或者是 svip 价格改为2680
 | 
			
		||||
            if (EOrderType.SPECIAL_REPURCHASE_ORDER.getValue() == specialArea) {
 | 
			
		||||
                // 等级
 | 
			
		||||
                R<List<GradeDTO>> gradeDTO = iGradeServiceApi.queryGradeList(pkCountry);
 | 
			
		||||
                List<GradeDTO> gradeList = gradeDTO.getData();
 | 
			
		||||
                Map<Integer, GradeDTO> gradeMap = gradeList.stream().collect(Collectors.toMap(GradeDTO::getGradeValue, Function.identity()));
 | 
			
		||||
 | 
			
		||||
                // 查询会员信息
 | 
			
		||||
                R<CuMember> memberDate = iMemberServiceApi.getMember(pkMember);
 | 
			
		||||
                CuMember cuMemberDate = memberDate.getData();
 | 
			
		||||
 | 
			
		||||
                // 价格
 | 
			
		||||
                BigDecimal waresPrice;
 | 
			
		||||
                if (cuMemberDate.getPkSettleGrade().equals(gradeMap.get(EGrade.S_VIP.getValue()).getPkId())) {
 | 
			
		||||
                    waresPrice = MagicNumberConstants.LXYK_V4;
 | 
			
		||||
                } else if (cuMemberDate.getPkSettleGrade().equals(gradeMap.get(EGrade.VIP.getValue()).getPkId())) {
 | 
			
		||||
                    waresPrice = MagicNumberConstants.LXYK_V3;
 | 
			
		||||
                } else if (cuMemberDate.getPkSettleGrade().equals(gradeMap.get(EGrade.MAKER.getValue()).getPkId())) {
 | 
			
		||||
                    waresPrice = MagicNumberConstants.LXYK_V2;
 | 
			
		||||
                } else {
 | 
			
		||||
                    waresPrice = MagicNumberConstants.LXYK_V1;
 | 
			
		||||
                }
 | 
			
		||||
                waresItemVo.setPrice(waresPrice);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 前台传递结算国 跨国报单计算价格使用
 | 
			
		||||
            R<CurrencyDTO> currency = iCurrencyServiceApi.getCurrency(SecurityUtils.getPkCountry());
 | 
			
		||||
            if (pkCountry != null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -589,35 +464,16 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
 | 
			
		|||
        return waresItemVo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据商品id查询规格价格最小值
 | 
			
		||||
     *
 | 
			
		||||
     * @param pkWares
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<BdWaresSpecsSkuExt> selectByMinWaresSpecsSku(Integer pkWares) {
 | 
			
		||||
        return baseMapper.selectByMinWaresSpecsSku(pkWares);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据商品id查询规格价格最小值
 | 
			
		||||
     *
 | 
			
		||||
     * @param pkWaresIds
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<BdWaresSpecsSkuExt> selectByMinWaresSpecsSkuByPkWaresList(List<Integer> pkWaresIds) {
 | 
			
		||||
        return baseMapper.selectByMinWaresSpecsSkuByPkWaresList(pkWaresIds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据id 查询
 | 
			
		||||
     *
 | 
			
		||||
     * @param pkWaresSpecsSku
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public BdWaresSpecsSkuExt selectByPkWaresSpecsSku(Integer pkWaresSpecsSku) {
 | 
			
		||||
        return baseMapper.selectByPkWaresSpecsSku(pkWaresSpecsSku);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,29 +75,6 @@
 | 
			
		|||
        ap.modified_time = sysdate
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
    <!-- 批量更新使用数量 -->
 | 
			
		||||
    <update id="updatePickUseCouponBatch">
 | 
			
		||||
        merge into ac_pick ap
 | 
			
		||||
        using (
 | 
			
		||||
        select pk_id,pk_member,sum(used_quantity) used_quantity from (
 | 
			
		||||
        <foreach collection="list" item="item" separator=" union all ">
 | 
			
		||||
            select
 | 
			
		||||
            #{item.pkId} PK_ID,
 | 
			
		||||
            #{item.pkMember} PK_MEMBER,
 | 
			
		||||
            #{item.usedQuantity} used_quantity
 | 
			
		||||
            from dual
 | 
			
		||||
        </foreach>)
 | 
			
		||||
        group by pk_id,pk_member
 | 
			
		||||
        ) tmp
 | 
			
		||||
        on (tmp.PK_ID = ap.PK_ID)
 | 
			
		||||
        WHEN MATCHED THEN
 | 
			
		||||
        update
 | 
			
		||||
        set ap.USABLE_QUANTITY = ap.USABLE_QUANTITY - tmp.used_quantity,
 | 
			
		||||
        ap.USED_QUANTITY = ap.USED_QUANTITY + tmp.used_quantity,
 | 
			
		||||
        ap.pk_modified = tmp.pk_member,
 | 
			
		||||
        ap.modified_time = sysdate
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
    <!-- 根据提货ID更新使用数量 -->
 | 
			
		||||
    <update id="updatePickUseById">
 | 
			
		||||
        update AC_PICK ap
 | 
			
		||||
| 
						 | 
				
			
			@ -110,26 +87,6 @@
 | 
			
		|||
          and ap.USABLE_QUANTITY - #{quantity} >= 0
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
    <!-- 根据会员和类型回退使用数量 -->
 | 
			
		||||
    <update id="updatePickUsableByMember">
 | 
			
		||||
        update ac_pick ap
 | 
			
		||||
        set ap.modified_time = sysdate,
 | 
			
		||||
        ap.pk_modified = #{pkModified},
 | 
			
		||||
        ap.usable_quantity = ap.usable_quantity + #{quantity},
 | 
			
		||||
        ap.used_quantity = ap.used_quantity - #{quantity}
 | 
			
		||||
        where ap.del_flag = 0
 | 
			
		||||
        and ap.pk_member = #{pkMember}
 | 
			
		||||
        and ap.pick_type = #{pickType}
 | 
			
		||||
        <if test="null != pkBaseConfig">
 | 
			
		||||
            and ap.pk_base_config = #{pkBaseConfig}
 | 
			
		||||
        </if>
 | 
			
		||||
        <if test="null != pkDataId">
 | 
			
		||||
            and ap.pk_data_id = #{pkDataId}
 | 
			
		||||
        </if>
 | 
			
		||||
        and ap.used_quantity - #{quantity} >= 0
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <!-- 根据会员和活动类型回退使用数量 -->
 | 
			
		||||
    <update id="updatePickUsableByMemberAndActivityType">
 | 
			
		||||
        update ac_pick ap
 | 
			
		||||
| 
						 | 
				
			
			@ -148,22 +105,6 @@
 | 
			
		|||
        and ap.usable_quantity - #{quantity} >= 0
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
    <!-- 根据主键更新提货数量 -->
 | 
			
		||||
    <update id="updatePickQuantityByPkId">
 | 
			
		||||
        update AC_PICK ap
 | 
			
		||||
        set ap.USABLE_QUANTITY = ap.USABLE_QUANTITY + #{acPick.usableQuantity},
 | 
			
		||||
        ap.pk_modified = #{acPick.pkModified},
 | 
			
		||||
        ap.modified_time = sysdate
 | 
			
		||||
        where ap.del_flag = 0
 | 
			
		||||
        and ap.PK_ID = #{acPick.pkId}
 | 
			
		||||
        and ap.RECEIVE_TIME = #{acPick.receiveTime}
 | 
			
		||||
        <if test="acPick.isFreeMail != null">
 | 
			
		||||
            and ap.IS_FREE_MAIL = #{acPick.isFreeMail}
 | 
			
		||||
        </if>
 | 
			
		||||
        and ap.PK_POSTAGE = #{acPick.pkPostage}
 | 
			
		||||
        and ap.USABLE_QUANTITY + #{acPick.usableQuantity} > 0
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
    <!-- 根据主键更新提货数据 -->
 | 
			
		||||
    <update id="updatePickByPkId">
 | 
			
		||||
        update AC_PICK ap
 | 
			
		||||
| 
						 | 
				
			
			@ -335,52 +276,6 @@
 | 
			
		|||
        and ap.pick_type in (1, 17)
 | 
			
		||||
        and ap.usable_quantity > 0
 | 
			
		||||
        and (ap.receive_time is null or to_char(ap.receive_time, 'yyyy-mm-dd hh24:mi:ss') >= to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'))
 | 
			
		||||
        <!-- 迁移创客沙棘提货、复购提货 -->
 | 
			
		||||
        union all
 | 
			
		||||
        select ap.pk_id,
 | 
			
		||||
        ap.pick_type,
 | 
			
		||||
        case
 | 
			
		||||
        when ap.pick_cover is not null then
 | 
			
		||||
        ap.pick_cover
 | 
			
		||||
        else
 | 
			
		||||
        (select bp.cover from bd_product bp where bp.pk_id = ap.pk_data_id)
 | 
			
		||||
        end pick_cover,
 | 
			
		||||
        ap.usable_quantity,
 | 
			
		||||
        ap.receive_time,
 | 
			
		||||
        0 pick_flag,
 | 
			
		||||
        1 IS_WHOLE,
 | 
			
		||||
        ap.base_quantity,
 | 
			
		||||
        ap.creation_time
 | 
			
		||||
        from AC_PICK ap
 | 
			
		||||
        where ap.del_flag = 0
 | 
			
		||||
        and ap.pk_country = #{pkCountry}
 | 
			
		||||
        and ap.pk_member = #{pkMember}
 | 
			
		||||
        and ap.pick_type in (5, 7)
 | 
			
		||||
        and ap.usable_quantity > 0
 | 
			
		||||
        and (ap.receive_time is null or to_char(ap.receive_time, 'yyyy-mm-dd') >= to_char(sysdate, 'yyyy-mm-dd'))
 | 
			
		||||
        <!-- 迁移乐学易考代金券 -->
 | 
			
		||||
        union all
 | 
			
		||||
        select ap.pk_id,
 | 
			
		||||
        ap.pick_type,
 | 
			
		||||
        case
 | 
			
		||||
        when ap.pick_cover is not null then
 | 
			
		||||
        ap.pick_cover
 | 
			
		||||
        else
 | 
			
		||||
        (select bp.cover from bd_product bp where bp.pk_id = ap.pk_data_id)
 | 
			
		||||
        end pick_cover,
 | 
			
		||||
        ap.usable_quantity,
 | 
			
		||||
        ap.receive_time,
 | 
			
		||||
        1 pick_flag,
 | 
			
		||||
        0 IS_WHOLE,
 | 
			
		||||
        ap.base_quantity,
 | 
			
		||||
        ap.creation_time
 | 
			
		||||
        from AC_PICK ap
 | 
			
		||||
        where ap.del_flag = 0
 | 
			
		||||
        and ap.pk_country = #{pkCountry}
 | 
			
		||||
        and ap.pk_member = #{pkMember}
 | 
			
		||||
        and ap.pick_type = 8
 | 
			
		||||
        and ap.usable_quantity > 0
 | 
			
		||||
        and (ap.receive_time is null or to_char(ap.receive_time, 'yyyy-mm-dd') >= to_char(sysdate, 'yyyy-mm-dd'))
 | 
			
		||||
        <!-- 消费赠送、直推赠送 -->
 | 
			
		||||
        union all
 | 
			
		||||
        select ap.pk_id,
 | 
			
		||||
| 
						 | 
				
			
			@ -406,18 +301,6 @@
 | 
			
		|||
        order by creation_time
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <!-- 更新代言礼包提货数据 -->
 | 
			
		||||
    <update id="updateRepurchasePick">
 | 
			
		||||
        update AC_PICK ap
 | 
			
		||||
        set ap.usable_quantity = nvl(ap.usable_quantity, 0) + #{usableQuantity},
 | 
			
		||||
            ap.MODIFIED_TIME   = sysdate
 | 
			
		||||
        where ap.del_flag = 0
 | 
			
		||||
          and ap.pick_type = 7
 | 
			
		||||
          and ap.pk_base_config = 0
 | 
			
		||||
          and ap.pk_data_id = #{pkProduct}
 | 
			
		||||
          and ap.pk_member = #{pkMember}
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
    <!-- 撤单扣减乐学代金券 -->
 | 
			
		||||
    <update id="deductionsCouponByOrder">
 | 
			
		||||
        update ac_pick ap
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@
 | 
			
		|||
        <result column="DEL_FLAG" property="delFlag"/>
 | 
			
		||||
        <result column="SOURCE" property="source"/>
 | 
			
		||||
    </resultMap>
 | 
			
		||||
 | 
			
		||||
    <delete id="deleteBatch">
 | 
			
		||||
        delete from AC_PICK_MEMBER_LOG
 | 
			
		||||
        where pk_id in
 | 
			
		||||
| 
						 | 
				
			
			@ -78,46 +79,4 @@
 | 
			
		|||
        #{source})
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <!-- 批量插入提货日志 -->
 | 
			
		||||
    <update id="insertBatchPick">
 | 
			
		||||
        merge into AC_PICK_MEMBER_LOG apml
 | 
			
		||||
        using (
 | 
			
		||||
        <foreach collection="list" item="item" separator=" union ">
 | 
			
		||||
            select ap.pk_id PK_PICK,
 | 
			
		||||
            ap.pk_member pk_member,
 | 
			
		||||
            #{item.orderCode} PICK_ORDER,
 | 
			
		||||
            #{item.usedQuantity} used_quantity,
 | 
			
		||||
            ap.pk_country pk_country
 | 
			
		||||
            from ac_pick ap
 | 
			
		||||
            where ap.pick_type = #{item.pickType}
 | 
			
		||||
            and ap.pk_base_config = #{item.pkBaseConfig}
 | 
			
		||||
            and ap.pk_data_id = #{item.pkDataId}
 | 
			
		||||
            and ap.pk_member = #{item.pkMember}
 | 
			
		||||
        </foreach>
 | 
			
		||||
        ) tmp
 | 
			
		||||
        on (0 = 1)
 | 
			
		||||
        WHEN NOT MATCHED THEN
 | 
			
		||||
        insert
 | 
			
		||||
        (PK_ID,
 | 
			
		||||
        PK_MEMBER,
 | 
			
		||||
        PK_PICK,
 | 
			
		||||
        PICK_QUANTITY,
 | 
			
		||||
        PICK_TIME,
 | 
			
		||||
        PICK_ORDER,
 | 
			
		||||
        PK_COUNTRY,
 | 
			
		||||
        DEL_FLAG,
 | 
			
		||||
        SOURCE)
 | 
			
		||||
        values
 | 
			
		||||
        (ac_pick_member_log_seq.nextval,
 | 
			
		||||
        tmp.pk_member,
 | 
			
		||||
        tmp.pk_pick,
 | 
			
		||||
        tmp.used_quantity,
 | 
			
		||||
        sysdate,
 | 
			
		||||
        tmp.pick_order,
 | 
			
		||||
        tmp.pk_country,
 | 
			
		||||
        0,
 | 
			
		||||
        #{source})
 | 
			
		||||
    </update>
 | 
			
		||||
 | 
			
		||||
</mapper>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -166,19 +166,6 @@
 | 
			
		|||
        order by pe.SORT desc
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="queryProductExtById" resultMap="BdProduct">
 | 
			
		||||
        select bp.pk_id,bp.pk_country,be.repurchase_type,bp.cover,bp.retail_price
 | 
			
		||||
        from bd_product bp
 | 
			
		||||
        inner join bd_product_extend be
 | 
			
		||||
        on bp.pk_id = be.pk_product
 | 
			
		||||
        where bp.del_flag=0 and be.del_flag=0
 | 
			
		||||
        and be.repurchase_type = #{repurchaseType}
 | 
			
		||||
        and bp.pk_country= #{pkCountry} and bp.pk_id in
 | 
			
		||||
        <foreach collection="productIdSet" item="item" open="(" close=")" separator=",">
 | 
			
		||||
            #{item}
 | 
			
		||||
        </foreach>
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <!-- 查询带有规格的产品列表 -->
 | 
			
		||||
    <select id="queryProductExistSpecs" resultMap="BdProduct">
 | 
			
		||||
        select distinct bp.*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,82 +97,4 @@ public class MagicNumberConstants {
 | 
			
		|||
     */
 | 
			
		||||
    public static final BigDecimal big10000 = new BigDecimal("10000");
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学复购 v4 价格
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal LXYK_V4 = new BigDecimal("2380");
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学复购 V3 价格
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal LXYK_V3 = new BigDecimal("2680");
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学复购 V2 价格
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal LXYK_V2 = new BigDecimal("2980");
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学复购 V1 价格
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal LXYK_V1 = new BigDecimal("2980");
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学复购业绩
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal LXYK_PV = new BigDecimal("600");
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学复购级差奖金300
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal LXYK_BONUS_300 = new BigDecimal("300");
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学复购级差奖金600
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal LXYK_BONUS_600 = new BigDecimal("600");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学V4注册金额
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal V4_AMOUNT = new BigDecimal("128000");
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学V3注册金额
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal V3_AMOUNT = new BigDecimal("36000");
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学V2注册金额
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal V2_AMOUNT = new BigDecimal("6000");
 | 
			
		||||
    /**
 | 
			
		||||
     * 乐学V1注册金额
 | 
			
		||||
     */
 | 
			
		||||
    public static final BigDecimal V1_AMOUNT = new BigDecimal("2000");
 | 
			
		||||
 | 
			
		||||
    // 级差 V4-V4 给的奖金
 | 
			
		||||
    public static final BigDecimal V4_V4_BONUS = new BigDecimal("43000");
 | 
			
		||||
    // 级差 V4-V3 给的奖金
 | 
			
		||||
    public static final BigDecimal V4_V3_BONUS = new BigDecimal("18000");
 | 
			
		||||
    // 级差 V4-V2 给的奖金
 | 
			
		||||
    public static final BigDecimal V4_V2_BONUS = new BigDecimal("3000");
 | 
			
		||||
    // 级差 V4-V1 给的奖金
 | 
			
		||||
    public static final BigDecimal V4_V1_BONUS = new BigDecimal("1000");
 | 
			
		||||
 | 
			
		||||
    // 级差 V3-V4 给的奖金
 | 
			
		||||
    public static final BigDecimal V3_V4_BONUS = new BigDecimal("10800");
 | 
			
		||||
    // 级差 V3-V3 给的奖金
 | 
			
		||||
    public static final BigDecimal V3_V3_BONUS = new BigDecimal("10800");
 | 
			
		||||
    // 级差 V3-V2 给的奖金
 | 
			
		||||
    public static final BigDecimal V3_V2_BONUS = new BigDecimal("2400");
 | 
			
		||||
    // 级差 V3-V1 给的奖金
 | 
			
		||||
    public static final BigDecimal V3_V1_BONUS = new BigDecimal("800");
 | 
			
		||||
 | 
			
		||||
    // 级差 V2-V4 给的奖金
 | 
			
		||||
    public static final BigDecimal V2_V4_BONUS = new BigDecimal("1800");
 | 
			
		||||
    // 级差 V2-V3 给的奖金
 | 
			
		||||
    public static final BigDecimal V2_V3_BONUS = new BigDecimal("1800");
 | 
			
		||||
    // 级差 V2-V2 给的奖金
 | 
			
		||||
    public static final BigDecimal V2_V2_BONUS = new BigDecimal("1800");
 | 
			
		||||
    // 级差 V2-V1 给的奖金
 | 
			
		||||
    public static final BigDecimal V2_V1_BONUS = new BigDecimal("600");
 | 
			
		||||
 | 
			
		||||
    // 级差 V1-V1-4 给的奖金
 | 
			
		||||
    public static final BigDecimal V1_V_BONUS = new BigDecimal("400");
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,6 @@ public class BonusMsgConstants {
 | 
			
		|||
     */
 | 
			
		||||
//    public static String RECOMMEND_DIRECT = "MSG_BONUS_002";
 | 
			
		||||
    public static String RECOMMEND_DIRECT = "订单编号%s,%s为%s贡献了推荐收益,推荐收益为%f。";
 | 
			
		||||
    public static String RECOMMEND_SPECIAL_DIRECT = "订单编号%s,%s为%s贡献了乐学易考推荐极差收益,推荐极差收益为%f。";
 | 
			
		||||
    /**
 | 
			
		||||
     * 拓展收益备注 -- 当前是第%d碰,共%d碰,订单编号%s,%s为%s贡献了拓展收益,计算业绩%f,拓展比例%f。
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -103,12 +102,6 @@ public class BonusMsgConstants {
 | 
			
		|||
 | 
			
		||||
    public static String LE_SHARE_RANGE = "订单编号%s,%s为%s贡献了复购极差收益,收益%f。";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 分享极差 -- 订单编号%s,%s为%s贡献了分享极差收益(乐学易考),使用代金券%f,当前等级%s。
 | 
			
		||||
     */
 | 
			
		||||
//    public static String LE_XUE_SHARE_RANGE = "MSG_BONUS_018";
 | 
			
		||||
    public static String LE_XUE_SHARE_RANGE = "订单编号%s,%s为%s贡献了分享极差收益(乐学易考),使用代金券%f,当前等级%s。";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 复购券收益 -- 订单编号%s,%s为%s贡献了复购券收益,计算业绩%f,计算比例%f,复购券收益%f。
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,11 +5,7 @@ import lombok.AllArgsConstructor;
 | 
			
		|||
import lombok.Getter;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 提货商品类型
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/4/24 10:13
 | 
			
		||||
 * @Classname: EPickType
 | 
			
		||||
 * @PackageName: com.hzs.common.core.enums
 | 
			
		||||
 * 提货商品类型
 | 
			
		||||
 */
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
@Getter
 | 
			
		||||
| 
						 | 
				
			
			@ -25,11 +21,6 @@ public enum EPickType {
 | 
			
		|||
     */
 | 
			
		||||
    PRIZE(1, "抽奖", EnumsPrefixConstants.ACT_TYPE + "1"),
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 关联 BS_PRODUCT 表, 用于乐学易考
 | 
			
		||||
     */
 | 
			
		||||
    COUPON(8, "法宝券", EnumsPrefixConstants.ACT_TYPE + "8"),
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 关联 AC_GIFT_CONFIG 表
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,9 @@ package com.hzs.common.domain.activity.pick;
 | 
			
		|||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.KeySequence;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableId;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
import com.hzs.common.core.web.domain.BaseEntity;
 | 
			
		||||
| 
						 | 
				
			
			@ -12,9 +14,6 @@ import lombok.experimental.Accessors;
 | 
			
		|||
 | 
			
		||||
/**
 | 
			
		||||
 * 提货基础表
 | 
			
		||||
 *
 | 
			
		||||
 * @author hzs
 | 
			
		||||
 * @since 2023-04-21
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,9 +16,6 @@ import lombok.experimental.Accessors;
 | 
			
		|||
 | 
			
		||||
/**
 | 
			
		||||
 * 会员提货记录
 | 
			
		||||
 *
 | 
			
		||||
 * @author hzs
 | 
			
		||||
 * @since 2023-05-15
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = false)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,11 +7,7 @@ import lombok.EqualsAndHashCode;
 | 
			
		|||
import java.math.BigDecimal;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Description: 提货基础表扩展
 | 
			
		||||
 * @Author: jiang chao
 | 
			
		||||
 * @Time: 2023/4/21 18:10
 | 
			
		||||
 * @Classname: AcPickExt
 | 
			
		||||
 * @PackageName: com.hzs.common.domain.activity.pick.ext
 | 
			
		||||
 * 提货基础表扩展
 | 
			
		||||
 */
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@Data
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,2 +0,0 @@
 | 
			
		|||
对接文档:
 | 
			
		||||
https://docs.qq.com/doc/DVGFhWEFRRXB0elNX
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue