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 implements LocMastService { @Override public List asrLocMastNotInDetl1() { return this.baseMapper.asrLocMastNotInDetl1(); } @Override public List asrLocMastNotInDetl2() { return this.baseMapper.asrLocMastNotInDetl2(); } @Override public List asrLocMastNotInDetl3() { return this.baseMapper.asrLocMastNotInDetl3(); } @Override public List 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 locMasts) { if (Cools.isEmpty(locMasts)) { return; } Map 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 locNos, Integer areaId, Long userId) { if (Cools.isEmpty(locNos)) { throw new CoolException("请选择库位"); } if (LocAliasUtils.areaCode(areaId) == null) { throw new CoolException("库区参数错误"); } List oldLocMasts = this.selectBatchIds(locNos); if (Cools.isEmpty(oldLocMasts)) { throw new CoolException("未找到要修改的库位"); } Set affectedAreaIds = new HashSet<>(); affectedAreaIds.add(areaId); List 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 selectLocNosByNoOrAlias(String condition) { List locNos = new ArrayList<>(); if (Cools.isEmpty(condition)) { return locNos; } List locMasts = this.selectList(new EntityWrapper() .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 areaIds, Long userId) { if (Cools.isEmpty(areaIds)) { return; } List locMasts = this.selectList(new EntityWrapper().in("area_id", areaIds)); if (Cools.isEmpty(locMasts)) { return; } Map 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 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 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 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 locNos) { // if (curRow locNos,Long type) { // if (curRownearRow){ 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 locNos) { // if (curRownearRow){ 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 selectLocByLev(Integer lev) { return this.baseMapper.selectLocByLev(lev); } @Override public Boolean checkWhole(List locDetls) { return null; } @Override public Boolean checkWhole(List locDetls,Long type) { return null; } @Override public List queryShallowLocFMast(Integer crnNo) { return this.baseMapper.queryShallowLocFMast(crnNo,1L); } @Override public List queryShallowLocFMast(Integer crnNo,Long type) { return this.baseMapper.queryShallowLocFMast(crnNo,type); } @Override public List 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 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); } }