From 7e372698c42c047d3b4e629dafe4e7b689990b9d Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期一, 12 五月 2025 19:34:16 +0800
Subject: [PATCH] 钣金计划:从Redis中读取库存信息

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java |   91 +++++++++++++++++++++++++++++----------------
 1 files changed, 58 insertions(+), 33 deletions(-)

diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java
index f0c7cc8..dc8ed21 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java
@@ -72,7 +72,7 @@
 
     @Resource
     IApsPlateStandardRequireBatchService requireBatchService;
-    @Autowired
+    @Resource
     private IApsMaterialStorageManagementService storageManagementService;
 
     /**
@@ -173,6 +173,8 @@
         String batchNum= requireBatchService.getNewBatchNumber();
         /*鑾峰彇閽i噾涓诲崟淇℃伅*/
         List<ApsPlatePlan> mainPlans = platePlanMapper.selectPlatePlanByPlantMajor(plantCode,mainOrderType);
+        Hashtable<String, ApsMaterialStorageManagement> usedStorage = new Hashtable<>();
+
         for (ApsPlatePlan mainPlan : mainPlans) {
             String itemNumber = mainPlan.getItemNumber();
             /*鏍规嵁鏂欏彿 鑾峰彇BOM Header */
@@ -183,7 +185,9 @@
             List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList=new ArrayList<>();
 
 
-            getBomRequires(plantCode, "0","0",itemNumber,BigDecimal.ONE, batchNum, null, mainPlan, requiresList, 0L,stockDetailsList,orderDetailsList);
+            getBomRequires(plantCode, "0","0",itemNumber,BigDecimal.ONE, batchNum, null
+                    , mainPlan, requiresList, 0L,stockDetailsList,orderDetailsList,usedStorage
+            );
 
             // 鎵归噺鎻掑叆浠ユ彁楂樻�ц兘
             if (!requiresList.isEmpty()) {
@@ -195,23 +199,32 @@
                 }
             }
 
-            if(!stockDetailsList.isEmpty()){
-                int batchSize = 1000;
-                for (int i = 0; i < stockDetailsList.size(); i += batchSize) {
-                    int end = Math.min(i + batchSize, stockDetailsList.size());
-                    List<ApsPlateStandardRequireBomStockDetail> batch = stockDetailsList.subList(i, end);
-                    plateBomStockDetailMapper.batchInsert(batch);
-                }
-            }
+//            if(!stockDetailsList.isEmpty()){
+//                int batchSize = 1000;
+//                stockDetailsList.forEach(x->x.setId(IdUtil.getSnowflakeNextId()));
+//                for (int i = 0; i < stockDetailsList.size(); i += batchSize) {
+//                    int end = Math.min(i + batchSize, stockDetailsList.size());
+//                    List<ApsPlateStandardRequireBomStockDetail> batch = stockDetailsList.subList(i, end);
+//                    plateBomStockDetailMapper.batchInsert(batch);
+//                }
+//            }
+//
+//            if(!orderDetailsList.isEmpty()){
+//                int batchSize = 1000;
+//                orderDetailsList.forEach(x->x.setId(IdUtil.getSnowflakeNextId()));
+//                for (int i = 0; i < orderDetailsList.size(); i += batchSize) {
+//                    int end = Math.min(i + batchSize, orderDetailsList.size());
+//                    List<ApsPlateStandardRequireBomOrderDetail> batch = orderDetailsList.subList(i, end);
+//                    plateBomOrderDetailMapper.batchInsert(batch);
+//                }
+//            }
+            /*闆嗕腑淇濆瓨搴撳瓨淇℃伅*/
+           /* if(!usedStorage.isEmpty()){
+                usedStorage.forEach((key, sm) -> {
+                    storageManagementService.updateRemainderStock(sm.getId(),sm.getRemainderStock(),sm.getVersion());
+                });
+            }*/
 
