From 8c97f18015743c7f913b9c512bdc768d144c575e Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期三, 31 五月 2023 08:08:05 +0800 Subject: [PATCH] 高频入出库模式 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 267 +++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 216 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 1795d06..1875faa 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -789,7 +789,7 @@ continue; } // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� - if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { + if (true || crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡 if (crnProtocol.getLastIo().equals("I")) { if (basCrnp.getInEnable().equals("Y")) { @@ -820,6 +820,8 @@ } // 搴撲綅绉昏浆 this.locToLoc1(crn, crnProtocol); + // 搴撲綅绉昏浆(楂橀绉诲簱锛宨o_type=111) + this.locToLoc111(crn, crnProtocol); // 搴撲綅绉昏浆锛屽洖鍘熷簱浣� this.locToLoc17(crn, crnProtocol); // 婕旂ず浠诲姟 @@ -866,6 +868,67 @@ if(!Cools.isEmpty(one)){ News.error("鍏ュ簱 ===>> 瀛樺湪绉诲簱鏈畬鎴愪换鍔★紝涓嶈兘鍏ュ簱銆傜Щ搴撲换鍔″彿={},鍫嗗灈鏈哄彿={}", one.getWrkNo(), slave.getId()); // continue; + } + + //鍏ュ簱搴撲綅涓嶆槸鏈�澶栧眰搴撲綅锛屽垽鏂渶澶栧眰搴撲綅鏄惁涓虹┖搴撲綅锛屽涓嶆槸鍒欒繘琛岀Щ搴撲换鍔� + if(!locMastService.isOutMost(wrkMast.getLocNo())) { + WrkMast wrkMastMove = wrkMastMapper.selectLocMoveWorking(slave.getId()); + if (wrkMastMove != null && wrkMast.getWrkNo() == 111) { + continue; + } + + WrkMast two = wrkMastMapper.selectWorking1(slave.getId(), wrkMast.getWrkNo()); + if (two != null) {//2鍙锋満鏈夊湪鎵ц浠诲姟鏃讹紝绂佹鐢熸垚绉诲簱宸ヤ綔妗� + continue; + } else { + List<String> shallowLocs = Utils.getShallowLocs(wrkMast.getLocNo()); + if (!Cools.isEmpty(shallowLocs)) { + for (String shallowLocNo : shallowLocs) { + LocMast shallowLoc = locMastService.selectById(shallowLocNo); + WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); + if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { + if (null == waitWrkMast) { + // 鐢熸垚涓�绗旂Щ搴撲换鍔″伐浣滄。銆佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�� + // 娌℃湁浣滀笟涓殑鍏ュ簱浠诲姟鏃讹紝鎵嶈兘鐢熸垚绉诲簱浠诲姟 + WrkMast one2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>() + .eq("crn_no", slave.getId()) + .last(" and wrk_sts in (3,4,5,6,7,8)")); + if (one2 == null) { + moveLocForDeepLoc(slave, shallowLoc); + // 缃《浠诲姟 + wrkMast.setIoPri((double) 9999); + wrkMastMapper.updateById(wrkMast); + } else { + News.error("娴呭簱浣嶉樆濉炴椂锛屼笖娴呭簱浣嶅瓨鍦ㄤ綔涓氫腑鍑哄簱浠诲姟锛佸伐浣滃彿={}", one2.getWrkNo()); + } + flag = true; + break; + } else { + if (waitWrkMast.getWrkSts() != 18) { + News.error("搴撲綅鍑哄簱鍒板爢鍨涙満绔� ===>> 搴撲綅鐘舵�佸湪搴擄紝浣嗘槸娴呭簱浣嶅凡瀛樺湪宸ヤ綔妗d换鍔★紒鍑哄簱搴撲綅={},娴呭簱浣嶅彿={}", shallowLoc.getLocNo()); + flag = true; + break; + } + + } + } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) { + News.error("搴撲綅鍑哄簱鍒板爢鍨涙満绔� ===>> 娴呭簱浣嶅簱浣嶇姸鎬佷负鍏ュ簱棰勭害锛佸嚭搴撳簱浣�={},娴呭簱浣嶅彿={}", shallowLoc.getLocNo()); + flag = true; + break; + } + + //20230307 ADD锛屽啀鍔犱竴娆″垽鏂紝褰撴祬搴撲綅鐘舵�佷笉涓篛鏃讹紝涓嶆墽琛屽綋鍓嶅嚭搴撲换鍔� + if (shallowLoc != null && !shallowLoc.getLocSts().equals("O")) { + News.error("鍋氫簡娴呭簱浣嶉樆濉炲鐞嗗悗鍙嶅鍒ゆ柇锛屾祬搴撲綅鐘舵�佷笉涓篛 ===>> 娴呭簱浣嶅簱浣嶇姸鎬佷负鍏ュ簱棰勭害锛佸嚭搴撳簱浣�={},娴呭簱浣嶅彿={}", wrkMast.getSourceLocNo(), shallowLoc.getLocNo()); + flag = true; + break; + } + } + } + } + } + if(flag){ + return false; } // 鍒ゆ柇鏄惁宸插瓨鍦ㄥ皬杞︾粦瀹氫换鍔� @@ -1148,11 +1211,11 @@ } } - //鍑哄簱搴撲綅涓嶆槸鏈�澶栧眰搴撲綅锛屽垽鏂祬搴撲綅缁勬槸鍚﹂兘涓虹┖锛屾垨瀛樺湪搴撲綅绉昏浆浠诲姟 + //鍑哄簱搴撲綅涓嶆槸鏈�澶栧眰搴撲綅锛屽垽鏂渶澶栧眰搴撲綅鏄惁涓虹┖搴撲綅锛屽涓嶆槸鍒欒繘琛岀Щ搴撲换鍔� boolean flag = false; if(!locMastService.isOutMost(wrkMast.getSourceLocNo())) { WrkMast wrkMastMove = wrkMastMapper.selectLocMoveWorking(slave.getId()); - if (wrkMastMove != null && wrkMast.getWrkNo() == 11) { + if (wrkMastMove != null && wrkMast.getWrkNo() == 111) { continue; } @@ -1160,29 +1223,12 @@ if (two != null) {//2鍙锋満鏈夊湪鎵ц浠诲姟鏃讹紝绂佹鐢熸垚绉诲簱宸ヤ綔妗� continue; } else { - String[] shallowlocs = Utils.getShallowLocs(wrkMast.getSourceLocNo()); - if (!Cools.isEmpty(shallowlocs)) { - for (String shallowLocNo : shallowlocs) { + List<String> shallowLocs = Utils.getShallowLocs(wrkMast.getSourceLocNo()); + if (!Cools.isEmpty(shallowLocs)) { + for (String shallowLocNo : shallowLocs) { LocMast shallowLoc = locMastService.selectById(shallowLocNo); WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); - if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { - if (null == waitWrkMast) { - News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo); - } else { - //iotype=11锛寃rksts=17锛岃鏄庤揣鐗╁凡缁忕Щ搴撳埌鏆傚瓨搴撲綅锛岀瓑寰呭洖鍘熷簱浣�,姝ゆ椂鍏佽缁х画鍑哄簱 - if (waitWrkMast.getIoType() != 11 || waitWrkMast.getWrkSts() != 17) { - waitWrkMast.setIoPri((double) 9999); - waitWrkMast.setModiTime(new Date()); - if (wrkMastMapper.updateById(waitWrkMast) == 0) { - News.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo()); - } - if (waitWrkMast.getWrkSts() != 17) { - flag = true; - } - break; - } - } - } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { + if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { if (null == waitWrkMast) { // 鐢熸垚涓�绗旂Щ搴撲换鍔″伐浣滄。銆佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�� // 娌℃湁浣滀笟涓殑鍑哄簱浠诲姟鏃讹紝鎵嶈兘鐢熸垚绉诲簱浠诲姟 @@ -1612,6 +1658,102 @@ if (wrkMast.getWrkSts() == 12L) { this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol); } + } + } + } + + /** + * 搴撲綅绉昏浆(楂橀绉诲簱锛宨o_type=111) + */ + public synchronized void locToLoc111(CrnSlave slave, CrnProtocol crnProtocol){ + // 鑾峰彇宸ヤ綔妗d俊鎭� + WrkMast wrkMast = wrkMastMapper.selectLocMove111(slave.getId()); + if (null == wrkMast) { + return; + } + // 杩囨护 + if (null != wrkMastMapper.selectPakin(slave.getId(), null)) { + News.error("{}鍑哄簱浠诲姟鏃犳硶浣滀笟锛屽洜瀛樺湪鍏ュ簱涓换鍔�!", wrkMast.getWrkNo()); + return; + } + + // 鍒ゆ柇鏄惁宸插瓨鍦ㄥ皬杞︾粦瀹氫换鍔� + BasSte basSte = basSteService.findByCrnNo(wrkMast.getCrnNo()); + if(basSte == null) return; + WrkMast one = wrkMastService.selectOne(new EntityWrapper<WrkMast>() + .eq("ste_no",basSte.getSteNo()) + .last(" and io_type != 111 and wrk_sts < 10")); + if(one != null){ + News.error("{}绉诲簱浠诲姟鏃犳硶浣滀笟锛屽洜鍏ュ簱浠诲姟宸茬粦瀹氬皬杞�!", wrkMast.getWrkNo()); + return; + } + + // 鑾峰彇婧愬簱浣嶄俊鎭� + LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); + if (null == sourceLoc) { + News.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈡簮搴撲綅澶辫触锛佸伐浣滃彿={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); + return; + } + // 婧愬簱浣� 搴撲綅鐘舵�佸垽鏂� + if (!sourceLoc.getLocSts().equals("R")) { + return; + } + // 鑾峰彇鐩爣搴撲綅淇℃伅 + LocMast loc = locMastService.selectById(wrkMast.getLocNo()); + if (null == loc || !loc.getLocSts().equals("S")) { + News.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo()); + return; + } + // 鑾峰彇鍫嗗灈鏈轰俊鎭� 骞� 鍒ゆ柇鏄惁鍙叆鍑� + BasCrnp basCrnp = basCrnpService.selectById(slave.getId()); + if (!basCrnp.getInEnable().equals("Y") && !basCrnp.getOutEnable().equals("Y")) { + return; + } + +// // 鍫嗗灈鏈烘帶鍒惰繃婊� +// if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { +// return; +// } + + // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if (wrkMastMapper.selectWorking(slave.getId()) != null) { + return; + } + + // 缃《浠诲姟 + wrkMast.setIoPri((double) 9999); + wrkMastMapper.updateById(wrkMast); + + // 婧愬簱浣� ===>> 鏈�澶栧眰搴撲綅 + if (locMastService.isOutMost(wrkMast.getSourceLocNo())) { + // 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅 + if (locMastService.isOutMost(wrkMast.getLocNo())) { + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setCommand((short) 0); + crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(sourceLoc.getRow1().shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(sourceLoc.getBay1().shortValue()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(sourceLoc.getLev1().shortValue()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(loc.getRow1().shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(loc.getBay1().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(loc.getLev1().shortValue()); // 鐩爣搴撲綅灞� + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { + News.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 7.鍚婅溅鍏ュ簱涓� + Date now = new Date(); + wrkMast.setWrkSts(7L); + wrkMast.setCrnStrTime(now); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + News.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + } } } @@ -2638,7 +2780,7 @@ } if (wrkMast == null) { continue; } - if (wrkMast.getIoType() != 11) { + if (wrkMast.getIoType() != 11 && wrkMast.getIoType() != 111) { // 鍏ュ簱 ==>> 璐х墿鎼叆搴� if (wrkMast.getWrkSts() == 7){ // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴� @@ -2782,8 +2924,52 @@ } // 绉诲簱 ===>> 鍫嗗灈鏈烘惉鑷崇洰鏍囧簱浣嶇粍 瀹屾垚 } + // 搴撲綅绉昏浆(楂橀io_type111) + } else if(wrkMast.getIoType() == 111) { + Date now = new Date(); + // 鍏ュ簱 ==>> 璐х墿鎼叆搴� + if (wrkMast.getWrkSts() == 7){ + if (locMastService.isOutMost(wrkMast.getLocNo()) && locMastService.isOutMost(wrkMast.getSourceLocNo())) { + // ==> 9.鍏ュ簱瀹屾垚 + wrkMast.setWrkSts(9L); + wrkMast.setCrnEndTime(now); + wrkMast.setModiTime(now); + // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 + if (wrkMastMapper.updateById(wrkMast) > 0) { + +// if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) { +// News.error("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触锛沎婧愬簱浣�={}],[鐩爣搴撲綅={}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo()); +// continue; +// } + +// // 淇敼婧愬簱浣嶇姸鎬� ==> O +// LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); +// if (null != sourceLoc) { +// sourceLoc.setLocSts("O"); +// sourceLoc.setModiTime(now); +// if (!locMastService.updateById(sourceLoc)) { +// News.error("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={}],[sourceLoc={}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); +// } +// } +// // 淇敼鐩爣搴撲綅鐘舵�� ==> F +// LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); +// if (locMast != null) { +// locMast.setLocSts("F"); +// locMast.setModiTime(now); +// if (!locMastService.updateById(locMast)) { +// News.error("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐ワ紱[workNo={}],[locNo={}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); +// } +// } + + // 鍫嗗灈鏈哄浣� + crnThread.setResetFlag(true); + } else { + News.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + } // 搴撲綅绉昏浆 - } else { + }else { // 鍏ュ簱 ==>> 璐х墿鎼叆搴� if (wrkMast.getWrkSts() == 7){ // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴� @@ -4057,6 +4243,7 @@ LocMast loc = null; List<LocMast> locs = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no",crn.getId()) .eq("loc_type1",shallowLoc.getLocType1()) + .eq("loc_type2",shallowLoc.getLocType2()) .eq("loc_sts","O") .last(" and row1 in (" + rows + ") order by bay1,lev1")); for (LocMast one : locs){ @@ -4064,30 +4251,8 @@ || Utils.getBay(one.getLocNo()) != Utils.getBay(shallowLoc.getLocNo()) || Utils.getLev(one.getLocNo()) != Utils.getLev(shallowLoc.getLocNo())){ - boolean success = true; - List<String> insideLoc = Utils.getGroupInsideLoc(one.getLocNo()); - for (String inside : insideLoc) { - LocMast locMast = locMastService.selectById(inside); - if(Cools.isEmpty(locMast)){ - continue; - } - if (locMast.getLocSts().equals("P") - || locMastService.selectById(inside).getLocSts().equals("R") - || locMastService.selectById(inside).getLocSts().equals("S") - || locMastService.selectById(inside).getLocSts().equals("Q")) { - success = false; break; - } - } - - Integer steNo = this.hasCar(one.getLocNo()); - if (steNo != null) { - continue; - } - - if (success) { - loc = one; - break; - } + loc = one; + break; } } @@ -4104,7 +4269,7 @@ wrkMast.setWrkNo(workNo); wrkMast.setIoTime(now); wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID - wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇 + wrkMast.setIoType(111); // 鍏ュ嚭搴撶姸鎬侊細 111.搴撴牸绉昏浇(楂橀) wrkMast.setIoPri((double) 9999); wrkMast.setCrnNo(crn.getId()); wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣� -- Gitblit v1.9.1