From d56b8093dc9e3e75f8efe1a0f1aa6d821c9c3dfb Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 15 四月 2025 13:30:35 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java | 101 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 99 insertions(+), 2 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
index 1808c65..f8964a1 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
@@ -1,7 +1,6 @@
package com.zy.asrs.wcs.core.utils;
import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.SnowflakeIdWorker;
@@ -24,6 +23,7 @@
import com.zy.asrs.wcs.system.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@@ -59,6 +59,73 @@
@Autowired
private NavigateUtils navigateUtils;
+ /**
+ * 璋冨害杞﹁締
+ */
+ public Device dispatchShuttle(Task task, String locNo) {
+ ArrayList<ShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅
+ ArrayList<ShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅
+
+ ShuttleThread resThread = null;
+ int lev = Utils.getLev(locNo);
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val())
+ .eq(Device::getHostId, task.getHostId())
+ .eq(Device::getStatus, 1));
+ //鑾峰彇鍚屽眰灏忚溅
+ List<Device> currentLevDevices = new ArrayList<>();
+ //鑾峰彇璺ㄥ眰灏忚溅
+ HashMap<Integer, List<Device>> diffLevDeviceMap = new HashMap<>();
+ for (Device device : list) {
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) {
+ continue;
+ }
+
+ if (shuttleProtocol.getCurrentLocNo() == null) {
+ continue;
+ }
+
+ int shuttleLev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
+ if (shuttleLev == lev) {
+ currentLevDevices.add(device);
+ } else {
+ List<Device> devices = null;
+ if (diffLevDeviceMap.containsKey(shuttleLev)) {
+ devices = diffLevDeviceMap.get(shuttleLev);
+ } else {
+ devices = new ArrayList<>();
+ }
+ devices.add(device);
+ diffLevDeviceMap.put(shuttleLev, devices);
+ }
+ }
+
+ //鎼滅储鍚屽眰
+ resThread = this.searchCurrentLevShuttle(currentLevDevices, locNo);
+
+ //鍚屽眰娌℃湁鎼滅储鍒板悎閫傚皬杞︼紝璺ㄦゼ灞傛悳绱�
+ if (resThread == null) {
+ resThread = this.searchDiffLevShuttle(diffLevDeviceMap, locNo, task);
+ }
+
+ if (resThread != null) {
+ if (resThread.getStatus().getCurrentLocNo().equals(locNo)) {
+ return resThread.getDevice();
+ }
+
+ Task result = generateMoveTask(resThread.getDevice(), locNo);
+ if (result != null) {
+ return resThread.getDevice();
+ }
+ }
+
+ News.info("{}鐩爣搴撲綅娌℃湁鎼滅储鍒板彲鐢ㄧ┛姊溅", locNo);
+ return null;
+ }
+
public synchronized ShuttleThread searchIdleShuttle(Task task) {
String locNo = taskService.judgeInbound(task) ? task.getDestLoc() : task.getOriginLoc();
ShuttleThread resThread = null;
@@ -76,6 +143,10 @@
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) {
+ continue;
+ }
+
+ if (shuttleProtocol.getCurrentLocNo() == null) {
continue;
}
@@ -318,6 +389,11 @@
return null;
}
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ return null;
+ }
+
Task task = new Task();
task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
task.setTaskNo(String.valueOf(Utils.getTaskNo("MOVE")));
@@ -325,7 +401,7 @@
task.setTaskCtg(taskCtg.getId());
task.setPriority(10);
task.setOriginSite(null);
- task.setOriginLoc(null);
+ task.setOriginLoc(shuttleProtocol.getCurrentLocNo());
task.setDestSite(null);
task.setDestLoc(locNo); // 杩佺Щ浣嶇疆
task.setIoTime(new Date());
@@ -567,5 +643,26 @@
return lastPathStartLoc;
}
+ //鑾峰彇灏忚溅鍧愭爣
+ public String findShuttleLocNo(Integer shuttleNo, Long hostId) {
+ Device device = deviceService.getOne(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val())
+ .eq(Device::getDeviceNo, shuttleNo)
+ .eq(Device::getHostId, hostId)
+ .eq(Device::getStatus, 1));
+ if(device == null) {
+ return null;
+ }
+
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) {
+ return null;
+ }
+
+ return shuttleProtocol.getCurrentLocNo();
+ }
+
}
--
Gitblit v1.9.1