aps-modules/aps-core/src/main/java/com/aps/core/service/IApsMaterialStorageManagementService.java
@@ -58,4 +58,6 @@ * @return 结果 */ public int deleteApsMaterialStorageManagementById(String id); ApsMaterialStorageManagement getRdsStorage(String plant, String itemCode); } aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialStorageManagementServiceImpl.java
@@ -1,8 +1,9 @@ package com.aps.core.service.impl; import java.util.List; import java.util.Optional; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.aps.common.core.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -99,20 +100,40 @@ return apsMaterialStorageManagementMapper.deleteApsMaterialStorageManagementById(id); } /** * 从Redis中获取库存信息 * * 此方法首先尝试从Redis中获取指定工厂和物料代码的库存信息如果Redis中不存在相关数据, * 则从数据库中查询,并将结果缓存到Redis中以提高下次查询的效率 * * @param plant 工厂代码,用于指定库存信息所属的工厂 * @param itemCode 物料代码,用于指定需要查询的物料 * @return ApsMaterialStorageManagement 返回获取到的库存信息对象,如果没有找到,则返回null */ @Override public ApsMaterialStorageManagement getRdsStorage(String plant,String itemCode){ ApsMaterialStorageManagement ams=null; // 尝试从Redis中获取库存信息 JSONObject materialStorage = (JSONObject)redisTemplate.opsForValue().get("MaterialStorage:Material_"+plant+"_"+itemCode); if(materialStorage!=null){ ApsMaterialStorageManagement apsMaterialStorageManagement = new ApsMaterialStorageManagement(); apsMaterialStorageManagement.setId(materialStorage.getString("id")); apsMaterialStorageManagement.setItemNumber(materialStorage.getString("itemNumber")); apsMaterialStorageManagement.setRemainderStock(materialStorage.getBigDecimal("remainderStock")); apsMaterialStorageManagement.setVersion(materialStorage.getInteger("version")); return apsMaterialStorageManagement; // 如果Redis中有缓存,将其转换为ApsMaterialStorageManagement对象并返回 ams = materialStorage.toJavaObject(ApsMaterialStorageManagement.class); return ams; }else { return null; // 如果Redis中没有缓存,创建查询参数对象 ApsMaterialStorageManagement storageParam = new ApsMaterialStorageManagement(); storageParam.setItemNumber(itemCode); storageParam.setApplicableFactories(plant); // 从数据库中查询库存信息 Optional<ApsMaterialStorageManagement> first = apsMaterialStorageManagementMapper.selectApsMaterialStorageManagementList(storageParam).stream() .findFirst(); if (first.isPresent()){ // 如果查询到库存信息,将其缓存到Redis中 ams = first.get(); redisTemplate.opsForValue().set("MaterialStorage:Material_"+plant+"_"+itemCode,JSONObject.parseObject(JSON.toJSONString(ams))); } } // 返回库存信息对象 return ams; } } aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java
@@ -73,7 +73,7 @@ @Resource IApsPlateStandardRequireBatchService requireBatchService; @Autowired private ApsPlateStandardRequireBomStockDetailMapper apsPlateStandardRequireBomStockDetailMapper; private IApsMaterialStorageManagementService storageManagementService; /** * 查询钣金工单标准需求 @@ -181,6 +181,8 @@ List<ApsPlateStandardRequire> requiresList=new ArrayList<>(); List<ApsPlateStandardRequireBomStockDetail> stockDetailsList=new ArrayList<>(); List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList=new ArrayList<>(); getBomRequires(plantCode, "0","0",itemNumber,BigDecimal.ONE, batchNum, null, mainPlan, requiresList, 0L,stockDetailsList,orderDetailsList); // 批量插入以提高性能 @@ -226,6 +228,8 @@ * @param plan 计划对象 * @param allRequires 所有需求的列表 * @param level 层级 * @param stockDetailsList 库存匹配记录 * @param orderDetailsList 子件工单匹配记录 */ private void getBomRequires(String plant, String bomHeaderCode, String bomLineId,String itemCode,BigDecimal itemNum, String batchNum, Date upLevelStartDate, ApsPlatePlan plan, @@ -259,9 +263,7 @@ BigDecimal remainderStock = BigDecimal.ZERO; /*默认净需求为BOM用量*/ require.setNetRequirement(require.getBomUseAmount()); Optional<ApsMaterialStorageManagement> itemStorage = getItemStorage(plant, itemCode); Optional<ApsMaterialStorageManagement> itemStorage = Optional.of(storageManagementService.getRdsStorage( plant, itemCode)); if (itemStorage.isPresent()) { ApsMaterialStorageManagement storage = itemStorage.get(); /*剩余库存*/ @@ -284,7 +286,9 @@ require.setNetRequirement(BigDecimal.ZERO); } /*记录库存剩余数量,记录库存使用记录*/ bomStockDetailService.saveStorageAndDetail(storage, plan, bomLineId,itemCode, batchNum, deductionAmount, afterStockAmount,require.getId(),stockDetailsList); bomStockDetailService.saveStorageAndDetail(storage, plan, bomLineId,itemCode, batchNum, deductionAmount , afterStockAmount,require.getId(),stockDetailsList ); } } /*未匹配数量,默认为净需求*/ @@ -365,6 +369,7 @@ .findFirst(); } /** * 获取钣金计划 预留天数 * */