From cbda1d15e845ff29993e72c58b239e4f2e8a691c Mon Sep 17 00:00:00 2001 From: liuhanqing Date: Thu, 11 Dec 2025 09:19:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(device):=20=E5=A2=9E=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=95=85=E9=9A=9C=E8=AE=B0=E5=BD=95=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E5=AE=8C=E5=96=84=E7=9B=91=E6=8E=A7=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 DeviceSsjMapper.xml 中添加 ipAddress 和 port 字段映射 - 调整 SQL 查询语句字段顺序以适配新增字段 - MonitoringThread.java 引入 BasFaultRecord 相关类及工具类 - 初始化 basFaultRecordService 和 mydoJobService 服务实例 - 实现设备状态异常检测逻辑,并创建或更新故障记录 - 新增 BasFaultRecord 实体类用于存储设备故障信息 - 创建 BasFaultRecordController 控制器提供 RESTful 接口 - 添加 BasFaultRecordMapper 接口定义数据库操作方法 - 编写 BasFaultRecordMapper.xml 配置文件实现 CRUD 操作 - 实现 BasFaultRecordServiceImpl 业务逻辑处理层 - 定义 IBasFaultRecordService 接口规范服务行为 --- .../controller/BasFaultRecordController.java | 104 +++++++++++ .../bas/fault/domain/BasFaultRecord.java | 172 ++++++++++++++++++ .../fault/mapper/BasFaultRecordMapper.java | 61 +++++++ .../fault/service/IBasFaultRecordService.java | 61 +++++++ .../impl/BasFaultRecordServiceImpl.java | 93 ++++++++++ .../scheduleTask/monit/MonitoringThread.java | 54 +++++- .../mapper/bas/BasFaultRecordMapper.xml | 98 ++++++++++ .../mapper/device/DeviceSsjMapper.xml | 4 +- ...nitoringService.xml => GenTableMapper.xml} | 0 9 files changed, 645 insertions(+), 2 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/bas/fault/controller/BasFaultRecordController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/bas/fault/domain/BasFaultRecord.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/bas/fault/mapper/BasFaultRecordMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/bas/fault/service/IBasFaultRecordService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/bas/fault/service/impl/BasFaultRecordServiceImpl.java create mode 100644 ruoyi-admin/src/main/resources/mapper/bas/BasFaultRecordMapper.xml rename ruoyi-generator/src/main/resources/mapper/generator/{IDynamicMonitoringService.xml => GenTableMapper.xml} (100%) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/controller/BasFaultRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/controller/BasFaultRecordController.java new file mode 100644 index 0000000..5338ec1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/controller/BasFaultRecordController.java @@ -0,0 +1,104 @@ +package com.ruoyi.bas.fault.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.bas.fault.domain.BasFaultRecord; +import com.ruoyi.bas.fault.service.IBasFaultRecordService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 设备故障记录Controller + * + * @author ruoyi + * @date 2025-12-11 + */ +@RestController +@RequestMapping("/bas/faultRecord") +public class BasFaultRecordController extends BaseController +{ + @Autowired + private IBasFaultRecordService basFaultRecordService; + + /** + * 查询设备故障记录列表 + */ + @PreAuthorize("@ss.hasPermi('bas:faultRecord:list')") + @GetMapping("/list") + public TableDataInfo list(BasFaultRecord basFaultRecord) + { + startPage(); + List list = basFaultRecordService.selectBasFaultRecordList(basFaultRecord); + return getDataTable(list); + } + + /** + * 导出设备故障记录列表 + */ + @PreAuthorize("@ss.hasPermi('bas:faultRecord:export')") + @Log(title = "设备故障记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BasFaultRecord basFaultRecord) + { + List list = basFaultRecordService.selectBasFaultRecordList(basFaultRecord); + ExcelUtil util = new ExcelUtil(BasFaultRecord.class); + util.exportExcel(response, list, "设备故障记录数据"); + } + + /** + * 获取设备故障记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('bas:faultRecord:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") String id) + { + return success(basFaultRecordService.selectBasFaultRecordById(id)); + } + + /** + * 新增设备故障记录 + */ + @PreAuthorize("@ss.hasPermi('bas:faultRecord:add')") + @Log(title = "设备故障记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BasFaultRecord basFaultRecord) + { + return toAjax(basFaultRecordService.insertBasFaultRecord(basFaultRecord)); + } + + /** + * 修改设备故障记录 + */ + @PreAuthorize("@ss.hasPermi('bas:faultRecord:edit')") + @Log(title = "设备故障记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BasFaultRecord basFaultRecord) + { + return toAjax(basFaultRecordService.updateBasFaultRecord(basFaultRecord)); + } + + /** + * 删除设备故障记录 + */ + @PreAuthorize("@ss.hasPermi('bas:faultRecord:remove')") + @Log(title = "设备故障记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) + { + return toAjax(basFaultRecordService.deleteBasFaultRecordByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/domain/BasFaultRecord.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/domain/BasFaultRecord.java new file mode 100644 index 0000000..1393892 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/domain/BasFaultRecord.java @@ -0,0 +1,172 @@ +package com.ruoyi.bas.fault.domain; + +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; + +/** + * 设备故障记录对象 bas_fault_record + * + * @author ruoyi + * @date 2025-12-11 + */ +public class BasFaultRecord extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** id 主键 */ + private String id; + + /** 设备id */ + @Excel(name = "设备id") + private String deviceId; + + /** 设备名称 */ + @Excel(name = "设备名称") + private String deviceName; + + /** 设备类型 */ + @Excel(name = "设备类型") + private String deviceType; + + /** 任务号 */ + @Excel(name = "任务号") + private String taskNo; + + /** 作业id */ + @Excel(name = "作业id ") + private String jobId; + + /** 报警信息 */ + @Excel(name = "报警信息") + private String fault; + + /** 报警开始时间 */ + @Excel(name = "报警开始时间") + private String startTime; + + /** 报警结束时间 */ + @Excel(name = "报警结束时间") + private String finishTime; + + /** 仓库 */ + @Excel(name = "仓库") + private String warehouseId; + + public void setId(String id) + { + this.id = id; + } + + public String getId() + { + return id; + } + + public void setDeviceId(String deviceId) + { + this.deviceId = deviceId; + } + + public String getDeviceId() + { + return deviceId; + } + + public void setDeviceName(String deviceName) + { + this.deviceName = deviceName; + } + + public String getDeviceName() + { + return deviceName; + } + + public void setDeviceType(String deviceType) + { + this.deviceType = deviceType; + } + + public String getDeviceType() + { + return deviceType; + } + + public void setTaskNo(String taskNo) + { + this.taskNo = taskNo; + } + + public String getTaskNo() + { + return taskNo; + } + + public void setJobId(String jobId) + { + this.jobId = jobId; + } + + public String getJobId() + { + return jobId; + } + + public void setFault(String fault) + { + this.fault = fault; + } + + public String getFault() + { + return fault; + } + + public void setStartTime(String startTime) + { + this.startTime = startTime; + } + + public String getStartTime() + { + return startTime; + } + + public void setFinishTime(String finishTime) + { + this.finishTime = finishTime; + } + + public String getFinishTime() + { + return finishTime; + } + + public void setWarehouseId(String warehouseId) + { + this.warehouseId = warehouseId; + } + + public String getWarehouseId() + { + return warehouseId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("deviceId", getDeviceId()) + .append("deviceName", getDeviceName()) + .append("deviceType", getDeviceType()) + .append("taskNo", getTaskNo()) + .append("jobId", getJobId()) + .append("fault", getFault()) + .append("startTime", getStartTime()) + .append("finishTime", getFinishTime()) + .append("warehouseId", getWarehouseId()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/mapper/BasFaultRecordMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/mapper/BasFaultRecordMapper.java new file mode 100644 index 0000000..5eecce2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/mapper/BasFaultRecordMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.bas.fault.mapper; + +import java.util.List; +import com.ruoyi.bas.fault.domain.BasFaultRecord; + +/** + * 设备故障记录Mapper接口 + * + * @author ruoyi + * @date 2025-12-11 + */ +public interface BasFaultRecordMapper +{ + /** + * 查询设备故障记录 + * + * @param id 设备故障记录主键 + * @return 设备故障记录 + */ + public BasFaultRecord selectBasFaultRecordById(String id); + + /** + * 查询设备故障记录列表 + * + * @param basFaultRecord 设备故障记录 + * @return 设备故障记录集合 + */ + public List selectBasFaultRecordList(BasFaultRecord basFaultRecord); + + /** + * 新增设备故障记录 + * + * @param basFaultRecord 设备故障记录 + * @return 结果 + */ + public int insertBasFaultRecord(BasFaultRecord basFaultRecord); + + /** + * 修改设备故障记录 + * + * @param basFaultRecord 设备故障记录 + * @return 结果 + */ + public int updateBasFaultRecord(BasFaultRecord basFaultRecord); + + /** + * 删除设备故障记录 + * + * @param id 设备故障记录主键 + * @return 结果 + */ + public int deleteBasFaultRecordById(String id); + + /** + * 批量删除设备故障记录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBasFaultRecordByIds(String[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/service/IBasFaultRecordService.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/service/IBasFaultRecordService.java new file mode 100644 index 0000000..a7820c2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/service/IBasFaultRecordService.java @@ -0,0 +1,61 @@ +package com.ruoyi.bas.fault.service; + +import java.util.List; +import com.ruoyi.bas.fault.domain.BasFaultRecord; + +/** + * 设备故障记录Service接口 + * + * @author ruoyi + * @date 2025-12-11 + */ +public interface IBasFaultRecordService +{ + /** + * 查询设备故障记录 + * + * @param id 设备故障记录主键 + * @return 设备故障记录 + */ + public BasFaultRecord selectBasFaultRecordById(String id); + + /** + * 查询设备故障记录列表 + * + * @param basFaultRecord 设备故障记录 + * @return 设备故障记录集合 + */ + public List selectBasFaultRecordList(BasFaultRecord basFaultRecord); + + /** + * 新增设备故障记录 + * + * @param basFaultRecord 设备故障记录 + * @return 结果 + */ + public int insertBasFaultRecord(BasFaultRecord basFaultRecord); + + /** + * 修改设备故障记录 + * + * @param basFaultRecord 设备故障记录 + * @return 结果 + */ + public int updateBasFaultRecord(BasFaultRecord basFaultRecord); + + /** + * 批量删除设备故障记录 + * + * @param ids 需要删除的设备故障记录主键集合 + * @return 结果 + */ + public int deleteBasFaultRecordByIds(String[] ids); + + /** + * 删除设备故障记录信息 + * + * @param id 设备故障记录主键 + * @return 结果 + */ + public int deleteBasFaultRecordById(String id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/service/impl/BasFaultRecordServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/service/impl/BasFaultRecordServiceImpl.java new file mode 100644 index 0000000..47e3e67 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/fault/service/impl/BasFaultRecordServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.bas.fault.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.bas.fault.mapper.BasFaultRecordMapper; +import com.ruoyi.bas.fault.domain.BasFaultRecord; +import com.ruoyi.bas.fault.service.IBasFaultRecordService; + +/** + * 设备故障记录Service业务层处理 + * + * @author ruoyi + * @date 2025-12-11 + */ +@Service +public class BasFaultRecordServiceImpl implements IBasFaultRecordService +{ + @Autowired + private BasFaultRecordMapper basFaultRecordMapper; + + /** + * 查询设备故障记录 + * + * @param id 设备故障记录主键 + * @return 设备故障记录 + */ + @Override + public BasFaultRecord selectBasFaultRecordById(String id) + { + return basFaultRecordMapper.selectBasFaultRecordById(id); + } + + /** + * 查询设备故障记录列表 + * + * @param basFaultRecord 设备故障记录 + * @return 设备故障记录 + */ + @Override + public List selectBasFaultRecordList(BasFaultRecord basFaultRecord) + { + return basFaultRecordMapper.selectBasFaultRecordList(basFaultRecord); + } + + /** + * 新增设备故障记录 + * + * @param basFaultRecord 设备故障记录 + * @return 结果 + */ + @Override + public int insertBasFaultRecord(BasFaultRecord basFaultRecord) + { + return basFaultRecordMapper.insertBasFaultRecord(basFaultRecord); + } + + /** + * 修改设备故障记录 + * + * @param basFaultRecord 设备故障记录 + * @return 结果 + */ + @Override + public int updateBasFaultRecord(BasFaultRecord basFaultRecord) + { + return basFaultRecordMapper.updateBasFaultRecord(basFaultRecord); + } + + /** + * 批量删除设备故障记录 + * + * @param ids 需要删除的设备故障记录主键 + * @return 结果 + */ + @Override + public int deleteBasFaultRecordByIds(String[] ids) + { + return basFaultRecordMapper.deleteBasFaultRecordByIds(ids); + } + + /** + * 删除设备故障记录信息 + * + * @param id 设备故障记录主键 + * @return 结果 + */ + @Override + public int deleteBasFaultRecordById(String id) + { + return basFaultRecordMapper.deleteBasFaultRecordById(id); + } +} 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 46db329..b97badb 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,13 +1,25 @@ package com.ruoyi.schedule.scheduleTask.monit; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjUtil; +import com.ruoyi.bas.fault.domain.BasFaultRecord; +import com.ruoyi.bas.fault.service.IBasFaultRecordService; import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.device.ddj.domain.MsgDdj; import com.ruoyi.device.ddj.service.IMsgDdjService; import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.device.ssj.service.IDeviceSsjService; +import com.ruoyi.job.domain.MydoJob; +import com.ruoyi.job.service.IMydoJobService; import com.ruoyi.schedule.plcRead.ddj.PlcDdjRead; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; import lombok.extern.slf4j.Slf4j; +import java.util.List; + /** * 监控线程 */ @@ -18,11 +30,15 @@ public class MonitoringThread implements Runnable { private IDeviceSsjService deviceSsjService; private IMsgDdjService msgDdjService; + private IBasFaultRecordService basFaultRecordService; + private IMydoJobService mydoJobService; public void init() { deviceSsjService = SpringUtils.getBean(IDeviceSsjService.class); msgDdjService = SpringUtils.getBean(IMsgDdjService.class); + basFaultRecordService = SpringUtils.getBean(IBasFaultRecordService.class); + mydoJobService = SpringUtils.getBean(IMydoJobService.class); } @Override @@ -34,7 +50,43 @@ public class MonitoringThread implements Runnable { deviceSsjService.updateDeviceSsj(deviceSsj); } for (String ddjCode : PlcDdjRead.deviceDdjMap.keySet()) { - msgDdjService.updateMsgDdj(PlcDdjRead.deviceDdjMap.get(ddjCode)); + MsgDdj msgDdj = PlcDdjRead.deviceDdjMap.get(ddjCode); + msgDdjService.updateMsgDdj(msgDdj); + + if (msgDdj.getSbzt() > 1000) { + BasFaultRecord param = new BasFaultRecord(); + param.setTaskNo(msgDdj.getRwh() + ""); + param.setDeviceId(String.valueOf(msgDdj.getId())); + param.setDeviceType("DDJ"); + param.setJobId("0"); + List basFaultRecords = basFaultRecordService.selectBasFaultRecordList(param); + if (CollUtil.isEmpty(basFaultRecords)) { + BasFaultRecord faultRecord = new BasFaultRecord(); + faultRecord.setId(IdUtil.fastSimpleUUID()); + faultRecord.setDeviceId(String.valueOf(msgDdj.getId())); + faultRecord.setDeviceName(msgDdj.getName()); + faultRecord.setDeviceType("DDJ"); + faultRecord.setJobId("0"); + faultRecord.setTaskNo(msgDdj.getRwh() + ""); + faultRecord.setFault(msgDdj.getSbzt() + ""); + faultRecord.setStartTime(DateUtil.formatDateTime(DateUtil.date())); + //faultRecord.setWarehouseId(mydoJob.getWarehouseId()); + basFaultRecordService.insertBasFaultRecord(faultRecord); + } + } + if (msgDdj.getSbzt() < 1000 && msgDdj.getCzfs() == 5){ + BasFaultRecord param = new BasFaultRecord(); + param.setTaskNo(msgDdj.getRwh() + ""); + param.setDeviceId(String.valueOf(msgDdj.getId())); + param.setDeviceType("DDJ"); + List basFaultRecords = basFaultRecordService.selectBasFaultRecordList(param); + if (CollUtil.isNotEmpty(basFaultRecords)) { + BasFaultRecord faultRecord = basFaultRecords.get(0); + faultRecord.setJobId("1"); + faultRecord.setFinishTime(DateUtil.formatDateTime(DateUtil.date())); + basFaultRecordService.updateBasFaultRecord(faultRecord); + } + } } try { Thread.sleep(1500); diff --git a/ruoyi-admin/src/main/resources/mapper/bas/BasFaultRecordMapper.xml b/ruoyi-admin/src/main/resources/mapper/bas/BasFaultRecordMapper.xml new file mode 100644 index 0000000..c29201e --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/bas/BasFaultRecordMapper.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + select id, device_id, device_name, device_type, task_no, job_id, fault, start_time, finish_time, warehouse_id from bas_fault_record + + + + + + + + insert into bas_fault_record + + id, + device_id, + device_name, + device_type, + task_no, + job_id, + fault, + start_time, + finish_time, + warehouse_id, + + + #{id}, + #{deviceId}, + #{deviceName}, + #{deviceType}, + #{taskNo}, + #{jobId}, + #{fault}, + #{startTime}, + #{finishTime}, + #{warehouseId}, + + + + + update bas_fault_record + + device_id = #{deviceId}, + device_name = #{deviceName}, + device_type = #{deviceType}, + task_no = #{taskNo}, + job_id = #{jobId}, + fault = #{fault}, + start_time = #{startTime}, + finish_time = #{finishTime}, + warehouse_id = #{warehouseId}, + + where id = #{id} + + + + delete from bas_fault_record where id = #{id} + + + + delete from bas_fault_record where id in + + #{id} + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/device/DeviceSsjMapper.xml b/ruoyi-admin/src/main/resources/mapper/device/DeviceSsjMapper.xml index ab6e231..6557c21 100644 --- a/ruoyi-admin/src/main/resources/mapper/device/DeviceSsjMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/device/DeviceSsjMapper.xml @@ -22,10 +22,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + - select id, device_code , name , type, ip_address, plc_db_read_address, is_active, create_time, plc_db_write_address, rkqq, kx, dw, tray_code, task_no,exception,tray_size,allow_put from device_ssj + select id, device_code , name , type, plc_db_read_address, is_active, create_time, plc_db_write_address, rkqq, kx, dw, tray_code, task_no,exception,tray_size,allow_put,ip_address , port from device_ssj