123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- 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.dto.BaseLocationInfoSameColDTO;
- 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.core.domain.AjaxResult;
- import com.ruoyi.common.core.redis.RedisCache;
- import com.ruoyi.common.exception.ServiceException;
- import com.ruoyi.common.utils.DateUtils;
- import com.ruoyi.common.utils.StringUtils;
- import lombok.extern.slf4j.Slf4j;
- 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.Date;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- /**
- * 库位信息Service业务层处理
- *
- * @author andy
- * @date 2022-02-18
- */
- @Slf4j
- @Service
- public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
- @Autowired
- private BaseLocationInfoMapper baseLocationInfoMapper;
- @Autowired
- private BaseLocationZoneMapper baseLocationZoneMapper;
- @Autowired
- private RedisCache redisCache;
- /**
- * 查询库位信息
- *
- * @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;
- }
- }
- @Override
- public List<BaseLocationLotattVO> selectAllocatingLocationAccordingConditionsOrderBy(List<String> zoneId, String bindSku, String orderBy) {
- return baseLocationInfoMapper.selectAllocatingLocationAccordingConditionsOrderBy(zoneId, Constant.WAREHOUSE_ID, bindSku
- , orderBy);
- }
- @Override
- public List<BaseLocationLotattVO> selectAllocatingInventoryAccordingConditionsOrderBy(List<String> zoneId, Map<String, String> lotatt, String sku
- , String orderBy) {
- return baseLocationInfoMapper.selectAllocatingInventoryAccordingConditionsOrderBy(zoneId, Constant.WAREHOUSE_ID, lotatt, sku
- , orderBy);
- }
- /**
- * 查询库位信息列表
- *
- * @param baseLocationInfo 库位信息
- * @return 库位信息
- */
- @Override
- public List<BaseLocationInfo> selectBaseLocationInfoList(BaseLocationInfo baseLocationInfo) {
- return baseLocationInfoMapper.selectBaseLocationInfoList(baseLocationInfo);
- }
- @Override
- public List<BaseLocationInfo> selectBaseLocationInfoList(long locId) {
- BaseLocationInfo baseLocationInfo = new BaseLocationInfo();
- baseLocationInfo.setId(locId);
- 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<TreeSelectVO> buildLocationTreeSelect() {
- List<BasLocationTreeSelectVO> locationTrees = buildLocationTree(0L);
- return locationTrees.stream().map(TreeSelectVO::new).collect(Collectors.toList());
- }
- @Override
- public List<BasLocationTreeSelectVO> buildLocationTree(Long zoneId) {
- // 查询区域,库位树把区域也组装进去
- BaseLocationZone queryZone = new BaseLocationZone();
- queryZone.setStatus("0");
- List<BaseLocationZone> zoneList = baseLocationZoneMapper.selectBaseLocationZoneList(queryZone);
- List<BasLocationTreeSelectVO> locationTreeSelectVOList = new ArrayList<>();
- //循环遍历每个区域的库位
- for (BaseLocationZone zone : zoneList) {
- BasLocationTreeSelectVO parent = new BasLocationTreeSelectVO();
- List<BasLocationTreeSelectVO> children = new ArrayList<>();
- BaseLocationInfo query = new BaseLocationInfo();
- query.setZoneId(zone.getZoneId());
- List<BaseLocationInfo> 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<BaseLocationInfo> selectSortedLocatinListByZoneId(Long zoneId, Long warehouseId,String orderBy) {
- BaseLocationInfo query = new BaseLocationInfo();
- query.setWarehouseId(warehouseId);
- query.setZoneId(zoneId);
- query.setOrderByClause(orderBy);
- return baseLocationInfoMapper.selectSortedLocationListByZoneId(query);
- }
- @Override
- public List<BaseLocationLotattListVO> selectSortedLocatinListByZoneId(List<Long> locationId, Long warehouseId, Map<String, String> lotatt, String sku) {
- List<BaseLocationLotattListVO> result = new ArrayList<>();
- List<BaseLocationLotattVO> 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<LotattInfo> 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<BaseLocationInfo> selectNeighborLocation(String colNo, Long zoneId) {
- List<BaseLocationInfo> colNoList = baseLocationInfoMapper.selectAllColNo();
- List<BaseLocationInfo> 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.Y.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 occupyLocation(Long id, Long warehouseId, String updateBy) {
- return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
- , null, Constant.IS_YES.N);
- }
- @Override
- public boolean unOccupyLocation(Long id, Long warehouseId, String updateBy) {
- return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
- , null, Constant.IS_YES.Y);
- }
- @Override
- public boolean updateLocationIdleAndEmpty(Long id, Long warehouseId, String updateBy) {
- return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
- , Constant.STOCK_STATUS.STOCK00, Constant.IS_YES.Y);
- }
- @Override
- public boolean updateLocationIdleAndNoEmpty(Long id, Long warehouseId, String updateBy) {
- return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
- , Constant.STOCK_STATUS.STOCK00, Constant.IS_YES.N);
- }
- @Override
- public List<BaseLocationInfo> selectBeforeLocationByColNo(String colNo, Long colIndex) {
- return baseLocationInfoMapper.selectBeforeLocationByColNo(colNo, colIndex);
- }
- @Override
- public List<BaseLocationInfoSameColDTO> selectSameColCanToLoc(String colNo, Long colIndex) {
- return baseLocationInfoMapper.selectSameColCanToLoc(colNo, colIndex);
- }
- 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.toString());
- }
- locationInfoFromUpdate.setUpdateBy(updateBy);
- locationInfoFromUpdate.setWarehouseId(warehouseId);
- return this.updateBaseLocationInfo(locationInfoFromUpdate) > 0;
- }
- @Override
- public AjaxResult importLocation(List<BaseLocationInfo> list, boolean updateSupport, String opname) {
- if (StringUtils.isNull(list) || list.size() == 0) {
- throw new ServiceException("导入库位基本信息数据不能为空!");
- }
- int successNum = 0;
- int failureNum = 0;
- StringBuilder successMsg = new StringBuilder();
- StringBuilder failureMsg = new StringBuilder();
- for (BaseLocationInfo baseLocationInfo : list) {
- try {
- if (StringUtils.isEmpty(baseLocationInfo.getLocationNo())) {
- if (baseLocationInfo.getLocationType().equals("1")) {
- baseLocationInfo.setLocationNo(baseLocationInfo.getRowNo() + "-" + StringUtils.addZero(baseLocationInfo.getShiftNo(), 2) + "-" + StringUtils.addZero(baseLocationInfo.getShiftIndex().toString(), 2));
- } else {
- baseLocationInfo.setLocationNo(baseLocationInfo.getRowNo() + "-" + StringUtils.addZero(baseLocationInfo.getColNo(), 2) + "-" + StringUtils.addZero(baseLocationInfo.getColIndex().toString(), 2));
- }
- }
- BaseLocationInfo b = baseLocationInfoMapper.selectBaseLocationInfoByLocationNo(baseLocationInfo.getLocationNo(), Constant.WAREHOUSE_ID);
- if (b == null) {
- //BeanValidators.validateWithException(validator, stu);
- baseLocationInfo.setCreateBy(opname);
- baseLocationInfo.setCreateTime(new Date());
- baseLocationInfo.setStockStatus("00");
- baseLocationInfo.setIsEmpty("Y");
- baseLocationInfo.setWarehouseId(Constant.WAREHOUSE_ID);
- baseLocationInfo.setColNo(baseLocationInfo.getColNo());
- this.insertBaseLocationInfo(baseLocationInfo);
- successNum++;
- successMsg.append("<br/>" + successNum + "、库位 " + baseLocationInfo.getLocationNo() + " 导入成功");
- } else if (updateSupport) {
- //BeanValidators.validateWithException(validator, stu);
- b.setUpdateBy(opname);
- b.setUpdateTime(new Date());
- this.updateBaseLocationInfo(b);
- successNum++;
- successMsg.append("<br/>" + successNum + "、库位 " + b.getLocationNo() + " 更新成功");
- } else {
- failureNum++;
- failureMsg.append("<br/>" + failureNum + "、库位 " + b.getLocationNo() + " 已存在");
- }
- } catch (Exception e) {
- failureNum++;
- String msg = "<br/>" + failureNum + "、库位 " + baseLocationInfo.getLocationNo() + " 导入失败:";
- failureMsg.append(msg + e.getMessage());
- log.error(msg, e);
- }
- }
- if (failureNum > 0) {
- failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
- throw new ServiceException(failureMsg.toString());
- } else {
- successMsg.insert(0, "数据已全部导入成功!共 " + successNum + " 条,数据如下:");
- }
- return AjaxResult.success(successMsg);
- }
- @Override
- public List<BaseLocationInfo> selectEmptyLocationByZoneId(String zoneId) {
- return baseLocationInfoMapper.selectEmptyLocationByZoneId(zoneId);
- }
- }
|