From 09fde94b4790b90dccf35a24f6d3d1d2171b59dd Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 13 六月 2024 10:26:40 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java | 217 ++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 186 insertions(+), 31 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 26dbb6f..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
@@ -1,18 +1,39 @@
package com.zy.asrs.wcs.core.utils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
+import com.zy.asrs.wcs.rcs.service.DeviceService;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import java.util.ArrayList;
import java.util.List;
public class Utils {
+ public static final String _LINK = "-";
+
/**
* 閫氳繃搴撲綅鍙疯幏鍙� 鎺�
*/
public static int getRow(String locNo) {
if (!Cools.isEmpty(locNo)) {
- return Integer.parseInt(locNo.substring(0, 2));
+ String[] split = locNo.split(_LINK);
+ return Integer.parseInt(split[0]);
}
throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
}
@@ -22,7 +43,8 @@
*/
public static int getBay(String locNo) {
if (!Cools.isEmpty(locNo)) {
- return Integer.parseInt(locNo.substring(2, 5));
+ String[] split = locNo.split(_LINK);
+ return Integer.parseInt(split[1]);
}
throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
}
@@ -32,13 +54,15 @@
*/
public static int getLev(String locNo) {
if (!Cools.isEmpty(locNo)) {
- return Integer.parseInt(locNo.substring(5, 7));
+ String[] split = locNo.split(_LINK);
+ return Integer.parseInt(split[2]);
}
throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
}
public static String getLocNo(Number row, Number bay, Number lev) {
- return zerofill(String.valueOf(row), 2) + zerofill(String.valueOf(bay), 3) + zerofill(String.valueOf(lev), 2);
+ return row + _LINK + bay + _LINK + lev;
+// return zerofill(String.valueOf(row), 2) + zerofill(String.valueOf(bay), 3) + zerofill(String.valueOf(lev), 2);
}
public static String zerofill(String msg, Integer count){
@@ -57,35 +81,166 @@
//鑾峰彇闄ょ櫧鍚嶅崟澶栫殑鎸囧畾妤煎眰鍏ㄩ儴绌挎杞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;
}
+ public static boolean hasShuttleInLoc(String locNo, Long deviceId) {
+ DeviceService deviceService = SpringUtils.getBean(DeviceService.class);
+
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val())
+ .eq(Device::getStatus, 1));
+
+ for (Device device : list) {
+ if (deviceId.equals(device.getId())) {
+ 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().equals(locNo)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * 鐢熸垚宸ヤ綔鍙�
+ * @return taskNo(宸ヤ綔鍙�)
+ */
+ public static int getTaskNo(String flag) {
+ TaskSerialNoService taskSerialNoService = SpringUtils.getBean(TaskSerialNoService.class);
+ TaskService taskService = SpringUtils.getBean(TaskService.class);
+ TaskSerialNo taskSerialNo = taskSerialNoService.getOne(new LambdaQueryWrapper<TaskSerialNo>()
+ .eq(TaskSerialNo::getFlag, flag)
+ .eq(TaskSerialNo::getStatus, 1));
+ if (Cools.isEmpty(taskSerialNo)) {
+ throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+ }
+
+ int taskNo = taskSerialNo.getTaskNo();
+ int sNo = taskSerialNo.getStartNo();
+ int eNo = taskSerialNo.getTargetNo();
+ taskNo = taskNo >= eNo ? sNo : taskNo + 1;
+ while (true) {
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .eq(Task::getTaskNo, taskNo));
+ if (null != task) {
+ taskNo = taskNo >= eNo ? sNo : taskNo + 1;
+ } else {
+ break;
+ }
+ }
+ // 淇敼搴忓彿璁板綍
+ if (taskNo > 0){
+ taskSerialNo.setTaskNo(taskNo);
+ taskSerialNoService.updateById(taskSerialNo);
+ return taskNo;
+ }
+ 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