zhanghl
2025-05-12 7af9ce0cde405ff7a48012b03bedf2884c09ab15
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;
    }
}