diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..7b016a8
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+    "java.compile.nullAnalysis.mode": "automatic"
+}
\ No newline at end of file
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 b32f1df..8980774 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
@@ -21,22 +21,40 @@ public class OrderVO extends Order{
     @ApiModelProperty("最终产品ID")
     private Long finalProdId;
 
-    @ApiModelProperty("最终工序总上报数")
+    @ApiModelProperty("产品总上报数")
     private BigDecimal reportNum;
 
-    @ApiModelProperty("最终工序有效清点数")
+    @ApiModelProperty("产品有效清点数")
     private BigDecimal storeNum;
 
-    @ApiModelProperty("总数量")
+    @ApiModelProperty("产品总数")
     private BigDecimal totalNum;
 
-    @ApiModelProperty("进度")
+    @ApiModelProperty("成品总上报数")
+    private BigDecimal endReportNum;
+
+    @ApiModelProperty("成品有效清点数")
+    private BigDecimal endStoreNum;
+
+    @ApiModelProperty("生产进度")
     public BigDecimal getProgress() {
-        if (this.storeNum == null || this.getNum() == null) {
+        if (this.storeNum == null || this.getTotalNum() == null) {
             return BigDecimal.ZERO;
         }
         return this.storeNum
+                .subtract(this.getNum())
                 .multiply(new BigDecimal(100))
                 .divide(this.getTotalNum(), 2, RoundingMode.HALF_UP);
     }
+
+    @ApiModelProperty("产品进度")
+    public BigDecimal getEndProgress() {
+        if (this.endStoreNum == null || this.getNum() == null) {
+            return BigDecimal.ZERO;
+        }
+        return this.endStoreNum
+                .multiply(new BigDecimal(100))
+                .divide(this.getNum(), 2, RoundingMode.HALF_UP);
+
+    }
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/OrderAssembler.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/OrderAssembler.java
index 22613e2..5450117 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/OrderAssembler.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/OrderAssembler.java
@@ -27,4 +27,9 @@ public interface OrderAssembler {
      */
     void assembleProdProcessList(List<OrderVO> list);
 
+    /**
+     * 拼接成为VO
+     * @param list
+     */
+    void assembleVO(List<OrderVO> list);
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderAssemblerImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderAssemblerImpl.java
index b34027e..8d1d101 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderAssemblerImpl.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderAssemblerImpl.java
@@ -10,6 +10,7 @@ import com.ruoyi.common.utils.collection.CollectionUtils;
 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;
@@ -39,15 +40,6 @@ public class OrderAssemblerImpl implements OrderAssembler {
         query.setOrderIds(CollectionUtils.map(list, OrderVO::getId));
         List<OrderProdVO> prodList = orderProdService.selectOrderProdList(query);
 
-        // 拼接进度
-        if (assembleProgress) {
-            orderProdAssembler.assembleProgress(prodList);
-        }
-
-        // 拼接明细
-        if (assembleProcess) {
-        }
-
         // 分组
         Map<Long, List<OrderProdVO>> group = prodList.stream().collect(Collectors.groupingBy(OrderProdVO::getOrderId));
 
@@ -59,23 +51,6 @@ public class OrderAssemblerImpl implements OrderAssembler {
             }
             vo.setProdList(productList);
         }
-
-
-    }
-
-    @Override
-    public void assembleProgress(List<OrderVO> list) {
-        if (CollectionUtils.isEmptyElement(list)) {
-            return;
-        }
-
-        this.assembleProdList(list);
-
-        for (OrderVO order : list) {
-            order.setTotalNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getNum));
-            order.setReportNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getReportNum));
-            order.setStoreNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getStoreNum));
-        }
     }
 
     @Override
@@ -86,4 +61,39 @@ public class OrderAssemblerImpl implements OrderAssembler {
         List<OrderProdVO> prodList = list.stream().map(OrderVO::getProdList).flatMap(List::stream).collect(Collectors.toList());
         orderProdAssembler.assembleProcessList(prodList);
     }
