From 1b67ebe5d9b37c3b26e4234722eea2fe623b5b9e Mon Sep 17 00:00:00 2001 From: liuhanqing Date: Mon, 1 Dec 2025 09:29:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90=E5=B0=8F=E8=BD=A6=E6=96=AD?= =?UTF-8?q?=E7=94=B5=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/cdz/mapper/DeviceCdzMapper.java | 5 + .../device/cdz/service/IDeviceCdzService.java | 5 + .../service/impl/DeviceCdzServiceImpl.java | 5 + .../schedule/scheduleTask/cdz/CdzThread.java | 175 +++++++++++++++--- .../mapper/device/DeviceCdzMapper.xml | 4 + 5 files changed, 167 insertions(+), 27 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/mapper/DeviceCdzMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/mapper/DeviceCdzMapper.java index bcba166..9907314 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/mapper/DeviceCdzMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/mapper/DeviceCdzMapper.java @@ -63,4 +63,9 @@ public interface DeviceCdzMapper * @return */ List selectDeviceCdzListNoSRgvId(); + /** + * 获取有SRGV的充电桩设备 + * @return + */ + List selectDeviceCdzHasSRgvList(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/IDeviceCdzService.java b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/IDeviceCdzService.java index 979cd49..d4096ae 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/IDeviceCdzService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/IDeviceCdzService.java @@ -63,4 +63,9 @@ public interface IDeviceCdzService * @return */ List selectDeviceCdzListNoSRgvId(); + /** + * 查询有SRgvId的充电桩设备列表 + * @return + */ + List selectDeviceCdzHasSRgvList(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/impl/DeviceCdzServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/impl/DeviceCdzServiceImpl.java index da13c12..bef24c0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/impl/DeviceCdzServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/impl/DeviceCdzServiceImpl.java @@ -95,4 +95,9 @@ public class DeviceCdzServiceImpl implements IDeviceCdzService public List selectDeviceCdzListNoSRgvId() { return deviceCdzMapper.selectDeviceCdzListNoSRgvId(); } + + @Override + public List selectDeviceCdzHasSRgvList() { + return deviceCdzMapper.selectDeviceCdzHasSRgvList(); + } } 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 7af6665..f13aecc 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 @@ -1,20 +1,26 @@ package com.ruoyi.schedule.scheduleTask.cdz; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjUtil; 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.ssj.domain.DeviceSsj; +import com.ruoyi.device.srgv.service.IDeviceSrgvService; import com.ruoyi.job.charg.domain.SrgvChargingJob; import com.ruoyi.job.charg.service.ISrgvChargingJobService; +import com.ruoyi.queue.srgv.domain.WcsSrgvQueue; +import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService; +import com.ruoyi.schedule.plcRead.cdz.PlcCdzRead; import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; @Slf4j public class CdzThread implements Runnable { @@ -26,6 +32,8 @@ public class CdzThread implements Runnable { private ISrgvChargingJobService chargingJobService; private IDeviceCdzService deviceCdzService; + private IDeviceSrgvService deviceSrgvService; + private IWcsSrgvQueueService wcsSrgvQueueService; public void init() { @@ -40,7 +48,7 @@ public class CdzThread implements Runnable { } - void inDispatch() { + void dispatch() { //获取低电量小车 List littleBatterySRgv = new ArrayList<>(); @@ -56,19 +64,95 @@ public class CdzThread implements Runnable { } } } - - //优先低电量小车充电 if (CollUtil.isNotEmpty(littleBatterySRgv)){ - //排序 + //生成充电任务 createChargingInJob(littleBatterySRgv); }else { if (CollUtil.isNotEmpty(middleBatterySRgv)){ - //排序 + //生成充电任务 createChargingInJob(middleBatterySRgv); } } + + //超过30分钟自动生成充电任务 + List deviceSrgvs = deviceSrgvService.selectDeviceSrgvList(new DeviceSrgv()); + List timeOutSrgvList = deviceSrgvs.stream().filter(x -> DateUtil.between(DateUtil.parse(x.getLastTime()), DateUtil.date(), DateUnit.MINUTE) > 30).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(timeOutSrgvList)) { + //生成充电任务 + createChargingInJob(timeOutSrgvList); + } + + + //充电任务下发 + SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); + srgvChargingJobParam.setChargingStatus("0"); + srgvChargingJobParam.setJobType("1"); + srgvChargingJobParam.setJobStatus("3"); + List srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); + if (CollUtil.isNotEmpty(srgvChargingJobs)) { + + for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) { + int i = PlcCdzRead.WriteToCdz("", null); + if (i == 1) { + srgvChargingJob.setChargingStatus("1"); + srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date())); + chargingJobService.updateSrgvChargingJob(srgvChargingJob); + } + } + + } + + + //生成断电任务 有任务且电量大于50 + WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue(); + wcsSrgvQueueParam.setIssued("0"); + List wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(wcsSrgvQueueParam); + if (CollUtil.isNotEmpty(wcsSrgvQueues)) { + boolean existsKxSRgv = false; + //判断有没有空闲小车 + for (DeviceSrgv x : PlcSrgvRead.deviceSrgvMap.values()) { + if (x.getWorkMode() == 5 && x.getStatus() == 1) { + existsKxSRgv = true; + break; + } + } + if (!existsKxSRgv) { + List deviceCdzs = deviceCdzService.selectDeviceCdzHasSRgvList(); + if (CollUtil.isNotEmpty(deviceCdzs)) { + for (DeviceCdz deviceCdz : deviceCdzs) { + if (PlcSrgvRead.deviceSrgvMap.containsKey(deviceCdz.getSpare1())) { + DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()); + if (deviceSrgv.getBattery() >= 50) { + //生成断电任务 + createChargingOutJob(deviceSrgv,deviceCdz); + } + } + } + } + } + } + + + //断电任务下发 + SrgvChargingJob srgvChargingJobDdParam = new SrgvChargingJob(); + srgvChargingJobDdParam.setChargingStatus("0"); + srgvChargingJobDdParam.setJobType("2"); + List srgvChargingJobDds = chargingJobService.selectSrgvChargingJobList(srgvChargingJobDdParam); + if (CollUtil.isNotEmpty(srgvChargingJobDds)) { + + for (SrgvChargingJob srgvChargingJob : srgvChargingJobDds) { + int i = PlcCdzRead.WriteToCdz("", null); + if (i == 1) { + srgvChargingJob.setChargingStatus("1"); + srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date())); + chargingJobService.updateSrgvChargingJob(srgvChargingJob); + } + } + + } + } /** @@ -88,33 +172,70 @@ public class CdzThread implements Runnable { if (CollUtil.isNotEmpty(cdzList)){ //寻找最接近的充电桩 Integer floor = deviceSrgv.getCurrFloor(); - DeviceCdz cdz = cdzList.stream().filter(c -> c.getSzcs().equals(floor)).min((o1, o2) -> { + DeviceCdz cdz = null; + Optional min = cdzList.stream().filter(c -> c.getSzcs().equals(floor)).min((o1, o2) -> { Integer distance1 = Math.abs(o1.getSzcs()); Integer distance2 = Math.abs(floor); return distance1 - distance2; - }).get(); - - //生成充电任务 - SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); - srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString()); - srgvChargingJobParam.setChargingSite(cdz.getSiteId()); - srgvChargingJobParam.setChargingId(cdz.getId().toString()); - List wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); - if (CollUtil.isEmpty(wcsChargingJobs)) { - SrgvChargingJob scj = new SrgvChargingJob(); - scj.setGuid(IdUtil.fastSimpleUUID()); - scj.setChargingSite(cdz.getSiteId()); - scj.setJobStatus("1"); - scj.setChargingStatus("0"); - scj.setStartDate(DateUtil.now()); - scj.setJobType("1");//到充电桩 - scj.setAgvId(deviceSrgv.getDeviceId().toString()); - scj.setChargingId(deviceSrgv.getDeviceId().toString()); - chargingJobService.insertSrgvChargingJob(scj); + }); + if (min.isPresent()) { + cdz = min.get(); + } + if (ObjUtil.isNotNull(cdz)) { + //生成充电任务 + SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); + srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString()); + srgvChargingJobParam.setChargingSite(cdz.getSiteId()); + srgvChargingJobParam.setChargingId(cdz.getId().toString()); + List wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); + if (CollUtil.isEmpty(wcsChargingJobs)) { + SrgvChargingJob scj = new SrgvChargingJob(); + scj.setGuid(IdUtil.fastSimpleUUID()); + scj.setChargingSite(cdz.getSiteId()); + scj.setJobStatus("1"); + scj.setChargingStatus("0"); + scj.setStartDate(DateUtil.now()); + scj.setJobType("1");//到充电桩 + scj.setAgvId(deviceSrgv.getDeviceId().toString()); + scj.setChargingId(deviceSrgv.getDeviceId().toString()); + chargingJobService.insertSrgvChargingJob(scj); + } } } } } } + /** + * 创建充电任务 + * + * @param deviceSrgv + */ + private void createChargingOutJob(DeviceSrgv deviceSrgv, DeviceCdz cdz) { + SrgvChargingJob wcsChargingJob = new SrgvChargingJob(); + wcsChargingJob.setJobType("2"); + wcsChargingJob.setAgvId(deviceSrgv.getDeviceId().toString()); + List srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(wcsChargingJob); + if (CollUtil.isEmpty(srgvChargingJobs)) { + //生成充电任务 + SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); + srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString()); + srgvChargingJobParam.setChargingSite(cdz.getSiteId()); + srgvChargingJobParam.setChargingId(cdz.getId().toString()); + List wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); + if (CollUtil.isEmpty(wcsChargingJobs)) { + SrgvChargingJob scj = new SrgvChargingJob(); + scj.setGuid(IdUtil.fastSimpleUUID()); + scj.setChargingSite(cdz.getSiteId()); + scj.setJobStatus("1"); + scj.setChargingStatus("0"); + scj.setStartDate(DateUtil.now()); + scj.setJobType("2");//到充电桩 + scj.setAgvId(deviceSrgv.getDeviceId().toString()); + scj.setChargingId(deviceSrgv.getDeviceId().toString()); + chargingJobService.insertSrgvChargingJob(scj); + } + } + } + } diff --git a/ruoyi-admin/src/main/resources/mapper/device/DeviceCdzMapper.xml b/ruoyi-admin/src/main/resources/mapper/device/DeviceCdzMapper.xml index 3120342..4405b27 100644 --- a/ruoyi-admin/src/main/resources/mapper/device/DeviceCdzMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/device/DeviceCdzMapper.xml @@ -54,6 +54,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where spare1 is null + insert into device_cdz