From 4bcd26a4975d6722bff65690e7a8331cd0afd520 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 31 三月 2026 17:46:19 +0800
Subject: [PATCH] yys 1.销售,采购台账产品反着来 2.产品图纸带到生产订单来

---
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java |   79 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 72 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 85c21ce..dbd0f5c 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -15,6 +15,7 @@
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.dto.ProductWorkOrderDto;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductOrderService;
@@ -102,8 +103,71 @@
             // 闄勪欢
             productOrderDto.setSalesLedgerFiles(commonFileService.getFileListByBusinessId(productOrderDto.getId()
             , FileNameType.PRODUCT_ORDER.getValue()));
+            // 鑾峰彇瀵瑰簲宸ュ崟璁板綍
+            ProductWorkOrderDto productWorkOrder = new ProductWorkOrderDto();
+            productWorkOrder.setProductOrderId(productOrderDto.getId());
+            List<ProductWorkOrderDto> productWorkOrders = productWorkOrderMapper.getProductWorkOrderList(productWorkOrder);
+            if(CollectionUtils.isNotEmpty(productWorkOrders)){
+                productOrderDto.setProductWorkOrders(calculateColor(productWorkOrders));
+            }
+
         });
         return productOrderDtoIPage;
+    }
+
+    /**
+     * 鑷姩璁$畻棰滆壊锛堟牳蹇冩柟娉曪級
+     * @param productWorkOrders
+     */
+    public List<ProductWorkOrderDto> calculateColor(List<ProductWorkOrderDto> productWorkOrders) {
+        List<ProductWorkOrderDto> result = new java.util.ArrayList<>();
+        for (int i = 0; i < productWorkOrders.size(); i++) {
+            ProductWorkOrderDto current = productWorkOrders.get(i);
+            // 鍒ゆ柇鏄惁瀛樺湪涓嬩竴閬撳伐鍗� + 涓嬩竴閬撳伐鍗曟槸鍚︽湁瀹屾垚鏁伴噺
+            boolean nextOrderHasComplete = false;  // 榛勮壊
+            boolean nextOrderHasScrap = false; // 绾㈣壊
+            // 濡傛灉涓嶆槸鏈�鍚庝竴鏉★紝灏卞彇涓嬩竴鏉″垽鏂�
+            for (int j = i + 1; j < productWorkOrders.size(); j++) {
+                if (i < productWorkOrders.size() - 1) {
+                    ProductWorkOrderDto next = productWorkOrders.get(j);
+                    BigDecimal nextComplete = next.getCompleteQuantity() == null ? BigDecimal.ZERO : next.getCompleteQuantity();
+                    BigDecimal nextScrap = next.getPlanQuantity() == null ? BigDecimal.ZERO : next.getPlanQuantity();
+                    // 涓嬩竴閬撳伐鍗曞畬鎴愭暟閲� > 0
+                    nextOrderHasComplete = nextComplete.compareTo(BigDecimal.ZERO) > 0;
+
+                    nextOrderHasScrap = nextComplete.compareTo(nextScrap) == 0;
+                    break;
+                }
+            }
+            // =============== 鏍稿績锛氳绠楅鑹插苟璧嬪�� ===============
+            BigDecimal planQty = current.getPlanQuantity() == null ? BigDecimal.ZERO : current.getPlanQuantity();
+            BigDecimal completeQty = current.getCompleteQuantity() == null ? BigDecimal.ZERO : current.getCompleteQuantity();
+
+            // 1. 褰撳墠宸ュ簭瀹屾垚鏁伴噺绛変簬0 涓� 涓嬩竴閬撳伐搴忓凡瀹屾垚 鈫� 绾㈣壊(4)
+            if (completeQty.compareTo(BigDecimal.ZERO) == 0
+                    && nextOrderHasScrap) {
+                current.setColor(4);
+            }
+            // 2. 闇�姹傛暟閲� > 瀹屾垚鏁伴噺锛堟湭瀹屾垚锛� 涓� 涓嬩竴閬撳伐搴忓畬鎴愭暟閲� > 0 鈫� 榛勮壊(2)
+            else if (planQty.compareTo(completeQty) > 0
+                    && nextOrderHasComplete) {
+                current.setColor(2);
+            }
+            // 3. 瀹屾垚鏁伴噺=0 鈫� 鐏拌壊(1)
+            else if (completeQty.compareTo(BigDecimal.ZERO) == 0) {
+                current.setColor(1);
+            }
+            // 4. 瀹屾垚鏁伴噺=闇�姹傛暟閲� 鈫� 缁胯壊(3)
+            else if (completeQty.compareTo(planQty) == 0) {
+                current.setColor(3);
+            }
+            // 鍏朵粬鎯呭喌榛樿鐏拌壊锛堝彲閫夛級
+            else {
+                current.setColor(1);
+            }
+            result.add(current);
+        }
+        return result;
     }
 
     @Override
@@ -117,11 +181,13 @@
         productProcessRoute.setBomId(processRoute.getBomId());
         productProcessRouteMapper.insert(productProcessRoute);
         // 缁戝畾鐢熶骇bom娓呭崟
-        List<ProductStructureRecord> productStructureDtos = productOrder.getProductStructureRecords();
-        productStructureDtos.forEach(item ->{
-            item.setProductOrderId(productOrder.getId());
-            productStructureRecordMapper.insert(item);
-        });
+        if(CollectionUtils.isNotEmpty(productOrder.getProductStructureRecords())){
+            List<ProductStructureRecord> productStructureDtos = productOrder.getProductStructureRecords();
+            productStructureDtos.forEach(item ->{
+                item.setProductOrderId(productOrder.getId());
+                productStructureRecordMapper.insert(item);
+            });
+        }
         //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
         List<ProductProcessRouteItem> processRouteItems = productOrder.getProcessRouteItems();
         // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
@@ -138,7 +204,6 @@
                 ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                 productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                 productWorkOrder.setProductOrderId(productOrder.getId());
-                ProductOrder order = productOrderMapper.selectById(productOrder.getId());
                 productWorkOrder.setPlanQuantity(BigDecimal.valueOf(productProcessRouteItem.getPlanNum()));
                 productWorkOrder.setWorkOrderNo(workOrderNoStr);
                 productWorkOrder.setPlanStartTime(productProcessRouteItem.getPlanStartTime());
@@ -240,7 +305,7 @@
 
                     // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
                     if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(productMainIds)) {
-                        productionProductOutputMapper.deleteByProductMainIds(ids);
+                        productionProductOutputMapper.deleteByProductMainIds(productMainIds);
                         productionProductInputMapper.deleteByProductMainIds(ids);
                         List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
                                 new LambdaQueryWrapper<QualityInspect>()

--
Gitblit v1.9.3