From eb1edbfee9cb19cd5efbbf4c10e62156cbac112c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?=
 <14103883+leaf-phos@user.noreply.gitee.com>
Date: Wed, 5 Mar 2025 18:03:03 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../com/ruoyi/bst/order/domain/OrderVO.java   | 13 +++--
 .../prodProcess/domain/ProdProcessQuery.java  |  3 ++
 .../domain/vo/ProdProcessNameVO.java          | 27 ++++++++++
 .../prodProcess/mapper/ProdProcessMapper.java |  6 +++
 .../prodProcess/mapper/ProdProcessMapper.xml  | 14 ++++++
 .../service/IProdProcessService.java          |  6 +++
 .../service/ProdProcessAssembler.java         | 12 +++++
 .../impl/ProdProcessAssemblerImpl.java        | 50 +++++++++++++++++++
 .../service/impl/ProdProcessServiceImpl.java  |  6 +++
 .../ruoyi/web/bst/ProdProcessController.java  | 19 +++++++
 .../src/main/resources/application-druid.yml  |  4 +-
 11 files changed, 155 insertions(+), 5 deletions(-)
 create mode 100644 common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/vo/ProdProcessNameVO.java

diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java
index 8980774..bb9fcde 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java
@@ -41,13 +41,20 @@ public class OrderVO extends Order{
         if (this.storeNum == null || this.getTotalNum() == null) {
             return BigDecimal.ZERO;
         }
+        BigDecimal total = this.getTotalNum();
+        if (this.getNum() != null) {
+            total = total.subtract(this.getNum());
+        }
+        if (total.compareTo(BigDecimal.ZERO) <= 0) {
+            return BigDecimal.ZERO;
+        }
+
         return this.storeNum
-                .subtract(this.getNum())
                 .multiply(new BigDecimal(100))
-                .divide(this.getTotalNum(), 2, RoundingMode.HALF_UP);
+                .divide(total, 2, RoundingMode.HALF_UP);
     }
 
