提升机调度逻辑修改

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 processOnlineAgvSites(int[][] ints, int floor) {

View File

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