From fb8419ef141e16b8ec8b1d9802fa0d5a46768794 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 20 九月 2023 08:24:21 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  146 ++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 115 insertions(+), 31 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 01078e7..bd38850 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -99,6 +99,9 @@
     private ShuttleDispatchUtils shuttleDispatchUtils;
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private WrkMastLocMapper wrkMastLocMapper;
+
 
     /**
      * 缁勬墭
@@ -928,6 +931,16 @@
                             if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) {
                                 //閲婃斁灏忚溅浠ょ墝
                                 shuttleProtocol.setToken(0);
+                            }
+                            break;
+                        case 111:
+                            // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+                            if (wrkMastLocMapper.save(wrkMast.getWrkNo()) <= 0) {
+                                log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
+                            }
+                            // 鍒犻櫎宸ヤ綔涓绘。
+                            if (!wrkMastService.deleteById(wrkMast)) {
+                                log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo());
                             }
                             break;
                         default:
@@ -2156,6 +2169,8 @@
                 continue;
             }
 
+//            this.shuttleMoveExecuteStepClearWrkMast(wrkMast);//娓呯悊111.灏忚溅绉诲姩瀹屾垚
+
         }
     }
 
@@ -2181,7 +2196,7 @@
             }
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
-            if (!shuttleProtocol.isIdleNoCharge()) {
+            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
                 return false;
             }
 
@@ -2358,6 +2373,8 @@
 
             wrkMast.setWrkSts(104L);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑
             wrkMast.setModiTime(now);
+            wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤
+            liftProtocol.setToken(wrkMast.getShuttleNo());//鎻愬崌鏈轰护鐗岀粦瀹氬綋鍓嶅皬杞�
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
@@ -2552,15 +2569,6 @@
         //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
         if (wrkMast.getWrkSts() == 109) {
 
-            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) {
@@ -2572,34 +2580,34 @@
             }
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
-            if (!shuttleProtocol.isIdleNoCharge()) {
+            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
                 return false;
             }
 
             //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔�
-            if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
+            if (shuttleProtocol.getToken() != 0 && shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
                 return false;
             }
 
-            //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
-            BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo());
-            if (targetBasDevp == null) {
-                return false;//缂哄皯绔欑偣淇℃伅
-            }
+//            //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
+//            BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo());
+//            if (targetBasDevp == null) {
+//                return false;//缂哄皯绔欑偣淇℃伅
+//            }
+//
+//            //鑾峰彇鎻愬崌鏈烘暟鎹�
+//            BasLift basLift = basLiftService.selectById(targetBasDevp.getLiftNo());
+//            if (basLift == null) {
+//                return false;//娌℃湁鎻愬崌鏈烘暟鎹�
+//            }
+//            if (basLift.getPoint() == null) {
+//                return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
+//            }
+//            NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY());
+//            liftNode.setZ(basLift.getPoint$().getZ());
 
-            //鑾峰彇鎻愬崌鏈烘暟鎹�
-            BasLift basLift = basLiftService.selectById(targetBasDevp.getLiftNo());
-            if (basLift == null) {
-                return false;//娌℃湁鎻愬崌鏈烘暟鎹�
-            }
-            if (basLift.getPoint() == null) {
-                return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
-            }
-            NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY());
-            liftNode.setZ(basLift.getPoint$().getZ());
-
-            //鑾峰彇灏忚溅浠庤緭閫佺珯鍒扮洰鏍囧簱浣嶅懡浠�
-            NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getLocNo());
+            //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
+            NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo());
             if (result == null) {
                 return false;//璺緞璁$畻澶辫触
             }
@@ -2616,7 +2624,20 @@
             wrkMast.setWrkSts(110L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
             wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
             wrkMast.setModiTime(now);
-            liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�
+
+            if (wrkMast.getLiftNo() != null) {
+                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.getToken() == shuttleProtocol.getShuttleNo().intValue()) {
+                    liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�
+                }
+            }
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
@@ -2626,6 +2647,69 @@
     }
 
     /**
+     * 灏忚溅杩佺Щ-娓呯悊111.灏忚溅绉诲姩瀹屾垚
+     */
+    private boolean shuttleMoveExecuteStepClearWrkMast(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == 111) {
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            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.isIdleNoCharge(wrkMast.getWrkNo())) {
+                return false;
+            }
+
+            Object o = redisUtil.get("shuttle_wrk_no_" + shuttleProtocol.getTaskNo());
+            if (o != null) {
+                ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
+                ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
+                int size = assignCommand.getCommands().size();
+                NyShuttleHttpCommand command = assignCommand.getCommands().get(size - 1);//鑾峰彇鏈�鍚庝竴娈靛懡浠�
+                if (!command.getComplete()) {
+                    return false;//鏈�鍚庝竴娈靛懡浠よ繕鏈畬鎴愶紝涓嶅仛鎿嶄綔
+                }
+                NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(shuttleProtocol.getCurrentLocNo()));
+                navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//瑙i攣璺緞
+
+                //鍒犻櫎redis
+                redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
+            }
+
+            // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+            if (wrkMastLocMapper.save(wrkMast.getWrkNo()) <= 0) {
+                log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
+            }
+            // 鍒犻櫎宸ヤ綔涓绘。
+            if (!wrkMastService.deleteById(wrkMast)) {
+                log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo());
+            }
+
+            //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+            //婧愬簱浣嶆竻闆�
+            shuttleProtocol.setSourceLocNo(null);
+            //鐩爣搴撲綅娓呴浂
+            shuttleProtocol.setLocNo(null);
+            //浠诲姟鎸囦护娓呴浂
+            shuttleProtocol.setAssignCommand(null);
+            //宸ヤ綔鍙锋竻闆�
+            shuttleProtocol.setTaskNo(0);
+            //娓呴櫎浠ょ墝
+            shuttleProtocol.setToken(0);
+            News.info("鍥涘悜绌挎杞﹀凡纭涓旂Щ鍔ㄤ换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
+        }
+
+        return true;
+    }
+
+    /**
      * 鍑哄叆搴撴ā寮忓垏鎹�
      */
     public synchronized void outAndIn() {

--
Gitblit v1.9.1