-    @ApiModelProperty("产品进度")
+    @ApiModelProperty("成品进度")
     public BigDecimal getEndProgress() {
         if (this.endStoreNum == null || this.getNum() == null) {
             return BigDecimal.ZERO;
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java
index 2c7c502..cc300b5 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java
@@ -23,4 +23,7 @@ public class ProdProcessQuery extends ProdProcessVO{
 
     @ApiModelProperty("订单状态列表")
     private List<String> orderStatusList;
+
+    @ApiModelProperty("精准产品名称列表")
+    private List<String> eqNames;
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/vo/ProdProcessNameVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/vo/ProdProcessNameVO.java
new file mode 100644
index 0000000..bb6d958
--- /dev/null
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/vo/ProdProcessNameVO.java
@@ -0,0 +1,27 @@
+package com.ruoyi.bst.prodProcess.domain.vo;
+
+import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class ProdProcessNameVO {
+
+    @ApiModelProperty("产品名称")
+    private String name;
+
+    @ApiModelProperty("总数量")
+    private BigDecimal totalNum;
+
+    @ApiModelProperty("上报数量")
+    private BigDecimal reportNum;
+
+    @ApiModelProperty("入库数量")
+    private BigDecimal storeNum;
+
+    @ApiModelProperty("工序列表")
+    private List<ProdProcessVO> processList;
+}
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.java
index 183ffe9..641ae8d 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.java
@@ -3,6 +3,7 @@ package com.ruoyi.bst.prodProcess.mapper;
 import com.ruoyi.bst.prodProcess.domain.ProdProcess;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
+import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -82,4 +83,9 @@ public interface ProdProcessMapper
      * 查询汇总
      */
     public List<Map<String, Object>> selectSum(@Param("query")ProdProcessQuery query, @Param("groupBy")List<String> groupBy);
+
+    /**
+     * 查询名称列表
+     */
+    public List<ProdProcessNameVO> selectProdProcessNames(@Param("query") ProdProcessQuery query);
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml
index f1e8307..ca0b692 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml
@@ -69,6 +69,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="query.deptName != null  and query.deptName != ''"> and sd.dept_name like concat('%', #{query.deptName}, '%')</if>
         <if test="query.orderId != null">and bop.order_id = #{query.orderId}</if>
         <if test="query.orderStatus != null">and bo.status = #{query.orderStatus}</if>
+        <if test="query.eqNames != null and query.eqNames.size() > 0">
+            and bop.name in
+            <foreach collection="query.eqNames" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test="query.orderProdIds != null and query.orderProdIds.size() > 0">
             and bpp.order_prod_id in
             <foreach collection="query.orderProdIds" item="item" open="(" close=")" separator=",">
@@ -343,4 +349,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <!-- selectProdProcessNames -->
+    <select id="selectProdProcessNames" resultType="ProdProcessNameVO">
+        select distinct bop.name
+        from <include refid="searchTables"/>
+        <where>
+            <include refid="searchCondition"/>
+        </where>
+    </select>
 </mapper>
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/IProdProcessService.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/IProdProcessService.java
index 5188cfe..382ab43 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/IProdProcessService.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/IProdProcessService.java
@@ -3,6 +3,7 @@ package com.ruoyi.bst.prodProcess.service;
 import com.ruoyi.bst.prodProcess.domain.ProdProcess;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
+import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO;
 
 import java.util.List;
 
@@ -85,4 +86,9 @@ public interface IProdProcessService
     int logicDelByOrderId(Long orderId);
 
     List<ProdProcessVO> selectByIds(List<Long> ids);
+
+    /**
+     * 查询名称列表
+     */
+    List<ProdProcessNameVO> selectProdProcessNames(ProdProcessQuery query);
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/ProdProcessAssembler.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/ProdProcessAssembler.java
index ce06ccd..a8afc31 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/ProdProcessAssembler.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/ProdProcessAssembler.java
@@ -1,7 +1,9 @@
 package com.ruoyi.bst.prodProcess.service;
 
 import com.ruoyi.bst.prodProcess.domain.ProdProcessBO;
+import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
+import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO;
 
 import java.util.List;
 
@@ -31,4 +33,14 @@ public interface ProdProcessAssembler {
      * 拼接进度
      */
     void assembleProgress(List<ProdProcessVO> list);
+
+    /**
+     * 拼接明细
+     */
+    void assembleProdList(List<ProdProcessNameVO> list, ProdProcessQuery query);
+
+    /**
+     * 拼接总数量
+     */
+    void assembleTotalNum(List<ProdProcessNameVO> list);
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessAssemblerImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessAssemblerImpl.java
index 4f7026d..9020555 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessAssemblerImpl.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessAssemblerImpl.java
@@ -2,7 +2,10 @@ package com.ruoyi.bst.prodProcess.service.impl;
 
 import com.ruoyi.bst.prodProcess.domain.ProdProcess;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessBO;
+import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
+import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO;
+import com.ruoyi.bst.prodProcess.service.IProdProcessService;
 import com.ruoyi.bst.prodProcess.service.ProdProcessAssembler;
 import com.ruoyi.bst.store.domain.StoreQuery;
 import com.ruoyi.bst.store.domain.enums.StoreGroupBy;
@@ -17,8 +20,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author wjh
@@ -32,6 +38,9 @@ public class ProdProcessAssemblerImpl implements ProdProcessAssembler {
     @Autowired
     private IStoreService storeService;
 
+    @Autowired
+    private IProdProcessService prodProcessService;
+
     @Override
     public void assembleDept(List<ProdProcessBO> list) {
         if (CollectionUtils.isEmptyElement(list)) {
@@ -100,4 +109,45 @@ public class ProdProcessAssemblerImpl implements ProdProcessAssembler {
         this.assembleReportNum(list);
         this.assembleStoreNum(list);
     }
+
+    @Override
+    public void assembleProdList(List<ProdProcessNameVO> list, ProdProcessQuery query) {
+        if (CollectionUtils.isEmptyElement(list)) {
+            return;
+        }
+
+        // 查询列表
+        query.setEqNames(CollectionUtils.map(list, ProdProcessNameVO::getName));
+        List<ProdProcessVO> prodList = prodProcessService.selectProdProcessList(query);
+        // 拼接进度
+        this.assembleProgress(prodList);
+        // 分组
+        Map<String, List<ProdProcessVO>> group = prodList.stream().collect(Collectors.groupingBy(ProdProcessVO::getOrderProdName));
+
+        // 组装数据
+        for (ProdProcessNameVO vo : list) {
+            List<ProdProcessVO> groupList = group.get(vo.getName());
+            if (groupList == null) {
+                groupList = new ArrayList<>();
+            }
+            vo.setProcessList(groupList);
+        }
+
+    }
+
+    @Override
+    public void assembleTotalNum(List<ProdProcessNameVO> list) {
+        if (CollectionUtils.isEmptyElement(list)) {
+            return;
+        }
+        for (ProdProcessNameVO vo : list) {
+            List<ProdProcessVO> processList = vo.getProcessList();
+            if (CollectionUtils.isEmptyElement(processList)) {
+                continue;
+            }
+            vo.setTotalNum(CollectionUtils.sumDecimal(processList, ProdProcessVO::getNum));
+            vo.setReportNum(CollectionUtils.sumDecimal(processList, ProdProcessVO::getReportNum));
+            vo.setStoreNum(CollectionUtils.sumDecimal(processList, ProdProcessVO::getStoreNum));
+        }
+    }
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessServiceImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessServiceImpl.java
index c1d29bf..a814265 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessServiceImpl.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessServiceImpl.java
@@ -3,6 +3,7 @@ package com.ruoyi.bst.prodProcess.service.impl;
 import com.ruoyi.bst.prodProcess.domain.ProdProcess;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
+import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO;
 import com.ruoyi.bst.prodProcess.mapper.ProdProcessMapper;
 import com.ruoyi.bst.prodProcess.service.IProdProcessService;
 import com.ruoyi.common.utils.DateUtils;
@@ -155,4 +156,9 @@ public class ProdProcessServiceImpl implements IProdProcessService
         }
         return prodProcessMapper.batchInsert(list);
     }
+
+    @Override
+    public List<ProdProcessNameVO> selectProdProcessNames(ProdProcessQuery query) {
+        return prodProcessMapper.selectProdProcessNames(query);
+    }
 }
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/ProdProcessController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/ProdProcessController.java
index 7854d90..22539c8 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/ProdProcessController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/ProdProcessController.java
@@ -3,6 +3,7 @@ package com.ruoyi.web.bst;
 import com.ruoyi.bst.prodProcess.domain.ProdProcess;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
+import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO;
 import com.ruoyi.bst.prodProcess.service.IProdProcessService;
 import com.ruoyi.bst.prodProcess.service.ProdProcessAssembler;
 import com.ruoyi.common.annotation.DataScope;
@@ -120,4 +121,22 @@ public class ProdProcessController extends BaseController
     {
         return toAjax(prodProcessService.deleteProdProcessByIds(ids));
     }
+
+    /**
+     * 按名称分组查询
+     */
+    @PreAuthorize("@ss.hasPermi('bst:prodProcess:list')")
+    @GetMapping("/groupByName")
+    @DataScope(deptAlias = "sd")
+    public TableDataInfo groupByName(ProdProcessQuery query){
+        startPage();
+        // 查询名称列表
+        List<ProdProcessNameVO> list = prodProcessService.selectProdProcessNames(query);
+
+        // 拼接明细
+        prodProcessAssembler.assembleProdList(list, query);
+        // 汇总数量
+        prodProcessAssembler.assembleTotalNum(list);
+        return getDataTable(list);
+    }
 }
diff --git a/ruoyi-web/src/main/resources/application-druid.yml b/ruoyi-web/src/main/resources/application-druid.yml
index 303cada..57ccb31 100644
--- a/ruoyi-web/src/main/resources/application-druid.yml
+++ b/ruoyi-web/src/main/resources/application-druid.yml
@@ -6,9 +6,9 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://localhost:3306/factory?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                url: jdbc:mysql://61.174.243.28:15864/factory?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                 username: root
-                password: 123456
+                password: a22dae15cab2bde7
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