From baed29d667be08051c36c31997117a1ba292d5bc Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 10 五月 2023 16:51:01 +0800
Subject: [PATCH] redis实时地图

---
 src/main/java/com/zy/core/thread/ShuttleThread.java |   53 ++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 59f53cf..2a0f24a 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -16,11 +16,9 @@
 import com.zy.asrs.service.BasShuttleOptService;
 import com.zy.asrs.service.BasShuttleService;
 import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.model.NavigateNode;
-import com.zy.common.utils.CommonUtils;
-import com.zy.common.utils.NavigatePositionConvert;
-import com.zy.common.utils.NavigateUtils;
-import com.zy.common.utils.RedisUtil;
+import com.zy.common.utils.*;
 import com.zy.core.News;
 import com.zy.core.ThreadHandler;
 import com.zy.core.cache.MessageQueue;
@@ -178,7 +176,7 @@
 
                 if (shuttleProtocol.getErrorCode() != 0 && shuttleProtocol.getProtocolStatusType() == ShuttleProtocolStatusType.WORKING) {
                     //鍑虹幇閿欒
-                    reset(shuttleProtocol.getTaskNo());
+                    resetAndTryFix(shuttleProtocol.getTaskNo());
                 }
 
                 if(shuttleProtocol.getProtocolStatusType() == ShuttleProtocolStatusType.FIXING
@@ -200,7 +198,7 @@
                 //妫�娴嬫槸鍚︽湁鎻愬崌鏈洪攣瀹氭爣璁帮紝鏈夊垯妫�娴嬫彁鍗囨満鏄惁鍒颁綅锛屾槸鍚﹁兘璧颁笅涓�姝ュ懡浠�
                 if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE
                         && shuttleProtocol.getTaskNo() != 0) {
-                    Object o = redisUtil.get("wrk_no_" + shuttleProtocol.getTaskNo());
+                    Object o = redisUtil.get("shuttle_wrk_no_" + shuttleProtocol.getTaskNo());
                     if (o != null) {
                         ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
                         if (redisCommand.getLiftSecurityMk()) {
@@ -394,9 +392,11 @@
     //鍒嗛厤浠诲姟
     private void assignWork(ShuttleAssignCommand assignCommand) {
         if (!assignCommand.getAuto()) {
+            List<NavigateNode> allNode = new ArrayList<>();
             List<ShuttleCommand> commands = new ArrayList<>();
             ShuttleCommand command = new ShuttleCommand();
             LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
+            NavigateMapData navigateMapData;
             switch (assignCommand.getTaskMode()) {
                 case 1://鍏ュ簱
                 case 2://鍑哄簱
@@ -404,7 +404,12 @@
                     //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护
                     LocMast currentLocMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString());
                     List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), ShuttleTaskModeType.PAK_IN.id);
+                    //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+                    navigateMapData = new NavigateMapData(Utils.getLev(currentLocMast.getLocNo()));
+                    navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+
                     if (firstMastResult != null) {
+                        allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛�
                         //鑾峰彇鍒嗘璺緞
                         ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(firstMastResult);
                         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
@@ -466,7 +471,10 @@
 
                     //璁$畻涓偣鍒扮粓鐐硅矾寰�
                     List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), ShuttleTaskModeType.PAK_IN.id);
+                    navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+
                     if (secMastResult != null) {
+                        allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛�
                         //鑾峰彇鍒嗘璺緞
                         ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(secMastResult);
                         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
@@ -590,7 +598,12 @@
                 case 14://绉诲姩鍒扮洰鏍囧簱浣�
                     LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString());
                     List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), ShuttleTaskModeType.PAK_IN.id);
+                    //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+                    navigateMapData = new NavigateMapData(Utils.getLev(locMast.getLocNo()));
+                    navigateMapData.writeNavigateNodeToRedisMap(result, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+
                     if (result != null) {
+                        allNode.addAll(result);//灏嗚妭鐐硅繘琛屼繚瀛�
                         //鑾峰彇鍒嗘璺緞
                         ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result);
                         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
@@ -626,6 +639,7 @@
                 default:
             }
             assignCommand.setCommands(commands);
+            assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
         }
 
         ShuttleRedisCommand redisCommand = new ShuttleRedisCommand();
@@ -638,7 +652,7 @@
         shuttleProtocol.setAssignCommand(assignCommand);
         shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-        redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand));
+        redisUtil.set("shuttle_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand));
         //鎵ц涓嬪彂浠诲姟
         executeWork(assignCommand.getTaskNo());
     }
@@ -650,7 +664,7 @@
             return false;
         }
 
-        Object o = redisUtil.get("wrk_no_" + wrkNo);
+        Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo);
         if (o == null) {
             return false;
         }
@@ -683,7 +697,7 @@
                     commandStep--;
                     redisCommand.setCommandStep(commandStep);
                     //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                    redisUtil.set("wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
+                    redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
                     shuttleProtocol.setPakMk(true);
                     return true;
                 }else {
@@ -731,7 +745,7 @@
                 errorCommands.remove(0);
                 redisCommand.setErrorCommands(errorCommands);
                 //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                redisUtil.set("wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
+                redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
                 return true;
             }
         }
@@ -769,7 +783,7 @@
                 commandStep++;
                 redisCommand.setCommandStep(commandStep);
                 //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                redisUtil.set("wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
+                redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
             }else {
                 //宸叉墽琛屽畬鎴�
                 //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘�
@@ -799,8 +813,13 @@
                     }
                 }
 
+                String locNo = shuttleProtocol.getLocNo() == null ? shuttleProtocol.getSourceLocNo() : shuttleProtocol.getLocNo();
+                //瑙i櫎閿佸畾鐨勫簱浣嶈矾寰�
+                NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(locNo));
+                navigateMapData.writeNavigateNodeToRedisMap(redisCommand.getAssignCommand().getNodes(), false);
+
                 //鍒犻櫎redis
-                redisUtil.del("wrk_no_" + redisCommand.getWrkNo());
+                redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
 
                 if (!assignCommand.getAuto()) {
                     //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅
@@ -836,7 +855,7 @@
             return false;
         }
 
-        Object o = redisUtil.get("wrk_no_" + wrkNo);
+        Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo);
         if (o == null) {
             return false;
         }
@@ -925,7 +944,7 @@
         liftProtocol.setSecurityMk(true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満
         redisCommand.setLiftSecurityMk(true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-        redisUtil.set("wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
+        redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
 
         //鍛戒护list
         ArrayList<LiftCommand> liftCommands = new ArrayList<>();
@@ -950,13 +969,13 @@
     /**
      * 澶嶄綅骞跺皾璇曚慨澶嶉敊璇�
      */
-    private boolean reset(Short wrkNo) {
+    private boolean resetAndTryFix(Short wrkNo) {
         //璇诲彇redis鏁版嵁
         if (wrkNo == null) {
             return false;
         }
 
-        Object o = redisUtil.get("wrk_no_" + wrkNo);
+        Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo);
         if (o == null) {
             return false;
         }
@@ -1027,7 +1046,7 @@
 
         redisCommand.setErrorCommands(list);
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-        redisUtil.set("wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
+        redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
         shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.FIXING);
         return true;
     }

--
Gitblit v1.9.1