From 543c7a6feb6529eada57ebd76003cdd0adaf64ed Mon Sep 17 00:00:00 2001 From: liuhanqing Date: Tue, 23 Sep 2025 11:35:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/schedule/ScheduleThread.java | 14 -- .../MonitoringThread.java} | 12 +- .../ssj/common/RoadwaySsjThread.java | 84 +++++++++++ ...ead.java => Floor1BothWayInSsjThread.java} | 51 +++---- .../ssj/floor1/Floor1BothWaySsjOutThread.java | 92 ++++++++++++ .../ssj/floor1/Floor1SingleSsjThread.java | 85 +++++++++++ .../ssj/floor1/Floor1SsjInOutThread.java | 132 ------------------ .../ssj/floor2/Floor2InSsjThread.java | 91 ++++++++++++ .../ssj/floor2/Floor2OutSsjThread.java | 85 +++++++++++ .../ssj/floor2/Floor2SsjInOutThread.java | 132 ------------------ .../ssj/floor2/LineSsjThread.java | 84 +++++++++++ 11 files changed, 545 insertions(+), 317 deletions(-) rename ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/{floor2/Floor2SsjRoadWayThread.java => common/MonitoringThread.java} (94%) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/RoadwaySsjThread.java rename ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/{Floor1SsjRoadWayThread.java => Floor1BothWayInSsjThread.java} (62%) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWaySsjOutThread.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SingleSsjThread.java delete mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SsjInOutThread.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2InSsjThread.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2OutSsjThread.java delete mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2SsjInOutThread.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/LineSsjThread.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java index 856a6ee7..c1c8587c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java @@ -7,12 +7,6 @@ import com.ruoyi.common.domain.PlcConnectInfo; import com.ruoyi.schedule.plcRead.ddj.PlcDdjRead; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; import com.ruoyi.common.domain.CustomThread; -import com.ruoyi.schedule.scheduleTask.ddj.Ddj1Thread; -import com.ruoyi.schedule.scheduleTask.ddj.Ddj2Thread; -import com.ruoyi.schedule.scheduleTask.ssj.floor1.Floor1SsjInOutThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor1.Floor1SsjRoadWayThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor2.Floor2SsjInOutThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor2.Floor2SsjRoadWayThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -31,14 +25,6 @@ public class ScheduleThread { @Autowired private IDeviceSsjService deviceSsjService; - public CustomThread ddj1ThreadCustomThread; - public CustomThread ddj2ThreadCustomThread; - public CustomThread bsOutSsjThread; - public CustomThread jsOutSsjThread; - public CustomThread bsPickSsjThread; - public CustomThread jsPickSsjThread; - - private boolean isRun = false; private boolean isRun2 = false; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2SsjRoadWayThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/MonitoringThread.java similarity index 94% rename from ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2SsjRoadWayThread.java rename to ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/MonitoringThread.java index d749f55e..3edf28d2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2SsjRoadWayThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/MonitoringThread.java @@ -1,9 +1,9 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor2; +package com.ruoyi.schedule.scheduleTask.ssj.common; import com.ruoyi.api.service.IApiService; import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.queue.agv.service.IAgvQueueService; import com.ruoyi.device.ssj.domain.DeviceSsj; +import com.ruoyi.queue.agv.service.IAgvQueueService; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; import lombok.extern.slf4j.Slf4j; @@ -11,10 +11,11 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; - +/** + * 监控线程 + */ @Slf4j -public class Floor2SsjRoadWayThread implements Runnable { - +public class MonitoringThread implements Runnable { public HashMap> ssjCodeList; private IApiService apiService; @@ -79,5 +80,4 @@ public class Floor2SsjRoadWayThread implements Runnable { } } - } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/RoadwaySsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/RoadwaySsjThread.java new file mode 100644 index 00000000..d8a4ffb4 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/common/RoadwaySsjThread.java @@ -0,0 +1,84 @@ +package com.ruoyi.schedule.scheduleTask.ssj.common; + +import com.ruoyi.api.service.IApiService; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.device.ssj.domain.DeviceSsj; +import com.ruoyi.queue.agv.service.IAgvQueueService; +import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * 巷道口线程 到位+任务号+入库作业+货位未分配 请求wms生成货位 到位+任务号+入库作业+货位已分配 生成堆垛机入库队列 + */ +@Slf4j +public class RoadwaySsjThread implements Runnable{ + + public HashMap> ssjCodeList; + + private IApiService apiService; + private IAgvQueueService agvQueueService; + + public boolean isRun = true; + + + public void init() { + ssjCodeList = new HashMap<>(); + ArrayList ssjCodes = new ArrayList<>(); + ssjCodes.add("L1002"); + ssjCodes.add("L1004"); + ssjCodeList.put("in", ssjCodes); + apiService = SpringUtils.getBean(IApiService.class); + agvQueueService = SpringUtils.getBean(IAgvQueueService.class); + log.info("初始化服务 {},{}", apiService, agvQueueService); + } + + @Override + public void run() { + init(); + while (isRun){ + for (String type : ssjCodeList.keySet()) { + + switch ( type){ + case "in": + //生产线入库 + for (String ssjCode : ssjCodeList.get(type)) { + try { + if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { + inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); + } else { + log.error("设备不存在 ssjCode{}", ssjCode); + } + } catch (RuntimeException e) { + log.error(e.getMessage(),e); + } + + } + break; + } + } + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + + + public void inDispatch(DeviceSsj inSsjDevice) { + //如果入库请求1 并且 托盘码不为空 + if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0 && inSsjDevice.getRkqq() == 1) { + //查询货位 排列层 + + //查询入口 排列层 + + //生成堆垛机队列 + + } + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SsjRoadWayThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayInSsjThread.java similarity index 62% rename from ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SsjRoadWayThread.java rename to ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayInSsjThread.java index e51781e3..583ca956 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SsjRoadWayThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayInSsjThread.java @@ -1,7 +1,13 @@ package com.ruoyi.schedule.scheduleTask.ssj.floor1; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.StrUtil; +import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskResponse; import com.ruoyi.api.service.IApiService; import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.job.domain.MydoJob; +import com.ruoyi.queue.agv.domain.AgvQueue; import com.ruoyi.queue.agv.service.IAgvQueueService; import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; @@ -11,9 +17,12 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +/** + * 一楼双向线体入库线程 条码+到位+无出库作业 下发去向+任务号 有出库作业就下发退回 + */ @Slf4j -public class Floor1SsjRoadWayThread implements Runnable { +public class Floor1BothWayInSsjThread implements Runnable { public HashMap> ssjCodeList; @@ -24,17 +33,11 @@ public class Floor1SsjRoadWayThread implements Runnable { public void init() { - //todo 获取设备编码列表 ssjCodeList = new HashMap<>(); - ArrayList in = new ArrayList<>(); - in.add("L2003"); - in.add("L2005"); - ssjCodeList.put("in", in); - ArrayList out = new ArrayList<>(); - in.add("L2003"); - in.add("L2005"); - ssjCodeList.put("out", out); - + ArrayList ssjCodes = new ArrayList<>(); + ssjCodes.add("L1002"); + ssjCodes.add("L1004"); + ssjCodeList.put("in", ssjCodes); apiService = SpringUtils.getBean(IApiService.class); agvQueueService = SpringUtils.getBean(IAgvQueueService.class); log.info("初始化服务 {},{}", apiService, agvQueueService); @@ -43,12 +46,12 @@ public class Floor1SsjRoadWayThread implements Runnable { @Override public void run() { init(); - while (isRun) { + while (isRun){ for (String type : ssjCodeList.keySet()) { - switch (type) { + switch ( type){ case "in": - //退料入库 其它入库 + //生产线入库 for (String ssjCode : ssjCodeList.get(type)) { try { if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { @@ -57,21 +60,7 @@ public class Floor1SsjRoadWayThread implements Runnable { log.error("设备不存在 ssjCode{}", ssjCode); } } catch (RuntimeException e) { - log.error(e.getMessage(), e); - } - - } - break; - case "out": - for (String ssjCode : ssjCodeList.get(type)) { - try { - if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { - outDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); - } else { - log.error("设备不存在 ssjCode{}", ssjCode); - } - } catch (RuntimeException e) { - log.error(e.getMessage(), e); + log.error(e.getMessage(),e); } } @@ -87,10 +76,6 @@ public class Floor1SsjRoadWayThread implements Runnable { } - private void outDispatch(DeviceSsj outSsjDevice) { - - } - public void inDispatch(DeviceSsj inSsjDevice) { //如果入库请求1 并且 托盘码不为空 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWaySsjOutThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWaySsjOutThread.java new file mode 100644 index 00000000..ad1c120a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWaySsjOutThread.java @@ -0,0 +1,92 @@ +package com.ruoyi.schedule.scheduleTask.ssj.floor1; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.StrUtil; +import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskResponse; +import com.ruoyi.api.service.IApiService; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.device.ssj.domain.DeviceSsj; +import com.ruoyi.job.domain.MydoJob; +import com.ruoyi.queue.agv.domain.AgvQueue; +import com.ruoyi.queue.agv.service.IAgvQueueService; +import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * 一楼双向线体出库线程 循环盘点出库作业+巷道口空闲+出库线体全部空闲+无入库作业 生成堆垛机出库队列 + */ + +@Slf4j +public class Floor1BothWaySsjOutThread implements Runnable { + + public HashMap> ssjCodeList; + + private IApiService apiService; + private IAgvQueueService agvQueueService; + + public boolean isRun = true; + + + public void init() { + ssjCodeList = new HashMap<>(); + ArrayList ssjCodes = new ArrayList<>(); + ssjCodes.add("L1002"); + ssjCodes.add("L1004"); + ssjCodeList.put("in", ssjCodes); + apiService = SpringUtils.getBean(IApiService.class); + agvQueueService = SpringUtils.getBean(IAgvQueueService.class); + log.info("初始化服务 {},{}", apiService, agvQueueService); + } + + @Override + public void run() { + init(); + while (isRun){ + for (String type : ssjCodeList.keySet()) { + + switch ( type){ + case "in": + //生产线入库 + for (String ssjCode : ssjCodeList.get(type)) { + try { + if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { + inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); + } else { + log.error("设备不存在 ssjCode{}", ssjCode); + } + } catch (RuntimeException e) { + log.error(e.getMessage(),e); + } + + } + break; + } + } + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + + + public void inDispatch(DeviceSsj inSsjDevice) { + //如果入库请求1 并且 托盘码不为空 + if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0 && inSsjDevice.getRkqq() == 1) { + //查询货位 排列层 + + //查询入口 排列层 + + //生成堆垛机队列 + + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SingleSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SingleSsjThread.java new file mode 100644 index 00000000..da30488d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SingleSsjThread.java @@ -0,0 +1,85 @@ +package com.ruoyi.schedule.scheduleTask.ssj.floor1; + +import com.ruoyi.api.service.IApiService; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.queue.agv.service.IAgvQueueService; +import com.ruoyi.device.ssj.domain.DeviceSsj; +import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * 一楼单向出库线程 循环出库作业+巷道口空闲 生成堆垛机出库队列 + */ +@Slf4j +public class Floor1SingleSsjThread implements Runnable { + + public HashMap> ssjCodeList; + + private IApiService apiService; + private IAgvQueueService agvQueueService; + + public boolean isRun = true; + + + public void init() { + ssjCodeList = new HashMap<>(); + ArrayList ssjCodes = new ArrayList<>(); + ssjCodes.add("L1002"); + ssjCodes.add("L1004"); + ssjCodeList.put("in", ssjCodes); + apiService = SpringUtils.getBean(IApiService.class); + agvQueueService = SpringUtils.getBean(IAgvQueueService.class); + log.info("初始化服务 {},{}", apiService, agvQueueService); + } + + @Override + public void run() { + init(); + while (isRun){ + for (String type : ssjCodeList.keySet()) { + + switch ( type){ + case "in": + //生产线入库 + for (String ssjCode : ssjCodeList.get(type)) { + try { + if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { + inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); + } else { + log.error("设备不存在 ssjCode{}", ssjCode); + } + } catch (RuntimeException e) { + log.error(e.getMessage(),e); + } + + } + break; + } + } + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + + + public void inDispatch(DeviceSsj inSsjDevice) { + //如果入库请求1 并且 托盘码不为空 + if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0 && inSsjDevice.getRkqq() == 1) { + //查询货位 排列层 + + //查询入口 排列层 + + //生成堆垛机队列 + + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SsjInOutThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SsjInOutThread.java deleted file mode 100644 index 46c5b603..00000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SsjInOutThread.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor1; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjUtil; -import cn.hutool.core.util.StrUtil; -import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskResponse; -import com.ruoyi.api.service.IApiService; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.job.domain.MydoJob; -import com.ruoyi.queue.agv.domain.AgvQueue; -import com.ruoyi.queue.agv.service.IAgvQueueService; -import com.ruoyi.device.ssj.domain.DeviceSsj; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - - -@Slf4j -public class Floor1SsjInOutThread implements Runnable { - - public HashMap> ssjCodeList; - - private IApiService apiService; - private IAgvQueueService agvQueueService; - - public boolean isRun = true; - - - public void init() { - //todo 获取设备编码列表 - ssjCodeList = new HashMap<>(); - ArrayList ssjCodes = new ArrayList<>(); - ssjCodes.add("G2012"); - ssjCodes.add("G3009"); - ssjCodes.add("G3018"); - ssjCodes.add("G4009"); - ssjCodes.add("G4018"); - ssjCodes.add("G5009"); - ssjCodes.add("G5018"); - ssjCodeList.put("in", ssjCodes); - - apiService = SpringUtils.getBean(IApiService.class); - agvQueueService = SpringUtils.getBean(IAgvQueueService.class); - log.info("初始化服务 {},{}", apiService, agvQueueService); - } - - @Override - public void run() { - init(); - while (isRun){ - for (String type : ssjCodeList.keySet()) { - - switch ( type){ - case "in": - //正常入库 尾箱回流 物料入库 空料箱入库 - for (String ssjCode : ssjCodeList.get(type)) { - try { - if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { - inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); - } else { - log.error("设备不存在 ssjCode{}", ssjCode); - } - } catch (RuntimeException e) { - log.error(e.getMessage(),e); - } - - } - break; - } - } - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - - - public void inDispatch(DeviceSsj inSsjDevice) { - //如果入库请求1 并且 托盘码不为空 - if (inSsjDevice.getDw()==1 && inSsjDevice.getRkqq() == 1 && StrUtil.isNotEmpty(inSsjDevice.getTrayCode())) { - //判断是否生成队列 - AgvQueue agvQueueParam = new AgvQueue(); - agvQueueParam.setWmsTraycode(inSsjDevice.getTrayCode()); - //agvQueueParam.setStatus("0"); - List agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam); - if (CollUtil.isEmpty(agvQueues)) { - //根据入口,查询对应的入库作业 - MydoJob mydoJobParam = new MydoJob(); - mydoJobParam.setStatus("1"); - mydoJobParam.setTrayCode(inSsjDevice.getTrayCode()); - mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode()); - MydoJob mydoJob = apiService.requestEnterByTrayCode(mydoJobParam); - if (ObjUtil.isNotNull(mydoJob)) { - - //生成agv队列 - AgvQueue agvQueue = apiService.createAgvQueue(inSsjDevice.getName(), mydoJob.getCargoSpaceId(),mydoJob.getTrayCode(),mydoJob.getTaskNo(),"1"); - //请求任务生成 - GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = apiService.requestAgvQueue(agvQueue); - //修改wms任务状态 - if (genAgvSchedulingTaskResponse.getCode() == 0) { - //修改ctu执行状态 - agvQueue.setStatus("1"); - agvQueueService.updateAgvQueue(agvQueue); - log.info("向CTU下入库库作业"); - - } - - } - }else { - AgvQueue agvQueue = agvQueues.get(0); - if ("0".equals(agvQueue.getStatus())){ - //请求任务生成 - GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = apiService.requestAgvQueue(agvQueue); - //修改wms任务状态 - if (genAgvSchedulingTaskResponse.getCode() == 0) { - //修改ctu执行状态 - agvQueue.setStatus("1"); - agvQueueService.updateAgvQueue(agvQueue); - log.info("向CTU下入库库作业"); - } - } - } - } - } - -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2InSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2InSsjThread.java new file mode 100644 index 00000000..cdeeba98 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2InSsjThread.java @@ -0,0 +1,91 @@ +package com.ruoyi.schedule.scheduleTask.ssj.floor2; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.StrUtil; +import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskResponse; +import com.ruoyi.api.service.IApiService; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.job.domain.MydoJob; +import com.ruoyi.queue.agv.domain.AgvQueue; +import com.ruoyi.queue.agv.service.IAgvQueueService; +import com.ruoyi.device.ssj.domain.DeviceSsj; +import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * 二楼入口线程 循环agv搬运完成状态的队列,找到作业,下发去向+任务号 + */ +@Slf4j +public class Floor2InSsjThread implements Runnable { + + public HashMap> ssjCodeList; + + private IApiService apiService; + private IAgvQueueService agvQueueService; + + public boolean isRun = true; + + + public void init() { + ssjCodeList = new HashMap<>(); + ArrayList ssjCodes = new ArrayList<>(); + ssjCodes.add("L1002"); + ssjCodes.add("L1004"); + ssjCodeList.put("in", ssjCodes); + apiService = SpringUtils.getBean(IApiService.class); + agvQueueService = SpringUtils.getBean(IAgvQueueService.class); + log.info("初始化服务 {},{}", apiService, agvQueueService); + } + + @Override + public void run() { + init(); + while (isRun){ + for (String type : ssjCodeList.keySet()) { + + switch ( type){ + case "in": + //生产线入库 + for (String ssjCode : ssjCodeList.get(type)) { + try { + if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { + inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); + } else { + log.error("设备不存在 ssjCode{}", ssjCode); + } + } catch (RuntimeException e) { + log.error(e.getMessage(),e); + } + + } + break; + } + } + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + + + public void inDispatch(DeviceSsj inSsjDevice) { + //如果入库请求1 并且 托盘码不为空 + if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0 && inSsjDevice.getRkqq() == 1) { + //查询货位 排列层 + + //查询入口 排列层 + + //生成堆垛机队列 + + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2OutSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2OutSsjThread.java new file mode 100644 index 00000000..da793529 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2OutSsjThread.java @@ -0,0 +1,85 @@ +package com.ruoyi.schedule.scheduleTask.ssj.floor2; + +import com.ruoyi.api.service.IApiService; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.queue.agv.service.IAgvQueueService; +import com.ruoyi.device.ssj.domain.DeviceSsj; +import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * 二楼出库线程 检测当前巷道有没有入库作业,没有作业,生成堆垛机出库队列 + */ +@Slf4j +public class Floor2OutSsjThread implements Runnable { + + public HashMap> ssjCodeList; + + private IApiService apiService; + private IAgvQueueService agvQueueService; + + public boolean isRun = true; + + + public void init() { + ssjCodeList = new HashMap<>(); + ArrayList ssjCodes = new ArrayList<>(); + ssjCodes.add("L1002"); + ssjCodes.add("L1004"); + ssjCodeList.put("in", ssjCodes); + apiService = SpringUtils.getBean(IApiService.class); + agvQueueService = SpringUtils.getBean(IAgvQueueService.class); + log.info("初始化服务 {},{}", apiService, agvQueueService); + } + + @Override + public void run() { + init(); + while (isRun){ + for (String type : ssjCodeList.keySet()) { + + switch ( type){ + case "in": + //生产线入库 + for (String ssjCode : ssjCodeList.get(type)) { + try { + if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { + inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); + } else { + log.error("设备不存在 ssjCode{}", ssjCode); + } + } catch (RuntimeException e) { + log.error(e.getMessage(),e); + } + + } + break; + } + } + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + + + public void inDispatch(DeviceSsj inSsjDevice) { + //如果入库请求1 并且 托盘码不为空 + if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0 && inSsjDevice.getRkqq() == 1) { + //查询货位 排列层 + + //查询入口 排列层 + + //生成堆垛机队列 + + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2SsjInOutThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2SsjInOutThread.java deleted file mode 100644 index 5d5b4664..00000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2SsjInOutThread.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor2; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjUtil; -import cn.hutool.core.util.StrUtil; -import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskResponse; -import com.ruoyi.api.service.IApiService; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.job.domain.MydoJob; -import com.ruoyi.queue.agv.domain.AgvQueue; -import com.ruoyi.queue.agv.service.IAgvQueueService; -import com.ruoyi.device.ssj.domain.DeviceSsj; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - - -@Slf4j -public class Floor2SsjInOutThread implements Runnable { - - public HashMap> ssjCodeList; - - private IApiService apiService; - private IAgvQueueService agvQueueService; - - public boolean isRun = true; - - - public void init() { - //todo 获取设备编码列表 - ssjCodeList = new HashMap<>(); - ArrayList ssjCodes = new ArrayList<>(); - ssjCodes.add("G2012"); - ssjCodes.add("G3009"); - ssjCodes.add("G3018"); - ssjCodes.add("G4009"); - ssjCodes.add("G4018"); - ssjCodes.add("G5009"); - ssjCodes.add("G5018"); - ssjCodeList.put("in", ssjCodes); - - apiService = SpringUtils.getBean(IApiService.class); - agvQueueService = SpringUtils.getBean(IAgvQueueService.class); - log.info("初始化服务 {},{}", apiService, agvQueueService); - } - - @Override - public void run() { - init(); - while (isRun){ - for (String type : ssjCodeList.keySet()) { - - switch ( type){ - case "in": - //正常入库 尾箱回流 物料入库 空料箱入库 - for (String ssjCode : ssjCodeList.get(type)) { - try { - if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { - inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); - } else { - log.error("设备不存在 ssjCode{}", ssjCode); - } - } catch (RuntimeException e) { - log.error(e.getMessage(),e); - } - - } - break; - } - } - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - - - public void inDispatch(DeviceSsj inSsjDevice) { - //如果入库请求1 并且 托盘码不为空 - if (inSsjDevice.getDw()==1 && inSsjDevice.getRkqq() == 1 && StrUtil.isNotEmpty(inSsjDevice.getTrayCode())) { - //判断是否生成队列 - AgvQueue agvQueueParam = new AgvQueue(); - agvQueueParam.setWmsTraycode(inSsjDevice.getTrayCode()); - //agvQueueParam.setStatus("0"); - List agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam); - if (CollUtil.isEmpty(agvQueues)) { - //根据入口,查询对应的入库作业 - MydoJob mydoJobParam = new MydoJob(); - mydoJobParam.setStatus("1"); - mydoJobParam.setTrayCode(inSsjDevice.getTrayCode()); - mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode()); - MydoJob mydoJob = apiService.requestEnterByTrayCode(mydoJobParam); - if (ObjUtil.isNotNull(mydoJob)) { - - //生成agv队列 - AgvQueue agvQueue = apiService.createAgvQueue(inSsjDevice.getName(), mydoJob.getCargoSpaceId(),mydoJob.getTrayCode(),mydoJob.getTaskNo(),"1"); - //请求任务生成 - GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = apiService.requestAgvQueue(agvQueue); - //修改wms任务状态 - if (genAgvSchedulingTaskResponse.getCode() == 0) { - //修改ctu执行状态 - agvQueue.setStatus("1"); - agvQueueService.updateAgvQueue(agvQueue); - log.info("向CTU下入库库作业"); - - } - - } - }else { - AgvQueue agvQueue = agvQueues.get(0); - if ("0".equals(agvQueue.getStatus())){ - //请求任务生成 - GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = apiService.requestAgvQueue(agvQueue); - //修改wms任务状态 - if (genAgvSchedulingTaskResponse.getCode() == 0) { - //修改ctu执行状态 - agvQueue.setStatus("1"); - agvQueueService.updateAgvQueue(agvQueue); - log.info("向CTU下入库库作业"); - } - } - } - } - } - -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/LineSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/LineSsjThread.java new file mode 100644 index 00000000..44324d6c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/LineSsjThread.java @@ -0,0 +1,84 @@ +package com.ruoyi.schedule.scheduleTask.ssj.floor2; + +import com.ruoyi.api.service.IApiService; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.device.ssj.domain.DeviceSsj; +import com.ruoyi.queue.agv.service.IAgvQueueService; +import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * 生产线输送机 + * 生产线线程 检测到位+托盘条码+托盘大小 请求wms生成入库作业 。 循环作业表,检测有没有出库作业 ,生成agv搬运作业。 + */ +@Slf4j +public class LineSsjThread implements Runnable { + public HashMap> ssjCodeList; + + private IApiService apiService; + private IAgvQueueService agvQueueService; + + public boolean isRun = true; + + + public void init() { + ssjCodeList = new HashMap<>(); + ArrayList ssjCodes = new ArrayList<>(); + ssjCodes.add("L1002"); + ssjCodes.add("L1004"); + ssjCodeList.put("in", ssjCodes); + apiService = SpringUtils.getBean(IApiService.class); + agvQueueService = SpringUtils.getBean(IAgvQueueService.class); + log.info("初始化服务 {},{}", apiService, agvQueueService); + } + + @Override + public void run() { + init(); + while (isRun){ + for (String type : ssjCodeList.keySet()) { + + switch ( type){ + case "in": + //生产线入库 + for (String ssjCode : ssjCodeList.get(type)) { + try { + if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { + inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); + } else { + log.error("设备不存在 ssjCode{}", ssjCode); + } + } catch (RuntimeException e) { + log.error(e.getMessage(),e); + } + + } + break; + } + } + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + + + public void inDispatch(DeviceSsj inSsjDevice) { + //如果入库请求1 并且 托盘码不为空 + if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0 && inSsjDevice.getRkqq() == 1) { + //查询货位 排列层 + + //查询入口 排列层 + + //生成堆垛机队列 + + } + } +}