From d0b2cf7d3d72c6d601d8cbddf4a92602f7ab3f37 Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Sat, 3 Apr 2021 18:38:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=90=A5=E5=85=BB=E5=B8=88=E3=80=81=E5=94=AE?= =?UTF-8?q?=E5=90=8E=E6=9B=B4=E6=8D=A2=E7=9A=84=E6=8F=90=E6=88=90=E8=BD=AC?= =?UTF-8?q?=E7=A7=BB=EF=BC=8C=E9=A3=9F=E8=B0=B1=E8=AE=A1=E5=88=92=E7=94=9F?= =?UTF-8?q?=E6=88=90=E4=BC=98=E5=8C=96=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...erNutritionistReplaceRecordController.java | 137 ++++++++ .../domain/SysOrderCommisionDayDetail.java | 6 + .../SysOrderNutritionistReplaceRecord.java | 48 +++ ...sOrderNutritionistReplaceRecordMapper.java | 69 ++++ ...OrderNutritionistReplaceRecordService.java | 68 ++++ .../impl/SysCommissionDayServiceImpl.java | 199 ++++++++++- ...rNutritionistReplaceRecordServiceImpl.java | 105 ++++++ .../service/impl/SysOrderServiceImpl.java | 2 +- .../impl/SysRecipesPlanServiceImpl.java | 4 +- .../mapper/custom/SysOrderMapper.xml | 2 +- ...ysOrderNutritionistReplaceRecordMapper.xml | 107 ++++++ .../custom/OrderNutritionistReplaceRecord.js | 53 +++ .../src/components/OrderDrawer/index.vue | 15 + .../OrderNutritionistReplaceRecord/index.vue | 320 ++++++++++++++++++ 14 files changed, 1116 insertions(+), 19 deletions(-) create mode 100644 stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysOrderNutritionistReplaceRecordController.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderNutritionistReplaceRecord.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysOrderNutritionistReplaceRecordMapper.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/service/ISysOrderNutritionistReplaceRecordService.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderNutritionistReplaceRecordServiceImpl.java create mode 100644 stdiet-custom/src/main/resources/mapper/custom/SysOrderNutritionistReplaceRecordMapper.xml create mode 100644 stdiet-ui/src/api/custom/OrderNutritionistReplaceRecord.js create mode 100644 stdiet-ui/src/components/OrderNutritionistReplaceRecord/index.vue diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysOrderNutritionistReplaceRecordController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysOrderNutritionistReplaceRecordController.java new file mode 100644 index 000000000..2c6eff674 --- /dev/null +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysOrderNutritionistReplaceRecordController.java @@ -0,0 +1,137 @@ +package com.stdiet.custom.controller; + +import java.time.temporal.ChronoUnit; +import java.util.List; + +import com.stdiet.common.utils.DateUtils; +import com.stdiet.custom.domain.SysCommision; +import com.stdiet.custom.domain.SysOrder; +import com.stdiet.custom.service.ISysOrderService; +import org.aspectj.weaver.loadtime.Aj; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.stdiet.common.annotation.Log; +import com.stdiet.common.core.controller.BaseController; +import com.stdiet.common.core.domain.AjaxResult; +import com.stdiet.common.enums.BusinessType; +import com.stdiet.custom.domain.SysOrderNutritionistReplaceRecord; +import com.stdiet.custom.service.ISysOrderNutritionistReplaceRecordService; +import com.stdiet.common.utils.poi.ExcelUtil; +import com.stdiet.common.core.page.TableDataInfo; + +/** + * 订单营养师、售后更换记录Controller + * + * @author xzj + * @date 2021-04-02 + */ +@RestController +@RequestMapping("/custom/orderNutritionistReplaceRecord") +public class SysOrderNutritionistReplaceRecordController extends BaseController +{ + @Autowired + private ISysOrderNutritionistReplaceRecordService sysOrderNutritionistReplaceRecordService; + + @Autowired + private ISysOrderService sysOrderService; + + /** + * 查询订单营养师、售后更换记录列表 + */ + @PreAuthorize("@ss.hasPermi('custom:orderNutritionistReplaceRecord:list')") + @GetMapping("/list") + public TableDataInfo list(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord) + { + startPage(); + List list = sysOrderNutritionistReplaceRecordService.selectSysOrderNutritionistReplaceRecordList(sysOrderNutritionistReplaceRecord); + return getDataTable(list); + } + + /** + * 导出订单营养师、售后更换记录列表 + */ + @PreAuthorize("@ss.hasPermi('custom:orderNutritionistReplaceRecord:export')") + @Log(title = "订单营养师、售后更换记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord) + { + List list = sysOrderNutritionistReplaceRecordService.selectSysOrderNutritionistReplaceRecordList(sysOrderNutritionistReplaceRecord); + ExcelUtil util = new ExcelUtil(SysOrderNutritionistReplaceRecord.class); + return util.exportExcel(list, "orderNutritionistReplaceRecord"); + } + + /** + * 获取订单营养师、售后更换记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('custom:orderNutritionistReplaceRecord:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(sysOrderNutritionistReplaceRecordService.selectSysOrderNutritionistReplaceRecordById(id)); + } + + /** + * 新增订单营养师、售后更换记录 + */ + @PreAuthorize("@ss.hasPermi('custom:orderNutritionistReplaceRecord:add')") + @Log(title = "订单营养师、售后更换记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysOrderNutritionistReplaceRecord sysOrderNutritionistReplaceRecord) + { + if(sysOrderNutritionistReplaceRecord.getOrderId() == null || sysOrderNutritionistReplaceRecord.getOrderId().longValue() <= 0){ + return AjaxResult.error("订单ID不存在"); + } + if(sysOrderNutritionistReplaceRecord.getAfterSaleId() == null || sysOrderNutritionistReplaceRecord.getAfterSaleId().longValue() <= 0){ + sysOrderNutritionistReplaceRecord.setAfterSaleId(null); + } + if(sysOrderNutritionistReplaceRecord.getNutritionistId() == null || sysOrderNutritionistReplaceRecord.getNutritionistId().longValue() <= 0){ + sysOrderNutritionistReplaceRecord.setNutritionistId(null); + } + if((sysOrderNutritionistReplaceRecord.getAfterSaleId() == null || sysOrderNutritionistReplaceRecord.getAfterSaleId().longValue() <= 0) + && (sysOrderNutritionistReplaceRecord.getNutritionistId() == null || sysOrderNutritionistReplaceRecord.getNutritionistId().longValue() <= 0)){ + return AjaxResult.error("营养师、售后不能都为空"); + } + SysOrder sysOrder = sysOrderService.selectSysOrderById(sysOrderNutritionistReplaceRecord.getOrderId()); + if(sysOrder == null){ + return AjaxResult.error("订单不存在"); + } + if(sysOrderNutritionistReplaceRecord.getStartTime() == null){ + return AjaxResult.error("开始时间不能为空"); + } + //更换的开始时间不能小于订单开始时间 + if(ChronoUnit.DAYS.between(DateUtils.dateToLocalDate(sysOrderNutritionistReplaceRecord.getStartTime()),DateUtils.dateToLocalDate(sysOrder.getCommissStartTime())) > 0){ + return AjaxResult.error("开始时间不能小于"+ DateUtils.dateTime(sysOrder.getCommissStartTime())); + } + //更换的售后或营养师不能与原订单一致 + if(sysOrderNutritionistReplaceRecord.getNutritionistId() != null && sysOrder.getNutritionistId().longValue() == sysOrderNutritionistReplaceRecord.getNutritionistId().longValue()){ + return AjaxResult.error("更换的营养师与原订单营养师不能相同"); + } + if(sysOrderNutritionistReplaceRecord.getAfterSaleId() != null && sysOrder.getAfterSaleId().longValue() == sysOrderNutritionistReplaceRecord.getAfterSaleId().longValue()){ + return AjaxResult.error("更换的售后与原订单售后不能相同"); + } + //体验单、二开售后提成单都不支持更换营养师和售后 + if(sysOrder.getAfterSaleCommissOrder().intValue() == 1 || "2".equals(sysOrder.getOrderType())){ + return AjaxResult.error("二开提成单、体验单不支持更换营养师、售后"); + } + return toAjax(sysOrderNutritionistReplaceRecordService.insertSysOrderNutritionistReplaceRecord(sysOrderNutritionistReplaceRecord)); + } + + /** + * 删除订单营养师、售后更换记录 + */ + @PreAuthorize("@ss.hasPermi('custom:orderNutritionistReplaceRecord:remove')") + @Log(title = "订单营养师、售后更换记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(sysOrderNutritionistReplaceRecordService.deleteSysOrderNutritionistReplaceRecordByIds(ids)); + } +} \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderCommisionDayDetail.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderCommisionDayDetail.java index f6d8c39c0..d8b65c728 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderCommisionDayDetail.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderCommisionDayDetail.java @@ -83,4 +83,10 @@ public class SysOrderCommisionDayDetail extends BaseEntity { //该笔订单对应提成比例 private Float commissionRate; + + //售后 + private Long afterSaleId; + + //营养师 + private Long nutritionistId; } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderNutritionistReplaceRecord.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderNutritionistReplaceRecord.java new file mode 100644 index 000000000..8679fbc8c --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysOrderNutritionistReplaceRecord.java @@ -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; +} \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysOrderNutritionistReplaceRecordMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysOrderNutritionistReplaceRecordMapper.java new file mode 100644 index 000000000..f0e2db464 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysOrderNutritionistReplaceRecordMapper.java @@ -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 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 getSysOrderReplaceRecordByOrderId(@Param("orderId")Long orderId); +} \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysOrderNutritionistReplaceRecordService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysOrderNutritionistReplaceRecordService.java new file mode 100644 index 000000000..e6e29af7f --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysOrderNutritionistReplaceRecordService.java @@ -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 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 getSysOrderReplaceRecordByOrderId(Long orderId); +} \ No newline at end of file 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 ce5ac362c..8cb86e198 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 @@ -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 calculateCommissionByDay(SysCommision sysCommision){ List 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> orderDetailMap = getOrderByList(sysCommision); + sysCommision.setUserId(null); //由于存在售后、营养师更换问题,不能根据营养师或售后查询订单 + Map> 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> orderUserMap = getOrderByList(sysCommision); + Map> 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> getOrderByList(SysCommision sysCommision){ + * @param sysCommision 是否 + * @param cutOrderFlag 是否根据售后、营养师更换记录进行订单切割计算提成 + * @return + */ + public Map> getOrderByList(SysCommision sysCommision, boolean cutOrderFlag){ //查询2021年1月份之后所有订单 List orderList = sysOrderMapper.selectSimpleOrderMessage(sysCommision); + Map> replaceRecordMap = null; + if(cutOrderFlag){ + //查询所有订单营养师、售后转移记录 + replaceRecordMap = dealNutritionistReplaceRecord(sysOrderNutritionistReplaceRecordService.getSysOrderReplaceRecordByOrderId(null)); + } //整理出每个用户对应的订单List Map> 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 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 cutOrderByReplaceRecord(SysOrder sysOrder, SysCommision sysCommision, SysOrderCommisionDayDetail sysOrderCommisionDayDetail, List replaceRecordList){ + List sysOrderCommisionDayDetailList = new ArrayList<>(); + + List nutritionistRecord = new ArrayList<>(); + List 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 existMap = new HashMap<>(); + for(int i = 0; i < 2; i++){ + List 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> dealNutritionistReplaceRecord(List list){ + Map> 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 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 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"); diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderNutritionistReplaceRecordServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderNutritionistReplaceRecordServiceImpl.java new file mode 100644 index 000000000..d523a3136 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysOrderNutritionistReplaceRecordServiceImpl.java @@ -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 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 getSysOrderReplaceRecordByOrderId(Long orderId){ + return sysOrderNutritionistReplaceRecordMapper.getSysOrderReplaceRecordByOrderId(orderId); + } +} \ No newline at end of file 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 d06fed7e0..738e85c3b 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 @@ -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()); diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java index 4f618704e..8d0d204bd 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java @@ -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(); diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml index 96ae50b8b..60bbc7a68 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysOrderMapper.xml @@ -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 diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysOrderNutritionistReplaceRecordMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysOrderNutritionistReplaceRecordMapper.xml new file mode 100644 index 000000000..e6df40495 --- /dev/null +++ b/stdiet-custom/src/main/resources/mapper/custom/SysOrderNutritionistReplaceRecordMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + insert into sys_order_nutritionist_replace_record + + id, + order_id, + nutritionist_id, + after_sale_id, + start_time, + create_time, + create_by, + update_time, + update_by, + del_flag, + + + #{id}, + #{orderId}, + #{nutritionistId}, + #{afterSaleId}, + #{startTime}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + + + + + update sys_order_nutritionist_replace_record + + order_id = #{orderId}, + nutritionist_id = #{nutritionistId}, + after_sale_id = #{afterSaleId}, + start_time = #{startTime}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + + where id = #{id} + + + + update sys_order_nutritionist_replace_record set del_flag = 1 where id = #{id} + + + + update sys_order_nutritionist_replace_record set del_flag = 1 where id in + + #{id} + + + + + + \ No newline at end of file diff --git a/stdiet-ui/src/api/custom/OrderNutritionistReplaceRecord.js b/stdiet-ui/src/api/custom/OrderNutritionistReplaceRecord.js new file mode 100644 index 000000000..df788c5a0 --- /dev/null +++ b/stdiet-ui/src/api/custom/OrderNutritionistReplaceRecord.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询订单营养师、售后更换记录列表 +export function listOrderNutritionistReplaceRecord(query) { + return request({ + url: '/custom/orderNutritionistReplaceRecord/list', + method: 'get', + params: query + }) +} + +// 查询订单营养师、售后更换记录详细 +export function getOrderNutritionistReplaceRecord(id) { + return request({ + url: '/custom/orderNutritionistReplaceRecord/' + id, + method: 'get' + }) +} + +// 新增订单营养师、售后更换记录 +export function addOrderNutritionistReplaceRecord(data) { + return request({ + url: '/custom/orderNutritionistReplaceRecord', + method: 'post', + data: data + }) +} + +// 修改订单营养师、售后更换记录 +export function updateOrderNutritionistReplaceRecord(data) { + return request({ + url: '/custom/orderNutritionistReplaceRecord', + method: 'put', + data: data + }) +} + +// 删除订单营养师、售后更换记录 +export function delOrderNutritionistReplaceRecord(id) { + return request({ + url: '/custom/orderNutritionistReplaceRecord/' + id, + method: 'delete' + }) +} + +// 导出订单营养师、售后更换记录 +export function exportOrderNutritionistReplaceRecord(query) { + return request({ + url: '/custom/orderNutritionistReplaceRecord/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/stdiet-ui/src/components/OrderDrawer/index.vue b/stdiet-ui/src/components/OrderDrawer/index.vue index 3ba615c2b..1d89e9464 100644 --- a/stdiet-ui/src/components/OrderDrawer/index.vue +++ b/stdiet-ui/src/components/OrderDrawer/index.vue @@ -109,6 +109,14 @@ @click="handleOnDeleteClick(scope.row)" >删除 + 更换记录 @@ -121,6 +129,8 @@ + +