From 6b016cef0828cbd8ead4a2ff43d5bcb6e266a584 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 09 五月 2023 15:33:23 +0800
Subject: [PATCH] ShuttleThread and LiftThread task restart

---
 src/main/java/com/zy/core/thread/LiftThread.java                 |   66 ++++------
 src/main/java/com/zy/common/config/RedisConfig.java              |    3 
 src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java |   29 ++++
 src/main/java/com/zy/common/utils/RedisUtil.java                 |   16 ++
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java      |   50 ++++++++
 src/main/java/com/zy/core/thread/ShuttleThread.java              |  130 +++++++++------------
 src/main/java/com/zy/core/model/command/LiftRedisCommand.java    |   20 +++
 src/main/java/com/zy/core/MainProcess.java                       |   28 ++--
 8 files changed, 216 insertions(+), 126 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 f2b386c..50cab14 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -606,6 +606,56 @@
         }
     }
 
+    /**
+     * 浠巖edis涓噸鍚换鍔�
+     */
+    public synchronized void restartTaskFromRedis() {
+        HashMap<Object, Object> map = redisUtil.getRedis();
+        for (Object key : map.keySet()) {
+            if (key.toString().contains("lift_wrk_no_")) {//鎻愬崌鏈轰换鍔�
+                LiftRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), LiftRedisCommand.class);
+                if (redisCommand == null) {
+                    continue;
+                }
+
+                Short liftNo = redisCommand.getLiftNo();
+                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo.intValue());
+                if (liftThread == null) {
+                    continue;
+                }
+                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+                if (!liftProtocol.isIdle()) {
+                    continue;
+                }
+
+                //鎻愬崌鏈哄浜庣┖闂茬姸鎬侊紝杩涜浠诲姟鐨勬仮澶�
+                liftProtocol.setTaskNo(redisCommand.getWrkNo());//灏嗘彁鍗囨満绾跨▼鍒嗛厤浠诲姟鍙�
+                liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//宸ヤ綔鐘舵��
+                liftProtocol.setLiftLock(true);//鎻愬崌鏈洪攣瀹�
+
+            }else {//鍥涘悜绌挎杞︿换鍔�
+                ShuttleRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), ShuttleRedisCommand.class);
+                if (redisCommand == null) {
+                    continue;
+                }
+
+                Short shuttleNo = redisCommand.getShuttleNo();
+                ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo.intValue());
+                if (shuttleThread == null) {
+                    continue;
+                }
+                ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+                if (!shuttleProtocol.isIdle()) {
+                    continue;
+                }
+
+                //鍥涘悜绌挎杞﹀浜庣┖闂茬姸鎬侊紝杩涜浠诲姟鐨勬仮澶�
+                shuttleProtocol.setTaskNo(redisCommand.getWrkNo());//灏嗗洓鍚戠┛姊溅绾跨▼鍒嗛厤浠诲姟鍙�
+                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);//宸ヤ綔鐘舵��
+            }
+        }
+
+    }
 
     /**
      * 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
diff --git a/src/main/java/com/zy/common/config/RedisConfig.java b/src/main/java/com/zy/common/config/RedisConfig.java
index d356517..cf99252 100644
--- a/src/main/java/com/zy/common/config/RedisConfig.java
+++ b/src/main/java/com/zy/common/config/RedisConfig.java
@@ -5,6 +5,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
 import org.springframework.data.redis.core.*;
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
@@ -14,7 +15,7 @@
  * Redis閰嶇疆绫�
  * Created by vincent on 2019-12-23
  */
