生成小车断电任务
This commit is contained in:
@@ -63,4 +63,9 @@ public interface DeviceCdzMapper
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<DeviceCdz> selectDeviceCdzListNoSRgvId();
|
List<DeviceCdz> selectDeviceCdzListNoSRgvId();
|
||||||
|
/**
|
||||||
|
* 获取有SRGV的充电桩设备
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DeviceCdz> selectDeviceCdzHasSRgvList();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,4 +63,9 @@ public interface IDeviceCdzService
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<DeviceCdz> selectDeviceCdzListNoSRgvId();
|
List<DeviceCdz> selectDeviceCdzListNoSRgvId();
|
||||||
|
/**
|
||||||
|
* 查询有SRgvId的充电桩设备列表
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DeviceCdz> selectDeviceCdzHasSRgvList();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,4 +95,9 @@ public class DeviceCdzServiceImpl implements IDeviceCdzService
|
|||||||
public List<DeviceCdz> selectDeviceCdzListNoSRgvId() {
|
public List<DeviceCdz> selectDeviceCdzListNoSRgvId() {
|
||||||
return deviceCdzMapper.selectDeviceCdzListNoSRgvId();
|
return deviceCdzMapper.selectDeviceCdzListNoSRgvId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceCdz> selectDeviceCdzHasSRgvList() {
|
||||||
|
return deviceCdzMapper.selectDeviceCdzHasSRgvList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,26 @@
|
|||||||
package com.ruoyi.schedule.scheduleTask.cdz;
|
package com.ruoyi.schedule.scheduleTask.cdz;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DateUnit;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import com.ruoyi.device.cdz.domain.DeviceCdz;
|
import com.ruoyi.device.cdz.domain.DeviceCdz;
|
||||||
import com.ruoyi.device.cdz.service.IDeviceCdzService;
|
import com.ruoyi.device.cdz.service.IDeviceCdzService;
|
||||||
import com.ruoyi.device.srgv.domain.DeviceSrgv;
|
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.domain.SrgvChargingJob;
|
||||||
import com.ruoyi.job.charg.service.ISrgvChargingJobService;
|
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 com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class CdzThread implements Runnable {
|
public class CdzThread implements Runnable {
|
||||||
@@ -26,6 +32,8 @@ public class CdzThread implements Runnable {
|
|||||||
|
|
||||||
private ISrgvChargingJobService chargingJobService;
|
private ISrgvChargingJobService chargingJobService;
|
||||||
private IDeviceCdzService deviceCdzService;
|
private IDeviceCdzService deviceCdzService;
|
||||||
|
private IDeviceSrgvService deviceSrgvService;
|
||||||
|
private IWcsSrgvQueueService wcsSrgvQueueService;
|
||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
|
|
||||||
@@ -40,7 +48,7 @@ public class CdzThread implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void inDispatch() {
|
void dispatch() {
|
||||||
|
|
||||||
//获取低电量小车
|
//获取低电量小车
|
||||||
List<DeviceSrgv> littleBatterySRgv = new ArrayList<>();
|
List<DeviceSrgv> littleBatterySRgv = new ArrayList<>();
|
||||||
@@ -56,19 +64,95 @@ public class CdzThread implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//优先低电量小车充电
|
//优先低电量小车充电
|
||||||
if (CollUtil.isNotEmpty(littleBatterySRgv)){
|
if (CollUtil.isNotEmpty(littleBatterySRgv)){
|
||||||
//排序
|
//生成充电任务
|
||||||
createChargingInJob(littleBatterySRgv);
|
createChargingInJob(littleBatterySRgv);
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
if (CollUtil.isNotEmpty(middleBatterySRgv)){
|
if (CollUtil.isNotEmpty(middleBatterySRgv)){
|
||||||
//排序
|
//生成充电任务
|
||||||
createChargingInJob(middleBatterySRgv);
|
createChargingInJob(middleBatterySRgv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//超过30分钟自动生成充电任务
|
||||||
|
List<DeviceSrgv> deviceSrgvs = deviceSrgvService.selectDeviceSrgvList(new DeviceSrgv());
|
||||||
|
List<DeviceSrgv> 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<SrgvChargingJob> 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<WcsSrgvQueue> 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<DeviceCdz> 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<SrgvChargingJob> 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)){
|
if (CollUtil.isNotEmpty(cdzList)){
|
||||||
//寻找最接近的充电桩
|
//寻找最接近的充电桩
|
||||||
Integer floor = deviceSrgv.getCurrFloor();
|
Integer floor = deviceSrgv.getCurrFloor();
|
||||||
DeviceCdz cdz = cdzList.stream().filter(c -> c.getSzcs().equals(floor)).min((o1, o2) -> {
|
DeviceCdz cdz = null;
|
||||||
|
Optional<DeviceCdz> min = cdzList.stream().filter(c -> c.getSzcs().equals(floor)).min((o1, o2) -> {
|
||||||
Integer distance1 = Math.abs(o1.getSzcs());
|
Integer distance1 = Math.abs(o1.getSzcs());
|
||||||
Integer distance2 = Math.abs(floor);
|
Integer distance2 = Math.abs(floor);
|
||||||
return distance1 - distance2;
|
return distance1 - distance2;
|
||||||
}).get();
|
});
|
||||||
|
if (min.isPresent()) {
|
||||||
//生成充电任务
|
cdz = min.get();
|
||||||
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
|
}
|
||||||
srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString());
|
if (ObjUtil.isNotNull(cdz)) {
|
||||||
srgvChargingJobParam.setChargingSite(cdz.getSiteId());
|
//生成充电任务
|
||||||
srgvChargingJobParam.setChargingId(cdz.getId().toString());
|
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
|
||||||
List<SrgvChargingJob> wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
|
srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString());
|
||||||
if (CollUtil.isEmpty(wcsChargingJobs)) {
|
srgvChargingJobParam.setChargingSite(cdz.getSiteId());
|
||||||
SrgvChargingJob scj = new SrgvChargingJob();
|
srgvChargingJobParam.setChargingId(cdz.getId().toString());
|
||||||
scj.setGuid(IdUtil.fastSimpleUUID());
|
List<SrgvChargingJob> wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
|
||||||
scj.setChargingSite(cdz.getSiteId());
|
if (CollUtil.isEmpty(wcsChargingJobs)) {
|
||||||
scj.setJobStatus("1");
|
SrgvChargingJob scj = new SrgvChargingJob();
|
||||||
scj.setChargingStatus("0");
|
scj.setGuid(IdUtil.fastSimpleUUID());
|
||||||
scj.setStartDate(DateUtil.now());
|
scj.setChargingSite(cdz.getSiteId());
|
||||||
scj.setJobType("1");//到充电桩
|
scj.setJobStatus("1");
|
||||||
scj.setAgvId(deviceSrgv.getDeviceId().toString());
|
scj.setChargingStatus("0");
|
||||||
scj.setChargingId(deviceSrgv.getDeviceId().toString());
|
scj.setStartDate(DateUtil.now());
|
||||||
chargingJobService.insertSrgvChargingJob(scj);
|
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<SrgvChargingJob> 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<SrgvChargingJob> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,6 +54,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<include refid="selectDeviceCdzVo"/>
|
<include refid="selectDeviceCdzVo"/>
|
||||||
where spare1 is null
|
where spare1 is null
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectDeviceCdzHasSRgvList" resultMap="DeviceCdzResult">
|
||||||
|
<include refid="selectDeviceCdzVo"/>
|
||||||
|
where spare1 is not null
|
||||||
|
</select>
|
||||||
|
|
||||||
<insert id="insertDeviceCdz" parameterType="DeviceCdz">
|
<insert id="insertDeviceCdz" parameterType="DeviceCdz">
|
||||||
insert into device_cdz
|
insert into device_cdz
|
||||||
|
|||||||
Reference in New Issue
Block a user