Commit 6d2520e650271159207826d8d81b27c8500f3997

Authored by 谢茂盛
1 parent ddcedc77

feat: 问题修复项

1、项目报告书字段拆分
2、设计师权重占比计算
src/main/java/com/order/erp/controller/OrderReportController.java 0 → 100644
  1 +package com.order.erp.controller;
  2 +
  3 +import com.order.erp.common.constant.ServerResult;
  4 +import com.order.erp.domain.vo.OrderReportAnalysisVo;
  5 +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
  6 +import com.order.erp.domain.vo.order.OrderProfitAnalysisVO;
  7 +import com.order.erp.service.order.OrderCompletionReportService;
  8 +import org.springframework.validation.annotation.Validated;
  9 +import org.springframework.web.bind.annotation.PostMapping;
  10 +import org.springframework.web.bind.annotation.RequestBody;
  11 +import org.springframework.web.bind.annotation.RequestMapping;
  12 +import org.springframework.web.bind.annotation.RestController;
  13 +
  14 +import javax.annotation.Resource;
  15 +
  16 +/**
  17 + * @author xms
  18 + * @version 1.0
  19 + * @project order-erp
  20 + * @description 订单项目报告书表控制层
  21 + * @date 2023/10/23 11:48:36
  22 + */
  23 +@RestController
  24 +@RequestMapping("/order/erp/report")
  25 +public class OrderReportController {
  26 +
  27 + @Resource
  28 + OrderCompletionReportService orderCompletionReportService;
  29 +
  30 + @PostMapping("/analysis")
  31 + public ServerResult<OrderProfitAnalysisVO> analysis(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) {
  32 + return orderCompletionReportService.analysis(queryVO);
  33 + }
  34 +}
src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java 0 → 100644
  1 +package com.order.erp.domain.vo;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Data;
  5 +import lombok.NoArgsConstructor;
  6 +import lombok.ToString;
  7 +
  8 +import java.io.Serializable;
  9 +
  10 +/**
  11 + * @author zhongnanhuang
  12 + * @version 1.0
  13 + * @project order-erp
  14 + * @description 利润分析传参
  15 + * @date 2023/10/30 10:19:26
  16 + */
  17 +@Data
  18 +@AllArgsConstructor
  19 +@NoArgsConstructor
  20 +@ToString
  21 +public class OrderReportAnalysisResultVo implements Serializable {
  22 +
  23 + /**
  24 + * 占比
  25 + */
  26 + private Double rate;
  27 +}
src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java 0 → 100644
  1 +package com.order.erp.domain.vo;
  2 +
  3 +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Data;
  6 +import lombok.NoArgsConstructor;
  7 +import lombok.ToString;
  8 +
  9 +import javax.validation.constraints.NotNull;
  10 +import javax.validation.constraints.Size;
  11 +import java.io.Serializable;
  12 +import java.util.List;
  13 +
  14 +/**
  15 + * @author zhongnanhuang
  16 + * @version 1.0
  17 + * @project order-erp
  18 + * @description 利润分析传参
  19 + * @date 2023/10/30 10:19:26
  20 + */
  21 +@Data
  22 +@AllArgsConstructor
  23 +@NoArgsConstructor
  24 +@ToString
  25 +public class OrderReportAnalysisVo implements Serializable {
  26 +
  27 + /**
  28 + * 查询vo
  29 + */
  30 + private OrderBaseInfoQueryVO queryVo;
  31 +
  32 + /**
  33 + * 设计师
  34 + */
  35 + private String designer;
  36 +}
