Merge remote-tracking branch 'origin/main'

This commit is contained in:
liuhanqing
2025-12-01 09:29:38 +08:00
3 changed files with 162 additions and 75 deletions

View File

@@ -25,6 +25,8 @@ public interface IWcsSrgvQueueService
public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId); public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId);
/** /**
* 查询四向小车任务队列列表 * 查询四向小车任务队列列表
* *

View File

@@ -127,13 +127,13 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
param.setJobType("1"); param.setJobType("1");
param.setAgvId(deviceSrgv.getDeviceId().toString()); param.setAgvId(deviceSrgv.getDeviceId().toString());
List<SrgvChargingJob> srgvChargingJobs = srgvChargingJobMapper.selectSrgvChargingJobList(param); List<SrgvChargingJob> srgvChargingJobs = srgvChargingJobMapper.selectSrgvChargingJobList(param);
if (CollUtil.isNotEmpty(srgvChargingJobs)){ if (CollUtil.isNotEmpty(srgvChargingJobs)) {
SrgvChargingJob srgvChargingJob = srgvChargingJobs.get(0); SrgvChargingJob srgvChargingJob = srgvChargingJobs.get(0);
String chargingSite = srgvChargingJob.getChargingSite();//充电桩站点 String chargingSite = srgvChargingJob.getChargingSite();//充电桩站点
WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue(); WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
wcsSrgvQueueParam.setAgvId(deviceSrgv.getDeviceId().toString()); wcsSrgvQueueParam.setAgvId(deviceSrgv.getDeviceId().toString());
List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam); List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam);
if (CollUtil.isEmpty(wcsSrgvQueues)){ if (CollUtil.isEmpty(wcsSrgvQueues)) {
//生成队列 //生成队列
WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue(); WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
wcsSrgvQueue.setGuid(UUID.randomUUID().toString()); wcsSrgvQueue.setGuid(UUID.randomUUID().toString());
@@ -148,9 +148,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite()); wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
WcsSrgvMap wcsSrgvMap = wcsSrgvMapService.selectWcsSrgvMapBySiteId(chargingSite); WcsSrgvMap wcsSrgvMap = wcsSrgvMapService.selectWcsSrgvMapBySiteId(chargingSite);
if (wcsSrgvMap.getZ().equals(deviceSrgv.getCurrFloor())){ if (wcsSrgvMap.getZ().equals(deviceSrgv.getCurrFloor())) {
wcsSrgvQueue.setEndSite(chargingSite); wcsSrgvQueue.setEndSite(chargingSite);
}else { } else {
wcsSrgvQueue.setEndSite("tsj"); wcsSrgvQueue.setEndSite("tsj");
} }
wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString()); wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString());
@@ -182,9 +182,92 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
* 生成出库小车队列 * 生成出库小车队列
*/ */
private void createCarOutQueue() { private void createCarOutQueue() {
MydoJob mydoJob = new MydoJob();
mydoJob.setInOut("2");
mydoJob.setExecutionPhase("0");
mydoJob.setStatus("1");
List<MydoJob> mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob);
if (!mydoJobs.isEmpty()) {
MydoJob mydoJob1 = mydoJobs.get(0);
// 查询是否有已下发的该任务号队列
WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo());
if (wcsSrgvQueue1 == null) {
ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream()
.filter(deviceSrgv -> deviceSrgv.getWorkMode() == 4)
.sorted((d1, d2) -> Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - d2.getCurrFloor())
- Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - d1.getCurrFloor()))
.collect(Collectors.toList());
if (!deviceSrgvList.isEmpty()) {
DeviceSrgv deviceSrgv = null;
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
//优先出库层,如果没有优先邻近层
if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
deviceSrgv = deviceSrgv1;
break;
} else if (deviceSrgv == null || (Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - deviceSrgv1.getCurrFloor())) < (Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - deviceSrgv.getCurrFloor()))) {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
deviceSrgv = deviceSrgv1;
}
}
}
if (deviceSrgv != null) {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString());
if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1) {
//查询小车是否为取货楼层
String endSite = "";
String issued = "0";
String executionStatus = "1";
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
wcsSrgvMap.setCargoSpaceId(mydoJob1.getCargoSpaceId());
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
//取货地址
String cargoPickSite = wcsSrgvMaps.get(0).getSiteId();
if (deviceSrgv.getCurrFloor().equals(wcsSrgvMaps.get(0).getTheLayer())) {
//终点是巷道口到位输送线
endSite = cargoPickSite;
if(cargoPickSite.equals(deviceSrgv.getCurrSite())){
issued="1";
executionStatus="3";
}
} else{
//终点是提升机
endSite = "tsj";
}
//生成小车取货队列
WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
wcsSrgvQueue.setGuid(UUID.randomUUID().toString());
wcsSrgvQueue.setTaskNo(mydoJob1.getTaskNo());
wcsSrgvQueue.setTaskType("1");
wcsSrgvQueue.setPriority(Long.parseLong("2"));
wcsSrgvQueue.setCargo("1");
wcsSrgvQueue.setIssued(issued);
wcsSrgvQueue.setExecutionStatus(executionStatus);
wcsSrgvQueue.setCargoPickSite(cargoPickSite);
WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap();
wcsSrgvMap1.setRemark(mydoJob1.getExitId());
List<WcsSrgvMap> wcsSrgvMaps1 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap1);
wcsSrgvQueue.setCargoPlaceSite(wcsSrgvMaps1.get(0).getSiteId());
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
wcsSrgvQueue.setEndSite(endSite);
wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString());
wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString());
wcsSrgvQueue.setDefault02("4");
wcsSrgvQueue.setDefault07("1");
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue);
}
}
}
} }
}
}
/** /**
@@ -199,45 +282,53 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
MydoJob mydoJob1 = mydoJobs.get(0); MydoJob mydoJob1 = mydoJobs.get(0);
// 查询是否有已下发的该任务号队列 // 查询是否有已下发的该任务号队列
WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo()); WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo());
if (wcsSrgvQueue1 == null) { if (wcsSrgvQueue1 == null) {
ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap; ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream().filter(deviceSrgv -> deviceSrgv.getStatus() == 1 && deviceSrgv.getWorkMode() == 4).collect(Collectors.toList());
List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream()
.filter(deviceSrgv -> deviceSrgv.getWorkMode() == 4)
.sorted((d1, d2) -> d2.getCurrFloor().compareTo(d1.getCurrFloor()))
.collect(Collectors.toList());
if (!deviceSrgvList.isEmpty()) { if (!deviceSrgvList.isEmpty()) {
DeviceSrgv deviceSrgv =null; DeviceSrgv deviceSrgv = null;
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) { for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
WcsSrgvQueue wcsSrgvQueue = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
if (wcsSrgvQueue == null) {
//如果有currFloor等于mydoJob1的theFloor的就选择,如果没有选择deviceSrgvList中currFloor最小的
if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) { if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
deviceSrgv = deviceSrgv1; deviceSrgv = deviceSrgv1;
break; // 找到了相同楼层的直接选它 break; // 找到了相同楼层的直接选它
} else if (deviceSrgv == null || deviceSrgv1.getCurrFloor() < deviceSrgv.getCurrFloor()) { } else if (deviceSrgv == null || deviceSrgv1.getCurrFloor() < deviceSrgv.getCurrFloor()) {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车 deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车
} }
}else{
return;
} }
} }
if (deviceSrgv != null) {
//查询1楼是否有空闲联机自动的小车,且1楼小车不在入库站点 WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString());
if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1) {
//查询小车是否为1楼,且1楼小车不在入库站点
String endSite = ""; String endSite = "";
String issued = "0";
String executionStatus = "1";
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap(); WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
wcsSrgvMap.setRemark(mydoJob1.getEntranceId()); wcsSrgvMap.setRemark(mydoJob1.getEntranceId());
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap); List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
//取货地址 //取货地址
String cargoPickSite = wcsSrgvMaps.get(0).getSiteId(); String cargoPickSite = wcsSrgvMaps.get(0).getSiteId();
if (deviceSrgv.getCurrFloor() == 1 && !cargoPickSite.equals(deviceSrgv.getCurrSite())) { if (deviceSrgv.getCurrFloor() == 1) {
//终点是巷道口到位输送线
endSite = cargoPickSite; endSite = cargoPickSite;
if (cargoPickSite.equals(deviceSrgv.getCurrSite())) {
} else if (deviceSrgv.getCurrFloor() != 1 ) { // 小车已在取货点
//终点是提升机 issued = "1";
endSite = "tsj"; executionStatus = "3";
}
} else { } else {
return; // 小车不在1楼
endSite = "tsj";
} }
//生成小车取货队列 //生成小车取货队列
@@ -247,8 +338,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcsSrgvQueue.setTaskType("1"); wcsSrgvQueue.setTaskType("1");
wcsSrgvQueue.setPriority(Long.parseLong("2")); wcsSrgvQueue.setPriority(Long.parseLong("2"));
wcsSrgvQueue.setCargo("1"); wcsSrgvQueue.setCargo("1");
wcsSrgvQueue.setIssued("0"); wcsSrgvQueue.setIssued(issued);
wcsSrgvQueue.setExecutionStatus("1"); wcsSrgvQueue.setExecutionStatus(executionStatus);
wcsSrgvQueue.setCargoPickSite(cargoPickSite); wcsSrgvQueue.setCargoPickSite(cargoPickSite);
WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap(); WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap();
wcsSrgvMap1.setCargoSpaceId(mydoJob1.getCargoSpaceId()); wcsSrgvMap1.setCargoSpaceId(mydoJob1.getCargoSpaceId());
@@ -266,6 +357,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
} }
} }
} }
}
}
} }
@@ -516,22 +609,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
* 1、不处理终点是提升机站点的四向车 * 1、不处理终点是提升机站点的四向车
* 2、处理终点不是提升机站点的 * 2、处理终点不是提升机站点的
* */ * */
boolean taskFinishFlag = finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue);
if (taskFinishFlag) { finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue);
String spare2 = deviceSrgv.getSpare2();
if ("-".equals(spare2)) {
//换层 不删除队列
wcsSrgvQueue.setExecutionStatus("2");
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
} else {
WcsSrgvQueueFinish wcsSrgvQueueFinish = new WcsSrgvQueueFinish();
BeanUtil.copyProperties(wcsSrgvQueue, wcsSrgvQueueFinish);
wcsSrgvQueueFinish.setFinishDate(DateUtil.now());
wcsSagvQueueFinishMapper.insertWcsSrgvQueueFinish(wcsSrgvQueueFinish);
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
}
}
} }
} }
} }
@@ -602,16 +682,19 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
//请求wms生成库存 //请求wms生成库存
break; break;
case "7"://移库,变动库存,删除队列,插入历史表 case "7"://移库,变动库存
break; break;
default: default:
break; break;
} }
//删除队列,插入历史表
wcsSrgvQueue.setExecutionStatus("4");
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
} else { } else {
//充电之类得 不知道用不用
} }

View File

@@ -137,14 +137,16 @@ public class SsjThread implements Runnable {
mydoJob.setExecutionPhase("1"); mydoJob.setExecutionPhase("1");
mydoJob.setCreateTime(new Date()); mydoJob.setCreateTime(new Date());
if("GS1002".equals(deviceSsj.getDeviceCode())) { if("GS1002".equals(deviceSsj.getDeviceCode())) {
mydoJob.setEntranceId("GS1002"); mydoJob.setEntranceId("L1004");
}else{ }else{
mydoJob.setEntranceId("GS1007"); mydoJob.setEntranceId("L1005");
} }
mydoJobService.insertMydoJob(mydoJob); mydoJobService.insertMydoJob(mydoJob);
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), mydoJob.getTaskNo(), 1, 1); int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), mydoJob.getTaskNo(), 1, 1);
if (i == 1) { if (i == 1) {
mydoJob.setStatus("3");
mydoJobService.updateMydoJob(mydoJob);
log.info(deviceSsj.getDeviceCode()+"输送机下发任务号成功:{}", mydoJob.getTaskNo()); log.info(deviceSsj.getDeviceCode()+"输送机下发任务号成功:{}", mydoJob.getTaskNo());
} }
} else { } else {