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.DepotStore;
|
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.apache.commons.lang3.time.DateFormatUtils;
|
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;
|
@Resource
|
private DepotStoreService depotStoreService;
|
|
/**
|
* 查询库区下仓库列表
|
*
|
* @param companyId
|
* @param deptId
|
* @param idDesc 是否ID倒序排列
|
* @return
|
*/
|
public List<Depot> getData(String companyId, String deptId, boolean idDesc) {
|
if (StringUtils.isEmpty(companyId)) {
|
companyId = ContextUtil.getCompanyId();
|
}
|
|
QueryWrapper<Depot> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("company_id", companyId);
|
if (StringUtils.isNotBlank(deptId)) {
|
queryWrapper.likeRight("dept_id", deptId);
|
}
|
|
if (idDesc) {
|
//ID倒序
|
queryWrapper.orderByDesc("id");
|
} else {
|
//序号正序
|
queryWrapper.orderByAsc("order_num");
|
}
|
|
return depotMapper.selectList(queryWrapper);
|
}
|
|
/**
|
* 根据库存表信息,更新仓库库存
|
*
|
* @param data
|
*/
|
public void updateByDepotStore(DepotStore data) {
|
UpdateWrapper<Depot> updateWrapper = new UpdateWrapper<>();
|
updateWrapper.eq("id", data.getDepotId()).set("storage_real", data.getStorageReal());
|
|
depotMapper.update(null, updateWrapper);
|
}
|
|
/**
|
* 保存更新仓库信息
|
*
|
* @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());
|
}
|
|
/**
|
* 更新库存信息
|
*
|
* @param depot
|
*/
|
public void updateStorageReal(Depot depot) {
|
|
Depot cacheDepot = this.getCacheDepot(depot.getCompanyId(), depot.getId());
|
|
depot.setUpdateBy(ContextUtil.getLoginUserName());
|
depot.setUpdateTime(new Date());
|
depot.setRemark("【" + ContextUtil.getLoginUserName() + "】于[" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss") + "]修改库存:" + cacheDepot.getStorageReal() + "-->" + depot.getStorageReal());
|
depotMapper.updateById(depot);
|
|
DepotStore lastData = new DepotStore();
|
|
//主键ID规则:yyyyMMddHHmm_仓库编码
|
lastData.setId(DateFormatUtils.format(new Date(), "yyyyMMddHHmm") + "_" + depot.getId() + "_HAND");
|
lastData.setCompanyId(depot.getCompanyId());
|
lastData.setDeptId(depot.getId());
|
lastData.setDepotId(depot.getId());
|
lastData.setStorageReal(0.0);
|
lastData.setUpdateTime(new Date());
|
lastData.setUpdateBy("系统定时统计");
|
|
|
lastData.setDepotStatus(depot.getDepotStatus());
|
lastData.setFoodVariety(depot.getFoodVariety());
|
lastData.setFoodLevel(depot.getFoodLevel());
|
lastData.setFoodLocation(depot.getFoodLocation());
|
lastData.setFoodLocationId(depot.getFoodLocationId());
|
lastData.setFoodType(depot.getFoodType());
|
lastData.setFoodYear(depot.getFoodYear());
|
|
|
lastData.setStorageReal(depot.getStorageReal());
|
lastData.setCreateTime(new Date()); //设置为最新时间,其他系统可以通过此时间查询数据是否有更新修改,同步到省平台接口。
|
lastData.setCreateBy(ContextUtil.getLoginUserName());
|
lastData.setRemark("【" + ContextUtil.getLoginUserName() + "】于[" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss") + "]修改库存为:" + depot.getStorageReal());
|
|
depotStoreService.updateAndSave(lastData);
|
flushCache(depot.getCompanyId());
|
}
|
|
/**
|
* 获取主键ID
|
*
|
* @param deptId
|
* @param deptId
|
*/
|
public String getStrId(String deptId) {
|
List<Depot> 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<Depot> 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<Depot> list = this.getData(companyId, null, false);
|
|
this.setCacheDepotList(list, companyId);
|
}
|
|
/**
|
* 设置缓存
|
*
|
* @param list
|
* @param companyId
|
*/
|
public void setCacheDepotList(List<Depot> 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<Depot> getCacheDepotList(String companyId) {
|
if (StringUtils.isEmpty(companyId)) {
|
companyId = ContextUtil.getCompanyId();
|
}
|
List<Depot> list = new ArrayList<>();
|
|
String patten = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT) + "*";
|
Collection<String> keys = redisCache.keys(patten);
|
if (null != keys) {
|
for (String key : keys) {
|
list.add((Depot) redisCache.getCacheObject(key));
|
}
|
}
|
|
//缓存获取为空,则查询数据库
|
if (list.isEmpty()) {
|
list = this.getData(companyId, null, false);
|
setCacheDepotList(list, companyId);
|
}
|
if (!list.isEmpty()) {
|
//重新排序
|
Collections.sort(list, (p1, p2) -> p1.getOrderNum() - p2.getOrderNum());
|
}
|
return list;
|
}
|
|
/**
|
* 获取缓存-根据组织编码和库区编码获取仓库集合
|
*
|
* @param companyId
|
* @param deptId
|
* @return
|
*/
|
public List<Depot> getCacheDepotList(String companyId, String deptId) {
|
if (StringUtils.isEmpty(deptId)) {
|
return null;
|
}
|
List<Depot> list = getCacheDepotList(companyId);
|
if (null == list || list.isEmpty()) {
|
return null;
|
}
|
List<Depot> result = new ArrayList<>();
|
for (Depot depot : list) {
|
if (deptId.equals(depot.getDeptId())) {
|
result.add(depot);
|
}
|
}
|
if (!result.isEmpty()) {
|
//重新排序
|
Collections.sort(list, (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;
|
}
|
|
/**
|
* 获取仓库信息-根据仓库名称获取仓库ID
|
*
|
* @param deptId
|
* @return
|
*/
|
public String getDepotId(String deptId, String depotName) {
|
if (StringUtils.isEmpty(deptId)) {
|
return null;
|
}
|
if (StringUtils.isEmpty(depotName)) {
|
return null;
|
}
|
|
List<Depot> depotList = getCacheDepotList(ContextUtil.getCompanyId(), deptId);
|
if (null == depotList || depotList.isEmpty()) {
|
return null;
|
}
|
for (Depot depot : depotList) {
|
if (depotName.equals(depot.getName())) {
|
return depot.getId();
|
}
|
}
|
return null;
|
}
|
}
|