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); } } aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsBom.java
@@ -89,11 +89,9 @@ /** 删除标志(0代表存在 2代表删除) */ 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; } 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); } 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); } 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; } } 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); 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()); /*存储至Redis*/ redisTemplate.opsForValue().set(key, standardTime); } return ret; } } private void saveRequireError(ApsPlateStandardRequire require,String message) { ApsPlateStandardRequireError data = ApsPlateStandardRequireError.builder() 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 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>