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