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.mapper.DepotMapper; 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.*; /** * @Description * @Author CZT * @Date 2025/11/27 13:43 */ @Slf4j @Service public class DepotService { @Resource private DepotMapper depotMapper; @Resource private RedisCache redisCache; /** * 查询库区下仓库列表 * * @param companyId * @param deptId * @param idDesc 是否ID倒序排列 * @return */ public List getData(String companyId, String deptId, boolean idDesc) { 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); } if(idDesc){ //ID倒序 queryWrapper.orderByDesc("id"); }else { //序号正序 queryWrapper.orderByAsc("order_num"); } return depotMapper.selectList(queryWrapper); } /** * 保存更新仓库信息 * * @param depot */ public void saveDepot(Depot depot) { if (StringUtils.isEmpty(depot.getCompanyId())) { depot.setCompanyId(ContextUtil.getCompanyId()); } if (StringUtils.isEmpty(depot.getDeptId())) { depot.setDeptId(ContextUtil.subDeptId(null)); } //默认顺序号 if (null == depot.getOrderNum()) { depot.setOrderNum(1); } //主键ID if (StringUtils.isEmpty(depot.getId())) { depot.setId(getStrId(depot.getDeptId())); depot.setCreateBy(ContextUtil.getLoginUserName()); depot.setCreateTime(new Date()); depotMapper.insert(depot); }else { depot.setUpdateBy(ContextUtil.getLoginUserName()); depot.setUpdateTime(new Date()); depotMapper.updateById(depot); } flushCache(depot.getCompanyId()); } /** * 获取主键ID * * @param deptId * @param deptId */ public String getStrId(String deptId) { List depots = this.getData(null, deptId, true); String oldOrderId = null; if (null != depots && depots.size() > 0) { oldOrderId = depots.get(0).getId().substring(deptId.length()); } return deptId + ContextUtil.getOrderId(oldOrderId, 3); } /** * 更新仓库状态 * * @param depotId * @param status */ public void updateDepotStatus(String depotId, String status) { if (StringUtils.isEmpty(depotId)) { return; } UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", depotId).set("depot_status", status); depotMapper.update(null, updateWrapper); } /** * 删除仓库货位信息 * * @param depot */ public void deleteDepot(Depot depot) { depotMapper.deleteById(depot); //删除配置缓存 this.delCacheDepot(depot, depot.getCompanyId()); } /** * 刷新仓库货位缓存 * * @param companyId */ public void flushCache(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } List list = this.getData(companyId,null, false); this.setCacheDepotList(list, companyId); } /** * 设置缓存 * * @param list * @param companyId */ public void setCacheDepotList(List list, String companyId) { if (null == list) return; String key; for (Depot depot : list) { key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT, depot.getId()); redisCache.setCacheObject(key, depot); } } /** * 删除缓存信息 * * @param depot * @param companyId */ public void delCacheDepot(Depot depot, String companyId) { if (null == depot) { return; } if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT, depot.getId()); redisCache.deleteObject(key); } /** * 获取缓存-根据组织编码获取仓库集合 * * @param companyId * @return */ public List getCacheDepotList(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } String patten = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT) + "*"; Collection keys = redisCache.keys(patten); if (null == keys) { return null; } List list = new ArrayList<>(); for (String key : keys) { list.add((Depot) redisCache.getCacheObject(key)); } //缓存获取为空,则查询数据库 if (list.size() < 1) { list = this.getData(companyId,null, false); setCacheDepotList(list, companyId); } //重新排序 Collections.sort(list, (p1, p2) -> p1.getOrderNum() - p2.getOrderNum()); return list; } /** * 获取缓存-根据组织编码和库区编码获取仓库集合 * * @param companyId * @param deptId * @return */ public List getCacheDepotList(String companyId, String deptId) { if (StringUtils.isEmpty(deptId)) { return null; } List list = getCacheDepotList(companyId); if (null == list || list.isEmpty()) { return null; } List result = new ArrayList<>(); for (Depot depot : list) { if (deptId.equals(depot.getDeptId())) { result.add(depot); } } //重新排序 Collections.sort(result, (p1, p2) -> p1.getOrderNum() - p2.getOrderNum()); return result; } /** * 获取仓库信息-根据仓库编码获取缓存信息 * * @param companyId * @param depotId * @return */ public Depot getCacheDepot(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, depotId); Depot depot = redisCache.getCacheObject(key); if (null == depot) { depot = depotMapper.selectById(depotId); redisCache.setCacheObject(key, depot); } return depot; } }