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