From dad3cd8ed8afa86b651bb1a053421e7aa2b8c7ac Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期日, 05 五月 2024 16:31:09 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java |   88 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 71 insertions(+), 17 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
index 9311484..32d18d7 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -15,11 +15,11 @@
 import com.zy.asrs.wcs.core.model.NavigateNode;
 import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
 import com.zy.asrs.wcs.core.model.command.ShuttleRedisCommand;
-import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType;
-import com.zy.asrs.wcs.core.model.enums.ShuttleRunDirection;
+import com.zy.asrs.wcs.core.model.enums.*;
 import com.zy.asrs.wcs.core.service.BasShuttleService;
 import com.zy.asrs.wcs.core.service.LocService;
 import com.zy.asrs.wcs.core.utils.NavigateUtils;
+import com.zy.asrs.wcs.core.utils.Utils;
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.OutputQueue;
 import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
@@ -31,6 +31,8 @@
 import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
 import com.zy.asrs.wcs.core.utils.RedisUtil;
 import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.system.entity.Dict;
+import com.zy.asrs.wcs.system.service.DictService;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
@@ -111,6 +113,11 @@
                     //绂荤嚎
                     shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
                 }
+
+                if(deviceStatus != 4 || deviceStatus != 6 || deviceStatus != 7 || deviceStatus != 8 || deviceStatus != 255 || deviceStatus != -1) {
+                    shuttleProtocol.setMode(1);//鑷姩鐘舵��
+                }
+
                 shuttleProtocol.setDeviceStatus(deviceStatus);
                 //褰撳墠浜岀淮鐮�
                 shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
@@ -134,6 +141,8 @@
                 extend.setStatusDescription(data.getString("statusDescription"));//鐘舵�佹弿杩�
                 shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁
 
+                //鏈�杩戜竴娆″湪绾挎椂闂�
+                shuttleProtocol.setLastOnlineTime(System.currentTimeMillis());
                 ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
 
                 //灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
@@ -208,6 +217,9 @@
 
     @Override
     public ShuttleProtocol getStatus() {
+        if (this.shuttleProtocol == null) {
+            return null;
+        }
         return this.shuttleProtocol.clone();
     }
 
@@ -274,7 +286,7 @@
             param.put("messageName", "runRoute");
             param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
             param.put("deviceNo", device.getDeviceNo());
-            param.put("taskId", generateDeviceTaskNo(taskNo));
+            param.put("taskId", taskNo);
             param.put("nodeNum", nodes.size());
             param.put("modes", modes);
             String response = new HttpHandler.Builder()
@@ -318,6 +330,7 @@
             JSONObject jsonObject = JSON.parseObject(response);
             Integer code = jsonObject.getInteger("code");
             if (code.equals(200)) {
+                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
                 return true;
             }
         } catch (Exception e) {
@@ -348,6 +361,7 @@
             JSONObject jsonObject = JSON.parseObject(response);
             Integer code = jsonObject.getInteger("code");
             if (code.equals(200)) {
+                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
                 return true;
             }
         } catch (Exception e) {
@@ -378,6 +392,7 @@
             JSONObject jsonObject = JSON.parseObject(response);
             Integer code = jsonObject.getInteger("code");
             if (code.equals(200)) {
+                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
                 return true;
             }
         } catch (Exception e) {
@@ -388,7 +403,9 @@
 
     @Override
     public synchronized boolean reset(ShuttleCommand command) {
-        return false;
+        setSyncTaskNo(0);
+        setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+        return true;
     }
 
     @Override
@@ -399,10 +416,12 @@
     @Override
     public boolean isIdle(ExecuteSupport support) {
         if (null != support) {
-            if (!support.judgement()) {
-                return false;
+            Boolean judgement = support.judgement();
+            if (judgement != null && !judgement) {
+                return true;
             }
         }
+
         if (this.shuttleProtocol.getDeviceStatus() == null
                 || this.shuttleProtocol.getPakMk() == null
                 || this.shuttleProtocol.getErrorCode() == null
@@ -414,13 +433,26 @@
         boolean res = (this.shuttleProtocol.getDeviceStatus() == 3 || this.shuttleProtocol.getDeviceStatus() == 11)
                 && this.shuttleProtocol.getPakMk()
                 && this.shuttleProtocol.getErrorCode().equals("0")
-                && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id)
-                ;
+                && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
+                || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id
+                || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id);
         return res;
     }
 
     @Override
     public boolean isDeviceIdle() {
+        return isDeviceIdle(null);
+    }
+
+    @Override
+    public boolean isDeviceIdle(ExecuteSupport support) {
+        if (null != support) {
+            Boolean judgement = support.judgement();
+            if (judgement != null && !judgement) {
+                return true;
+            }
+        }
+
         if (this.shuttleProtocol.getDeviceStatus() == null
                 || this.shuttleProtocol.getPakMk() == null
                 || this.shuttleProtocol.getErrorCode() == null
@@ -469,7 +501,6 @@
                 }
                 return Integer.valueOf(this.shuttleProtocol.getBatteryPower()) < chargeLine;
             } catch (Exception e) {
-                News.error("fail", e);
                 return false;
             }
         }
@@ -490,11 +521,22 @@
 
     @Override
     public boolean isChargingCompleted() {
+        Integer maxPower = 100;
+        DictService dictService = SpringUtils.getBean(DictService.class);
+        if (dictService != null) {
+            Dict chargeMaxValue = dictService.getOne(new LambdaQueryWrapper<Dict>()
+                    .eq(Dict::getFlag, "chargeMaxValue")
+                    .eq(Dict::getStatus, 1));
+            if (chargeMaxValue != null) {
+                maxPower = Integer.parseInt(chargeMaxValue.getValue());
+            }
+        }
+
         if (this.shuttleProtocol.getBatteryPower() == null) {
             return false;
         }
 
-        if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= 100) {
+        if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= maxPower) {
             return true;
         }
         return false;
@@ -527,12 +569,24 @@
     }
 
     @Override
-    public int generateDeviceTaskNo(int taskNo) {
-        int no = taskNo % 255;
-        if (no <= 1) {
-            no = 2;
+    public int generateDeviceTaskNo(int taskNo, MotionCtgType motionCtgType) {
+        int deviceTaskNo = taskNo;
+        try {
+            deviceTaskNo = Utils.getTaskNo("SURAY_SHUTTLE");
+        } catch (Exception e) {
+            return taskNo;
         }
-        return no;
+
+        switch (Objects.requireNonNull(MotionCtgType.get(String.valueOf(motionCtgType)))){
+            case SHUTTLE_MOVE://绌挎杞︾Щ鍔�
+            case SHUTTLE_MOVE_LIFT_PALLET://绌挎杞﹂《鍗囧苟绉诲姩
+            case SHUTTLE_MOVE_DOWN_PALLET://绌挎杞︾Щ鍔ㄥ苟鎵樼洏涓嬮檷
+            case SHUTTLE_MOVE_FROM_LIFT://鍑烘彁鍗囨満
+            case SHUTTLE_MOVE_TO_LIFT://杩涙彁鍗囨満
+                return deviceTaskNo;
+            default:
+                return taskNo;
+        }
     }
 
     @Override
@@ -554,12 +608,12 @@
     }
 
     @Override
-    public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) {
+    public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) {
         HashMap<String, Object> body = new HashMap<>();
         body.put("messageName", "runOrder");
         body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
         body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
-        body.put("taskId", generateDeviceTaskNo(taskNo));
+        body.put("taskId", taskNo);
 
         LocService locService = SpringUtils.getBean(LocService.class);
         Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()

--
Gitblit v1.9.1