src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java
@@ -106,9 +106,34 @@ public class OrderBaseInfoQueryVO extends BasePageVO implements Serializable { @@ -106,9 +106,34 @@ public class OrderBaseInfoQueryVO extends BasePageVO implements Serializable {
106 private String ideaSource; 106 private String ideaSource;
107 107
108 /** 108 /**
109 - * 手工初型 109 + * 想法来源占比
110 */ 110 */
111 - private String manualPreform; 111 + private Double ideaSourceRate;
  112 +
  113 + /**
  114 + * 设计师
  115 + */
  116 + private String designer;
  117 +
  118 + /**
  119 + * 手工初型1
  120 + */
  121 + private String manualPreform1;
  122 +
  123 + /**
  124 + * 手工初型1占比
  125 + */
  126 + private Double manualPreform1Rate;
  127 +
  128 + /**
  129 + * 手工初型2
  130 + */
  131 + private String manualPreform2;
  132 +
  133 + /**
  134 + * 手工初型2占比
  135 + */
  136 + private Double manualPreform2Rate;
112 137
113 /** 138 /**
114 * pp样品确认意见 139 * pp样品确认意见
src/main/java/com/order/erp/job/OrderJob.java
@@ -67,28 +67,30 @@ public class OrderJob { @@ -67,28 +67,30 @@ public class OrderJob {
67 List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS); 67 List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS);
68 if (CollectionUtils.isNotEmpty(orderInfoResultVOS)) { 68 if (CollectionUtils.isNotEmpty(orderInfoResultVOS)) {
69 Set<Long> orderIds = orderInfoResultVOS.stream().filter(x -> Objects.nonNull(x.getSchedule()) && Constant.ONE == x.getSchedule()).map(OrderInfoResultVO::getId).collect(Collectors.toSet()); 69 Set<Long> orderIds = orderInfoResultVOS.stream().filter(x -> Objects.nonNull(x.getSchedule()) && Constant.ONE == x.getSchedule()).map(OrderInfoResultVO::getId).collect(Collectors.toSet());
70 - LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>()  
71 - .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());  
72 -  
73 - LambdaUpdateWrapper<OrderCompletionReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<OrderCompletionReportDO>()  
74 - .in(OrderCompletionReportDO::getOrderId, orderIds).set(OrderCompletionReportDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());  
75 -  
76 - LambdaUpdateWrapper<OrderProfitAnalysisDO> profitUpdateWrapper = new LambdaUpdateWrapper<OrderProfitAnalysisDO>()  
77 - .in(OrderProfitAnalysisDO::getOrderId, orderIds).set(OrderProfitAnalysisDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());  
78 -  
79 - LambdaUpdateWrapper<OrderTrackStageDO> trackUpdateWrapper = new LambdaUpdateWrapper<OrderTrackStageDO>()  
80 - .in(OrderTrackStageDO::getOrderId, orderIds).set(OrderTrackStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());  
81 -  
82 - LambdaUpdateWrapper<OrderInspectionStageDO> inspectUpdateWrapper = new LambdaUpdateWrapper<OrderInspectionStageDO>()  
83 - .in(OrderInspectionStageDO::getOrderId, orderIds).set(OrderInspectionStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());  
84 -  
85 - transactionHelper.run(() -> {  
86 - orderBaseInfoService.update(orderBaseUpdateWrapper);  
87 - reportService.update(reportUpdateWrapper);  
88 - profitAnalysisService.update(profitUpdateWrapper);  
89 - trackStageService.update(trackUpdateWrapper);  
90 - inspectionStageService.update(inspectUpdateWrapper);  
91 - }); 70 + if (CollectionUtils.isNotEmpty(orderIds)) {
  71 + LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>()
  72 + .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
  73 +
  74 + LambdaUpdateWrapper<OrderCompletionReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<OrderCompletionReportDO>()
  75 + .in(OrderCompletionReportDO::getOrderId, orderIds).set(OrderCompletionReportDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
  76 +
  77 + LambdaUpdateWrapper<OrderProfitAnalysisDO> profitUpdateWrapper = new LambdaUpdateWrapper<OrderProfitAnalysisDO>()
  78 + .in(OrderProfitAnalysisDO::getOrderId, orderIds).set(OrderProfitAnalysisDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
  79 +
  80 + LambdaUpdateWrapper<OrderTrackStageDO> trackUpdateWrapper = new LambdaUpdateWrapper<OrderTrackStageDO>()
  81 + .in(OrderTrackStageDO::getOrderId, orderIds).set(OrderTrackStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
  82 +
  83 + LambdaUpdateWrapper<OrderInspectionStageDO> inspectUpdateWrapper = new LambdaUpdateWrapper<OrderInspectionStageDO>()
  84 + .in(OrderInspectionStageDO::getOrderId, orderIds).set(OrderInspectionStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
  85 +
  86 + transactionHelper.run(() -> {
  87 + orderBaseInfoService.update(orderBaseUpdateWrapper);
  88 + reportService.update(reportUpdateWrapper);
  89 + profitAnalysisService.update(profitUpdateWrapper);
  90 + trackStageService.update(trackUpdateWrapper);
  91 + inspectionStageService.update(inspectUpdateWrapper);
  92 + });
  93 + }
92 } 94 }
93 log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); 95 log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
94 } 96 }
src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java
@@ -11,17 +11,22 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -11,17 +11,22 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
11 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 11 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
12 import com.order.erp.common.constant.Constant; 12 import com.order.erp.common.constant.Constant;
13 import com.order.erp.common.constant.ServerResult; 13 import com.order.erp.common.constant.ServerResult;
  14 +import com.order.erp.common.utils.TransactionHelper;
14 import com.order.erp.domain.dto.BaseDO; 15 import com.order.erp.domain.dto.BaseDO;
  16 +import com.order.erp.domain.dto.SystemSettingDO;
15 import com.order.erp.domain.dto.admin.DictionaryDO; 17 import com.order.erp.domain.dto.admin.DictionaryDO;
16 import com.order.erp.domain.vo.admin.DictionaryQueryVO; 18 import com.order.erp.domain.vo.admin.DictionaryQueryVO;
17 import com.order.erp.domain.vo.admin.DictionaryResultVO; 19 import com.order.erp.domain.vo.admin.DictionaryResultVO;
18 import com.order.erp.domain.vo.admin.DictionaryVO; 20 import com.order.erp.domain.vo.admin.DictionaryVO;
19 import com.order.erp.mapper.admin.DictionaryMapper; 21 import com.order.erp.mapper.admin.DictionaryMapper;
  22 +import com.order.erp.service.SystemSettingService;
20 import com.order.erp.service.admin.DictionaryService; 23 import com.order.erp.service.admin.DictionaryService;
21 import lombok.extern.slf4j.Slf4j; 24 import lombok.extern.slf4j.Slf4j;
22 import org.springframework.beans.BeanUtils; 25 import org.springframework.beans.BeanUtils;
23 import org.springframework.stereotype.Service; 26 import org.springframework.stereotype.Service;
24 27
  28 +import javax.annotation.Resource;
  29 +import java.util.ArrayList;
25 import java.util.List; 30 import java.util.List;
26 import java.util.Objects; 31 import java.util.Objects;
27 import java.util.stream.Collectors; 32 import java.util.stream.Collectors;
@@ -37,6 +42,12 @@ import java.util.stream.Collectors; @@ -37,6 +42,12 @@ import java.util.stream.Collectors;
37 public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, DictionaryDO> implements DictionaryService { 42 public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, DictionaryDO> implements DictionaryService {
38 43
39 44
  45 + @Resource
  46 + private TransactionHelper transactionHelper;
  47 +
  48 + @Resource
  49 + private SystemSettingService systemSettingService;
  50 +
40 /** 51 /**
41 * 通过ID查询单条数据 52 * 通过ID查询单条数据
42 * <p> 53 * <p>
@@ -127,12 +138,52 @@ public class DictionaryServiceImpl extends ServiceImpl&lt;DictionaryMapper, Diction @@ -127,12 +138,52 @@ public class DictionaryServiceImpl extends ServiceImpl&lt;DictionaryMapper, Diction
127 } 138 }
128 DictionaryDO dictionaryDo = BeanUtil.copyProperties(dictionaryVO, DictionaryDO.class); 139 DictionaryDO dictionaryDo = BeanUtil.copyProperties(dictionaryVO, DictionaryDO.class);
129 140
130 - save(dictionaryDo); 141 + List<SystemSettingDO> systemSettingDOS = new ArrayList<>();
  142 + // 客户编码
  143 + if ("customerCode".equals(dictionaryDo.getDictCode())) {
  144 + systemSettingDOS = initSettings(dictionaryDo);
  145 + }
  146 +
  147 + List<SystemSettingDO> finalSystemSettingDOS = systemSettingDOS;
  148 + transactionHelper.run(() -> {
  149 + if (CollectionUtils.isNotEmpty(finalSystemSettingDOS)) {
  150 + systemSettingService.saveBatch(finalSystemSettingDOS);
  151 + }
  152 + save(dictionaryDo);
  153 + });
  154 +
131 155
132 return ServerResult.success(); 156 return ServerResult.success();
133 } 157 }
134 158
135 /** 159 /**
  160 + * @param dictionaryDo
  161 + * @return
  162 + */
  163 + private List<SystemSettingDO> initSettings(DictionaryDO dictionaryDo) {
  164 + List<SystemSettingDO> systemSettingDOS = new ArrayList<>();
  165 + systemSettingDOS.add(SystemSettingDO.builder()
  166 + .settingCode(dictionaryDo.getDictCode())
  167 + .settingName(dictionaryDo.getDictName())
  168 + .settingValue(dictionaryDo.getDictValue())
  169 + .settingType(Constant.ONE)
  170 + .relationCode("packetPrice")
  171 + .relationName("包装费用")
  172 + .relationValue("0.55")
  173 + .build());
  174 + systemSettingDOS.add(SystemSettingDO.builder()
  175 + .settingCode(dictionaryDo.getDictCode())
  176 + .settingName(dictionaryDo.getDictName())
  177 + .settingValue(dictionaryDo.getDictValue())
  178 + .settingType(Constant.ONE)
  179 + .relationCode("profitRate")
  180 + .relationName("利润率")
  181 + .relationValue("0.3")
  182 + .build());
  183 + return systemSettingDOS;
  184 + }
  185 +
  186 + /**
136 * 修改数据 187 * 修改数据
137 * 188 *
138 * @param dictionaryVO 实例对象 189 * @param dictionaryVO 实例对象
src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
1 package com.order.erp.service.order; 1 package com.order.erp.service.order;
2 2
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
3 import com.baomidou.mybatisplus.extension.service.IService; 4 import com.baomidou.mybatisplus.extension.service.IService;
4 import com.order.erp.common.constant.ServerResult; 5 import com.order.erp.common.constant.ServerResult;
5 import com.order.erp.common.excel4j.exceptions.Excel4JException; 6 import com.order.erp.common.excel4j.exceptions.Excel4JException;
@@ -20,6 +21,13 @@ import java.util.Map; @@ -20,6 +21,13 @@ import java.util.Map;
20 public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> { 21 public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> {
21 22
22 /** 23 /**
  24 + *
  25 + * @param queryVO
  26 + * @return
  27 + */
  28 + LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO);
  29 +
  30 + /**
23 * 通过ID查询单条数据 31 * 通过ID查询单条数据
24 * 32 *
25 * @param orderBaseInfoQueryVO 主键 33 * @param orderBaseInfoQueryVO 主键
src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
@@ -3,6 +3,8 @@ package com.order.erp.service.order; @@ -3,6 +3,8 @@ package com.order.erp.service.order;
3 import com.baomidou.mybatisplus.extension.service.IService; 3 import com.baomidou.mybatisplus.extension.service.IService;
4 import com.order.erp.common.constant.ServerResult; 4 import com.order.erp.common.constant.ServerResult;
5 import com.order.erp.domain.dto.order.OrderCompletionReportDO; 5 import com.order.erp.domain.dto.order.OrderCompletionReportDO;
  6 +import com.order.erp.domain.vo.OrderReportAnalysisVo;
  7 +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
6 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO; 8 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO;
7 import com.order.erp.domain.vo.order.OrderCompletionReportVO; 9 import com.order.erp.domain.vo.order.OrderCompletionReportVO;
8 10
@@ -32,6 +34,13 @@ public interface OrderCompletionReportService extends IService&lt;OrderCompletionRe @@ -32,6 +34,13 @@ public interface OrderCompletionReportService extends IService&lt;OrderCompletionRe
32 */ 34 */
33 ServerResult list(OrderCompletionReportQueryVO orderCompletionReportQueryVO); 35 ServerResult list(OrderCompletionReportQueryVO orderCompletionReportQueryVO);
34 36
  37 +
  38 + /**
  39 + * @param reportAnalysisVo
  40 + * @return
  41 + */
  42 + ServerResult analysis(OrderBaseInfoQueryVO queryVO);
  43 +
35 /** 44 /**
36 * 新增数据 45 * 新增数据
37 * 46 *
src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
@@ -24,10 +24,12 @@ import com.order.erp.common.utils.ProfitUtils; @@ -24,10 +24,12 @@ import com.order.erp.common.utils.ProfitUtils;
24 import com.order.erp.config.DataScope; 24 import com.order.erp.config.DataScope;
25 import com.order.erp.domain.*; 25 import com.order.erp.domain.*;
26 import com.order.erp.domain.dto.BaseDO; 26 import com.order.erp.domain.dto.BaseDO;
  27 +import com.order.erp.domain.dto.SystemSettingDO;
27 import com.order.erp.domain.dto.admin.AdminUserDO; 28 import com.order.erp.domain.dto.admin.AdminUserDO;
28 import com.order.erp.domain.dto.order.*; 29 import com.order.erp.domain.dto.order.*;
29 import com.order.erp.domain.vo.order.*; 30 import com.order.erp.domain.vo.order.*;
30 import com.order.erp.mapper.order.OrderBaseInfoMapper; 31 import com.order.erp.mapper.order.OrderBaseInfoMapper;
  32 +import com.order.erp.service.SystemSettingService;
31 import com.order.erp.service.admin.AdminUserService; 33 import com.order.erp.service.admin.AdminUserService;
32 import com.order.erp.service.order.*; 34 import com.order.erp.service.order.*;
33 import lombok.extern.slf4j.Slf4j; 35 import lombok.extern.slf4j.Slf4j;
@@ -101,6 +103,9 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O @@ -101,6 +103,9 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
101 @Resource 103 @Resource
102 private AdminUserService userService; 104 private AdminUserService userService;
103 105
  106 + @Resource
  107 + private SystemSettingService systemSettingService;
  108 +
104 /** 109 /**
105 * 通过ID查询单条数据 110 * 通过ID查询单条数据
106 * <p> 111 * <p>
@@ -609,21 +614,11 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O @@ -609,21 +614,11 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
609 614
610 615
611 /** 616 /**
612 - * @param profitAnalysisVO 617 + * @param profitAnalysisFieldVO
613 * @param userId 618 * @param userId
614 * @return 619 * @return
615 */ 620 */
616 - private OrderFieldLockApplyDO buildProfitFieldLockApplyDO(OrderBaseInfoDO orderBaseInfoDO, OrderProfitAnalysisVO profitAnalysisVO, Long userId) {  
617 - if (Objects.nonNull(profitAnalysisVO.getCustomerPrice())) {  
618 - profitAnalysisVO.setCustomerTotalPrice(profitAnalysisVO.getCustomerPrice() * orderBaseInfoDO.getOrderCount());  
619 - }  
620 - if (Objects.nonNull(profitAnalysisVO.getPacketPrice())) {  
621 - profitAnalysisVO.setPacketTotalPrice(profitAnalysisVO.getPacketPrice() * orderBaseInfoDO.getOrderCount());  
622 - }  
623 - if (Objects.nonNull(profitAnalysisVO.getProductionDepartmentPrice())) {  
624 - profitAnalysisVO.setProductionDepartmentTotalPrice(profitAnalysisVO.getProductionDepartmentPrice() * orderBaseInfoDO.getOrderCount());  
625 - }  
626 - OrderProfitAnalysisFieldVO profitAnalysisFieldVO = profitAnalysis2profitAnalysisField(profitAnalysisVO); 621 + private OrderFieldLockApplyDO buildProfitFieldLockApplyDO(OrderProfitAnalysisFieldVO profitAnalysisFieldVO, Long userId) {
627 return OrderFieldLockApplyDO.builder() 622 return OrderFieldLockApplyDO.builder()
628 .applyUserId(userId) 623 .applyUserId(userId)
629 .auditUserId(null) 624 .auditUserId(null)
@@ -639,7 +634,16 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O @@ -639,7 +634,16 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
639 * @param profitAnalysisVO 634 * @param profitAnalysisVO
640 * @return 635 * @return
641 */ 636 */
642 - private OrderProfitAnalysisFieldVO profitAnalysis2profitAnalysisField(OrderProfitAnalysisVO profitAnalysisVO) { 637 + private OrderProfitAnalysisFieldVO profitAnalysis2profitAnalysisField(OrderBaseInfoDO orderBaseInfoDO, OrderProfitAnalysisVO profitAnalysisVO) {
  638 + if (Objects.nonNull(profitAnalysisVO.getCustomerPrice())) {
  639 + profitAnalysisVO.setCustomerTotalPrice(profitAnalysisVO.getCustomerPrice() * orderBaseInfoDO.getOrderCount());
  640 + }
  641 + if (Objects.nonNull(profitAnalysisVO.getPacketPrice())) {
  642 + profitAnalysisVO.setPacketTotalPrice(profitAnalysisVO.getPacketPrice() * orderBaseInfoDO.getOrderCount());
  643 + }
  644 + if (Objects.nonNull(profitAnalysisVO.getProductionDepartmentPrice())) {
  645 + profitAnalysisVO.setProductionDepartmentTotalPrice(profitAnalysisVO.getProductionDepartmentPrice() * orderBaseInfoDO.getOrderCount());
  646 + }
643 Double profitRate = null; 647 Double profitRate = null;
644 if (Objects.nonNull(profitAnalysisVO.getCustomerTotalPrice()) 648 if (Objects.nonNull(profitAnalysisVO.getCustomerTotalPrice())
645 && Objects.nonNull(profitAnalysisVO.getExchangeRate()) 649 && Objects.nonNull(profitAnalysisVO.getExchangeRate())
@@ -665,7 +669,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O @@ -665,7 +669,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
665 .productionDepartmentTotalPrice(Objects.nonNull(profitAnalysisVO.getProductionDepartmentTotalPrice()) ? profitAnalysisVO.getProductionDepartmentTotalPrice().toString() : null) 669 .productionDepartmentTotalPrice(Objects.nonNull(profitAnalysisVO.getProductionDepartmentTotalPrice()) ? profitAnalysisVO.getProductionDepartmentTotalPrice().toString() : null)
666 .productionDepartmentCurrency(profitAnalysisVO.getProductionDepartmentCurrency()) 670 .productionDepartmentCurrency(profitAnalysisVO.getProductionDepartmentCurrency())
667 .exchangeRate(Objects.nonNull(profitAnalysisVO.getExchangeRate()) ? profitAnalysisVO.getExchangeRate().toString() : null) 671 .exchangeRate(Objects.nonNull(profitAnalysisVO.getExchangeRate()) ? profitAnalysisVO.getExchangeRate().toString() : null)
668 - .profitRate(Objects.nonNull(profitRate) ? profitRate.toString() : null).build(); 672 + .profitRate(Objects.nonNull(profitRate) ? profitRate.toString() : "0").build();
669 } 673 }
670 674
671 /** 675 /**
@@ -1066,7 +1070,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O @@ -1066,7 +1070,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1066 * @param queryVO 1070 * @param queryVO
1067 * @return 1071 * @return
1068 */ 1072 */
1069 - private LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) { 1073 + @Override
  1074 + public LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) {
1070 RoleEnum roleEnum = dataScope.getRole(); 1075 RoleEnum roleEnum = dataScope.getRole();
1071 // 跟单员 1076 // 跟单员
1072 if (Objects.nonNull(roleEnum) && roleEnum.getId().equals(RoleEnum.TRACKER_USER.getId())) { 1077 if (Objects.nonNull(roleEnum) && roleEnum.getId().equals(RoleEnum.TRACKER_USER.getId())) {
@@ -1095,11 +1100,33 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O @@ -1095,11 +1100,33 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1095 } 1100 }
1096 } 1101 }
1097 1102
1098 - if (StringUtils.isNotBlank(queryVO.getIdeaSource()) || StringUtils.isNotBlank(queryVO.getManualPreform())) { 1103 + if (StringUtils.isNotBlank(queryVO.getDesigner())) {
  1104 + List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>()
  1105 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  1106 + .and(q -> q.eq(OrderCompletionReportDO::getIdeaSource, queryVO.getDesigner()).or()
  1107 + .eq(OrderCompletionReportDO::getManualPreform1, queryVO.getDesigner()).or()
  1108 + .eq(OrderCompletionReportDO::getManualPreform2, queryVO.getDesigner())));
  1109 + if (CollectionUtils.isNotEmpty(reportDOS)) {
  1110 + Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet());
  1111 + if (CollectionUtils.isNotEmpty(orderIds)) {
  1112 + Collection<Long> set = CollectionUtil.intersection(orderIds, reportOrderIds);
  1113 + if (CollectionUtils.isEmpty(set)) {
  1114 + orderIds.add(-1L);
  1115 + } else {
  1116 + orderIds.addAll(set);
  1117 + }
  1118 + } else {
  1119 + orderIds.addAll(reportOrderIds);
  1120 + }
  1121 + } else {
  1122 + orderIds.add(-1L);
  1123 + }
  1124 + } else if (StringUtils.isNotBlank(queryVO.getIdeaSource()) || StringUtils.isNotBlank(queryVO.getManualPreform1()) || StringUtils.isNotBlank(queryVO.getManualPreform2())) {
1099 List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>() 1125 List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>()
1100 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) 1126 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
1101 .eq(StringUtils.isNotBlank(queryVO.getIdeaSource()), OrderCompletionReportDO::getIdeaSource, queryVO.getIdeaSource()) 1127 .eq(StringUtils.isNotBlank(queryVO.getIdeaSource()), OrderCompletionReportDO::getIdeaSource, queryVO.getIdeaSource())
1102 - .eq(StringUtils.isNotBlank(queryVO.getManualPreform()), OrderCompletionReportDO::getManualPreform1, queryVO.getManualPreform())); 1128 + .eq(StringUtils.isNotBlank(queryVO.getManualPreform2()), OrderCompletionReportDO::getManualPreform2, queryVO.getManualPreform2())
  1129 + .eq(StringUtils.isNotBlank(queryVO.getManualPreform1()), OrderCompletionReportDO::getManualPreform1, queryVO.getManualPreform1()));
