From cdca466c533197157f3255b77fbdb4aac89be064 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期三, 30 八月 2023 08:26:10 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 386 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 339 insertions(+), 47 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 8d4bafe..8f706d1 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -721,6 +721,10 @@ if (!shuttleProtocol.isIdle()) { return false; } + //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 + if (shuttleProtocol.getToken() != 0) { + return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 + } //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣� if (!shuttleProtocol.getCurrentLocNo().equals(basDevp.getLocNo())) { @@ -746,6 +750,7 @@ wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓� wrkMast.setModiTime(new Date()); + shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝 if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); @@ -793,6 +798,10 @@ if (!shuttleProtocol.isIdle()) { return false; } + //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 + if (shuttleProtocol.getToken() != 0) { + return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 + } //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getLiftNo()); @@ -824,6 +833,7 @@ wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� wrkMast.setModiTime(new Date()); + shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝 if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); @@ -851,16 +861,22 @@ && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id ) { //灏嗕换鍔℃。鏍囪涓哄畬鎴� - WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); + WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo()); if (wrkMast != null) { switch (wrkMast.getWrkSts().intValue()) { case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 wrkMast.setWrkSts(9L); - //浠诲姟鍙锋竻闆� - shuttleProtocol.setTaskNo(0); + if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁灏忚溅浠ょ墝 + shuttleProtocol.setToken(0); + } break; case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚 wrkMast.setWrkSts(23L); + if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁灏忚溅浠ょ墝 + shuttleProtocol.setToken(0); + } break; case 102://102.灏忚溅鍒版彁鍗囨満涓� ==> 103.灏忚溅鍒版彁鍗囨満瀹屾垚 wrkMast.setWrkSts(103L); @@ -870,6 +886,10 @@ break; case 108://108.灏忚溅绉诲姩涓� ==> 109.灏忚溅绉诲姩瀹屾垚 wrkMast.setWrkSts(109L); + if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁灏忚溅浠ょ墝 + shuttleProtocol.setToken(0); + } break; default: } @@ -961,6 +981,10 @@ if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� + if (liftProtocol.getToken() != 0) { + return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� + } //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); if (liftWrkMast != null) { @@ -991,6 +1015,7 @@ wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑 wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� wrkMast.setModiTime(now); + liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); @@ -1023,6 +1048,10 @@ if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� + if (liftProtocol.getToken() != 0) { + return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� + } //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); if (liftWrkMast != null) { @@ -1053,6 +1082,7 @@ wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� wrkMast.setModiTime(now); + liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); @@ -1088,9 +1118,20 @@ case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(4L); wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + if (liftProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁鎻愬崌鏈轰护鐗� + liftProtocol.setToken(0); + } break; case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(25L); + if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆 + wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴� + } + if (liftProtocol.getToken() == wrkMast.getWrkNo()) { + //閲婃斁鎻愬崌鏈轰护鐗� + liftProtocol.setToken(0); + } break; case 104://104.鎻愬崌鏈烘惉杩愪腑 ==> 105.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(105L); @@ -1127,67 +1168,282 @@ //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗� List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast(); for (WrkMast wrkMast : wrkMasts1) { - boolean step1 = this.locToLocExecuteStep1(wrkMast);//搴撲綅绉昏浆 - if (!step1) { - continue; + if (wrkMast.getSourceLocNo().equals(wrkMast.getLocNo())) { + boolean step1 = this.locToLocExecuteStep1(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞� + if (!step1) { + continue; + } + }else { + //璺ㄦゼ灞傚簱浣嶇Щ杞� + boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙� + if (!step2) { + continue; + } + + boolean step3 = this.locToLocExecuteStep3(wrkMast);//鎻愬崌鏈烘惉杩愯揣鐗� + if (!step3) { + continue; + } + + boolean step4 = this.locToLocExecuteStep4(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙� + if (!step4) { + continue; + } + } } } /** - * 搴撲綅绉昏浆 + * 鍚屾ゼ灞傚簱浣嶇Щ杞� * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ private boolean locToLocExecuteStep1(WrkMast wrkMast) { - if (wrkMast.getShuttleNo() == null) { - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + if (wrkMast.getWrkSts() == 21) {//21.鐢熸垚鍑哄簱浠诲姟 + if (wrkMast.getShuttleNo() == null) { + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + return false; + } + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + return false; + } + if (!shuttleProtocol.isIdle()) { + return false; + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣� + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + //灏忚溅涓嶅湪婧愬簱浣嶄綅缃� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + return false; + } + + //灏忚溅宸叉姷杈炬簮搴撲綅锛岃繘琛屾惉杩愯揣鐗� + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), wrkMast.getLocNo()); + if (result == null) {//璺緞璁$畻澶辫触 + return false; + } + + //鍒涘缓鍒嗛厤鍛戒护 + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ簱妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 + assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 + + wrkMast.setWrkSts(5L);//21.鐢熸垚鍑哄簱浠诲姟 => 5.灏忚溅鎼繍涓� + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + } + return false; } + return true; + } - //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - if (shuttleThread == null) { + /** + * 璺ㄦゼ灞傚簱浣嶇Щ杞�-璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean locToLocExecuteStep2(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == 21) {//21.鐢熸垚鍑哄簱浠诲姟 + if (wrkMast.getShuttleNo() == null) { + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + return false; + } + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + return false; + } + if (!shuttleProtocol.isIdle()) { + return false; + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣� + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + //灏忚溅涓嶅湪婧愬簱浣嶄綅缃� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 + return false; + } + + //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐� + BasDevp liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId()); + if (liftSta == null) { + return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐� + } + + //灏忚溅宸叉姷杈炬簮搴撲綅锛屽皢璐х墿鎼繍鍒拌緭閫佺珯鐐� + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), liftSta.getLocNo()); + if (result == null) {//璺緞璁$畻澶辫触 + return false; + } + + //鍒涘缓鍒嗛厤鍛戒护 + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_LOC_TO_LOC.id.shortValue());//搴撲綅绉昏浆妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 + assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 + + wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� + wrkMast.setLiftNo(liftSta.getLiftNo());//璁剧疆鎻愬崌鏈哄彿 + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + } + return false; } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol == null) { + return true; + } + + /** + * 璺ㄦゼ灞傚簱浣嶇Щ杞�-鎻愬崌鏈烘惉杩愯揣鐗� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean locToLocExecuteStep3(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == 23) {//23.灏忚溅鎼繍瀹屾垚 + //鑾峰彇鎻愬崌鏈虹嚎绋� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + + if (!liftProtocol.isIdle()) { + return false; + } + + //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛� + WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue()); + if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) { + return false; + } + + //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� + BasDevp sourceBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), liftProtocol.getLiftNo().intValue()); + //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� + BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), liftProtocol.getLiftNo().intValue()); + if (sourceBasDevp == null || targetBasDevp == null) { + return false;//缂哄皯绔欑偣淇℃伅 + } + + //鑾峰彇鎻愬崌鏈哄懡浠� + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceBasDevp.getDevNo(), targetBasDevp.getDevNo(), wrkMast.getWrkNo()); + + ArrayList<NyLiftCommand> commands = new ArrayList<>(); + commands.add(liftCommand); + + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(liftProtocol.getLiftNo()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue()); + + wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� + wrkMast.setShuttleNo(null);//娓呯┖灏忚溅鍙凤紝绛夎揣鐗╂惉杩愬畬鎴愬悗锛屽埌鐩爣妤煎眰閲嶆柊鎼滅储灏忚溅 + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); + } return false; } - if (!shuttleProtocol.isIdle()) { + return true; + } + + /** + * 璺ㄦゼ灞傚簱浣嶇Щ杞�-璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鐩爣鏋悗 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean locToLocExecuteStep4(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == 4) {//4.鎻愬崌鏈烘惉杩愬畬鎴� + //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� + BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo()); + if (targetBasDevp == null) { + return false;//缂哄皯绔欑偣淇℃伅 + } + + if (wrkMast.getShuttleNo() == null) { + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetBasDevp.getLocNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� + return false; + } + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + return false; + } + if (!shuttleProtocol.isIdle()) { + return false; + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪鐩爣杈撻�佺珯鐐� + if (!shuttleProtocol.getCurrentLocNo().equals(targetBasDevp.getLocNo())) { + //灏忚溅涓嶅湪鐩爣杈撻�佺珯鐐� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� + return false; + } + + //灏忚溅宸叉姷杈剧洰鏍囪緭閫佺珯鐐癸紝灏嗚揣鐗╂惉杩愬埌鐩爣搴撲綅 + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), targetBasDevp.getLocNo(), wrkMast.getLocNo()); + if (result == null) {//璺緞璁$畻澶辫触 + return false; + } + + //鍒涘缓鍒嗛厤鍛戒护 + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_LOC_TO_LOC.id.shortValue());//搴撲綅绉昏浆妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 + assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 + + wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓� + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + } + return false; } - - //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣� - if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { - //灏忚溅涓嶅湪婧愬簱浣嶄綅缃� - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 - return false; - } - - //灏忚溅宸叉姷杈炬簮搴撲綅锛岃繘琛屾惉杩愯揣鐗� - NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), wrkMast.getLocNo()); - if (result == null) {//璺緞璁$畻澶辫触 - return false; - } - - //鍒涘缓鍒嗛厤鍛戒护 - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ簱妯″紡 - assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 - assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 - - wrkMast.setWrkSts(5L);//1.鐢熸垚鍏ュ簱浠诲姟 => 5.灏忚溅鎼繍涓� - wrkMast.setModiTime(new Date()); - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - } - return true; } @@ -1228,7 +1484,7 @@ if (wrkMast == null) { continue; } - BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode().get(0)); + BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode()); String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( null, // 缂栧彿 @@ -1244,7 +1500,7 @@ wrkMast.getSourceStaNo(), // 婧愮珯 wrkMast.getSourceLocNo(), // 婧愬簱浣� wrkMast.getBarcode(), // 鏉$爜 - shuttleProtocol.getErrCode().get(0), // 寮傚父鐮� + shuttleProtocol.getErrCode(), // 寮傚父鐮� errName, // 寮傚父 1, // 寮傚父鎯呭喌 now, // 娣诲姞鏃堕棿 @@ -1766,6 +2022,11 @@ return false; } + //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 + if (shuttleProtocol.getToken() != 0) { + return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 + } + if (Utils.getLev(wrkMast.getLocNo()) == shuttleProtocol.getPoint().getZ()) { //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛岄渶瑕侀�氳繃鎻愬崌鏈鸿皟搴� return true;//鐩存帴杩涘叆108.灏忚溅绉诲姩涓� @@ -1844,6 +2105,7 @@ wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅鍒版彁鍗囨満涓� wrkMast.setLiftNo(basLift.getLiftNo());//鎻愬崌鏈哄彿(閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鎶㈠崰) wrkMast.setModiTime(now); + shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); @@ -1874,6 +2136,10 @@ } if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; + } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� + if (liftProtocol.getToken() != 0) { + return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� @@ -1915,6 +2181,7 @@ wrkMast.setWrkSts(104L);//鎻愬崌鏈烘惉杩愪腑 103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑 wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 wrkMast.setModiTime(now); + liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); @@ -1948,6 +2215,11 @@ return false; } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠浠诲姟 + if (liftProtocol.getToken() != wrkMast.getWrkNo()) { + return false; + } + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -1960,6 +2232,11 @@ //灏忚溅澶勪簬绌洪棽鐘舵�� if (!shuttleProtocol.isIdleNoCharge()) { + return false; + } + + //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� + if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { return false; } @@ -2015,6 +2292,15 @@ //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓� if (wrkMast.getWrkSts() == 107) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -2027,6 +2313,11 @@ //灏忚溅澶勪簬绌洪棽鐘舵�� if (!shuttleProtocol.isIdleNoCharge()) { + return false; + } + + //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� + if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { return false; } @@ -2065,6 +2356,7 @@ wrkMast.setWrkSts(108L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓� wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� wrkMast.setModiTime(now); + liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); -- Gitblit v1.9.1