src/main/java/com/zy/asrs/mapper/LocMastMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/LocMastService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/service/CommonService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/LocMastMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -25,4 +25,24 @@ List<LocMast> selectLocShuttleMoveUnilateralY(@Param("bay")Integer bay,@Param("lev")Integer lev); List<LocMast> selectLocShuttleMoveUnilateralN(@Param("bay")Integer bay,@Param("lev")Integer lev); /* * 获取目标库位所在巷道最浅非空库位 深>浅 * */ LocMast selectLocByLocStsPakInF1(@Param("locNos") List<String> locNos); /* * 获取目标库位所在巷道最浅非空库位 深<浅 * */ LocMast selectLocByLocStsPakInF2(@Param("locNos") List<String> locNos); /* * 获取目标库位所在巷道最深空库位 深>浅 * */ LocMast selectLocByLocStsPakInO1(@Param("locNos") List<String> locNos); /* * 获取目标库位所在巷道最深空库位 深<浅 * */ LocMast selectLocByLocStsPakInO2(@Param("locNos") List<String> locNos); } src/main/java/com/zy/asrs/service/LocMastService.java
@@ -40,4 +40,14 @@ List<LocMast> queryShallowLocFMast(Integer crnNo); List<LocMast> selectLocMastShuttleMoveUnilateral(Integer bay,Integer lev,Integer crnNo); /* * 获取目标库位所在巷道最浅非空库位 * */ LocMast selectLocByLocStsPakInF(Integer curRow,Integer nearRow,List<String> locNos); /* * 获取目标库位所在巷道最深空库位 * */ LocMast selectLocByLocStsPakInO(Integer curRow,Integer nearRow,List<String> locNos); } src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -43,6 +43,28 @@ return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo()) > 1; } /* *获取目标库位所在巷道最浅非空库位 * */ @Override public LocMast selectLocByLocStsPakInF(Integer curRow,Integer nearRow,List<String> locNos) { if (curRow<nearRow){ return this.baseMapper.selectLocByLocStsPakInF1(locNos); } return this.baseMapper.selectLocByLocStsPakInF2(locNos); } /* * 获取目标库位所在巷道最深空库位 * */ @Override public LocMast selectLocByLocStsPakInO(Integer curRow,Integer nearRow,List<String> locNos) { if (curRow<nearRow){ return this.baseMapper.selectLocByLocStsPakInO1(locNos); } return this.baseMapper.selectLocByLocStsPakInO2(locNos); } @Override public Boolean checkWhole(List<LocDetl> locDetls) { return null; src/main/java/com/zy/asrs/utils/Utils.java
@@ -218,15 +218,22 @@ // System.out.println(deepRow); // } public static boolean BooleanWhsTypeStaIoType(Integer whsType) { //查询相似物料开关 if (whsType == 1 || whsType==3 || whsType==4) { return true; } return false; } public static boolean BooleanWhsTypeSta(Integer whsType) { if (whsType == 1) { if (whsType == 1 || whsType == 2 || whsType == 5 || whsType==3 || whsType==4) { return true; } return false; } public static boolean BooleanWhsTypeSta(Integer whsType, Integer staDescId) { if (whsType == 1 && staDescId != 11 && staDescId != 111) { if ((whsType == 1 || whsType == 5 || whsType == 2 || whsType==3 || whsType==4) && staDescId != 11 && staDescId != 111) { return true; } return false; @@ -360,4 +367,48 @@ return null; } public static Integer GetWhsType(Integer sourceStaNo) { switch (sourceStaNo){ case 104: case 173: case 174: case 175: case 130: case 125: return 5; case 204: case 273: case 274: case 275: case 230: case 225: return 2; default: return 0; } } /* * 最深库位排号 : curRow * 最浅库位排号 : nearRow * 最浅库位号,用于锁定列、层 : nearRow * 入库 true:pakin * 出库 false:pakin * */ // 外侧方向的货位 优先入库方向 ===>> 反之 public static List<String> getGroupOutLocCrn(Integer curRow,Integer nearRow,String locNo,boolean pakin){ List<String> result = new ArrayList<>(); if (pakin){ for (int row = curRow;row<=nearRow;row++){ result.add(zerofill(String.valueOf(row), 2) + locNo.substring(2)); } }else { for (int row = curRow;row>=curRow;row--){ result.add(zerofill(String.valueOf(row), 2) + locNo.substring(2)); } } return result; } } src/main/java/com/zy/common/service/CommonService.java
@@ -99,6 +99,7 @@ */ @Transactional public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch, String grade, LocTypeDto locTypeDto) { whsType = Utils.GetWhsType(sourceStaNo); return getLocNoRun(whsType,staDescId,sourceStaNo,matnr,batch,grade,0,locTypeDto,0); } @@ -152,13 +153,19 @@ } //此程序用于优化堆垛机异常时的运行时间 for (int i = times; i < crnNumber; i++) { for (int i = times; i < crnNumber*2; 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]; List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O")); int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type",100)); if (locMasts.size()-crnCountO<=2){ times++; continue; } break; } else { times++; @@ -172,10 +179,11 @@ boolean signRule2 = false; if (Utils.BooleanWhsTypeStaIoType(whsType)){ // 靠近摆放规则 --- 同天同规格物料 //分离版 // if (!Cools.isEmpty(matnr) && (staDescId == 1)){ // signRule1 = true; // } if (!Cools.isEmpty(matnr) && staDescId == 1){ signRule1 = true; } // 靠近摆放规则 --- 同天同规格物料 //互通版 if (!Cools.isEmpty(matnr) && staDescId == 1) { signRule2 = true; @@ -184,25 +192,28 @@ if (!Cools.isEmpty(matnr) && (staDescId == 11 || staDescId == 111)) { signRule1 = true; } } if (signRule1){ if (nearRow!=curRow){ 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("F")){ LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast2.getLocNo())); if (!Cools.isEmpty(locDetl) && matnr.equals(locDetl.getMatnr())) { locMast = locMast1; //获取巷道 List<String> groupOutsideLocCrn = Utils.getGroupOutLocCrn(curRow,nearRow,locMast1.getLocNo(), curRow>nearRow); //获取目标库位所在巷道最浅非空库位 LocMast locMastF = locMastService.selectLocByLocStsPakInF(curRow,nearRow,groupOutsideLocCrn); if (!Cools.isEmpty(locMastF) && locMastF.getLocSts().equals("F")){ LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMastF.getLocNo())); if (!Cools.isEmpty(locDetl) && matnr.equals(locDetl.getMatnr()) && batch.equals(Cools.isEmpty(locDetl.getBatch()) ? "" : locDetl.getBatch()) && grade.equals(Cools.isEmpty(locDetl.getBrand()) ? "" : locDetl.getBrand())) { //获取目标库位所在巷道最浅非空库位 locMast = locMastService.selectLocByLocStsPakInO(curRow,nearRow,groupOutsideLocCrn); break; } } } } }else if (signRule2){ List<String> locNos = locDetlService.getSameDetlToday(matnr,batch, sRow, eRow); List<String> locNos = locDetlService.getSameDetlToday(matnr, sRow, eRow); for (String locNo : locNos) { if (Utils.isShallowLoc(slaveProperties, locNo)) { continue; @@ -223,7 +234,7 @@ } // // 靠近摆放规则 --- 空托 //分离版 // if (staDescId == 10) { // if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(whsType)) { // List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O")); // for (LocMast locMast1:locMasts){ // if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { @@ -239,7 +250,7 @@ // } // 靠近摆放规则 --- 空托 //互通版 if (staDescId == 10) { if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(whsType)) { 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) { @@ -277,7 +288,7 @@ log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo); // throw new CoolException("入库路径不存在"); crnNo = 0; } }else { staNo = basDevpService.selectById(staDesc.getCrnStn()); if (!staNo.getAutoing().equals("Y")) { // throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用"); @@ -285,9 +296,10 @@ } startupDto.setStaNo(staNo.getDevNo()); } } // 更新库位排号 if (Utils.BooleanWhsTypeSta(whsType, staDescId)) { if (Utils.BooleanWhsTypeSta(whsType, staDescId) && Cools.isEmpty(locMast)) { rowLastno.setCurrentRow(curRow); rowLastnoService.updateById(rowLastno); } @@ -296,16 +308,23 @@ // 1.按规则查找库位 if (Cools.isEmpty(locMast) && crnNo != 0) { List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O")); List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O").orderBy("lev1",true).orderBy("bay1",true)); for (LocMast locMast1 : locMasts) { if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { continue; } if (Utils.BooleanWhsTypeStaIoType(whsType)){ 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; } }else { if (!Cools.isEmpty(locMast1)) { locMast = locMast1; break; } } } } @@ -317,9 +336,9 @@ // 递归查询 if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) { // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归 if (times < rowCount) { if (times < rowCount*2) { times = times + 1; return getLocNoRun(1, staDescId, sourceStaNo, matnr, batch, grade,moveCrnNo, locTypeDto, times); return getLocNoRun(whsType, staDescId, sourceStaNo, matnr, batch, grade,moveCrnNo, locTypeDto, times); } // // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位 // if (locTypeDto.getLocType1() < 2) { src/main/resources/mapper/LocMastMapper.xml
@@ -84,4 +84,36 @@ select * from [dbo].[asr_loc_mast] where row1>17 and row1 < 31 and bay1 = #{bay} and lev1 = #{lev} and loc_sts='F' order by row1 desc </select> <select id="selectLocByLocStsPakInF1" resultMap="BaseResultMap"> SELECT top 1 * FROM [dbo].[asr_loc_mast] WHERE loc_no in <foreach collection="locNos" item="locNo" index="index" open="(" close=")" separator=","> #{locNo} </foreach> AND loc_sts not in ('O') order by row1 </select> <select id="selectLocByLocStsPakInF2" resultMap="BaseResultMap"> SELECT top 1 * FROM [dbo].[asr_loc_mast] WHERE loc_no in <foreach collection="locNos" item="locNo" index="index" open="(" close=")" separator=","> #{locNo} </foreach> AND loc_sts not in ('O') order by row1 desc </select> <select id="selectLocByLocStsPakInO1" resultMap="BaseResultMap"> SELECT top 1 * FROM [dbo].[asr_loc_mast] WHERE loc_no in <foreach collection="locNos" item="locNo" index="index" open="(" close=")" separator=","> #{locNo} </foreach> AND loc_sts in ('O') order by row1 desc </select> <select id="selectLocByLocStsPakInO2" resultMap="BaseResultMap"> SELECT top 1 * FROM [dbo].[asr_loc_mast] WHERE loc_no in <foreach collection="locNos" item="locNo" index="index" open="(" close=")" separator=","> #{locNo} </foreach> AND loc_sts in ('O') order by row1 </select> </mapper>