src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/VersionUtils.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/asrs/service/impl/WorkServiceImpl.java
@@ -94,7 +94,7 @@ // 检索库位 LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); // List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList()); StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), param.getList().get(0).getMatnr(),null,null, locTypeDto, 1); StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), param.getList().get(0).getMatnr(),null,null, locTypeDto); // 生成工作号 int workNo = dto.getWorkNo(); // 生成工作档 @@ -468,7 +468,7 @@ BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); // 检索库位 LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null,null,null, locTypeDto, 1); StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null,null,null, locTypeDto); int workNo = dto.getWorkNo(); Date now = new Date(); // 生成工作档 src/main/java/com/zy/asrs/utils/Utils.java
@@ -3,13 +3,12 @@ import com.core.common.Arith; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.LocMast; import com.zy.common.model.LocDetlDto; import com.zy.common.properties.SlaveProperties; import com.zy.common.service.CommonService; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; /** @@ -19,22 +18,22 @@ private static final DecimalFormat fmt = new DecimalFormat("##0.00"); public static float scale(Float f){ public static float scale(Float f) { if (f == null || f == 0f || Float.isNaN(f)) { return 0f; } return (float) Arith.multiplys(2, f, 1); } public static String zerofill(String msg, Integer count){ if (msg.length() == count){ public static String zerofill(String msg, Integer count) { if (msg.length() == count) { return msg; } else if (msg.length() > count){ } else if (msg.length() > count) { return msg.substring(0, 16); } else { StringBuilder msgBuilder = new StringBuilder(msg); for (int i = 0; i<count-msg.length(); i++){ msgBuilder.insert(0,"0"); for (int i = 0; i < count - msg.length(); i++) { msgBuilder.insert(0, "0"); } return msgBuilder.toString(); } @@ -43,7 +42,7 @@ /** * 判断是否为深库位 */ public static boolean isDeepLoc(SlaveProperties slaveProperties, String locNo){ public static boolean isDeepLoc(SlaveProperties slaveProperties, String locNo) { if (slaveProperties.isDoubleDeep()) { int row = getRow(locNo); return slaveProperties.getDoubleLocs().contains(row); @@ -55,7 +54,7 @@ /** * 判断是否为深库位 */ public static boolean isDeepLoc(SlaveProperties slaveProperties, Integer row){ public static boolean isDeepLoc(SlaveProperties slaveProperties, Integer row) { if (slaveProperties.isDoubleDeep()) { return slaveProperties.getDoubleLocs().contains(row); } else { @@ -66,7 +65,7 @@ /** * 判断是否为左深库位 */ public static boolean isDeepLocLeft(SlaveProperties slaveProperties, Integer row){ public static boolean isDeepLocLeft(SlaveProperties slaveProperties, Integer row) { if (slaveProperties.isDoubleDeep()) { return slaveProperties.getDoubleLocsLeft().contains(row); } else { @@ -78,7 +77,7 @@ /** * 判断是否为右深库位 */ public static boolean isDeepLocRight(SlaveProperties slaveProperties, Integer row){ public static boolean isDeepLocRight(SlaveProperties slaveProperties, Integer row) { if (slaveProperties.isDoubleDeep()) { return slaveProperties.getDoubleLocsRight().contains(row); } else { @@ -89,7 +88,7 @@ /** * 判断是否为浅库位 */ public static boolean isShallowLoc(SlaveProperties slaveProperties, String locNo){ public static boolean isShallowLoc(SlaveProperties slaveProperties, String locNo) { if (slaveProperties.isDoubleDeep()) { int row = getRow(locNo); return !slaveProperties.getDoubleLocs().contains(row); @@ -101,7 +100,7 @@ /** * 判断是否为浅库位 */ public static boolean isShallowLoc(SlaveProperties slaveProperties, Integer row){ public static boolean isShallowLoc(SlaveProperties slaveProperties, Integer row) { if (slaveProperties.isDoubleDeep()) { return !slaveProperties.getDoubleLocs().contains(row); } else { @@ -217,104 +216,148 @@ // slaveProperties.setGroupCount(4); // Integer deepRow = getDeepRow(slaveProperties, 6); // System.out.println(deepRow); // // } // 外侧方向的货位 优先入库方向/优先出库方向 ===>> 反之 public static List<String> getGroupOutsideLocCrn(String locNo,boolean pakin){ int row = getRow(locNo); List<String> result = new ArrayList<>(); result.add(locNo); // result.add(zerofill(String.valueOf(32), 2) + locNo.substring(2)); return result; } public static boolean BooleanWhsTypeSta(Integer whsType){ if (whsType==1){ public static boolean BooleanWhsTypeSta(Integer whsType) { if (whsType == 1) { return true; } return false; } public static int RowCount(Integer whsType,Integer curRow){ return LocNecessaryParameters(whsType, curRow)[0]; public static boolean BooleanWhsTypeSta(Integer whsType, Integer staDescId) { if (whsType == 1 && staDescId != 11 && staDescId != 111) { return true; } return false; } public static int getCurRow(Integer whsType,Integer curRow){ return LocNecessaryParameters(whsType, curRow)[1]; public static int RowCount(Integer whsType, Integer curRow, Integer crnNumber) { return LocNecessaryParameters(whsType, curRow, crnNumber)[0]; } public static int getCrnNo(Integer whsType,Integer curRow){ return LocNecessaryParameters(whsType, curRow)[2]; public static int getCurRow(Integer whsType, Integer curRow, Integer crnNumber) { return LocNecessaryParameters(whsType, curRow, crnNumber)[1]; } public static int getNearRow(Integer whsType,Integer curRow){ return LocNecessaryParameters(whsType, curRow)[3]; public static int getCrnNo(Integer whsType, Integer curRow, Integer crnNumber) { return LocNecessaryParameters(whsType, curRow, crnNumber)[2]; } public static int getNearRow(Integer whsType, Integer curRow, Integer crnNumber) { return LocNecessaryParameters(whsType, curRow, crnNumber)[3]; } //库位排号分配 public static int[] LocNecessaryParameters(Integer whsType,Integer curRow){ int[] necessaryParameters=new int[]{0,0,0,0}; if (BooleanWhsTypeSta(whsType)){ necessaryParameters[0] = 6; switch (curRow){ //满板正常入库 case 24: necessaryParameters[1] = 1; //curRow 最深库位排 necessaryParameters[2] = 1; //crnNo 堆垛机号 necessaryParameters[3] = 2; //nearRow 最浅库位排 break; case 21: necessaryParameters[1] = 4; //curRow 最深库位排 necessaryParameters[2] = 1; //crnNo 堆垛机号 necessaryParameters[3] = 3; //nearRow 最浅库位排 break; default: curRow=curRow+4; if (curRow<1 || curRow>24){ throw new CoolException("库位排号异常:排号:"+curRow); } if ((curRow-1)%4==0){ necessaryParameters[1] = curRow; //curRow 最深库位排 necessaryParameters[2] = (curRow+3)/4; //crnNo 堆垛机号 necessaryParameters[3] = curRow+1; //nearRow 最浅库位排 }else if (curRow%4==0){ necessaryParameters[1] = curRow; //curRow 最深库位排 necessaryParameters[2] = curRow/4; //crnNo 堆垛机号 necessaryParameters[3] = curRow-1; //nearRow 最浅库位排 }else { throw new CoolException("库位排号异常:排号:"+curRow); } } }else {//空板不入1号 necessaryParameters[0] = 5; switch (curRow){ case 24: necessaryParameters[1] = 5; //curRow 最深库位排 necessaryParameters[2] = 2; //crnNo 堆垛机号 necessaryParameters[3] = 6; //nearRow 最浅库位排 break; case 21: necessaryParameters[1] = 8; //curRow 最深库位排 necessaryParameters[2] = 2; //crnNo 堆垛机号 necessaryParameters[3] = 7; //nearRow 最浅库位排 break; default: curRow=curRow+4; if (curRow<5 || curRow>24){ throw new CoolException("库位排号异常:排号:"+curRow); } if ((curRow-1)%4==0){ necessaryParameters[1] = curRow; //curRow 最深库位排 necessaryParameters[2] = (curRow+3)/4; //crnNo 堆垛机号 necessaryParameters[3] = curRow+1; //nearRow 最浅库位排 }else if (curRow%4==0){ necessaryParameters[1] = curRow; //curRow 最深库位排 necessaryParameters[2] = curRow/4; //crnNo 堆垛机号 necessaryParameters[3] = curRow-1; //nearRow 最浅库位排 }else { throw new CoolException("库位排号异常:排号:"+curRow); } public static int[] LocNecessaryParameters(Integer whsType, Integer curRow, Integer crnNumber) { switch (whsType){ case 1://经典双伸库位 return LocNecessaryParametersDoubleExtension(whsType, curRow, crnNumber); default: return LocNecessaryParametersMove(whsType, curRow, crnNumber);//moveCrnNo } } //经典双伸库位 public static int[] LocNecessaryParametersDoubleExtension(Integer whsType, Integer curRow, Integer crnNumber) { int[] necessaryParameters = new int[]{0, 0, 0, 0}; if (BooleanWhsTypeSta(whsType)) { necessaryParameters[0] = crnNumber; // 轮询次数 //满板正常入库 if (curRow.equals(crnNumber * 4)) { necessaryParameters[1] = 1; //curRow 最深库位排 necessaryParameters[2] = 1; //crnNo 堆垛机号 necessaryParameters[3] = 2; //nearRow 最浅库位排 } else if (curRow.equals(crnNumber * 4 - 3)) { necessaryParameters[1] = 4; //curRow 最深库位排 necessaryParameters[2] = 1; //crnNo 堆垛机号 necessaryParameters[3] = 3; //nearRow 最浅库位排 } else { curRow = curRow + 4; if (curRow < 1 || curRow > (crnNumber * 4)) { throw new CoolException("库位排号异常:排号:" + curRow); } if ((curRow - 1) % 4 == 0) { necessaryParameters[1] = curRow; //curRow 最深库位排 necessaryParameters[2] = (curRow + 3) / 4; //crnNo 堆垛机号 necessaryParameters[3] = curRow + 1; //nearRow 最浅库位排 } else if (curRow % 4 == 0) { necessaryParameters[1] = curRow; //curRow 最深库位排 necessaryParameters[2] = curRow / 4; //crnNo 堆垛机号 necessaryParameters[3] = curRow - 1; //nearRow 最浅库位排 } else { throw new CoolException("库位排号异常:排号:" + curRow); } } } return necessaryParameters; } //经典双伸库位移库 public static int[] LocNecessaryParametersMove(Integer whsType, Integer curRow, Integer moveCrnNo) { int[] necessaryParameters = new int[]{0, 0, 0, 0}; necessaryParameters[0] = 2; // 轮询次数 if (curRow.equals(moveCrnNo*4-2)){ necessaryParameters[1] = curRow+2; //curRow 最深库位排 necessaryParameters[2] = moveCrnNo; //crnNo 堆垛机号 necessaryParameters[3] = curRow+1; //nearRow 最浅库位排 }else { necessaryParameters[1] = curRow-2; //curRow 最深库位排 necessaryParameters[2] = moveCrnNo; //crnNo 堆垛机号 necessaryParameters[3] = curRow-1; //nearRow 最浅库位排 } return necessaryParameters; } public static void main(String[] args) { List<LocMast> locS = new ArrayList<LocMast>(); String locNo = "0000102"; for (int i = 1; i < 16; i++) { String s = zerofill(String.valueOf(i), 2) + locNo.substring(2); LocMast locMast = new LocMast(); locMast.setLocNo(s); locS.add(locMast); } List<String> innermostSideLoc = getInnermostSideLoc(locS); System.out.println(innermostSideLoc); } //转换为各自对应的深库位 public static List<String> getInnermostSideLoc(List<LocMast> locS) { ArrayList<String> listLocRBL = new ArrayList<>(); for (LocMast locMast : locS) { String innermostSideLocRBL = Utils.getInnermostSideLocRBL(locMast.getLocNo()); if (Cools.isEmpty(innermostSideLocRBL)) { continue; } if (!listLocRBL.contains(innermostSideLocRBL)) { listLocRBL.add(innermostSideLocRBL); } } return listLocRBL; } public static String getInnermostSideLocRBL(String locNo) { int row = Utils.getRow(locNo); if (row % 4 == 0 || (row + 3) % 4 == 0) { return zerofill(String.valueOf(row), 2) + locNo.substring(2); } else if ((row + 2) % 4 == 0) { return zerofill(String.valueOf(row - 1), 2) + locNo.substring(2); } else if ((row + 1) % 4 == 0) { return zerofill(String.valueOf(row + 1), 2) + locNo.substring(2); } return null; } public static String getInnermostSideLocLBR(String locNo) { int row = Utils.getRow(locNo); if (row % 4 == 0) { return zerofill(String.valueOf(row - 1), 2) + locNo.substring(2); } else if ((row + 3) % 4 == 0) { return zerofill(String.valueOf(row + 1), 2) + locNo.substring(2); } return null; } } src/main/java/com/zy/asrs/utils/VersionUtils.java
@@ -137,4 +137,13 @@ return true; } /** * 类型检测 * 完全检测 **/ public static boolean locMoveCheckLocTypeComplete(LocMast loc, LocTypeDto dto) { // 如果源库位是高库位,目标库位是低库位 return dto.getLocType1().equals(loc.getLocType1()); } } src/main/java/com/zy/common/service/CommonService.java
@@ -110,22 +110,37 @@ /** * 检索库位号 * @param whsType 类型 1:双深式货架 * @param staDescId 路径ID * * @param whsType 类型 1:双深式货架 * @param staDescId 路径ID * @param sourceStaNo 源站 * @param matnr 物料号集合 * @param matnr 物料号集合 * @return locNo 检索到的库位号 */ @Transactional public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch,String grade,LocTypeDto locTypeDto, int times) { if (Cools.isEmpty(matnr)){ //物料号 matnr=""; public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch, String grade, LocTypeDto locTypeDto) { return getLocNoRun(whsType,staDescId,sourceStaNo,matnr,batch,grade,0,locTypeDto,0); } /** * 检索库位号 * * @param whsType 类型 1:双深式货架 * @param staDescId 路径ID * @param sourceStaNo 源站 * @param matnr 物料号集合 * @return locNo 检索到的库位号 */ @Transactional public StartupDto getLocNoRun(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch, String grade, Integer moveCrnNo, LocTypeDto locTypeDto, int times) { if (Cools.isEmpty(matnr)) { //物料号 matnr = ""; } if (Cools.isEmpty(batch)){ //箱号 batch=""; if (Cools.isEmpty(batch)) { //箱号 batch = ""; } if (Cools.isEmpty(grade)){ //备用 grade=""; if (Cools.isEmpty(grade)) { //备用 grade = ""; } // 初始化参数 @@ -137,42 +152,67 @@ StartupDto startupDto = new StartupDto(); RowLastno rowLastno = rowLastnoService.selectById(whsType); int sRow = rowLastno.getsRow(); int eRow = rowLastno.geteRow(); int crnNumber = rowLastno.getCrnQty(); if (Cools.isEmpty(rowLastno)) { throw new CoolException("数据异常,请联系管理员"); } // ===============>>>> 开始执行 curRow = rowLastno.getCurrentRow(); int[] locNecessaryParameters = Utils.LocNecessaryParameters(whsType, curRow); rowCount=locNecessaryParameters[0]; curRow=locNecessaryParameters[1]; crnNo=locNecessaryParameters[2]; nearRow=locNecessaryParameters[3]; if (!basCrnpService.checkSiteError(crnNo,true)){ //此程序用于优化堆垛机异常时的运行时间 times++; for (int i=times;i<Utils.RowCount(whsType,curRow);i++){ locNecessaryParameters = Utils.LocNecessaryParameters(whsType, curRow); rowCount=locNecessaryParameters[0]; curRow=locNecessaryParameters[1]; crnNo=locNecessaryParameters[2]; nearRow=locNecessaryParameters[3]; if (basCrnpService.checkSiteError(crnNo,true)){ break; }else { times++; } } if (times==Utils.RowCount(whsType,curRow)){ throw new CoolException("无可用堆垛机"); if (!Cools.isEmpty(moveCrnNo) && moveCrnNo!=0){ crnNumber = moveCrnNo; if (times==0){ curRow = moveCrnNo*4-1; }else { curRow = moveCrnNo*4-2; } } // 靠近摆放规则 --- 同天同规格物料 if (Cools.isEmpty(locMast) && !Cools.isEmpty(matnr) && (staDescId == 1 || staDescId == 11 || staDescId == 111)) { //此程序用于优化堆垛机异常时的运行时间 for (int i = times; i < crnNumber; i++) { int[] locNecessaryParameters = Utils.LocNecessaryParameters(whsType, curRow, crnNumber); curRow = locNecessaryParameters[1]; crnNo = locNecessaryParameters[2]; if (basCrnpService.checkSiteError(crnNo, true)) { rowCount = locNecessaryParameters[0]; nearRow = locNecessaryParameters[3]; break; } else { times++; } } if (nearRow == 0) { throw new CoolException("无可用堆垛机"); } boolean signRule1 = false; boolean signRule2 = false; // 靠近摆放规则 --- 同天同规格物料 //分离版 // if (!Cools.isEmpty(matnr) && (staDescId == 1)){ // signRule1 = true; // } // 靠近摆放规则 --- 同天同规格物料 //互通版 if (!Cools.isEmpty(matnr) && staDescId == 1) { signRule2 = true; } if (!Cools.isEmpty(matnr) && (staDescId == 11 || staDescId == 111)) { signRule1 = true; } if (signRule1){ List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O")); for (LocMast locMast1:locMasts){ if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { continue; } String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo()); LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc)); LocMast locMast2 = locMastService.selectById(shallowLoc); if (!Cools.isEmpty(locMast2) && locMast2.getLocSts().equals("F")){ LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast2.getLocNo())); if (!Cools.isEmpty(locDetl) && matnr.equals(locDetl.getMatnr())) { @@ -181,17 +221,63 @@ } } } }else if (signRule2){ List<String> locNos = locDetlService.getSameDetlToday(matnr, sRow, eRow); for (String locNo : locNos) { if (Utils.isShallowLoc(slaveProperties, locNo)) { continue; } String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo); // 检测目标库位是否为空库位 LocMast shallowLoc = locMastService.selectById(shallowLocNo); if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) { if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) { if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) { locMast = shallowLoc; crnNo = locMast.getCrnNo(); break; } } } } } // 靠近摆放规则 --- 空托 if (Cools.isEmpty(locMast) && staDescId == 10) { List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O")); for (LocMast locMast1:locMasts){ String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo()); LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc)); if (!Cools.isEmpty(locMast2) && locMast2.getLocSts().equals("D")){ locMast = locMast1; break; // // 靠近摆放规则 --- 空托 //分离版 // if (staDescId == 10) { // List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O")); // for (LocMast locMast1:locMasts){ // if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { // continue; // } // String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo()); // LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc)); // if (!Cools.isEmpty(locMast2) && locMast2.getLocSts().equals("D")){ // locMast = locMast1; // break; // } // } // } // 靠近摆放规则 --- 空托 //互通版 if (staDescId == 10) { List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow)); if (locMasts.size() > 0) { for (LocMast loc : locMasts) { if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) { continue; } String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo()); // 检测目标库位是否为空库位 LocMast shallowLoc = locMastService.selectById(shallowLocNo); if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) { if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) { if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) { locMast = shallowLoc; crnNo = locMast.getCrnNo(); break; } } } } } } @@ -200,7 +286,7 @@ StaDesc staDesc = null; BasDevp staNo = null; if (Utils.BooleanWhsTypeSta(whsType)){ if (Utils.BooleanWhsTypeSta(whsType, staDescId)) { // 获取目标站 wrapper = new EntityWrapper<StaDesc>() .eq("type_no", staDescId) @@ -210,17 +296,18 @@ if (Cools.isEmpty(staDesc)) { log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo); // throw new CoolException("入库路径不存在"); crnNo=0; crnNo = 0; } staNo = basDevpService.selectById(staDesc.getCrnStn()); if (!staNo.getAutoing().equals("Y")) { // throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用"); crnNo=0; crnNo = 0; } startupDto.setStaNo(staNo.getDevNo()); } // 更新库位排号 if (Utils.BooleanWhsTypeSta(whsType)){ if (Utils.BooleanWhsTypeSta(whsType, staDescId)) { rowLastno.setCurrentRow(curRow); rowLastnoService.updateById(rowLastno); } @@ -228,30 +315,38 @@ // 开始查找库位 ==============================>> // 1.按规则查找库位 if (Cools.isEmpty(locMast) && crnNo!=0){ if (Cools.isEmpty(locMast) && crnNo != 0) { List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O")); for (LocMast locMast1:locMasts){ String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo()); LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc).eq("loc_sts","O")); if (!Cools.isEmpty(locMast2)){ for (LocMast locMast1 : locMasts) { if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { continue; } String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo()); LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc).eq("loc_sts", "O")); if (!Cools.isEmpty(locMast2)) { locMast = locMast2; break; } } } if (Cools.isEmpty(locMast) && !basCrnpService.checkSiteError(crnNo,true)){ if (!Cools.isEmpty(locMast) && !basCrnpService.checkSiteError(crnNo, true)) { locMast = null; } // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位 if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) { // 递归查询 if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) { // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归 if (times < rowCount) { times = times + 1; return getLocNo(1, staDescId, sourceStaNo, matnr,batch,grade, locTypeDto, times); return getLocNoRun(1, staDescId, sourceStaNo, matnr, batch, grade,moveCrnNo, locTypeDto, times); } // // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位 // if (locTypeDto.getLocType1() < 2) { // int i = locTypeDto.getLocType1() + 1; // locTypeDto.setLocType1((short)i); // return getLocNo(1, staDescId, sourceStaNo, matnr,batch,grade, locTypeDto, 0); // } log.error("系统没有空库位!!! 尺寸规格: {}, 轮询次数:{}", JSON.toJSONString(locTypeDto), times); throw new CoolException("没有空库位"); } @@ -263,25 +358,7 @@ startupDto.setWorkNo(workNo); startupDto.setCrnNo(crnNo); startupDto.setSourceStaNo(sourceStaNo); if (Utils.BooleanWhsTypeSta(whsType)){ startupDto.setStaNo(staNo.getDevNo()); } startupDto.setLocNo(locNo); return startupDto; } private static String zerofill(String msg, Integer count) { if (msg.length() == count) { return msg; } else if (msg.length() > count) { return msg.substring(0, 16); } else { StringBuilder msgBuilder = new StringBuilder(msg); for(int i = 0; i < count - msg.length(); ++i) { msgBuilder.insert(0, "0"); } return msgBuilder.toString(); } } } src/main/java/com/zy/common/web/WcsController.java
@@ -116,7 +116,7 @@ BasDevp sourceStaNo = basDevpService.checkSiteStatus(12, true); // 检索库位 StartupDto dto = commonService.getLocNo(rowLastnoService.selectNextWhsType(), 10, 12, null,null,null, locTypeDto,0); StartupDto dto = commonService.getLocNo(rowLastnoService.selectNextWhsType(), 10, 12, null,null,null, locTypeDto); Date now = new Date(); // 生成工作档 WrkMast wrkMast = new WrkMast(); @@ -168,7 +168,7 @@ // 检索库位 List<KeyValueVo> list = waitPakins.stream().map(item-> new KeyValueVo(item.getMatnr(), item.getBatch())).distinct().collect(Collectors.toList()); // List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); StartupDto dto = commonService.getLocNo(1, 1, devpNo, null,null,null, locTypeDto,1); StartupDto dto = commonService.getLocNo(1, 1, devpNo, null,null,null, locTypeDto); int workNo = dto.getWorkNo(); Date now = new Date(); // 生成工作档 @@ -243,7 +243,7 @@ // 源站点状态检测 BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); // 检索库位 StartupDto dto = commonService.getLocNo(1, 10, devpNo, null,null,null, locTypeDto,1); StartupDto dto = commonService.getLocNo(1, 10, devpNo, null,null,null, locTypeDto); int workNo = dto.getWorkNo(); // 生成工作档 WrkMast wrkMast = new WrkMast(); src/main/resources/application.yml
@@ -10,7 +10,7 @@ enabled: false datasource: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://localhost:1433;databasename=srjtasrs url: jdbc:sqlserver://192.168.4.15:1433;databasename=srjtasrs username: sa password: sa@123 mvc: