package com.ruoyi.base.service.impl; import com.ruoyi.base.constant.Constant; import com.ruoyi.base.domain.BaseLocationInfo; import com.ruoyi.base.domain.BaseLocationZone; import com.ruoyi.base.domain.vo.*; import com.ruoyi.base.mapper.BaseLocationInfoMapper; import com.ruoyi.base.mapper.BaseLocationZoneMapper; import com.ruoyi.base.service.IBaseLocationInfoService; import com.ruoyi.base.utils.CommonUtils; import com.ruoyi.common.utils.DateUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 库位信息Service业务层处理 * * @author andy * @date 2022-02-18 */ @Service public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService { @Autowired private BaseLocationInfoMapper baseLocationInfoMapper; @Autowired private BaseLocationZoneMapper baseLocationZoneMapper; @Autowired private RedisTemplate redisTemplate; /** * 查询库位信息 * * @param id 库位信息主键 * @return 库位信息 */ @Override public BaseLocationInfo selectBaseLocationInfoById(Long id) { return baseLocationInfoMapper.selectBaseLocationInfoById(id); } @Override public BaseLocationInfo selectBaseLocationInfoByIdOrNo(String idOrNo, Long warehouseId) { BaseLocationInfo locationInfo = null; try { locationInfo = baseLocationInfoMapper.selectBaseLocationInfoById(Long.parseLong(idOrNo)); } catch (Exception e) { } if (locationInfo == null) { return baseLocationInfoMapper.selectBaseLocationInfoByLocationNo(idOrNo, warehouseId); } else { return locationInfo; } } /** * 查询库位信息列表 * * @param baseLocationInfo 库位信息 * @return 库位信息 */ @Override public List selectBaseLocationInfoList(BaseLocationInfo baseLocationInfo) { return baseLocationInfoMapper.selectBaseLocationInfoList(baseLocationInfo); } /** * 新增库位信息 * * @param baseLocationInfo 库位信息 * @return 结果 */ @Override public int insertBaseLocationInfo(BaseLocationInfo baseLocationInfo) { baseLocationInfo.setCreateTime(DateUtils.getNowDate()); return baseLocationInfoMapper.insertBaseLocationInfo(baseLocationInfo); } /** * 修改库位信息 * * @param baseLocationInfo 库位信息 * @return 结果 */ @Override public int updateBaseLocationInfo(BaseLocationInfo baseLocationInfo) { baseLocationInfo.setUpdateTime(DateUtils.getNowDate()); return baseLocationInfoMapper.updateBaseLocationInfo(baseLocationInfo); } /** * 批量删除库位信息 * * @param ids 需要删除的库位信息主键 * @return 结果 */ @Override public int deleteBaseLocationInfoByIds(Long[] ids) { return baseLocationInfoMapper.deleteBaseLocationInfoByIds(ids); } /** * 删除库位信息信息 * * @param id 库位信息主键 * @return 结果 */ @Override public int deleteBaseLocationInfoById(Long id) { return baseLocationInfoMapper.deleteBaseLocationInfoById(id); } @Override public List buildLocationTreeSelect() { List locationTrees = buildLocationTree(0L); return locationTrees.stream().map(TreeSelectVO::new).collect(Collectors.toList()); } @Override public List buildLocationTree(Long zoneId) { // 查询区域,库位树把区域也组装进去 BaseLocationZone queryZone = new BaseLocationZone(); queryZone.setStatus("0"); List zoneList = baseLocationZoneMapper.selectBaseLocationZoneList(queryZone); List locationTreeSelectVOList = new ArrayList<>(); //循环遍历每个区域的库位 for (BaseLocationZone zone : zoneList) { BasLocationTreeSelectVO parent = new BasLocationTreeSelectVO(); List children = new ArrayList<>(); BaseLocationInfo query = new BaseLocationInfo(); query.setZoneId(zone.getZoneId()); List locationInfoList = baseLocationInfoMapper.selectBaseLocationInfoList(query); for (BaseLocationInfo b : locationInfoList) { BasLocationTreeSelectVO child = new BasLocationTreeSelectVO(); child.setId(b.getId()); child.setTreeName(b.getLocationNo()); children.add(child); } parent.setId(zone.getZoneId()); parent.setTreeName(zone.getZoneName()); parent.setChildren(children); locationTreeSelectVOList.add(parent); } return locationTreeSelectVOList; } @Override public boolean checkIsLocation(String idOrNo, Long warehouseId) { BaseLocationInfo baseLocationInfo = this.selectBaseLocationInfoByIdOrNo(idOrNo, warehouseId); if (baseLocationInfo == null) { return false; } else { return true; } } @Override public List selectSortedLocatinListByZoneId(Long zoneId, Long warehouseId) { BaseLocationInfo query = new BaseLocationInfo(); query.setWarehouseId(warehouseId); query.setZoneId(zoneId); return baseLocationInfoMapper.selectSortedLocationListByZoneId(query); } @Override public List selectSortedLocatinListByZoneId(List locationId, Long warehouseId, Map lotatt, String sku) { List result = new ArrayList<>(); List locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationId, warehouseId, lotatt, sku); BaseLocationLotattListVO current = null; for (BaseLocationLotattVO vo : locationLotattVOList) { if (current == null || current.getId().longValue() != vo.getId().longValue()) { current = new BaseLocationLotattListVO(); BeanUtils.copyProperties(vo, current); List lotattInfoList = new ArrayList<>(); current.setLotattInfoList(lotattInfoList); result.add(current); } LotattInfo lotattObj = new LotattInfo(); lotattObj.setSku(vo.getSku()); lotattObj.setQty(vo.getQty()); lotattObj.setLotattVO(vo.getLotattVO()); current.getLotattInfoList().add(lotattObj); } return result; } @Override public int updateLocationStockStatus(Long id, String status) { return baseLocationInfoMapper.updateLocationStockStatus(id, status); } @Override public List selectNeighborLocation(String colNo, Long zoneId) { List colNoList = baseLocationInfoMapper.selectAllColNo(); List resultList = new ArrayList<>(); String preColNo = ""; String nextColNo = ""; BaseLocationInfo currentLocation = null; for (int i = 0; i < colNoList.size(); i++) { if (!colNoList.get(i).getColNo().equals(colNo) && preColNo.equals("")) { preColNo = colNoList.get(i).getColNo(); continue; } if (colNoList.get(i).getColNo().equals(colNo)) { currentLocation = colNoList.get(i); preColNo = colNoList.get(i - 1).getColNo(); if (i + 1 < colNoList.size()) { nextColNo = colNoList.get(i + 1).getColNo(); } continue; } if (nextColNo.equals(colNoList.get(i).getColNo())) { continue; } else { if (i + 1 < colNoList.size()) { if (currentLocation != null) { if (CommonUtils.getString(colNoList.get(i + 1).getBindSku()).equals("") || CommonUtils.getString(colNoList.get(i + 1).getBindSku()).equals(currentLocation.getBindSku())) { nextColNo = colNoList.get(i + 1).getColNo(); } } } } } resultList.addAll(baseLocationInfoMapper.selectLocationByColNo(colNo)); resultList.addAll(baseLocationInfoMapper.selectLocationByColNo(preColNo)); resultList.addAll(baseLocationInfoMapper.selectLocationByColNo(nextColNo)); return resultList; } @Override public Boolean verifyLocationIsIdle(String locationId, Long warehouseId) { BaseLocationInfo baseLocationInfo = selectBaseLocationInfoByIdOrNo(locationId, warehouseId); if (!baseLocationInfo.getStockStatus().equals(Constant.STOCK_STATUS.STOCK00.getValue())) { return false; } return true; } @Override public Boolean verifyLocationIsInStock(String locationId, Long warehouseId) { BaseLocationInfo baseLocationInfo = selectBaseLocationInfoByIdOrNo(locationId, warehouseId); if (baseLocationInfo.getIsEmpty().equals(Constant.IS_YES.N.toString())) { return false; } return true; } @Override public boolean lockLocationStockStatus(Long id, Long warehouseId, String updateBy) { return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy , Constant.STOCK_STATUS.STOCK10, null); } @Override public boolean unLockLocationStockStatus(Long id, Long warehouseId, String updateBy) { return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy , Constant.STOCK_STATUS.STOCK00, null); } @Override public boolean lockLocationStockStatus(Long locationFromId, Long locationToId, Long warehouseId, String updateBy) { if (!lockLocationStockStatus(locationFromId, warehouseId, updateBy)) { return false; } return lockLocationStockStatus(locationToId, warehouseId, updateBy); } @Override public boolean unLockLocationStockStatus(Long locationFromId, Long locationToId, Long warehouseId, String updateBy) { if (!unLockLocationStockStatus(locationFromId, warehouseId, updateBy)) { return false; } return unLockLocationStockStatus(locationToId, warehouseId, updateBy); } @Override public boolean occupyLocationIsEmpty(Long id, Long warehouseId, String updateBy) { return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy , null, Constant.IS_YES.Y); } @Override public boolean unOccupyLocationIsEmpty(Long id, Long warehouseId, String updateBy) { return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy , null, Constant.IS_YES.N); } @Override public boolean updateLocationIdleAndEmpty(Long id, Long warehouseId, String updateBy) { return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy , Constant.STOCK_STATUS.STOCK00, Constant.IS_YES.N); } @Override public boolean updateLocationIdleAndNoEmpty(Long id, Long warehouseId, String updateBy) { return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy , Constant.STOCK_STATUS.STOCK00, Constant.IS_YES.Y); } private boolean updateLocationStockStatusAndIsEmpty(Long id, Long warehouseId, String updateBy , Constant.STOCK_STATUS stockStatus, Constant.IS_YES isYes) { BaseLocationInfo locationInfo = selectBaseLocationInfoById(id); if (locationInfo == null) { return false; } BaseLocationInfo locationInfoFromUpdate = new BaseLocationInfo(); locationInfoFromUpdate.setId(locationInfo.getId()); if (stockStatus != null) { locationInfoFromUpdate.setStockStatus(stockStatus.getValue()); } if (isYes != null) { locationInfoFromUpdate.setIsEmpty(isYes.getValue()); } locationInfoFromUpdate.setUpdateBy(updateBy); locationInfoFromUpdate.setWarehouseId(warehouseId); return this.updateBaseLocationInfo(locationInfoFromUpdate) > 0; } }