zhanghl
2025-05-12 7af9ce0cde405ff7a48012b03bedf2884c09ab15
钣金计划:从Redis中读取库存信息
已修改3个文件
62 ■■■■ 文件已修改
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsMaterialStorageManagementService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialStorageManagementServiceImpl.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlateStandardRequireServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
    public  ApsMaterialStorageManagement getRdsStorage(String plant,String itemCode){
    /**
     * 从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();
    }
    /**
     * 获取钣金计划 预留天数
     * */