-            if(!orderDetailsList.isEmpty()){
-                int batchSize = 1000;
-                for (int i = 0; i < orderDetailsList.size(); i += batchSize) {
-                    int end = Math.min(i + batchSize, orderDetailsList.size());
-                    List<ApsPlateStandardRequireBomOrderDetail> batch = orderDetailsList.subList(i, end);
-                    plateBomOrderDetailMapper.batchInsert(batch);
-                }
-            }
         }
     }
 
@@ -234,8 +247,9 @@
     private void getBomRequires(String plant, String bomHeaderCode, String bomLineId,String itemCode,BigDecimal itemNum,
                                 String batchNum, Date upLevelStartDate, ApsPlatePlan plan,
                                 List<ApsPlateStandardRequire> allRequires,
-                                Long level,List<ApsPlateStandardRequireBomStockDetail> stockDetailsList
-                                ,List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList
+                                Long level,List<ApsPlateStandardRequireBomStockDetail> stockDetailsList,
+                                List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList,
+                                 Hashtable<String, ApsMaterialStorageManagement> usedStorage
     ) {
         /*鏋勫缓闇�姹備俊鎭�*/
         ApsPlateStandardRequire require = new ApsPlateStandardRequire();
@@ -260,14 +274,22 @@
             require.setBomUseAmount(itemNum.multiply(plan.getProductionQuantity()));
         }
         /*鏌ユ壘搴撳瓨锛岃绠楀噣闇�姹傦紝淇濆瓨鍓╀綑搴撳瓨锛屼繚瀛樺簱瀛樻墸鍑忔槑缁�*/
-        BigDecimal remainderStock = BigDecimal.ZERO;
         /*榛樿鍑�闇�姹備负BOM鐢ㄩ噺*/
         require.setNetRequirement(require.getBomUseAmount());
