| | |
| | | package com.zy.asrs.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.LocDetl; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.param.ErrorDeviceParam; |
| | | import com.zy.asrs.mapper.LocMastMapper; |
| | | import com.zy.asrs.service.LocMastService; |
| | | import com.zy.asrs.service.RowLastnoService; |
| | | import com.zy.asrs.utils.LocAliasUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | @Service("locMastService") |
| | | public class LocMastServiceImpl extends ServiceImpl<LocMastMapper, LocMast> implements LocMastService { |
| | | @Override |
| | | public List<LocMast> asrLocMastNotInDetl1() { |
| | | return this.baseMapper.asrLocMastNotInDetl1(); |
| | | } |
| | | |
| | | @Override |
| | | public LocMast queryFreeLocMast(Integer row, Integer locType) { |
| | | return this.baseMapper.queryFreeLocMast(row, locType); |
| | | public List<LocMast> asrLocMastNotInDetl2() { |
| | | return this.baseMapper.asrLocMastNotInDetl2(); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocMast> asrLocMastNotInDetl3() { |
| | | return this.baseMapper.asrLocMastNotInDetl3(); |
| | | } |
| | | |
| | | @Override |
| | | public List<ErrorDeviceParam> adjacentLocMast() { |
| | | return this.baseMapper.adjacentLocMast(); |
| | | } |
| | | |
| | | @Override |
| | | public void prepareAreaAlias(LocMast locMast) { |
| | | if (locMast == null) { |
| | | return; |
| | | } |
| | | Integer areaId = locMast.getAreaId(); |
| | | if (areaId == null) { |
| | | areaId = LocAliasUtils.areaIdByCrnNo(locMast.getCrnNo()); |
| | | locMast.setAreaId(areaId); |
| | | } |
| | | Integer minRow = minRowByArea(areaId, locMast.getRow1()); |
| | | locMast.setLocAlias(LocAliasUtils.buildAlias( |
| | | areaId, |
| | | locMast.getRow1(), |
| | | locMast.getBay1(), |
| | | locMast.getLev1(), |
| | | minRow)); |
| | | } |
| | | |
| | | @Override |
| | | public void fillAreaAlias(List<LocMast> locMasts) { |
| | | if (Cools.isEmpty(locMasts)) { |
| | | return; |
| | | } |
| | | Map<Integer, Integer> minRowByArea = new HashMap<>(); |
| | | for (LocMast locMast : locMasts) { |
| | | if (locMast.getAreaId() == null) { |
| | | locMast.setAreaId(LocAliasUtils.areaIdByCrnNo(locMast.getCrnNo())); |
| | | } |
| | | Integer areaId = locMast.getAreaId(); |
| | | Integer row = locMast.getRow1(); |
| | | if (areaId == null || row == null) { |
| | | continue; |
| | | } |
| | | Integer minRow = minRowByArea.get(areaId); |
| | | if (minRow == null || row < minRow) { |
| | | minRowByArea.put(areaId, row); |
| | | } |
| | | } |
| | | for (LocMast locMast : locMasts) { |
| | | locMast.setLocAlias(LocAliasUtils.buildAlias( |
| | | locMast.getAreaId(), |
| | | locMast.getRow1(), |
| | | locMast.getBay1(), |
| | | locMast.getLev1(), |
| | | minRowByArea.get(locMast.getAreaId()))); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void batchUpdateArea(List<String> locNos, Integer areaId, Long userId) { |
| | | if (Cools.isEmpty(locNos)) { |
| | | throw new CoolException("请选择库位"); |
| | | } |
| | | if (LocAliasUtils.areaCode(areaId) == null) { |
| | | throw new CoolException("库区参数错误"); |
| | | } |
| | | List<LocMast> oldLocMasts = this.selectBatchIds(locNos); |
| | | if (Cools.isEmpty(oldLocMasts)) { |
| | | throw new CoolException("未找到要修改的库位"); |
| | | } |
| | | Set<Integer> affectedAreaIds = new HashSet<>(); |
| | | affectedAreaIds.add(areaId); |
| | | List<LocMast> updates = new ArrayList<>(); |
| | | Date now = new Date(); |
| | | for (LocMast oldLocMast : oldLocMasts) { |
| | | if (oldLocMast.getAreaId() != null) { |
| | | affectedAreaIds.add(oldLocMast.getAreaId()); |
| | | } |
| | | LocMast update = new LocMast(); |
| | | update.setLocNo(oldLocMast.getLocNo()); |
| | | update.setAreaId(areaId); |
| | | update.setModiUser(userId); |
| | | update.setModiTime(now); |
| | | updates.add(update); |
| | | } |
| | | if (!this.updateBatchById(updates)) { |
| | | throw new CoolException("批量修改库区失败"); |
| | | } |
| | | rebuildAliasByAreas(affectedAreaIds, userId); |
| | | } |
| | | |
| | | @Override |
| | | public List<String> selectLocNosByNoOrAlias(String condition) { |
| | | List<String> locNos = new ArrayList<>(); |
| | | if (Cools.isEmpty(condition)) { |
| | | return locNos; |
| | | } |
| | | List<LocMast> locMasts = this.selectList(new EntityWrapper<LocMast>() |
| | | .andNew() |
| | | .like("loc_no", condition) |
| | | .or() |
| | | .like("loc_alias", condition)); |
| | | for (LocMast locMast : locMasts) { |
| | | locNos.add(locMast.getLocNo()); |
| | | } |
| | | return locNos; |
| | | } |
| | | |
| | | private Integer minRowByArea(Integer areaId, Integer currentRow) { |
| | | if (areaId == null) { |
| | | return null; |
| | | } |
| | | Integer minRow = this.baseMapper.selectMinRowByArea(areaId); |
| | | if (currentRow != null && (minRow == null || currentRow < minRow)) { |
| | | return currentRow; |
| | | } |
| | | return minRow; |
| | | } |
| | | |
| | | private void rebuildAliasByAreas(Set<Integer> areaIds, Long userId) { |
| | | if (Cools.isEmpty(areaIds)) { |
| | | return; |
| | | } |
| | | List<LocMast> locMasts = this.selectList(new EntityWrapper<LocMast>().in("area_id", areaIds)); |
| | | if (Cools.isEmpty(locMasts)) { |
| | | return; |
| | | } |
| | | Map<Integer, Integer> minRowByArea = new HashMap<>(); |
| | | for (LocMast locMast : locMasts) { |
| | | Integer areaId = locMast.getAreaId(); |
| | | Integer row = locMast.getRow1(); |
| | | if (areaId == null || row == null) { |
| | | continue; |
| | | } |
| | | Integer minRow = minRowByArea.get(areaId); |
| | | if (minRow == null || row < minRow) { |
| | | minRowByArea.put(areaId, row); |
| | | } |
| | | } |
| | | List<LocMast> updates = new ArrayList<>(); |
| | | Date now = new Date(); |
| | | for (LocMast locMast : locMasts) { |
| | | LocMast update = new LocMast(); |
| | | update.setLocNo(locMast.getLocNo()); |
| | | update.setLocAlias(LocAliasUtils.buildAlias( |
| | | locMast.getAreaId(), |
| | | locMast.getRow1(), |
| | | locMast.getBay1(), |
| | | locMast.getLev1(), |
| | | minRowByArea.get(locMast.getAreaId()))); |
| | | update.setModiUser(userId); |
| | | update.setModiTime(now); |
| | | updates.add(update); |
| | | } |
| | | if (!updates.isEmpty() && !this.updateBatchById(updates)) { |
| | | throw new CoolException("重算库位别名失败"); |
| | | } |
| | | } |
| | | |
| | | @Autowired |
| | | private RowLastnoService rowLastnoService; |
| | | |
| | | @Override |
| | | public LocMast queryFreeLocMast(Integer row, Short locType1) { |
| | | return this.baseMapper.queryFreeLocMast(row, locType1,1L); |
| | | } |
| | | |
| | | @Override |
| | | public LocMast queryFreeLocMast(Integer row, Short locType1,Long type) { |
| | | return this.baseMapper.queryFreeLocMast(row, locType1,type); |
| | | } |
| | | |
| | | @Override |
| | | public List<String> queryGroupEmptyStock(String sourceLocNo) { |
| | | if (Cools.isEmpty(sourceLocNo)) { |
| | | return null; |
| | | } |
| | | LocMast sourceStock = this.selectById(sourceLocNo); |
| | | if (Cools.isEmpty(sourceStock)) { |
| | | return null; |
| | | } |
| | | return this.baseMapper.queryGroupEmptyStock(sourceStock.getCrnNo(), 1L); |
| | | } |
| | | |
| | | @Override |
| | | public List<String> queryGroupEmptyStock(String sourceLocNo,Long type) { |
| | | if (Cools.isEmpty(sourceLocNo)) { |
| | | return null; |
| | | } |
| | | LocMast sourceStock = this.selectById(sourceLocNo); |
| | | if (Cools.isEmpty(sourceStock)) { |
| | | return null; |
| | | } |
| | | return this.baseMapper.queryGroupEmptyStock(sourceStock.getCrnNo(), type); |
| | | } |
| | | |
| | | @Override |
| | | public Boolean checkEmptyCount(LocMast locMast) { |
| | | if (locMast == null) { |
| | | return false; |
| | | } |
| | | return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo(),1L) > 1; |
| | | } |
| | | |
| | | @Override |
| | | public Boolean checkEmptyCount(LocMast locMast,Long type) { |
| | | if (locMast == null) { |
| | | return false; |
| | | } |
| | | return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo(),type) > 1; |
| | | } |
| | | |
| | | /* |
| | | *获取目标库位所在巷道最浅非空库位 |
| | | * */ |
| | | // @Override |
| | | // public LocMast selectLocByLocStsPakInF(Integer curRow,Integer nearRow,List<String> locNos) { |
| | | // if (curRow<nearRow){ |
| | | // return this.baseMapper.selectLocByLocStsPakInF1(locNos,1L); |
| | | // } |
| | | // return this.baseMapper.selectLocByLocStsPakInF2(locNos,1L); |
| | | // } |
| | | // |
| | | // @Override |
| | | // public LocMast selectLocByLocStsPakInF(Integer curRow,Integer nearRow,List<String> locNos,Long type) { |
| | | // if (curRow<nearRow){ |
| | | // return this.baseMapper.selectLocByLocStsPakInF1(locNos,type); |
| | | // } |
| | | // return this.baseMapper.selectLocByLocStsPakInF2(locNos,type); |
| | | // } |
| | | |
| | | @Override |
| | | public LocMast selectLocByLocStsPakInF(Integer curRow,Integer nearRow,LocMast locMast,Long type) { |
| | | if (curRow>nearRow){ |
| | | return this.baseMapper.selectLocByLocStsPakInF1(locMast.getCrnNo(),locMast.getBay1(),locMast.getLev1(),locMast.getGro1(),type); |
| | | } |
| | | return this.baseMapper.selectLocByLocStsPakInF2(locMast.getCrnNo(),locMast.getBay1(),locMast.getLev1(),locMast.getGro1(),type); |
| | | } |
| | | |
| | | /* |
| | | * 获取目标库位所在巷道最深空库位 |
| | | * */ |
| | | // @Override |
| | | // public LocMast selectLocByLocStsPakInO(Integer curRow,Integer nearRow,List<String> locNos) { |
| | | // if (curRow<nearRow){ |
| | | // return this.baseMapper.selectLocByLocStsPakInO1(locNos,1L); |
| | | // } |
| | | // return this.baseMapper.selectLocByLocStsPakInO2(locNos,1L); |
| | | // } |
| | | @Override |
| | | public LocMast selectLocByLocStsPakInO(Integer curRow,Integer nearRow,LocMast locMast,Long type) { |
| | | if (curRow>nearRow){ |
| | | return this.baseMapper.selectLocByLocStsPakInO1(locMast.getCrnNo(),locMast.getBay1(),locMast.getLev1(),locMast.getGro1(),type); |
| | | } |
| | | return this.baseMapper.selectLocByLocStsPakInO2(locMast.getCrnNo(),locMast.getBay1(),locMast.getLev1(),locMast.getGro1(),type); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocMast> selectLocByLev(Integer lev) { |
| | | return this.baseMapper.selectLocByLev(lev); |
| | | } |
| | | |
| | | @Override |
| | | public Boolean checkWhole(List<LocDetl> locDetls) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Boolean checkWhole(List<LocDetl> locDetls,Long type) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<LocMast> queryShallowLocFMast(Integer crnNo) { |
| | | return this.baseMapper.queryShallowLocFMast(crnNo,1L); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocMast> queryShallowLocFMast(Integer crnNo,Long type) { |
| | | return this.baseMapper.queryShallowLocFMast(crnNo,type); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocMast> selectLocMastShuttleMoveUnilateral(Integer bay,Integer lev,Integer crnNo) { |
| | | if (crnNo==1){ |
| | | return this.baseMapper.selectLocShuttleMoveUnilateralY(bay,lev,1L); |
| | | } |
| | | return this.baseMapper.selectLocShuttleMoveUnilateralN(bay,lev,1L); |
| | | } |
| | | |
| | | @Override |
| | | public List<LocMast> selectLocMastShuttleMoveUnilateral(Integer bay,Integer lev,Integer crnNo,Long type) { |
| | | if (crnNo==1){ |
| | | return this.baseMapper.selectLocShuttleMoveUnilateralY(bay,lev,type); |
| | | } |
| | | return this.baseMapper.selectLocShuttleMoveUnilateralN(bay,lev,type); |
| | | } |
| | | } |