营养师、售后更换的提成转移,食谱计划生成优化等
This commit is contained in:
		| @@ -83,4 +83,10 @@ public class SysOrderCommisionDayDetail extends BaseEntity { | ||||
|  | ||||
|     //该笔订单对应提成比例 | ||||
|     private Float commissionRate; | ||||
|  | ||||
|     //售后 | ||||
|     private Long afterSaleId; | ||||
|  | ||||
|     //营养师 | ||||
|     private Long nutritionistId; | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,48 @@ | ||||
| package com.stdiet.custom.domain; | ||||
|  | ||||
| import java.util.Date; | ||||
| import com.fasterxml.jackson.annotation.JsonFormat; | ||||
| import com.stdiet.common.annotation.Excel; | ||||
| import com.stdiet.common.core.domain.BaseEntity; | ||||
| import lombok.Data; | ||||
|  | ||||
| /** | ||||
|  * 订单营养师、售后更换记录对象 sys_order_nutritionist_replace_record | ||||
|  * | ||||
|  * @author xzj | ||||
|  * @date 2021-04-02 | ||||
|  */ | ||||
| @Data | ||||
| public class SysOrderNutritionistReplaceRecord extends BaseEntity | ||||
| { | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** $column.columnComment */ | ||||
|     private Long id; | ||||
|  | ||||
|     /** 订单ID */ | ||||
|     @Excel(name = "订单ID") | ||||
|     private Long orderId; | ||||
|  | ||||
|     /** 更换的营养师ID */ | ||||
|     @Excel(name = "更换的营养师ID") | ||||
|     private Long nutritionistId; | ||||
|  | ||||
|     /** 更换的售后ID */ | ||||
|     @Excel(name = "更换的售后ID") | ||||
|     private Long afterSaleId; | ||||
|  | ||||
|     /** 开始时间 */ | ||||
|     @JsonFormat(pattern = "yyyy-MM-dd") | ||||
|     @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd") | ||||
|     private Date startTime; | ||||
|  | ||||
|     /** 删除标识,0未删除1已删除 */ | ||||
|     private Integer delFlag; | ||||
|  | ||||
|     // 售后 | ||||
|     private String afterSale; | ||||
|  | ||||
|     //营养师 | ||||
|     private String nutritionist; | ||||
| } | ||||
| @@ -0,0 +1,69 @@ | ||||
| package com.stdiet.custom.mapper; | ||||
|  | ||||
| import java.util.List; | ||||
| import com.stdiet.custom.domain.SysOrderNutritionistReplaceRecord; | ||||
| import org.apache.ibatis.annotations.Param; | ||||
|  | ||||
| /** | ||||
|  * 订单营养师、售后更换记录Mapper接口 | ||||
|  * | ||||
|  * @author xzj | ||||
|  * @date 2021-04-02 | ||||
|  */ | ||||
| public interface SysOrderNutritionistReplaceRecordMapper | ||||
| { | ||||
|     /** | ||||
|      * 查询订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param id 订单营养师、售后更换记录ID | ||||
|      * @return 订单营养师、售后更换记录 | ||||
|      */ | ||||
|     public SysOrderNutritionistReplaceRecord selectSysOrderNutritionistReplaceRecordById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 查询订单营养师、售后更换记录列表 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 订单营养师、售后更换记录集合 | ||||
|      */ | ||||
|     public List<SysOrderNutritionistReplaceRecord> selectSysOrderNutritionistReplaceRecordList(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord); | ||||
|  | ||||
|     /** | ||||
|      * 新增订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insertSysOrderNutritionistReplaceRecord(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord); | ||||
|  | ||||
|     /** | ||||
|      * 修改订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int updateSysOrderNutritionistReplaceRecord(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord); | ||||
|  | ||||
|     /** | ||||
|      * 删除订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param id 订单营养师、售后更换记录ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteSysOrderNutritionistReplaceRecordById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 批量删除订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param ids 需要删除的数据ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteSysOrderNutritionistReplaceRecordByIds(Long[] ids); | ||||
|  | ||||
|     /** | ||||
|      * 根据订单ID查询对应营养师、售后更换记录 | ||||
|      * @param orderId | ||||
|      * @return | ||||
|      */ | ||||
|     List<SysOrderNutritionistReplaceRecord> getSysOrderReplaceRecordByOrderId(@Param("orderId")Long orderId); | ||||
| } | ||||
| @@ -0,0 +1,68 @@ | ||||
| package com.stdiet.custom.service; | ||||
|  | ||||
| import java.util.List; | ||||
| import com.stdiet.custom.domain.SysOrderNutritionistReplaceRecord; | ||||
|  | ||||
| /** | ||||
|  * 订单营养师、售后更换记录Service接口 | ||||
|  * | ||||
|  * @author xzj | ||||
|  * @date 2021-04-02 | ||||
|  */ | ||||
| public interface ISysOrderNutritionistReplaceRecordService | ||||
| { | ||||
|     /** | ||||
|      * 查询订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param id 订单营养师、售后更换记录ID | ||||
|      * @return 订单营养师、售后更换记录 | ||||
|      */ | ||||
|     public SysOrderNutritionistReplaceRecord selectSysOrderNutritionistReplaceRecordById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 查询订单营养师、售后更换记录列表 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 订单营养师、售后更换记录集合 | ||||
|      */ | ||||
|     public List<SysOrderNutritionistReplaceRecord> selectSysOrderNutritionistReplaceRecordList(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord); | ||||
|  | ||||
|     /** | ||||
|      * 新增订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int insertSysOrderNutritionistReplaceRecord(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord); | ||||
|  | ||||
|     /** | ||||
|      * 修改订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int updateSysOrderNutritionistReplaceRecord(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord); | ||||
|  | ||||
|     /** | ||||
|      * 批量删除订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param ids 需要删除的订单营养师、售后更换记录ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteSysOrderNutritionistReplaceRecordByIds(Long[] ids); | ||||
|  | ||||
|     /** | ||||
|      * 删除订单营养师、售后更换记录信息 | ||||
|      * | ||||
|      * @param id 订单营养师、售后更换记录ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteSysOrderNutritionistReplaceRecordById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 根据订单ID查询订单对于营养师、售后更换记录 | ||||
|      * @param orderId | ||||
|      * @return | ||||
|      */ | ||||
|     List<SysOrderNutritionistReplaceRecord> getSysOrderReplaceRecordByOrderId(Long orderId); | ||||
| } | ||||
| @@ -11,7 +11,9 @@ import com.stdiet.custom.mapper.SysCommisionMapper; | ||||
| import com.stdiet.custom.mapper.SysOrderMapper; | ||||
| import com.stdiet.custom.mapper.SysOrderPauseMapper; | ||||
| import com.stdiet.custom.service.ISysCommissionDayService; | ||||
| import com.stdiet.custom.service.ISysOrderNutritionistReplaceRecordService; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.cglib.core.Local; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.math.BigDecimal; | ||||
| @@ -32,6 +34,9 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|     @Autowired | ||||
|     private SysOrderPauseMapper sysOrderPauseMapper; | ||||
|  | ||||
|     @Autowired | ||||
|     private ISysOrderNutritionistReplaceRecordService sysOrderNutritionistReplaceRecordService; | ||||
|  | ||||
|     @Override | ||||
|     public List<SysCommissionDayDetail> calculateCommissionByDay(SysCommision sysCommision){ | ||||
|         List<SysCommissionDayDetail> result = new ArrayList<>(); | ||||
| @@ -44,7 +49,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|         total.setTotalNotSentCommissionAmount(new BigDecimal(0)); | ||||
|         total.setNextMonthCommission(new BigDecimal(0)); | ||||
|         if(list != null && list.size() > 0){ | ||||
|             Map<Long, List<SysOrderCommisionDayDetail>> orderDetailMap = getOrderByList(sysCommision); | ||||
|             sysCommision.setUserId(null);  //由于存在售后、营养师更换问题,不能根据营养师或售后查询订单 | ||||
|             Map<Long, List<SysOrderCommisionDayDetail>> orderDetailMap = getOrderByList(sysCommision, true); | ||||
|             SysCommissionDayDetail sysCommissionDayDetail = null; | ||||
|             for(SysCommision commision : list){ | ||||
|                 sysCommissionDayDetail = new SysCommissionDayDetail(); | ||||
| @@ -52,7 +58,9 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|                 sysCommissionDayDetail.setNickName(commision.getUserName()); | ||||
|                 sysCommissionDayDetail.setPostId(commision.getPostId()); | ||||
|                 sysCommissionDayDetail.setPostName(commision.getPostName()); | ||||
|  | ||||
|                 if(orderDetailMap.get(sysCommissionDayDetail.getUserId()) != null && orderDetailMap.get(sysCommissionDayDetail.getUserId()).size() > 0){ | ||||
|                     System.out.println(sysCommissionDayDetail.getUserId()); | ||||
|                 } | ||||
|                 dealServerOrderCommissionDetail(sysCommision, orderDetailMap.get(sysCommissionDayDetail.getUserId()), sysCommissionDayDetail); | ||||
|                 result.add(sysCommissionDayDetail); | ||||
|                 //统计所以用户总提成、已发放提成、未发放提成 | ||||
| @@ -69,7 +77,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据订单计算该笔订单的服务到期时间 | ||||
|      * 根据订单计算该笔订单的服务到期时间(开始时间按照食谱开始时间,不能按照提成计算开始时间) | ||||
|      * @param sysOrder 订单对象 | ||||
|      * @return | ||||
|      */ | ||||
| @@ -77,7 +85,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|     public LocalDate getServerEndDate(SysOrder sysOrder){ | ||||
|         LocalDate serverEndDate = null; | ||||
|         if(sysOrder != null && sysOrder.getStartTime() != null){ | ||||
|             //服务开始时间(客户建档时间) | ||||
|             //服务开始时间,食谱开始时间 | ||||
|             LocalDate serverStartDate = DateUtils.dateToLocalDate(sysOrder.getStartTime()); | ||||
|             //订单总服务月数 | ||||
|             int serverMonth = sysOrder.getServeTimeId() != null ? sysOrder.getServeTimeId().intValue()/30 : 0; | ||||
| @@ -115,7 +123,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|             return result; | ||||
|         } | ||||
|         //分页查询2021年1月份之后所有订单 | ||||
|         Map<Long, List<SysOrderCommisionDayDetail>> orderUserMap = getOrderByList(sysCommision); | ||||
|         Map<Long, List<SysOrderCommisionDayDetail>> orderUserMap = getOrderByList(sysCommision, false); | ||||
|         if(orderUserMap == null || !orderUserMap.containsKey(sysCommision.getUserId())){ | ||||
|             return result; | ||||
|         } | ||||
| @@ -350,10 +358,18 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|  | ||||
|     /** | ||||
|      * 查询2021年1月份之后所有订单,对订单进行处理,得出每笔订单的相关信息 | ||||
|      * */ | ||||
|     public Map<Long, List<SysOrderCommisionDayDetail>> getOrderByList(SysCommision sysCommision){ | ||||
|      * @param sysCommision 是否 | ||||
|      * @param cutOrderFlag 是否根据售后、营养师更换记录进行订单切割计算提成 | ||||
|      * @return | ||||
|      */ | ||||
|     public Map<Long, List<SysOrderCommisionDayDetail>> getOrderByList(SysCommision sysCommision, boolean cutOrderFlag){ | ||||
|         //查询2021年1月份之后所有订单 | ||||
|         List<SysOrder> orderList = sysOrderMapper.selectSimpleOrderMessage(sysCommision); | ||||
|         Map<Long, List<SysOrderNutritionistReplaceRecord>> replaceRecordMap = null; | ||||
|         if(cutOrderFlag){ | ||||
|             //查询所有订单营养师、售后转移记录 | ||||
|             replaceRecordMap = dealNutritionistReplaceRecord(sysOrderNutritionistReplaceRecordService.getSysOrderReplaceRecordByOrderId(null)); | ||||
|         } | ||||
|         //整理出每个用户对应的订单List | ||||
|         Map<Long, List<SysOrderCommisionDayDetail>> userOrderResultMap = new HashMap<>(); | ||||
|         for (SysOrder sysOrder : orderList) { | ||||
| @@ -364,18 +380,169 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|                 //System.out.println("客户:"+ sysOrder.getCustomer() +",营养师:"+sysOrder.getNutritionist() + ",售后" + sysOrder.getAfterSale()); | ||||
|                 continue; | ||||
|             } | ||||
|             //对每笔订单进行处理,统计出该比订单在每年每月对应的服务天数、金额、暂停天数等 | ||||
|             SysOrderCommisionDayDetail sysOrderCommisionDayDetail = statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime()); | ||||
|             if(sysOrder.getAfterSaleId() != null && sysOrder.getAfterSaleId() > 0L){ | ||||
|                 addUserOrderResultMap(sysOrder.getAfterSaleId(), sysOrderCommisionDayDetail, userOrderResultMap); | ||||
|             List<SysOrderCommisionDayDetail> orderCommisionDayDetailList = null; | ||||
|             //将服务结束时间设置为空,因为提成的结束时间需要重新计算 | ||||
|             sysOrder.setServerEndTime(null); | ||||
|             //判断是否存在营养师、售后更换记录 | ||||
|             if(cutOrderFlag && replaceRecordMap.containsKey(sysOrder.getOrderId()) && replaceRecordMap.get(sysOrder.getOrderId()).size() > 0){ | ||||
|                 //将订单根据更换记录切割成多个订单 | ||||
|                 SysOrderCommisionDayDetail sysOrderCommisionDayDetail = statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime()); | ||||
|                 orderCommisionDayDetailList = cutOrderByReplaceRecord(sysOrder, sysCommision, sysOrderCommisionDayDetail, replaceRecordMap.get(sysOrder.getOrderId())); | ||||
|             }else{ | ||||
|                  SysOrderCommisionDayDetail commisionDetail = statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime()); | ||||
|                  orderCommisionDayDetailList = new ArrayList<>(); | ||||
|                  orderCommisionDayDetailList.add(commisionDetail); | ||||
|             } | ||||
|             if(sysOrder.getNutritionistId() != null && sysOrder.getNutritionistId() > 0L){ | ||||
|                 addUserOrderResultMap(sysOrder.getNutritionistId(), sysOrderCommisionDayDetail, userOrderResultMap); | ||||
|             if(orderCommisionDayDetailList != null){ | ||||
|                 for (SysOrderCommisionDayDetail detail : orderCommisionDayDetailList) { | ||||
|                     if(detail.getAfterSaleId() != null && detail.getAfterSaleId() > 0L){ | ||||
|                         addUserOrderResultMap(detail.getAfterSaleId(), detail, userOrderResultMap); | ||||
|                     } | ||||
|                     if(detail.getNutritionistId() != null && detail.getNutritionistId() > 0L){ | ||||
|                         addUserOrderResultMap(detail.getNutritionistId(), detail, userOrderResultMap); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return userOrderResultMap; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 对于存在售后、营养师更换的订单进行订单切割 | ||||
|      * @param sysOrder | ||||
|      * @param sysCommision | ||||
|      * @param sysOrderCommisionDayDetail | ||||
|      * @param replaceRecordList | ||||
|      * @return | ||||
|      */ | ||||
|     public List<SysOrderCommisionDayDetail> cutOrderByReplaceRecord(SysOrder sysOrder, SysCommision sysCommision, SysOrderCommisionDayDetail sysOrderCommisionDayDetail, List<SysOrderNutritionistReplaceRecord> replaceRecordList){ | ||||
|         List<SysOrderCommisionDayDetail> sysOrderCommisionDayDetailList = new ArrayList<>(); | ||||
|  | ||||
|         List<SysOrderNutritionistReplaceRecord> nutritionistRecord = new ArrayList<>(); | ||||
|         List<SysOrderNutritionistReplaceRecord> afterSaleRecord = new ArrayList<>(); | ||||
|  | ||||
|         //售后和营养师分类 | ||||
|         for (SysOrderNutritionistReplaceRecord sysOrderRecord : replaceRecordList) { | ||||
|             if (sysOrderRecord.getNutritionistId() != null && sysOrderRecord.getNutritionistId().longValue() > 0) { | ||||
|                 nutritionistRecord.add(sysOrderRecord); | ||||
|             } | ||||
|             if (sysOrderRecord.getAfterSaleId() != null && sysOrderRecord.getAfterSaleId().longValue() > 0) { | ||||
|                 afterSaleRecord.add(sysOrderRecord); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         //原始订单数据 | ||||
|         Long orderNutritionistId = sysOrder.getNutritionistId(); | ||||
|         Long orderAfterSaleId = sysOrder.getAfterSaleId(); | ||||
|         LocalDate serverStartDate = sysOrderCommisionDayDetail.getServerStartDate(); | ||||
|         LocalDate serverEndDate = sysOrderCommisionDayDetail.getServerEndDate(); | ||||
|  | ||||
|  | ||||
|         //营养师、售后记录不能都为0 | ||||
|         if(nutritionistRecord.size() == 0){ | ||||
|             sysOrder.setCommissStartTime(DateUtils.localDateToDate(serverStartDate)); | ||||
|             sysOrder.setServerEndTime(DateUtils.localDateToDate(serverEndDate)); | ||||
|             sysOrder.setAfterSaleId(null); | ||||
|             sysOrderCommisionDayDetailList.add(statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime())); | ||||
|         } | ||||
|         if(afterSaleRecord.size() == 0){ | ||||
|             sysOrder.setCommissStartTime(DateUtils.localDateToDate(serverStartDate)); | ||||
|             sysOrder.setServerEndTime(DateUtils.localDateToDate(serverEndDate)); | ||||
|             sysOrder.setNutritionistId(null); | ||||
|             sysOrderCommisionDayDetailList.add(statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime())); | ||||
|         } | ||||
|  | ||||
|         Map<String, SysOrderCommisionDayDetail> existMap = new HashMap<>(); | ||||
|         for(int i = 0; i < 2; i++){ | ||||
|             List<SysOrderNutritionistReplaceRecord> nutritAfterSaleRecord = i == 0 ? nutritionistRecord : afterSaleRecord; | ||||
|  | ||||
|             if(nutritAfterSaleRecord.size() > 0){ | ||||
|                 //第一天更换记录的开始时间 | ||||
|                 LocalDate firstRecordStartTime = DateUtils.dateToLocalDate(nutritAfterSaleRecord.get(0).getStartTime()); | ||||
|                 if(ChronoUnit.DAYS.between(firstRecordStartTime, serverEndDate) < 0){ | ||||
|                     firstRecordStartTime = serverEndDate; | ||||
|                 } | ||||
|                 //更换的开始时间大于实际订单开始时间,则需要截断时间生成一个新订单 | ||||
|                 if(ChronoUnit.DAYS.between(serverStartDate, firstRecordStartTime) > 0){ | ||||
|                     sysOrder.setCommissStartTime(DateUtils.localDateToDate(serverStartDate)); | ||||
|                     sysOrder.setServerEndTime(DateUtils.localDateToDate(firstRecordStartTime.minusDays(1))); | ||||
|                     sysOrder.setNutritionistId(i == 0 ? orderNutritionistId : null); | ||||
|                     sysOrder.setAfterSaleId(i == 1 ? orderAfterSaleId : null); | ||||
|                     //需要设置金额、服务时长、赠送时长 | ||||
|                     sysOrder.setServeTimeId(ChronoUnit.DAYS.between(DateUtils.dateToLocalDate(sysOrder.getCommissStartTime()), DateUtils.dateToLocalDate(sysOrder.getServerEndTime()))+1); | ||||
|                     sysOrder.setAmount(getMoney(sysOrderCommisionDayDetail.getDayMoney().doubleValue() * sysOrder.getServeTimeId())); | ||||
|                     sysOrder.setGiveServeDay(0); | ||||
|                     sysOrderCommisionDayDetailList.add(statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime())); | ||||
|                 } | ||||
|                 int index = 0; | ||||
|                 for (SysOrderNutritionistReplaceRecord record : nutritAfterSaleRecord) { | ||||
|                     index++; | ||||
|                     LocalDate recordStartTime = DateUtils.dateToLocalDate(record.getStartTime()); | ||||
|                     if(ChronoUnit.DAYS.between(recordStartTime, serverStartDate) > 0){ | ||||
|                         recordStartTime = serverStartDate; | ||||
|                     } | ||||
|                     if((i == 0 && record.getNutritionistId() == null) || (i == 1 && record.getAfterSaleId() == null) | ||||
|                             || ChronoUnit.DAYS.between(recordStartTime, serverEndDate) < 0){ | ||||
|                         continue; | ||||
|                     } | ||||
|                     //获取下一个记录的开始时间,如果不存在则直接取服务结束时间 | ||||
|                     LocalDate nextRecordStartTime = replaceRecordList.size() > index ? DateUtils.dateToLocalDate(replaceRecordList.get(index).getStartTime()) : null; | ||||
|                     if(nextRecordStartTime == null || ChronoUnit.DAYS.between(recordStartTime, serverEndDate) < 0){ | ||||
|                         nextRecordStartTime = serverEndDate; | ||||
|                     } | ||||
|                     if(ChronoUnit.DAYS.between(recordStartTime, nextRecordStartTime) <= 0){ | ||||
|                         continue; | ||||
|                     } | ||||
|                     sysOrder.setCommissStartTime(DateUtils.localDateToDate(recordStartTime)); | ||||
|                     sysOrder.setServerEndTime(DateUtils.localDateToDate(nextRecordStartTime.minusDays(1))); | ||||
|                     sysOrder.setNutritionistId(i == 0 ? record.getNutritionistId() : null); | ||||
|                     sysOrder.setAfterSaleId(i == 1 ? record.getAfterSaleId() : null); | ||||
|                     //需要设置金额、服务时长、赠送时长 | ||||
|                     sysOrder.setServeTimeId(ChronoUnit.DAYS.between(DateUtils.dateToLocalDate(sysOrder.getCommissStartTime()), DateUtils.dateToLocalDate(sysOrder.getServerEndTime()))+1); | ||||
|                     sysOrder.setAmount(getMoney(sysOrderCommisionDayDetail.getDayMoney().doubleValue() * sysOrder.getServeTimeId())); | ||||
|                     sysOrder.setGiveServeDay(0); | ||||
|  | ||||
|                     //判断是否已存在相同时间范围的记录 | ||||
|                     String key = DateUtils.dateTime(sysOrder.getCommissStartTime()) + DateUtils.dateTime(sysOrder.getServerEndTime()); | ||||
|                     if(existMap.containsKey(key)){ | ||||
|                         sysOrderCommisionDayDetailList.add(existMap.get(key)); | ||||
|                     }else{ | ||||
|                         existMap.put(key, statisticsOrderMessage(sysOrder, sysCommision.getServerScopeStartTime(), sysCommision.getServerScopeEndTime())); | ||||
|                         sysOrderCommisionDayDetailList.add(existMap.get(key)); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         for (SysOrderCommisionDayDetail c : sysOrderCommisionDayDetailList) { | ||||
|             System.out.println(c.getOrderId() + "-" + c.getNutritionistId() + "-" + c.getAfterSaleId() + "-"+ | ||||
|                     DateUtils.localDateToString(c.getServerStartDate(),"yyyy-MM-dd") + "-" + | ||||
|                     DateUtils.localDateToString(c.getServerEndDate(),"yyyy-MM-dd") + | ||||
|                     "-" + c.getDayMoney().doubleValue() + "-" + c.getOrderAmount().doubleValue()); | ||||
|         } | ||||
|         return sysOrderCommisionDayDetailList; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 处理订单的营养师、售后更换记录,以订单ID为单位整理 | ||||
|      * @param list | ||||
|      * @return | ||||
|      */ | ||||
|     public Map<Long, List<SysOrderNutritionistReplaceRecord>> dealNutritionistReplaceRecord(List<SysOrderNutritionistReplaceRecord> list){ | ||||
|         Map<Long, List<SysOrderNutritionistReplaceRecord>> orderReplaceRecordMap = new HashMap<>(); | ||||
|         if(list != null && list.size() > 0){ | ||||
|             for (SysOrderNutritionistReplaceRecord record : list) { | ||||
|                 if(orderReplaceRecordMap.containsKey(record.getOrderId())){ | ||||
|                     orderReplaceRecordMap.get(record.getOrderId()).add(record); | ||||
|                 }else{ | ||||
|                     List<SysOrderNutritionistReplaceRecord> recordList = new ArrayList<>(); | ||||
|                     recordList.add(record); | ||||
|                     orderReplaceRecordMap.put(record.getOrderId(), recordList); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return orderReplaceRecordMap; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据用户ID将订单添加到对应用户的订单List | ||||
|      * */ | ||||
| @@ -402,7 +569,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|         //赠送时长 | ||||
|         int giveDay = sysOrder.getGiveServeDay().intValue(); | ||||
|         //服务到期时间(加赠送时间,不加暂停时间) | ||||
|         LocalDate serverEndDate = serverStartDate.plusMonths(serverMonth).plusDays(giveDay+serverSmallDay); | ||||
|         LocalDate serverEndDate = sysOrder.getServerEndTime() == null ? serverStartDate.plusMonths(serverMonth).plusDays(giveDay+serverSmallDay) : DateUtils.dateToLocalDate(sysOrder.getServerEndTime()); | ||||
|         //订单金额 | ||||
|         BigDecimal orderAmount = sysOrder.getAmount(); | ||||
|         //查询暂停列表 | ||||
| @@ -415,7 +582,7 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|         //该笔订单暂停总天数 | ||||
|         int pauseTotalDay = getTotalByMap(everyYearMonthPauseDay); | ||||
|         //服务到期时间加上暂停时间 | ||||
|         serverEndDate = serverEndDate.plusDays(pauseTotalDay); | ||||
|         serverEndDate = sysOrder.getServerEndTime() == null ? serverEndDate.plusDays(pauseTotalDay) : serverEndDate; | ||||
|         //计算每年每月服务天数 | ||||
|         Map<String, Integer> everyYearMonthServerDay = getEveryYearMonthDayCount(serverStartDate, serverEndDate, everyYearMonthPauseDay); | ||||
|         //服务总天数 | ||||
| @@ -440,6 +607,8 @@ public class SysCommissionDayServiceImpl implements ISysCommissionDayService { | ||||
|         sysOrderCommisionDayDetail.setEveryYearMonthPauseDay(everyYearMonthPauseDay); | ||||
|         sysOrderCommisionDayDetail.setEveryYearMonthServerDay(everyYearMonthServerDay); | ||||
|         sysOrderCommisionDayDetail.setEveryYearMonthServerMoney(everyYearMonthServerMoney); | ||||
|         sysOrderCommisionDayDetail.setAfterSaleId(sysOrder.getAfterSaleId()); | ||||
|         sysOrderCommisionDayDetail.setNutritionistId(sysOrder.getNutritionistId()); | ||||
|  | ||||
|         if(StringUtils.isNotEmpty(serverScopeStartTime) && StringUtils.isNotEmpty(serverScopeEndTime)){ | ||||
|             LocalDate realStartTime = DateUtils.stringToLocalDate(serverScopeStartTime, "yyyy-MM-dd"); | ||||
|   | ||||
| @@ -0,0 +1,105 @@ | ||||
| package com.stdiet.custom.service.impl; | ||||
|  | ||||
| import java.util.List; | ||||
| import com.stdiet.common.utils.DateUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import com.stdiet.custom.mapper.SysOrderNutritionistReplaceRecordMapper; | ||||
| import com.stdiet.custom.domain.SysOrderNutritionistReplaceRecord; | ||||
| import com.stdiet.custom.service.ISysOrderNutritionistReplaceRecordService; | ||||
|  | ||||
| /** | ||||
|  * 订单营养师、售后更换记录Service业务层处理 | ||||
|  * | ||||
|  * @author xzj | ||||
|  * @date 2021-04-02 | ||||
|  */ | ||||
| @Service | ||||
| public class SysOrderNutritionistReplaceRecordServiceImpl implements ISysOrderNutritionistReplaceRecordService | ||||
| { | ||||
|     @Autowired | ||||
|     private SysOrderNutritionistReplaceRecordMapper sysOrderNutritionistReplaceRecordMapper; | ||||
|  | ||||
|     /** | ||||
|      * 查询订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param id 订单营养师、售后更换记录ID | ||||
|      * @return 订单营养师、售后更换记录 | ||||
|      */ | ||||
|     @Override | ||||
|     public SysOrderNutritionistReplaceRecord selectSysOrderNutritionistReplaceRecordById(Long id) | ||||
|     { | ||||
|         return sysOrderNutritionistReplaceRecordMapper.selectSysOrderNutritionistReplaceRecordById(id); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询订单营养师、售后更换记录列表 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 订单营养师、售后更换记录 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<SysOrderNutritionistReplaceRecord> selectSysOrderNutritionistReplaceRecordList(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord) | ||||
|     { | ||||
|         return sysOrderNutritionistReplaceRecordMapper.selectSysOrderNutritionistReplaceRecordList(sysOrderNutritionistReplaceRecord); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 新增订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int insertSysOrderNutritionistReplaceRecord(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord) | ||||
|     { | ||||
|         sysOrderNutritionistReplaceRecord.setCreateTime(DateUtils.getNowDate()); | ||||
|         return sysOrderNutritionistReplaceRecordMapper.insertSysOrderNutritionistReplaceRecord(sysOrderNutritionistReplaceRecord); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param sysOrderNutritionistReplaceRecord 订单营养师、售后更换记录 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int updateSysOrderNutritionistReplaceRecord(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord) | ||||
|     { | ||||
|         sysOrderNutritionistReplaceRecord.setUpdateTime(DateUtils.getNowDate()); | ||||
|         return sysOrderNutritionistReplaceRecordMapper.updateSysOrderNutritionistReplaceRecord(sysOrderNutritionistReplaceRecord); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 批量删除订单营养师、售后更换记录 | ||||
|      * | ||||
|      * @param ids 需要删除的订单营养师、售后更换记录ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int deleteSysOrderNutritionistReplaceRecordByIds(Long[] ids) | ||||
|     { | ||||
|         return sysOrderNutritionistReplaceRecordMapper.deleteSysOrderNutritionistReplaceRecordByIds(ids); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除订单营养师、售后更换记录信息 | ||||
|      * | ||||
|      * @param id 订单营养师、售后更换记录ID | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public int deleteSysOrderNutritionistReplaceRecordById(Long id) | ||||
|     { | ||||
|         return sysOrderNutritionistReplaceRecordMapper.deleteSysOrderNutritionistReplaceRecordById(id); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据订单ID查询订单对于营养师、售后更换记录 | ||||
|      * @param orderId | ||||
|      * @return | ||||
|      */ | ||||
|     public List<SysOrderNutritionistReplaceRecord> getSysOrderReplaceRecordByOrderId(Long orderId){ | ||||
|         return sysOrderNutritionistReplaceRecordMapper.getSysOrderReplaceRecordByOrderId(orderId); | ||||
|     } | ||||
| } | ||||
| @@ -305,7 +305,7 @@ public class SysOrderServiceImpl implements ISysOrderService { | ||||
|                     continue; | ||||
|                 } | ||||
|                 //判断前一个订单的结束时间是否大于第二个订单的 | ||||
|                 if(lastServerEndTime != null && ChronoUnit.DAYS.between(DateUtils.dateToLocalDate(sysOrder.getStartTime()), lastServerEndTime) >= 0){ | ||||
|                 if(lastServerEndTime != null && ChronoUnit.DAYS.between(lastServerEndTime, DateUtils.dateToLocalDate(sysOrder.getStartTime())) != 1){ | ||||
|                     newStartTime = lastServerEndTime.plusDays(1); | ||||
|                     //本月第一天 | ||||
|                     LocalDate monthStart = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); | ||||
|   | ||||
| @@ -137,13 +137,13 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService { | ||||
|                     for(SysOrder sysOrder : customerOrderList){ | ||||
|                         //订单为空、金额小于0、订单未审核不进行食谱生成、更新,只对2021年开始的订单进行食谱计划生成,判断订单金额、开始时间、结束时间,为空则直接返回,不重新生成食谱计划 | ||||
|                         if (sysOrder == null || !sysOrder.getReviewStatus().equals("yes") || sysOrder.getAmount().floatValue() <= 0 || sysOrder.getStartTime() == null || sysOrder.getServerEndTime() == null) { | ||||
|                             return; | ||||
|                             continue; | ||||
|                         } | ||||
|                         //判断是否提成单,拆分单中的副单,体验单,定金单 | ||||
|                         if(sysOrder.getAfterSaleCommissOrder().intValue() == 1 || ("1".equals(sysOrder.getOrderType()) && sysOrder.getMainOrderId().intValue() != 0) || | ||||
|                                 "2".equals(sysOrder.getOrderType()) || "1".equals(sysOrder.getOrderMoneyType())){ | ||||
|                             System.out.println("---------------------"+sysOrder.getOrderId()+"不生成食谱------------------------"); | ||||
|                             return; | ||||
|                             continue; | ||||
|                         } | ||||
|                         //判断是否已存在食谱计划 | ||||
|                         SysRecipesPlan queryParam = new SysRecipesPlan(); | ||||
|   | ||||
| @@ -61,7 +61,7 @@ | ||||
|         o.serve_time_id, o.pay_type_id, pay.dict_label as pay_type, o.pre_sale_id, o.create_by, o.create_time, o.after_sale_id, o.update_by, o.update_time, | ||||
|         o.nutritionist_id, o.remark, o.nutri_assis_id, o.account_id, acc.dict_label as account, o.planner_id, o.planner_assis_id, o.operator_id, o.operator_assis_id, | ||||
|         o.recommender, o.order_time,o.give_serve_day,o.conditioning_project_id,cp.dict_label as conditioning_project,o.server_end_time, | ||||
|         o.on_sale_id,o.order_type,o.order_count_type,o.order_money_type,o.main_order_id,o.after_sale_commiss_order | ||||
|         o.on_sale_id,o.order_type,o.order_count_type,o.order_money_type,o.main_order_id,o.after_sale_commiss_order,o.commiss_start_time | ||||
|         from sys_order o | ||||
|         LEFT JOIN sys_customer sc ON sc.id = o.cus_id | ||||
|         LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_pay_type') AS pay ON pay.dict_value = o.pay_type_id | ||||
|   | ||||
| @@ -0,0 +1,107 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <!DOCTYPE mapper | ||||
|         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
|         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.stdiet.custom.mapper.SysOrderNutritionistReplaceRecordMapper"> | ||||
|  | ||||
|     <resultMap type="SysOrderNutritionistReplaceRecord" id="SysOrderNutritionistReplaceRecordResult"> | ||||
|         <result property="id"    column="id"    /> | ||||
|         <result property="orderId"    column="order_id"    /> | ||||
|         <result property="nutritionistId"    column="nutritionist_id"    /> | ||||
|         <result property="afterSaleId"    column="after_sale_id"    /> | ||||
|         <result property="startTime"    column="start_time"    /> | ||||
|         <result property="createTime"    column="create_time"    /> | ||||
|         <result property="createBy"    column="create_by"    /> | ||||
|         <result property="updateTime"    column="update_time"    /> | ||||
|         <result property="updateBy"    column="update_by"    /> | ||||
|         <result property="delFlag"    column="del_flag"    /> | ||||
|  | ||||
|         <!-- 非持久化字段 --> | ||||
|         <result property="afterSale"    column="after_sale"    /> | ||||
|         <result property="nutritionist"    column="nutritionist"    /> | ||||
|     </resultMap> | ||||
|  | ||||
|  | ||||
|     <sql id="selectSysOrderNutritionistReplaceRecordVo"> | ||||
|         select o.id, o.order_id, o.nutritionist_id, o.after_sale_id, o.start_time, o.create_time, o.create_by, | ||||
|         su_sale.nick_name as after_sale, su_nutritionist.nick_name as nutritionist | ||||
|         from sys_order_nutritionist_replace_record o | ||||
|         left join sys_user su_sale on su_sale.user_id = o.after_sale_id and su_sale.del_flag = 0 | ||||
|         left join sys_user su_nutritionist on su_nutritionist.user_id = o.nutritionist_id and su_nutritionist.del_flag = 0 | ||||
|     </sql> | ||||
|  | ||||
|     <select id="selectSysOrderNutritionistReplaceRecordList" parameterType="SysOrderNutritionistReplaceRecord" resultMap="SysOrderNutritionistReplaceRecordResult"> | ||||
|         <include refid="selectSysOrderNutritionistReplaceRecordVo"/> | ||||
|         where o.del_flag = 0 and o.order_id = #{orderId} | ||||
|     </select> | ||||
|  | ||||
|     <select id="selectSysOrderNutritionistReplaceRecordById" parameterType="Long" resultMap="SysOrderNutritionistReplaceRecordResult"> | ||||
|         <include refid="selectSysOrderNutritionistReplaceRecordVo"/> | ||||
|         where o.id = #{id} and o.del_flag = 0 | ||||
|     </select> | ||||
|  | ||||
|     <insert id="insertSysOrderNutritionistReplaceRecord" parameterType="SysOrderNutritionistReplaceRecord"> | ||||
|         insert into sys_order_nutritionist_replace_record | ||||
|         <trim prefix="(" suffix=")" suffixOverrides=","> | ||||
|             <if test="id != null">id,</if> | ||||
|             <if test="orderId != null">order_id,</if> | ||||
|             <if test="nutritionistId != null">nutritionist_id,</if> | ||||
|             <if test="afterSaleId != null">after_sale_id,</if> | ||||
|             <if test="startTime != null">start_time,</if> | ||||
|             <if test="createTime != null">create_time,</if> | ||||
|             <if test="createBy != null">create_by,</if> | ||||
|             <if test="updateTime != null">update_time,</if> | ||||
|             <if test="updateBy != null">update_by,</if> | ||||
|             <if test="delFlag != null">del_flag,</if> | ||||
|         </trim> | ||||
|         <trim prefix="values (" suffix=")" suffixOverrides=","> | ||||
|             <if test="id != null">#{id},</if> | ||||
|             <if test="orderId != null">#{orderId},</if> | ||||
|             <if test="nutritionistId != null">#{nutritionistId},</if> | ||||
|             <if test="afterSaleId != null">#{afterSaleId},</if> | ||||
|             <if test="startTime != null">#{startTime},</if> | ||||
|             <if test="createTime != null">#{createTime},</if> | ||||
|             <if test="createBy != null">#{createBy},</if> | ||||
|             <if test="updateTime != null">#{updateTime},</if> | ||||
|             <if test="updateBy != null">#{updateBy},</if> | ||||
|             <if test="delFlag != null">#{delFlag},</if> | ||||
|         </trim> | ||||
|     </insert> | ||||
|  | ||||
|     <update id="updateSysOrderNutritionistReplaceRecord" parameterType="SysOrderNutritionistReplaceRecord"> | ||||
|         update sys_order_nutritionist_replace_record | ||||
|         <trim prefix="SET" suffixOverrides=","> | ||||
|             <if test="orderId != null">order_id = #{orderId},</if> | ||||
|             <if test="nutritionistId != null">nutritionist_id = #{nutritionistId},</if> | ||||
|             <if test="afterSaleId != null">after_sale_id = #{afterSaleId},</if> | ||||
|             <if test="startTime != null">start_time = #{startTime},</if> | ||||
|             <if test="createTime != null">create_time = #{createTime},</if> | ||||
|             <if test="createBy != null">create_by = #{createBy},</if> | ||||
|             <if test="updateTime != null">update_time = #{updateTime},</if> | ||||
|             <if test="updateBy != null">update_by = #{updateBy},</if> | ||||
|             <if test="delFlag != null">del_flag = #{delFlag},</if> | ||||
|         </trim> | ||||
|         where id = #{id} | ||||
|     </update> | ||||
|  | ||||
|     <update id="deleteSysOrderNutritionistReplaceRecordById" parameterType="Long"> | ||||
|         update sys_order_nutritionist_replace_record set del_flag = 1 where id = #{id} | ||||
|     </update> | ||||
|  | ||||
|     <update id="deleteSysOrderNutritionistReplaceRecordByIds" parameterType="String"> | ||||
|         update sys_order_nutritionist_replace_record set del_flag = 1 where id in | ||||
|         <foreach item="id" collection="array" open="(" separator="," close=")"> | ||||
|             #{id} | ||||
|         </foreach> | ||||
|     </update> | ||||
|  | ||||
|     <select id="getSysOrderReplaceRecordByOrderId" parameterType="Long" resultMap="SysOrderNutritionistReplaceRecordResult"> | ||||
|         select id, order_id, nutritionist_id, after_sale_id, start_time, create_time, create_by from sys_order_nutritionist_replace_record | ||||
|         where del_flag = 0 | ||||
|         <if test="orderId != null"> | ||||
|             and order_id = #{orderId} | ||||
|         </if> | ||||
|         order by id asc | ||||
|     </select> | ||||
|  | ||||
| </mapper> | ||||
		Reference in New Issue
	
	Block a user