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.zy.asrs.entity.AgvBasDevp; import com.zy.asrs.entity.AgvWaitPakin; import com.zy.asrs.entity.AgvWrkDetl; import com.zy.asrs.entity.AgvWrkMast; import com.zy.asrs.mapper.AgvBasDevpMapper; import com.zy.asrs.service.AgvBasDevpService; import com.zy.asrs.service.AgvWaitPakinService; import com.zy.asrs.service.AgvWrkDetlService; import com.zy.asrs.service.AgvWrkMastService; import com.zy.common.model.AgvBasDevpDto; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; @Service @Transactional public class AgvBasDevpServiceImpl extends ServiceImpl implements AgvBasDevpService { @Autowired AgvBasDevpMapper agvBasDevpMapper; @Autowired AgvWrkMastService agvWrkMastService; @Autowired AgvWrkDetlService agvWrkDetlService; @Autowired AgvWaitPakinService agvWaitPakinService; public void clearBasDevp(){ agvBasDevpMapper.deleteAll(); } public void initBasDevp(){ //初始化1楼缓存货架站点 2排5列3层 this.insertBatch(getCacheBasDevpList(1,2,1,5,1,3,1)); //初始化3楼缓存货架站点 3排5列3层 this.insertBatch(getCacheBasDevpList(5,7,1,5,1,3,3)); //初始化3楼输送线工作站点 4个站点 this.insertBatch(getLineBasDevpList()); } private List getLineBasDevpList(){ List agvBasDevpList = new ArrayList<>(); Date now = new Date(); for(int row=1; row<=4; row++){ agvBasDevpList.add(getAgvBasDevp(row,1,1,3,"N",now)); } return agvBasDevpList; } //根据排列层获取AGV缓存货架站点列表 private List getCacheBasDevpList(int rowIndex, int rowMax, int bayIndex, int bayMax, int levIndex, int levMax, int floor){ List agvBasDevpList = new ArrayList<>(); Date now = new Date(); for(int row=rowIndex; row<=rowMax; row++){ for(int bay=bayIndex; bay<=bayMax; bay++){ for(int lev=levIndex; lev<=levMax; lev++){ agvBasDevpList.add(getAgvBasDevp(row,bay,lev,floor,"Y",now)); } } } return agvBasDevpList; } private AgvBasDevp getAgvBasDevp(int row, int bay, int lev, int floor, String cacheShelves, Date now){ AgvBasDevp agvBasDevp = new AgvBasDevp(); String devNo = "CS-" + floor + "0" + row + "-00" + bay + "-0" + lev + "@" + floor; String stationCode = "CS-" + floor + "0" + row; agvBasDevp.setDevNo(devNo); agvBasDevp.setStationCode(stationCode); agvBasDevp.setLocSts("O"); agvBasDevp.setCacheShelves(cacheShelves); agvBasDevp.setFloor(floor); agvBasDevp.setModiTime(now); agvBasDevp.setAppeTime(now); return agvBasDevp; } public void updateLocStsAndBarcodeByDevNo(String devNo, String locSts, String barcode){ AgvBasDevp agvBasDevp = this.selectById(devNo); agvBasDevp.setLocSts(locSts); agvBasDevp.setBarcode(barcode); this.updateById(agvBasDevp); } public Map getAgvBasDevpDtoByStationCode(String stationCode) { List> body = new ArrayList<>(); for(int i=3; i>=1; i--){ List agvBasDevpList = this.selectList(new EntityWrapper() .eq("station_code", stationCode) .like("dev_no","0"+ i +"@")); Map map = new HashMap<>(); List agvBasDevpDtoList = agvBasDevpList.stream().map(agvBasDevp -> { AgvBasDevpDto agvBasDevpDto = new AgvBasDevpDto(); BeanUtils.copyProperties(agvBasDevp, agvBasDevpDto); //如果工作位状态为0.空库位,则直接返回 if("O".equals(agvBasDevpDto.getLocSts())){ return agvBasDevpDto; } AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper() .eq("loc_no", agvBasDevpDto.getDevNo()) .or().eq("source_loc_no",agvBasDevpDto.getDevNo())); agvBasDevpDto.setAgvWrkMast(agvWrkMast); if("F".equals(agvBasDevpDto.getLocSts()) || "R".equals(agvBasDevpDto.getLocSts())){ AgvWaitPakin agvWaitPakin = agvWaitPakinService.selectOne(new EntityWrapper() .eq("supp_code", agvBasDevpDto.getBarcode())); agvBasDevpDto.setAgvWaitPakin(agvWaitPakin); if(Cools.isEmpty(agvWaitPakin)){ AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper(). eq("wrk_no",agvWrkMast.getWrkNo())); agvBasDevpDto.setAgvWrkDetl(agvWrkDetl); } } if(!Cools.isEmpty(agvWrkMast)){ setFlagForAgvBasDevpDto(agvWrkMast,agvBasDevpDto); } return agvBasDevpDto; }).collect(Collectors.toList()); map.put("loc",agvBasDevpDtoList); body.add(map); } Map result = new HashMap<>(); result.put("body", body); return result; } private void setFlagForAgvBasDevpDto(AgvWrkMast agvWrkMast, AgvBasDevpDto agvBasDevpDto){ //当工作档类型为101.出库 并且 工作位状态为F.在库时,显示容器离场按钮 if(agvWrkMast.getIoType() == 101 && "F".equals(agvBasDevpDto.getLocSts())){ agvBasDevpDto.setContainerMoveOutFlag(true); } //当工作档类型为101.出库 并且 工作位状态为F.在库时,显示容器离场按钮 if(agvWrkMast.getIoType() == 110 && "D".equals(agvBasDevpDto.getLocSts())){ agvBasDevpDto.setContainerMoveOutFlag(true); } //当工作档类型为103.拣料出库 并且 工作位状态为F.在库时,显示拣料/盘点入库按钮 if(agvWrkMast.getIoType() == 103 && "F".equals(agvBasDevpDto.getLocSts())){ agvBasDevpDto.setPickInFlag(true); } //当工作档类型为107.盘点出库 并且 工作位状态为F.在库时,显示拣料/盘点入库按钮 if(agvWrkMast.getIoType() == 107 && "F".equals(agvBasDevpDto.getLocSts())){ agvBasDevpDto.setPickInFlag(true); } } public List getAvailableEmptyInSite() { return this.baseMapper.getAvailableEmptyInSite(); } public AgvBasDevp getByDevNo(String devNo) { return this.selectOne(new EntityWrapper().eq("dev_no",devNo)); } }