package com.ruoyi.base.service.impl; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import com.ruoyi.base.domain.BaseLocationZone; import com.ruoyi.base.domain.vo.BasLocationTreeSelectVO; import com.ruoyi.base.domain.vo.TreeSelectVO; import com.ruoyi.base.mapper.BaseLocationZoneMapper; import com.ruoyi.base.utils.CommonUtils; import com.ruoyi.common.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.base.mapper.BaseLocationInfoMapper; import com.ruoyi.base.domain.BaseLocationInfo; import com.ruoyi.base.service.IBaseLocationInfoService; /** * 库位信息Service业务层处理 * * @author andy * @date 2022-02-18 */ @Service public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService { @Autowired private BaseLocationInfoMapper baseLocationInfoMapper; @Autowired private BaseLocationZoneMapper baseLocationZoneMapper; /** * 查询库位信息 * * @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 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; } }