From e52dfc522497311025b277b5e0ef3590fb3de990 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 11 三月 2026 16:41:49 +0800
Subject: [PATCH] 主生产计划:优化合并下发,根据剩余下发数量对比需要下发的数量

---
 src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java |   47 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
index 9cc0047..8cb137b 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -122,14 +122,14 @@
         }
 
 
-        // 鍙犲姞鏂规暟
-        BigDecimal totalVolume = plans.stream()
-                .map(ProductionPlan::getVolume)
+        // 鍙犲姞鍓╀綑鏂规暟
+        BigDecimal totalRemainingVolume = plans.stream()
+                .map(ProductionPlan::getRemainingVolume)
                 .filter(v -> v != null)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
-        // 鍒ゆ柇涓嬪彂鏁伴噺鏄惁澶т簬绛変簬鏂规暟
-        if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalVolume) > 0) {
-            throw new BaseException("鎿嶄綔澶辫触锛屼笅鍙戞暟閲忎笉鑳藉ぇ浜庢柟鏁�");
+        // 鍒ゆ柇涓嬪彂鏁伴噺鏄惁澶т簬绛変簬鍓╀綑鏂规暟
+        if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalRemainingVolume) > 0) {
+            throw new BaseException("鎿嶄綔澶辫触锛屼笅鍙戞暟閲忎笉鑳藉ぇ浜庡墿浣欐柟鏁�");
         }
 
         // 鍒涘缓鐢熶骇璁㈠崟
@@ -145,29 +145,34 @@
             if (volume == null) {
                 continue;
             }
+            // 璁$畻鍓╀綑鏂规暟
+            BigDecimal remainingVolume = plan.getRemainingVolume();
+            if (remainingVolume.compareTo(BigDecimal.ZERO) <= 0) {
+                continue;
+            }
 
             ProductOrderPlan productOrderPlan = new ProductOrderPlan();
             productOrderPlan.setProductOrderId(productOrder.getId());
             productOrderPlan.setProductionPlanId(plan.getId());
 
-            if (assignedVolume.add(volume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) {
+            if (assignedVolume.add(remainingVolume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) {
                 // 鏈�鍚庝竴涓鍒掞紝鍒嗛厤鍓╀綑鏂规暟
-                BigDecimal remainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume);
-                plan.setAssignedQuantity(plan.getAssignedQuantity().add(remainingVolume));
-                productOrderPlan.setAssignedQuantity(remainingVolume);
+                BigDecimal lastRemainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume);
+                plan.setAssignedQuantity(plan.getAssignedQuantity().add(lastRemainingVolume));
+                productOrderPlan.setAssignedQuantity(lastRemainingVolume);
                 productionPlanMapper.updateById(plan);
                 productOrderPlanMapper.insert(productOrderPlan);
                 break;
             }
 
             // 鍒嗛厤褰撳墠璁″垝鏂规暟
-            plan.setAssignedQuantity(plan.getAssignedQuantity().add(volume));
-            productOrderPlan.setAssignedQuantity(volume);
+            plan.setAssignedQuantity(plan.getAssignedQuantity().add(remainingVolume));
+            productOrderPlan.setAssignedQuantity(remainingVolume);
             // 鏇存柊鐢熶骇璁″垝
             productionPlanMapper.updateById(plan);
             // 鍒涘缓鍏宠仈鍏崇郴
             productOrderPlanMapper.insert(productOrderPlan);
-            assignedVolume = assignedVolume.add(volume);
+            assignedVolume = assignedVolume.add(remainingVolume);
         }
         return true;
     }
@@ -310,8 +315,22 @@
         searchParam.put("systemToken", aliDingConfig.getSystemToken());
         searchParam.put("userId", aliDingConfig.getUserId());
         searchParam.put("formUuid", aliDingConfig.getFormUuid());
+        searchParam.put("currentPage", pageNumber);
         searchParam.put("pageSize", pageSize);
-        searchParam.put("pageNumber", pageNumber);
+
+        JSONArray searchConditions = new JSONArray();
+        JSONObject condition = new JSONObject();
+        condition.put("key", "processApprovedResult");
+        JSONArray valueArray = new JSONArray();
+        valueArray.add("agree");
+
+        condition.put("value", valueArray);
+        condition.put("type", "ARRAY");
+        condition.put("operator", "in");
+        condition.put("componentName", "SelectField");
+        searchConditions.add(condition);
+
+        searchParam.put("searchFieldJson", searchConditions.toJSONString());
 
         // 榛樿鎸変慨鏀规椂闂村崌搴忔帓搴忥紝纭繚鍒嗛〉鎷夊彇鏁版嵁鐨勮繛缁��
         // "+" 琛ㄧず鍗囧簭锛�"gmt_modified" 鏄畼鏂瑰唴缃瓧娈�

--
Gitblit v1.9.3