-//@Configuration
+@Configuration
 //@EnableCaching // 寮�鍚暟鎹紦瀛樻満鍒�
 public class RedisConfig extends CachingConfigurerSupport {
 
diff --git a/src/main/java/com/zy/common/utils/RedisUtil.java b/src/main/java/com/zy/common/utils/RedisUtil.java
index 85e4a0a..95da6dc 100644
--- a/src/main/java/com/zy/common/utils/RedisUtil.java
+++ b/src/main/java/com/zy/common/utils/RedisUtil.java
@@ -6,6 +6,7 @@
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -101,6 +102,21 @@
     }
 
     /**
+     * 鑾峰彇鍏ㄩ儴鏁版嵁
+     * @return
+     */
+    public HashMap<Object, Object> getRedis() {
+        Set<String> keys = redisTemplate.keys("*");
+        HashMap<Object, Object> map = new HashMap<>();
+        for (String key : keys) {
+            Object value = redisTemplate.opsForValue().get(key);
+            map.put(key, value);
+        }
+
+        return map;//杩斿洖鍏ㄩ儴鏁版嵁闆嗗悎
+    }
+
+    /**
      * 鏅�氱紦瀛樻斁鍏�
      *
      * @param key   閿�
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 4c2189a..de83b75 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -51,12 +51,14 @@
                     // 闂撮殧
                     Thread.sleep(500);
 
-                    // 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
-                    mainService.stnToCrnStnPick();
-                    // 鍑哄簱  ===>>  鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯
-                    mainService.crnStnToOutStn();
-                    // 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
-                    mainService.crnIoExecute();
+                    //浠巖edis涓噸鍚换鍔�
+                    mainService.restartTaskFromRedis();
+//                    // 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
+//                    mainService.stnToCrnStnPick();
+//                    // 鍑哄簱  ===>>  鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯
+//                    mainService.crnStnToOutStn();
+//                    // 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
+//                    mainService.crnIoExecute();
                     // 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
                     mainService.shuttleIoInExecute();
                     // 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
@@ -67,10 +69,10 @@
                     mainService.liftIoExecute();
                     //鎻愬崌鏈轰换鍔″畬鎴�
                     mainService.liftFinished();
-                    // 鍏ュ簱  ===>> 鎵ц鍫嗗灈鏈哄宸ヤ綔妗g殑瀹屾垚鎿嶄綔
-                    mainService.storeFinished();
-                    // 鍏ュ簱 ===>> 鎵ц绌挎杞﹀宸ヤ綔妗g殑瀹屾垚鎿嶄綔
-                    mainService.carGenerateStore();
+//                    // 鍏ュ簱  ===>> 鎵ц鍫嗗灈鏈哄宸ヤ綔妗g殑瀹屾垚鎿嶄綔
+//                    mainService.storeFinished();
+//                    // 鍏ュ簱 ===>> 鎵ц绌挎杞﹀宸ヤ綔妗g殑瀹屾垚鎿嶄綔
+//                    mainService.carGenerateStore();
                     // 寮傚父淇℃伅璁板綍
                     mainService.recErr();
                     // 鍏ュ簱  ===>> 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
@@ -82,9 +84,9 @@
                     // 绌挎杞� ===>> 灏忚溅鐢甸噺妫�娴嬪厖鐢�
                     mainService.loopShuttleCharge();
                     mainService.executeShuttleCharge();
-                    // 绌挎杞� ===>> 灏忚溅鐢甸噺妫�娴嬪厖鐢�
-                    mainService.loopSteCharge();
-                    mainService.executeSteCharge();
+//                    // 绌挎杞� ===>> 灏忚溅鐢甸噺妫�娴嬪厖鐢�
+//                    mainService.loopSteCharge();
+//                    mainService.executeSteCharge();
                     //鍑哄叆搴撴ā寮�
                     i++;
                     if (i > 1) {
diff --git a/src/main/java/com/zy/core/model/command/LiftRedisCommand.java b/src/main/java/com/zy/core/model/command/LiftRedisCommand.java
new file mode 100644
index 0000000..c2bd773
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/LiftRedisCommand.java
@@ -0,0 +1,20 @@
+package com.zy.core.model.command;
+
+import lombok.Data;
+
+@Data
+public class LiftRedisCommand {
+
+    //鎻愬崌鏈哄彿
+    private Short liftNo;
+
+    //宸ヤ綔鍙�
+    private Short wrkNo;
+
+    //鍛戒护鎵ц姝ュ簭
+    private Integer commandStep;
+
+    //鍛戒护
+    private LiftAssignCommand assignCommand;
+
+}
diff --git a/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java b/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java
new file mode 100644
index 0000000..88700bd
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/ShuttleRedisCommand.java
@@ -0,0 +1,29 @@
+package com.zy.core.model.command;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class ShuttleRedisCommand implements Serializable {
+
+    //鍥涘悜绌挎杞﹀彿
+    private Short shuttleNo;
+
+    //宸ヤ綔鍙�
+    private Short wrkNo;
+
+    //鍛戒护鎵ц姝ュ簭
+    private Integer commandStep;
+
+    //鍛戒护
+    private ShuttleAssignCommand assignCommand;
+
+    //鍙戠敓閿欒鏃跺皾璇曟墽琛岀殑鎸囦护锛屼紭鍏堢骇鏈�楂�
+    private List<ShuttleCommand> errorCommands;
+
+    //鎻愬崌鏈哄畨鍏ㄩ攣瀹氭爣璁�
+    private Boolean liftSecurityMk = false;
+
+}
diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java
index 0e31dee..a656f4d 100644
--- a/src/main/java/com/zy/core/thread/LiftThread.java
+++ b/src/main/java/com/zy/core/thread/LiftThread.java
@@ -26,10 +26,7 @@
 import com.zy.core.enums.*;
 import com.zy.core.model.LiftSlave;
 import com.zy.core.model.Task;
-import com.zy.core.model.command.LiftAssignCommand;
-import com.zy.core.model.command.LiftCommand;
-import com.zy.core.model.command.ShuttleAssignCommand;
-import com.zy.core.model.command.ShuttleCommand;
+import com.zy.core.model.command.*;
 import com.zy.core.model.protocol.LiftProtocol;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
@@ -37,7 +34,6 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -185,10 +181,9 @@
                         && !liftProtocol.getRunning()
                         && liftProtocol.getReady()
                         && liftProtocol.getPakMk()
-                        && liftProtocol.getTaskNo() != 0
-                        && liftProtocol.getAssignCommand() != null) {
+                        && liftProtocol.getTaskNo() != 0) {
                     //杩樻湁鏈畬鎴愮殑鍛戒护
-                    executeWork(liftProtocol.getAssignCommand());
+                    executeWork(liftProtocol.getTaskNo());
                 }
 
                 //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴�
@@ -290,9 +285,6 @@
 
     //鍒嗛厤浠诲姟
     private void assignWork(LiftAssignCommand assignCommand) {
-        //灏嗘map瀛樺叆redis涓�
-        HashMap<String, Object> map = new HashMap<>();
-
         //鎵嬪姩妯″紡鎸囦护
         if (!assignCommand.getAuto()) {
             LiftCommand command = new LiftCommand();
@@ -328,42 +320,40 @@
             assignCommand.setCommands(commands);
         }
 
-        //鎻愬崌鏈哄彿
-        map.put("lift_no", assignCommand.getLiftNo());
-        //宸ヤ綔鍙�
-        map.put("wrk_no", assignCommand.getTaskNo());
-        //鍛戒护鎵ц姝ュ簭
-        map.put("commandStep", 0);
-        //鍛戒护
-        map.put("assignCommand", assignCommand);
+        LiftRedisCommand redisCommand = new LiftRedisCommand();
+        redisCommand.setLiftNo(assignCommand.getLiftNo());//鎻愬崌鏈哄彿
+        redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙�
+        redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭
+        redisCommand.setAssignCommand(assignCommand);//鍛戒护
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-        redisUtil.set("lift_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
+        redisUtil.set("lift_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand));
         liftProtocol.setAssignCommand(assignCommand);
         liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);
         //鎵ц涓嬪彂浠诲姟
-        executeWork(assignCommand);
+        executeWork(assignCommand.getTaskNo());
     }
 
     //鎵ц浠诲姟
-    private boolean executeWork(LiftAssignCommand assignCommand) {
+    private boolean executeWork(Short wrkNo) {
         //璇诲彇redis鏁版嵁
-        if (assignCommand == null) {
+        if (wrkNo == null) {
             return false;
         }
 
         //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂)
         liftProtocol.setPakMk(false);
 
-        Object o = redisUtil.get("lift_wrk_no_" + assignCommand.getTaskNo());
+        Object o = redisUtil.get("lift_wrk_no_" + wrkNo);
         if (o == null) {
             return false;
         }
-        HashMap map = JSON.parseObject(o.toString(), HashMap.class);
-        List<LiftCommand> commands = assignCommand.getCommands();
+        LiftRedisCommand redisCommand = JSON.parseObject(o.toString(), LiftRedisCommand.class);
+        List<LiftCommand> commands = redisCommand.getAssignCommand().getCommands();
         //褰撳墠姝ュ簭
-        int commandStep = Integer.parseInt(map.get("commandStep").toString());
+        int commandStep = redisCommand.getCommandStep();
         //鎬绘搴�
         int size = commands.size();
+        LiftAssignCommand assignCommand = redisCommand.getAssignCommand();
 
         //鍙栧嚭鍛戒护
         LiftCommand command = commands.get(commandStep);
@@ -379,17 +369,17 @@
                 //鏇存柊redis鏁版嵁
                 //姝ュ簭澧炲姞
                 commandStep++;
-                map.put("commandStep", commandStep);
+                redisCommand.setCommandStep(commandStep);
                 //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                redisUtil.set("lift_wrk_no_" + map.get("wrk_no").toString(), JSON.toJSONString(map));
+                redisUtil.set("lift_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
             }else {
                 //宸叉墽琛屽畬鎴�
                 //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘�
                 BasLiftOptService liftOptService = SpringUtils.getBean(BasLiftOptService.class);
                 if (liftOptService != null) {
                     BasLiftOpt opt = new BasLiftOpt(
-                            assignCommand.getTaskNo().intValue(),
-                            assignCommand.getLiftNo().intValue(),
+                            redisCommand.getWrkNo().intValue(),
+                            redisCommand.getLiftNo().intValue(),
                             new Date(),
                             null,
                             null,
@@ -399,7 +389,7 @@
                     liftOptService.insert(opt);
                 }
                 //鍒犻櫎redis
-                redisUtil.del("lift_wrk_no_" + map.get("wrk_no").toString());
+                redisUtil.del("lift_wrk_no_" + redisCommand.getWrkNo());
 
                 if (assignCommand.getAuto()) {
                     //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
@@ -407,13 +397,11 @@
                     News.info("鎻愬崌鏈轰换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛屾彁鍗囨満鍙�={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command));
                 }else {
                     //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬�
-                    if (assignCommand.getTaskMode() == 5) {
-                        liftProtocol.setTaskNo((short) 0);
-                        liftProtocol.setShuttleNo((short) 0);
-                        liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
-                        liftProtocol.setPakMk(true);
-                        liftProtocol.setSecurityMk(false);
-                    }
+                    liftProtocol.setTaskNo((short) 0);
+                    liftProtocol.setShuttleNo((short) 0);
+                    liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
+                    liftProtocol.setPakMk(true);
+                    liftProtocol.setSecurityMk(false);
                     News.info("鎻愬崌鏈烘墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command));
                 }
 
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index b3d8b2e..a834aac 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -29,10 +29,7 @@
 import com.zy.core.enums.*;
 import com.zy.core.model.ShuttleSlave;
 import com.zy.core.model.Task;
-import com.zy.core.model.command.LiftAssignCommand;
-import com.zy.core.model.command.LiftCommand;
-import com.zy.core.model.command.ShuttleAssignCommand;
-import com.zy.core.model.command.ShuttleCommand;
+import com.zy.core.model.command.*;
 import com.zy.core.model.protocol.LiftProtocol;
 import com.zy.core.model.protocol.ShuttleProtocol;
 import lombok.Data;
@@ -41,7 +38,6 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -187,32 +183,29 @@
 
                 if(shuttleProtocol.getProtocolStatusType() == ShuttleProtocolStatusType.FIXING
                         && shuttleProtocol.getTaskNo() != 0
-                        && shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE
-                        && shuttleProtocol.getAssignCommand() != null){
+                        && shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE){
                     //澶勪簬鏁呴殰淇鐘舵��
                     //鎵ц涓嬩竴姝ユ寚浠�
-                    executeWork(shuttleProtocol.getAssignCommand());
+                    executeWork(shuttleProtocol.getTaskNo());
                 }
 
                 //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
                 if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE
                         && shuttleProtocol.getTaskNo() != 0
-                        && shuttleProtocol.getPakMk()
-                        && shuttleProtocol.getAssignCommand() != null) {
+                        && shuttleProtocol.getPakMk()) {
                     //鎵ц涓嬩竴姝ユ寚浠�
-                    executeWork(shuttleProtocol.getAssignCommand());
+                    executeWork(shuttleProtocol.getTaskNo());
                 }
 
                 //妫�娴嬫槸鍚︽湁鎻愬崌鏈洪攣瀹氭爣璁帮紝鏈夊垯妫�娴嬫彁鍗囨満鏄惁鍒颁綅锛屾槸鍚﹁兘璧颁笅涓�姝ュ懡浠�
                 if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE
-                        && shuttleProtocol.getTaskNo() != 0
-                        && shuttleProtocol.getAssignCommand() != null) {
-                    Object o = redisUtil.get("wrk_no_" + shuttleProtocol.getAssignCommand().getTaskNo());
+                        && shuttleProtocol.getTaskNo() != 0) {
+                    Object o = redisUtil.get("wrk_no_" + shuttleProtocol.getTaskNo());
                     if (o != null) {
-                        HashMap map = JSON.parseObject(o.toString(), HashMap.class);
-                        if (map.containsKey("liftSecurityMk") && Boolean.parseBoolean(map.get("liftSecurityMk").toString())) {
+                        ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
+                        if (redisCommand.getLiftSecurityMk()) {
                             //鎵ц涓嬩竴姝ユ寚浠�
-                            executeWork(shuttleProtocol.getAssignCommand());
+                            executeWork(shuttleProtocol.getTaskNo());
                         }
                     }
                 }
@@ -400,8 +393,6 @@
 
     //鍒嗛厤浠诲姟
     private void assignWork(ShuttleAssignCommand assignCommand) {
-        //灏嗘map瀛樺叆redis涓�
-        HashMap<String, Object> map = new HashMap<>();
         if (!assignCommand.getAuto()) {
             List<ShuttleCommand> commands = new ArrayList<>();
             ShuttleCommand command = new ShuttleCommand();
@@ -637,46 +628,42 @@
             assignCommand.setCommands(commands);
         }
 
-        //鍥涘悜绌挎杞﹀彿
-        map.put("shuttle_no", assignCommand.getShuttleNo());
-        //宸ヤ綔鍙�
-        map.put("wrk_no", assignCommand.getTaskNo());
-        //鍛戒护鎵ц姝ュ簭
-        map.put("commandStep", 0);
-        //鍛戒护
-        map.put("assignCommand", assignCommand);
-        //鍙戠敓閿欒鏃跺皾璇曟墽琛岀殑鎸囦护锛屼紭鍏堢骇鏈�楂�
-        map.put("errorCommands", new ArrayList<ShuttleCommand>());
+        ShuttleRedisCommand redisCommand = new ShuttleRedisCommand();
+        redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+        redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙�
+        redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭
+        redisCommand.setAssignCommand(assignCommand);//鍛戒护
+        redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>());//鍙戠敓閿欒鏃跺皾璇曟墽琛岀殑鎸囦护锛屼紭鍏堢骇鏈�楂�
         shuttleProtocol.setTaskNo(assignCommand.getTaskNo());
         shuttleProtocol.setAssignCommand(assignCommand);
         shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-        redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
+        redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand));
         //鎵ц涓嬪彂浠诲姟
-        executeWork(assignCommand);
+        executeWork(assignCommand.getTaskNo());
     }
 
     //鎵ц涓嬪彂鐨勬寚浠�
-    private boolean executeWork(ShuttleAssignCommand assignCommand) {
+    private boolean executeWork(Short wrkNo) {
         //璇诲彇redis鏁版嵁
-        if (assignCommand == null) {
+        if (wrkNo == null) {
             return false;
         }
 
-        Object o = redisUtil.get("wrk_no_" + assignCommand.getTaskNo());
+        Object o = redisUtil.get("wrk_no_" + wrkNo);
         if (o == null) {
             return false;
         }
-        HashMap map = JSON.parseObject(o.toString(), HashMap.class);
+        ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
 
-        if (!checkLiftStation(assignCommand)) {//妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈�
+        if (!checkLiftStation(wrkNo)) {//妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈�
             return false;
         }
 
         //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂)
         shuttleProtocol.setPakMk(false);
 
-        List<ShuttleCommand> errorCommands =  JSON.parseArray(map.get("errorCommands").toString(),ShuttleCommand.class);
+        List<ShuttleCommand> errorCommands = redisCommand.getErrorCommands();
         if (errorCommands.size() > 0) {
             //浼樺厛鎵ц璇ユ寚浠�
             ShuttleCommand errorCommand = errorCommands.get(0);//鍙栧嚭鎸囦护
@@ -688,15 +675,15 @@
                 if (shuttleProtocol.getCurrentCode().equals(errorCommand.getStartCodeNum())) {
                     //璧风偣鍜岀粓鐐瑰睘浜庡悓涓�搴撲綅锛屾棤闇�鍐嶆墽琛岀Щ鍔ㄦ搷浣�
                     errorCommands.remove(0);//绉婚櫎璇ュ懡浠�
-                    map.put("errorCommands", new ArrayList<ShuttleCommand>());
+                    redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>());
                     shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
                     //褰撳墠姝ュ簭
-                    int commandStep = Integer.parseInt(map.get("commandStep").toString());
+                    int commandStep = redisCommand.getCommandStep();
                     //姝ュ簭鍥為��
                     commandStep--;
-                    map.put("commandStep", commandStep);
+                    redisCommand.setCommandStep(commandStep);
                     //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                    redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
+                    redisUtil.set("wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
                     shuttleProtocol.setPakMk(true);
                     return true;
                 }else {
@@ -730,10 +717,10 @@
 
                 shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
                 //褰撳墠姝ュ簭
-                int commandStep = Integer.parseInt(map.get("commandStep").toString());
+                int commandStep = redisCommand.getCommandStep();
                 //姝ュ簭鍥為��
                 commandStep--;
-                map.put("commandStep", commandStep);
+                redisCommand.setCommandStep(commandStep);
             }
 
             if (!write(errorCommand)) {
@@ -742,18 +729,19 @@
             } else {
                 News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand));
                 errorCommands.remove(0);
-                map.put("errorCommands", errorCommands);
+                redisCommand.setErrorCommands(errorCommands);
                 //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
+                redisUtil.set("wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
                 return true;
             }
         }
 
-        List<ShuttleCommand> commands = assignCommand.getCommands();
+        List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands();
         //褰撳墠姝ュ簭
-        int commandStep = Integer.parseInt(map.get("commandStep").toString());
+        int commandStep = redisCommand.getCommandStep();
         //path璺緞鏁扮洰
         int size = commands.size();
+        ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
 
         //鍙栧嚭鍛戒护
         ShuttleCommand command = commands.get(commandStep);
@@ -779,9 +767,9 @@
                 //鏇存柊redis鏁版嵁
                 //姝ュ簭澧炲姞
                 commandStep++;
-                map.put("commandStep", commandStep);
+                redisCommand.setCommandStep(commandStep);
                 //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                redisUtil.set("wrk_no_" + map.get("wrk_no").toString(), JSON.toJSONString(map));
+                redisUtil.set("wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
             }else {
                 //宸叉墽琛屽畬鎴�
                 //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘�
@@ -802,7 +790,7 @@
                     shuttleOptService.insert(opt);
                 }
 
-                if (map.containsKey("liftSecurityMk") && Boolean.parseBoolean(map.get("liftSecurityMk").toString())) {
+                if (redisCommand.getLiftSecurityMk()) {
                     //鏇鹃攣瀹氳繃鎻愬崌鏈猴紝闇�瑕佽繘琛岃В閿�
                     LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
                     LiftProtocol liftProtocol = liftThread.getLiftProtocol();
@@ -812,20 +800,16 @@
                 }
 
                 //鍒犻櫎redis
-                redisUtil.del("wrk_no_" + map.get("wrk_no").toString());
+                redisUtil.del("wrk_no_" + redisCommand.getWrkNo());
 
                 if (!assignCommand.getAuto()) {
                     //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅
-                    if (assignCommand.getTaskMode() == 9) {
-                        //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
-                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-                        //浠诲姟鍙锋竻闆�
-                        shuttleProtocol.setTaskNo((short) 0);
-                        //鏍囪澶嶄綅
-                        shuttleProtocol.setPakMk(true);
-                        //浠诲姟鎸囦护娓呴浂
-                        shuttleProtocol.setAssignCommand(null);
-                    }
+                    //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                    //浠诲姟鍙锋竻闆�
+                    shuttleProtocol.setTaskNo((short) 0);
+                    //鏍囪澶嶄綅
+                    shuttleProtocol.setPakMk(true);
                     News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
                 }else {
                     if (!assignCommand.getCharge()) {
@@ -846,22 +830,22 @@
     /**
      * 妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈�
      */
