设备监控

monitor
sunjianxi 1 year ago
parent e58c456ee0
commit c06c681318
  1. 15
      src/main/java/org/springblade/modules/monitor/controller/BusinessMonitorController.java
  2. 128
      src/main/java/org/springblade/modules/monitor/entity/DataWarn.java
  3. 18
      src/main/java/org/springblade/modules/monitor/mapper/DataWarnMapper.java
  4. 25
      src/main/java/org/springblade/modules/monitor/mapper/DataWarnMapper.xml
  5. 11
      src/main/java/org/springblade/modules/monitor/mapper/MonitorMapper.java
  6. 71
      src/main/java/org/springblade/modules/monitor/mapper/MonitorMapper.xml
  7. 7
      src/main/java/org/springblade/modules/monitor/service/IBusinessMonitorService.java
  8. 19
      src/main/java/org/springblade/modules/monitor/service/IDataWarnService.java
  9. 16
      src/main/java/org/springblade/modules/monitor/service/impl/BusinessMonitorServiceImpl.java
  10. 60
      src/main/java/org/springblade/modules/monitor/service/impl/ConfigMonitorServiceImpl.java
  11. 23
      src/main/java/org/springblade/modules/monitor/service/impl/DataWarnServiceImpl.java
  12. 2
      src/main/java/org/springblade/modules/monitor/task/MonitorTaskJob.java

