From 7441616d1f28146f859eb20be839c07fd3719a40 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期一, 25 九月 2023 16:22:42 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 130 +++++++++++++++++++++++++++++++++++------- 1 files changed, 107 insertions(+), 23 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 f3475c9..3476c4a 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -946,6 +946,8 @@ } //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬� + + if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id //浠诲姟瀹屾垚绛夊緟纭 && shuttleProtocol.getTaskNo() != 0 && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id @@ -956,14 +958,16 @@ switch (wrkMast.getWrkSts().intValue()) { case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 wrkMast.setWrkSts(9L); - if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + shuttleProtocol.setTaskNo(0); + if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { //閲婃斁灏忚溅浠ょ墝 shuttleProtocol.setToken(0); } break; case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚 wrkMast.setWrkSts(23L); - if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + shuttleProtocol.setTaskNo(0); + if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { //閲婃斁灏忚溅浠ょ墝 shuttleProtocol.setToken(0); } @@ -973,6 +977,7 @@ break; case 104://104.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� wrkMast.setWrkSts(105L); + shuttleProtocol.setTaskNo(0);//娓呯悊宸ヤ綔鍙� break; case 108://108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� wrkMast.setWrkSts(109L); @@ -980,7 +985,7 @@ case 110://110.灏忚溅绉诲姩涓� ==> 111.灏忚溅绉诲姩瀹屾垚 wrkMast.setWrkSts(111L); shuttleProtocol.setTaskNo(0); - if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { + if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { //閲婃斁灏忚溅浠ょ墝 shuttleProtocol.setToken(0); } @@ -1281,7 +1286,7 @@ && liftProtocol.getTaskNo() != 0 && !liftProtocol.getBusy() ) { - + boolean clearTaskNoFlag = false;//娓呴浂宸ヤ綔鍙锋爣璁� //灏嗕换鍔℃。鏍囪涓哄畬鎴� WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(liftProtocol.getTaskNo().intValue()); if (wrkMast != null) { @@ -1299,18 +1304,24 @@ if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆 wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴� } - if (liftProtocol.getToken() == wrkMast.getWrkNo()) { + if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) { //閲婃斁鎻愬崌鏈轰护鐗� liftProtocol.setToken(0); } break; case 106://106.鎻愬崌鏈烘惉杩愪腑 ==> 107.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(107L); +// //娓呴浂宸ヤ綔鍙� +// clearTaskNoFlag = true; break; default: } if (wrkMastMapper.updateById(wrkMast) > 0) { + if (clearTaskNoFlag) { + //娓呴浂宸ヤ綔鍙� + MessageQueue.offer(SlaveType.Lift, liftSlave.getId(), new Task(4, null)); + } //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); //浠诲姟鎸囦护娓呴浂 @@ -2116,11 +2127,39 @@ continue; } + //灏忚溅鎵�鍦ㄦゼ灞� + int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo()); ShuttleChargeType shuttleCharge = null; + + //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗� for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { + if (lev != Utils.getLev(chargeType.locNo)) { + continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞� + } + + //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞� if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) { shuttleCharge = chargeType; break; + } + } + + if (shuttleCharge == null) { + //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗� + //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔� + for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { + if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) { + //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗� + int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞� + boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞� + if (checkLevHasShuttle) { + //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗� + continue; + } + + shuttleCharge = chargeType; + break; + } } } @@ -2143,7 +2182,6 @@ continue; } - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING);//鍏呯數涓� News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId()); } } @@ -2321,6 +2359,12 @@ return false;//鎵句笉鍒扮珯鐐� } + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) + WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftSta.getLiftNo()); + if (liftWrkMast != null) { + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo()); List<NyShuttleHttpCommand> commands = result.getCommands(); @@ -2335,6 +2379,7 @@ wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐� wrkMast.setModiTime(now); + wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 @@ -2382,7 +2427,9 @@ //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo()); if (liftWrkMast != null) { - return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } } LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSta.getLiftNo()); @@ -2394,7 +2441,7 @@ return false; } - if (!liftProtocol.isIdle()) { + if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; } @@ -2409,7 +2456,12 @@ } //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleProtocol.isIdleNoCharge()) { + if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) { + return false; + } + + //灏忚溅浠ょ墝鏄惁琚换鍔$嫭鍗� + if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { return false; } @@ -2424,6 +2476,9 @@ //鑾峰彇鎻愬崌鏈哄懡浠わ紝璋冨害鎻愬崌鏈哄埌婧愮珯浣嶇疆 NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceLiftSta.getStaNo(), sourceLiftSta.getStaNo(), wrkMast.getWrkNo()); + + Random random = new Random(); + liftCommand.setTaskNo((short) Math.abs((liftCommand.getTaskNo().intValue() + random.nextInt(9999))));//鏇存崲闅忔満浠诲姟鍙� ArrayList<NyLiftCommand> commands = new ArrayList<>(); commands.add(liftCommand); @@ -2445,13 +2500,19 @@ return false;//绛夊緟鎻愬崌鏈哄埌灏忚溅妤煎眰 } + if (liftProtocol.getToken() == 0) {//鎻愬崌鏈轰护鐗屾湭琚崰鐢� + //鐙崰鎻愬崌鏈� + liftProtocol.setToken(wrkMast.getShuttleNo()); + return false;//绛夊緟涓嬩竴娆℃墽琛� + } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 - if (liftProtocol.getToken() != wrkMast.getShuttleNo()) { + if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) { return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� } //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� - if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { + if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { return false; } @@ -2460,7 +2521,7 @@ //鎻愬崌鏈鸿妭鐐� NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); - liftNode.setZ(basLift.getPoint$().getZ()); + liftNode.setZ(staNode.getZ()); //鑾峰彇灏忚溅杩涙彁鍗囨満琛岃蛋鍛戒护 NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), staNode, liftNode, true); @@ -2516,8 +2577,16 @@ if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; } + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 - if (liftProtocol.getToken() != wrkMast.getShuttleNo()) { + if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) { return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂 } @@ -2542,7 +2611,7 @@ } //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� - if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { + if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { return false; } @@ -2602,8 +2671,16 @@ return false; } + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 - if (liftProtocol.getToken() != wrkMast.getShuttleNo()) { + if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) { return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂 } @@ -2623,7 +2700,7 @@ } //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� - if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { + if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { return false; } @@ -2642,9 +2719,13 @@ return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� } NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); - liftNode.setZ(basLift.getPoint$().getZ()); + liftNode.setZ(liftSta.getLev()); List<NyShuttleHttpCommand> commands = new ArrayList<>(); + //鑾峰彇灏忚溅鏇存柊妤煎眰鍛戒护 + NyShuttleHttpCommand updateZCommand = NyHttpUtils.getUpdateZCommand(shuttleThread.getSlave().getId(), liftProtocol.getLev().intValue(), wrkMast.getWrkNo()); + commands.add(updateZCommand); + //鑾峰彇灏忚溅鍑烘彁鍗囨満琛岃蛋鍛戒护 NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), liftNode, NavigatePositionConvert.locNoToNode(liftSta.getLocNo()), false); commands.add(moveCommand);//娣诲姞灏忚溅杩佸嚭鎻愬崌鏈哄懡浠� @@ -2697,7 +2778,7 @@ } //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� - if (shuttleProtocol.getToken() != 0 && shuttleProtocol.getToken() != wrkMast.getWrkNo()) { + if (shuttleProtocol.getToken() != 0 && !shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { return false; } @@ -2732,10 +2813,8 @@ assignCommand.setAuto(true);//鑷姩妯″紡 assignCommand.setCommands(commands); assignCommand.setNodes(result.getNodes()); - - wrkMast.setWrkSts(110L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� - wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� - wrkMast.setModiTime(now); + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� + assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅 if (wrkMast.getLiftNo() != null) { LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); @@ -2746,10 +2825,15 @@ if (liftProtocol == null) { return false; } - if (liftProtocol.getToken() == shuttleProtocol.getShuttleNo().intValue()) { + if (liftProtocol.getToken().equals(shuttleProtocol.getShuttleNo().intValue())) { liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗� } } + + wrkMast.setWrkSts(110L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); -- Gitblit v1.9.1