-    private boolean checkLiftStation(ShuttleAssignCommand assignCommand) {
+    private boolean checkLiftStation(Short wrkNo) {
         //璇诲彇redis鏁版嵁
-        if (assignCommand == null) {
+        if (wrkNo == null) {
             return false;
         }
 
-        Object o = redisUtil.get("wrk_no_" + assignCommand.getTaskNo());
+        Object o = redisUtil.get("wrk_no_" + wrkNo);
         if (o == null) {
             return false;
         }
-        HashMap map = JSON.parseObject(o.toString(), HashMap.class);
+        ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
         //褰撳墠姝ュ簭
-        int commandStep = Integer.parseInt(map.get("commandStep").toString());
+        int commandStep = redisCommand.getCommandStep();
 
         //妫�娴嬫槸鍚﹀瓨鍦ㄦ彁鍗囨満鍙g殑鎸囦护
-        List<ShuttleCommand> commands = assignCommand.getCommands();
+        List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands();
         BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
         ArrayList<Short> qrCodeValues = new ArrayList<>();
         for (BasDevp basDevp : basDevpService.selectList(null)) {
@@ -939,9 +923,9 @@
         liftProtocol.setShuttleNo(shuttleProtocol.getShuttleNo());//璁剧疆鍥涘悜绌挎杞﹀彿
         liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
         liftProtocol.setSecurityMk(true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満
-        map.put("liftSecurityMk", true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満
+        redisCommand.setLiftSecurityMk(true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-        redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
+        redisUtil.set("wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
 
         //鍛戒护list
         ArrayList<LiftCommand> liftCommands = new ArrayList<>();
@@ -977,10 +961,10 @@
             return false;
         }
 
-        HashMap map = JSON.parseObject(o.toString(), HashMap.class);
+        ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
         List<ShuttleCommand> commands = assignCommand.getCommands();
         //褰撳墠姝ュ簭
-        int commandStep = Integer.parseInt(map.get("commandStep").toString());
+        int commandStep = redisCommand.getCommandStep();
         //path璺緞鏁扮洰
         int size = commands.size();
 
@@ -1041,9 +1025,9 @@
         moveCommand.setStartCodeNum(command.getStartCodeNum());//瀛樺叆鐩爣搴撲綅鍙�
         list.add(moveCommand);
 
-        map.put("errorCommands", list);
+        redisCommand.setErrorCommands(list);
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-        redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
+        redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand));
         shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.FIXING);
         return true;
     }

--
Gitblit v1.9.1