From e5e87c10136baecc2e1cad3b2a7ef6548060b68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=80=A1=E8=93=89?= <377046077@qq.com> Date: Fri, 28 Nov 2025 09:11:51 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=B0=8F=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../srgv/service/IWcsSrgvQueueService.java | 2 + .../scheduleTask/srgv/BaseSRgvThread.java | 41 +++++++------------ 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/IWcsSrgvQueueService.java b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/IWcsSrgvQueueService.java index 235d1a2..da7cd2a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/IWcsSrgvQueueService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/IWcsSrgvQueueService.java @@ -25,6 +25,8 @@ public interface IWcsSrgvQueueService public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId); + + /** * 查询四向小车任务队列列表 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java index d5552cb..0a4b666 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java @@ -199,29 +199,26 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { MydoJob mydoJob1 = mydoJobs.get(0); // 查询是否有已下发的该任务号队列 WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo()); + + if (wcsSrgvQueue1 == null) { ConcurrentHashMap deviceSrgvMap = PlcSrgvRead.deviceSrgvMap; - List deviceSrgvList = deviceSrgvMap.values().stream().filter(deviceSrgv -> deviceSrgv.getStatus() == 1 && deviceSrgv.getWorkMode() == 4).collect(Collectors.toList()); + List deviceSrgvList = deviceSrgvMap.values().stream().filter(deviceSrgv -> deviceSrgv.getWorkMode() == 4).collect(Collectors.toList()); if (!deviceSrgvList.isEmpty()) { DeviceSrgv deviceSrgv =null; 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())) { deviceSrgv = deviceSrgv1; break; // 找到了相同楼层的直接选它 } else if (deviceSrgv == null || deviceSrgv1.getCurrFloor() < deviceSrgv.getCurrFloor()) { deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车 } - - }else{ - return; - } } + WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString()); + if (wcsSrgvQueue2 == null && deviceSrgv.getStatus()==1) { - //查询1楼是否有空闲联机自动的小车,且1楼小车不在入库站点 + //查询小车是否为1楼,且1楼小车不在入库站点 String endSite = ""; WcsSrgvMap wcsSrgvMap = new WcsSrgvMap(); wcsSrgvMap.setRemark(mydoJob1.getEntranceId()); @@ -264,6 +261,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue); } + } } } @@ -516,22 +514,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { * 1、不处理终点是提升机站点的四向车 * 2、处理终点不是提升机站点的 * */ - boolean taskFinishFlag = finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue); - if (taskFinishFlag) { - 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()); - } - } + finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue); + } } } @@ -602,16 +587,18 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { //请求wms生成库存 break; - case "7"://移库,变动库存,删除队列,插入历史表 - + case "7"://移库,变动库存 break; default: break; } - + //删除队列,插入历史表 + wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); + wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); } else { + //充电之类得 不知道用不用 } From 21a6d830c2aaaa2154b3b11b9d308d747f5524bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=80=A1=E8=93=89?= <377046077@qq.com> Date: Fri, 28 Nov 2025 14:58:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=B0=8F=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduleTask/srgv/BaseSRgvThread.java | 204 +++++++++++++----- .../schedule/scheduleTask/ssj/SsjThread.java | 6 +- 2 files changed, 154 insertions(+), 56 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java index 0a4b666..beb9bd7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java @@ -127,13 +127,13 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { param.setJobType("1"); param.setAgvId(deviceSrgv.getDeviceId().toString()); List srgvChargingJobs = srgvChargingJobMapper.selectSrgvChargingJobList(param); - if (CollUtil.isNotEmpty(srgvChargingJobs)){ + if (CollUtil.isNotEmpty(srgvChargingJobs)) { SrgvChargingJob srgvChargingJob = srgvChargingJobs.get(0); String chargingSite = srgvChargingJob.getChargingSite();//充电桩站点 WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue(); wcsSrgvQueueParam.setAgvId(deviceSrgv.getDeviceId().toString()); List wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam); - if (CollUtil.isEmpty(wcsSrgvQueues)){ + if (CollUtil.isEmpty(wcsSrgvQueues)) { //生成队列 WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue(); wcsSrgvQueue.setGuid(UUID.randomUUID().toString()); @@ -148,9 +148,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite()); WcsSrgvMap wcsSrgvMap = wcsSrgvMapService.selectWcsSrgvMapBySiteId(chargingSite); - if (wcsSrgvMap.getZ().equals(deviceSrgv.getCurrFloor())){ + if (wcsSrgvMap.getZ().equals(deviceSrgv.getCurrFloor())) { wcsSrgvQueue.setEndSite(chargingSite); - }else { + } else { wcsSrgvQueue.setEndSite("tsj"); } wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString()); @@ -182,8 +182,91 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { * 生成出库小车队列 */ private void createCarOutQueue() { + MydoJob mydoJob = new MydoJob(); + mydoJob.setInOut("2"); + mydoJob.setExecutionPhase("0"); + mydoJob.setStatus("1"); + List mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob); + if (!mydoJobs.isEmpty()) { + MydoJob mydoJob1 = mydoJobs.get(0); + // 查询是否有已下发的该任务号队列 + WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo()); + if (wcsSrgvQueue1 == null) { + ConcurrentHashMap deviceSrgvMap = PlcSrgvRead.deviceSrgvMap; + List 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 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 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); + + } + } + + } + } + } } @@ -200,67 +283,79 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { // 查询是否有已下发的该任务号队列 WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo()); - if (wcsSrgvQueue1 == null) { ConcurrentHashMap deviceSrgvMap = PlcSrgvRead.deviceSrgvMap; - List deviceSrgvList = deviceSrgvMap.values().stream().filter(deviceSrgv -> deviceSrgv.getWorkMode() == 4).collect(Collectors.toList()); + + List deviceSrgvList = deviceSrgvMap.values().stream() + .filter(deviceSrgv -> deviceSrgv.getWorkMode() == 4) + .sorted((d1, d2) -> d2.getCurrFloor().compareTo(d1.getCurrFloor())) + .collect(Collectors.toList()); if (!deviceSrgvList.isEmpty()) { - DeviceSrgv deviceSrgv =null; + DeviceSrgv deviceSrgv = null; for (DeviceSrgv deviceSrgv1 : deviceSrgvList) { - if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) { - deviceSrgv = deviceSrgv1; - break; // 找到了相同楼层的直接选它 - } else if (deviceSrgv == null || deviceSrgv1.getCurrFloor() < deviceSrgv.getCurrFloor()) { + if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) { + deviceSrgv = deviceSrgv1; + break; // 找到了相同楼层的直接选它 + } else if (deviceSrgv == null || deviceSrgv1.getCurrFloor() < deviceSrgv.getCurrFloor()) { + WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString()); + if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) { deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车 } + } } - WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString()); - if (wcsSrgvQueue2 == null && deviceSrgv.getStatus()==1) { + if (deviceSrgv != null) { - //查询小车是否为1楼,且1楼小车不在入库站点 - String endSite = ""; - WcsSrgvMap wcsSrgvMap = new WcsSrgvMap(); - wcsSrgvMap.setRemark(mydoJob1.getEntranceId()); - List wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap); - //取货地址 - String cargoPickSite = wcsSrgvMaps.get(0).getSiteId(); + WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString()); + if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1) { - if (deviceSrgv.getCurrFloor() == 1 && !cargoPickSite.equals(deviceSrgv.getCurrSite())) { - //终点是巷道口到位输送线 - endSite = cargoPickSite; + //查询小车是否为1楼,且1楼小车不在入库站点 + String endSite = ""; + String issued = "0"; + String executionStatus = "1"; + WcsSrgvMap wcsSrgvMap = new WcsSrgvMap(); + wcsSrgvMap.setRemark(mydoJob1.getEntranceId()); + List wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap); + //取货地址 + String cargoPickSite = wcsSrgvMaps.get(0).getSiteId(); - } else if (deviceSrgv.getCurrFloor() != 1 ) { - //终点是提升机 - endSite = "tsj"; - } else { - return; + if (deviceSrgv.getCurrFloor() == 1) { + endSite = cargoPickSite; + if (cargoPickSite.equals(deviceSrgv.getCurrSite())) { + // 小车已在取货点 + issued = "1"; + executionStatus = "3"; + } + } else { + // 小车不在1楼 + 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.setCargoSpaceId(mydoJob1.getCargoSpaceId()); + List 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); + + } } - - //生成小车取货队列 - 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("0"); - wcsSrgvQueue.setExecutionStatus("1"); - wcsSrgvQueue.setCargoPickSite(cargoPickSite); - WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap(); - wcsSrgvMap1.setCargoSpaceId(mydoJob1.getCargoSpaceId()); - List 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); - - } } } } @@ -515,7 +610,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { * 2、处理终点不是提升机站点的 * */ - finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue); + finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue); } } @@ -594,6 +689,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { break; } //删除队列,插入历史表 + wcsSrgvQueue.setExecutionStatus("4"); wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/SsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/SsjThread.java index 183eae0..6ce2d8c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/SsjThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/SsjThread.java @@ -137,14 +137,16 @@ public class SsjThread implements Runnable { mydoJob.setExecutionPhase("1"); mydoJob.setCreateTime(new Date()); if("GS1002".equals(deviceSsj.getDeviceCode())) { - mydoJob.setEntranceId("GS1002"); + mydoJob.setEntranceId("L1004"); }else{ - mydoJob.setEntranceId("GS1007"); + mydoJob.setEntranceId("L1005"); } mydoJobService.insertMydoJob(mydoJob); int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), mydoJob.getTaskNo(), 1, 1); if (i == 1) { + mydoJob.setStatus("3"); + mydoJobService.updateMydoJob(mydoJob); log.info(deviceSsj.getDeviceCode()+"输送机下发任务号成功:{}", mydoJob.getTaskNo()); } } else {