package com.aps.core.service.impl;
|
|
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 org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Service;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Optional;
|
|
/**
|
* 物料库存管理Service业务层处理
|
*
|
* @author dingYang
|
* @date 2025-04-17
|
*/
|
@Service
|
public class ApsMaterialStorageManagementServiceImpl implements IApsMaterialStorageManagementService
|
{
|
@Autowired
|
private ApsMaterialStorageManagementMapper apsMaterialStorageManagementMapper;
|
@Autowired
|
public RedisTemplate redisTemplate;
|
/**
|
* 查询物料库存管理
|
*
|
* @param id 物料库存管理主键
|
* @return 物料库存管理
|
*/
|
@Override
|
public ApsMaterialStorageManagement selectApsMaterialStorageManagementById(String id)
|
{
|
return apsMaterialStorageManagementMapper.selectApsMaterialStorageManagementById(id);
|
}
|
|
/**
|
* 查询物料库存管理列表
|
*
|
* @param apsMaterialStorageManagement 物料库存管理
|
* @return 物料库存管理
|
*/
|
@Override
|
public List<ApsMaterialStorageManagement> selectApsMaterialStorageManagementList(ApsMaterialStorageManagement apsMaterialStorageManagement)
|
{
|
return apsMaterialStorageManagementMapper.selectApsMaterialStorageManagementList(apsMaterialStorageManagement);
|
}
|
|
/**
|
* 新增物料库存管理
|
*
|
* @param apsMaterialStorageManagement 物料库存管理
|
* @return 结果
|
*/
|
@Override
|
public int insertApsMaterialStorageManagement(ApsMaterialStorageManagement apsMaterialStorageManagement)
|
{
|
apsMaterialStorageManagement.setCreateTime(DateUtils.getNowDate());
|
return apsMaterialStorageManagementMapper.insertApsMaterialStorageManagement(apsMaterialStorageManagement);
|
}
|
|
/**
|
* 修改物料库存管理
|
*
|
* @param apsMaterialStorageManagement 物料库存管理
|
* @return 结果
|
*/
|
@Override
|
public int updateApsMaterialStorageManagement(ApsMaterialStorageManagement apsMaterialStorageManagement)
|
{
|
apsMaterialStorageManagement.setUpdateTime(DateUtils.getNowDate());
|
return apsMaterialStorageManagementMapper.updateApsMaterialStorageManagement(apsMaterialStorageManagement);
|
}
|
|
/**
|
* 批量删除物料库存管理
|
*
|
* @param ids 需要删除的物料库存管理主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteApsMaterialStorageManagementByIds(String[] ids)
|
{
|
return apsMaterialStorageManagementMapper.deleteApsMaterialStorageManagementByIds(ids);
|
}
|
|
/**
|
* 删除物料库存管理信息
|
*
|
* @param id 物料库存管理主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteApsMaterialStorageManagementById(String id)
|
{
|
return apsMaterialStorageManagementMapper.deleteApsMaterialStorageManagementById(id);
|
}
|
/**
|
* 获取物料库存信息
|
* */
|
private Optional<ApsMaterialStorageManagement> getItemStorage(String plant, String itemNumber) {
|
ApsMaterialStorageManagement storageParam = new ApsMaterialStorageManagement();
|
storageParam.setItemNumber(itemNumber);
|
storageParam.setApplicableFactories(plant);
|
return apsMaterialStorageManagementMapper.selectApsMaterialStorageManagementList(storageParam).stream()
|
.findFirst();
|
}
|
|
/**
|
* 从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){
|
// 如果Redis中有缓存,将其转换为ApsMaterialStorageManagement对象并返回
|
ams = materialStorage.toJavaObject(ApsMaterialStorageManagement.class);
|
return ams;
|
}else {
|
// 如果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;
|
}
|
|
/**
|
* 设置库存数据到redis
|
* @param orgCode
|
* @return
|
*/
|
@Override
|
public boolean setStorageDataToRedis(String orgCode) {
|
try {
|
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);
|
} catch (Exception e) {
|
e.printStackTrace();
|
return false;
|
}
|
// Set<String> keys = redisTemplate.keys("MaterialStorage:Material_*");
|
// if (keys != null && !keys.isEmpty()) {
|
// redisTemplate.delete(keys);
|
// }
|
return true;
|
}
|
}
|