From 54b067a61093c5c8b5620dab0487c1231395dd78 Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期一, 12 五月 2025 11:17:17 +0800
Subject: [PATCH] 优化从Redis 获取工艺路线和库存信息

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/IApsBomService.java                              |    2 +
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java     |    6 ++-
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java                      |   24 +++++++++--
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java |   48 +++++++++++++++++++++++-
 aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java                                       |   10 ++---
 aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java         |    2 +
 aps-modules/aps-core/src/main/resources/mapper/core/ApsBomHeaderMapper.xml                               |   12 +++--
 aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsBomController.java               |    9 ++++
 8 files changed, 93 insertions(+), 20 deletions(-)

diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsBomController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsBomController.java
index 065ef6e..6acbe35 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsBomController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsBomController.java
@@ -95,4 +95,13 @@
     {
         return toAjax(apsBomService.deleteApsBomByIds(ids));
     }
+
+
+    @GetMapping("/getbom")
+    public void getBom()
+    {
+        List<ApsBom> ll=apsBomService.selectRdsBomLineList("FORTUNA","A6501-001080");
+        System.out.println(ll);
+    }
+
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java
index 475b8cc..ee59f31 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java
@@ -89,11 +89,9 @@
     /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
     private String delFlag;
 
-    private String mainitemcode;
-    private BigDecimal mainstock;
-    private String subitemcode;
-    private BigDecimal usagenum;
-    private BigDecimal substock;
-    private String selfmade;
+    private String mainItemCode;
+    private BigDecimal mainStock;
+    private BigDecimal subStock;
+    private String selfMade;
 
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsBomService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsBomService.java
index c737269..0b9e821 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsBomService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsBomService.java
@@ -60,4 +60,6 @@
     public int deleteApsBomById(Long id);
 
     List<ApsBom> selectApsBomLineList(String plant, String itemNumber);
+
+    List<ApsBom> selectRdsBomLineList(String plant, String itemNumber);
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java
index 747db7a..9c38bfb 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsStandardProcessRouteLineService.java
@@ -63,4 +63,6 @@
     public int deleteApsStandardProcessRouteLineById(Long id);
 
     ApsStandardProcessRouteLine getRouteLineTotalTime(ApsPlateStandardRequire require);
+
+    ApsStandardProcessRouteLine getRouteHeaderRouteTime(ApsPlateStandardRequire require);
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java
index 0cd9e52..36c0220 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsBomServiceImpl.java
@@ -1,5 +1,6 @@
 package com.aps.core.service.impl;
 
+import com.alibaba.fastjson2.JSONArray;
 import com.aps.common.core.utils.DateUtils;
 import com.aps.core.domain.ApsBom;
 import com.aps.core.domain.ApsBomHeader;
@@ -124,11 +125,24 @@
             build.setOrgCode(apsBomHeader.getOrgCode());
             bomLineList = apsBomMapper.selectApsBomList(build);
         }
-//        JSONArray jsonArray = (JSONArray)redisTemplate.opsForValue().get("BOM:BOM_"+plant+"_"+itemNumber);
-//        for (int i = 0; i < jsonArray.size(); i++){
-//            ApsBom apsBom = jsonArray.getJSONObject(i).to(ApsBom.class);
-//            bomLineList.add(apsBom);
-//        }
+
+        return bomLineList;
+    }
+
+    @Override
+    public List<ApsBom> selectRdsBomLineList(String plant, String itemNumber)
+    {
+        List<ApsBom> bomLineList =new ArrayList<>();
+        JSONArray jsonArray = (JSONArray)redisTemplate.opsForValue().get("BOM:BOM_"+plant+"_"+itemNumber);
+        if (jsonArray != null && !jsonArray.isEmpty()) {
+            for (int i = 0; i < jsonArray.size(); i++){
+                ApsBom apsBom = jsonArray.getJSONObject(i).to(ApsBom.class);
+                bomLineList.add(apsBom);
+            }
+        }else {
+            bomLineList = selectApsBomLineList(plant, itemNumber);
+        }
+
         return bomLineList;
     }
 }
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 f49178f..10d1fd8 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
@@ -234,6 +234,8 @@
         /*榛樿鍑�闇�姹備负BOM鐢ㄩ噺*/
         require.setNetRequirement(require.getBomUseAmount());
         Optional<ApsMaterialStorageManagement> itemStorage = getItemStorage(plant, itemCode);
