From 81d537833adcbd5ef5333453e495eae2cac9f496 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期一, 21 七月 2025 15:01:51 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java |   20 ++++++++++
 src/main/java/com/zy/common/model/NavigateNode.java                  |    1 
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java             |    8 ++--
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java          |    2 
 src/main/java/com/zy/common/utils/NavigateUtils.java                 |   74 ++++++++++++++++++++++++++++--------
 src/main/java/com/zy/core/MainProcess.java                           |    4 +-
 src/main/resources/application.yml                                   |    4 ++
 7 files changed, 89 insertions(+), 24 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 68e701d..69a2f13 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1301,7 +1301,7 @@
                 return false;
             }
 
-            if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+            if (wrkMast.getLocNo().equals(shuttleProtocol.getCurrentLocNo())) {
                 //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
                 wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);
                 wrkMast.setModiTime(new Date());
diff --git a/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java b/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java
new file mode 100644
index 0000000..121a70c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.task.main;
+
+import com.zy.asrs.service.impl.MainServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ShuttleTaskExecuteScheduler {
+
+    @Autowired
+    private MainServiceImpl mainService;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    public void shuttleFinished() {
+        //鍥涘悜绌挎杞︿换鍔″畬鎴�
+        mainService.shuttleFinished();
+    }
+
+}
diff --git a/src/main/java/com/zy/common/model/NavigateNode.java b/src/main/java/com/zy/common/model/NavigateNode.java
index 744fec3..c1e1a70 100644
--- a/src/main/java/com/zy/common/model/NavigateNode.java
+++ b/src/main/java/com/zy/common/model/NavigateNode.java
@@ -21,6 +21,7 @@
     private String direction;//琛岃蛋鏂瑰悜
     private Integer moveDistance;//琛岃蛋璺濈
     private Integer nodeValue;//鑺傜偣鏁版嵁
+    private Boolean linePartAllowGo = false;//鐩寸嚎娈甸儴鍒嗭紝鍏佽鐩存帴琛岃蛋
 
     public NavigateNode(int x, int y) {
         this.x = x;
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index db95875..c6e94ab 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -189,7 +189,7 @@
     }
 
     //璁$畻甯︽湯绔钀借矾寰�
