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 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 139 * pp样品确认意见
... ...
src/main/java/com/order/erp/job/OrderJob.java
... ... @@ -67,28 +67,30 @@ public class OrderJob {
67 67 List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS);
68 68 if (CollectionUtils.isNotEmpty(orderInfoResultVOS)) {
69 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 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 11 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
12 12 import com.order.erp.common.constant.Constant;
13 13 import com.order.erp.common.constant.ServerResult;
  14 +import com.order.erp.common.utils.TransactionHelper;
14 15 import com.order.erp.domain.dto.BaseDO;
  16 +import com.order.erp.domain.dto.SystemSettingDO;
15 17 import com.order.erp.domain.dto.admin.DictionaryDO;
16 18 import com.order.erp.domain.vo.admin.DictionaryQueryVO;
17 19 import com.order.erp.domain.vo.admin.DictionaryResultVO;
18 20 import com.order.erp.domain.vo.admin.DictionaryVO;
19 21 import com.order.erp.mapper.admin.DictionaryMapper;
  22 +import com.order.erp.service.SystemSettingService;
20 23 import com.order.erp.service.admin.DictionaryService;
21 24 import lombok.extern.slf4j.Slf4j;
22 25 import org.springframework.beans.BeanUtils;
23 26 import org.springframework.stereotype.Service;
24 27  
  28 +import javax.annotation.Resource;
  29 +import java.util.ArrayList;
25 30 import java.util.List;
26 31 import java.util.Objects;
27 32 import java.util.stream.Collectors;
... ... @@ -37,6 +42,12 @@ import java.util.stream.Collectors;
37 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 52 * 通过ID查询单条数据
42 53 * <p>
... ... @@ -127,12 +138,52 @@ public class DictionaryServiceImpl extends ServiceImpl&lt;DictionaryMapper, Diction
127 138 }
128 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 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 189 * @param dictionaryVO 实例对象
... ...
src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
1 1 package com.order.erp.service.order;
2 2  
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
3 4 import com.baomidou.mybatisplus.extension.service.IService;
4 5 import com.order.erp.common.constant.ServerResult;
5 6 import com.order.erp.common.excel4j.exceptions.Excel4JException;
... ... @@ -20,6 +21,13 @@ import java.util.Map;
20 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 31 * 通过ID查询单条数据
24 32 *
25 33 * @param orderBaseInfoQueryVO 主键
... ...
src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
... ... @@ -3,6 +3,8 @@ package com.order.erp.service.order;
3 3 import com.baomidou.mybatisplus.extension.service.IService;
4 4 import com.order.erp.common.constant.ServerResult;
5 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 8 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO;
7 9 import com.order.erp.domain.vo.order.OrderCompletionReportVO;
8 10  
... ... @@ -32,6 +34,13 @@ public interface OrderCompletionReportService extends IService&lt;OrderCompletionRe
32 34 */
33 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 24 import com.order.erp.config.DataScope;
25 25 import com.order.erp.domain.*;
26 26 import com.order.erp.domain.dto.BaseDO;
  27 +import com.order.erp.domain.dto.SystemSettingDO;
27 28 import com.order.erp.domain.dto.admin.AdminUserDO;
28 29 import com.order.erp.domain.dto.order.*;
29 30 import com.order.erp.domain.vo.order.*;
30 31 import com.order.erp.mapper.order.OrderBaseInfoMapper;
  32 +import com.order.erp.service.SystemSettingService;
31 33 import com.order.erp.service.admin.AdminUserService;
32 34 import com.order.erp.service.order.*;
33 35 import lombok.extern.slf4j.Slf4j;
... ... @@ -101,6 +103,9 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
101 103 @Resource
102 104 private AdminUserService userService;
103 105  
  106 + @Resource
  107 + private SystemSettingService systemSettingService;
  108 +