+
+
         if (itemStorage.isPresent()) {
             ApsMaterialStorageManagement storage = itemStorage.get();
             /*鍓╀綑搴撳瓨*/
@@ -262,7 +264,7 @@
         /*鏈尮閰嶆暟閲忥紝榛樿涓哄噣闇�姹�*/
         require.setUnmatchedDemandAmount(require.getNetRequirement());
         /*宸ヨ壓璺嚎鎬婚渶姹�*/
-        ApsStandardProcessRouteLine routeHeader = routeLineService.getRouteLineTotalTime(require);
+        ApsStandardProcessRouteLine routeHeader = routeLineService.getRouteHeaderRouteTime(require);
         String routeId = routeHeader.getRouteId();
         BigDecimal totalRouteTime = routeHeader.getRouteTime();
         long millisecond = 60 * 60 * 1000L;
@@ -315,7 +317,7 @@
         if (require.getNetRequirement().compareTo(BigDecimal.ZERO) > 0) {
             /*褰撳墠Bom鑺傜偣澶勭悊瀹屾垚鍚庯紝澶勭悊涓嬬骇BOM*/
             long nextLevel=level+1;
-            List<ApsBom> bomLineList = bomLineService.selectApsBomLineList(plant, itemCode);
+            List<ApsBom> bomLineList = bomLineService.selectRdsBomLineList(plant, itemCode);
             if (!bomLineList.isEmpty()) {
                 bomLineList.forEach(line -> {
                     getBomRequires(plant, itemCode, line.getBomLineId(),line.getItemCode() ,line.getNum() , batchNum, require.getStartDate(), plan, allRequires, nextLevel);
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java
index d0d3b21..4d1b4ec 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessRouteLineServiceImpl.java
@@ -1,10 +1,8 @@
 package com.aps.core.service.impl;
 
 import java.math.BigDecimal;
-import java.util.Hashtable;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 import cn.hutool.core.util.IdUtil;
 import com.aps.common.core.utils.DateUtils;
@@ -16,6 +14,7 @@
 import com.aps.core.mapper.ApsStandardProcessRouteHeaderMapper;
 import jakarta.annotation.Resource;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import com.aps.core.mapper.ApsStandardProcessRouteLineMapper;
 import com.aps.core.domain.ApsStandardProcessRouteLine;
@@ -36,6 +35,9 @@
     ApsStandardProcessRouteHeaderMapper standardProcessRouteHeaderMapper;
     @Resource
     ApsPlateStandardRequireErrorMapper requireErrorMapper;
+    @Resource
+    private RedisTemplate redisTemplate;
+
     /**
      * 鏌ヨ鏍囧噯宸ヨ壓璺嚎Line
      * 
@@ -144,6 +146,48 @@
         // 杩斿洖鎬诲伐鏃�
         return ret;
     }
+    @Override
+    public ApsStandardProcessRouteLine getRouteHeaderRouteTime(ApsPlateStandardRequire require){
+
+        //宸ュ巶
+        String plant=require.getOrgCode();
+        // 鐗╂枡鍙�
+        String itemCode=require.getBomLineCode();
+        // 鍑�闇�姹�
+        BigDecimal netRequirement=  require.getNetRequirement();
+        //鏋勫缓Redis Key
+        String key = "ROUTE:ROUTE_"+plant+"_"+itemCode;
+
+        BigDecimal totalRouteTime = BigDecimal.ZERO;
+        ApsStandardProcessRouteLine ret=new ApsStandardProcessRouteLine();
+        ret.setRouteId("0");
+        ret.setRouteTime(totalRouteTime);
+
+        Object routeHeaderObj = redisTemplate.opsForValue().get(key);
+        if (routeHeaderObj != null) {
+            totalRouteTime = (BigDecimal) routeHeaderObj;
+            ret.setRouteTime(totalRouteTime);
+            return  ret;
+        } else {
+            // 鏌ヨ鏍囧噯宸ヨ壓璺嚎澶撮儴淇℃伅
+            Optional<ApsStandardProcessRouteHeader> firstProcessRoute = standardProcessRouteHeaderMapper.queryStandardProcessRouteHeaderByPlantAndItemCode(plant, itemCode).stream().findFirst();
+            if (firstProcessRoute.isPresent()) {
+                ApsStandardProcessRouteHeader routeHeader = firstProcessRoute.get();
+                // 鏋勫缓宸ヨ壓璺嚎琛屽弬鏁板璞�
+                ApsStandardProcessRouteLine routeLineParam =new ApsStandardProcessRouteLine();
+                routeLineParam.setRouteId(routeHeader.getRouteId());
+                // 鏌ヨ鏍囧噯宸ヨ壓璺嚎琛屼俊鎭�
+                BigDecimal standardTime = apsStandardProcessRouteLineMapper.selectTotalStandTime(routeHeader.getRouteId()).getStandardTime();
+                totalRouteTime =standardTime.multiply(netRequirement);
+                // 璁$畻杩斿洖鐨勬暟鎹�
+                ret.setRouteTime(totalRouteTime);
+                ret.setRouteId(routeHeader.getRouteId());
+                /*瀛樺偍鑷砇edis*/
+                redisTemplate.opsForValue().set(key, standardTime);
+            }
+            return ret;
+        }
+    }
 
     private void saveRequireError(ApsPlateStandardRequire require,String message) {
         ApsPlateStandardRequireError data = ApsPlateStandardRequireError.builder()
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsBomHeaderMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsBomHeaderMapper.xml
index 31c225b..d66f9e7 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsBomHeaderMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsBomHeaderMapper.xml
@@ -104,13 +104,15 @@
     </delete>
 
     <select id="selectBomRedisData" parameterType="String" resultType="com.alibaba.fastjson2.JSONObject">
-        SELECT a.item_code as mainItemCode,f.num as mainStock,b.item_code as subItemCode,b.num as usageNum,c.num as subStock,d.self_made as selfMade FROM aps_bom_header a
-        LEFT JOIN aps_bom_line b on a.bom_header_id=b.bom_header_id
-        LEFT JOIN aps_material_storage_management c on b.item_code=c.item_number
-        LEFT JOIN aps_material_management d on b.item_code=d.item_number
-        LEFT JOIN aps_material_storage_management as f on a.item_code=f.item_number
+        SELECT a.item_code as mainItemCode,f.num as mainStock,b.bom_line_id as bomLineId, b.item_code as itemCode,b.num ,c.num as subStock,d.self_made as selfMade
+        FROM aps_bom_header a
+            LEFT JOIN aps_bom_line b on a.bom_header_id=b.bom_header_id
+            LEFT JOIN aps_material_storage_management c on b.item_code=c.item_number
+            LEFT JOIN aps_material_management d on b.item_code=d.item_number
+            LEFT JOIN aps_material_storage_management as f on a.item_code=f.item_number
         <if test="orgCode != null and orgCode != ''">
             WHERE a.org_code=#{orgCode} and d.applicable_factories=#{orgCode} and c.applicable_factories=#{orgCode}
+            and a.item_code='A6501-001080'
         </if>
         ORDER BY mainItemCode
     </select>

--
Gitblit v1.9.3