| | |
| | | package com.aps.core.service.impl; |
| | | |
| | | import java.util.List; |
| | | |
| | | import com.alibaba.fastjson2.JSONArray; |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.aps.common.core.utils.DateUtils; |
| | | import com.aps.common.core.utils.StringUtils; |
| | | import com.aps.core.domain.ApsMaterialStorageManagement; |
| | | import com.aps.core.mapper.ApsMaterialStorageManagementMapper; |
| | | import com.aps.core.service.IApsMaterialStorageManagementService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | import com.aps.core.mapper.ApsMaterialStorageManagementMapper; |
| | | import com.aps.core.domain.ApsMaterialStorageManagement; |
| | | import com.aps.core.service.IApsMaterialStorageManagementService; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 物料库存管理Service业务层处理 |
| | |
| | | * @date 2025-04-17 |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class ApsMaterialStorageManagementServiceImpl implements IApsMaterialStorageManagementService |
| | | { |
| | | @Autowired |
| | |
| | | { |
| | | return apsMaterialStorageManagementMapper.deleteApsMaterialStorageManagementById(id); |
| | | } |
| | | /** |
| | | * 获取物料库存信息 |
| | | * */ |
| | | @Override |
| | | public Optional<ApsMaterialStorageManagement> getItemStorage(String plant, String itemNumber) { |
| | | ApsMaterialStorageManagement storageParam = new ApsMaterialStorageManagement(); |
| | | storageParam.setItemNumber(itemNumber); |
| | | storageParam.setApplicableFactories(plant); |
| | | return apsMaterialStorageManagementMapper.selectApsMaterialStorageManagementList(storageParam).stream() |
| | | .findFirst(); |
| | | } |
| | | |
| | | public ApsMaterialStorageManagement getRdsStorage(String plant,String itemCode){ |
| | | |
| | | JSONObject materialStorage = (JSONObject)redisTemplate.opsForValue().get("MaterialStorage:Material_"+plant+"_"+itemCode); |
| | | /** |
| | | * 从Redis中获取库存信息 |
| | | * |
| | | * 此方法首先尝试从Redis中获取指定工厂和物料代码的库存信息如果Redis中不存在相关数据, |
| | | * 则从数据库中查询,并将结果缓存到Redis中以提高下次查询的效率 |
| | | * |
| | | * @param plant 工厂代码,用于指定库存信息所属的工厂 |
| | | * @param itemCode 物料代码,用于指定需要查询的物料 |
| | | * @return ApsMaterialStorageManagement 返回获取到的库存信息对象,如果没有找到,则返回null |
| | | */ |
| | | @Override |
| | | public Optional<ApsMaterialStorageManagement> getRdsStorage(String plant, String itemCode){ |
| | | // 尝试从Redis中获取库存信息 |
| | | String key = "MaterialStorage:Material_" + plant + "_" + itemCode; |
| | | JSONObject materialStorage = (JSONObject)redisTemplate.opsForValue().get(key); |
| | | 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对象并返回 |
| | | ApsMaterialStorageManagement ams= materialStorage.toJavaObject(ApsMaterialStorageManagement.class); |
| | | Optional<ApsMaterialStorageManagement> optional = Optional.ofNullable(ams); |
| | | return optional ; |
| | | }else { |
| | | return null; |
| | | // 从数据库中查询库存信息 |
| | | Optional<ApsMaterialStorageManagement> first = getItemStorage( plant, itemCode); |
| | | first.ifPresent(apsMaterialStorageManagement -> |
| | | redisTemplate.opsForValue().set(key, JSONObject.parseObject(JSON.toJSONString(apsMaterialStorageManagement))) |
| | | ); |
| | | return first; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置库存数据到redis |
| | | * @param orgCode |
| | | * @return |
| | | */ |
| | | @Override |
| | | public boolean setStorageDataToRedis(String orgCode) { |
| | | try { |
| | | log.info("开始同步 物料库存至Redis!"); |
| | | Set<String> keys = redisTemplate.keys("MaterialStorage:Material_*"); |
| | | if (keys != null && !keys.isEmpty()) { |
| | | redisTemplate.delete(keys); |
| | | } |
| | | ApsMaterialStorageManagement temp = new ApsMaterialStorageManagement(); |
| | | if(!StringUtils.isEmpty(orgCode)){ |
| | | temp.setApplicableFactories(orgCode); |
| | | } |
| | | List<ApsMaterialStorageManagement> list = apsMaterialStorageManagementMapper.selectApsMaterialStorageManagementList(temp); |
| | | Map<String, Object> bulkData = new HashMap<>(); |
| | | list.forEach(apsMaterialStorageManagement -> { |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("id", apsMaterialStorageManagement.getId()); |
| | | jsonObject.put("itemNumber", apsMaterialStorageManagement.getItemNumber()); |
| | | jsonObject.put("remainderStock", apsMaterialStorageManagement.getRemainderStock()); |
| | | jsonObject.put("applicableFactories", apsMaterialStorageManagement.getApplicableFactories()); |
| | | bulkData.put("MaterialStorage:Material_"+apsMaterialStorageManagement.getApplicableFactories()+"_"+apsMaterialStorageManagement.getItemNumber(), jsonObject); |
| | | }); |
| | | redisTemplate.opsForValue().multiSet(bulkData); |
| | | log.info("完成同步 物料库存至Redis!"); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("同步物料库存至Redis失败!"+e.getMessage()); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 更新库存信息 |
| | | * */ |
| | | public int updateMaterialStorageByVersion(String id, BigDecimal remainderStock, Integer version) { |
| | | return apsMaterialStorageManagementMapper.updateMaterialStorageByVersion(id, remainderStock, version); |
| | | } |
| | | |
| | | @Override |
| | | public int updateRemainderStock(String id, BigDecimal remainderStock, Integer version){ |
| | | return apsMaterialStorageManagementMapper.updateRemainderStock(id, remainderStock, version); |
| | | } |
| | | } |