From b757ac18d7aab051f72c8f52c546c7fd715a8196 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 03 十二月 2024 15:53:18 +0800
Subject: [PATCH] #算法优化

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java |  204 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 172 insertions(+), 32 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 32d18d7..aa74579 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
@@ -10,20 +10,25 @@
 import com.zy.asrs.framework.common.SpringUtils;
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wcs.common.ExecuteSupport;
+import com.zy.asrs.wcs.core.domain.param.ShuttleMoveLocParam;
+import com.zy.asrs.wcs.core.entity.BasLift;
 import com.zy.asrs.wcs.core.entity.BasShuttle;
 import com.zy.asrs.wcs.core.entity.Loc;
 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.*;
+import com.zy.asrs.wcs.core.service.BasLiftService;
 import com.zy.asrs.wcs.core.service.BasShuttleService;
 import com.zy.asrs.wcs.core.service.LocService;
+import com.zy.asrs.wcs.core.utils.LiftDispatcher;
 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;
 import com.zy.asrs.wcs.rcs.entity.DeviceDataLog;
+import com.zy.asrs.wcs.rcs.model.CommandResponse;
 import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
 import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
@@ -45,7 +50,7 @@
 @SuppressWarnings("all")
 public class SurayShuttleThread implements ShuttleThread {
 
-    private static final String API_URL = "http://127.0.0.1:8082";
+    private static String API_URL = "http://127.0.0.1:8082";
 
     private Device device;
     private RedisUtil redisUtil;
@@ -54,6 +59,7 @@
     public SurayShuttleThread(Device device,RedisUtil redisUtil) {
         this.device = device;
         this.redisUtil = redisUtil;
+        API_URL = "http://" + device.getIp() + ":" + device.getPort();
     }
 
     @Override
@@ -122,7 +128,7 @@
                 //褰撳墠浜岀淮鐮�
                 shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
                 //鐢垫睜鐢甸噺
-                shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0%" : data.getString("battery"));
+                shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0" : data.getString("battery"));
                 //鏁呴殰
                 shuttleProtocol.setErrorCode(deviceStatus == 6 ? "1" : "0");
 
@@ -184,6 +190,7 @@
                     basShuttle.setStatus(1);
                     basShuttle.setDeleted(0);
                     basShuttle.setHostId(device.getHostId());
+                    basShuttle.setDeviceId(device.getId().intValue());
                     shuttleService.save(basShuttle);
                 }
                 //浠诲姟鍙�
@@ -217,10 +224,15 @@
 
     @Override
     public ShuttleProtocol getStatus() {
+        return getStatus(true);
+    }
+
+    @Override
+    public ShuttleProtocol getStatus(boolean clone) {
         if (this.shuttleProtocol == null) {
             return null;
         }
-        return this.shuttleProtocol.clone();
+        return clone ? this.shuttleProtocol.clone() : this.shuttleProtocol;
     }
 
     @Override
@@ -229,11 +241,23 @@
     }
 
     @Override
