From 696e73b0a963aa04a10c48f5e47c5fd7ad643375 Mon Sep 17 00:00:00 2001 From: zgw <13623675548@163.com> Date: Thu, 25 Dec 2025 13:56:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=BF=87=E7=A8=8B=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/service/impl/ApiServiceImpl.java | 1 + .../com/ruoyi/job/mapper/MydoJobMapper.java | 2 + .../ruoyi/job/service/IMydoJobService.java | 1 + .../job/service/impl/MydoJobServiceImpl.java | 5 + .../com/ruoyi/schedule/ScheduleThread.java | 35 +++-- .../schedule/plcRead/cdz/PlcCdzRead.java | 106 ++++++++++---- .../schedule/scheduleTask/cdz/CdzThread.java | 24 ++-- .../scheduleTask/monit/MonitoringThread.java | 11 ++ .../scheduleTask/srgv/BaseSRgvThread.java | 129 ++++++++++-------- .../schedule/scheduleTask/ssj/SsjThread.java | 2 + .../resources/mapper/job/MydoJobMapper.xml | 4 + .../mapper/job/SrgvChargingJobMapper.xml | 7 +- 12 files changed, 226 insertions(+), 101 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java index 23f7dea..1b435dd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java @@ -355,6 +355,7 @@ public class ApiServiceImpl implements IApiService { mydoJob.setRoadwayId(receiveOutJob.getRoadwayId()); mydoJob.setCreateTime(DateUtils.getNowDate()); mydoJob.setExecutionPhase("0"); + mydoJob.setTheFloor(receiveOutJob.getRoadwayId()); int i = mydoJobService.insertMydoJob(mydoJob); if (i > 0) { return AjaxResult.success(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mapper/MydoJobMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mapper/MydoJobMapper.java index 81ffb88..106a019 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mapper/MydoJobMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mapper/MydoJobMapper.java @@ -83,4 +83,6 @@ public interface MydoJobMapper MydoJob selectRunningMydoJobByExitList(@Param("exitList") List exitList); void selectMydoJobOutside(HashMap map); + + List selectOutJobList(@Param("theFloor") String floor); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java b/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java index 0910781..d4558b7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java @@ -87,4 +87,5 @@ public interface IMydoJobService void selectMydoJobOutside(HashMap map); + List selectOutJobList(String floor); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java index 422104b..71a38a6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java @@ -183,4 +183,9 @@ public class MydoJobServiceImpl implements IMydoJobService public void selectMydoJobOutside(HashMap map) { mydoJobMapper.selectMydoJobOutside(map); } + + @Override + public List selectOutJobList(String floor) { + return mydoJobMapper.selectOutJobList(floor); + } } 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 ee3fc63..faa0925 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java @@ -3,6 +3,8 @@ package com.ruoyi.schedule; import HslCommunication.Core.Types.OperateResultExOne; import com.ruoyi.common.domain.CustomThread; import com.ruoyi.common.domain.PlcConnectInfo; +import com.ruoyi.device.cdz.domain.DeviceCdz; +import com.ruoyi.device.cdz.service.IDeviceCdzService; import com.ruoyi.device.ddj.domain.MsgDdj; import com.ruoyi.device.ddj.service.IMsgDdjService; import com.ruoyi.device.srgv.domain.DeviceSrgv; @@ -11,6 +13,7 @@ import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.device.ssj.service.IDeviceSsjService; import com.ruoyi.device.tsj.domain.DeviceTsj; import com.ruoyi.device.tsj.service.impl.DeviceTsjServiceImpl; +import com.ruoyi.schedule.plcRead.cdz.PlcCdzRead; import com.ruoyi.schedule.plcRead.ddj.PlcDdjRead; import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; @@ -35,6 +38,7 @@ import java.util.concurrent.ConcurrentHashMap; public class ScheduleThread { public CustomThread plcSsjReadCustomThread; + public CustomThread plcCdzjReadCustomThread; public CustomThread plcTsjReadCustomThread; public CustomThread plcSrgvReadCustomThread1; public CustomThread plcSrgvReadCustomThread2; @@ -56,6 +60,9 @@ public class ScheduleThread { @Autowired private IDeviceSrgvService deviceSrgvService; + @Autowired + private IDeviceCdzService deviceCdzService; + private boolean isRun = false; private boolean isRun2 = false; @Autowired @@ -91,26 +98,36 @@ public class ScheduleThread { //提升机线程 TsjThread tsjThread=new TsjThread(); tsjThreadCustomThread=new CustomThread<>(new Thread(tsjThread),tsjThread); -// //充电线程 -// CdzThread cdzThread = new CdzThread(); -// cdzThreadCustomThread=new CustomThread<>(new Thread(cdzThread),cdzThread); + //充电线程 + CdzThread cdzThread = new CdzThread(); + cdzThreadCustomThread=new CustomThread<>(new Thread(cdzThread),cdzThread); } /** * plc读取初始化 */ private void plcReadInit() { - + //plc输送机读取线程 ConcurrentHashMap ssjList = new ConcurrentHashMap<>(); //获取要取的输送机 List deviceSsjs = deviceSsjService.selectDeviceSsjList(new DeviceSsj()); for (DeviceSsj deviceSsj : deviceSsjs) { ssjList.put(deviceSsj.getDeviceCode(), deviceSsj); } - //plc输送机读取线程 - PlcSsjRead plcSsjRead = new PlcSsjRead(ssjList, new PlcConnectInfo("172.16.100.9", 1502)); + PlcSsjRead plcSsjRead = new PlcSsjRead(ssjList, new PlcConnectInfo("127.0.0.1", 1502)); Thread plcSsjReadThread = new Thread(plcSsjRead); plcSsjReadCustomThread = new CustomThread(plcSsjReadThread, plcSsjRead); + //plc充电桩读取线程 + ConcurrentHashMap cdzList = new ConcurrentHashMap<>(); + List deviceCdzList =deviceCdzService.selectDeviceCdzList(new DeviceCdz()); + for (DeviceCdz deviceCdz : deviceCdzList) { + cdzList.put(String.valueOf(deviceCdz.getId()),deviceCdz); + } + PlcCdzRead plcCdzRead = new PlcCdzRead(cdzList, new PlcConnectInfo("127.0.0.1", 1502)); + Thread plcCdzReadThread = new Thread(plcCdzRead); + plcCdzjReadCustomThread = new CustomThread(plcCdzReadThread, plcCdzRead); + + ConcurrentHashMap tsjList = new ConcurrentHashMap<>(); //获取要取的提升机 List tsjLists = deviceTsjServiceImpl.selectDeviceTsjList(new DeviceTsj()); @@ -118,7 +135,7 @@ public class ScheduleThread { tsjList.put(t.getName(), t); } //plc提升机读取线程 - PlcTsjRead plcTsjRead = new PlcTsjRead(tsjList, new PlcConnectInfo("172.16.100.9", 1502)); + PlcTsjRead plcTsjRead = new PlcTsjRead(tsjList, new PlcConnectInfo("127.0.0.1", 1502)); Thread plcTsjReadThread = new Thread(plcTsjRead); plcTsjReadCustomThread = new CustomThread(plcTsjReadThread, plcTsjRead); @@ -154,6 +171,8 @@ public class ScheduleThread { // plcSrgvReadCustomThread2.getThread().start(); plcTsjReadCustomThread.getThread().start(); monitoringCustomThread.getThread().start(); + //充电桩读取线程 +// plcCdzjReadCustomThread.getThread().start(); isRun = true; } @@ -164,7 +183,7 @@ public class ScheduleThread { ssjThreadCustomThread.thread.start(); tsjThreadCustomThread.thread.start(); sRgvThreadCustomThread.thread.start(); - //cdzThreadCustomThread.thread.start(); +// cdzThreadCustomThread.thread.start(); isRun2 = true; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/cdz/PlcCdzRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/cdz/PlcCdzRead.java index bf0ba22..41f7285 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/cdz/PlcCdzRead.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/cdz/PlcCdzRead.java @@ -2,19 +2,28 @@ package com.ruoyi.schedule.plcRead.cdz; import HslCommunication.BasicFramework.SoftBasic; import HslCommunication.Core.Net.IReadWriteNet; +import HslCommunication.Core.Transfer.IByteTransform; import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; +import HslCommunication.ModBus.ModbusTcpNet; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import cn.hutool.core.convert.Convert; import com.ruoyi.common.domain.HslRead; import com.ruoyi.common.domain.PlcConnectInfo; +import com.ruoyi.common.domain.SendData2; import com.ruoyi.device.cdz.domain.DeviceCdz; +import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.device.tsj.domain.DeviceTsj; +import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; import com.ruoyi.schedule.plcRead.util.ParseUtil; import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; @Slf4j public class PlcCdzRead implements Runnable { @@ -26,20 +35,31 @@ public class PlcCdzRead implements Runnable { public static IReadWriteNet readWriteNet = null; private final String ip; private final int port; + private DeviceCdz cdzDevice; private boolean success = false; + private static ModbusTcpNet modbusTcpNet; + private IByteTransform byteTransform = null; public PlcCdzRead(ConcurrentHashMap deviceCdzMap, PlcConnectInfo plcConnectInfo) { PlcCdzRead.deviceCdzMap = deviceCdzMap; + cdzDevice=deviceCdzMap.get("1"); this.ip = plcConnectInfo.getIp(); this.port = plcConnectInfo.getPort(); } - public static int WriteToCdz(String address, byte[] data) { - int a = 0; - if (readWriteNet != null) { - a = HslRead.WriteResultRender(readWriteNet.Write(address, data), address); - } - return a; + + public static boolean Write(String address, int[] value) { + + OperateResult write = modbusTcpNet.Write(address, value); + return write.IsSuccess; + + } + + public static boolean Write(String address, short[] value) { + + OperateResult write = modbusTcpNet.Write(address, value); + return write.IsSuccess; + } @Override @@ -47,11 +67,10 @@ public class PlcCdzRead implements Runnable { while (isRun) { try { if (IsConnect()) { - for (String cdzCode : deviceCdzMap.keySet()) { - DeviceCdz deviceCdz = deviceCdzMap.get(cdzCode); - plcRead(deviceCdz); + if (cdzDevice!=null){ + plcRead(cdzDevice); } - Thread.sleep(1000); + Thread.sleep(1500); } else { reConnect(); } @@ -67,28 +86,27 @@ public class PlcCdzRead implements Runnable { } private void plcRead(DeviceCdz deviceCdz) { - OperateResultExOne read2 = readWriteNet.Read(deviceCdz.getPlcDbReadAddress(), Short.parseShort("20")); - String ddsx1 = "0"; - if (read2.IsSuccess) { - ddsx1 = SoftBasic.ByteToHexString(read2.Content); - deviceCdz.setStatus(ParseUtil.optInt(0, ddsx1)); - deviceCdz.setModel(ParseUtil.optInt(2, ddsx1)); + OperateResultExOne read1 = modbusTcpNet.Read("1136", (short) 2);//1110 操作模式 + if (read1.IsSuccess) { + cdzDevice.setModel(Convert.toInt(byteTransform.TransInt16(read1.Content, 0))); + cdzDevice.setStatus(Convert.toInt(byteTransform.TransInt16(read1.Content, 2))); + log.info("=====读取到充电桩充电模式:{}======", Convert.toInt(byteTransform.TransInt16(read1.Content, 0))); + log.info("=====读取到充电桩充电状态:{}======", Convert.toInt(byteTransform.TransInt16(read1.Content, 0))); } } void ConnectServer() { - siemensS7Net = new SiemensS7Net(SiemensPLCS.S1500); + modbusTcpNet = new ModbusTcpNet(); try { - siemensS7Net.setIpAddress(this.ip); - siemensS7Net.setPort(this.port); - siemensS7Net.setRack((byte) 0); - siemensS7Net.setSlot((byte) 1); - - OperateResult connect = siemensS7Net.ConnectServer(); + modbusTcpNet.setIpAddress(this.ip); + modbusTcpNet.setPort(this.port); + modbusTcpNet.setStation((byte) 1); + this.byteTransform = modbusTcpNet.getByteTransform(); + OperateResult connect = modbusTcpNet.ConnectServer(); if (connect.IsSuccess) { setIsConnect(true); - readWriteNet = siemensS7Net; + readWriteNet = modbusTcpNet; } } catch (Exception ex) { log.info("********IP:" + this.ip + " port:" + this.port + "连接失败 " + ex.getMessage()); @@ -122,5 +140,43 @@ public class PlcCdzRead implements Runnable { setIsConnect(false); } - + public static int writeToCdz(String czms) { + List sendDataList = new ArrayList<>(); + sendDataList.add(new SendData2("1139", czms, 1)); + int b = 1; + for (SendData2 sendData : sendDataList) { + String address = sendData.getAddress(); + String data = sendData.getData(); + String[] split = data.split(","); + int type = sendData.getType(); + if (type == 2) { + int[] intData = Arrays.stream(split) + .map(String::trim) + .mapToInt(Integer::parseInt) + .toArray(); + boolean write = PlcCdzRead.Write(address, intData); + if (!write) { + b = 0; + break; + } + } else if (type == 1) { + short[] shortData = new short[split.length]; + for (int i = 0; i < split.length; i++) { + try { + shortData[i] = Short.parseShort(split[i].trim()); + } catch (NumberFormatException e) { + shortData[i] = 0; + } + } + boolean write = PlcCdzRead.Write(address, shortData); + if (!write) { + b = 0; + break; + } + } + } + String collect = sendDataList.stream().map(li -> "{" + li.getAddress() + ":" + li.getData() + "}").collect(Collectors.joining(",")); + log.info("充电桩下发完成,下发值:{},,结果:{}", collect, b); + return b; + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java index e9cdf19..f7ac9c1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java @@ -35,6 +35,7 @@ public class CdzThread implements Runnable { private IDeviceCdzService deviceCdzService; private IDeviceSrgvService deviceSrgvService; private IWcsSrgvQueueService wcsSrgvQueueService; + int taskNo =400001; //充电任务号 public void init() { chargingJobService = SpringUtils.getBean(ISrgvChargingJobService.class); @@ -98,27 +99,23 @@ public class CdzThread implements Runnable { //充电任务下发 SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); - srgvChargingJobParam.setChargingStatus("0"); + srgvChargingJobParam.setChargingStatus("1"); srgvChargingJobParam.setJobType("1"); - srgvChargingJobParam.setJobStatus("3"); + srgvChargingJobParam.setJobStatus("4"); List srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); if (CollUtil.isNotEmpty(srgvChargingJobs)) { - for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) { - if ("0".equals(srgvChargingJob.getChargingStatus())) { - int i = PlcCdzRead.WriteToCdz("", null); + if ("1".equals(srgvChargingJob.getChargingStatus())) { + int i = PlcCdzRead.writeToCdz("1"); if (i == 1) { srgvChargingJob.setChargingStatus("2"); srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date())); chargingJobService.updateSrgvChargingJob(srgvChargingJob); } } - } - } - //生成断电任务 有任务且电量大于50 WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue(); wcsSrgvQueueParam.setIssued("0"); @@ -159,7 +156,7 @@ public class CdzThread implements Runnable { for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) { if ("0".equals(srgvChargingJob.getChargingStatus())) { - int i = PlcCdzRead.WriteToCdz("", null); + int i = PlcCdzRead.writeToCdz("2"); if (i == 1) { srgvChargingJob.setChargingStatus("1"); srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date())); @@ -211,16 +208,21 @@ public class CdzThread implements Runnable { srgvChargingJobParam.setChargingId(cdz.getId().toString()); List wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); if (CollUtil.isEmpty(wcsChargingJobs)) { + if (taskNo==450000){ + taskNo=4000001; + } SrgvChargingJob scj = new SrgvChargingJob(); scj.setGuid(IdUtil.fastSimpleUUID()); scj.setChargingSite(cdz.getSiteId()); scj.setJobStatus("1"); - scj.setChargingStatus("0"); + scj.setChargingStatus("1"); scj.setStartDate(DateUtil.now()); scj.setJobType("1");//到充电桩 + scj.setTaskNo(String.valueOf(taskNo)); scj.setAgvId(deviceSrgv.getDeviceId().toString()); scj.setChargingId(deviceSrgv.getDeviceId().toString()); chargingJobService.insertSrgvChargingJob(scj); + taskNo++; } } } @@ -240,10 +242,8 @@ public class CdzThread implements Runnable { List srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); if (CollUtil.isNotEmpty(srgvChargingJobs)) { SrgvChargingJob scj = srgvChargingJobs.get(0); - //插入历史 chargingJobService.insertHistory(scj.getGuid()); - scj.setChargingSite(cdz.getSiteId()); scj.setJobStatus("1"); scj.setChargingStatus("0"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java index d5f3efc..8f0be4c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java @@ -1,12 +1,16 @@ package com.ruoyi.schedule.scheduleTask.monit; import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.device.cdz.domain.DeviceCdz; +import com.ruoyi.device.cdz.service.IDeviceCdzService; +import com.ruoyi.device.cdz.service.impl.DeviceCdzServiceImpl; import com.ruoyi.device.ddj.service.IMsgDdjService; import com.ruoyi.device.srgv.service.IDeviceSrgvService; import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.device.ssj.service.IDeviceSsjService; import com.ruoyi.device.tsj.service.IDeviceTsjService; import com.ruoyi.device.tsj.service.impl.DeviceTsjServiceImpl; +import com.ruoyi.schedule.plcRead.cdz.PlcCdzRead; import com.ruoyi.schedule.plcRead.ddj.PlcDdjRead; import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; @@ -21,11 +25,13 @@ public class MonitoringThread implements Runnable { private IDeviceSsjService deviceSsjService; private IDeviceSrgvService deviceSrgvService; private DeviceTsjServiceImpl deviceTsjService; + private DeviceCdzServiceImpl deviceCdzService; public void init() { deviceSsjService = SpringUtils.getBean(IDeviceSsjService.class); deviceSrgvService = SpringUtils.getBean(IDeviceSrgvService.class); deviceTsjService = SpringUtils.getBean(DeviceTsjServiceImpl.class); + deviceCdzService =SpringUtils.getBean(DeviceCdzServiceImpl.class); } @Override @@ -38,6 +44,11 @@ public class MonitoringThread implements Runnable { deviceSsjService.updateDeviceSsj(deviceSsj); } + for (String cdzName : PlcCdzRead.deviceCdzMap.keySet()) { + DeviceCdz deviceCdz = PlcCdzRead.deviceCdzMap.get(cdzName); + deviceCdzService.updateDeviceCdz(deviceCdz); + } + for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) { deviceSrgvService.updateDeviceSrgv(PlcSrgvRead.deviceSrgvMap.get(sRgv)); } 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 8d40756..b325691 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 @@ -12,6 +12,7 @@ import com.ruoyi.bas.srgvmap.service.RoadCacheService; import com.ruoyi.common.domain.SendData2; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.device.cdz.domain.DeviceCdz; +import com.ruoyi.device.cdz.service.IDeviceCdzService; import com.ruoyi.device.srgv.domain.DeviceSrgv; import com.ruoyi.device.srgv.service.IDeviceSrgvService; import com.ruoyi.device.srgv.service.impl.DeviceSrgvServiceImpl; @@ -65,6 +66,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { public IDeviceSrgvService deviceSrgvService; + public IDeviceCdzService deviceCdzService; public JobCallBackServiceImpl jobCallBackService; @@ -84,7 +86,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { wcsSrgvMapService = SpringUtils.getBean(IWcsSrgvMapService.class); roadCacheService = SpringUtils.getBean(RoadCacheService.class); deviceSrgvService = SpringUtils.getBean(DeviceSrgvServiceImpl.class); - jobCallBackService=SpringUtils.getBean(JobCallBackServiceImpl.class); + jobCallBackService = SpringUtils.getBean(JobCallBackServiceImpl.class); + deviceCdzService = SpringUtils.getBean(IDeviceCdzService.class); } @Override @@ -92,11 +95,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { init(); while (isRun) { - - - for (String code : sRgvCodeList.get("srgv")) { - - try { + try { + for (String code : sRgvCodeList.get("srgv")) { if (PlcSrgvRead.deviceSrgvMap.containsKey(code)) { if (ObjUtil.isNotNull(PlcSrgvRead.deviceSrgvMap.get(code))) { @@ -114,18 +114,15 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { log.error("小车设备为空"); } } - } catch (RuntimeException e) { - log.error(e.getMessage(), e); } - - - } - - - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); + } catch (Exception e) { + log.info("********小车调度异常***************"); + } finally { + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } } } @@ -147,7 +144,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { DeviceCdz deviceCdz = PlcCdzRead.deviceCdzMap.get(chargingId); if (ObjUtil.isNotNull(deviceCdz)) { //下发断电任务 - int i = PlcCdzRead.WriteToCdz("", null); + int i = PlcCdzRead.writeToCdz("2"); if (i == 1) { srgvChargingJobMapper.insertHistory(srgvChargingJob.getGuid()); srgvChargingJobMapper.deleteSrgvChargingJobByGuid(srgvChargingJob.getGuid()); @@ -173,7 +170,6 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { SrgvChargingJob srgvChargingJob = srgvChargingJobs.get(0); if ("1".equals(srgvChargingJob.getChargingStatus())) { //初始状态 - //判断小车和充电桩是否在同一层 String agvId = srgvChargingJob.getAgvId(); String chargingId = srgvChargingJob.getChargingId(); @@ -187,7 +183,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { List wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam); if (CollUtil.isEmpty(wcsSrgvQueues)) { //生成队列 - createSrgvChargingQueue(deviceSrgv, chargingSite, "3"); + createSrgvChargingQueue(deviceSrgv, chargingSite, "3", srgvChargingJob.getTaskNo()); srgvChargingJob.setJobStatus("3"); srgvChargingJobMapper.updateSrgvChargingJob(srgvChargingJob); } @@ -198,7 +194,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { String chargingSite = srgvChargingJob.getChargingSite();//充电桩站点 List wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam); if (CollUtil.isEmpty(wcsSrgvQueues)) { - createSrgvChargingQueue(deviceSrgv, chargingSite, "8"); + createSrgvChargingQueue(deviceSrgv, chargingSite, "8", srgvChargingJob.getTaskNo()); srgvChargingJob.setJobStatus("2"); srgvChargingJobMapper.updateSrgvChargingJob(srgvChargingJob); } @@ -209,10 +205,10 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { } } - private void createSrgvChargingQueue(DeviceSrgv deviceSrgv, String chargingSite, String type) { + private void createSrgvChargingQueue(DeviceSrgv deviceSrgv, String chargingSite, String type, String taskNo) { WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue(); wcsSrgvQueue.setGuid(UUID.randomUUID().toString()); - wcsSrgvQueue.setTaskNo(""); + wcsSrgvQueue.setTaskNo(taskNo); wcsSrgvQueue.setTaskType("3"); wcsSrgvQueue.setPriority(Long.parseLong("2")); wcsSrgvQueue.setCargo("0"); @@ -231,6 +227,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString()); wcsSrgvQueue.setDefault02("3"); + wcsSrgvQueue.setDefault03(wcsSrgvQueue.getStartSite()); wcsSrgvQueue.setDefault07(Convert.toStr(wcsSrgvMap.getZ())); wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue); } @@ -263,20 +260,20 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { //如果没有当前层作业,就找最近层换层作业,生成队列 MydoJob mydoJob1 = new MydoJob(); mydoJob1.setTheFloor(deviceSrgv.getCurrFloor().toString()); - mydoJob1.setInOut("1"); + mydoJob1.setInOrOut("1");//货物入库 mydoJob1.setStatus("3"); // todo 定提升机到达阶段 mydoJob1.setExecutionPhase("3"); List mydoJobs = mydoJobService.selectMydoJobList(mydoJob1); + if (mydoJobs.isEmpty()) { + mydoJob1.setInOrOut("3");//空托盘入库 + mydoJobs = mydoJobService.selectMydoJobList(mydoJob1); + } if (!mydoJobs.isEmpty()) { //生成了从小车现在位置到提升机接货的队列 createCarQueue(mydoJobs.get(0), deviceSrgv, "4", "0"); } else { - MydoJob mydoJob = new MydoJob(); - mydoJob.setInOut("2"); - mydoJob.setStatus("1"); - mydoJob.setTheFloor(deviceSrgv.getCurrFloor().toString()); - List mydoJobs1 = mydoJobService.selectMydoJobList(mydoJob); + List mydoJobs1 = mydoJobService.selectOutJobList(deviceSrgv.getCurrFloor().toString()); //当前层出库作业 if (!mydoJobs1.isEmpty()) { //找最外层作业存储过程 @@ -294,7 +291,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { } else { createCarQueue(mydoJob2, deviceSrgv, "4", "1"); } - + mydoJob2.setStatus("3"); + mydoJobService.updateMydoJob(mydoJob2); } else { //别的层的出库作业和入库作业 MydoJob job = null; @@ -353,6 +351,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { // todo 通知wms入库完成 完成队列 完成作业 wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); + mydoJob.setStatus("4"); + mydoJobService.updateMydoJob(mydoJob); mydoJobService.insertHistory(mydoJob.getJobId()); mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); } else if (deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getDefault03()) && "2".equals(wcsSrgvQueue.getTaskType())) { @@ -367,11 +367,12 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { if (Convert.toInt(mydoJob.getInOrOut()) < 20) { wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); - createCarQueue(mydoJob, deviceSrgv, "1", "0"); } else { wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); + mydoJob.setStatus("3");//作业修改为正执行 + mydoJobService.updateMydoJob(mydoJob); createCarQueue(mydoJob, deviceSrgv, "2", "0"); } } else if (deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getDefault03()) && "8".equals(wcsSrgvQueue.getTaskType())) { @@ -384,18 +385,20 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { SrgvChargingJob srgvChargingJob = new SrgvChargingJob(); srgvChargingJob.setAgvId(String.valueOf(wcsSrgvQueue.getAgvId())); srgvChargingJob.setTaskNo(wcsSrgvQueue.getTaskNo()); - srgvChargingJob.setJobStatus("2"); + srgvChargingJob.setJobStatus("3"); srgvChargingJob.setJobType("1"); List srgvChargingJobs = srgvChargingJobMapper.selectSrgvChargingJobList(srgvChargingJob); if (!srgvChargingJobs.isEmpty()) { SrgvChargingJob srgvChargingJob1 = srgvChargingJobs.get(0); - if (deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getDefault03()) && "4".equals(wcsSrgvQueue.getTaskType())) { - //查询换层任务 + if (deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getEndSite()) && "3".equals(wcsSrgvQueue.getTaskType())) { wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); - //修改充电任务 - srgvChargingJob1.setJobStatus("1"); + srgvChargingJob1.setJobStatus("4"); srgvChargingJobMapper.updateSrgvChargingJob(srgvChargingJob1); + DeviceCdz deviceCdz = new DeviceCdz(); + DeviceCdz deviceCdz1 = deviceCdzService.selectDeviceCdzById(1L); + deviceCdz1.setSpare1(String.valueOf(deviceSrgv.getDeviceId())); + deviceCdzService.updateDeviceCdz(deviceCdz1); } } } @@ -422,7 +425,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { if (Integer.parseInt(mydoJob1.getInOrOut()) < 20 && "4".equals(taskType)) { wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite()); wcsSrgvQueue.setEndSite("tsj"); - //入库的点到点直接进入提升机 不选停靠点 + //入库的点到点直接进入提升机 不选停靠点 default03 是0305 wcsSrgvMap1.setTheRow(3); wcsSrgvMap1.setTheColumn(5); wcsSrgvMap1.setTheLayer(Convert.toInt(mydoJob1.getTheFloor())); @@ -444,10 +447,15 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite()); WcsSrgvMap wcsSrgvMap = new WcsSrgvMap(); wcsSrgvMap.setCargoSpaceId(mydoJob1.getCargoSpaceId()); + List wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap); wcsSrgvQueue.setEndSite(wcsSrgvMaps.get(0).getSiteId()); //每一层的停靠点 - wcsSrgvQueue.setDefault03(wcsSrgvMaps1.get(0).getSiteId()); + if (wcsSrgvQueue.getEndSite().equals("tsj")) { + wcsSrgvQueue.setDefault03(wcsSrgvMaps1.get(0).getSiteId()); + } else { + wcsSrgvQueue.setDefault03(wcsSrgvQueue.getEndSite()); + } } else if (Integer.parseInt(mydoJob1.getInOrOut()) >= 20 && "2".equals(taskType)) { wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite()); wcsSrgvQueue.setEndSite("tsj"); @@ -487,8 +495,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { ) { //处理tsj站点 换层去提升机前 入库去提升机里 出库去提升机里 - String startSite = getSite(wcsSrgvQueue.getStartSite(),wcsSrgvQueue.getTheFloor(),wcsSrgvQueue.getTaskType()); - String endSite = getSite(wcsSrgvQueue.getEndSite(),wcsSrgvQueue.getTheFloor(),wcsSrgvQueue.getTaskType()); + String startSite = getSite(wcsSrgvQueue.getStartSite(), wcsSrgvQueue.getTheFloor(), wcsSrgvQueue.getTaskType()); + String endSite = getSite(wcsSrgvQueue.getEndSite(), wcsSrgvQueue.getTheFloor(), wcsSrgvQueue.getTaskType()); String currSite = deviceSrgv.getCurrSite(); //判断是否可以下发任务 if ("0".equals(wcsSrgvQueue.getIssued()) && deviceSrgv.getStatus() == 1) { @@ -739,10 +747,14 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { //换层作业 sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite); break; + default: + sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite); + break; } if (sendFlag) { //处理监控信息 + } } @@ -929,7 +941,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); - } else { + } else if ("3".equals(taskType) && cargoPlaceSite.equals(currSite)) { //充电之类的,不知道用不用 } } @@ -955,7 +967,13 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { if (CollUtil.isNotEmpty(wcsSrgvQueues)) { WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueues.get(0); - String startSite = wcsSrgvQueue.getDefault03(); + String startSite = null; + //打补丁 出库任务的default03 是040501 提升机前 + if (wcsSrgvQueue.getTaskType().equals("2")) { + startSite = wcsSrgvQueue.getStartSite(); + }else { + startSite = wcsSrgvQueue.getDefault03(); + } if (!startSite.equals(currSite)) { wcsSrgvQueue.setIssued("1"); @@ -966,34 +984,35 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { } } } - public String getSite(String sitId,String floor,String type){ - if (type.equals("8")){ - if (sitId.equals("tsj")){ - switch (floor){ + + public String getSite(String sitId, String floor, String type) { + if (type.equals("8")) { + if (sitId.equals("tsj")) { + switch (floor) { case "1": - sitId="040501"; + sitId = "040501"; break; case "2": - sitId="040502"; + sitId = "040502"; break; case "3": - sitId="040503"; + sitId = "040503"; break; default: break; } } - }else { - if (sitId.equals("tsj")){ - switch (floor){ + } else { + if (sitId.equals("tsj")) { + switch (floor) { case "1": - sitId="030501"; + sitId = "030501"; break; case "2": - sitId="030502"; + sitId = "030502"; break; case "3": - sitId="030503"; + sitId = "030503"; break; default: break; 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 d60ef63..0ebda64 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 @@ -66,6 +66,8 @@ public class SsjThread implements Runnable { MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(deviceSsj.getTaskNo())); if (mydoJob != null) { log.info("设备:{} 位置:{} 任务号:{} 出库到位", "输送线", deviceSsj.getDeviceCode(), mydoJob.getTaskNo()); + mydoJob.setStatus("4"); + mydoJobService.updateMydoJob(mydoJob); mydoJobService.insertHistory(mydoJob.getJobId()); mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); JobCallBack jobCallBack = new JobCallBack(); diff --git a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml index f215d31..9aa6730 100644 --- a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml @@ -260,4 +260,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{v_job_ids,jdbcType=VARCHAR,mode=OUT} )} + diff --git a/ruoyi-admin/src/main/resources/mapper/job/SrgvChargingJobMapper.xml b/ruoyi-admin/src/main/resources/mapper/job/SrgvChargingJobMapper.xml index 3a50ab6..371b17d 100644 --- a/ruoyi-admin/src/main/resources/mapper/job/SrgvChargingJobMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/job/SrgvChargingJobMapper.xml @@ -14,10 +14,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select guid, charging_site, job_status, charging_status, start_date, charging_date, job_type, agv_id, charging_id from srgv_charging_job + select guid, charging_site, job_status, charging_status, start_date, charging_date, job_type, agv_id, charging_id,task_no from srgv_charging_job @@ -51,6 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" job_type, agv_id, charging_id, + task_no, #{guid}, @@ -62,6 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{jobType}, #{agvId}, #{chargingId}, + #{taskNo}, @@ -80,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" job_type = #{jobType}, agv_id = #{agvId}, charging_id = #{chargingId}, + task_no = #{taskNo}, where guid = #{guid}