From a4996f162b0ca63113f573e315e3ce4f5dce7ad3 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 05 六月 2024 15:39:37 +0800
Subject: [PATCH] #算法优化

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java |  121 ++++++++++++++++++++++++++++++----------
 1 files changed, 91 insertions(+), 30 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 6c02d01..1f1c557 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
@@ -11,6 +11,7 @@
 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.LocStsType;
 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;
@@ -250,7 +251,7 @@
         if (shuttleThread == null) {
             return;
         }
-        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(false);
         if (shuttleProtocol == null) {
             return;
         }
@@ -280,35 +281,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());
@@ -337,6 +309,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();
@@ -382,6 +383,66 @@
                     }
                 }
             }
+        } else if (shuttleProtocol.getMoveType() == 4) {//鍙栨斁璐�
+            Integer xCurrent = shuttleProtocol.getXCurrent();
+            if (xCurrent > shuttleProtocol.getXTarget()) {//褰揦鍊煎ぇ浜嶺鐩爣鍊�
+                shuttleProtocol.setXCurrent(shuttleProtocol.getXStart());
+                shuttleProtocol.setYCurrent(shuttleProtocol.getYStart());
+                return;
+            }
+
+            //鍒ゆ柇x杞磋揣浣嶆槸鍚︽斁婊�
+            boolean flag = true;
+            for (Loc loc : locService.list(new LambdaQueryWrapper<Loc>()
+                    .eq(Loc::getHostId, device.getHostId())
+                    .eq(Loc::getRow, xCurrent)
+                    .ge(Loc::getBay, shuttleProtocol.getYStart())
+                    .le(Loc::getBay, shuttleProtocol.getYTarget()))) {
+                if (loc.getLocSts() != LocStsType.F.val()) {
+                    flag = false;//鏈弧
+                    break;
+                }
+            }
+            if (flag) {
+                shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
+                return;
+            }
+
+            //鎼滅储鏈夎揣搴撲綅
+            List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>()
+                    .eq(Loc::getLocSts, LocStsType.F.val())
+                    .eq(Loc::getHostId, device.getHostId())
+                    .notIn(Loc::getRow, xCurrent)
+                    .eq(Loc::getStatus, 1));
+            if (list.isEmpty()) {
+                return;
+            }
+
+            Loc start = list.get(0);
+
+            List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>()
+                    .eq(Loc::getHostId, device.getHostId())
+                    .eq(Loc::getStatus, 1)
+                    .eq(Loc::getLocSts, LocStsType.O.val())
+                    .eq(Loc::getRow, xCurrent)
+                    .orderByDesc(Loc::getBay)
+                    .orderByAsc(Loc::getRow));
+            if (locList.isEmpty()) {
+                return;
+            }
+
+            Loc target = locList.get(0);
+            if (target == null) {
+                return;
+            }
+
+            //璋冨害鍘荤洰鏍囦綅缃�
+            if (!shuttleProtocol.getCurrentLocNo().equals(target.getLocNo())) {
+                Task task = shuttleDispatcher.generateManuaTakeMoveTask(device, start.getLocNo(), target.getLocNo());
+//                if(task != null) {//璋冨害鎴愬姛
+//                    shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
+//                }
+            }
         }
     }
 

--
Gitblit v1.9.1