From 98fa4a4c2d31127086eb5e29e15aaf14c376acd3 Mon Sep 17 00:00:00 2001 From: liuhanqing Date: Thu, 27 Nov 2025 17:22:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E8=BD=A6=E5=85=85=E7=94=B5=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cdz/controller/DeviceCdzController.java | 104 ++++++++++++++ .../ruoyi/device/cdz/domain/DeviceCdz.java | 84 ++++++++++++ .../device/cdz/mapper/DeviceCdzMapper.java | 66 +++++++++ .../device/cdz/service/IDeviceCdzService.java | 66 +++++++++ .../service/impl/DeviceCdzServiceImpl.java | 98 ++++++++++++++ .../schedule/plcRead/cdz/PlcCdzRead.java | 126 +++++++++++++++++ .../schedule/scheduleTask/cdz/CdzThread.java | 120 +++++++++++++++++ .../scheduleTask/srgv/BaseSRgvThread.java | 63 +++++++++ .../mapper/device/DeviceCdzMapper.xml | 127 ++++++++++++++++++ 9 files changed, 854 insertions(+) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/device/cdz/controller/DeviceCdzController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/device/cdz/domain/DeviceCdz.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/device/cdz/mapper/DeviceCdzMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/IDeviceCdzService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/impl/DeviceCdzServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/cdz/PlcCdzRead.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java create mode 100644 ruoyi-admin/src/main/resources/mapper/device/DeviceCdzMapper.xml diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/controller/DeviceCdzController.java b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/controller/DeviceCdzController.java new file mode 100644 index 0000000..067a7d2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/controller/DeviceCdzController.java @@ -0,0 +1,104 @@ +package com.ruoyi.device.cdz.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.device.cdz.domain.DeviceCdz; +import com.ruoyi.device.cdz.service.IDeviceCdzService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 充电桩设备Controller + * + * @author ruoyi + * @date 2025-11-27 + */ +@RestController +@RequestMapping("/device/cdz") +public class DeviceCdzController extends BaseController +{ + @Autowired + private IDeviceCdzService deviceCdzService; + + /** + * 查询充电桩设备列表 + */ + @PreAuthorize("@ss.hasPermi('device:cdz:list')") + @GetMapping("/list") + public TableDataInfo list(DeviceCdz deviceCdz) + { + startPage(); + List list = deviceCdzService.selectDeviceCdzList(deviceCdz); + return getDataTable(list); + } + + /** + * 导出充电桩设备列表 + */ + @PreAuthorize("@ss.hasPermi('device:cdz:export')") + @Log(title = "充电桩设备", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, DeviceCdz deviceCdz) + { + List list = deviceCdzService.selectDeviceCdzList(deviceCdz); + ExcelUtil util = new ExcelUtil(DeviceCdz.class); + util.exportExcel(response, list, "充电桩设备数据"); + } + + /** + * 获取充电桩设备详细信息 + */ + @PreAuthorize("@ss.hasPermi('device:cdz:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(deviceCdzService.selectDeviceCdzById(id)); + } + + /** + * 新增充电桩设备 + */ + @PreAuthorize("@ss.hasPermi('device:cdz:add')") + @Log(title = "充电桩设备", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody DeviceCdz deviceCdz) + { + return toAjax(deviceCdzService.insertDeviceCdz(deviceCdz)); + } + + /** + * 修改充电桩设备 + */ + @PreAuthorize("@ss.hasPermi('device:cdz:edit')") + @Log(title = "充电桩设备", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody DeviceCdz deviceCdz) + { + return toAjax(deviceCdzService.updateDeviceCdz(deviceCdz)); + } + + /** + * 删除充电桩设备 + */ + @PreAuthorize("@ss.hasPermi('device:cdz:remove')") + @Log(title = "充电桩设备", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(deviceCdzService.deleteDeviceCdzByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/domain/DeviceCdz.java b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/domain/DeviceCdz.java new file mode 100644 index 0000000..fe6acf8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/domain/DeviceCdz.java @@ -0,0 +1,84 @@ +package com.ruoyi.device.cdz.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 充电桩设备对象 device_cdz + * + * @author ruoyi + * @date 2025-11-27 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DeviceCdz extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** id */ + private Integer id; + + /** 设备名称 */ + @Excel(name = "设备名称") + private String name; + + /** ip */ + @Excel(name = "ip") + private String ip; + + /** 端口 */ + @Excel(name = "端口") + private String port; + + /** plc读取地址 */ + @Excel(name = "plc读取地址") + private String plcDbReadAddress; + + /** plc写入地址 */ + @Excel(name = "plc写入地址") + private String plcDbWriteAddress; + + /** 任务号 */ + @Excel(name = "任务号") + private Integer rwh; + + /** 充电桩状态 */ + @Excel(name = "充电桩状态") + private Integer status; + + /** 心跳信号 */ + @Excel(name = "心跳信号") + private Integer xtxh; + + /** 层数 */ + @Excel(name = "层数") + private Integer szcs; + + /** 充电模式 */ + @Excel(name = "充电模式") + private Integer model; + + /** 站点 */ + @Excel(name = "站点") + private String siteId; + + /** 备用1 */ + @Excel(name = "备用1") + private String spare1; + + /** 备用2 */ + @Excel(name = "备用2") + private String spare2; + + /** 备用3 */ + @Excel(name = "备用3") + private String spare3; + + +} 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 new file mode 100644 index 0000000..bcba166 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/mapper/DeviceCdzMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.device.cdz.mapper; + +import java.util.List; +import com.ruoyi.device.cdz.domain.DeviceCdz; + +/** + * 充电桩设备Mapper接口 + * + * @author ruoyi + * @date 2025-11-27 + */ +public interface DeviceCdzMapper +{ + /** + * 查询充电桩设备 + * + * @param id 充电桩设备主键 + * @return 充电桩设备 + */ + public DeviceCdz selectDeviceCdzById(Long id); + + /** + * 查询充电桩设备列表 + * + * @param deviceCdz 充电桩设备 + * @return 充电桩设备集合 + */ + public List selectDeviceCdzList(DeviceCdz deviceCdz); + + /** + * 新增充电桩设备 + * + * @param deviceCdz 充电桩设备 + * @return 结果 + */ + public int insertDeviceCdz(DeviceCdz deviceCdz); + + /** + * 修改充电桩设备 + * + * @param deviceCdz 充电桩设备 + * @return 结果 + */ + public int updateDeviceCdz(DeviceCdz deviceCdz); + + /** + * 删除充电桩设备 + * + * @param id 充电桩设备主键 + * @return 结果 + */ + public int deleteDeviceCdzById(Long id); + + /** + * 批量删除充电桩设备 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteDeviceCdzByIds(Long[] ids); + /** + * 查询没有SRGV的充电桩设备 + * @return + */ + List selectDeviceCdzListNoSRgvId(); +} 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 new file mode 100644 index 0000000..979cd49 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/IDeviceCdzService.java @@ -0,0 +1,66 @@ +package com.ruoyi.device.cdz.service; + +import java.util.List; +import com.ruoyi.device.cdz.domain.DeviceCdz; + +/** + * 充电桩设备Service接口 + * + * @author ruoyi + * @date 2025-11-27 + */ +public interface IDeviceCdzService +{ + /** + * 查询充电桩设备 + * + * @param id 充电桩设备主键 + * @return 充电桩设备 + */ + public DeviceCdz selectDeviceCdzById(Long id); + + /** + * 查询充电桩设备列表 + * + * @param deviceCdz 充电桩设备 + * @return 充电桩设备集合 + */ + public List selectDeviceCdzList(DeviceCdz deviceCdz); + + /** + * 新增充电桩设备 + * + * @param deviceCdz 充电桩设备 + * @return 结果 + */ + public int insertDeviceCdz(DeviceCdz deviceCdz); + + /** + * 修改充电桩设备 + * + * @param deviceCdz 充电桩设备 + * @return 结果 + */ + public int updateDeviceCdz(DeviceCdz deviceCdz); + + /** + * 批量删除充电桩设备 + * + * @param ids 需要删除的充电桩设备主键集合 + * @return 结果 + */ + public int deleteDeviceCdzByIds(Long[] ids); + + /** + * 删除充电桩设备信息 + * + * @param id 充电桩设备主键 + * @return 结果 + */ + public int deleteDeviceCdzById(Long id); + /** + * 查询没有SRgvId的充电桩设备列表 + * @return + */ + List selectDeviceCdzListNoSRgvId(); +} 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 new file mode 100644 index 0000000..da13c12 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/cdz/service/impl/DeviceCdzServiceImpl.java @@ -0,0 +1,98 @@ +package com.ruoyi.device.cdz.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.device.cdz.mapper.DeviceCdzMapper; +import com.ruoyi.device.cdz.domain.DeviceCdz; +import com.ruoyi.device.cdz.service.IDeviceCdzService; + +/** + * 充电桩设备Service业务层处理 + * + * @author ruoyi + * @date 2025-11-27 + */ +@Service +public class DeviceCdzServiceImpl implements IDeviceCdzService +{ + @Autowired + private DeviceCdzMapper deviceCdzMapper; + + /** + * 查询充电桩设备 + * + * @param id 充电桩设备主键 + * @return 充电桩设备 + */ + @Override + public DeviceCdz selectDeviceCdzById(Long id) + { + return deviceCdzMapper.selectDeviceCdzById(id); + } + + /** + * 查询充电桩设备列表 + * + * @param deviceCdz 充电桩设备 + * @return 充电桩设备 + */ + @Override + public List selectDeviceCdzList(DeviceCdz deviceCdz) + { + return deviceCdzMapper.selectDeviceCdzList(deviceCdz); + } + + /** + * 新增充电桩设备 + * + * @param deviceCdz 充电桩设备 + * @return 结果 + */ + @Override + public int insertDeviceCdz(DeviceCdz deviceCdz) + { + return deviceCdzMapper.insertDeviceCdz(deviceCdz); + } + + /** + * 修改充电桩设备 + * + * @param deviceCdz 充电桩设备 + * @return 结果 + */ + @Override + public int updateDeviceCdz(DeviceCdz deviceCdz) + { + return deviceCdzMapper.updateDeviceCdz(deviceCdz); + } + + /** + * 批量删除充电桩设备 + * + * @param ids 需要删除的充电桩设备主键 + * @return 结果 + */ + @Override + public int deleteDeviceCdzByIds(Long[] ids) + { + return deviceCdzMapper.deleteDeviceCdzByIds(ids); + } + + /** + * 删除充电桩设备信息 + * + * @param id 充电桩设备主键 + * @return 结果 + */ + @Override + public int deleteDeviceCdzById(Long id) + { + return deviceCdzMapper.deleteDeviceCdzById(id); + } + + @Override + public List selectDeviceCdzListNoSRgvId() { + return deviceCdzMapper.selectDeviceCdzListNoSRgvId(); + } +} 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 new file mode 100644 index 0000000..bf0ba22 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/cdz/PlcCdzRead.java @@ -0,0 +1,126 @@ +package com.ruoyi.schedule.plcRead.cdz; + +import HslCommunication.BasicFramework.SoftBasic; +import HslCommunication.Core.Net.IReadWriteNet; +import HslCommunication.Core.Types.OperateResult; +import HslCommunication.Core.Types.OperateResultExOne; +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.device.cdz.domain.DeviceCdz; +import com.ruoyi.device.tsj.domain.DeviceTsj; +import com.ruoyi.schedule.plcRead.util.ParseUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.ConcurrentHashMap; + +@Slf4j +public class PlcCdzRead implements Runnable { + + public static ConcurrentHashMap deviceCdzMap; + public volatile boolean isRun = true; + + public SiemensS7Net siemensS7Net = null; + public static IReadWriteNet readWriteNet = null; + private final String ip; + private final int port; + private boolean success = false; + + public PlcCdzRead(ConcurrentHashMap deviceCdzMap, PlcConnectInfo plcConnectInfo) { + PlcCdzRead.deviceCdzMap = deviceCdzMap; + 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; + } + + @Override + public void run() { + while (isRun) { + try { + if (IsConnect()) { + for (String cdzCode : deviceCdzMap.keySet()) { + DeviceCdz deviceCdz = deviceCdzMap.get(cdzCode); + plcRead(deviceCdz); + } + Thread.sleep(1000); + } else { + reConnect(); + } + } catch (InterruptedException e) { + // 捕获中断异常,退出循环 + Thread.currentThread().interrupt(); // 重新设置中断标志 + return; + } catch (Exception e) { + log.info("********IP:" + this.ip + " port:" + this.port + "读取数据异常 " + e.getMessage()); + } + + } + } + + 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)); + } + } + + + void ConnectServer() { + siemensS7Net = new SiemensS7Net(SiemensPLCS.S1500); + try { + siemensS7Net.setIpAddress(this.ip); + siemensS7Net.setPort(this.port); + siemensS7Net.setRack((byte) 0); + siemensS7Net.setSlot((byte) 1); + + OperateResult connect = siemensS7Net.ConnectServer(); + if (connect.IsSuccess) { + setIsConnect(true); + readWriteNet = siemensS7Net; + } + } catch (Exception ex) { + log.info("********IP:" + this.ip + " port:" + this.port + "连接失败 " + ex.getMessage()); + } + + } + + public void setIsConnect(boolean bflag) { + if (!success) { + success = bflag; + } + } + + public boolean IsConnect() { + if (success) { + return success; + } + return false; + } + + void reConnect() { + closeServer(); + ConnectServer(); + log.info("重新连接 CDZ-PLC"); + } + + void closeServer() { + if (readWriteNet != null) { + readWriteNet.ConnectClose(); + } + setIsConnect(false); + } + + +} 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 new file mode 100644 index 0000000..7af6665 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java @@ -0,0 +1,120 @@ +package com.ruoyi.schedule.scheduleTask.cdz; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +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.job.charg.domain.SrgvChargingJob; +import com.ruoyi.job.charg.service.ISrgvChargingJobService; +import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +@Slf4j +public class CdzThread implements Runnable { + + public boolean isRun = true; + + private final Integer LITTLE_BETTERY = 30; + private final Integer MIDDLE_BETTERY = 70; + + private ISrgvChargingJobService chargingJobService; + private IDeviceCdzService deviceCdzService; + + public void init() { + + } + + @Override + public void run() { + init(); + while (isRun) { + + } + } + + + void inDispatch() { + + //获取低电量小车 + List littleBatterySRgv = new ArrayList<>(); + //获取中电量小车 + List middleBatterySRgv = new ArrayList<>(); + for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) { + DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv); + if (deviceSrgv.getWorkMode()==5 && deviceSrgv.getStatus()!=3 ){ + if (deviceSrgv.getBattery()<=LITTLE_BETTERY){ + littleBatterySRgv.add(deviceSrgv); + }else if (deviceSrgv.getBattery()<=MIDDLE_BETTERY){ + middleBatterySRgv.add(deviceSrgv); + } + } + } + + + //优先低电量小车充电 + if (CollUtil.isNotEmpty(littleBatterySRgv)){ + //排序 + createChargingInJob(littleBatterySRgv); + + }else { + if (CollUtil.isNotEmpty(middleBatterySRgv)){ + //排序 + createChargingInJob(middleBatterySRgv); + } + } + } + + /** + * 创建充电任务 + * @param srgvList + */ + private void createChargingInJob(List srgvList) { + srgvList.sort((o1, o2) -> o2.getBattery()-o1.getBattery()); + + for (DeviceSrgv deviceSrgv : srgvList) { + SrgvChargingJob wcsChargingJob = new SrgvChargingJob(); + wcsChargingJob.setJobType("1"); + wcsChargingJob.setAgvId(deviceSrgv.getDeviceId().toString()); + List srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(wcsChargingJob); + if (CollUtil.isEmpty(srgvChargingJobs)){ + List cdzList = deviceCdzService.selectDeviceCdzListNoSRgvId(); + if (CollUtil.isNotEmpty(cdzList)){ + //寻找最接近的充电桩 + Integer floor = deviceSrgv.getCurrFloor(); + DeviceCdz cdz = 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); + } + } + } + } + } + +} 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 a71a08a..d5552cb 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 @@ -11,6 +11,7 @@ import com.ruoyi.bas.srgvmap.service.IWcsSrgvMapService; import com.ruoyi.bas.srgvmap.service.RoadCacheService; import com.ruoyi.common.domain.SendData2; import com.ruoyi.device.srgv.domain.DeviceSrgv; +import com.ruoyi.job.charg.domain.SrgvChargingJob; import com.ruoyi.job.charg.service.ISrgvChargingJobService; import com.ruoyi.job.domain.MydoJob; import com.ruoyi.job.service.IMydoJobService; @@ -74,12 +75,17 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { if (ObjUtil.isNotNull(PlcSrgvRead.deviceSrgvMap.get(code))) { DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(code); + sRgvTask(deviceSrgv); createCarInQueue(); createCarOutQueue(); + inCharging(deviceSrgv); + + outCharging(deviceSrgv); + } else { log.error("小车设备为空"); } @@ -100,6 +106,63 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { } } + /** + * 离开电桩 + * + * @param deviceSrgv + */ + private void outCharging(DeviceSrgv deviceSrgv) { + + + } + + /** + * 小车充电任务 + * + * @param deviceSrgv + */ + private void inCharging(DeviceSrgv deviceSrgv) { + SrgvChargingJob param = new SrgvChargingJob(); + param.setJobStatus("1"); + param.setJobType("1"); + param.setAgvId(deviceSrgv.getDeviceId().toString()); + List srgvChargingJobs = srgvChargingJobMapper.selectSrgvChargingJobList(param); + if (CollUtil.isNotEmpty(srgvChargingJobs)){ + SrgvChargingJob srgvChargingJob = srgvChargingJobs.get(0); + String chargingSite = srgvChargingJob.getChargingSite();//充电桩站点 + WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue(); + wcsSrgvQueueParam.setAgvId(deviceSrgv.getDeviceId().toString()); + List wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam); + if (CollUtil.isEmpty(wcsSrgvQueues)){ + //生成队列 + WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue(); + wcsSrgvQueue.setGuid(UUID.randomUUID().toString()); + wcsSrgvQueue.setTaskNo(""); + wcsSrgvQueue.setTaskType("3"); + wcsSrgvQueue.setPriority(Long.parseLong("2")); + wcsSrgvQueue.setCargo("0"); + wcsSrgvQueue.setIssued("0"); + wcsSrgvQueue.setExecutionStatus("1"); + wcsSrgvQueue.setCargoPickSite(""); + wcsSrgvQueue.setCargoPlaceSite(""); + wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite()); + + WcsSrgvMap wcsSrgvMap = wcsSrgvMapService.selectWcsSrgvMapBySiteId(chargingSite); + if (wcsSrgvMap.getZ().equals(deviceSrgv.getCurrFloor())){ + wcsSrgvQueue.setEndSite(chargingSite); + }else { + wcsSrgvQueue.setEndSite("tsj"); + } + wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString()); + wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString()); + wcsSrgvQueue.setDefault02("3"); + wcsSrgvQueue.setDefault07(Convert.toStr(wcsSrgvMap.getZ())); + wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue); + } + } + } + /** * 四向小车任务处理 */ diff --git a/ruoyi-admin/src/main/resources/mapper/device/DeviceCdzMapper.xml b/ruoyi-admin/src/main/resources/mapper/device/DeviceCdzMapper.xml new file mode 100644 index 0000000..3120342 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/device/DeviceCdzMapper.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + select id, name, ip, port, plc_db_read_address, plc_db_write_address, rwh, status, xtxh, szcs, model, site_id, spare1, spare2, spare3 from device_cdz + + + + + + + + + insert into device_cdz + + id, + name, + ip, + port, + plc_db_read_address, + plc_db_write_address, + rwh, + status, + xtxh, + szcs, + model, + site_id, + spare1, + spare2, + spare3, + + + #{id}, + #{name}, + #{ip}, + #{port}, + #{plcDbReadAddress}, + #{plcDbWriteAddress}, + #{rwh}, + #{status}, + #{xtxh}, + #{szcs}, + #{model}, + #{siteId}, + #{spare1}, + #{spare2}, + #{spare3}, + + + + + update device_cdz + + name = #{name}, + ip = #{ip}, + port = #{port}, + plc_db_read_address = #{plcDbReadAddress}, + plc_db_write_address = #{plcDbWriteAddress}, + rwh = #{rwh}, + status = #{status}, + xtxh = #{xtxh}, + szcs = #{szcs}, + model = #{model}, + site_id = #{siteId}, + spare1 = #{spare1}, + spare2 = #{spare2}, + spare3 = #{spare3}, + + where id = #{id} + + + + delete from device_cdz where id = #{id} + + + + delete from device_cdz where id in + + #{id} + + +