From 6d2520e650271159207826d8d81b27c8500f3997 Mon Sep 17 00:00:00 2001
From: 谢茂盛 <A807732>
Date: Fri, 8 Dec 2023 10:52:09 +0800
Subject: [PATCH] feat: 问题修复项 1、项目报告书字段拆分 2、设计师权重占比计算

---
 src/main/java/com/order/erp/controller/OrderReportController.java                    | 34 ++++++++++++++++++++++++++++++++++
 src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java               | 27 +++++++++++++++++++++++++++
 src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java                     | 36 ++++++++++++++++++++++++++++++++++++
 src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java                | 29 +++++++++++++++++++++++++++--
 src/main/java/com/order/erp/job/OrderJob.java                                        | 46 ++++++++++++++++++++++++----------------------
 src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java            | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 src/main/java/com/order/erp/service/order/OrderBaseInfoService.java                  |  8 ++++++++
 src/main/java/com/order/erp/service/order/OrderCompletionReportService.java          |  9 +++++++++
 src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java         | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
 src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java | 37 ++++++++++++++++++++++++++++++++++++-
 10 files changed, 330 insertions(+), 47 deletions(-)
 create mode 100644 src/main/java/com/order/erp/controller/OrderReportController.java
 create mode 100644 src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java
 create mode 100644 src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java

