feat(mq): 增加阈值和DCS报警事件处理功能
- 新增ThresholdAlarmEvent和DcsAlarmEvent事件类 - 实现ThresholdAlarmEventConsumer,处理阈值报警事件,生成报警记录 - 实现DcsAlarmEventConsumer,处理DCS报警事件,生成报警记录 - 自动分配区域负责人并记录处置日志 - 发送报警自动推送消息给负责人 - 阈值报警增加负责人待办任务通知 - AlarmMessageService消息模板改为静态常量,移除配置注入 - SensorDeviceGateway新增根据传感器编码查询接口实现 - 配置文件中新增RocketMQ消费组和绑定设置 - 修改启动类主类配置为com.zcloud.Applicationmain
parent
d554dcea9c
commit
7d40840231
|
|
@ -0,0 +1,27 @@
|
|||
package com.zcloud.persistence.dataobject;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.jjb.saas.framework.repository.basedo.BaseDO;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* DepartmentDO - 部门数据对象
|
||||
* @Author wangyan
|
||||
* @Date 2026-04-03 00:00:00
|
||||
*/
|
||||
@Data
|
||||
@TableName("department")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class DepartmentDO extends BaseDO {
|
||||
|
||||
@ApiModelProperty(value = "业务主键ID")
|
||||
private String departmentId;
|
||||
|
||||
@ApiModelProperty(value = "部门名称")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "所属企业ID")
|
||||
private Long corpinfoId;
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package com.zcloud.persistence.dataobject;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.jjb.saas.framework.repository.basedo.BaseDO;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* UserDO - 用户数据对象
|
||||
* @Author wangyan
|
||||
* @Date 2026-04-03 00:00:00
|
||||
*/
|
||||
@Data
|
||||
@TableName("user")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class UserDO extends BaseDO {
|
||||
|
||||
@ApiModelProperty(value = "业务主键ID")
|
||||
private String userId;
|
||||
|
||||
@ApiModelProperty(value = "登录账号")
|
||||
private String username;
|
||||
|
||||
@ApiModelProperty(value = "姓名")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "企业ID")
|
||||
private Long corpinfoId;
|
||||
|
||||
@ApiModelProperty(value = "部门ID")
|
||||
private Long departmentId;
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package com.zcloud.persistence.repository;
|
||||
|
||||
import com.jjb.saas.framework.repository.repo.BaseRepository;
|
||||
import com.zcloud.persistence.dataobject.DepartmentDO;
|
||||
|
||||
/**
|
||||
* DepartmentRepository - 部门仓储接口
|
||||
* @Author wangyan
|
||||
* @Date 2026-04-03 00:00:00
|
||||
*/
|
||||
public interface DepartmentRepository extends BaseRepository<DepartmentDO> {}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package com.zcloud.persistence.repository;
|
||||
|
||||
import com.jjb.saas.framework.repository.repo.BaseRepository;
|
||||
import com.zcloud.persistence.dataobject.UserDO;
|
||||
|
||||
/**
|
||||
* UserRepository - 用户仓储接口
|
||||
* @Author wangyan
|
||||
* @Date 2026-04-03 00:00:00
|
||||
*/
|
||||
public interface UserRepository extends BaseRepository<UserDO> {}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package com.zcloud.persistence.repository.impl;
|
||||
|
||||
import com.alibaba.cola.dto.PageResponse;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.jjb.saas.framework.repository.common.PageHelper;
|
||||
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
|
||||
import com.zcloud.persistence.dataobject.AlarmRecordDO;
|
||||
import com.zcloud.persistence.mapper.AlarmRecordMapper;
|
||||
import com.zcloud.persistence.repository.AlarmRecordRepository;
|
||||
import com.zcloud.utils.Query;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* AlarmRecordRepositoryImpl - 报警记录仓储实现类
|
||||
* @Author wangyan
|
||||
* @Date 2026-04-03 00:00:00
|
||||
*/
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class AlarmRecordRepositoryImpl extends BaseRepositoryImpl<AlarmRecordMapper, AlarmRecordDO> implements AlarmRecordRepository {
|
||||
|
||||
private final AlarmRecordMapper alarmRecordMapper;
|
||||
|
||||
@Override
|
||||
public PageResponse<AlarmRecordDO> listPage(Map<String, Object> params) {
|
||||
IPage<AlarmRecordDO> page = new Query<AlarmRecordDO>().getPage(params);
|
||||
IPage<AlarmRecordDO> result = alarmRecordMapper.listPage(page, params);
|
||||
return PageHelper.pageToResponse(result, result.getRecords());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResponse<AlarmRecordDO> disposeListPage(Map<String, Object> params) {
|
||||
IPage<AlarmRecordDO> page = new Query<AlarmRecordDO>().getPage(params);
|
||||
IPage<AlarmRecordDO> result = alarmRecordMapper.disposeListPage(page, params);
|
||||
return PageHelper.pageToResponse(result, result.getRecords());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResponse<AlarmRecordDO> appListPage(Map<String, Object> params) {
|
||||
IPage<AlarmRecordDO> page = new Query<AlarmRecordDO>().getPage(params);
|
||||
IPage<AlarmRecordDO> result = alarmRecordMapper.appListPage(page, params);
|
||||
return PageHelper.pageToResponse(result, result.getRecords());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResponse<AlarmRecordDO> appDisposeListPage(Map<String, Object> params) {
|
||||
IPage<AlarmRecordDO> page = new Query<AlarmRecordDO>().getPage(params);
|
||||
IPage<AlarmRecordDO> result = alarmRecordMapper.appDisposeListPage(page, params);
|
||||
return PageHelper.pageToResponse(result, result.getRecords());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package com.zcloud.persistence.repository.impl;
|
||||
|
||||
import com.alibaba.cola.dto.PageResponse;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.jjb.saas.framework.repository.common.PageHelper;
|
||||
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
|
||||
import com.zcloud.persistence.dataobject.DeviceRegionDO;
|
||||
import com.zcloud.persistence.mapper.DeviceRegionMapper;
|
||||
import com.zcloud.persistence.repository.DeviceRegionRepository;
|
||||
import com.zcloud.utils.Query;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* DeviceRegionRepositoryImpl - 设备区域仓储实现类
|
||||
* @Author wangyan
|
||||
* @Date 2026-04-03 00:00:00
|
||||
*/
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class DeviceRegionRepositoryImpl extends BaseRepositoryImpl<DeviceRegionMapper, DeviceRegionDO> implements DeviceRegionRepository {
|
||||
|
||||
private final DeviceRegionMapper deviceRegionMapper;
|
||||
|
||||
@Override
|
||||
public PageResponse<DeviceRegionDO> listPage(Map<String, Object> params) {
|
||||
IPage<DeviceRegionDO> page = new Query<DeviceRegionDO>().getPage(params);
|
||||
IPage<DeviceRegionDO> result = deviceRegionMapper.listPage(page, params);
|
||||
return PageHelper.pageToResponse(result, result.getRecords());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,167 @@
|
|||
<?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="com.zcloud.persistence.mapper.AlarmRecordMapper">
|
||||
|
||||
<sql id="alarmRecordBaseColumns">
|
||||
ar.*,
|
||||
sd.sensor_name AS sensorName,
|
||||
u.name AS disposeUserName
|
||||
</sql>
|
||||
|
||||
<sql id="alarmRecordBaseJoins">
|
||||
FROM iot_alarm_record ar
|
||||
LEFT JOIN iot_alarm_sensor_device sd ON ar.sensor_id = sd.id AND sd.delete_enum = 'FALSE'
|
||||
LEFT JOIN user u ON ar.dispose_user_id = u.id
|
||||
</sql>
|
||||
|
||||
<select id="listPage" resultType="com.zcloud.persistence.dataobject.AlarmRecordDO">
|
||||
SELECT
|
||||
<include refid="alarmRecordBaseColumns"/>
|
||||
<include refid="alarmRecordBaseJoins"/>
|
||||
<where>
|
||||
ar.delete_enum = 'FALSE'
|
||||
<if test="params.tenantId != null">
|
||||
AND ar.tenant_id = #{params.tenantId}
|
||||
</if>
|
||||
<if test="params.orgId != null">
|
||||
AND ar.org_id = #{params.orgId}
|
||||
</if>
|
||||
<if test="params.alarmNo != null and params.alarmNo != ''">
|
||||
AND ar.alarm_no LIKE CONCAT('%', #{params.alarmNo}, '%')
|
||||
</if>
|
||||
<if test="params.alarmSource != null and params.alarmSource != ''">
|
||||
AND ar.alarm_source = #{params.alarmSource}
|
||||
</if>
|
||||
<if test="params.sensorCode != null and params.sensorCode != ''">
|
||||
AND ar.sensor_code LIKE CONCAT('%', #{params.sensorCode}, '%')
|
||||
</if>
|
||||
<if test="params.status != null">
|
||||
AND ar.status = #{params.status}
|
||||
</if>
|
||||
<if test="params.alarmTimeStart != null and params.alarmTimeStart != ''">
|
||||
AND ar.alarm_time <![CDATA[>=]]> #{params.alarmTimeStart}
|
||||
</if>
|
||||
<if test="params.alarmTimeEnd != null and params.alarmTimeEnd != ''">
|
||||
AND ar.alarm_time <![CDATA[<=]]> #{params.alarmTimeEnd}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY ar.alarm_time DESC
|
||||
</select>
|
||||
|
||||
<select id="disposeListPage" resultType="com.zcloud.persistence.dataobject.AlarmRecordDO">
|
||||
SELECT
|
||||
<include refid="alarmRecordBaseColumns"/>
|
||||
<include refid="alarmRecordBaseJoins"/>
|
||||
<where>
|
||||
ar.delete_enum = 'FALSE'
|
||||
AND ar.status IN (10, 20)
|
||||
AND ar.active_flag = 1
|
||||
<if test="params.tenantId != null">
|
||||
AND ar.tenant_id = #{params.tenantId}
|
||||
</if>
|
||||
<if test="params.orgId != null">
|
||||
AND ar.org_id = #{params.orgId}
|
||||
</if>
|
||||
<if test="params.alarmNo != null and params.alarmNo != ''">
|
||||
AND ar.alarm_no LIKE CONCAT('%', #{params.alarmNo}, '%')
|
||||
</if>
|
||||
<if test="params.alarmSource != null and params.alarmSource != ''">
|
||||
AND ar.alarm_source = #{params.alarmSource}
|
||||
</if>
|
||||
<if test="params.sensorCode != null and params.sensorCode != ''">
|
||||
AND ar.sensor_code LIKE CONCAT('%', #{params.sensorCode}, '%')
|
||||
</if>
|
||||
<if test="params.fireRegionId != null">
|
||||
AND ar.fire_region_id = #{params.fireRegionId}
|
||||
</if>
|
||||
<if test="params.departmentId != null">
|
||||
AND ar.department_id = #{params.departmentId}
|
||||
</if>
|
||||
<if test="params.disposeUserId != null">
|
||||
AND ar.dispose_user_id = #{params.disposeUserId}
|
||||
</if>
|
||||
<if test="params.alarmLevel != null and params.alarmLevel != ''">
|
||||
AND ar.alarm_level = #{params.alarmLevel}
|
||||
</if>
|
||||
<if test="params.alarmType != null and params.alarmType != ''">
|
||||
AND ar.alarm_type = #{params.alarmType}
|
||||
</if>
|
||||
<if test="params.alarmTimeStart != null and params.alarmTimeStart != ''">
|
||||
AND ar.alarm_time <![CDATA[>=]]> #{params.alarmTimeStart}
|
||||
</if>
|
||||
<if test="params.alarmTimeEnd != null and params.alarmTimeEnd != ''">
|
||||
AND ar.alarm_time <![CDATA[<=]]> #{params.alarmTimeEnd}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY ar.alarm_time DESC
|
||||
</select>
|
||||
|
||||
<select id="appListPage" resultType="com.zcloud.persistence.dataobject.AlarmRecordDO">
|
||||
SELECT
|
||||
<include refid="alarmRecordBaseColumns"/>
|
||||
<include refid="alarmRecordBaseJoins"/>
|
||||
<where>
|
||||
ar.delete_enum = 'FALSE'
|
||||
<if test="params.currentUserId != null">
|
||||
AND ar.dispose_user_id = #{params.currentUserId}
|
||||
</if>
|
||||
<if test="params.status != null">
|
||||
AND ar.status = #{params.status}
|
||||
</if>
|
||||
<if test="params.alarmTimeStart != null and params.alarmTimeStart != ''">
|
||||
AND ar.alarm_time <![CDATA[>=]]> #{params.alarmTimeStart}
|
||||
</if>
|
||||
<if test="params.alarmTimeEnd != null and params.alarmTimeEnd != ''">
|
||||
AND ar.alarm_time <![CDATA[<=]]> #{params.alarmTimeEnd}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY ar.alarm_time DESC
|
||||
</select>
|
||||
|
||||
<select id="appDisposeListPage" resultType="com.zcloud.persistence.dataobject.AlarmRecordDO">
|
||||
SELECT
|
||||
<include refid="alarmRecordBaseColumns"/>
|
||||
<include refid="alarmRecordBaseJoins"/>
|
||||
<where>
|
||||
ar.delete_enum = 'FALSE'
|
||||
AND ar.status = 20
|
||||
AND ar.active_flag = 1
|
||||
<if test="params.tenantId != null">
|
||||
AND ar.tenant_id = #{params.tenantId}
|
||||
</if>
|
||||
<if test="params.orgId != null">
|
||||
AND ar.org_id = #{params.orgId}
|
||||
</if>
|
||||
<if test="params.alarmNo != null and params.alarmNo != ''">
|
||||
AND ar.alarm_no LIKE CONCAT('%', #{params.alarmNo}, '%')
|
||||
</if>
|
||||
<if test="params.alarmSource != null and params.alarmSource != ''">
|
||||
AND ar.alarm_source = #{params.alarmSource}
|
||||
</if>
|
||||
<if test="params.sensorCode != null and params.sensorCode != ''">
|
||||
AND ar.sensor_code LIKE CONCAT('%', #{params.sensorCode}, '%')
|
||||
</if>
|
||||
<if test="params.fireRegionId != null">
|
||||
AND ar.fire_region_id = #{params.fireRegionId}
|
||||
</if>
|
||||
<if test="params.alarmLevel != null and params.alarmLevel != ''">
|
||||
AND ar.alarm_level = #{params.alarmLevel}
|
||||
</if>
|
||||
<if test="params.alarmType != null and params.alarmType != ''">
|
||||
AND ar.alarm_type = #{params.alarmType}
|
||||
</if>
|
||||
<if test="params.currentUserId != null">
|
||||
AND ar.dispose_user_id = #{params.currentUserId}
|
||||
</if>
|
||||
<if test="params.alarmTimeStart != null and params.alarmTimeStart != ''">
|
||||
AND ar.alarm_time <![CDATA[>=]]> #{params.alarmTimeStart}
|
||||
</if>
|
||||
<if test="params.alarmTimeEnd != null and params.alarmTimeEnd != ''">
|
||||
AND ar.alarm_time <![CDATA[<=]]> #{params.alarmTimeEnd}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY ar.alarm_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<?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="com.zcloud.persistence.mapper.DeviceRegionMapper">
|
||||
|
||||
<select id="listPage" resultType="com.zcloud.persistence.dataobject.DeviceRegionDO">
|
||||
SELECT
|
||||
rc.*,
|
||||
d.name AS departmentName,
|
||||
COALESCE(u.name, rc.manager_name) AS managerName,
|
||||
(
|
||||
SELECT COUNT(1)
|
||||
FROM iot_alarm_region_sensor_rel rel
|
||||
WHERE rel.region_config_id = rc.id
|
||||
AND rel.delete_enum = 'FALSE'
|
||||
) AS bindSensorCount
|
||||
FROM iot_alarm_region_config rc
|
||||
LEFT JOIN department d ON rc.department_id = d.id
|
||||
LEFT JOIN user u ON rc.manager_id = u.id
|
||||
<where>
|
||||
rc.delete_enum = 'FALSE'
|
||||
<if test="params.tenantId != null">
|
||||
AND rc.tenant_id = #{params.tenantId}
|
||||
</if>
|
||||
<if test="params.orgId != null">
|
||||
AND rc.org_id = #{params.orgId}
|
||||
</if>
|
||||
<if test="params.fireRegionCode != null and params.fireRegionCode != ''">
|
||||
AND rc.fire_region_code LIKE CONCAT('%', #{params.fireRegionCode}, '%')
|
||||
</if>
|
||||
<if test="params.departmentId != null">
|
||||
AND rc.department_id = #{params.departmentId}
|
||||
</if>
|
||||
<if test="params.managerId != null">
|
||||
AND rc.manager_id = #{params.managerId}
|
||||
</if>
|
||||
<if test="params.status != null">
|
||||
AND rc.status = #{params.status}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY rc.create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?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="com.zcloud.persistence.mapper.SensorDeviceMapper">
|
||||
|
||||
<select id="listPage" resultType="com.zcloud.persistence.dataobject.SensorDeviceDO">
|
||||
SELECT
|
||||
sd.*,
|
||||
st.type_name AS sensorTypeName
|
||||
FROM iot_alarm_sensor_device sd
|
||||
LEFT JOIN iot_alarm_sensor_type st ON sd.sensor_type_id = st.id AND st.delete_enum = 'FALSE'
|
||||
<where>
|
||||
sd.delete_enum = 'FALSE'
|
||||
<if test="params.tenantId != null">
|
||||
AND sd.tenant_id = #{params.tenantId}
|
||||
</if>
|
||||
<if test="params.orgId != null">
|
||||
AND sd.org_id = #{params.orgId}
|
||||
</if>
|
||||
<if test="params.sensorCode != null and params.sensorCode != ''">
|
||||
AND sd.sensor_code LIKE CONCAT('%', #{params.sensorCode}, '%')
|
||||
</if>
|
||||
<if test="params.sensorName != null and params.sensorName != ''">
|
||||
AND sd.sensor_name LIKE CONCAT('%', #{params.sensorName}, '%')
|
||||
</if>
|
||||
<if test="params.sensorTypeId != null">
|
||||
AND sd.sensor_type_id = #{params.sensorTypeId}
|
||||
</if>
|
||||
<if test="params.sensorAttr != null and params.sensorAttr != ''">
|
||||
AND sd.sensor_attr = #{params.sensorAttr}
|
||||
</if>
|
||||
<if test="params.sensorStatus != null and params.sensorStatus != ''">
|
||||
AND sd.sensor_status = #{params.sensorStatus}
|
||||
</if>
|
||||
<if test="params.alarmSwitch != null">
|
||||
AND sd.alarm_switch = #{params.alarmSwitch}
|
||||
</if>
|
||||
<if test="params.thresholdFlag != null">
|
||||
AND sd.threshold_flag = #{params.thresholdFlag}
|
||||
</if>
|
||||
<if test="params.installPosition != null and params.installPosition != ''">
|
||||
AND sd.install_position LIKE CONCAT('%', #{params.installPosition}, '%')
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY sd.create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?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="com.zcloud.persistence.mapper.SensorTypeMapper">
|
||||
|
||||
<select id="listPage" resultType="com.zcloud.persistence.dataobject.SensorTypeDO">
|
||||
SELECT
|
||||
st.*
|
||||
FROM iot_alarm_sensor_type st
|
||||
<where>
|
||||
st.delete_enum = 'FALSE'
|
||||
<if test="params.tenantId != null">
|
||||
AND st.tenant_id = #{params.tenantId}
|
||||
</if>
|
||||
<if test="params.orgId != null">
|
||||
AND st.org_id = #{params.orgId}
|
||||
</if>
|
||||
<if test="params.typeCode != null and params.typeCode != ''">
|
||||
AND st.type_code LIKE CONCAT('%', #{params.typeCode}, '%')
|
||||
</if>
|
||||
<if test="params.typeName != null and params.typeName != ''">
|
||||
AND st.type_name LIKE CONCAT('%', #{params.typeName}, '%')
|
||||
</if>
|
||||
<if test="params.sensorAttr != null and params.sensorAttr != ''">
|
||||
AND st.sensor_attr = #{params.sensorAttr}
|
||||
</if>
|
||||
<if test="params.status != null">
|
||||
AND st.status = #{params.status}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY st.create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue