From a42ae1ffc20459dc46a88590bc4a94f9280f2d3d Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 10 五月 2024 15:31:28 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java |  146 ++++++++++++++++++++++++++----------------------
 1 files changed, 80 insertions(+), 66 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
index dd65297..9ca36f9 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
@@ -1,16 +1,17 @@
 package com.zy.asrs.wcs.core.action;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zy.asrs.wcs.common.ExecuteSupport;
-import com.zy.asrs.wcs.core.entity.BasShuttle;
 import com.zy.asrs.wcs.core.entity.Loc;
 import com.zy.asrs.wcs.core.entity.Task;
 import com.zy.asrs.wcs.core.model.NavigateNode;
 import com.zy.asrs.wcs.core.model.command.ShuttleAssignCommand;
 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.MotionCtgType;
 import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType;
 import com.zy.asrs.wcs.core.model.enums.ShuttleTaskModeType;
 import com.zy.asrs.wcs.core.service.BasShuttleService;
@@ -32,6 +33,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 @Component
 public class ShuttleAction {
@@ -46,6 +48,8 @@
     private LocService locService;
     @Autowired
     private ShuttleDispatcher shuttleDispatcher;
+    @Autowired
+    private ObjectMapper objectMapper;
 
     public synchronized boolean assignWork(Device device, ShuttleAssignCommand assignCommand) {
         ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
@@ -61,7 +65,7 @@
         ShuttleRedisCommand redisCommand = new ShuttleRedisCommand();
 
         redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-        redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙�
+        redisCommand.setTaskNo(assignCommand.getTaskNo());//宸ヤ綔鍙�
         redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭
         redisCommand.setAssignCommand(assignCommand);//鍛戒护
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
@@ -71,12 +75,12 @@
                     || assignCommand.getTaskMode() == ShuttleTaskModeType.MOVE_LOC_NO.id
                     || assignCommand.getTaskMode() == ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id) {
                 //涓嬪彂琛岄┒璺緞
-                boolean result = shuttleThread.movePath(assignCommand.getNodes(), assignCommand.getTaskNo());
+                boolean result = shuttleThread.movePath(assignCommand.getNodes(), assignCommand.getDeviceTaskNo());
                 if (!result) {
                     return false;
                 }
             }
-            shuttleProtocol.setTaskNo(assignCommand.getTaskNo());
+            shuttleProtocol.setSyncTaskNo(assignCommand.getTaskNo());
             return true;
         }
         return false;
@@ -88,10 +92,13 @@
             return false;
         }
 
-        JSONObject jsonObject = JSON.parseObject(String.valueOf(obj));
-        System.out.println(JSON.parseObject(String.valueOf(obj)));
-        ShuttleRedisCommand redisCommand = JSON.parseObject(String.valueOf(obj), ShuttleRedisCommand.class);
-        System.out.println(JSON.toJSONString(redisCommand));
+        ShuttleRedisCommand redisCommand = null;
+        try {
+            redisCommand = objectMapper.readValue(String.valueOf(obj), ShuttleRedisCommand.class);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+
         if (redisCommand == null) {
             return false;
         }
@@ -106,10 +113,8 @@
             return false;
         }
 
-        //鍒ゆ柇璁惧鏄惁绌洪棽
-        if (!shuttleThread.isIdle(() -> {
-            return shuttleProtocol.getTaskNo().equals(taskNo);
-        })) {
+        //鍒ゆ柇宸ヤ綔鍙锋槸鍚︾浉鍚�
+        if (!shuttleProtocol.getTaskNo().equals(taskNo)) {
             return false;
         }
 
@@ -146,10 +151,11 @@
                 // 鎵樼洏椤跺崌
                 //鍒ゆ柇鏄惁椤跺崌鍒颁綅
                 if (shuttleProtocol.getHasLift()) {
-                    //鍒ゆ柇鏄惁鏈夌墿
-                    if (shuttleProtocol.getHasPallet()) {
-                        command.setComplete(true);
-                    }
+                    command.setComplete(true);
+//                    //鍒ゆ柇鏄惁鏈夌墿
+//                    if (shuttleProtocol.getHasPallet()) {
+//                        command.setComplete(true);
+//                    }
                 }
             } else if (command.getMode() == ShuttleCommandModeType.PALLET_DOWN.id) {
                 // 鎵樼洏涓嬮檷鍛戒护
@@ -168,7 +174,7 @@
             }
 
             // 鏇存柊redis鏁版嵁
