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