-        Optional<ApsMaterialStorageManagement> itemStorage = Optional.of(storageManagementService.getRdsStorage( plant,  itemCode));
-        if (itemStorage.isPresent()) {
-            ApsMaterialStorageManagement storage = itemStorage.get();
-            /*鍓╀綑搴撳瓨*/
-            remainderStock = storage.getRemainderStock();
+
+        /*璇诲彇搴撳瓨淇℃伅鐨勪紭鍏堢骇-> 鍐呭瓨銆乺edis銆乨b*/
+       /* ApsMaterialStorageManagement storage = usedStorage.get(itemCode);
+        if(storage==null){
+            storage = storageManagementService.getRdsStorage(plant, itemCode);
+            if(storage!=null){
+                *//*鍓╀綑搴撳瓨*//*
+                remainderStock = storage.getRemainderStock();
+            }
+        }*/
+        Optional<ApsMaterialStorageManagement> itemStorageOpt = storageManagementService.getItemStorage(plant, itemCode);
+        if (itemStorageOpt.isPresent()) {
+            ApsMaterialStorageManagement     itemStorage=itemStorageOpt.get();
+            BigDecimal remainderStock =itemStorage.getRemainderStock();
             /*璁$畻鍑�闇�姹� 榛樿=闇�姹傛暟閲�*/
             if (remainderStock.compareTo(BigDecimal.ZERO) == 0) {
                 require.setNetRequirement(require.getBomUseAmount());
@@ -286,9 +308,11 @@
                     require.setNetRequirement(BigDecimal.ZERO);
                 }
                 /*璁板綍搴撳瓨鍓╀綑鏁伴噺锛岃褰曞簱瀛樹娇鐢ㄨ褰�*/
-                bomStockDetailService.saveStorageAndDetail(storage, plan, bomLineId,itemCode, batchNum, deductionAmount
-                        , afterStockAmount,require.getId(),stockDetailsList
+                bomStockDetailService.saveStorageAndDetail(itemStorage, plan, bomLineId, itemCode, batchNum, deductionAmount
+                        , afterStockAmount, require.getId(), stockDetailsList
                 );
+                /*鏇存柊鍐呭瓨涓殑搴撳瓨浣跨敤淇℃伅*/
+               // usedStorage.put(itemCode, storage);
             }
         }
         /*鏈尮閰嶆暟閲忥紝榛樿涓哄噣闇�姹�*/
@@ -338,7 +362,6 @@
         require.setMatchState("宸插尮閰�");
         require.setMatchMode("搴撳瓨鍖归厤");
         if (require.getNetRequirement().compareTo(BigDecimal.ZERO) > 0) {
-            require.setMatchState("寰呭尮閰�");
             require.setMatchMode("宸ュ崟鍖归厤");
             /*浣跨敤瀛愪欢宸ュ崟杩涜闇�姹傚尮閰�*/
             matchRequireAndSubPlan(require,orderDetailsList);
@@ -352,7 +375,7 @@
                 bomLineList.forEach(line -> {
                     getBomRequires(plant, itemCode, line.getBomLineId(),line.getItemCode() ,line.getNum() , batchNum
                             , require.getStartDate(), plan, allRequires, nextLevel,stockDetailsList
-                            ,orderDetailsList
+                            ,orderDetailsList,usedStorage
                     );
                 });
             }
@@ -379,6 +402,7 @@
     private void matchRequireAndSubPlan(ApsPlateStandardRequire require, List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList) {
         BigDecimal netRequirement = require.getNetRequirement();
         require.setMatchMode("宸ュ崟鍖归厤");
+        require.setMatchState("宸插尮閰�");
         if (netRequirement.compareTo(BigDecimal.ZERO) > 0) {
             ApsPlatePlan platePlan = apsPlatePlanMapper.selectUnMatchPlateSubPlan(require.getOrgCode(),  require.getBomLineCode());
             /*瀛愪欢宸ュ崟鐨勬湭鍖归厤鏁伴噺 浣滀负褰撳墠鐨勫簱瀛�*/
@@ -390,7 +414,7 @@
                     BigDecimal subtract = stock.subtract(netRequirement);
                     bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement,orderDetailsList);
                     netRequirement = BigDecimal.ZERO;
-                    require.setMatchState("宸插尮閰�");
+
                     require.setUnmatchedDemandAmount(BigDecimal.ZERO);
                     /*鍑�闇�姹傚凡缁忚婊¤冻锛屼笉闇�瑕佺户缁尮閰�*/
 
@@ -400,7 +424,7 @@
                     BigDecimal subtract = BigDecimal.ZERO;
                     bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, subtract, stock, netRequirement,orderDetailsList);
                     netRequirement = BigDecimal.ZERO;
-                    require.setMatchState("宸插尮閰�");
+
                     require.setUnmatchedDemandAmount(BigDecimal.ZERO);
                     /*鍑�闇�姹傚凡缁忚婊¤冻锛屼笉闇�瑕佺户缁尮閰�*/
                 }
@@ -408,7 +432,7 @@
                     /*闇�姹傚ぇ浜庡簱瀛�*/
                     /*鍑�闇�姹� 琚儴鍒嗘弧瓒� */
                     BigDecimal rest = netRequirement.subtract(stock);
-                    require.setMatchState("鍖归厤涓�");
+
                     /*宸ュ崟 鏈尮閰嶆暟閲忎负0 鍏ㄩ儴鐢ㄤ簬鍖归厤闇�姹�*/
                     bomOrderDetailService.savePlastPlanAndBomOrderDetail(require, platePlan, BigDecimal.ZERO, stock, netRequirement,orderDetailsList);
                     /*鍑�闇�姹傛湭琚弧瓒筹紝闇�瑕佺户缁尮閰�*/
@@ -418,6 +442,7 @@
                     require.setUnmatchedDemandAmount(rest);
                 }
             }
+
         }
     }
 

--
Gitblit v1.9.3