From 4a5cb2b06edf986c54892d08afe196aed96ee93f Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 18 三月 2026 11:43:54 +0800
Subject: [PATCH] 若上一个工序没有报工,则无法报工

---
 src/main/resources/mapper/production/ProductWorkOrderMapper.xml                       |    2 +
 src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java      |   37 ++++++++++++++++++
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   21 ++++++++++
 src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java                       |    9 ++++
 4 files changed, 68 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
index 6e2ca95..7853428 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -43,4 +43,13 @@
 
     @ApiModelProperty(value = "宸ュ崟绫诲瀷 姝e父 /杩斿伐杩斾慨")
     private String workOrderType;
+
+    @ApiModelProperty(value = "宸ュ簭鎺掑簭")
+    private Integer dragSort;
+
+    @ApiModelProperty(value = "宸ヨ壓璺嚎ID")
+    private Long productRouteId;
+
+    @ApiModelProperty(value = "鏄惁鍙互鎶ュ伐")
+    private Boolean isCanReport;
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
index 4a68ce8..6bbb940 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -13,10 +13,14 @@
 import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
 import com.ruoyi.common.utils.MatrixToImageWriter;
 import com.ruoyi.production.dto.ProductWorkOrderDto;
+import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
 import com.ruoyi.production.mapper.ProductWorkOrderFileMapper;
 import com.ruoyi.production.mapper.ProductWorkOrderMapper;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
 import com.ruoyi.production.pojo.ProductWorkOrder;
 import com.ruoyi.production.pojo.ProductWorkOrderFile;
+import com.ruoyi.production.pojo.ProductionProductMain;
 import com.ruoyi.production.service.ProductWorkOrderService;
 import com.ruoyi.quality.pojo.QualityInspectParam;
 import lombok.AllArgsConstructor;
@@ -28,6 +32,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -42,13 +47,43 @@
     private ProductWorkOrderMapper productWorkOrdermapper;
     @Autowired
     private ProductWorkOrderFileMapper productWorkOrderFileMapper;
+    @Autowired
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+    @Autowired
+    private ProductionProductMainMapper productionProductMainMapper;
 
     @Value("${file.temp-dir}")
     private String tempDir;
 
     @Override
     public IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) {
-        return productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder);
+        IPage<ProductWorkOrderDto> productWorkOrderDtoIPage = productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder);
+        productWorkOrderDtoIPage.getRecords().forEach(record -> {
+            //妫�鏌ヤ笂涓�涓伐搴忔槸鍚﹀凡鎶ュ伐
+            Integer currentDragSort = record.getDragSort();
+            if (currentDragSort == null || currentDragSort == 1) {
+                record.setIsCanReport(true);
+            } else {
+                //鏌ユ壘涓婁竴涓伐搴�
+                ProductProcessRouteItem previousItem = productProcessRouteItemMapper.selectOne(
+                        Wrappers.<ProductProcessRouteItem>lambdaQuery()
+                                .eq(ProductProcessRouteItem::getProductRouteId, record.getProductRouteId())
+                                .eq(ProductProcessRouteItem::getDragSort, currentDragSort - 1)
+                );
+
+                if (previousItem != null) {
+                    //妫�鏌ヤ笂涓�涓伐搴忔槸鍚︽湁鎶ュ伐璁板綍
+                    Long count = productionProductMainMapper.selectCount(
+                            Wrappers.<ProductionProductMain>lambdaQuery()
+                                    .eq(ProductionProductMain::getProductProcessRouteItemId, previousItem.getId())
+                    );
+                    record.setIsCanReport(count > 0);
+                } else {
+                    record.setIsCanReport(true);
+                }
+            }
+        });
+        return productWorkOrderDtoIPage;
     }
 
     @Override
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 2f943e2..96e7f7e 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -99,6 +99,27 @@
         if (productProcessRouteItem == null) {
             throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
         }
+        //妫�鏌ヤ笂涓�涓伐搴忔槸鍚﹀凡鎶ュ伐
+        Integer currentDragSort = productProcessRouteItem.getDragSort();
+        if (currentDragSort != null && currentDragSort > 1) {
+            ProductProcessRouteItem previousItem = productProcessRouteItemMapper.selectOne(
+                    Wrappers.<ProductProcessRouteItem>lambdaQuery()
+                            .eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())
+                            .eq(ProductProcessRouteItem::getDragSort, currentDragSort - 1)
+            );
+
+            if (previousItem != null) {
+                //妫�鏌ヤ笂涓�涓伐搴忔槸鍚︽湁鎶ュ伐璁板綍
+                Long count = productionProductMainMapper.selectCount(
+                        Wrappers.<ProductionProductMain>lambdaQuery()
+                                .eq(ProductionProductMain::getProductProcessRouteItemId, previousItem.getId())
+                );
+
+                if (count == 0) {
+                    throw new RuntimeException("涓婁竴涓伐搴忓皻鏈姤宸ワ紝涓嶈兘杩涜褰撳墠宸ュ簭鎶ュ伐");
+                }
+            }
+        }
         //褰撳墠鍏蜂綋宸ュ簭
         ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
         //宸ヨ壓璺嚎涓綋鍓嶅伐搴忓搴旂殑浜у嚭瑙勬牸鍨嬪彿
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index 6d2daa7..afd2bde 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -26,6 +26,8 @@
         pm.unit,
         p.product_name AS productName,
         po.nps_no AS productOrderNpsNo,
+        ppri.drag_sort,
+        ppri.product_route_id,
         ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus,
         CASE
         WHEN pwo.work_order_no LIKE 'FG%' THEN '杩斿伐杩斾慨'

--
Gitblit v1.9.3