-            redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
+            redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getTaskNo(), JSON.toJSONString(redisCommand));
 
             if (!command.getComplete()) {
                 return false;
@@ -181,27 +187,27 @@
 
                 // 绯荤粺浠诲姟
                 if (assignCommand.getAuto()) {
-//                    if (!assignCommand.getCharge()) {
-//                        //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
-//                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
-//                    }else {
-//                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
-//                    }
+                    if (!assignCommand.getCharge()) {
+                        //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+                        shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+                    }else {
+                        shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
+                    }
                     News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
 
                     // 鎵嬪姩浠诲姟
                 } else {
                     //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅绌洪棽鐘舵��
-                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                    shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                     //浠诲姟鍙锋竻闆�
-                    shuttleProtocol.setTaskNo(0);
+                    shuttleThread.setSyncTaskNo(0);
                     //鏍囪澶嶄綅
-                    shuttleProtocol.setPakMk(true);
+                    shuttleThread.setPakMk(true);
                     News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
                 }
 
                 //鍒犻櫎redis
-                redisUtil.del(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getWrkNo());
+                redisUtil.del(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getTaskNo());
                 return false;//绂佹鍐嶄笅鍙戝懡浠�
             }
         }
@@ -209,17 +215,32 @@
         //鍙栧嚭鍛戒护
         ShuttleCommand command = commands.get(commandStep);
 
+        Integer mode = command.getMode();
+        //鍒ゆ柇璁惧鏄惁绌洪棽
+        if (!shuttleThread.isDeviceIdle(new ExecuteSupport() {
+            @Override
+            public Boolean judgement() {
+                if (ShuttleCommandModeType.CHARGE_CLOSE.id.equals(mode)) {//鍏抽棴鍏呯數motion
+                    return false;//涓嶉渶瑕佸垽鏂姸鎬�
+                }
+                return true;//闇�瑕佸垽鏂姸鎬�
+            }
+        })) {
+            return false;
+        }
+
         // 涓嬪彂鍛戒护
         if (!write(command, device)) {
             News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
             return false;
         }
 
+        shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
         commandStep++;
         //鏇存柊redis鏁版嵁
         redisCommand.setCommandStep(commandStep);
         //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-        redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
+        redisUtil.set(DeviceRedisConstant.SHUTTLE_WORK_FLAG + redisCommand.getTaskNo(), JSON.toJSONString(redisCommand));
         return true;
     }
 
@@ -229,8 +250,7 @@
         if (shuttleThread == null) {
             return;
         }
-
-        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(false);
         if (shuttleProtocol == null) {
             return;
         }
@@ -260,35 +280,6 @@
         }
 
         if (shuttleProtocol.getMoveType() == 0) {//璺戣建閬�
-            ArrayList<String> locs = new ArrayList<>();
-            for (int i = shuttleProtocol.getXCurrent(); i <= shuttleProtocol.getXTarget(); i++) {
-                String locNo = Utils.getLocNo(i, shuttleProtocol.getYCurrent(), lev);
-                locs.add(locNo);
-            }
-
-            List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>()
-                    .in(Loc::getLocNo, locs));
-            if (locList.isEmpty()) {
-                //绌哄簱浣�
-                shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
-                return;
-            }
-
-            Loc start = locList.get(0);
-            Loc target = locList.get(locList.size() - 1);
-            //鍒ゆ柇灏忚溅鏄惁鍦ㄨ捣鐐逛綅缃�
-            if (!shuttleProtocol.getCurrentLocNo().equals(start.getLocNo())) {//涓嶅湪璧风偣浣嶇疆锛岃皟搴﹀幓璧风偣浣嶇疆
-                shuttleDispatcher.generateMoveTask(device, start.getLocNo());
-            }else {
-                //鍦ㄨ捣鐐逛綅缃紝璋冨害鍘荤洰鏍囦綅缃�
-                if (shuttleProtocol.getCurrentLocNo().equals(target.getLocNo())) {
-                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);//灏忚溅鍜岀洰鏍囦綅缃竴鑷达紝璺宠繃
-                }else {
-                    shuttleDispatcher.generateMoveTask(device, start.getLocNo());
-                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
-                }
-            }
-        } else if (shuttleProtocol.getMoveType() == 1) {//璺戝簱浣�
             Integer xCurrent = shuttleProtocol.getXCurrent();
             if (xCurrent > shuttleProtocol.getXTarget()) {//褰揦鍊煎ぇ浜嶺鐩爣鍊硷紝杩涜褰掗浂涓擸鏂瑰悜+1
                 shuttleProtocol.setXCurrent(shuttleProtocol.getXStart());
@@ -317,6 +308,35 @@
             } else {
                 shuttleDispatcher.generateMoveTask(device, target.getLocNo());
                 shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
+            }
+        } else if (shuttleProtocol.getMoveType() == 1) {//璺戝簱浣�
+            ArrayList<String> locs = new ArrayList<>();
+            for (int i = shuttleProtocol.getXCurrent(); i <= shuttleProtocol.getXTarget(); i++) {
+                String locNo = Utils.getLocNo(i, shuttleProtocol.getYCurrent(), lev);
+                locs.add(locNo);
+            }
+
+            List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>()
+                    .in(Loc::getLocNo, locs));
+            if (locList.isEmpty()) {
+                //绌哄簱浣�
+                shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+                return;
+            }
+
+            Loc start = locList.get(0);
+            Loc target = locList.get(locList.size() - 1);
+            //鍒ゆ柇灏忚溅鏄惁鍦ㄨ捣鐐逛綅缃�
+            if (!shuttleProtocol.getCurrentLocNo().equals(start.getLocNo())) {//涓嶅湪璧风偣浣嶇疆锛岃皟搴﹀幓璧风偣浣嶇疆
+                shuttleDispatcher.generateMoveTask(device, start.getLocNo());
+            }else {
+                //鍦ㄨ捣鐐逛綅缃紝璋冨害鍘荤洰鏍囦綅缃�
+                if (shuttleProtocol.getCurrentLocNo().equals(target.getLocNo())) {
+                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);//灏忚溅鍜岀洰鏍囦綅缃竴鑷达紝璺宠繃
+                }else {
+                    shuttleDispatcher.generateMoveTask(device, start.getLocNo());
+                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+                }
             }
         } else if (shuttleProtocol.getMoveType() == 2) {//姣嶈建閬撳惊鐜窇
             Integer xCurrent = shuttleProtocol.getXCurrent();
@@ -386,12 +406,6 @@
             result = shuttleThread.reset(command);
         }
         return result;
-    }
-
-    public static void main(String[] args) {
-        String s = "{\"commandStep\":0,\"liftSecurityMk\":false,\"shuttleNo\":6,\"wrkNo\":30095,\"assignCommand\":{\"sourceLocNo\":\"3-1-1\",\"auto\":true,\"shuttleNo\":6,\"taskMode\":19,\"charge\":false,\"nodes\":[{\"isInflectionPoint\":false,\"f\":0,\"g\":0,\"h\":0,\"x\":3,\"y\":1,\"nodeZ\":1,\"z\":1,\"direction\":\"top\"},{\"isInflectionPoint\":false,\"f\":1,\"g\":0,\"h\":1,\"x\":2,\"y\":1,\"nodeZ\":1,\"z\":1},{\"isInflectionPoint\":false,\"f\":1,\"g\":1,\"h\":0,\"x\":1,\"y\":1,\"nodeZ\":1,\"z\":1}],\"locNo\":\"1-1-1\",\"taskNo\":30095,\"deviceId\":6,\"commands\":[{\"mode\":1,\"targetLocNo\":\"1-1-1\",\"shuttleNo\":78,\"nodes\":[{\"isInflectionPoint\":false,\"moveDistance\":1000,\"f\":0,\"g\":0,\"h\":0,\"x\":3,\"y\":1,\"nodeZ\":1,\"z\":1,\"direction\":\"top\"},{\"isInflectionPoint\":false,\"moveDistance\":1000,\"f\":1,\"g\":0,\"h\":1,\"x\":2,\"y\":1,\"nodeZ\":1,\"z\":1,\"direction\":\"top\"},{\"isInflectionPoint\":false,\"moveDistance\":1000,\"f\":1,\"g\":1,\"h\":0,\"x\":1,\"y\":1,\"nodeZ\":1,\"z\":1,\"direction\":\"top\"}],\"taskNo\":0,\"body\":\"{\\\"messageName\\\":\\\"runOrder\\\",\\\"nodeX\\\":1,\\\"nodeY\\\":1,\\\"msgTime\\\":\\\"2024-04-12 17:39:16\\\",\\\"nodeZ\\\":1,\\\"deviceNo\\\":78,\\\"taskId\\\":5}\",\"complete\":false}]}}";
-        ShuttleRedisCommand shuttleRedisCommand = JSON.parseObject(s, ShuttleRedisCommand.class);
-        System.out.println(shuttleRedisCommand);
     }
 
 }

--
Gitblit v1.9.1