提升机调度逻辑修改

This commit is contained in:
liuhanqing
2025-11-25 11:10:22 +08:00
parent e6915aa48c
commit f167b97879
3 changed files with 58 additions and 76 deletions

View File

@@ -32,6 +32,7 @@ public class AgvPathProcessor {
} }
public void processAgvPathInfo(int[][] ints, int floor) { public void processAgvPathInfo(int[][] ints, int floor) {
} }
public void processOnlineAgvSites(int[][] ints, int floor) { public void processOnlineAgvSites(int[][] ints, int floor) {

View File

@@ -155,7 +155,7 @@ public class DeviceSrgv extends BaseEntity
private String spare1; private String spare1;
/** */ /** */
@Excel(name = "") @Excel(name = "请求进入提升机 0-否 1-是")
private String spare2; private String spare2;
/** */ /** */

View File

@@ -11,14 +11,18 @@ import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
import com.ruoyi.bas.port.domain.WcsPort; import com.ruoyi.bas.port.domain.WcsPort;
import com.ruoyi.bas.port.service.IWcsPortService; import com.ruoyi.bas.port.service.IWcsPortService;
import com.ruoyi.common.domain.SendData; import com.ruoyi.common.domain.SendData;
import com.ruoyi.device.srgv.domain.DeviceSrgv;
import com.ruoyi.device.tsj.domain.DeviceTsj; import com.ruoyi.device.tsj.domain.DeviceTsj;
import com.ruoyi.device.tsj.service.IDeviceTsjService; import com.ruoyi.device.tsj.service.IDeviceTsjService;
import com.ruoyi.job.domain.MydoJob; import com.ruoyi.job.domain.MydoJob;
import com.ruoyi.job.service.IMydoJobService; import com.ruoyi.job.service.IMydoJobService;
import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService;
import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueue; import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueue;
import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueueFinish; import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueueFinish;
import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueFinishService; import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueFinishService;
import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueService; import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueService;
import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead;
import com.ruoyi.schedule.plcRead.tsj.PlcTsjRead; import com.ruoyi.schedule.plcRead.tsj.PlcTsjRead;
import com.ruoyi.schedule.plcRead.util.Tools; import com.ruoyi.schedule.plcRead.util.Tools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -41,6 +45,8 @@ public class TsjThread implements Runnable {
private IWcsPortService wcsPortService; private IWcsPortService wcsPortService;
private IBasCargoSpaceService basCargoSpaceService; private IBasCargoSpaceService basCargoSpaceService;
private IWcsSrgvQueueService wcsSrgvQueueService;
public void init() { public void init() {
} }
@@ -106,94 +112,69 @@ public class TsjThread implements Runnable {
* 创建卸车队列 * 创建卸车队列
*/ */
private void createQueue(DeviceTsj tsj) { private void createQueue(DeviceTsj tsj) {
//todo 根据当前楼层和执行阶段查询任务 获取目标队列 生成提升机队列 当小车出去后 解锁提升机 for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
List<TsjDeviceExecutionQueue> tsjDeviceExecutionQueues = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueList(new TsjDeviceExecutionQueue()); DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv);
if (CollUtil.isNotEmpty(tsjDeviceExecutionQueues)) { if (deviceSrgv.getSsjRequest()==1 && deviceSrgv.getTaskNo()>0){
// 提升机存在任务 //请求进入输送机
return; WcsSrgvQueue sRgvQueueParam = new WcsSrgvQueue();
} sRgvQueueParam.setAgvId(Convert.toStr(deviceSrgv.getDeviceId()));
sRgvQueueParam.setTaskNo(Convert.toStr(deviceSrgv.getTaskNo()));
DeviceTsj deviceTsj = PlcTsjRead.deviceTsjMap.get("1"); List<WcsSrgvQueue> wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(sRgvQueueParam);
//判断提升机锁定 并且 小车已进入提升机 if (CollUtil.isNotEmpty(wcsSrgvQueues)) {
if (deviceTsj.getSpare1() == 1 && tsj.getSbzt() == 3 && tsj.getYxxf() == 1) { TsjDeviceExecutionQueue tsjDeviceExecutionQueueByRwh = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueByRwh(Convert.toLong(deviceSrgv.getTaskNo()));
WcsPort param = new WcsPort(); if (tsjDeviceExecutionQueueByRwh == null){
param.setStatus("1"); WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueues.get(0);
List<WcsPort> wcsPorts = wcsPortService.selectWcsPortList(param); String strFloor = wcsSrgvQueue.getTheFloor();
wcsPorts = wcsPorts.stream().filter(x-> "1".equals(x.getStatus()) &&("1".equals(x.getPortType()) || "2".equals(x.getPortType()))).collect(Collectors.toList()); String tarFloor = wcsSrgvQueue.getDefault07();
for (WcsPort wcsPort : wcsPorts) {
//生成提升机队列
TsjDeviceExecutionQueue tsjDeviceExecutionQueue = new TsjDeviceExecutionQueue(); TsjDeviceExecutionQueue tsjDeviceExecutionQueue = new TsjDeviceExecutionQueue();
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(wcsPort.getSpare1()));
BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(mydoJob.getCargoSpaceId());
if (ObjUtil.isNull(mydoJob)){
continue;
}
if (ObjUtil.isNull(basCargoSpace)){
continue;
}
if (Convert.toInt(mydoJob.getInOrOut())<20){
//入库
if (mydoJob.getRoadwayId().equals(wcsPort.getPortCode())){
//从1层到对应楼层
tsjDeviceExecutionQueue.setSrcRow("0");
tsjDeviceExecutionQueue.setSrcLayer("0");
tsjDeviceExecutionQueue.setTarRow(Convert.toStr(basCargoSpace.getThePlatoon()));
tsjDeviceExecutionQueue.setTarLayer(Convert.toStr(basCargoSpace.getTheFloor()));
}
}else {
if (mydoJob.getRoadwayId().equals(wcsPort.getPortCode())){
//从对应楼层到指定楼层
tsjDeviceExecutionQueue.setSrcRow("0");
tsjDeviceExecutionQueue.setSrcLayer("0");
tsjDeviceExecutionQueue.setTarRow(Convert.toStr(basCargoSpace.getThePlatoon()));
tsjDeviceExecutionQueue.setTarLayer(Convert.toStr(basCargoSpace.getTheFloor()));
}
}
tsjDeviceExecutionQueue.setGuid(IdUtil.simpleUUID()); tsjDeviceExecutionQueue.setGuid(IdUtil.simpleUUID());
tsjDeviceExecutionQueue.setDeviceId(tsj.getId()); tsjDeviceExecutionQueue.setDeviceId(tsj.getId());
tsjDeviceExecutionQueue.setDeviceName(tsj.getName()); tsjDeviceExecutionQueue.setDeviceName(tsj.getName());
tsjDeviceExecutionQueue.setTaskNo(Convert.toLong(mydoJob.getTaskNo())); tsjDeviceExecutionQueue.setTaskNo(Convert.toLong(deviceSrgv.getTaskNo()));
tsjDeviceExecutionQueue.setSendFlag("0"); tsjDeviceExecutionQueue.setSrcRow("0");
tsjDeviceExecutionQueue.setSrcLayer(strFloor);
tsjDeviceExecutionQueue.setTarRow("0");
tsjDeviceExecutionQueue.setTarLayer(tarFloor);
tsjDeviceExecutionQueue.setSendType("1"); tsjDeviceExecutionQueue.setSendType("1");
tsjDeviceExecutionQueue.setRwlx("1");
tsjDeviceExecutionQueue.setCreateDate(DateUtil.formatDateTime(new Date())); tsjDeviceExecutionQueue.setCreateDate(DateUtil.formatDateTime(new Date()));
tsjDeviceExecutionQueue.setSpare1(Convert.toStr(deviceSrgv.getDeviceId()));
tsjDeviceExecutionQueue.setTaskType("1");
tsjDeviceExecutionQueue.setRwlx("1");
tsjDeviceExecutionQueueService.insertTsjDeviceExecutionQueue(tsjDeviceExecutionQueue); tsjDeviceExecutionQueueService.insertTsjDeviceExecutionQueue(tsjDeviceExecutionQueue);
} }
} }
} }
}
}
private void sendTsj() { private void sendTsj() {
List<TsjDeviceExecutionQueue> tsjDeviceExecutionQueues = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueList(new TsjDeviceExecutionQueue()); List<TsjDeviceExecutionQueue> tsjDeviceExecutionQueues = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueList(new TsjDeviceExecutionQueue());
if (CollUtil.isNotEmpty(tsjDeviceExecutionQueues)) { if (CollUtil.isNotEmpty(tsjDeviceExecutionQueues)) {
TsjDeviceExecutionQueue tsjDeviceExecutionQueue = tsjDeviceExecutionQueues.get(0); TsjDeviceExecutionQueue tsjDeviceExecutionQueue = tsjDeviceExecutionQueues.get(0);
if ("1".equals(tsjDeviceExecutionQueue.getRwlx())) {
//提升机移动到小车楼层 需要判断目标楼层入库点位小车是否到位 //提升机移动到小车楼层 需要判断目标楼层入库点位小车是否到位
WcsPort param = new WcsPort(); WcsPort param = new WcsPort();
param.setPortType("1"); param.setPortType("1");
param.setPortRegion(tsjDeviceExecutionQueue.getTarLayer()); param.setPortRegion(tsjDeviceExecutionQueue.getTarLayer());
param.setStatus("1"); param.setStatus("1");
param.setSpare2("1"); param.setSpare2("1");
List<WcsPort> wcsPorts = wcsPortService.selectWcsPortList(param); List<WcsPort> wcsInPorts = wcsPortService.selectWcsPortList(param);
if (CollUtil.isEmpty(wcsPorts)) { if (CollUtil.isEmpty(wcsInPorts)) {
log.info("提升机任务[{}]下发 目标楼层[{}]入库点位空闲 无法下发提升机任务", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getTarLayer()); log.info("提升机任务[{}]下发 目标楼层[{}]入库点位空闲 无法下发提升机任务", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getTarLayer());
return; return;
} }
} else if ("2".equals(tsjDeviceExecutionQueue.getRwlx())) {
//提升机承载小车到目标楼层 需要判断目标楼层出库点位是否空闲 //提升机承载小车到目标楼层 需要判断目标楼层出库点位是否空闲
WcsPort param = new WcsPort(); WcsPort param1 = new WcsPort();
param.setPortType("1"); param1.setPortType("1");
param.setPortRegion(tsjDeviceExecutionQueue.getTarLayer()); param1.setPortRegion(tsjDeviceExecutionQueue.getTarLayer());
param.setStatus("0"); param1.setStatus("0");
param.setSpare2("1"); param1.setSpare2("1");
List<WcsPort> wcsPorts = wcsPortService.selectWcsPortList(param); List<WcsPort> wcsOutPorts = wcsPortService.selectWcsPortList(param1);
if (CollUtil.isEmpty(wcsPorts)) { if (CollUtil.isEmpty(wcsOutPorts)) {
log.info("提升机任务[{}]下发 目标楼层[{}]出库点位占用 无法下发提升机任务", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getTarLayer()); log.info("提升机任务[{}]下发 目标楼层[{}]出库点位占用 无法下发提升机任务", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getTarLayer());
return; return;
} }
}
writeToTsj(tsjDeviceExecutionQueues.get(0)); writeToTsj(tsjDeviceExecutionQueues.get(0));
log.info("提升机任务下发 taskNo{} 任务类型:{}", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getRwlx()); log.info("提升机任务下发 taskNo{} 任务类型:{}", tsjDeviceExecutionQueue.getTaskNo(), tsjDeviceExecutionQueue.getRwlx());
} }