+
+    @Override
+    public void assembleVO(List<OrderVO> list) {
+        this.assembleProdList(list);
+        this.assembleProdProcessList(list);
+        this.assembleProgress(list);
+    }
+
+    @Override
+    public void assembleProgress(List<OrderVO> list) {
+        if (CollectionUtils.isEmptyElement(list)) {
+            return;
+        }
+        List<OrderProdVO> prodList = list.stream().map(OrderVO::getProdList).flatMap(List::stream).collect(Collectors.toList());
+        orderProdAssembler.assembleProgress(prodList);
+
+        for (OrderVO order : list) {
+            order.setTotalNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getNum));
+            order.setReportNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getReportNum));
+            order.setStoreNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getStoreNum));
+
+            // 成品
+            OrderProdVO endProd = order.getProdList().stream()
+                    .filter(item -> item.getIsEnd() != null && item.getIsEnd())
+                    .findFirst()
+                    .orElse(null);
+            if (endProd != null) {
+                order.setEndReportNum(endProd.getReportNum());
+                order.setEndStoreNum(endProd.getStoreNum());
+            } else {
+                order.setEndReportNum(BigDecimal.ZERO);
+                order.setEndStoreNum(BigDecimal.ZERO);
+            }
+        }
+    }
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java
index 5134e9b..e41d050 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java
@@ -238,8 +238,8 @@ public class OrderServiceImpl implements OrderService
         ServiceUtil.assertion(!OrderStatus.canFinished().contains(old.getStatus()), "当前订单状态不允许完工");
 
         List<OrderVO> list = Collections.singletonList(old);
-        orderAssembler.assembleProgress(list);
-        ServiceUtil.assertion(old.getProgress().compareTo(new BigDecimal("100")) < 0, "当前订单进度:%s%%,暂不满足完工条件:100%%", old.getProgress());
+        orderAssembler.assembleVO(list);
+        ServiceUtil.assertion(old.getEndProgress().compareTo(new BigDecimal("100")) < 0, "当前订单进度:%s%%,暂不满足完工条件:100%%", old.getEndProgress());
 
         // 更新订单状态
         Order data = new Order();
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/OrderProd.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/OrderProd.java
index 1a0ea4c..ece69ed 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/OrderProd.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/OrderProd.java
@@ -25,9 +25,9 @@ public class OrderProd extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
+    @Excel(name = "ID")
     private Long id;
 
