| src/main/java/com/zy/common/model/LocGroupOrder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/properties/SlaveProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/service/CommonService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/web/WcsController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/common/model/LocGroupOrder.java
New file @@ -0,0 +1,14 @@ package com.zy.common.model; import lombok.Data; import java.util.List; @Data public class LocGroupOrder { private List<Integer> rowList; private Integer minBay; private Integer maxBay; } src/main/java/com/zy/common/properties/SlaveProperties.java
@@ -1,5 +1,6 @@ package com.zy.common.properties; import com.zy.common.model.LocGroupOrder; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @@ -15,14 +16,16 @@ @ConfigurationProperties(prefix = "wcs-slave") public class SlaveProperties { private boolean doubleDeep; //private boolean doubleDeep; // 双深库位排号 private List<Integer> doubleLocs = new ArrayList<>(); //private List<Integer> doubleLocs = new ArrayList<>(); // 左深库位排号 private List<Integer> doubleLocsLeft = new ArrayList<>(); //private List<Integer> doubleLocsLeft = new ArrayList<>(); // 右深库位排号 private List<Integer> doubleLocsRight = new ArrayList<>(); //private List<Integer> doubleLocsRight = new ArrayList<>(); private int groupCount; //private int groupCount; private List<LocGroupOrder> locGroupAscOrder; } src/main/java/com/zy/common/service/CommonService.java
@@ -17,7 +17,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.sql.rowset.WebRowSet; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @@ -136,6 +138,130 @@ return null; } @Transactional public StartupDto getLocNoNew(Integer staDescId, Integer sourceStaNo,FindLocNoAttributeVo findLocNoAttributeVo,LocTypeDto locTypeDto,String barcode){ StartupDto startupDto = null; StringBuilder builder = new StringBuilder(); try { startupDto = searchLocNoByCrnNo(staDescId,sourceStaNo,findLocNoAttributeVo,locTypeDto); }catch (Exception e){ builder.append(e.getMessage()).append(","); } if (startupDto == null){ builder.append("找不到空库位"); throw new CoolException(builder.toString()); } return startupDto; } @Transactional public StartupDto searchLocNoByCrnNo(Integer staDescId,Integer sourceStaNo,FindLocNoAttributeVo findLocNoAttributeVo,LocTypeDto locTypeDto){ LocMast locMast = null; if (staDescId == 10){ //搜索空托盘 locMast = searchEmptyPallet(locTypeDto); }else { //满托盘 locMast = searchMaxPallet(findLocNoAttributeVo,locTypeDto); } if (locMast == null){ throw new CoolException("找不到符合尺寸的空库位"); } StartupDto startupDto = new StartupDto(); String locNo = locMast.getLocNo(); //生成工作号 int workNo = getWorkNo(0); //返回dto startupDto.setWorkNo(workNo); startupDto.setCrnNo(locMast.getCrnNo()); startupDto.setSourceStaNo(sourceStaNo); startupDto.setLocNo(locNo); return startupDto; } //搜索满托盘库位 public LocMast searchMaxPallet(FindLocNoAttributeVo findLocNoAttributeVo,LocTypeDto locTypeDto){ LocMast targetLocMast = null; List<String> locNos = locDetlService.getSameDetlList(findLocNoAttributeVo.getMatnr()); for (String locNo : locNos) { //获取通道组 List<Integer> locRowGroupDesc = Utils.getLocGroupDesc(slaveProperties,locNo); for (Integer row : locRowGroupDesc) { String deepLocNo = Utils.getLocNo(row,Utils.getBay(locNo),Utils.getLev(locNo)); LocMast deepLoc = locMastService.selectById(deepLocNo); if (deepLoc == null){ continue; } if (deepLoc.getLocSts().equals("F")){ continue; }else if (deepLoc.getLocSts().equals("O")){ targetLocMast = deepLoc; break; }else { break; } } } if (targetLocMast == null){ //相近物料匹配失败,搜索可用空库位组 //获取设备楼层 List<Integer> levList = basCrnpService.getLevList(); Collections.shuffle(levList); List<Integer> locLevList = locMastService.getLevList(); levList.addAll(locLevList); for (Integer lev : levList) { List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("lev1", lev).orderBy("bay1", true)); for (LocMast locMast : locMasts) { String locNo = locMast.getLocNo(); //获取通道组 List<Integer> locRowGroupDesc = Utils.getLocGroupDesc(slaveProperties,locNo); boolean flag = true; for (Integer row : locRowGroupDesc) { String deepLocNo = Utils.getLocNo(row,Utils.getBay(locNo),Utils.getLev(locNo)); LocMast deepLoc = locMastService.selectById(deepLocNo); if (deepLoc == null){ continue; } if (!deepLoc.getLocSts().equals("O")){ flag = false; break; } } if (flag){ for (Integer row : locRowGroupDesc) { String deepLocNo = Utils.getLocNo(row,Utils.getBay(locNo),Utils.getLev(locNo)); LocMast deepLoc = locMastService.selectById(deepLocNo); if (deepLoc == null){ continue; } targetLocMast = deepLoc; break; } break; } } if (targetLocMast != null){ break; } } } return targetLocMast; } /** * 检索库位号 * src/main/java/com/zy/common/web/WcsController.java
@@ -239,9 +239,14 @@ // 源站点状态检测 BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); // 检索库位 List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList()); StartupDto dto = commonService.getLocNo(1, devpNo, matnrs.get(0), batchs.get(0), null, locTypeDto); // List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); // List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList()); WaitPakin waitPakin1 = waitPakins.get(0); FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(); findLocNoAttributeVo.setMatnr(waitPakin1.getMatnr()); // StartupDto dto = commonService.getLocNo(1, devpNo, matnrs.get(0), batchs.get(0), null, locTypeDto); StartupDto dto = commonService.getLocNoNew(1, devpNo, findLocNoAttributeVo, locTypeDto,barcode); if (dto == null) { throw new CoolException("没有检索到空库位"); } @@ -270,6 +275,8 @@ // 操作人员数据 wrkMast.setAppeTime(now); wrkMast.setModiTime(now); wrkMast.setModiUser(waitPakin1.getModiUser()); wrkMast.setAppeUser(waitPakin1.getAppeUser()); boolean res = wrkMastService.insert(wrkMast); if (!res) { throw new CoolException("保存工作档失败"); src/main/resources/application.yml
@@ -48,11 +48,16 @@ # 下位机配置 wcs-slave: # 双深 doubleDeep: true #doubleDeep: true # 双深库位排号 doubleLocs: 1,2,3,4,5 #doubleLocs: 1,2,3,4,5 # 一个堆垛机负责的货架排数 groupCount: 4 #groupCount: 4 # 由浅入深 locGroupAscOrder: [ {rowList: [1],minBay: 1,maxBay: 16}, {rowList: [2,3,4,5,6],minBay: 1,maxBay: 16}, ] #是否开启wms下发任务给wcs workIssued-fig : true #地址