104 109 /**
105 110 * 通过ID查询单条数据
106 111 * <p>
... ... @@ -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 618 * @param userId
614 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 622 return OrderFieldLockApplyDO.builder()
628 623 .applyUserId(userId)
629 624 .auditUserId(null)
... ... @@ -639,7 +634,16 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
639 634 * @param profitAnalysisVO
640 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 647 Double profitRate = null;
644 648 if (Objects.nonNull(profitAnalysisVO.getCustomerTotalPrice())
645 649 && Objects.nonNull(profitAnalysisVO.getExchangeRate())
... ... @@ -665,7 +669,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
665 669 .productionDepartmentTotalPrice(Objects.nonNull(profitAnalysisVO.getProductionDepartmentTotalPrice()) ? profitAnalysisVO.getProductionDepartmentTotalPrice().toString() : null)
666 670 .productionDepartmentCurrency(profitAnalysisVO.getProductionDepartmentCurrency())
667 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 1070 * @param queryVO
1067 1071 * @return
1068 1072 */
1069   - private LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) {
  1073 + @Override
  1074 + public LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) {
1070 1075 RoleEnum roleEnum = dataScope.getRole();
1071 1076 // 跟单员
1072 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 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 1125 List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>()
1100 1126 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
1101 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 1130 if (CollectionUtils.isNotEmpty(reportDOS)) {
1104 1131 Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet());
1105 1132 if (CollectionUtils.isNotEmpty(orderIds)) {
... ... @@ -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 1353 * @param updateVO 实例对象
... ... @@ -1317,11 +1374,10 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1317 1374 optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_EDIT.getDesc(), JSONObject.toJSONString(updateVO));
1318 1375 }
1319 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 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 4 import cn.hutool.core.collection.CollUtil;
5 5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
6 6 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  7 +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
7 8 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 9 import com.order.erp.common.constant.Constant;
9 10 import com.order.erp.common.constant.ServerResult;
  11 +import com.order.erp.domain.dto.order.OrderBaseInfoDO;
10 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 15 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO;
12 16 import com.order.erp.domain.vo.order.OrderCompletionReportVO;
13 17 import com.order.erp.mapper.order.OrderCompletionReportMapper;
  18 +import com.order.erp.service.order.OrderBaseInfoService;
14 19 import com.order.erp.service.order.OrderCompletionReportService;
15 20 import lombok.extern.slf4j.Slf4j;
16 21 import org.springframework.stereotype.Service;
17 22  
  23 +import javax.annotation.Resource;
  24 +import java.math.BigDecimal;
18 25 import java.util.List;
19 26 import java.util.Objects;
  27 +import java.util.Set;
  28 +import java.util.stream.Collectors;
20 29  
21 30 /**
22 31 * 订单-项目完成报告书(OrderCompletionReport)表服务实现类
... ... @@ -29,6 +38,9 @@ import java.util.Objects;
29 38 public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletionReportMapper, OrderCompletionReportDO> implements OrderCompletionReportService {
30 39  
31 40  
  41 + @Resource
  42 + private OrderBaseInfoService orderBaseInfoService;
  43 +
32 44 /**
33 45 * 通过ID查询单条数据
34 46 * <p>
... ... @@ -60,6 +72,28 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio
60 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 158  
125 159 /**
126 160 * 通过订单id逻辑删除
  161 + *
127 162 * @param orderId
128 163 * @return
129 164 */
... ... @@ -149,7 +184,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio
149 184 public long countByOrderStatus(Integer status) {
150 185 return baseMapper.selectCount(new LambdaQueryWrapper<OrderCompletionReportDO>()
151 186 .eq(OrderCompletionReportDO::getOrderStatus, status)
152   - .eq(OrderCompletionReportDO::getEnableFlag,Constant.ENABLE_TEN));
  187 + .eq(OrderCompletionReportDO::getEnableFlag, Constant.ENABLE_TEN));
153 188 }
154 189  
155 190 @Override
... ...