@ -55,16 +55,15 @@ public class BusinessMonitorController {
* 查询设备列表
*
* @param classCode
* @param warnStatus
* @param equipCode
* @return
*/
@GetMapping("/getEquipList")
public R getEquipList(Integer currentPage, Integer pageSize,
@RequestParam("classCode") String classCode,
String warnStatus,
String equipCode) {
return R.data(businessMonitorService.getEquipList(currentPage, pageSize, classCode, warnStatus, equipCode));
String equipCode,
String equipName) {
return R.data(businessMonitorService.getEquipList(currentPage, pageSize, classCode, equipCode, equipName));
}
/**
@ -74,8 +73,8 @@ public class BusinessMonitorController {
* @return
*/
@GetMapping("/getWarnMsg")
public R getWarnMsg(@RequestParam("equipCode") String equipCode) {
return R.data(businessMonitorService.getWarnMsg(equipCode));
public R getWarnMsg(@RequestParam("equipCode") String equipCode,@RequestParam("equipName") String equipName) {
return R.data(businessMonitorService.getWarnMsg(equipCode,equipName));
}
/**
@ -85,7 +84,7 @@ public class BusinessMonitorController {
* @return
*/
@GetMapping("/getWarnHisList")
public R getWarnHisList(Integer currentPage, Integer pageSize, @RequestParam("equipCode") String equipCode) {
return R.data(businessMonitorService.getWarnHisList(currentPage, pageSize, equipCode));
public R getWarnHisList(Integer currentPage, Integer pageSize, @RequestParam("equipCode") String equipCode,@RequestParam("equipName") String equipName) {
return R.data(businessMonitorService.getWarnHisList(currentPage, pageSize, equipCode,equipName));
}
}

@ -0,0 +1,128 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package org.springblade.modules.monitor.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 设备报警记录表实体类
*
* @author BladeX
* @since 2022-01-13
*/
@Data
@TableName("t_data_warn")
@ApiModel(value = "DataWarn对象", description = "设备报警记录表")
public class DataWarn implements Serializable {
private static final long serialVersionUID = 1L;
public DataWarn() {
}
private Long id;
/**
* 设备code
*/
@ApiModelProperty(value = "设备code")
private String equipCode;
/**
* 设备名称
*/
@ApiModelProperty(value = "设备名称")
private String equipName;
/**
* 设备种类
*/
@ApiModelProperty(value = "设备种类")
private String classCode;
/**
* 位置
*/
@ApiModelProperty(value = "位置")
private String location;
/**
* 设备名称
*/
@ApiModelProperty(value = "区域")
private String area;
/**
* 报警类型报警类型0无报警1:事件报警2设备报警
*/
@ApiModelProperty(value = "报警类型,报警类型,0:无报警,1:事件报警,2:设备报警")
private Integer warnType;
/**
* 报警标识系统中自定义的值
*/
@ApiModelProperty(value = "报警标识(系统中自定义的值)")
private Integer warnCode;
/**
* 报警值设备实际的报警值
*/
@ApiModelProperty(value = "报警值(设备实际的报警值)")
private String warnValue;
/**
* 报警内容
*/
@ApiModelProperty(value = "报警内容")
private String warnContent;
/**
* 报警时间
*/
@ApiModelProperty(value = "报警时间")
private Date warnDate;
/**
* 恢复类型, 0自动, 1手动
*/
@ApiModelProperty(value = "恢复类型, 0自动, 1手动")
private Integer recoveryType;
/**
* 恢复人
*/
@ApiModelProperty(value = "恢复人")
private String recoveryPerson;
/**
* 恢复时间
*/
@ApiModelProperty(value = "恢复时间")
private Date recoveryDate;
/**
* 状态1报警 2恢复
*/
@ApiModelProperty(value = "状态")
private Integer status;
/**
* 确认状态0:未确认, 1:已确认
*/
@ApiModelProperty(value = "确认状态")
private Integer confirmStatus;
/**
* 通知人
*/
@JsonIgnore
@ApiModelProperty(value = "通知人")
private Long notifier;
}

@ -0,0 +1,18 @@
package org.springblade.modules.monitor.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.modules.monitor.entity.DataWarn;
import java.util.List;
/**
* 设备报警记录表 Mapper 接口
*
* @author
* @since 2022-01-07
*/
public interface DataWarnMapper extends BaseMapper<DataWarn> {
}

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.modules.monitor.mapper.DataWarnMapper">
<!-- 通用查询映射结果 -->
<resultMap id="dataWarnResultMap" type="org.springblade.modules.monitor.entity.DataWarn">
<id column="id" property="id"/>
<result column="equip_code" property="equipCode"/>
<result column="equip_name" property="equipName"/>
<result column="class_code" property="classCode"/>
<result column="location" property="location"/>
<result column="area" property="area"/>
<result column="warn_type" property="warnType"/>
<result column="warn_code" property="warnCode"/>
<result column="warn_value" property="warnValue"/>
<result column="warn_content" property="warnContent"/>
<result column="warn_date" property="warnDate"/>
<result column="recovery_date" property="recoveryDate"/>
<result column="status" property="status"/>
<result column="notifier" property="notifier"/>
<result column="confirm_status" property="confirmStatus"/>
</resultMap>
</mapper>

@ -27,13 +27,12 @@ public interface MonitorMapper {
* 查询设备列表
*
* @param classCode
* @param warnStatus
* @param equipCode
* @return
*/
List<Map<String, String>> getEquipList(@Param("offset") int offset, @Param("size") int size, @Param("classCode") String classCode, @Param("warnStatus") String warnStatus, @Param("equipCode") String equipCode);
List<Map<String, String>> getEquipList(@Param("offset") int offset, @Param("size") int size, @Param("classCode") String classCode,@Param("equipCode") String equipCode, @Param("equipName") String equipName);
int getEquipListTotal(@Param("classCode") String classCode, @Param("warnStatus") String warnStatus, @Param("equipCode") String equipCode);
int getEquipListTotal(@Param("classCode") String classCode, @Param("equipCode") String equipCode);
/**
* 查询设备当前报警信息
@ -41,7 +40,7 @@ public interface MonitorMapper {
* @param equipCode
* @return
*/
List<Map<String, String>> getWarnMsg(@Param("equipCode") String equipCode);
List<Map<String, String>> getWarnMsg(@Param("equipCode") String equipCode,@Param("equipName") String equipName);
/**
* 查询设备报警记录
@ -49,7 +48,7 @@ public interface MonitorMapper {
* @param equipCode
* @return
*/
List<Map<String, String>> getWarnHisList(@Param("offset") int offset, @Param("size") int size, @Param("equipCode") String equipCode);
List<Map<String, String>> getWarnHisList(@Param("offset") int offset, @Param("size") int size, @Param("equipCode") String equipCode,@Param("equipName") String equipName);
int getWarnHisListTotal(@Param("equipCode") String equipCode);
int getWarnHisListTotal(@Param("equipCode") String equipCode,@Param("equipName") String equipName);
}

@ -16,46 +16,30 @@
</select>
<select id = "getEquipList" resultType = "map">
SELECT IF(e.status = '90000', '正常', warn.warn_name) AS equipStatus,
e.class_code AS classCode,
e.code AS equipCode,
e.name AS equipName,
e.location AS equipLocation,
warn.context AS warnContent,
DATE_FORMAT(e.update_time, '%Y-%m-%d %H:%i:%s') AS warnDate
FROM t_equip e
LEFT JOIN t_config_warn warn ON e.class_code = warn.class_code AND e.status = warn.warn_code
WHERE e.is_deleted = 0
SELECT class_code AS classCode,
equip_code AS equipCode,
equip_name AS equipName,
warn_content AS warnContent,
DATE_FORMAT(warn_date, '%Y-%m-%d %H:%i:%s') AS warnDate
FROM t_data_warn
WHERE warn_type = '3'
<if test = "classCode != null and classCode != '' ">
and e.class_code = #{classCode}
</if>
<if test = "warnStatus != '' and warnStatus == 0 ">
and e.status = '90000'
</if>
<if test = "warnStatus != '' and warnStatus == 1 ">
and e.status != '90000'
and class_code = #{classCode}
</if>
<if test = "equipCode != null and equipCode != ''">
and e.code like CONCAT('%', #{equipCode}, '%')
and equip_code like CONCAT('%', #{equipCode}, '%')
</if>
limit #{offset}, #{size}
</select>
<select id = "getEquipListTotal" resultType = "int">
SELECT count(e.id) as count
FROM t_equip e
LEFT JOIN t_config_warn warn ON e.class_code = warn.class_code AND e.status = warn.warn_code
WHERE e.is_deleted = 0
SELECT count(id) as count
FROM t_data_warn
WHERE warn_type = '3'
<if test = "classCode != null and classCode != '' ">
and e.class_code = #{classCode}
</if>
<if test = "warnStatus != '' and warnStatus == 0 ">
and e.status = '90000'
</if>
<if test = "warnStatus != '' and warnStatus == 1 ">
and e.status != '90000'
and class_code = #{classCode}
</if>
<if test = "equipCode != null and equipCode != ''">
and e.code like CONCAT('%', #{equipCode}, '%')
and equip_code like CONCAT('%', #{equipCode}, '%')
</if>
</select>
@ -68,8 +52,13 @@
warn_content as warnContent,
DATE_FORMAT(warn_date, '%Y-%m-%d %H:%i:%s') AS warnDate
from t_data_warn
where equip_code = #{equipCode}
and status = 1
where status = 1
<if test = "equipName != null and equipName != ''">
and equip_name = #{equipName}
</if>
<if test = "equipCode != null and equipCode != ''">
and equip_code = #{equipCode}
</if>
order by warn_date desc limit 1
</select>
@ -86,8 +75,13 @@
DATE_FORMAT(recovery_date, '%Y-%m-%d %H:%i:%s') AS recoveryDate,
status as status
from t_data_warn
where equip_code = #{equipCode}
and status = 1
where status = 1
<if test = "equipName != null and equipName != ''">
and equip_name = #{equipName}
</if>
<if test = "equipCode != null and equipCode != ''">
and equip_code = #{equipCode}
</if>
order by warn_date desc
limit #{offset}, #{size}
</select>
@ -95,7 +89,12 @@
<select id = "getWarnHisListTotal" resultType = "int">
select count(equip_code) as count
from t_data_warn
where equip_code = #{equipCode}
and status = 1
where status = 1
<if test = "equipName != null and equipName != ''">
and equip_name = #{equipName}
</if>
<if test = "equipCode != null and equipCode != ''">
and equip_code = #{equipCode}
</if>
</select>
</mapper>

@ -27,11 +27,10 @@ public interface IBusinessMonitorService {
* @param currentPage
* @param pageSize
* @param classCode
* @param warnStatus
* @param equipCode
* @return
*/
IPage getEquipList(Integer currentPage, Integer pageSize, String classCode, String warnStatus, String equipCode);
IPage getEquipList(Integer currentPage, Integer pageSize, String classCode, String equipCode,String equipName);
/**
* 查询设备当前报警信息
@ -39,7 +38,7 @@ public interface IBusinessMonitorService {
* @param equipCode
* @return
*/
List<Map<String, String>> getWarnMsg(String equipCode);
List<Map<String, String>> getWarnMsg(String equipCode,String equipName);
/**
* 查询设备报警记录
@ -49,5 +48,5 @@ public interface IBusinessMonitorService {
* @param equipCode
* @return
*/
IPage getWarnHisList(Integer currentPage, Integer pageSize, String equipCode);
IPage getWarnHisList(Integer currentPage, Integer pageSize, String equipCode,String equipName);
}

@ -0,0 +1,19 @@
package org.springblade.modules.monitor.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.modules.monitor.entity.DataWarn;
import java.util.List;
/**
* 设备报警记录表 服务类
*
* @author
* @since 2022-01-07
*/
public interface IDataWarnService extends IService<DataWarn> {
}

@ -27,7 +27,7 @@ public class BusinessMonitorServiceImpl implements IBusinessMonitorService {
}
@Override
public IPage getEquipList(Integer currentPage, Integer pageSize, String classCode, String warnStatus, String equipCode) {
public IPage getEquipList(Integer currentPage, Integer pageSize, String classCode, String equipCode, String equipName) {
// 初始化分页参数
if (currentPage == null || currentPage == 0) {
currentPage = 1;
@ -37,20 +37,20 @@ public class BusinessMonitorServiceImpl implements IBusinessMonitorService {
}
IPage page = new Page();
page.setRecords(monitorMapper.getEquipList((currentPage -1) * pageSize, pageSize, classCode, warnStatus, equipCode));
page.setTotal(monitorMapper.getEquipListTotal(classCode, warnStatus, equipCode));
page.setRecords(monitorMapper.getEquipList((currentPage -1) * pageSize, pageSize, classCode, equipCode,equipName));
page.setTotal(monitorMapper.getEquipListTotal(classCode, equipCode));
page.setCurrent(currentPage);
page.setSize(pageSize);
return page;
}
@Override
public List<Map<String, String>> getWarnMsg(String equipCode) {
return monitorMapper.getWarnMsg(equipCode);
public List<Map<String, String>> getWarnMsg(String equipCode,String equipName) {
return monitorMapper.getWarnMsg(equipCode,equipName);
}
@Override
public IPage getWarnHisList(Integer currentPage, Integer pageSize, String equipCode) {
public IPage getWarnHisList(Integer currentPage, Integer pageSize, String equipCode,String equipName) {
// 初始化分页参数
if (currentPage == null || currentPage == 0) {
currentPage = 1;
@ -60,8 +60,8 @@ public class BusinessMonitorServiceImpl implements IBusinessMonitorService {
}
IPage page = new Page();
page.setRecords(monitorMapper.getWarnHisList((currentPage -1) * pageSize, pageSize, equipCode));
page.setTotal(monitorMapper.getWarnHisListTotal(equipCode));
page.setRecords(monitorMapper.getWarnHisList((currentPage -1) * pageSize, pageSize, equipCode,equipName));
page.setTotal(monitorMapper.getWarnHisListTotal(equipCode,equipName));
page.setCurrent(currentPage);
page.setSize(pageSize);
return page;

@ -30,6 +30,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.constant.MonitorConstant;
import org.springblade.common.utils.HttpUtil;
import org.springblade.common.utils.IpUtil;
@ -37,7 +38,9 @@ import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.tool.node.ForestNodeMerger;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.modules.monitor.entity.ConfigMonitor;
import org.springblade.modules.monitor.entity.DataWarn;
import org.springblade.modules.monitor.mapper.ConfigMonitorMapper;
import org.springblade.modules.monitor.mapper.DataWarnMapper;
import org.springblade.modules.monitor.service.IConfigMonitorService;
import org.springblade.modules.monitor.vo.ConfigMonitorVO;
import org.springblade.modules.system.entity.Dict;
@ -67,6 +70,8 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
private final IDictService dictService;
private final DataWarnMapper dataWarnMapper;
@Override
public void updateMonitorInfo() {
try {
@ -183,6 +188,18 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
configMonitor.setUpdateTime(nowDate);
baseMapper.updateById(configMonitor);
parentId = id;
List<DataWarn> warnList = dataWarnMapper.selectList(Wrappers.<DataWarn>lambdaQuery().eq(DataWarn::getEquipName,configMonitor.getName()).like(DataWarn::getWarnDate,DateFormatUtils.format(nowDate,"yyyy-MM-dd")));
if(CollectionUtils.isEmpty(warnList)){
DataWarn dataWarn = new DataWarn();
dataWarn.setEquipCode(configMonitor.getEquipCode());
dataWarn.setEquipName(configMonitor.getName());
dataWarn.setClassCode(configMonitor.getClassCode());
dataWarn.setWarnDate(nowDate);
dataWarn.setWarnContent("服务异常");
dataWarn.setStatus(1);
dataWarn.setWarnType(3);
dataWarnMapper.insert(dataWarn);
}
continue;
}
//mqtt服务排查
@ -196,6 +213,18 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
configMonitor.setStatus(MonitorConstant.STATUS_2);
configMonitor.setUpdateTime(nowDate);
baseMapper.updateById(configMonitor);
List<DataWarn> warnList = dataWarnMapper.selectList(Wrappers.<DataWarn>lambdaQuery().eq(DataWarn::getEquipName,configMonitor.getName()).like(DataWarn::getWarnDate,DateFormatUtils.format(nowDate,"yyyy-MM-dd")));
if(CollectionUtils.isEmpty(warnList)){
DataWarn dataWarn = new DataWarn();
dataWarn.setEquipCode(configMonitor.getEquipCode());
dataWarn.setEquipName(configMonitor.getName());
dataWarn.setClassCode(configMonitor.getClassCode());
dataWarn.setWarnDate(nowDate);
dataWarn.setWarnContent("MQTT服务异常");
dataWarn.setStatus(1);
dataWarn.setWarnType(3);
dataWarnMapper.insert(dataWarn);
}
continue;
}
}
@ -210,6 +239,18 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
}
configMonitor.setUpdateTime(nowDate);
baseMapper.updateById(configMonitor);
List<DataWarn> warnList = dataWarnMapper.selectList(Wrappers.<DataWarn>lambdaQuery().eq(DataWarn::getEquipName,configMonitor.getName()).like(DataWarn::getWarnDate,DateFormatUtils.format(nowDate,"yyyy-MM-dd")));
if(CollectionUtils.isEmpty(warnList)){
DataWarn dataWarn = new DataWarn();
dataWarn.setEquipCode(configMonitor.getEquipCode());
dataWarn.setEquipName(configMonitor.getName());
dataWarn.setClassCode(configMonitor.getClassCode());
dataWarn.setWarnDate(nowDate);
dataWarn.setWarnContent(isNormal?"网关异常":"网关通信异常");
dataWarn.setStatus(1);
dataWarn.setWarnType(3);
dataWarnMapper.insert(dataWarn);
}
}
} else {
//如果是静默,根据parentId将所有子节点状态改为静默
@ -232,6 +273,20 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
for (ConfigMonitor configMonitor : breakList) {
configMonitor.setStatus(MonitorConstant.STATUS_2);
baseMapper.updateById(configMonitor);
//查询今天是否有报警
List<DataWarn> warnList = dataWarnMapper.selectList(Wrappers.<DataWarn>lambdaQuery().eq(DataWarn::getEquipCode,configMonitor.getEquipCode()).like(DataWarn::getWarnDate,DateFormatUtils.format(nowDate,"yyyy-MM-dd")));
if(CollectionUtils.isEmpty(warnList)){
DataWarn dataWarn = new DataWarn();
dataWarn.setEquipCode(configMonitor.getEquipCode());
dataWarn.setEquipName(configMonitor.getName());
dataWarn.setClassCode(configMonitor.getClassCode());
dataWarn.setWarnDate(nowDate);
dataWarn.setWarnContent("设备异常");
dataWarn.setStatus(1);
dataWarn.setWarnType(3);
dataWarnMapper.insert(dataWarn);
}
}
//将父级id设备状态更新为正常
LambdaQueryWrapper<ConfigMonitor> wrapper = new LambdaQueryWrapper<>();
@ -242,8 +297,6 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
baseMapper.updateById(configMonitor);
}
}
}
@Override
@ -311,7 +364,7 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
JSONObject monitorJson = new JSONObject();
monitorJson.put("parent", parent);
monitorJson.put("id", monitor.getId());
monitorJson.put("name", monitor.getMonitorType());
monitorJson.put("name", monitor.getName());
monitorJson.put("type", monitor.getType());
monitorJson.put("class_code", monitor.getClassCode());
monitorJson.put("status", monitor.getStatus());
@ -389,4 +442,5 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
}
}

@ -0,0 +1,23 @@
package org.springblade.modules.monitor.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springblade.modules.monitor.entity.DataWarn;
import org.springblade.modules.monitor.mapper.DataWarnMapper;
import org.springblade.modules.monitor.service.IDataWarnService;
import org.springframework.stereotype.Service;
/**
* 设备报警记录表 服务实现类
*
* @author
* @since 2022-01-07
*/
@Service
@AllArgsConstructor
public class DataWarnServiceImpl extends ServiceImpl<DataWarnMapper, DataWarn> implements IDataWarnService {
}

@ -19,7 +19,7 @@ public class MonitorTaskJob {
//更新设备监控状态
@Scheduled(cron ="0 0/5 * * * ? ")
@Scheduled(cron ="0 0/30 * * * ? ")
public void monitoringEquip(){
configMonitorService.monitoringEquip();
}

Loading…
Cancel
Save