diff --git a/src/main/java/com/order/erp/controller/OrderReportController.java b/src/main/java/com/order/erp/controller/OrderReportController.java
new file mode 100644
index 0000000..13f6450
--- /dev/null
+++ b/src/main/java/com/order/erp/controller/OrderReportController.java
@@ -0,0 +1,34 @@
+package com.order.erp.controller;
+
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.vo.OrderReportAnalysisVo;
+import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
+import com.order.erp.domain.vo.order.OrderProfitAnalysisVO;
+import com.order.erp.service.order.OrderCompletionReportService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @author xms
+ * @version 1.0
+ * @project order-erp
+ * @description 订单项目报告书表控制层
+ * @date 2023/10/23 11:48:36
+ */
+@RestController
+@RequestMapping("/order/erp/report")
+public class OrderReportController {
+
+    @Resource
+    OrderCompletionReportService orderCompletionReportService;
+
+    @PostMapping("/analysis")
+    public ServerResult<OrderProfitAnalysisVO> analysis(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) {
+        return orderCompletionReportService.analysis(queryVO);
+    }
+}
diff --git a/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java b/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java
new file mode 100644
index 0000000..10b454f
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java
@@ -0,0 +1,27 @@
+package com.order.erp.domain.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * @author zhongnanhuang
+ * @version 1.0
+ * @project order-erp
+ * @description 利润分析传参
+ * @date 2023/10/30 10:19:26
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class OrderReportAnalysisResultVo implements Serializable {
+
+    /**
+     * 占比
+     */
+    private Double rate;
+}
diff --git a/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java b/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java
new file mode 100644
index 0000000..8d4aae1
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java
@@ -0,0 +1,36 @@
+package com.order.erp.domain.vo;
+
+import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author zhongnanhuang
+ * @version 1.0
+ * @project order-erp
+ * @description 利润分析传参
+ * @date 2023/10/30 10:19:26
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class OrderReportAnalysisVo implements Serializable {
+
+    /**
+     * 查询vo
+     */
+    private OrderBaseInfoQueryVO queryVo;
+
+    /**
+     * 设计师
+     */
+    private String designer;
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java
index 84ce7fc..244ea58 100644
--- a/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java
@@ -106,9 +106,34 @@ public class OrderBaseInfoQueryVO extends BasePageVO implements Serializable {
     private String ideaSource;
 
     /**
-     * 手工初型
+     * 想法来源占比
      */
-    private String manualPreform;
+    private Double ideaSourceRate;
+
+    /**
+     * 设计师
+     */
+    private String designer;
+
+    /**
+     * 手工初型1
+     */
+    private String manualPreform1;
+
+    /**
+     * 手工初型1占比
+     */
+    private Double manualPreform1Rate;
+
+    /**
+     * 手工初型2
+     */
+    private String manualPreform2;
+
+    /**
+     * 手工初型2占比
+     */
+    private Double manualPreform2Rate;
 
     /**
      * pp样品确认意见
diff --git a/src/main/java/com/order/erp/job/OrderJob.java b/src/main/java/com/order/erp/job/OrderJob.java
index 60e9f1e..57577a6 100644
--- a/src/main/java/com/order/erp/job/OrderJob.java
+++ b/src/main/java/com/order/erp/job/OrderJob.java
@@ -67,28 +67,30 @@ public class OrderJob {
         List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS);
         if (CollectionUtils.isNotEmpty(orderInfoResultVOS)) {
             Set<Long> orderIds = orderInfoResultVOS.stream().filter(x -> Objects.nonNull(x.getSchedule()) && Constant.ONE == x.getSchedule()).map(OrderInfoResultVO::getId).collect(Collectors.toSet());
-            LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>()
-                    .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
-
-            LambdaUpdateWrapper<OrderCompletionReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<OrderCompletionReportDO>()
-                    .in(OrderCompletionReportDO::getOrderId, orderIds).set(OrderCompletionReportDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
-
-            LambdaUpdateWrapper<OrderProfitAnalysisDO> profitUpdateWrapper = new LambdaUpdateWrapper<OrderProfitAnalysisDO>()
-                    .in(OrderProfitAnalysisDO::getOrderId, orderIds).set(OrderProfitAnalysisDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
-
-            LambdaUpdateWrapper<OrderTrackStageDO> trackUpdateWrapper = new LambdaUpdateWrapper<OrderTrackStageDO>()
-                    .in(OrderTrackStageDO::getOrderId, orderIds).set(OrderTrackStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
-
-            LambdaUpdateWrapper<OrderInspectionStageDO> inspectUpdateWrapper = new LambdaUpdateWrapper<OrderInspectionStageDO>()
-                    .in(OrderInspectionStageDO::getOrderId, orderIds).set(OrderInspectionStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
-
-            transactionHelper.run(() -> {
-                orderBaseInfoService.update(orderBaseUpdateWrapper);
-                reportService.update(reportUpdateWrapper);
-                profitAnalysisService.update(profitUpdateWrapper);
-                trackStageService.update(trackUpdateWrapper);
-                inspectionStageService.update(inspectUpdateWrapper);
-            });
+            if (CollectionUtils.isNotEmpty(orderIds)) {
+                LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>()
+                        .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
+
+                LambdaUpdateWrapper<OrderCompletionReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<OrderCompletionReportDO>()
+                        .in(OrderCompletionReportDO::getOrderId, orderIds).set(OrderCompletionReportDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
+
+                LambdaUpdateWrapper<OrderProfitAnalysisDO> profitUpdateWrapper = new LambdaUpdateWrapper<OrderProfitAnalysisDO>()
+                        .in(OrderProfitAnalysisDO::getOrderId, orderIds).set(OrderProfitAnalysisDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
+
+                LambdaUpdateWrapper<OrderTrackStageDO> trackUpdateWrapper = new LambdaUpdateWrapper<OrderTrackStageDO>()
+                        .in(OrderTrackStageDO::getOrderId, orderIds).set(OrderTrackStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
+
+                LambdaUpdateWrapper<OrderInspectionStageDO> inspectUpdateWrapper = new LambdaUpdateWrapper<OrderInspectionStageDO>()
+                        .in(OrderInspectionStageDO::getOrderId, orderIds).set(OrderInspectionStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
+
+                transactionHelper.run(() -> {
+                    orderBaseInfoService.update(orderBaseUpdateWrapper);
+                    reportService.update(reportUpdateWrapper);
+                    profitAnalysisService.update(profitUpdateWrapper);
+                    trackStageService.update(trackUpdateWrapper);
+                    inspectionStageService.update(inspectUpdateWrapper);
+                });
+            }
         }
         log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
     }
diff --git a/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java b/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java
index 42d6e81..0a1c2fd 100644
--- a/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java
+++ b/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java
@@ -11,17 +11,22 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.order.erp.common.constant.Constant;
 import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.utils.TransactionHelper;
 import com.order.erp.domain.dto.BaseDO;
+import com.order.erp.domain.dto.SystemSettingDO;
 import com.order.erp.domain.dto.admin.DictionaryDO;
 import com.order.erp.domain.vo.admin.DictionaryQueryVO;
 import com.order.erp.domain.vo.admin.DictionaryResultVO;
 import com.order.erp.domain.vo.admin.DictionaryVO;
 import com.order.erp.mapper.admin.DictionaryMapper;
+import com.order.erp.service.SystemSettingService;
 import com.order.erp.service.admin.DictionaryService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -37,6 +42,12 @@ import java.util.stream.Collectors;
 public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, DictionaryDO> implements DictionaryService {
 
 
+    @Resource
+    private TransactionHelper transactionHelper;
+
+    @Resource
+    private SystemSettingService systemSettingService;
+
     /**
      * 通过ID查询单条数据
      * <p>
@@ -127,12 +138,52 @@ public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, Diction
         }
         DictionaryDO dictionaryDo = BeanUtil.copyProperties(dictionaryVO, DictionaryDO.class);
 
-        save(dictionaryDo);
+        List<SystemSettingDO> systemSettingDOS = new ArrayList<>();
+        // 客户编码
+        if ("customerCode".equals(dictionaryDo.getDictCode())) {
+            systemSettingDOS = initSettings(dictionaryDo);
+        }
+
+        List<SystemSettingDO> finalSystemSettingDOS = systemSettingDOS;
+        transactionHelper.run(() -> {
+            if (CollectionUtils.isNotEmpty(finalSystemSettingDOS)) {
+                systemSettingService.saveBatch(finalSystemSettingDOS);
+            }
+            save(dictionaryDo);
+        });
+
 
         return ServerResult.success();
     }
 
     /**
+     * @param dictionaryDo
+     * @return
+     */
+    private List<SystemSettingDO> initSettings(DictionaryDO dictionaryDo) {
+        List<SystemSettingDO> systemSettingDOS = new ArrayList<>();
+        systemSettingDOS.add(SystemSettingDO.builder()
+                .settingCode(dictionaryDo.getDictCode())
+                .settingName(dictionaryDo.getDictName())
+                .settingValue(dictionaryDo.getDictValue())
+                .settingType(Constant.ONE)
+                .relationCode("packetPrice")
+                .relationName("包装费用")
+                .relationValue("0.55")
+                .build());
+        systemSettingDOS.add(SystemSettingDO.builder()
+                .settingCode(dictionaryDo.getDictCode())
+                .settingName(dictionaryDo.getDictName())
+                .settingValue(dictionaryDo.getDictValue())
+                .settingType(Constant.ONE)
+                .relationCode("profitRate")
+                .relationName("利润率")
+                .relationValue("0.3")
+                .build());
+        return systemSettingDOS;
+    }
+
+    /**
      * 修改数据
      *
      * @param dictionaryVO 实例对象
diff --git a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
index a9a92d7..c5e6510 100644
--- a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
+++ b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
@@ -1,5 +1,6 @@
 package com.order.erp.service.order;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.common.excel4j.exceptions.Excel4JException;
@@ -20,6 +21,13 @@ import java.util.Map;
 public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> {
 
     /**
+     *
+     * @param queryVO
+     * @return
+     */
+    LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO);
+
+    /**
      * 通过ID查询单条数据
      *
      * @param orderBaseInfoQueryVO 主键
diff --git a/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java b/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
index 2abaf5f..d518ef5 100644
--- a/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
+++ b/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
@@ -3,6 +3,8 @@ package com.order.erp.service.order;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.domain.dto.order.OrderCompletionReportDO;
+import com.order.erp.domain.vo.OrderReportAnalysisVo;
+import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO;
 import com.order.erp.domain.vo.order.OrderCompletionReportVO;
 
@@ -32,6 +34,13 @@ public interface OrderCompletionReportService extends IService<OrderCompletionRe
      */
     ServerResult list(OrderCompletionReportQueryVO orderCompletionReportQueryVO);
 
+
+    /**
+     * @param reportAnalysisVo
+     * @return
+     */
+    ServerResult analysis(OrderBaseInfoQueryVO queryVO);
+
     /**
      * 新增数据
      *
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
index 76fb013..60452c1 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
@@ -24,10 +24,12 @@ import com.order.erp.common.utils.ProfitUtils;
 import com.order.erp.config.DataScope;
 import com.order.erp.domain.*;
 import com.order.erp.domain.dto.BaseDO;
+import com.order.erp.domain.dto.SystemSettingDO;
 import com.order.erp.domain.dto.admin.AdminUserDO;
 import com.order.erp.domain.dto.order.*;
 import com.order.erp.domain.vo.order.*;
 import com.order.erp.mapper.order.OrderBaseInfoMapper;
+import com.order.erp.service.SystemSettingService;
 import com.order.erp.service.admin.AdminUserService;
 import com.order.erp.service.order.*;
 import lombok.extern.slf4j.Slf4j;
@@ -101,6 +103,9 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
     @Resource
     private AdminUserService userService;
 
+    @Resource
+    private SystemSettingService systemSettingService;
+
     /**
      * 通过ID查询单条数据
      * <p>
@@ -609,21 +614,11 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
 
 
     /**
-     * @param profitAnalysisVO
+     * @param profitAnalysisFieldVO
      * @param userId
      * @return
      */
-    private OrderFieldLockApplyDO buildProfitFieldLockApplyDO(OrderBaseInfoDO orderBaseInfoDO, OrderProfitAnalysisVO profitAnalysisVO, Long userId) {
-        if (Objects.nonNull(profitAnalysisVO.getCustomerPrice())) {
-            profitAnalysisVO.setCustomerTotalPrice(profitAnalysisVO.getCustomerPrice() * orderBaseInfoDO.getOrderCount());
-        }
-        if (Objects.nonNull(profitAnalysisVO.getPacketPrice())) {
-            profitAnalysisVO.setPacketTotalPrice(profitAnalysisVO.getPacketPrice() * orderBaseInfoDO.getOrderCount());
-        }
-        if (Objects.nonNull(profitAnalysisVO.getProductionDepartmentPrice())) {
-            profitAnalysisVO.setProductionDepartmentTotalPrice(profitAnalysisVO.getProductionDepartmentPrice() * orderBaseInfoDO.getOrderCount());
-        }
-        OrderProfitAnalysisFieldVO profitAnalysisFieldVO = profitAnalysis2profitAnalysisField(profitAnalysisVO);
+    private OrderFieldLockApplyDO buildProfitFieldLockApplyDO(OrderProfitAnalysisFieldVO profitAnalysisFieldVO, Long userId) {
         return OrderFieldLockApplyDO.builder()
                 .applyUserId(userId)
                 .auditUserId(null)
@@ -639,7 +634,16 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
      * @param profitAnalysisVO
      * @return
      */
-    private OrderProfitAnalysisFieldVO profitAnalysis2profitAnalysisField(OrderProfitAnalysisVO profitAnalysisVO) {
+    private OrderProfitAnalysisFieldVO profitAnalysis2profitAnalysisField(OrderBaseInfoDO orderBaseInfoDO, OrderProfitAnalysisVO profitAnalysisVO) {
+        if (Objects.nonNull(profitAnalysisVO.getCustomerPrice())) {
+            profitAnalysisVO.setCustomerTotalPrice(profitAnalysisVO.getCustomerPrice() * orderBaseInfoDO.getOrderCount());
+        }
+        if (Objects.nonNull(profitAnalysisVO.getPacketPrice())) {
+            profitAnalysisVO.setPacketTotalPrice(profitAnalysisVO.getPacketPrice() * orderBaseInfoDO.getOrderCount());
+        }
+        if (Objects.nonNull(profitAnalysisVO.getProductionDepartmentPrice())) {
+            profitAnalysisVO.setProductionDepartmentTotalPrice(profitAnalysisVO.getProductionDepartmentPrice() * orderBaseInfoDO.getOrderCount());
+        }
         Double profitRate = null;
         if (Objects.nonNull(profitAnalysisVO.getCustomerTotalPrice())
                 && Objects.nonNull(profitAnalysisVO.getExchangeRate())
@@ -665,7 +669,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
                 .productionDepartmentTotalPrice(Objects.nonNull(profitAnalysisVO.getProductionDepartmentTotalPrice()) ? profitAnalysisVO.getProductionDepartmentTotalPrice().toString() : null)
                 .productionDepartmentCurrency(profitAnalysisVO.getProductionDepartmentCurrency())
                 .exchangeRate(Objects.nonNull(profitAnalysisVO.getExchangeRate()) ? profitAnalysisVO.getExchangeRate().toString() : null)
-                .profitRate(Objects.nonNull(profitRate) ? profitRate.toString() : null).build();
+                .profitRate(Objects.nonNull(profitRate) ? profitRate.toString() : "0").build();
     }
 
     /**
@@ -1066,7 +1070,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
      * @param queryVO
      * @return
      */
-    private LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) {
+    @Override
+    public LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) {
         RoleEnum roleEnum = dataScope.getRole();
         // 跟单员
         if (Objects.nonNull(roleEnum) && roleEnum.getId().equals(RoleEnum.TRACKER_USER.getId())) {
@@ -1095,11 +1100,33 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
             }
         }
 
-        if (StringUtils.isNotBlank(queryVO.getIdeaSource()) || StringUtils.isNotBlank(queryVO.getManualPreform())) {
+        if (StringUtils.isNotBlank(queryVO.getDesigner())) {
+            List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>()
+                    .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                    .and(q -> q.eq(OrderCompletionReportDO::getIdeaSource, queryVO.getDesigner()).or()
+                            .eq(OrderCompletionReportDO::getManualPreform1, queryVO.getDesigner()).or()
+                            .eq(OrderCompletionReportDO::getManualPreform2, queryVO.getDesigner())));
+            if (CollectionUtils.isNotEmpty(reportDOS)) {
+                Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet());
+                if (CollectionUtils.isNotEmpty(orderIds)) {
+                    Collection<Long> set = CollectionUtil.intersection(orderIds, reportOrderIds);
+                    if (CollectionUtils.isEmpty(set)) {
+                        orderIds.add(-1L);
+                    } else {
+                        orderIds.addAll(set);
+                    }
+                } else {
+                    orderIds.addAll(reportOrderIds);
+                }
+            } else {
+                orderIds.add(-1L);
+            }
+        } else if (StringUtils.isNotBlank(queryVO.getIdeaSource()) || StringUtils.isNotBlank(queryVO.getManualPreform1()) || StringUtils.isNotBlank(queryVO.getManualPreform2())) {
             List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>()
                     .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
                     .eq(StringUtils.isNotBlank(queryVO.getIdeaSource()), OrderCompletionReportDO::getIdeaSource, queryVO.getIdeaSource())
-                    .eq(StringUtils.isNotBlank(queryVO.getManualPreform()), OrderCompletionReportDO::getManualPreform1, queryVO.getManualPreform()));
+                    .eq(StringUtils.isNotBlank(queryVO.getManualPreform2()), OrderCompletionReportDO::getManualPreform2, queryVO.getManualPreform2())
+                    .eq(StringUtils.isNotBlank(queryVO.getManualPreform1()), OrderCompletionReportDO::getManualPreform1, queryVO.getManualPreform1()));
             if (CollectionUtils.isNotEmpty(reportDOS)) {
                 Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet());
                 if (CollectionUtils.isNotEmpty(orderIds)) {
@@ -1291,6 +1318,36 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
     }
 
     /**
+     * @param profitAnalysisVO
+     * @param orderBaseInfoDo
+     * @param userId
+     */
+    public OrderFieldLockApplyDO handlerProfitRate(OrderProfitAnalysisVO profitAnalysisVO, OrderBaseInfoDO orderBaseInfoDo, Long userId) {
+        OrderProfitAnalysisFieldVO profitAnalysisFieldVO = profitAnalysis2profitAnalysisField(orderBaseInfoDo, profitAnalysisVO);
+
+        SystemSettingDO systemSettingDO = systemSettingService.getOne(new LambdaQueryWrapper<SystemSettingDO>()
+                .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(SystemSettingDO::getSettingCode, "customerCode")
+                .eq(SystemSettingDO::getSettingValue, orderBaseInfoDo.getCustomerCode())
+                .eq(SystemSettingDO::getRelationCode, "profitRate").last("limit 1"));
+
+        double profitRate = Objects.nonNull(systemSettingDO) ? Double.parseDouble(systemSettingDO.getRelationValue()) : 0.3;
+        checkApply(profitAnalysisVO.getOrderId(), userId);
+        OrderFieldLockApplyDO orderFieldLockApplyDO = buildProfitFieldLockApplyDO(profitAnalysisFieldVO, userId);
+        orderFieldLockApplyService.save(orderFieldLockApplyDO);
+
+        if (Double.parseDouble(profitAnalysisFieldVO.getProfitRate()) >= profitRate) {
+            // 直接通过
+            orderFieldLockApplyService.doAudit(AuditVO.builder()
+                    .id(orderFieldLockApplyDO.getId())
+                    .status(ApplyStatusEnum.AUDIT_PASS.getStatus())
+                    .build());
+            orderFieldLockApplyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
+        }
+        return orderFieldLockApplyDO;
+    }
+
+    /**
      * 修改数据
      *
      * @param updateVO 实例对象
@@ -1317,11 +1374,10 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
             optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_EDIT.getDesc(), JSONObject.toJSONString(updateVO));
         }
         if (Objects.nonNull(updateVO.getProfitAnalysisInfo())) {
-            checkApply(updateVO.getOrderId(), userId);
-            OrderFieldLockApplyDO orderFieldLockApplyDO = buildProfitFieldLockApplyDO(orderBaseInfoDo, updateVO.getProfitAnalysisInfo(), userId);
-            orderFieldLockApplyService.save(orderFieldLockApplyDO);
+            OrderFieldLockApplyDO orderFieldLockApplyDO = handlerProfitRate(updateVO.getProfitAnalysisInfo(), orderBaseInfoDo, userId);
 
-            orderBaseInfoDo.setOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus());
+            orderBaseInfoDo.setOrderStatus(ApplyStatusEnum.AUDIT_PASS.getStatus().equals(orderFieldLockApplyDO.getStatus()) ? OrderStatusEnum.PROFIT_AUDIT_PASS.getStatus()
+                    : OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus());
             optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_PROFIT_EDIT_APPLY.getDesc(), orderFieldLockApplyDO.getFields());
         }
 
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
index 1c1d3cb..3a198ba 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
@@ -4,19 +4,28 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.order.erp.common.constant.Constant;
 import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.dto.order.OrderBaseInfoDO;
 import com.order.erp.domain.dto.order.OrderCompletionReportDO;
+import com.order.erp.domain.vo.OrderReportAnalysisResultVo;
+import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO;
 import com.order.erp.domain.vo.order.OrderCompletionReportVO;
 import com.order.erp.mapper.order.OrderCompletionReportMapper;
+import com.order.erp.service.order.OrderBaseInfoService;
 import com.order.erp.service.order.OrderCompletionReportService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 订单-项目完成报告书(OrderCompletionReport)表服务实现类
@@ -29,6 +38,9 @@ import java.util.Objects;
 public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletionReportMapper, OrderCompletionReportDO> implements OrderCompletionReportService {
 
 
+    @Resource
+    private OrderBaseInfoService orderBaseInfoService;
+
     /**
      * 通过ID查询单条数据
      * <p>
@@ -60,6 +72,28 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio
         return ServerResult.success();
     }
 
+    @Override
+    public ServerResult analysis(OrderBaseInfoQueryVO queryVO) {
+        LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = orderBaseInfoService.buildQueryByParam(queryVO);
+        List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper);
+        OrderReportAnalysisResultVo resultVo = new OrderReportAnalysisResultVo();
+        if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) {
+            Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet());
+            List<OrderCompletionReportDO> reportDOS = list(new LambdaQueryWrapper<OrderCompletionReportDO>().in(OrderCompletionReportDO::getOrderId, orderIds));
+            BigDecimal sum = new BigDecimal(0);
+            if (CollectionUtils.isNotEmpty(reportDOS)) {
+                for (OrderCompletionReportDO reportDO : reportDOS) {
+                    Double ideaSourceRate = queryVO.getDesigner().equals(reportDO.getIdeaSource()) && Objects.nonNull(reportDO.getIdeaSourceRate()) ? reportDO.getIdeaSourceRate() : 0;
+                    Double manualPreform1Rate = queryVO.getDesigner().equals(reportDO.getManualPreform1()) && Objects.nonNull(reportDO.getManualPreform1Rate()) ? reportDO.getManualPreform1Rate() : 0;
+                    Double manualPreform2Rate = queryVO.getDesigner().equals(reportDO.getManualPreform2()) && Objects.nonNull(reportDO.getManualPreform2Rate()) ? reportDO.getManualPreform2Rate() : 0;
+                    sum = sum.add(new BigDecimal(ideaSourceRate)).add(new BigDecimal(manualPreform1Rate)).add(new BigDecimal(manualPreform2Rate));
+                }
+            }
+            resultVo.setRate(sum.divide(new BigDecimal(orderBaseInfoDOList.size())).doubleValue());
+        }
+        return ServerResult.success(resultVo);
+    }
+
     /**
      * 新增数据
      *
@@ -124,6 +158,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio
 
     /**
      * 通过订单id逻辑删除
+     *
      * @param orderId
      * @return
      */
@@ -149,7 +184,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio
     public long countByOrderStatus(Integer status) {
         return baseMapper.selectCount(new LambdaQueryWrapper<OrderCompletionReportDO>()
                 .eq(OrderCompletionReportDO::getOrderStatus, status)
-                .eq(OrderCompletionReportDO::getEnableFlag,Constant.ENABLE_TEN));
+                .eq(OrderCompletionReportDO::getEnableFlag, Constant.ENABLE_TEN));
     }
 
     @Override
--
libgit2 0.23.3