1103 if (CollectionUtils.isNotEmpty(reportDOS)) { 1130 if (CollectionUtils.isNotEmpty(reportDOS)) {
1104 Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet()); 1131 Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet());
1105 if (CollectionUtils.isNotEmpty(orderIds)) { 1132 if (CollectionUtils.isNotEmpty(orderIds)) {
@@ -1291,6 +1318,36 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O @@ -1291,6 +1318,36 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1291 } 1318 }
1292 1319
1293 /** 1320 /**
  1321 + * @param profitAnalysisVO
  1322 + * @param orderBaseInfoDo
  1323 + * @param userId
  1324 + */
  1325 + public OrderFieldLockApplyDO handlerProfitRate(OrderProfitAnalysisVO profitAnalysisVO, OrderBaseInfoDO orderBaseInfoDo, Long userId) {
  1326 + OrderProfitAnalysisFieldVO profitAnalysisFieldVO = profitAnalysis2profitAnalysisField(orderBaseInfoDo, profitAnalysisVO);
  1327 +
  1328 + SystemSettingDO systemSettingDO = systemSettingService.getOne(new LambdaQueryWrapper<SystemSettingDO>()
  1329 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  1330 + .eq(SystemSettingDO::getSettingCode, "customerCode")
  1331 + .eq(SystemSettingDO::getSettingValue, orderBaseInfoDo.getCustomerCode())
  1332 + .eq(SystemSettingDO::getRelationCode, "profitRate").last("limit 1"));
  1333 +
  1334 + double profitRate = Objects.nonNull(systemSettingDO) ? Double.parseDouble(systemSettingDO.getRelationValue()) : 0.3;
  1335 + checkApply(profitAnalysisVO.getOrderId(), userId);
  1336 + OrderFieldLockApplyDO orderFieldLockApplyDO = buildProfitFieldLockApplyDO(profitAnalysisFieldVO, userId);
  1337 + orderFieldLockApplyService.save(orderFieldLockApplyDO);
  1338 +
  1339 + if (Double.parseDouble(profitAnalysisFieldVO.getProfitRate()) >= profitRate) {
  1340 + // 直接通过
  1341 + orderFieldLockApplyService.doAudit(AuditVO.builder()
  1342 + .id(orderFieldLockApplyDO.getId())
  1343 + .status(ApplyStatusEnum.AUDIT_PASS.getStatus())
  1344 + .build());
  1345 + orderFieldLockApplyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
  1346 + }
  1347 + return orderFieldLockApplyDO;
  1348 + }
  1349 +
  1350 + /**
1294 * 修改数据 1351 * 修改数据
1295 * 1352 *
1296 * @param updateVO 实例对象 1353 * @param updateVO 实例对象
@@ -1317,11 +1374,10 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O @@ -1317,11 +1374,10 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1317 optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_EDIT.getDesc(), JSONObject.toJSONString(updateVO)); 1374 optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_EDIT.getDesc(), JSONObject.toJSONString(updateVO));
1318 } 1375 }
1319 if (Objects.nonNull(updateVO.getProfitAnalysisInfo())) { 1376 if (Objects.nonNull(updateVO.getProfitAnalysisInfo())) {
1320 - checkApply(updateVO.getOrderId(), userId);  
1321 - OrderFieldLockApplyDO orderFieldLockApplyDO = buildProfitFieldLockApplyDO(orderBaseInfoDo, updateVO.getProfitAnalysisInfo(), userId);  
1322 - orderFieldLockApplyService.save(orderFieldLockApplyDO); 1377 + OrderFieldLockApplyDO orderFieldLockApplyDO = handlerProfitRate(updateVO.getProfitAnalysisInfo(), orderBaseInfoDo, userId);
1323 1378
1324 - orderBaseInfoDo.setOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); 1379 + orderBaseInfoDo.setOrderStatus(ApplyStatusEnum.AUDIT_PASS.getStatus().equals(orderFieldLockApplyDO.getStatus()) ? OrderStatusEnum.PROFIT_AUDIT_PASS.getStatus()
  1380 + : OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus());
1325 optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_PROFIT_EDIT_APPLY.getDesc(), orderFieldLockApplyDO.getFields()); 1381 optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_PROFIT_EDIT_APPLY.getDesc(), orderFieldLockApplyDO.getFields());
1326 } 1382 }
1327 1383
src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
@@ -4,19 +4,28 @@ import cn.hutool.core.bean.BeanUtil; @@ -4,19 +4,28 @@ import cn.hutool.core.bean.BeanUtil;
4 import cn.hutool.core.collection.CollUtil; 4 import cn.hutool.core.collection.CollUtil;
5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
6 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 6 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  7 +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
7 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 8 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 import com.order.erp.common.constant.Constant; 9 import com.order.erp.common.constant.Constant;
9 import com.order.erp.common.constant.ServerResult; 10 import com.order.erp.common.constant.ServerResult;
  11 +import com.order.erp.domain.dto.order.OrderBaseInfoDO;
10 import com.order.erp.domain.dto.order.OrderCompletionReportDO; 12 import com.order.erp.domain.dto.order.OrderCompletionReportDO;
  13 +import com.order.erp.domain.vo.OrderReportAnalysisResultVo;
  14 +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
11 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO; 15 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO;
12 import com.order.erp.domain.vo.order.OrderCompletionReportVO; 16 import com.order.erp.domain.vo.order.OrderCompletionReportVO;
13 import com.order.erp.mapper.order.OrderCompletionReportMapper; 17 import com.order.erp.mapper.order.OrderCompletionReportMapper;
  18 +import com.order.erp.service.order.OrderBaseInfoService;
14 import com.order.erp.service.order.OrderCompletionReportService; 19 import com.order.erp.service.order.OrderCompletionReportService;
15 import lombok.extern.slf4j.Slf4j; 20 import lombok.extern.slf4j.Slf4j;
16 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
17 22
  23 +import javax.annotation.Resource;
  24 +import java.math.BigDecimal;
18 import java.util.List; 25 import java.util.List;
19 import java.util.Objects; 26 import java.util.Objects;
  27 +import java.util.Set;
  28 +import java.util.stream.Collectors;
20 29
21 /** 30 /**
22 * 订单-项目完成报告书(OrderCompletionReport)表服务实现类 31 * 订单-项目完成报告书(OrderCompletionReport)表服务实现类
@@ -29,6 +38,9 @@ import java.util.Objects; @@ -29,6 +38,9 @@ import java.util.Objects;
29 public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletionReportMapper, OrderCompletionReportDO> implements OrderCompletionReportService { 38 public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletionReportMapper, OrderCompletionReportDO> implements OrderCompletionReportService {
30 39
31 40
  41 + @Resource
  42 + private OrderBaseInfoService orderBaseInfoService;
  43 +
32 /** 44 /**
33 * 通过ID查询单条数据 45 * 通过ID查询单条数据
34 * <p> 46 * <p>
@@ -60,6 +72,28 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio @@ -60,6 +72,28 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio
60 return ServerResult.success(); 72 return ServerResult.success();
61 } 73 }
62 74
  75 + @Override
  76 + public ServerResult analysis(OrderBaseInfoQueryVO queryVO) {
  77 + LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = orderBaseInfoService.buildQueryByParam(queryVO);
  78 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper);
  79 + OrderReportAnalysisResultVo resultVo = new OrderReportAnalysisResultVo();
  80 + if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) {
  81 + Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet());
  82 + List<OrderCompletionReportDO> reportDOS = list(new LambdaQueryWrapper<OrderCompletionReportDO>().in(OrderCompletionReportDO::getOrderId, orderIds));
  83 + BigDecimal sum = new BigDecimal(0);
  84 + if (CollectionUtils.isNotEmpty(reportDOS)) {
  85 + for (OrderCompletionReportDO reportDO : reportDOS) {
  86 + Double ideaSourceRate = queryVO.getDesigner().equals(reportDO.getIdeaSource()) && Objects.nonNull(reportDO.getIdeaSourceRate()) ? reportDO.getIdeaSourceRate() : 0;
  87 + Double manualPreform1Rate = queryVO.getDesigner().equals(reportDO.getManualPreform1()) && Objects.nonNull(reportDO.getManualPreform1Rate()) ? reportDO.getManualPreform1Rate() : 0;
  88 + Double manualPreform2Rate = queryVO.getDesigner().equals(reportDO.getManualPreform2()) && Objects.nonNull(reportDO.getManualPreform2Rate()) ? reportDO.getManualPreform2Rate() : 0;
  89 + sum = sum.add(new BigDecimal(ideaSourceRate)).add(new BigDecimal(manualPreform1Rate)).add(new BigDecimal(manualPreform2Rate));
  90 + }
  91 + }
  92 + resultVo.setRate(sum.divide(new BigDecimal(orderBaseInfoDOList.size())).doubleValue());
  93 + }
  94 + return ServerResult.success(resultVo);
  95 + }
  96 +
63 /** 97 /**
64 * 新增数据 98 * 新增数据
65 * 99 *
@@ -124,6 +158,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio @@ -124,6 +158,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio
124 158
125 /** 159 /**
126 * 通过订单id逻辑删除 160 * 通过订单id逻辑删除
  161 + *
127 * @param orderId 162 * @param orderId
128 * @return 163 * @return
129 */ 164 */
@@ -149,7 +184,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio @@ -149,7 +184,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio
149 public long countByOrderStatus(Integer status) { 184 public long countByOrderStatus(Integer status) {
150 return baseMapper.selectCount(new LambdaQueryWrapper<OrderCompletionReportDO>() 185 return baseMapper.selectCount(new LambdaQueryWrapper<OrderCompletionReportDO>()
151 .eq(OrderCompletionReportDO::getOrderStatus, status) 186 .eq(OrderCompletionReportDO::getOrderStatus, status)
152 - .eq(OrderCompletionReportDO::getEnableFlag,Constant.ENABLE_TEN)); 187 + .eq(OrderCompletionReportDO::getEnableFlag, Constant.ENABLE_TEN));
153 } 188 }
154 189
155 @Override 190 @Override