-    @Excel(name = "订单ID")
     @ApiModelProperty("订单ID")
     private Long orderId;
 
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/OrderProdQuery.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/OrderProdQuery.java
index 69e15d8..473647a 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/OrderProdQuery.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/OrderProdQuery.java
@@ -17,4 +17,7 @@ public class OrderProdQuery extends OrderProdVO{
 
     @ApiModelProperty("是否拼接明细")
     private Boolean assembleProcessList;
+
+    @ApiModelProperty("产品名称列表")
+    private List<String> eqNames;
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/vo/OrderProdGroupNameVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/vo/OrderProdGroupNameVO.java
new file mode 100644
index 0000000..fbbac94
--- /dev/null
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/domain/vo/OrderProdGroupNameVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.bst.orderProd.domain.vo;
+
+import com.ruoyi.bst.orderProd.domain.OrderProdVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author wjh
+ * 2025/3/4
+ */
+@Data
+public class OrderProdGroupNameVO {
+
+    @ApiModelProperty("产品名称")
+    private String name;
+
+    @ApiModelProperty("数量")
+    private BigDecimal totalNum;
+
+    @ApiModelProperty("上报数量")
+    private BigDecimal reportNum;
+
+    @ApiModelProperty("清点数量")
+    private BigDecimal storeNum;
+
+    @ApiModelProperty("产品列表")
+    private List<OrderProdVO> prodList;
+}
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/mapper/OrderProdMapper.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/mapper/OrderProdMapper.java
index 95251a2..8a42699 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/mapper/OrderProdMapper.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/mapper/OrderProdMapper.java
@@ -79,4 +79,9 @@ public interface OrderProdMapper
     int logicDel(@Param("ids") List<Long> ids);
 
     int logicDelByOrderId(@Param("orderId") Long orderId);
+
+    /**
+     * 查询产品名称列表
+     */
+    List<String> selectNameList(@Param("query") OrderProdQuery query);
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/mapper/OrderProdMapper.xml b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/mapper/OrderProdMapper.xml
index 70ca565..608c2d3 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/mapper/OrderProdMapper.xml
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/mapper/OrderProdMapper.xml
@@ -51,6 +51,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="query.coverColor != null  and query.coverColor != ''"> and bop.cover_color like concat('%', #{query.coverColor}, '%')</if>
         <if test="query.no != null  and query.no != ''"> and bop.no like concat('%', #{query.no}, '%')</if>
         <if test="query.workName != null  and query.workName != ''"> and bop.work_name like concat('%', #{query.workName}, '%')</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.orderIds != null and query.orderIds.size() > 0">
             and bop.order_id in
             <foreach collection="query.orderIds" item="item" open="(" close=")" separator=",">
@@ -72,6 +78,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </select>
 
+    <select id="selectNameList" resultType="java.lang.String">
+        select distinct
+            bop.name
+        from bst_order_prod bop
+        <where>
+            <include refid="searchCondition"/>
+        </where>
+    </select>
+
     <insert id="insertOrderProd" parameterType="OrderProd" useGeneratedKeys="true" keyProperty="id">
         insert into bst_order_prod
         <trim prefix="(" suffix=")" suffixOverrides=",">
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/IOrderProdService.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/IOrderProdService.java
index 1b24e97..1bedbcc 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/IOrderProdService.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/IOrderProdService.java
@@ -83,4 +83,12 @@ public interface IOrderProdService
     int batchLogicDel(List<? extends OrderProd> list);
 
     int logicDelByOrderId(Long orderId);
+
+    /**
+     * 查询订单产品列表
+     *
+     * @param query 订单产品列表
+     * @return
+     */
+    List<String> selectNameList(OrderProdQuery query);
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/OrderProdAssembler.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/OrderProdAssembler.java
index f099c5a..a1f7014 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/OrderProdAssembler.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/OrderProdAssembler.java
@@ -1,6 +1,8 @@
 package com.ruoyi.bst.orderProd.service;
 
+import com.ruoyi.bst.orderProd.domain.OrderProdQuery;
 import com.ruoyi.bst.orderProd.domain.OrderProdVO;
+import com.ruoyi.bst.orderProd.domain.vo.OrderProdGroupNameVO;
 
 import java.util.List;
 
@@ -20,4 +22,14 @@ public interface OrderProdAssembler {
      */
     void assembleProgress(List<OrderProdVO> list);
 
+    /**
+     * 拼接产品列表
+     */
+    void assembleProdList(List<OrderProdGroupNameVO> list, OrderProdQuery query);
+
+    /**
+     * 汇总数量
+     */
+    void assembleTotalNum(List<OrderProdGroupNameVO> list);
+
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/impl/OrderProdAssemblerImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/impl/OrderProdAssemblerImpl.java
index 22f25e8..6ab2402 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/impl/OrderProdAssemblerImpl.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/impl/OrderProdAssemblerImpl.java
@@ -1,7 +1,10 @@
 package com.ruoyi.bst.orderProd.service.impl;
 
+import com.ruoyi.bst.orderProd.domain.OrderProdQuery;
 import com.ruoyi.bst.orderProd.domain.OrderProdVO;
 import com.ruoyi.bst.orderProd.domain.enums.OrderProdWorkType;
+import com.ruoyi.bst.orderProd.domain.vo.OrderProdGroupNameVO;
+import com.ruoyi.bst.orderProd.service.IOrderProdService;
 import com.ruoyi.bst.orderProd.service.OrderProdAssembler;
 import com.ruoyi.bst.prodProcess.domain.ProdProcess;
 import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
@@ -32,6 +35,9 @@ public class OrderProdAssemblerImpl implements OrderProdAssembler {
     @Autowired
     private ProdProcessAssembler prodProcessAssembler;
 
+    @Autowired
+    private IOrderProdService orderProdService;
+
     @Override
     public void assembleProcessList(List<OrderProdVO> list) {
         if (CollectionUtils.isEmptyElement(list)) {
@@ -67,7 +73,9 @@ public class OrderProdAssemblerImpl implements OrderProdAssembler {
         for (OrderProdVO prod : list) {
             // 自加工
             if (OrderProdWorkType.SELF.getType().equals(prod.getWorkType())) {
-                ProdProcessVO process = processList.stream().filter(item -> Objects.equals(item.getOrderProdId(), prod.getId())).findFirst().orElse(null);
+                ProdProcessVO process = processList.stream()
+                        .filter(item -> Objects.equals(item.getOrderProdId(), prod.getId()))
+                        .findFirst().orElse(null);
                 if (process == null) {
                     prod.setReportNum(BigDecimal.ZERO);
                     prod.setStoreNum(BigDecimal.ZERO);
@@ -84,4 +92,44 @@ public class OrderProdAssemblerImpl implements OrderProdAssembler {
             }
         }
     }
+
+    @Override
+    public void assembleProdList(List<OrderProdGroupNameVO> list, OrderProdQuery query) {
+        if (CollectionUtils.isEmptyElement(list)) {
+            return;
+        }
+
+        query.setEqNames(CollectionUtils.map(list, OrderProdGroupNameVO::getName));
+        List<OrderProdVO> prodList = orderProdService.selectOrderProdList(query);
+        this.assembleProcessList(prodList);
+        this.assembleProgress(prodList);
+        Map<String, List<OrderProdVO>> group = prodList.stream().collect(Collectors.groupingBy(OrderProdVO::getName));
+
+        for (OrderProdGroupNameVO vo : list) {
+            List<OrderProdVO> groupList = group.get(vo.getName());
+            if (groupList == null) {
+                groupList = new ArrayList<>();
+            }
+            vo.setProdList(groupList);
+        }
+
+    }
+
+    @Override
+    public void assembleTotalNum(List<OrderProdGroupNameVO> list) {
+        if (CollectionUtils.isEmptyElement(list)) {
+            return;
+        }
+        List<OrderProdVO> prodList = list.stream()
+            .map(OrderProdGroupNameVO::getProdList)
+            .flatMap(List::stream).collect(Collectors.toList());
+
+        this.assembleProgress(prodList);
+
+        for (OrderProdGroupNameVO vo : list) {
+            vo.setTotalNum(CollectionUtils.sumDecimal(vo.getProdList(), OrderProdVO::getNum));
+            vo.setReportNum(CollectionUtils.sumDecimal(vo.getProdList(), OrderProdVO::getReportNum));
+            vo.setStoreNum(CollectionUtils.sumDecimal(vo.getProdList(), OrderProdVO::getStoreNum));
+        }
+    }
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/impl/OrderProdServiceImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/impl/OrderProdServiceImpl.java
index 1be37b4..f83bfeb 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/impl/OrderProdServiceImpl.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/orderProd/service/impl/OrderProdServiceImpl.java
@@ -148,4 +148,9 @@ public class OrderProdServiceImpl implements IOrderProdService
         }
         return orderProdMapper.logicDelByOrderId(orderId);
     }
+
+    @Override
+    public List<String> selectNameList(OrderProdQuery query) {
+        return orderProdMapper.selectNameList(query); // 新增的方法实现
+    }
 }
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 bd43331..183ffe9 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
@@ -6,6 +6,7 @@ import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 产品工序Mapper接口
@@ -76,4 +77,9 @@ public interface ProdProcessMapper
     int logicDel(@Param("ids") List<Long> ids);
 
     int logicDelByOrderId(Long orderId);
+
+    /**
+     * 查询汇总
+     */
+    public List<Map<String, Object>> selectSum(@Param("query")ProdProcessQuery query, @Param("groupBy")List<String> groupBy);
 }
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 866d4ed..f1e8307 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
@@ -41,7 +41,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             bo.content_num as order_content_num,
             bo.package_size as order_package_size,
             sd.dept_name as dept_name
-        from bst_prod_process bpp
+        from <include refid="searchTables"/>
+    </sql>
+
+    <sql id="searchTables">
+        bst_prod_process bpp
             left join bst_order_prod bop on bop.id = bpp.order_prod_id
             left join bst_order bo on bo.id = bop.order_id
             left join sys_dept sd on sd.dept_id = bpp.dept_id
@@ -315,4 +319,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+    <!-- selectSum -->
+    <select id="selectSum">
+        select
+            <if test="groupBy != null and groupBy.size() > 0">
+                <foreach collection="groupBy" item="item">
+                    ${item},
+                </foreach>
+            </if>
+            sum(bpp.num) as num,
+            sum((select sum(num) from bst_store bs where bs.process_id = bpp.id group by bs.process_id)) as reportNum,
+            sum((select sum(store_num) from bst_store bs where bs.process_id = bpp.id group by bs.process_id)) as storeNum
+        from <include refid="searchTables"/>
+        <where>
+            <include refid="searchCondition"/>
+        </where>
+        <if test="groupBy != null and groupBy.size() > 0">
+            group by
+            <foreach collection="groupBy" item="item" separator=",">
+                ${item}
+            </foreach>
+        </if>
+    </select>
+
 </mapper>
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/domain/Store.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/domain/Store.java
index 3390f66..f28d018 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/domain/Store.java
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/domain/Store.java
@@ -70,8 +70,15 @@ public class Store extends BaseEntity
     @Size(max = 200, message = "备注长度不能超过200个字符")
     private String remark;
 
-    @Excel(name = "上报时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 10)
+    @Excel(name = "上报时间", width = 30, dateFormat = "yyyy-MM-dd", sort = 10)
     @ApiModelProperty("上报时间")
     private Date createTime;
 
+    public Date getCreateTime() {
+        return this.createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
 }
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml
index 1378944..a7b427c 100644
--- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml
@@ -107,7 +107,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="num != null">num,</if>
             <if test="storeNum != null">store_num,</if>
             <if test="createId != null">create_id,</if>
-            <if test="createTime != null">create_time,</if>
             <if test="status != null and status != ''">`status`,</if>
             <if test="storeUserId != null">store_user_id,</if>
             <if test="storeTime != null">store_time,</if>
@@ -115,13 +114,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createBy != null">create_by,</if>
             <if test="storeBy != null">store_by,</if>
             <if test="remark != null">remark,</if>
+            create_time,
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="processId != null">#{processId},</if>
             <if test="num != null">#{num},</if>
             <if test="storeNum != null">#{storeNum},</if>
             <if test="createId != null">#{createId},</if>
-            <if test="createTime != null">#{createTime},</if>
             <if test="status != null and status != ''">#{status},</if>
             <if test="storeUserId != null">#{storeUserId},</if>
             <if test="storeTime != null">#{storeTime},</if>
@@ -129,6 +128,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createBy != null">#{createBy},</if>
             <if test="storeBy != null">#{storeBy},</if>
             <if test="remark != null">#{remark},</if>
+            now(),
          </trim>
     </insert>
 
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/dashboard/prodProcess/domain/sum/ProdProcessSumVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/dashboard/prodProcess/domain/sum/ProdProcessSumVO.java
new file mode 100644
index 0000000..8155d80
--- /dev/null
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/dashboard/prodProcess/domain/sum/ProdProcessSumVO.java
@@ -0,0 +1,20 @@
+package com.ruoyi.dashboard.prodProcess.domain.sum;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ProdProcessSumVO {
+
+    @ApiModelProperty("总数量")
+    private BigDecimal num;
+
+    @ApiModelProperty("上报数量")
+    private BigDecimal reportNum;
+
+    @ApiModelProperty("清点数量")
+    private BigDecimal storeNum;
+
+}
diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/dashboard/prodProcess/service/ProdProcessDashboardService.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/dashboard/prodProcess/service/ProdProcessDashboardService.java
new file mode 100644
index 0000000..183d35a
--- /dev/null
+++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/dashboard/prodProcess/service/ProdProcessDashboardService.java
@@ -0,0 +1,38 @@
+package com.ruoyi.dashboard.prodProcess.service;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
+import com.ruoyi.bst.prodProcess.mapper.ProdProcessMapper;
+import com.ruoyi.dashboard.prodProcess.domain.sum.ProdProcessSumVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class ProdProcessDashboardService {
+
+
+    @Autowired
+    private ProdProcessMapper prodProcessMapper;
+
+    // 查询数量汇总, 并分组
+    public <T> List<T> selectSum(ProdProcessQuery query, List<String> groupBy, Class<T> clazz) {
+        List<Map<String, Object>> list = prodProcessMapper.selectSum(query, groupBy);
+        if (list.isEmpty()) {
+            return Collections.emptyList();
+        }
+        return JSON.parseArray(JSON.toJSONString(list), clazz);
+    }
+
+    // 查询数量汇总
+    public ProdProcessSumVO selectSum(ProdProcessQuery query) {
+        List<ProdProcessSumVO> list = selectSum(query, null, ProdProcessSumVO.class);
+        if (list.isEmpty()) {
+            return null;
+        }
+        return list.get(0);
+    }
+}
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java
index 0117a66..3180334 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java
@@ -52,9 +52,7 @@ public class OrderController extends BaseController
         startPage();
         startOrderBy();
         List<OrderVO> list = orderService.selectOrderList(query);
-        orderAssembler.assembleProdList(list);
-        orderAssembler.assembleProdProcessList(list);
-        orderAssembler.assembleProgress(list);
+        orderAssembler.assembleVO(list);
         return getDataTable(list);
     }
 
@@ -80,8 +78,7 @@ public class OrderController extends BaseController
     {
         OrderVO vo = orderService.selectOrderById(id);
         List<OrderVO> list = Collections.singletonList(vo);
-        orderAssembler.assembleProdList(list, true, true);
-        orderAssembler.assembleProgress(list);
+        orderAssembler.assembleVO(list);
         return success(vo);
     }
 
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderProdController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderProdController.java
index 63a90fe..f4af837 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderProdController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderProdController.java
@@ -3,6 +3,7 @@ package com.ruoyi.web.bst;
 import com.ruoyi.bst.orderProd.domain.OrderProd;
 import com.ruoyi.bst.orderProd.domain.OrderProdQuery;
 import com.ruoyi.bst.orderProd.domain.OrderProdVO;
+import com.ruoyi.bst.orderProd.domain.vo.OrderProdGroupNameVO;
 import com.ruoyi.bst.orderProd.service.IOrderProdService;
 import com.ruoyi.bst.orderProd.service.OrderProdAssembler;
 import com.ruoyi.common.annotation.Log;
@@ -16,6 +17,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -44,9 +46,9 @@ public class OrderProdController extends BaseController
         startPage();
         startOrderBy();
         List<OrderProdVO> list = orderProdService.selectOrderProdList(query);
-        orderProdAssembler.assembleProgress(list);
         if (query.getAssembleProcessList() != null && query.getAssembleProcessList()) {
-            orderProdAssembler.assembleProcessList(list, true);
+            orderProdAssembler.assembleProcessList(list);
+            orderProdAssembler.assembleProgress(list);
         }
         return getDataTable(list);
     }
@@ -59,6 +61,7 @@ public class OrderProdController extends BaseController
     @PostMapping("/export")
     public void export(HttpServletResponse response, OrderProdQuery query)
     {
+        startPage();
         List<OrderProdVO> list = orderProdService.selectOrderProdList(query);
         ExcelUtil<OrderProdVO> util = new ExcelUtil<OrderProdVO>(OrderProdVO.class);
         util.exportExcel(response, list, "订单产品数据");
@@ -106,4 +109,27 @@ public class OrderProdController extends BaseController
     {
         return toAjax(orderProdService.deleteOrderProdByIds(ids));
     }
+
+    /**
+     * 根据产品名称分组查询列表
+     */
+    @PreAuthorize("@ss.hasPermi('bst:orderProd:list')")
+    @GetMapping("/groupByName")
+    public TableDataInfo groupByName(OrderProdQuery query)
+    {
+        startPage();
+        List<String> list = orderProdService.selectNameList(query);
+        List<OrderProdGroupNameVO> groupList = new ArrayList<>();
+        for (String name : list) {
+            OrderProdGroupNameVO vo = new OrderProdGroupNameVO();
+            vo.setName(name);
+            groupList.add(vo);
+        }
+
+        // 拼接明细
+        orderProdAssembler.assembleProdList(groupList, query);
+        // 汇总数量
+        orderProdAssembler.assembleTotalNum(groupList);
+        return getDataTable(groupList);
+    }
 }
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/dashboard/DashboardProdProcessController.java b/ruoyi-web/src/main/java/com/ruoyi/web/dashboard/DashboardProdProcessController.java
new file mode 100644
index 0000000..5be523f
--- /dev/null
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/dashboard/DashboardProdProcessController.java
@@ -0,0 +1,24 @@
+package com.ruoyi.web.dashboard;
+
+import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.dashboard.prodProcess.service.ProdProcessDashboardService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/dashboard/prodProcess")
+public class DashboardProdProcessController extends BaseController {
+
+    @Autowired
+    private ProdProcessDashboardService prodProcessDashboardService;
+
+    @GetMapping("/sum")
+    public AjaxResult sum(ProdProcessQuery query) {
+        return success(prodProcessDashboardService.selectSum(query));
+    }
+
+}