diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrder.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrder.java index f94695c39..60d8a6da3 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrder.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrder.java @@ -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; + + } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/AsyncCommonServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/AsyncCommonServiceImpl.java index b4a99b1d1..b0dc6b824 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/AsyncCommonServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/AsyncCommonServiceImpl.java @@ -27,6 +27,7 @@ public class AsyncCommonServiceImpl implements AsyncCommonService { @Autowired private SysFoodHeatStatisticsMapper sysFoodHeatStatisticsMapper; + public static final long sleepTime = 5000; //异步线程睡眠时间,毫秒 /** * 异步更新每个食材对应的蛋白质、脂肪、碳水的质量 @@ -34,6 +35,11 @@ public class AsyncCommonServiceImpl implements AsyncCommonService { @Override @Async public void updateFoodNutritionalQualityAndHeat(Long customerHeatId){ + try { + Thread.sleep(sleepTime); + }catch (Exception e){ + e.printStackTrace(); + } SysCustomerHeatStatistics sysCustomerHeatStatistics = sysCustomerHeatStatisticsMapper.selectSysCustomerHeatStatisticsById(customerHeatId); if(sysCustomerHeatStatistics != null && sysCustomerHeatStatistics.getFoodHeatStatisticsList() != null && sysCustomerHeatStatistics.getFoodHeatStatisticsList().size() > 0){ diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java index 25f6520f3..471ba092f 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCommissionDayServiceImpl.java @@ -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 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 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; } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java index 42855dc14..7ba259a72 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderServiceImpl.java @@ -1,5 +1,6 @@ package com.stdiet.custom.service.impl; +import com.stdiet.common.annotation.Excel; import com.stdiet.common.utils.DateUtils; import com.stdiet.common.utils.SecurityUtils; import com.stdiet.custom.domain.SysOrder; @@ -76,14 +77,101 @@ public class SysOrderServiceImpl implements ISysOrderService { //计算服务到期时间 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; + } + /** * 修改销售订单 * diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml index 592110f80..3cd2494c6 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml @@ -40,6 +40,15 @@ + + + + + + + + + @@ -136,78 +145,90 @@ insert into sys_order - order_id, customer, cus_id, phone, - amount, - status, - pause_time, - start_time, - weight, pay_type_id, + review_status, pre_sale_id, - create_by, - create_time, + status, + weight, after_sale_id, - update_by, - update_time, + start_time, + pause_time, nutritionist_id, - remark, nutri_assis_id, + on_sale_id, account_id, planner_id, planner_assis_id, - operator_id, operator_assis_id, - recommender, - order_time, + operator_id, serve_time_id, - review_status, + recommender, + amount, + order_time, + create_by, + create_time, + update_by, + update_time, + remark, give_serve_day, conditioning_project_id, server_end_time, become_fan_time, + order_type, + order_count_type, + order_money_type, + main_order_id, + after_sale_commiss_order, + del_flag, - #{orderId}, #{customer}, #{cusId}, #{phone}, - #{amount}, - #{status}, - #{pauseTime}, - #{startTime}, - #{weight}, #{payTypeId}, + #{reviewStatus}, #{preSaleId}, - #{createBy}, - #{createTime}, + #{status}, + #{weight}, #{afterSaleId}, - #{updateBy}, - #{updateTime}, + #{startTime}, + #{pauseTime}, #{nutritionistId}, - #{remark}, #{nutriAssisId}, + #{onSaleId}, #{accountId}, #{plannerId}, #{plannerAssisId}, - #{operatorId}, #{operatorAssisId}, - #{recommender}, - #{orderTime}, + #{operatorId}, #{serveTimeId}, - #{reviewStatus}, + #{recommender}, + #{amount}, + #{orderTime}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, #{giveServeDay}, #{conditioningProjectId}, #{serverEndTime}, #{becomeFanTime}, + #{orderType}, + #{orderCountType}, + #{orderMoneyType}, + #{mainOrderId}, + #{afterSaleCommissOrder}, + #{delFlag}, @@ -217,34 +238,41 @@ customer = #{customer}, cus_id = #{cusId}, phone = #{phone}, - amount = #{amount}, - weight = #{weight}, - status = #{status}, - pause_time = #{pauseTime}, - start_time = #{startTime}, pay_type_id = #{payTypeId}, + review_status = #{reviewStatus}, pre_sale_id = #{preSaleId}, - create_by = #{createBy}, - create_time = #{createTime}, + status = #{status}, + weight = #{weight}, after_sale_id = #{afterSaleId}, - update_by = #{updateBy}, - update_time = #{updateTime}, + start_time = #{startTime}, + pause_time = #{pauseTime}, nutritionist_id = #{nutritionistId}, - remark = #{remark}, nutri_assis_id = #{nutriAssisId}, + on_sale_id = #{onSaleId}, account_id = #{accountId}, planner_id = #{plannerId}, planner_assis_id = #{plannerAssisId}, - operator_id = #{operatorId}, operator_assis_id = #{operatorAssisId}, - recommender = #{recommender}, - order_time = #{orderTime}, + operator_id = #{operatorId}, serve_time_id = #{serveTimeId}, - review_status = #{reviewStatus}, + recommender = #{recommender}, + amount = #{amount}, + order_time = #{orderTime}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, give_serve_day = #{giveServeDay}, conditioning_project_id = #{conditioningProjectId}, server_end_time = #{serverEndTime}, become_fan_time = #{becomeFanTime}, + order_type = #{orderType}, + order_count_type = #{orderCountType}, + order_money_type = #{orderMoneyType}, + main_order_id = #{mainOrderId}, + after_sale_commiss_order = #{afterSaleCommissOrder}, + del_flag = #{delFlag}, where order_id = #{orderId} @@ -296,6 +324,15 @@ + + + + + + + + + diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml index 0b6d91f64..05904355f 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml @@ -150,7 +150,7 @@ LEFT JOIN sys_customer sc ON sc.id = srp.cus_id LEFT JOIN sys_user su_nutritionist ON su_nutritionist.user_id = sr.nutritionist_id AND su_nutritionist.del_flag = 0 LEFT JOIN sys_user su_nutritionist_assis ON su_nutritionist_assis.user_id = sr.nutri_assis_id AND su_nutritionist_assis.del_flag = 0 - WHERE srp.del_flag = 0 + WHERE srp.del_flag = 0 and sr.del_flag = 0 AND srp.order_id = #{orderId} AND srp.send_flag = #{sendFlag} AND (sc.name like concat('%',#{customer},'%') OR sc.phone like concat('%',#{customer},'%')) @@ -182,7 +182,7 @@ SELECT srp.id,srp.order_id,sr.customer,sr.phone, srp.start_date,srp.end_date,srp.send_flag,srp.send_time FROM sys_recipes_plan srp LEFT JOIN sys_order sr ON sr.order_id = srp.order_id - WHERE srp.del_flag = 0 AND srp.order_id = #{orderId} + WHERE srp.del_flag = 0 AND sr.del_flag = 0 AND srp.order_id = #{orderId} AND srp.send_flag = #{sendFlag} ORDER BY srp.id ASC diff --git a/stdiet-ui/src/components/OrderAdd/index.vue b/stdiet-ui/src/components/OrderAdd/index.vue index 5ed395174..91b3af742 100644 --- a/stdiet-ui/src/components/OrderAdd/index.vue +++ b/stdiet-ui/src/components/OrderAdd/index.vue @@ -10,16 +10,16 @@ - + - + @@ -116,7 +115,18 @@ - + + + + + + + + - + - + - + - + + - + @@ -112,7 +112,7 @@