订单新增优化
This commit is contained in:
		@@ -6,8 +6,6 @@ import java.util.List;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonFormat;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.stdiet.common.annotation.Excel;
 | 
			
		||||
import com.stdiet.common.core.domain.BaseEntity;
 | 
			
		||||
 | 
			
		||||
@@ -51,6 +49,7 @@ public class SysOrder extends BaseEntity {
 | 
			
		||||
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd")
 | 
			
		||||
    private Date startTime;
 | 
			
		||||
 | 
			
		||||
    private Date pauseTime;
 | 
			
		||||
@@ -77,6 +76,10 @@ public class SysOrder extends BaseEntity {
 | 
			
		||||
    @Excel(name = "售前")
 | 
			
		||||
    private String preSale;
 | 
			
		||||
 | 
			
		||||
    /** 售中ID */
 | 
			
		||||
    @Excel(name = "售中ID")
 | 
			
		||||
    private Long onSaleId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 售后
 | 
			
		||||
     */
 | 
			
		||||
@@ -93,9 +96,6 @@ public class SysOrder extends BaseEntity {
 | 
			
		||||
     */
 | 
			
		||||
    private Long nutritionistId;
 | 
			
		||||
 | 
			
		||||
    //营养师数组,比例拆分单时需要两个营养师,非持久化字段
 | 
			
		||||
    private Long[] nutritionistIdList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 营养师
 | 
			
		||||
     */
 | 
			
		||||
@@ -223,7 +223,7 @@ public class SysOrder extends BaseEntity {
 | 
			
		||||
    /**
 | 
			
		||||
     * 服务天数
 | 
			
		||||
     */
 | 
			
		||||
    @Excel(name = "服务结束时间", width = 30)
 | 
			
		||||
    @Excel(name = "服务天数", width = 30)
 | 
			
		||||
    private Integer serverDay;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -234,33 +234,41 @@ public class SysOrder extends BaseEntity {
 | 
			
		||||
    //查询参数
 | 
			
		||||
    private Integer amountFlag;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 订单类型 0普通单 1比例拆分单 2售后二开提成单
 | 
			
		||||
     */
 | 
			
		||||
    /** 订单类型 0普通单 1比例拆分单 2体验单 */
 | 
			
		||||
    @Excel(name = "订单类型 0普通单 1比例拆分单 2体验单")
 | 
			
		||||
    private String orderType;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 订单次数类型 0一开单  1二开单
 | 
			
		||||
     */
 | 
			
		||||
    /** 订单次数类型 0一开单  1二开单 */
 | 
			
		||||
    @Excel(name = "订单次数类型 0一开单  1二开单")
 | 
			
		||||
    private String orderCountType;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 订单金额类型 0全款单  1定金单  2尾款单
 | 
			
		||||
     */
 | 
			
		||||
    /** 订单金额类型 0全款单  1定金单  2尾款单 */
 | 
			
		||||
    @Excel(name = "订单金额类型 0全款单  1定金单  2尾款单")
 | 
			
		||||
    private String orderMoneyType;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 拆分订单中的主订单id,非拆分订单时,该id都为0
 | 
			
		||||
     */
 | 
			
		||||
    /** 拆分订单中的主订单id,非拆分订单时,该id都为0 */
 | 
			
		||||
    @Excel(name = "拆分订单中的主订单id,非拆分订单时,该id都为0")
 | 
			
		||||
    private Long mainOrderId;
 | 
			
		||||
 | 
			
		||||
    //订单类型数组,用于接收订单类型、订单次数类型、订单金额类型,非持久化字段
 | 
			
		||||
    private Long[] orderTypeList;
 | 
			
		||||
    /** 售后二开提成单, 0非提成单 1提成单 */
 | 
			
		||||
    @Excel(name = "售后二开提成单, 0非提成单 1提成单")
 | 
			
		||||
    private Integer afterSaleCommissOrder;
 | 
			
		||||
 | 
			
		||||
    //是否自动创建售后二开提成单,非持久化字段
 | 
			
		||||
    /** 删除标记 */
 | 
			
		||||
    private Integer delFlag;
 | 
			
		||||
 | 
			
		||||
    //订单类型数组,用于接收订单类型、订单次数类型、订单金额类型,非持久化字段
 | 
			
		||||
    private Integer[] orderTypeList;
 | 
			
		||||
 | 
			
		||||
    //是否自动创建售后二开提成单,0否 1是,非持久化字段
 | 
			
		||||
    private Integer secondAfterSaleFlag;
 | 
			
		||||
 | 
			
		||||
    //营养师数组,比例拆分单时需要两个营养师,非持久化字段
 | 
			
		||||
    private Long[] nutritionistIdList;
 | 
			
		||||
 | 
			
		||||
    //拆分比例,如:1,9就是按照比例10%、90%拆分,非持久化字段
 | 
			
		||||
    private Integer[] nutritionistRate;
 | 
			
		||||
    private String nutritionistRate;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -76,10 +76,12 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
            LocalDate serverStartDate = DateUtils.dateToLocalDate(sysOrder.getStartTime());
 | 
			
		||||
            //订单总服务月数
 | 
			
		||||
            int serverMonth = sysOrder.getServeTimeId() != null ? sysOrder.getServeTimeId().intValue()/30 : 0;
 | 
			
		||||
            //服务天数(不满一个月的零头)
 | 
			
		||||
            int serverSmallDay = sysOrder.getServeTimeId().intValue()%30 - (serverMonth > 0 ? 0 : 1);
 | 
			
		||||
            //赠送时长
 | 
			
		||||
            int giveDay = sysOrder.getGiveServeDay() != null ? sysOrder.getGiveServeDay().intValue() : 0;
 | 
			
		||||
            //服务到期时间(加赠送时间,不加暂停时间)
 | 
			
		||||
            serverEndDate = serverStartDate.plusMonths(serverMonth).plusDays(giveDay);
 | 
			
		||||
            serverEndDate = serverStartDate.plusMonths(serverMonth).plusDays(giveDay+serverSmallDay);
 | 
			
		||||
            List<SysOrderPause> pausesList = sysOrder.getOrderPauseList();
 | 
			
		||||
            if(pausesList == null){
 | 
			
		||||
                if(sysOrder.getOrderId() != null){
 | 
			
		||||
@@ -90,12 +92,10 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
                    pausesList = new ArrayList<>();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //System.out.println("结束时间:"+serverEndDate);
 | 
			
		||||
            //每年每月暂停天数,key为年份加月份,如:2021年1月=20211
 | 
			
		||||
            Map<String, Integer> everyYearMonthPauseDay = getEveryYearMonthPauseDay(pausesList, serverStartDate, serverEndDate);
 | 
			
		||||
            //该笔订单暂停总天数
 | 
			
		||||
            int pauseTotalDay = getTotalByMap(everyYearMonthPauseDay);
 | 
			
		||||
            //System.out.println("暂停天数:"+pauseTotalDay);
 | 
			
		||||
            //服务到期时间加上暂停时间
 | 
			
		||||
            serverEndDate = serverEndDate.plusDays(pauseTotalDay);
 | 
			
		||||
        }
 | 
			
		||||
@@ -278,10 +278,12 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
        LocalDate serverStartDate = DateUtils.dateToLocalDate(sysOrder.getStartTime());
 | 
			
		||||
        //订单总服务月数
 | 
			
		||||
        int serverMonth = sysOrder.getServeTimeId().intValue()/30;
 | 
			
		||||
        //服务天数(不满一个月的零头)
 | 
			
		||||
        int serverSmallDay = sysOrder.getServeTimeId().intValue()%30 - (serverMonth > 0 ? 0 : 1);
 | 
			
		||||
        //赠送时长
 | 
			
		||||
        int giveDay = sysOrder.getGiveServeDay().intValue();
 | 
			
		||||
        //服务到期时间(加赠送时间,不加暂停时间)
 | 
			
		||||
        LocalDate serverEndDate = serverStartDate.plusMonths(serverMonth).plusDays(giveDay);
 | 
			
		||||
        LocalDate serverEndDate = serverStartDate.plusMonths(serverMonth).plusDays(giveDay+serverSmallDay);
 | 
			
		||||
        //订单金额
 | 
			
		||||
        BigDecimal orderAmount = sysOrder.getAmount();
 | 
			
		||||
        //每年每月暂停天数,key为年份加月份,如:2021年1月=20211
 | 
			
		||||
@@ -355,9 +357,6 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService {
 | 
			
		||||
            //服务到期时间刷新
 | 
			
		||||
            serverEndDate = serverEndDate.plusDays(totalDay);
 | 
			
		||||
        }
 | 
			
		||||
        /*for(String key : pauseMap.keySet()){
 | 
			
		||||
            System.out.println(key+":"+pauseMap.get(key).intValue());
 | 
			
		||||
        }*/
 | 
			
		||||
        return pauseMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
package com.stdiet.custom.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.stdiet.common.annotation.Excel;
 | 
			
		||||
import com.stdiet.common.utils.DateUtils;
 | 
			
		||||
import com.stdiet.common.utils.StringUtils;
 | 
			
		||||
import com.stdiet.custom.domain.SysOrder;
 | 
			
		||||
import com.stdiet.custom.mapper.SysOrderMapper;
 | 
			
		||||
import com.stdiet.custom.service.ISysCommissionDayService;
 | 
			
		||||
@@ -70,18 +72,104 @@ public class SysOrderServiceImpl implements ISysOrderService {
 | 
			
		||||
    public int insertSysOrder(SysOrder sysOrder) {
 | 
			
		||||
        Date orderTime = DateUtils.getNowDate();
 | 
			
		||||
        sysOrder.setCreateTime(orderTime);
 | 
			
		||||
        //sysOrder.setOrderTime(orderTime);
 | 
			
		||||
        //计算服务到期时间
 | 
			
		||||
        setOrderServerEndDate(sysOrder);
 | 
			
		||||
        sysOrder.setOrderId(Long.parseLong(DateUtils.parseDateToStr(DateUtils.YYYYMMDDHHMMSS, orderTime)));
 | 
			
		||||
        int row = sysOrderMapper.insertSysOrder(sysOrder);
 | 
			
		||||
//        if (row > 0) {
 | 
			
		||||
//            //异步生成食谱计划
 | 
			
		||||
//            sysRecipesPlanService.regenerateRecipesPlan(sysOrder.getOrderId());
 | 
			
		||||
//        }
 | 
			
		||||
        //获取订单类型
 | 
			
		||||
        Integer[] orderType = sysOrder.getOrderTypeList();
 | 
			
		||||
        if(orderType == null || orderType.length != 3){
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        sysOrder.setOrderType(String.valueOf(orderType[0]));
 | 
			
		||||
        sysOrder.setOrderCountType(String.valueOf(orderType[1]));
 | 
			
		||||
        sysOrder.setOrderMoneyType(String.valueOf(orderType[2]));
 | 
			
		||||
        int row = 0;
 | 
			
		||||
        //普通单
 | 
			
		||||
        if("0".equals(sysOrder.getOrderType())){
 | 
			
		||||
            sysOrder.setNutritionistId((sysOrder.getNutritionistIdList() != null && sysOrder.getNutritionistIdList().length > 0) ? sysOrder.getNutritionistIdList()[0] : null);
 | 
			
		||||
            sysOrder.setMainOrderId(0L);
 | 
			
		||||
            sysOrder.setAfterSaleCommissOrder(0);
 | 
			
		||||
            sysOrder.setOnSaleId(null);
 | 
			
		||||
            //二开单
 | 
			
		||||
            if("1".equals(sysOrder.getOrderCountType())){
 | 
			
		||||
                row = sysOrderMapper.insertSysOrder(sysOrder);
 | 
			
		||||
                //需要自动创建售后二开提成单
 | 
			
		||||
                if(row > 0 && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
 | 
			
		||||
                    autoCreateSecondAfterSaleOrder(sysOrder);
 | 
			
		||||
                }
 | 
			
		||||
            }else{
 | 
			
		||||
                row = sysOrderMapper.insertSysOrder(sysOrder);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //比例拆分单
 | 
			
		||||
        else if("1".equals(sysOrder.getOrderType())){
 | 
			
		||||
            sysOrder.setAfterSaleCommissOrder(0);
 | 
			
		||||
            sysOrder.setOnSaleId(null);
 | 
			
		||||
            String rate = sysOrder.getNutritionistRate();
 | 
			
		||||
            if(StringUtils.isEmpty(rate) || rate.indexOf(",") == -1 || "0,10".equals(rate) || sysOrder.getNutritionistIdList().length != 2){
 | 
			
		||||
                return 0;
 | 
			
		||||
            }
 | 
			
		||||
            String[] rateArray = rate.split(",");
 | 
			
		||||
            if(Integer.parseInt(rateArray[0]) + Integer.parseInt(rateArray[1]) != 10){
 | 
			
		||||
                return 0;
 | 
			
		||||
            }
 | 
			
		||||
            BigDecimal amount = sysOrder.getAmount();
 | 
			
		||||
            //获取主单的数组下标
 | 
			
		||||
            int mainIndex = 0;
 | 
			
		||||
            if(Integer.parseInt(rateArray[1]) > Integer.parseInt(rateArray[0])){
 | 
			
		||||
                mainIndex = 1;
 | 
			
		||||
            }
 | 
			
		||||
            //添加主单
 | 
			
		||||
            sysOrder.setNutritionistId(sysOrder.getNutritionistIdList()[mainIndex]);
 | 
			
		||||
            sysOrder.setAmount(BigDecimal.valueOf(amount.doubleValue()*Integer.parseInt(rateArray[mainIndex])/10));
 | 
			
		||||
            sysOrder.setMainOrderId(0L);
 | 
			
		||||
            row = sysOrderMapper.insertSysOrder(sysOrder);
 | 
			
		||||
            //添加副单
 | 
			
		||||
            sysOrder.setMainOrderId(sysOrder.getOrderId());
 | 
			
		||||
            sysOrder.setOrderId(sysOrder.getOrderId()+1);
 | 
			
		||||
            sysOrder.setNutritionistId(sysOrder.getNutritionistIdList()[1-mainIndex]);
 | 
			
		||||
            sysOrder.setAmount(BigDecimal.valueOf(amount.doubleValue()*Integer.parseInt(rateArray[1-mainIndex])/10));
 | 
			
		||||
            row = sysOrderMapper.insertSysOrder(sysOrder);
 | 
			
		||||
            //二开,是否需要自动创建售后二开提成单
 | 
			
		||||
            if(row > 0 && "1".equals(sysOrder.getOrderCountType()) && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
 | 
			
		||||
                sysOrder.setAmount(amount);
 | 
			
		||||
                autoCreateSecondAfterSaleOrder(sysOrder);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //体验单
 | 
			
		||||
        else if("2".equals(sysOrder.getOrderType())){
 | 
			
		||||
            sysOrder.setMainOrderId(0L);
 | 
			
		||||
            sysOrder.setAfterSaleCommissOrder(0);
 | 
			
		||||
            sysOrder.setAfterSaleId(null);
 | 
			
		||||
            sysOrder.setNutritionistId(null);
 | 
			
		||||
            sysOrder.setNutriAssisId(null);
 | 
			
		||||
            row = sysOrderMapper.insertSysOrder(sysOrder);
 | 
			
		||||
        }
 | 
			
		||||
        return row;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 创建售后二开提成订单
 | 
			
		||||
     * @param sysOrder
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    private int autoCreateSecondAfterSaleOrder(SysOrder sysOrder){
 | 
			
		||||
        if(sysOrder != null){
 | 
			
		||||
            sysOrder.setPreSaleId(sysOrder.getAfterSaleId());
 | 
			
		||||
            sysOrder.setAfterSaleId(null);
 | 
			
		||||
            sysOrder.setNutritionistId(null);
 | 
			
		||||
            sysOrder.setNutriAssisId(null);
 | 
			
		||||
            sysOrder.setPlannerId(null);
 | 
			
		||||
            sysOrder.setPlannerAssisId(null);
 | 
			
		||||
            sysOrder.setOperatorId(null);
 | 
			
		||||
            sysOrder.setOperatorAssisId(null);
 | 
			
		||||
            sysOrder.setAfterSaleCommissOrder(1);
 | 
			
		||||
            sysOrder.setOrderId(sysOrder.getOrderId()+1);
 | 
			
		||||
            return sysOrderMapper.insertSysOrder(sysOrder);
 | 
			
		||||
        }
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改销售订单
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user