From 7e1fee7d8172389634c005b53eeef8d0e487972b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=80=A1=E8=93=89?= <377046077@qq.com> Date: Mon, 1 Dec 2025 14:37:51 +0800 Subject: [PATCH] =?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 | 3 + .../service/impl/WcsSrgvQueueServiceImpl.java | 2 + .../scheduleTask/srgv/BaseSRgvThread.java | 135 ++++++++++++++++-- 3 files changed, 131 insertions(+), 9 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 da7cd2a..030daf3 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 @@ -27,6 +27,9 @@ public interface IWcsSrgvQueueService + + + /** * 查询四向小车任务队列列表 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/impl/WcsSrgvQueueServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/impl/WcsSrgvQueueServiceImpl.java index 6b78c35..24bc09e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/impl/WcsSrgvQueueServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/impl/WcsSrgvQueueServiceImpl.java @@ -50,6 +50,8 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService return wcsSrgvQueueMapper.selectWcsSrgvQueueByAgvId(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 012d535..c8bbf9e 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 @@ -236,7 +236,56 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { //终点是提升机 endSite = "tsj"; } -//生成小车取货队列 + WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap(); + wcsSrgvMap1.setRemark(mydoJob1.getExitId()); + List wcsSrgvMaps1 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap1); + String cargoPlaceSite = wcsSrgvMaps1.get(0).getSiteId(); + + List sameSiteDevices = deviceSrgvMap.values().stream() + .filter(d -> d.getWorkMode() == 4 + && d.getStatus() == 1 + && d.getCurrSite().equals(cargoPlaceSite)) + .collect(Collectors.toList()); + if(!sameSiteDevices.isEmpty() &&!Objects.equals(sameSiteDevices.get(0).getDeviceId(), deviceSrgv.getDeviceId())){ + WcsSrgvMap wcsSrgvMap3 = new WcsSrgvMap(); + wcsSrgvMap3.setRemark("cache"); + List wcsSrgvMaps3 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap3); + for(WcsSrgvMap wcsSrgvMap4 : wcsSrgvMaps3){ + //deviceSrgvMap中所有对象的currSite都不等于wcsSrgvMap4的siteId的对象 + if(deviceSrgvMap.values().stream().noneMatch(d -> d.getCurrSite().equals(wcsSrgvMap4.getSiteId()))) { + //生成小车到缓存点队列 + WcsSrgvQueue wcsSrgvQueue5 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(sameSiteDevices.get(0).getDeviceId().toString()); + WcsSrgvQueue wcsSrgvQueue=new WcsSrgvQueue(); + wcsSrgvQueue.setCargoPlaceSite(wcsSrgvMap4.getSiteId()); + List wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue); + if (wcsSrgvQueue5 == null && wcsSrgvQueues.isEmpty()) { + WcsSrgvQueue wcsSrgvQueue3 = new WcsSrgvQueue(); + wcsSrgvQueue3.setGuid(UUID.randomUUID().toString()); + wcsSrgvQueue3.setTaskNo("9999"); + wcsSrgvQueue3.setTaskType("1"); + wcsSrgvQueue3.setPriority(Long.parseLong("2")); + wcsSrgvQueue3.setCargo("1"); + wcsSrgvQueue3.setIssued(issued); + wcsSrgvQueue3.setExecutionStatus(executionStatus); + wcsSrgvQueue3.setCargoPickSite(cargoPickSite); + wcsSrgvQueue3.setCargoPlaceSite(wcsSrgvMap4.getSiteId()); + wcsSrgvQueue3.setStartSite(sameSiteDevices.get(0).getCurrSite()); + wcsSrgvQueue3.setEndSite(wcsSrgvMap4.getSiteId()); + wcsSrgvQueue3.setTheFloor(sameSiteDevices.get(0).getCurrFloor().toString()); + wcsSrgvQueue3.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + wcsSrgvQueue3.setAgvId(sameSiteDevices.get(0).getDeviceId().toString()); + wcsSrgvQueue3.setDefault02("4"); + wcsSrgvQueue3.setDefault07(sameSiteDevices.get(0).getCurrFloor().toString()); + wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue3); + } + } + + + } + } + + + //生成小车取货队列 WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue(); wcsSrgvQueue.setGuid(UUID.randomUUID().toString()); wcsSrgvQueue.setTaskNo(mydoJob1.getTaskNo()); @@ -246,10 +295,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { 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.setCargoPlaceSite(cargoPlaceSite); wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite()); wcsSrgvQueue.setEndSite(endSite); wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString()); @@ -330,6 +377,53 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { // 小车不在1楼 endSite = "tsj"; } + //筛选出deviceSrgvMap中deviceSrgv.getWorkMode() == 4并且deviceSrgv.getStatus() == 1并且deviceSrgv.getCurrSite() == cargoPickSite得对象,并排除掉其中deviceId与deviceSrgv.getDeviceId()相同的对象 + + List sameSiteDevices = deviceSrgvMap.values().stream() + .filter(d -> d.getWorkMode() == 4 + && d.getStatus() == 1 + && d.getCurrSite().equals(cargoPickSite)) + .collect(Collectors.toList()); + if(!sameSiteDevices.isEmpty() && !Objects.equals(sameSiteDevices.get(0).getDeviceId(), deviceSrgv.getDeviceId())){ + WcsSrgvMap wcsSrgvMap3 = new WcsSrgvMap(); + wcsSrgvMap3.setRemark("cache"); + List wcsSrgvMaps3 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap3); + for(WcsSrgvMap wcsSrgvMap4 : wcsSrgvMaps3){ + //deviceSrgvMap中所有对象的currSite都不等于wcsSrgvMap4的siteId的对象 + if(deviceSrgvMap.values().stream().noneMatch(d -> d.getCurrSite().equals(wcsSrgvMap4.getSiteId()))) { + WcsSrgvQueue wcsSrgvQueue5 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(sameSiteDevices.get(0).getDeviceId().toString()); + WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue(); + wcsSrgvQueue.setCargoPlaceSite(wcsSrgvMap4.getSiteId()); + List wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue); + if (wcsSrgvQueue5 == null && wcsSrgvQueues.isEmpty()) { + //生成占位小车到缓存点队列 + WcsSrgvQueue wcsSrgvQueue3 = new WcsSrgvQueue(); + wcsSrgvQueue3.setGuid(UUID.randomUUID().toString()); + wcsSrgvQueue3.setTaskNo(mydoJob1.getTaskNo()); + wcsSrgvQueue3.setTaskType("1"); + wcsSrgvQueue3.setPriority(Long.parseLong("2")); + wcsSrgvQueue3.setCargo("1"); + wcsSrgvQueue3.setIssued(issued); + wcsSrgvQueue3.setExecutionStatus(executionStatus); + wcsSrgvQueue3.setCargoPickSite(cargoPickSite); + wcsSrgvQueue3.setCargoPlaceSite(wcsSrgvMap4.getSiteId()); + wcsSrgvQueue3.setStartSite(sameSiteDevices.get(0).getCurrSite()); + wcsSrgvQueue3.setEndSite(wcsSrgvMap4.getSiteId()); + wcsSrgvQueue3.setTheFloor(sameSiteDevices.get(0).getCurrFloor().toString()); + wcsSrgvQueue3.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + wcsSrgvQueue3.setAgvId(sameSiteDevices.get(0).getDeviceId().toString()); + wcsSrgvQueue3.setDefault02("4"); + wcsSrgvQueue3.setDefault07(sameSiteDevices.get(0).getCurrFloor().toString()); + wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue3); + } + } + + + } + } + + + //生成小车取货队列 WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue(); @@ -679,14 +773,37 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { * @param wcsSrgvQueue * @return */ - private boolean finishTaskByQueue(String currSite, WcsSrgvQueue wcsSrgvQueue) { + private void finishTaskByQueue(String currSite, WcsSrgvQueue wcsSrgvQueue) { - //当前在放货站点 + //当前在终点 if (Objects.equals(currSite, wcsSrgvQueue.getEndSite())) { String taskType = wcsSrgvQueue.getTaskType(); String cargoPickSite = wcsSrgvQueue.getCargoPickSite(); String cargoPlaceSite = wcsSrgvQueue.getCargoPlaceSite(); + WcsSrgvMap wcsSrgvMap = new WcsSrgvMap(); + wcsSrgvMap.setRemark("outCache"); + List wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap); + + if(wcsSrgvMaps.stream().anyMatch(wcsSrgvMap1 -> wcsSrgvMap1.getSiteId().equals(currSite))){ + //生成小车从避让点到放货/取货位置,如果是空车就到取货位置,如果是满车就到放货位置 + wcsSrgvQueue.setExecutionStatus("4"); + wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); + wcsSrgvQueue.setIssued("0"); + wcsSrgvQueue.setExecutionStatus("1"); + wcsSrgvQueue.setStartSite(currSite); + if("1".equals(taskType)){ + wcsSrgvQueue.setEndSite(cargoPickSite); + }else if("2".equals(taskType)){ + wcsSrgvQueue.setEndSite(cargoPlaceSite); + } + wcsSrgvQueue.setTheFloor("1"); + wcsSrgvQueue.setDefault07("1"); + wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue); + return; + + } + //空车现在位置是取货位置(移库取货,入库取货,出库取货),满车现在是放货位置 if ("1".equals(taskType) && cargoPickSite.equals(currSite)) { @@ -749,13 +866,13 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); } else { - //充电之类得 不知道用不用 + //充电之类的,不知道用不用 } } - return false; + } /**