diff --git a/klp-ems/src/main/java/com/klp/ems/config/SchedulingConfig.java b/klp-ems/src/main/java/com/klp/ems/config/SchedulingConfig.java new file mode 100644 index 00000000..d776397a --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/config/SchedulingConfig.java @@ -0,0 +1,9 @@ +package com.klp.ems.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; + +@Configuration +@EnableScheduling +public class SchedulingConfig { +} \ No newline at end of file diff --git a/klp-ems/src/main/java/com/klp/ems/controller/EmsHazardRecordController.java b/klp-ems/src/main/java/com/klp/ems/controller/EmsHazardRecordController.java new file mode 100644 index 00000000..4b6f4e85 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/controller/EmsHazardRecordController.java @@ -0,0 +1,99 @@ +package com.klp.ems.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.ems.domain.vo.EmsHazardRecordVo; +import com.klp.ems.domain.bo.EmsHazardRecordBo; +import com.klp.ems.service.IEmsHazardRecordService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 设备隐患记录 + * + * @author Joshi + * @date 2025-10-13 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ems/hazardRecord") +public class EmsHazardRecordController extends BaseController { + + private final IEmsHazardRecordService iEmsHazardRecordService; + + /** + * 查询设备隐患记录列表 + */ + @GetMapping("/list") + public TableDataInfo list(EmsHazardRecordBo bo, PageQuery pageQuery) { + return iEmsHazardRecordService.queryPageList(bo, pageQuery); + } + + /** + * 导出设备隐患记录列表 + */ + @Log(title = "设备隐患记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(EmsHazardRecordBo bo, HttpServletResponse response) { + List list = iEmsHazardRecordService.queryList(bo); + ExcelUtil.exportExcel(list, "设备隐患记录", EmsHazardRecordVo.class, response); + } + + /** + * 获取设备隐患记录详细信息 + * + * @param hazardId 主键 + */ + @GetMapping("/{hazardId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long hazardId) { + return R.ok(iEmsHazardRecordService.queryById(hazardId)); + } + + /** + * 新增设备隐患记录 + */ + @Log(title = "设备隐患记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody EmsHazardRecordBo bo) { + return toAjax(iEmsHazardRecordService.insertByBo(bo)); + } + + /** + * 修改设备隐患记录 + */ + @Log(title = "设备隐患记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody EmsHazardRecordBo bo) { + return toAjax(iEmsHazardRecordService.updateByBo(bo)); + } + + /** + * 删除设备隐患记录 + * + * @param hazardIds 主键串 + */ + @Log(title = "设备隐患记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{hazardIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] hazardIds) { + return toAjax(iEmsHazardRecordService.deleteWithValidByIds(Arrays.asList(hazardIds), true)); + } +} diff --git a/klp-ems/src/main/java/com/klp/ems/controller/EmsSafetyEnvDocController.java b/klp-ems/src/main/java/com/klp/ems/controller/EmsSafetyEnvDocController.java new file mode 100644 index 00000000..b7442705 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/controller/EmsSafetyEnvDocController.java @@ -0,0 +1,99 @@ +package com.klp.ems.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.ems.domain.vo.EmsSafetyEnvDocVo; +import com.klp.ems.domain.bo.EmsSafetyEnvDocBo; +import com.klp.ems.service.IEmsSafetyEnvDocService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 安全环保制度文档 + * + * @author Joshi + * @date 2025-10-13 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/ems/safetyEnvDoc") +public class EmsSafetyEnvDocController extends BaseController { + + private final IEmsSafetyEnvDocService iEmsSafetyEnvDocService; + + /** + * 查询安全环保制度文档列表 + */ + @GetMapping("/list") + public TableDataInfo list(EmsSafetyEnvDocBo bo, PageQuery pageQuery) { + return iEmsSafetyEnvDocService.queryPageList(bo, pageQuery); + } + + /** + * 导出安全环保制度文档列表 + */ + @Log(title = "安全环保制度文档", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(EmsSafetyEnvDocBo bo, HttpServletResponse response) { + List list = iEmsSafetyEnvDocService.queryList(bo); + ExcelUtil.exportExcel(list, "安全环保制度文档", EmsSafetyEnvDocVo.class, response); + } + + /** + * 获取安全环保制度文档详细信息 + * + * @param docId 主键 + */ + @GetMapping("/{docId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long docId) { + return R.ok(iEmsSafetyEnvDocService.queryById(docId)); + } + + /** + * 新增安全环保制度文档 + */ + @Log(title = "安全环保制度文档", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody EmsSafetyEnvDocBo bo) { + return toAjax(iEmsSafetyEnvDocService.insertByBo(bo)); + } + + /** + * 修改安全环保制度文档 + */ + @Log(title = "安全环保制度文档", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody EmsSafetyEnvDocBo bo) { + return toAjax(iEmsSafetyEnvDocService.updateByBo(bo)); + } + + /** + * 删除安全环保制度文档 + * + * @param docIds 主键串 + */ + @Log(title = "安全环保制度文档", businessType = BusinessType.DELETE) + @DeleteMapping("/{docIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] docIds) { + return toAjax(iEmsSafetyEnvDocService.deleteWithValidByIds(Arrays.asList(docIds), true)); + } +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/EmsHazardRecord.java b/klp-ems/src/main/java/com/klp/ems/domain/EmsHazardRecord.java new file mode 100644 index 00000000..ff08dee3 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/EmsHazardRecord.java @@ -0,0 +1,83 @@ +package com.klp.ems.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 设备隐患记录对象 ems_hazard_record + * + * @author Joshi + * @date 2025-10-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ems_hazard_record") +public class EmsHazardRecord extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * + */ + @TableId(value = "hazard_id") + private Long hazardId; + /** + * 关联的设备ID + */ + private Long deviceId; + /** + * 隐患类型 + */ + private String hazardType; + /** + * 隐患级别(1=一般 2=较大 3=重大) + */ + private Long hazardLevel; + /** + * 隐患描述 + */ + private String hazardDesc; + /** + * 发现时间 + */ + private Date discoveryTime; + /** + * 录入时间 + */ + private Date inputTime; + /** + * 录入人 + */ + private String inputUser; + /** + * 处理状态(0=未处理 1=处理中 2=已整改 3=已关闭) + */ + private Long status; + /** + * 整改人 + */ + private String rectifyUser; + /** + * 整改时间 + */ + private Date rectifyTime; + /** + * 整改说明 + */ + private String rectifyDesc; + /** + * 删除标志(0=存在 2=删除) + */ + @TableLogic + private String delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/EmsSafetyEnvDoc.java b/klp-ems/src/main/java/com/klp/ems/domain/EmsSafetyEnvDoc.java new file mode 100644 index 00000000..14b42290 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/EmsSafetyEnvDoc.java @@ -0,0 +1,72 @@ +package com.klp.ems.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 安全环保制度文档对象 ems_safety_env_doc + * + * @author Joshi + * @date 2025-10-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ems_safety_env_doc") +public class EmsSafetyEnvDoc extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 文档ID(主键) + */ + @TableId(value = "doc_id") + private Long docId; + /** + * 文档编号(唯一) + */ + private String docNo; + /** + * 文档名称 + */ + private String docName; + /** + * 文档分类(1=安全 2=环保) + */ + private Long docCategory; + /** + * 文档类型(如:制度、规范、手册等) + */ + private String docType; + /** + * 附件 + */ + private String accessory; + /** + * 文档版本 + */ + @Version + private String version; + /** + * 发布状态(0=草稿 1=已发布) + */ + private Long publishStatus; + /** + * 发布日期 + */ + private Date publishTime; + /** + * 备注 + */ + private String remark; + /** + * 删除标志(0=正常,1=已删除) + */ + @TableLogic + private Integer delFlag; + +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsHazardRecordBo.java b/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsHazardRecordBo.java new file mode 100644 index 00000000..32882531 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsHazardRecordBo.java @@ -0,0 +1,88 @@ +package com.klp.ems.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 设备隐患记录业务对象 ems_hazard_record + * + * @author Joshi + * @date 2025-10-13 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class EmsHazardRecordBo extends BaseEntity { + + /** + * + */ + private Long hazardId; + + /** + * 关联的设备ID + */ + private Long deviceId; + + /** + * 隐患类型 + */ + private String hazardType; + + /** + * 隐患级别(1=一般 2=较大 3=重大) + */ + private Long hazardLevel; + + /** + * 隐患描述 + */ + private String hazardDesc; + + /** + * 发现时间 + */ + private Date discoveryTime; + + /** + * 录入时间 + */ + private Date inputTime; + + /** + * 录入人 + */ + private String inputUser; + + /** + * 处理状态(0=未处理 1=处理中 2=已整改 3=已关闭) + */ + private Long status; + + /** + * 整改人 + */ + private String rectifyUser; + + /** + * 整改时间 + */ + private Date rectifyTime; + + /** + * 整改说明 + */ + private String rectifyDesc; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsSafetyEnvDocBo.java b/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsSafetyEnvDocBo.java new file mode 100644 index 00000000..ae215742 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsSafetyEnvDocBo.java @@ -0,0 +1,68 @@ +package com.klp.ems.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 安全环保制度文档业务对象 ems_safety_env_doc + * + * @author Joshi + * @date 2025-10-13 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class EmsSafetyEnvDocBo extends BaseEntity { + + /** + * 文档ID(主键) + */ + private Long docId; + + /** + * 文档编号(唯一) + */ + private String docNo; + + /** + * 文档名称 + */ + private String docName; + + /** + * 文档分类(1=安全 2=环保) + */ + private Long docCategory; + + /** + * 文档类型(如:制度、规范、手册等) + */ + private String docType; + + /** + * 附件 + */ + private String accessory; + + /** + * 发布状态(0=草稿 1=已发布) + */ + private Long publishStatus; + + /** + * 发布日期 + */ + private Date publishTime; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsHazardRecordVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsHazardRecordVo.java new file mode 100644 index 00000000..84010806 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsHazardRecordVo.java @@ -0,0 +1,113 @@ +package com.klp.ems.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.common.annotation.ExcelDictFormat; +import com.klp.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 设备隐患记录视图对象 ems_hazard_record + * + * @author Joshi + * @date 2025-10-13 + */ +@Data +@ExcelIgnoreUnannotated +public class EmsHazardRecordVo { + + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long hazardId; + + /** + * 关联的设备ID + */ + @ExcelProperty(value = "关联的设备ID") + private Long deviceId; + + /** + * 设备名称 + */ + @ExcelProperty(value = "设备名称") + private String deviceName; + + /** + * 隐患类型 + */ + @ExcelProperty(value = "隐患类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "hazard_type") + private String hazardType; + + /** + * 隐患级别(1=一般 2=较大 3=重大) + */ + @ExcelProperty(value = "隐患级别", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "hazard_level") + private Long hazardLevel; + + /** + * 隐患描述 + */ + @ExcelProperty(value = "隐患描述") + private String hazardDesc; + + /** + * 发现时间 + */ + @ExcelProperty(value = "发现时间") + private Date discoveryTime; + + /** + * 录入时间 + */ + @ExcelProperty(value = "录入时间") + private Date inputTime; + + /** + * 录入人 + */ + @ExcelProperty(value = "录入人") + private String inputUser; + + /** + * 处理状态(0=未处理 1=处理中 2=已整改 3=已关闭) + */ + @ExcelProperty(value = "处理状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "hazard_status") + private Long status; + + /** + * 整改人 + */ + @ExcelProperty(value = "整改人") + private String rectifyUser; + + /** + * 整改时间 + */ + @ExcelProperty(value = "整改时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date rectifyTime; + + /** + * 整改说明 + */ + @ExcelProperty(value = "整改说明") + private String rectifyDesc; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsSafetyEnvDocVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsSafetyEnvDocVo.java new file mode 100644 index 00000000..0d459cec --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsSafetyEnvDocVo.java @@ -0,0 +1,84 @@ +package com.klp.ems.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.common.annotation.ExcelDictFormat; +import com.klp.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 安全环保制度文档视图对象 ems_safety_env_doc + * + * @author Joshi + * @date 2025-10-13 + */ +@Data +@ExcelIgnoreUnannotated +public class EmsSafetyEnvDocVo { + + private static final long serialVersionUID = 1L; + + /** + * 文档ID(主键) + */ + @ExcelProperty(value = "文档ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "主=键") + private Long docId; + + /** + * 文档编号(唯一) + */ + @ExcelProperty(value = "文档编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "唯=一") + private String docNo; + + /** + * 文档名称 + */ + @ExcelProperty(value = "文档名称") + private String docName; + + /** + * 文档分类(1=安全 2=环保) + */ + @ExcelProperty(value = "文档分类", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "doc_category") + private Long docCategory; + + /** + * 文档类型(如:制度、规范、手册等) + */ + @ExcelProperty(value = "文档类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "doc_type") + private String docType; + + /** + * 附件 + */ + @ExcelProperty(value = "附件") + private String accessory; + + /** + * 发布状态(0=草稿 1=已发布) + */ + @ExcelProperty(value = "发布状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "publish_status") + private Long publishStatus; + + /** + * 发布日期 + */ + @ExcelProperty(value = "发布日期") + private Date publishTime; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-ems/src/main/java/com/klp/ems/mapper/EmsHazardRecordMapper.java b/klp-ems/src/main/java/com/klp/ems/mapper/EmsHazardRecordMapper.java new file mode 100644 index 00000000..cbac6212 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/mapper/EmsHazardRecordMapper.java @@ -0,0 +1,19 @@ +package com.klp.ems.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import com.klp.ems.domain.EmsHazardRecord; +import com.klp.ems.domain.vo.EmsHazardRecordVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 设备隐患记录Mapper接口 + * + * @author Joshi + * @date 2025-10-13 + */ +public interface EmsHazardRecordMapper extends BaseMapperPlus { + + Page selectVoPagePlus(Page build, @Param("ew") QueryWrapper qw); +} diff --git a/klp-ems/src/main/java/com/klp/ems/mapper/EmsSafetyEnvDocMapper.java b/klp-ems/src/main/java/com/klp/ems/mapper/EmsSafetyEnvDocMapper.java new file mode 100644 index 00000000..e4b44ecf --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/mapper/EmsSafetyEnvDocMapper.java @@ -0,0 +1,15 @@ +package com.klp.ems.mapper; + +import com.klp.ems.domain.EmsSafetyEnvDoc; +import com.klp.ems.domain.vo.EmsSafetyEnvDocVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 安全环保制度文档Mapper接口 + * + * @author Joshi + * @date 2025-10-13 + */ +public interface EmsSafetyEnvDocMapper extends BaseMapperPlus { + +} diff --git a/klp-ems/src/main/java/com/klp/ems/schedule/EmsAlarmRecordScheduler.java b/klp-ems/src/main/java/com/klp/ems/schedule/EmsAlarmRecordScheduler.java new file mode 100644 index 00000000..be9bdc38 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/schedule/EmsAlarmRecordScheduler.java @@ -0,0 +1,87 @@ +package com.klp.ems.schedule; + +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.page.TableDataInfo; +import com.klp.ems.domain.bo.EmsAlarmDeviceBo; +import com.klp.ems.domain.bo.EmsAlarmRecordBo; +import com.klp.ems.domain.vo.EmsAlarmDeviceVo; +import com.klp.ems.service.IEmsAlarmDeviceService; +import com.klp.ems.service.IEmsAlarmRecordService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.List; +import java.util.Random; + +/** + * 每30分钟自动生成一条报警记录(随机数据,占位用) + */ +@Component +public class EmsAlarmRecordScheduler { + + private static final Logger log = LoggerFactory.getLogger(EmsAlarmRecordScheduler.class); + private static final String[] ALARM_TYPES = {"温度告警", "电压告警", "震动告警", "网络告警"}; + private static final String[] ALARM_CONTENT_TEMPLATES = { + "检测到{type},数值异常", + "{type}触发,阈值超限", + "{type}持续波动,需要关注", + "{type}恢复后再次触发" + }; + private final Random random = new Random(); + + private final IEmsAlarmRecordService alarmRecordService; + private final IEmsAlarmDeviceService alarmDeviceService; + + public EmsAlarmRecordScheduler(IEmsAlarmRecordService alarmRecordService, + IEmsAlarmDeviceService alarmDeviceService) { + this.alarmRecordService = alarmRecordService; + this.alarmDeviceService = alarmDeviceService; + } + + @Scheduled(cron = "0 0/30 * * * ?") + public void autoGenerateAlarmRecord() { + try { + Long deviceId = chooseRandomDeviceId(); + String type = ALARM_TYPES[random.nextInt(ALARM_TYPES.length)]; + int level = random.nextInt(3) + 1; // 1~3 + String contentTpl = ALARM_CONTENT_TEMPLATES[random.nextInt(ALARM_CONTENT_TEMPLATES.length)]; + String content = contentTpl.replace("{type}", type); + + EmsAlarmRecordBo bo = new EmsAlarmRecordBo(); + bo.setDeviceId(deviceId); + bo.setAlarmType(type); + bo.setAlarmLevel((long) level); + bo.setAlarmContent(content); + bo.setAlarmTime(new Date()); + bo.setHandleStatus(0L); // 未处理 + bo.setRemark("需解决"); + + Boolean ok = alarmRecordService.insertByBo(bo); + log.info("[AlarmScheduler] auto insert alarm record result={}, deviceId={}, type={}, level={}", + ok, deviceId, type, level); + } catch (Exception e) { + log.error("[AlarmScheduler] autoGenerateAlarmRecord error", e); + } + } + + private Long chooseRandomDeviceId() { + try { + // 查询少量设备用于随机选取 + EmsAlarmDeviceBo bo = new EmsAlarmDeviceBo(); + TableDataInfo page = alarmDeviceService.queryPageList(bo, new PageQuery()); + List list = page.getRows(); + if (list != null && !list.isEmpty()) { + EmsAlarmDeviceVo any = list.get(random.nextInt(list.size())); + if (any != null && any.getDeviceId() != null) { + return any.getDeviceId(); + } + } + } catch (Exception ignore) { + } + // 兜底 + return 1L; + } +} diff --git a/klp-ems/src/main/java/com/klp/ems/service/IEmsHazardRecordService.java b/klp-ems/src/main/java/com/klp/ems/service/IEmsHazardRecordService.java new file mode 100644 index 00000000..01742997 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/service/IEmsHazardRecordService.java @@ -0,0 +1,49 @@ +package com.klp.ems.service; + +import com.klp.ems.domain.EmsHazardRecord; +import com.klp.ems.domain.vo.EmsHazardRecordVo; +import com.klp.ems.domain.bo.EmsHazardRecordBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 设备隐患记录Service接口 + * + * @author Joshi + * @date 2025-10-13 + */ +public interface IEmsHazardRecordService { + + /** + * 查询设备隐患记录 + */ + EmsHazardRecordVo queryById(Long hazardId); + + /** + * 查询设备隐患记录列表 + */ + TableDataInfo queryPageList(EmsHazardRecordBo bo, PageQuery pageQuery); + + /** + * 查询设备隐患记录列表 + */ + List queryList(EmsHazardRecordBo bo); + + /** + * 新增设备隐患记录 + */ + Boolean insertByBo(EmsHazardRecordBo bo); + + /** + * 修改设备隐患记录 + */ + Boolean updateByBo(EmsHazardRecordBo bo); + + /** + * 校验并批量删除设备隐患记录信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-ems/src/main/java/com/klp/ems/service/IEmsSafetyEnvDocService.java b/klp-ems/src/main/java/com/klp/ems/service/IEmsSafetyEnvDocService.java new file mode 100644 index 00000000..8dc4fff0 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/service/IEmsSafetyEnvDocService.java @@ -0,0 +1,49 @@ +package com.klp.ems.service; + +import com.klp.ems.domain.EmsSafetyEnvDoc; +import com.klp.ems.domain.vo.EmsSafetyEnvDocVo; +import com.klp.ems.domain.bo.EmsSafetyEnvDocBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 安全环保制度文档Service接口 + * + * @author Joshi + * @date 2025-10-13 + */ +public interface IEmsSafetyEnvDocService { + + /** + * 查询安全环保制度文档 + */ + EmsSafetyEnvDocVo queryById(Long docId); + + /** + * 查询安全环保制度文档列表 + */ + TableDataInfo queryPageList(EmsSafetyEnvDocBo bo, PageQuery pageQuery); + + /** + * 查询安全环保制度文档列表 + */ + List queryList(EmsSafetyEnvDocBo bo); + + /** + * 新增安全环保制度文档 + */ + Boolean insertByBo(EmsSafetyEnvDocBo bo); + + /** + * 修改安全环保制度文档 + */ + Boolean updateByBo(EmsSafetyEnvDocBo bo); + + /** + * 校验并批量删除安全环保制度文档信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-ems/src/main/java/com/klp/ems/service/impl/EmsHazardRecordServiceImpl.java b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsHazardRecordServiceImpl.java new file mode 100644 index 00000000..4f36ae88 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsHazardRecordServiceImpl.java @@ -0,0 +1,140 @@ +package com.klp.ems.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.ems.domain.bo.EmsHazardRecordBo; +import com.klp.ems.domain.vo.EmsHazardRecordVo; +import com.klp.ems.domain.EmsHazardRecord; +import com.klp.ems.mapper.EmsHazardRecordMapper; +import com.klp.ems.service.IEmsHazardRecordService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 设备隐患记录Service业务层处理 + * + * @author Joshi + * @date 2025-10-13 + */ +@RequiredArgsConstructor +@Service +public class EmsHazardRecordServiceImpl implements IEmsHazardRecordService { + + private final EmsHazardRecordMapper baseMapper; + + /** + * 查询设备隐患记录 + */ + @Override + public EmsHazardRecordVo queryById(Long hazardId){ + return baseMapper.selectVoById(hazardId); + } + + /** + * 查询设备隐患记录列表 + */ + @Override + public TableDataInfo queryPageList(EmsHazardRecordBo bo, PageQuery pageQuery) { + QueryWrapper qw = buildQueryWrapperPlus(bo); + Page result = baseMapper.selectVoPagePlus(pageQuery.build(), qw); + return TableDataInfo.build(result); + } + + /** + * 查询设备隐患记录列表 + */ + @Override + public List queryList(EmsHazardRecordBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(EmsHazardRecordBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getDeviceId() != null, EmsHazardRecord::getDeviceId, bo.getDeviceId()); + lqw.eq(StringUtils.isNotBlank(bo.getHazardType()), EmsHazardRecord::getHazardType, bo.getHazardType()); + lqw.eq(bo.getHazardLevel() != null, EmsHazardRecord::getHazardLevel, bo.getHazardLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getHazardDesc()), EmsHazardRecord::getHazardDesc, bo.getHazardDesc()); + lqw.eq(bo.getDiscoveryTime() != null, EmsHazardRecord::getDiscoveryTime, bo.getDiscoveryTime()); + lqw.eq(bo.getInputTime() != null, EmsHazardRecord::getInputTime, bo.getInputTime()); + lqw.eq(StringUtils.isNotBlank(bo.getInputUser()), EmsHazardRecord::getInputUser, bo.getInputUser()); + lqw.eq(bo.getStatus() != null, EmsHazardRecord::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getRectifyUser()), EmsHazardRecord::getRectifyUser, bo.getRectifyUser()); + lqw.eq(bo.getRectifyTime() != null, EmsHazardRecord::getRectifyTime, bo.getRectifyTime()); + lqw.eq(StringUtils.isNotBlank(bo.getRectifyDesc()), EmsHazardRecord::getRectifyDesc, bo.getRectifyDesc()); + return lqw; + } + + // 表别名 h 的联表分页查询条件 + private QueryWrapper buildQueryWrapperPlus(EmsHazardRecordBo bo) { + QueryWrapper qw = Wrappers.query(); + qw.eq(bo.getDeviceId() != null, "h.device_id", bo.getDeviceId()); + qw.eq(StringUtils.isNotBlank(bo.getHazardType()), "h.hazard_type", bo.getHazardType()); + qw.eq(bo.getHazardLevel() != null, "h.hazard_level", bo.getHazardLevel()); + qw.eq(StringUtils.isNotBlank(bo.getHazardDesc()), "h.hazard_desc", bo.getHazardDesc()); + qw.eq(bo.getDiscoveryTime() != null, "h.discovery_time", bo.getDiscoveryTime()); + qw.eq(bo.getInputTime() != null, "h.input_time", bo.getInputTime()); + qw.eq(StringUtils.isNotBlank(bo.getInputUser()), "h.input_user", bo.getInputUser()); + qw.eq(bo.getStatus() != null, "h.status", bo.getStatus()); + qw.eq(StringUtils.isNotBlank(bo.getRectifyUser()), "h.rectify_user", bo.getRectifyUser()); + qw.eq(bo.getRectifyTime() != null, "h.rectify_time", bo.getRectifyTime()); + qw.eq(StringUtils.isNotBlank(bo.getRectifyDesc()), "h.rectify_desc", bo.getRectifyDesc()); + //逻辑删除 + qw.eq("h.del_flag", 0); + // 这里不用写 join,SQL 在 xml 中定义 + return qw; + } + + /** + * 新增设备隐患记录 + */ + @Override + public Boolean insertByBo(EmsHazardRecordBo bo) { + EmsHazardRecord add = BeanUtil.toBean(bo, EmsHazardRecord.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setHazardId(add.getHazardId()); + } + return flag; + } + + /** + * 修改设备隐患记录 + */ + @Override + public Boolean updateByBo(EmsHazardRecordBo bo) { + EmsHazardRecord update = BeanUtil.toBean(bo, EmsHazardRecord.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(EmsHazardRecord entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除设备隐患记录 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-ems/src/main/java/com/klp/ems/service/impl/EmsSafetyEnvDocServiceImpl.java b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsSafetyEnvDocServiceImpl.java new file mode 100644 index 00000000..720667a1 --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsSafetyEnvDocServiceImpl.java @@ -0,0 +1,115 @@ +package com.klp.ems.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.ems.domain.bo.EmsSafetyEnvDocBo; +import com.klp.ems.domain.vo.EmsSafetyEnvDocVo; +import com.klp.ems.domain.EmsSafetyEnvDoc; +import com.klp.ems.mapper.EmsSafetyEnvDocMapper; +import com.klp.ems.service.IEmsSafetyEnvDocService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全环保制度文档Service业务层处理 + * + * @author Joshi + * @date 2025-10-13 + */ +@RequiredArgsConstructor +@Service +public class EmsSafetyEnvDocServiceImpl implements IEmsSafetyEnvDocService { + + private final EmsSafetyEnvDocMapper baseMapper; + + /** + * 查询安全环保制度文档 + */ + @Override + public EmsSafetyEnvDocVo queryById(Long docId){ + return baseMapper.selectVoById(docId); + } + + /** + * 查询安全环保制度文档列表 + */ + @Override + public TableDataInfo queryPageList(EmsSafetyEnvDocBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询安全环保制度文档列表 + */ + @Override + public List queryList(EmsSafetyEnvDocBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(EmsSafetyEnvDocBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getDocNo()), EmsSafetyEnvDoc::getDocNo, bo.getDocNo()); + lqw.like(StringUtils.isNotBlank(bo.getDocName()), EmsSafetyEnvDoc::getDocName, bo.getDocName()); + lqw.eq(bo.getDocCategory() != null, EmsSafetyEnvDoc::getDocCategory, bo.getDocCategory()); + lqw.eq(StringUtils.isNotBlank(bo.getDocType()), EmsSafetyEnvDoc::getDocType, bo.getDocType()); + lqw.eq(StringUtils.isNotBlank(bo.getAccessory()), EmsSafetyEnvDoc::getAccessory, bo.getAccessory()); + lqw.eq(bo.getPublishStatus() != null, EmsSafetyEnvDoc::getPublishStatus, bo.getPublishStatus()); + lqw.eq(bo.getPublishTime() != null, EmsSafetyEnvDoc::getPublishTime, bo.getPublishTime()); + return lqw; + } + + /** + * 新增安全环保制度文档 + */ + @Override + public Boolean insertByBo(EmsSafetyEnvDocBo bo) { + EmsSafetyEnvDoc add = BeanUtil.toBean(bo, EmsSafetyEnvDoc.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setDocId(add.getDocId()); + } + return flag; + } + + /** + * 修改安全环保制度文档 + */ + @Override + public Boolean updateByBo(EmsSafetyEnvDocBo bo) { + EmsSafetyEnvDoc update = BeanUtil.toBean(bo, EmsSafetyEnvDoc.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(EmsSafetyEnvDoc entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除安全环保制度文档 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-ems/src/main/resources/mapper/EmsHazardRecordMapper.xml b/klp-ems/src/main/resources/mapper/EmsHazardRecordMapper.xml new file mode 100644 index 00000000..e8948c80 --- /dev/null +++ b/klp-ems/src/main/resources/mapper/EmsHazardRecordMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-ems/src/main/resources/mapper/EmsSafetyEnvDocMapper.xml b/klp-ems/src/main/resources/mapper/EmsSafetyEnvDocMapper.xml new file mode 100644 index 00000000..f98e15fb --- /dev/null +++ b/klp-ems/src/main/resources/mapper/EmsSafetyEnvDocMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-ui/src/api/ems/hazardRecord.js b/klp-ui/src/api/ems/hazardRecord.js new file mode 100644 index 00000000..ad34ebb5 --- /dev/null +++ b/klp-ui/src/api/ems/hazardRecord.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询设备隐患记录列表 +export function listHazardRecord(query) { + return request({ + url: '/ems/hazardRecord/list', + method: 'get', + params: query + }) +} + +// 查询设备隐患记录详细 +export function getHazardRecord(hazardId) { + return request({ + url: '/ems/hazardRecord/' + hazardId, + method: 'get' + }) +} + +// 新增设备隐患记录 +export function addHazardRecord(data) { + return request({ + url: '/ems/hazardRecord', + method: 'post', + data: data + }) +} + +// 修改设备隐患记录 +export function updateHazardRecord(data) { + return request({ + url: '/ems/hazardRecord', + method: 'put', + data: data + }) +} + +// 删除设备隐患记录 +export function delHazardRecord(hazardId) { + return request({ + url: '/ems/hazardRecord/' + hazardId, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/ems/safetyEnvDoc.js b/klp-ui/src/api/ems/safetyEnvDoc.js new file mode 100644 index 00000000..2d70722c --- /dev/null +++ b/klp-ui/src/api/ems/safetyEnvDoc.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询安全环保制度文档列表 +export function listSafetyEnvDoc(query) { + return request({ + url: '/ems/safetyEnvDoc/list', + method: 'get', + params: query + }) +} + +// 查询安全环保制度文档详细 +export function getSafetyEnvDoc(docId) { + return request({ + url: '/ems/safetyEnvDoc/' + docId, + method: 'get' + }) +} + +// 新增安全环保制度文档 +export function addSafetyEnvDoc(data) { + return request({ + url: '/ems/safetyEnvDoc', + method: 'post', + data: data + }) +} + +// 修改安全环保制度文档 +export function updateSafetyEnvDoc(data) { + return request({ + url: '/ems/safetyEnvDoc', + method: 'put', + data: data + }) +} + +// 删除安全环保制度文档 +export function delSafetyEnvDoc(docId) { + return request({ + url: '/ems/safetyEnvDoc/' + docId, + method: 'delete' + }) +} diff --git a/klp-ui/src/views/ems/hazardRecord/index.vue b/klp-ui/src/views/ems/hazardRecord/index.vue new file mode 100644 index 00000000..d523c788 --- /dev/null +++ b/klp-ui/src/views/ems/hazardRecord/index.vue @@ -0,0 +1,564 @@ + + + diff --git a/klp-ui/src/views/ems/safetyEnvDoc/index.vue b/klp-ui/src/views/ems/safetyEnvDoc/index.vue new file mode 100644 index 00000000..bba5bdf8 --- /dev/null +++ b/klp-ui/src/views/ems/safetyEnvDoc/index.vue @@ -0,0 +1,390 @@ + + +