From 06a9757c727c6bc15595d5f56a0e309077025741 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期三, 17 四月 2024 09:22:14 +0800
Subject: [PATCH] Merge branch 'Four-Way-Rack' of http://47.97.1.152:5880/r/zy-asrs-master into Four-Way-Rack

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java |  122 +++++++++++++++++++++++++++++++---------
 1 files changed, 95 insertions(+), 27 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
index d308757..6c3b59b 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
@@ -4,9 +4,13 @@
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.SpringUtils;
 import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.core.entity.BasLift;
 import com.zy.asrs.wcs.core.entity.Task;
 import com.zy.asrs.wcs.core.entity.TaskSerialNo;
+import com.zy.asrs.wcs.core.model.NavigateNode;
 import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
+import com.zy.asrs.wcs.core.model.enums.NavigationMapType;
+import com.zy.asrs.wcs.core.service.BasLiftService;
 import com.zy.asrs.wcs.core.service.TaskSerialNoService;
 import com.zy.asrs.wcs.core.service.TaskService;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
@@ -77,34 +81,38 @@
 
     //鑾峰彇闄ょ櫧鍚嶅崟澶栫殑鎸囧畾妤煎眰鍏ㄩ儴绌挎杞y鍧愭爣鐐�
     public static List<int[]> getShuttlePoints(Integer whiteShuttle, Integer lev) {
-//        SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
+        DeviceService deviceService = SpringUtils.getBean(DeviceService.class);
         ArrayList<int[]> list = new ArrayList<>();
-//        for (ShuttleSlave slave : slaveProperties.getShuttle()) {
-//            if (slave.getId().intValue() == whiteShuttle) {
-//                continue;//璺宠繃鐧藉悕鍗�
-//            }
-//
-//            //鑾峰彇绌挎杞︽墍鍦ㄨ妭鐐逛綅缃�
-//            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
-//            if (shuttleThread == null) {
-//                continue;
-//            }
-//            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-//            if (shuttleProtocol == null) {
-//                continue;
-//            }
-//
-//            if (shuttleProtocol.getCurrentLocNo() == null) {
-//                continue;
-//            }
-//
-//            if (lev != Utils.getLev(shuttleProtocol.getCurrentLocNo())) {
-//                continue;//妤煎眰涓嶅悓
-//            }
-//
-//            int[] xyPosition = NavigatePositionConvert.positionToXY(shuttleProtocol.getCurrentLocNo());//閫氳繃搴撲綅鍙疯幏鍙杧y鍧愭爣
-//            list.add(xyPosition);
-//        }
+
+        List<Device> devices = deviceService.list(new LambdaQueryWrapper<Device>()
+                .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val())
+                .eq(Device::getStatus, 1));
+        for (Device device : devices) {
+            if (Integer.parseInt(device.getDeviceNo()) == whiteShuttle) {
+                continue;//璺宠繃鐧藉悕鍗�
+            }
+
+            //鑾峰彇绌挎杞︽墍鍦ㄨ妭鐐逛綅缃�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+            if (shuttleThread == null) {
+                continue;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+
+            if (shuttleProtocol.getCurrentLocNo() == null) {
+                continue;
+            }
+
+            if (lev != Utils.getLev(shuttleProtocol.getCurrentLocNo())) {
+                continue;//妤煎眰涓嶅悓
+            }
+
+            int[] xyPosition = NavigatePositionConvert.positionToXY(shuttleProtocol.getCurrentLocNo());//閫氳繃搴撲綅鍙疯幏鍙杧y鍧愭爣
+            list.add(xyPosition);
+        }
         return list;
     }
 
@@ -175,4 +183,64 @@
         throw new CoolException("宸ヤ綔鍙风敓鎴愬け璐�");
     }
 
+    /**
+     * 妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹�
+     */
+    public static boolean checkShuttleHasBinding(Device device) {
+        TaskService taskService = SpringUtils.getBean(TaskService.class);
+        List<Task> tasks = taskService.selectWorkingByShuttle(Integer.parseInt(device.getDeviceNo()));
+        if (tasks.isEmpty()) {
+            return false;//鏃犱换鍔$粦瀹�
+        }
+        return true;//鏈変换鍔$粦瀹�
+    }
+
+    /**
+     * 妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
+     */
+    public static boolean checkLiftHasBinding(Integer liftNo) {
+        TaskService taskService = SpringUtils.getBean(TaskService.class);
+        List<Task> tasks = taskService.selectWorkingByLift(liftNo);
+        if (tasks.isEmpty()) {
+            return false;//鏃犱换鍔$粦瀹�
+        }
+        return true;//鏈変换鍔$粦瀹�
+    }
+
+    /**
+     * 鑾峰彇璺濈鐩爣搴撲綅鏈�杩戠殑鎻愬崌鏈�
+     */
+    public static Device getRecentTransferLift(String locNo, Integer shuttleNo) {
+        BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+        DeviceService deviceService = SpringUtils.getBean(DeviceService.class);
+        if (basLiftService == null) {
+            return null;
+        }
+
+        Integer distance = Integer.MAX_VALUE;
+        Long liftDeviceId = null;
+        for (BasLift basLift : basLiftService.list(new LambdaQueryWrapper<BasLift>()
+                .eq(BasLift::getStatus, 1)
+                .eq(BasLift::getTransfer, 1))) {
+            int lev = Utils.getLev(locNo);
+            String liftLocNo = Utils.getLocNo(basLift.getRow(), basLift.getBay(), lev);
+            List<NavigateNode> nodeList = NavigateUtils.calc(locNo, liftLocNo, NavigationMapType.NONE.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(locNo)));
+            Integer originPathAllDistance = NavigateUtils.getOriginPathAllDistance(nodeList);//鎬昏窛绂�
+            if (originPathAllDistance < distance) {
+                distance = originPathAllDistance;
+                liftDeviceId = basLift.getDeviceId();
+            }
+        }
+
+        if (liftDeviceId == null) {
+            return null;
+        }
+
+        Device device = deviceService.getById(liftDeviceId);
+        if (device == null) {
+            return null;
+        }
+        return device;
+    }
+
 }

--
Gitblit v1.9.1