package com.fzzy.igds.sys; import com.fzzy.igds.dzhwk.constant.RedisConst; import com.fzzy.igds.dzhwk.domain.Depot; import com.fzzy.igds.dzhwk.domain.DepotConf; import com.fzzy.igds.sys.repository.DepotConfRepository; import com.fzzy.igds.util.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.List; import java.util.stream.Collectors; /** * @Description * @Author CZT * @Date 2024/11/25 14:56 */ @Slf4j @Service("sys.depotConfService") public class DepotConfService { @Resource private DepotConfRepository depotConfRepository; @Resource private DepotService depotService; @Resource private RedisCache redisCache; /** * jpa查询配置信息 * * @param companyId * @param deptId * @return */ public List getConfList(String companyId, String deptId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } if (StringUtils.isEmpty(deptId)) { deptId = ContextUtil.subDeptId(null); } //查询配置信息 List list = depotConfRepository.getDepotConf(companyId, deptId); //配置信息为空,则自动生成 if(null == list || list.isEmpty()){ addConfByDepot(companyId); } return depotConfRepository.getDepotConf(companyId, deptId); } /** * jpa更新保存配置信息 * * @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)); } depotConfRepository.save(conf); flushConfCache(conf.getCompanyId()); } /** * jpa删除配置信息 * * @param conf * @return */ public void deleteDepotConf(DepotConf conf) { depotConfRepository.delete(conf); //删除配置缓存 this.delCacheDepotConf(conf, conf.getCompanyId()); } /** * 设置缓存信息 * * @param list * @param companyId */ public void setCacheDepotConf(List list, String companyId) { if (null != list) { Depot depot; String key; for (DepotConf depotConf : list) { depot = depotService.getCacheDepot(companyId, depotConf.getDepotId()); if (null != depot) { depotConf.setDepotName(depot.getName()); depotConf.setDepotType(depot.getDepotType()); } 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()) || serId.equals(item.getGasSer()) || serId.equals(item.getEsSer()))) .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 = depotConfRepository.getDepotConfByDepotId(companyId, depotId); redisCache.setCacheObject(key, depotConf); } return depotConf; } /** * 根据仓库列表,自动生成仓库配置信息 * @param companyId */ private void addConfByDepot(String companyId) { List list = depotService.getCacheDepotList(companyId); if (null == list || list.isEmpty()) { return; } DepotConf conf; for (Depot depot : list) { conf = new DepotConf(); conf.setDepotId(depot.getId()); conf.setCompanyId(depot.getCompanyId()); conf.setDeptId(depot.getDeptId()); this.saveConf(conf); } } /** * 刷新仓库配置缓存 * @param companyId */ public void flushConfCache(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } List list = depotConfRepository.getDepotConfByCompanyId(companyId); this.setCacheDepotConf(list, companyId); } /** * 更新粮情保存频率 * @param freq */ public void updateFreq(String freq) { depotConfRepository.updateGrainFreq(ContextUtil.getCompanyId(), ContextUtil.subDeptId(null), freq); } }