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