-    public ArrayList<ArrayList<NavigateNode>> calcEndPath(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
+    public List<List<NavigateNode>> calcEndPath(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
         //璁$畻璺緞
         List<NavigateNode> navigateNodes = calc(startPoint, endPoint, mapTypes, shuttlePoints, whites);
         if (navigateNodes == null) {
@@ -198,7 +198,7 @@
         }
 
         //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> partList = this.getSectionPath(navigateNodes);
+        List<List<NavigateNode>> partList = this.getSectionPath(navigateNodes);
         //鏍规嵁浼犲叆鐨勬湯绔钀借矾寰勶紝鎵惧埌鏈鐐逛綅
         int partResult = partList.size() - lastPathPart;
         if (partResult == 0) {//璺緞鏁伴噺鐩稿悓鏃犻渶鍒嗗壊
@@ -207,7 +207,7 @@
             throw new CoolException("鍒嗘璺緞涓庢湯绔矾寰勬暟閲忚绠楀紓甯�");
         }
         int pathIdx = partResult - 1;
-        ArrayList<ArrayList<NavigateNode>> filterList = new ArrayList<>();
+        List<List<NavigateNode>> filterList = new ArrayList<>();
         for (int i = 0; i <= pathIdx; i++) {
             filterList.add(partList.get(i));
         }
@@ -216,7 +216,7 @@
 
     //璁$畻鏈娈佃惤鍦板潃
     public String calcEndLocation(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int lastPathPart) {
-        ArrayList<ArrayList<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapTypes, shuttlePoints, whites, lastPathPart);
+        List<List<NavigateNode>> endPath = calcEndPath(startPoint, endPoint, mapTypes, shuttlePoints, whites, lastPathPart);
         if (endPath == null) {
             return null;
         }
@@ -224,13 +224,8 @@
         return findTargetLocation(endPath);
     }
 
-    public String findTargetLocation(List<NavigateNode> nodeList) {
-        ArrayList<ArrayList<NavigateNode>> sectionPath = this.getSectionPath(nodeList);
-        return findTargetLocation(sectionPath);
-    }
-
-    public String findTargetLocation(ArrayList<ArrayList<NavigateNode>> partList) {
-        ArrayList<NavigateNode> nodes = partList.get(partList.size() - 1);
+    public String findTargetLocation(List<List<NavigateNode>> partList) {
+        List<NavigateNode> nodes = partList.get(partList.size() - 1);
         NavigateNode targetNode = nodes.get(0);
         String locNo = NavigatePositionConvert.nodeToLocNo(targetNode);
         return locNo;
@@ -292,10 +287,10 @@
      * 鍔犺浆寮妭鐐�
      * 鑾峰彇鍒嗘璺緞锛屾瘡褰撴湁涓�涓嫄鐐瑰垯杩涜涓�娆″垎娈碉紝鏈�缁堣繑鍥炴�诲垎娈垫暟鎹�
      */
-    public ArrayList<ArrayList<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
-        ArrayList<ArrayList<NavigateNode>> list = new ArrayList<>();
+    public List<List<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
+        List<List<NavigateNode>> list = new ArrayList<>();
 
-        ArrayList<NavigateNode> data = new ArrayList<>();
+        List<NavigateNode> data = new ArrayList<>();
         String direction = mapList.get(0).getDirection();//琛岃蛋鏂瑰悜
 
         for (NavigateNode navigateNode : mapList) {
@@ -318,7 +313,52 @@
         //灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏�
         list.add(data);
 
-        return list;
+        List<List<NavigateNode>> paths = getSectionPathToSplitOverLength(list);
+        return paths;
+    }
+
+    //鍒嗘璺緞-澶勭悊瓒呴暱鐩寸嚎娈佃矾寰�
+    public List<List<NavigateNode>> getSectionPathToSplitOverLength(List<List<NavigateNode>> list) {
+        List<List<NavigateNode>> paths = new ArrayList<>();
+        int overLength = 9;
+        for (List<NavigateNode> nodes : list) {
+            if (nodes.size() > overLength) {
+                List<NavigateNode> copy = JSON.parseArray(JSON.toJSONString(nodes), NavigateNode.class);
+                List<NavigateNode> tmp = new ArrayList<>();
+                int tmpCount = 0;
+                NavigateNode lastNode = null;
+                for (NavigateNode node : copy) {
+                    tmp.add(node);
+                    tmpCount++;
+
+                    if(tmpCount >= overLength) {
+                        if (lastNode == null) {
+                            NavigateNode startNode = tmp.get(0);
+                            startNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+                            tmp.set(0, startNode);
+                        }
+                        NavigateNode targetNode = tmp.get(tmp.size() - 1);
+                        targetNode.setLinePartAllowGo(true);//鐩寸嚎娈佃秴闀块儴鍒嗗厑璁哥洿鎺ヨ璧�
+                        if (lastNode != null) {
+                            tmp.add(0, lastNode);
+                        }
+
+                        paths.add(tmp);
+                        tmp = new ArrayList<>();
+                        tmpCount = 0;
+                        lastNode = targetNode;
+                    }
+                }
+
+                if (tmpCount > 0) {
+                    tmp.add(0, lastNode);
+                    paths.add(tmp);
+                }
+            }else {
+                paths.add(nodes);
+            }
+        }
+        return paths;
     }
 
     //鑾峰彇浠巟鐐瑰埌涓嬩竴鐐圭殑琛岃蛋璺濈
@@ -348,9 +388,9 @@
      * 鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂�
      */
     public Integer getOriginPathAllDistance(List<NavigateNode> path) {
-        ArrayList<ArrayList<NavigateNode>> sectionPath = getSectionPath(path);
+        List<List<NavigateNode>> sectionPath = getSectionPath(path);
         Integer allDistance = 0;
-        for (ArrayList<NavigateNode> navigateNodes : sectionPath) {
+        for (List<NavigateNode> navigateNodes : sectionPath) {
             Integer distance = getCurrentPathAllDistance(navigateNodes);
             allDistance += distance;
         }
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 170dc3e..4ad11e8 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -93,9 +93,9 @@
 
         List<ShuttleCommand> commands = new ArrayList<>();
         //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
+        List<List<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-        for (ArrayList<NavigateNode> nodes : data) {
+        for (List<NavigateNode> nodes : data) {
             //寮�濮嬭矾寰�
             NavigateNode startPath = nodes.get(0);
 
@@ -160,9 +160,9 @@
 
         List<ShuttleCommand> commands = new ArrayList<>();
         //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
+        List<List<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-        for (ArrayList<NavigateNode> nodes : data) {
+        for (List<NavigateNode> nodes : data) {
             //寮�濮嬭矾寰�
             NavigateNode startPath = nodes.get(0);
 
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 24c05dd..164f944 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -51,8 +51,8 @@
                     mainService.shuttleInExecute();
                     // 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
                     mainService.shuttleOutExecute();
-                    //鍥涘悜绌挎杞︿换鍔″畬鎴�
-                    mainService.shuttleFinished();
+//                    //鍥涘悜绌挎杞︿换鍔″畬鎴�
+//                    mainService.shuttleFinished();
                     //鎵ц绉诲簱浠诲姟
                     mainService.shuttleLocMoveExecute();
                     //璐у弶鎻愬崌鏈轰换鍔�
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 5e984ee..be50803 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -21,6 +21,10 @@
     port: 6379
     database: 0
 #    password: 123456
+  task:
+    scheduling:
+      pool:
+        size: 3
 
 mybatis-plus:
   mapper-locations: classpath:mapper/*.xml

--
Gitblit v1.9.1