-    public synchronized boolean movePath(List<NavigateNode> nodes, Integer taskNo) {
+    public synchronized CommandResponse movePath(List<NavigateNode> nodes, Integer taskNo) {
+        CommandResponse response = new CommandResponse(false);
         try {
+            NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
+            //榛樿鍦板浘姣嶈建鏂瑰悜x
+            String mapDirection = "x";
+            DictService dictService = SpringUtils.getBean(DictService.class);
+            Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>()
+                    .eq(Dict::getFlag, "direction_map")
+                    .eq(Dict::getStatus, 1));
+            if (dict != null) {
+                mapDirection = dict.getValue();
+            }
+
             String loginToken = requestLoginToken();
             if (loginToken == null) {
-                return false;
+                return response;
             }
 
             HashMap<String, Object> headers = new HashMap<>();
@@ -241,7 +265,7 @@
 
             ArrayList<HashMap<String, Object>> modes = new ArrayList<>();
             //鑾峰彇鍒嗘璺緞
-            ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodes);
+            ArrayList<ArrayList<NavigateNode>> data = navigateUtils.getSectionPath(nodes);
             for (int idx = 0; idx < data.size(); idx++) {
                 ArrayList<NavigateNode> sectionNodes = data.get(idx);
                 boolean isRemoveFooterNode = false;//鏄惁鍓旈櫎灏捐妭鐐�
@@ -255,7 +279,7 @@
                 NavigateNode startPath = sectionNodes.get(0);
                 //缁撴潫璺緞
                 NavigateNode targetPath = sectionNodes.get(sectionNodes.size() - 1);
-                if (ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT
+                if (mapDirection.equals("y") && ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT
                         || ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.RIGHT) {
                     //姣嶈建鏂瑰悜
                     oper = 5;
@@ -289,7 +313,7 @@
             param.put("taskId", taskNo);
             param.put("nodeNum", nodes.size());
             param.put("modes", modes);
-            String response = new HttpHandler.Builder()
+            String responseStr = new HttpHandler.Builder()
                     .setUri(API_URL)
                     .setPath("/RDS/runRoute")
                     .setHeaders(headers)
@@ -297,29 +321,36 @@
                     .setTimeout(60, TimeUnit.SECONDS)
                     .build()
                     .doPost();
-            JSONObject jsonObject = JSON.parseObject(response);
+            JSONObject jsonObject = JSON.parseObject(responseStr);
             Integer code = jsonObject.getInteger("code");
+            System.out.println("璺緞涓嬪彂" + taskNo);
+            System.out.println(JSON.toJSONString(jsonObject));
+            System.out.println(JSON.toJSONString(param));
             if (code.equals(200)) {
-                return true;
+                System.out.println("璺緞涓嬪彂" + taskNo);
+                response.setResult(true);
+                response.setMessage(responseStr);
+                return response;
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return false;
+        return response;
     }
 
     @Override
-    public synchronized boolean move(ShuttleCommand command) {
+    public synchronized CommandResponse move(ShuttleCommand command) {
+        CommandResponse response = new CommandResponse(false);
         try {
             String loginToken = requestLoginToken();
             if (loginToken == null) {
-                return false;
+                return response;
             }
 
             HashMap<String, Object> headers = new HashMap<>();
             headers.put("Authorization", "Bearer " + loginToken);
 
-            String response = new HttpHandler.Builder()
+            String responseStr = new HttpHandler.Builder()
                     .setUri(API_URL)
                     .setPath("/RDS/runOrder")
                     .setHeaders(headers)
@@ -327,30 +358,34 @@
                     .setTimeout(60, TimeUnit.SECONDS)
                     .build()
                     .doPost();
-            JSONObject jsonObject = JSON.parseObject(response);
+            JSONObject jsonObject = JSON.parseObject(responseStr);
             Integer code = jsonObject.getInteger("code");
+            System.out.println(JSON.toJSONString(command.getBody()));
             if (code.equals(200)) {
                 this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
-                return true;
+                response.setResult(true);
+                response.setMessage(responseStr);
+                return response;
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return false;
+        return response;
     }
 
     @Override
-    public synchronized boolean lift(ShuttleCommand command) {
+    public synchronized CommandResponse lift(ShuttleCommand command) {
+        CommandResponse response = new CommandResponse(false);
         try {
             String loginToken = requestLoginToken();
             if (loginToken == null) {
-                return false;
+                return response;
             }
 
             HashMap<String, Object> headers = new HashMap<>();
             headers.put("Authorization", "Bearer " + loginToken);
 
-            String response = new HttpHandler.Builder()
+            String responseStr = new HttpHandler.Builder()
                     .setUri(API_URL)
                     .setPath("/RDS/actionOrder")
                     .setHeaders(headers)
@@ -358,30 +393,33 @@
                     .setTimeout(60, TimeUnit.SECONDS)
                     .build()
                     .doPost();
-            JSONObject jsonObject = JSON.parseObject(response);
+            JSONObject jsonObject = JSON.parseObject(responseStr);
             Integer code = jsonObject.getInteger("code");
             if (code.equals(200)) {
                 this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
-                return true;
+                response.setResult(true);
+                response.setMessage(responseStr);
+                return response;
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return false;
+        return response;
     }
 
     @Override
-    public synchronized boolean charge(ShuttleCommand command) {
+    public synchronized CommandResponse charge(ShuttleCommand command) {
+        CommandResponse response = new CommandResponse(false);
         try {
             String loginToken = requestLoginToken();
             if (loginToken == null) {
-                return false;
+                return response;
             }
 
             HashMap<String, Object> headers = new HashMap<>();
             headers.put("Authorization", "Bearer " + loginToken);
 
-            String response = new HttpHandler.Builder()
+            String responseStr = new HttpHandler.Builder()
                     .setUri(API_URL)
                     .setPath("/RDS/actionOrder")
                     .setHeaders(headers)
@@ -389,23 +427,60 @@
                     .setTimeout(60, TimeUnit.SECONDS)
                     .build()
                     .doPost();
-            JSONObject jsonObject = JSON.parseObject(response);
+            JSONObject jsonObject = JSON.parseObject(responseStr);
             Integer code = jsonObject.getInteger("code");
             if (code.equals(200)) {
                 this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
-                return true;
+                response.setResult(true);
+                response.setMessage(responseStr);
+                return response;
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return false;
+        return response;
     }
 
     @Override
-    public synchronized boolean reset(ShuttleCommand command) {
+    public synchronized CommandResponse reset(ShuttleCommand command) {
         setSyncTaskNo(0);
         setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-        return true;
+        enableMoveLoc(null, false);
+        return new CommandResponse(true, JSON.toJSONString(command));
+    }
+
+    @Override
+    public CommandResponse updateLocation(ShuttleCommand command) {
+        CommandResponse response = new CommandResponse(false);
+        try {
+            String loginToken = requestLoginToken();
+            if (loginToken == null) {
+                return response;
+            }
+
+            HashMap<String, Object> headers = new HashMap<>();
+            headers.put("Authorization", "Bearer " + loginToken);
+
+            String responseStr = new HttpHandler.Builder()
+                    .setUri(API_URL)
+                    .setPath("/RDS/changeLocation")
+                    .setHeaders(headers)
+                    .setJson(command.getBody())
+                    .setTimeout(60, TimeUnit.SECONDS)
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(responseStr);
+            Integer code = jsonObject.getInteger("code");
+            if (code.equals(200)) {
+                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
+                response.setResult(true);
+                response.setMessage(responseStr);
+                return response;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return response;
     }
 
     @Override
@@ -491,7 +566,7 @@
                 if (shuttleService == null) {
                     return false;
                 }
-                BasShuttle basShuttle = shuttleService.getById(this.device.getDeviceNo());
+                BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, this.device.getId()));
                 if (basShuttle == null) {
                     return false;
                 }
@@ -608,6 +683,39 @@
     }
 
     @Override
+    public boolean enableMoveLoc(ShuttleMoveLocParam param, boolean enable) {
+        if (enable) {
+            shuttleProtocol.setMoveLoc(true);//寮�鍚窇搴�
+            shuttleProtocol.setMoveType(param.getMoveType());
+            shuttleProtocol.setXStart(param.getStartX());
+            shuttleProtocol.setXTarget(param.getTargetX());
+            shuttleProtocol.setXCurrent(param.getStartX());
+            shuttleProtocol.setYStart(param.getStartY());
+            shuttleProtocol.setYTarget(param.getTargetY());
+            shuttleProtocol.setYCurrent(param.getStartY());
+        }else {
+            shuttleProtocol.setMoveLoc(false);
+            shuttleProtocol.setMoveType(0);
+            shuttleProtocol.setXStart(0);
+            shuttleProtocol.setXTarget(0);
+            shuttleProtocol.setXCurrent(0);
+            shuttleProtocol.setYStart(0);
+            shuttleProtocol.setYTarget(0);
+            shuttleProtocol.setYCurrent(0);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean requestWaiting() {
+        if (this.shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.IDLE)) {
+            this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
     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");
@@ -626,11 +734,23 @@
         body.put("nodeY", loc.getBay());
         body.put("nodeZ", loc.getLev());
 
+        //妫�娴嬬洰鏍囩偣鏄惁涓烘彁鍗囨満
+        BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+        BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getRow, loc.getRow())
+                .eq(BasLift::getBay, loc.getBay())
+                .eq(BasLift::getHostId, this.device.getHostId()));
+        if (basLift != null) {
+            LiftDispatcher liftDispatcher = SpringUtils.getBean(LiftDispatcher.class);
+            Integer realLev = liftDispatcher.getLiftLevOffset(basLift.getDeviceId().intValue(), loc.getLev());
+            body.put("nodeZ", realLev);
+        }
+
         ShuttleCommand command = new ShuttleCommand();
         command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
         command.setBody(JSON.toJSONString(body));
         command.setMode(ShuttleCommandModeType.MOVE.id);
         command.setTargetLocNo(loc.getLocNo());
+        command.setTaskNo(taskNo);
         return command;
     }
 
@@ -647,6 +767,7 @@
         command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
         command.setBody(JSON.toJSONString(body));
         command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id);
+        command.setTaskNo(taskNo);
         return command;
     }
 
@@ -663,6 +784,25 @@
         command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
         command.setBody(JSON.toJSONString(body));
         command.setMode(charge ? ShuttleCommandModeType.CHARGE_OPEN.id : ShuttleCommandModeType.CHARGE_CLOSE.id);
+        command.setTaskNo(taskNo);
+        return command;
+    }
+
+    @Override
+    public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) {
+        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()));
+
+        String coord = "(" + Utils.getRow(locNo) + "," + Utils.getBay(locNo) + "," + Utils.getLev(locNo) + ")";
+        body.put("coord", coord);
+
+        ShuttleCommand command = new ShuttleCommand();
+        command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
+        command.setBody(JSON.toJSONString(body));
+        command.setMode(ShuttleCommandModeType.UPDATE_LOCATION.id);
+        command.setTaskNo(taskNo);
         return command;
     }
 

--
Gitblit v1.9.1