package com.fzzy.igds.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.fzzy.igds.constant.RedisConst; import com.fzzy.igds.domain.Depot; import com.fzzy.igds.domain.DepotConf; import com.fzzy.igds.mapper.DepotConfMapper; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @Description * @Author CZT * @Date 2025/11/28 15:42 */ @Slf4j @Service public class DepotConfService { @Resource private DepotConfMapper depotConfMapper; @Resource private DepotService depotService; @Resource private RedisCache redisCache; /** * 查询配置信息 * * @param companyId * @param deptId * @return */ public List getConfList(String companyId, String deptId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("company_id", companyId); if(StringUtils.isNotBlank(deptId)){ queryWrapper.eq("dept_id", deptId); } return depotConfMapper.selectList(queryWrapper); } /** * 更新保存配置信息 * * @param conf */ public void saveConf(DepotConf conf) { if (StringUtils.isEmpty(conf.getCompanyId())) { conf.setCompanyId(ContextUtil.getCompanyId()); } if (StringUtils.isEmpty(conf.getDeptId())) { conf.setDeptId(ContextUtil.subDeptId(null)); } if (null == conf.getUpdateBy()) { conf.setCreateBy(ContextUtil.getLoginUserName()); conf.setCreateTime(new Date()); conf.setUpdateBy(ContextUtil.getLoginUserName()); conf.setUpdateTime(new Date()); depotConfMapper.insert(conf); }else { conf.setUpdateBy(ContextUtil.getLoginUserName()); conf.setUpdateTime(new Date()); depotConfMapper.updateById(conf); } flushConfCache(conf.getCompanyId()); } /** * 删除配置信息 * * @param conf * @return */ public void deleteDepotConf(DepotConf conf) { depotConfMapper.deleteById( conf); //删除配置缓存 this.delCacheDepotConf(conf, conf.getCompanyId()); } /** * 设置缓存信息 * * @param list * @param companyId */ public void setCacheDepotConf(List list, String companyId) { if (null != list) { String key; for (DepotConf depotConf : list) { key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT_CONF, depotConf.getDepotId()); redisCache.setCacheObject(key, depotConf); } } } /** * 删除缓存信息 * * @param depotConf * @param companyId */ public void delCacheDepotConf(DepotConf depotConf, String companyId) { if (null == depotConf) { return; } if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT_CONF, depotConf.getDepotId()); redisCache.deleteObject(key); } /** * 获取缓存-根据组织编码获取配置信息集合 * * @param companyId * @return */ public List getCacheDepotConfList(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } String patten = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT_CONF) + "*"; Collection keys = redisCache.keys(patten); if (null == keys || keys.isEmpty()) { return null; } List result = new ArrayList<>(); for (String key : keys) { result.add((DepotConf) redisCache.getCacheObject(key)); } return result; } /** * 获取缓存-根据组织编码和粮情分机ID获取配置信息集合 * * @param companyId * @param serId * @return */ public List getCacheDepotConfList(String companyId, String serId) { List list = getCacheDepotConfList(companyId); if (null == list || list.isEmpty()) { return null; } return list.stream() .filter(item -> null != item.getGrainSer() && item.getGrainSer().equals(serId)) .collect(Collectors.toList()); } /** * 获取缓存-根据组织编码和粮情分机ID获取配置信息 * * @param companyId * @param serId * @return */ public DepotConf getCacheDepotConfBySerId(String companyId, String serId) { List data = getCacheDepotConfList(companyId); if (null == data) { return null; } return data.stream().filter(item -> serId.equals(item.getGrainSer())) .findAny().orElse(null); } /** * 获取缓存-根据组织编码和仓库编码获取配置信息 * * @param companyId * @param depotId * @return */ public DepotConf getCacheDepotConfByDepotId(String companyId, String depotId) { if (StringUtils.isEmpty(depotId)) { return null; } if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT_CONF, depotId); DepotConf depotConf = redisCache.getCacheObject(key); if (null == depotConf) { depotConf = depotConfMapper.selectById(depotId); redisCache.setCacheObject(key, depotConf); } return depotConf; } /** * 刷新仓库配置缓存 * @param companyId */ public void flushConfCache(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } List list = this.getConfList(companyId, null); this.setCacheDepotConf(list, companyId); } /** * 更新粮情保存频率 * @param freq */ public void updateFreq(String freq) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("dept_id", ContextUtil.subDeptId(null)).set("pos_x", freq); depotConfMapper.update(null, updateWrapper); } }