奉贤 alarm topic接入

This commit is contained in:
2025-09-23 13:59:45 +08:00
parent a5f1444984
commit 8e8c57cb64
14 changed files with 593 additions and 15 deletions

View File

@ -0,0 +1,117 @@
package com.xzzn.ems.domain;
import com.xzzn.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.xzzn.common.annotation.Excel;
/**
* 告警点位匹配数据对象 ems_alarm_match_data
*
* @author xzzn
* @date 2025-09-22
*/
public class EmsAlarmMatchData extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** $column.columnComment */
private Long id;
/** 告警点位 */
@Excel(name = "告警点位")
private String point;
/** 告警值 */
@Excel(name = "告警值")
private Long alarmData;
/** 告警描述 */
@Excel(name = "告警描述")
private String alarmDescription;
/** 站点id */
@Excel(name = "站点id")
private String siteId;
/** 设备类型 */
@Excel(name = "设备类型")
private String deviceCategory;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setPoint(String point)
{
this.point = point;
}
public String getPoint()
{
return point;
}
public void setAlarmData(Long alarmData)
{
this.alarmData = alarmData;
}
public Long getAlarmData()
{
return alarmData;
}
public void setAlarmDescription(String alarmDescription)
{
this.alarmDescription = alarmDescription;
}
public String getAlarmDescription()
{
return alarmDescription;
}
public void setSiteId(String siteId)
{
this.siteId = siteId;
}
public String getSiteId()
{
return siteId;
}
public void setDeviceCategory(String deviceCategory)
{
this.deviceCategory = deviceCategory;
}
public String getDeviceCategory()
{
return deviceCategory;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("point", getPoint())
.append("alarmData", getAlarmData())
.append("alarmDescription", getAlarmDescription())
.append("siteId", getSiteId())
.append("deviceCategory", getDeviceCategory())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}

View File

@ -24,8 +24,8 @@ public class EmsAlarmRecords extends BaseEntity
@Excel(name = "设备类型")
private String deviceType;
/** 告警等级 */
@Excel(name = "告警等级")
/** 告警等级A-提示 B-一般 C-严重 D紧急 */
@Excel(name = "告警等级A-提示 B-一般 C-严重 D紧急")
private String alarmLevel;
/** 告警内容 */
@ -42,8 +42,12 @@ public class EmsAlarmRecords extends BaseEntity
@Excel(name = "告警结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date alarmEndTime;
/** 状态 */
@Excel(name = "状态")
/** 告警点位 */
@Excel(name = "告警点位")
private String alarmPoint;
/** 状态:0-待处理 1-已处理 2-处理中 */
@Excel(name = "状态:0-待处理 1-已处理 2-处理中")
private String status;
/** 站点id */
@ -118,6 +122,16 @@ public class EmsAlarmRecords extends BaseEntity
return alarmEndTime;
}
public void setAlarmPoint(String alarmPoint)
{
this.alarmPoint = alarmPoint;
}
public String getAlarmPoint()
{
return alarmPoint;
}
public void setStatus(String status)
{
this.status = status;
@ -148,12 +162,14 @@ public class EmsAlarmRecords extends BaseEntity
return deviceId;
}
public String getTicketNo() {
return ticketNo;
public void setTicketNo(String ticketNo)
{
this.ticketNo = ticketNo;
}
public void setTicketNo(String ticketNo) {
this.ticketNo = ticketNo;
public String getTicketNo()
{
return ticketNo;
}
@Override
@ -165,6 +181,7 @@ public class EmsAlarmRecords extends BaseEntity
.append("alarmContent", getAlarmContent())
.append("alarmStartTime", getAlarmStartTime())
.append("alarmEndTime", getAlarmEndTime())
.append("alarmPoint", getAlarmPoint())
.append("status", getStatus())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
@ -176,4 +193,4 @@ public class EmsAlarmRecords extends BaseEntity
.append("ticketNo", getTicketNo())
.toString();
}
}
}

View File

@ -0,0 +1,63 @@
package com.xzzn.ems.mapper;
import java.util.List;
import java.util.Map;
import com.xzzn.ems.domain.EmsAlarmMatchData;
/**
* 告警点位匹配数据Mapper接口
*
* @author xzzn
* @date 2025-09-22
*/
public interface EmsAlarmMatchDataMapper
{
/**
* 查询告警点位匹配数据
*
* @param id 告警点位匹配数据主键
* @return 告警点位匹配数据
*/
public EmsAlarmMatchData selectEmsAlarmMatchDataById(Long id);
/**
* 查询告警点位匹配数据列表
*
* @param emsAlarmMatchData 告警点位匹配数据
* @return 告警点位匹配数据集合
*/
public List<EmsAlarmMatchData> selectEmsAlarmMatchDataList(EmsAlarmMatchData emsAlarmMatchData);
/**
* 新增告警点位匹配数据
*
* @param emsAlarmMatchData 告警点位匹配数据
* @return 结果
*/
public int insertEmsAlarmMatchData(EmsAlarmMatchData emsAlarmMatchData);
/**
* 修改告警点位匹配数据
*
* @param emsAlarmMatchData 告警点位匹配数据
* @return 结果
*/
public int updateEmsAlarmMatchData(EmsAlarmMatchData emsAlarmMatchData);
/**
* 删除告警点位匹配数据
*
* @param id 告警点位匹配数据主键
* @return 结果
*/
public int deleteEmsAlarmMatchDataById(Long id);
/**
* 批量删除告警点位匹配数据
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteEmsAlarmMatchDataByIds(Long[] ids);
}

View File

@ -94,4 +94,10 @@ public interface EmsAlarmRecordsMapper
//获取未处理的订阅失败告警
public EmsAlarmRecords getFailedRecord(@Param("siteId")String siteId, @Param("deviceId")String deviceId,
@Param("content") String content,@Param("status")String status);
// 批量处理告警数据
public void batchUpsert(@Param("recordsList")List<EmsAlarmRecords> recordsList);
// 获取所有没有处理完成的告警记录
public List<EmsAlarmRecords> getAllUnfinishedRecords(@Param("needUpdateKeys")List<String> needUpdateKeys,@Param("siteId") String siteId);
}

View File

@ -83,4 +83,13 @@ public interface IEmsAlarmRecordsService
// topic 内没有数据,按照设备维度告警
public void addEmptyDataAlarmRecord(String siteId, String deviceId);
// 告警字段和告警信息
public void initAlarmMatchInfo();
// 获取所有没有处理完成的告警记录
public List<EmsAlarmRecords> getAllUnfinishedRecords(List<String> needUpdateKeys, String siteId);
// 批量处理告警数据
public void batchProcessAlarmRecords(List<EmsAlarmRecords> recordsList);
}

View File

@ -4,4 +4,5 @@ public interface IFXXDataProcessService {
public void handleFxData(String message);
public void handleFxAlarmData(String message);
}

View File

@ -2,18 +2,20 @@ package com.xzzn.ems.service.impl;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.xzzn.common.constant.RedisKeyConstants;
import com.xzzn.common.core.domain.entity.SysUser;
import com.xzzn.common.core.domain.model.LoginUser;
import com.xzzn.common.core.redis.RedisCache;
import com.xzzn.common.enums.AlarmLevelStatus;
import com.xzzn.common.enums.AlarmStatus;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsAlarmMatchData;
import com.xzzn.ems.domain.EmsTicket;
import com.xzzn.ems.domain.vo.AlarmRecordListRequestVo;
import com.xzzn.ems.domain.vo.AlarmRecordListResponseVo;
import com.xzzn.ems.mapper.EmsAlarmMatchDataMapper;
import com.xzzn.ems.mapper.EmsTicketMapper;
import com.xzzn.ems.service.IEmsTicketService;
import com.xzzn.system.mapper.SysUserMapper;
@ -35,8 +37,6 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
@Autowired
private EmsAlarmRecordsMapper emsAlarmRecordsMapper;
@Autowired
private IEmsTicketService emsTicketService;
@Autowired
private EmsTicketMapper emsTicketMapper;
@Autowired
private SysUserMapper sysUserMapper;
@ -47,6 +47,8 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
put("021_DDS_01", "PCS");
put("021_FXX_01", "PCS01");
}};
@Autowired
private EmsAlarmMatchDataMapper emsAlarmMatchDataMapper;
/**
* 查询告警记录
@ -228,7 +230,6 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
redisCache.setCacheObject(RedisKeyConstants.TOPIC_EMPTY_ALARM_RECORD + siteId + "_" + topicDevice, emsAlarmRecords,1, TimeUnit.DAYS);
}
private EmsAlarmRecords createAlarmAtPcs(String siteId, String deviceId,String content,String level) {
EmsAlarmRecords emsAlarmRecords = new EmsAlarmRecords();
emsAlarmRecords.setSiteId(siteId);
@ -251,4 +252,28 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
}
@Override
public void initAlarmMatchInfo() {
List<EmsAlarmMatchData> alarmPointList = emsAlarmMatchDataMapper.selectEmsAlarmMatchDataList(null);
Map<String, EmsAlarmMatchData> resultMap = alarmPointList.stream()
.collect(Collectors.toMap(
data->data.getDeviceCategory()+"_"+data.getPoint(),
data->data,
(existing, replacement) -> replacement
));
// 存redis
redisCache.setCacheObject(RedisKeyConstants.ALARM_MATCH_INFO,resultMap, 1, TimeUnit.DAYS);
}
@Override
public List<EmsAlarmRecords> getAllUnfinishedRecords(List<String> needUpdateKeys, String siteId) {
return emsAlarmRecordsMapper.getAllUnfinishedRecords(needUpdateKeys,siteId);
}
@Override
public void batchProcessAlarmRecords(List<EmsAlarmRecords> recordsList) {
emsAlarmRecordsMapper.batchUpsert(recordsList);
}
}

View File

@ -27,6 +27,7 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor implements IFXXDataProcessService {
@ -767,6 +768,145 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
return records;
}
@Override
public void handleFxAlarmData(String message) {
JSONArray arraylist = JSONArray.parseArray(message);
// 获取redis缓存-告警信息
Map<String, EmsAlarmMatchData> alarmMatchInfo= redisCache.getCacheObject(RedisKeyConstants.ALARM_MATCH_INFO);
for (int i = 0; i < arraylist.size(); i++) {
JSONObject obj = JSONObject.parseObject(arraylist.get(i).toString());
String deviceId = obj.get("Device").toString();
String jsonData = obj.get("Data").toString();
log.info("deviceId:" + deviceId);
if (deviceId.contains("BMSD")) {
alarmDataProcess(deviceId, jsonData, alarmMatchInfo, DeviceCategory.STACK.getCode());
} else if (deviceId.contains("BMSC")) {
alarmDataProcess(deviceId, jsonData, alarmMatchInfo, DeviceCategory.CLUSTER.getCode());
} else if (deviceId.contains("PCS")) {
alarmDataProcess(deviceId, jsonData, alarmMatchInfo, DeviceCategory.PCS.getCode());
}
}
}
private void alarmDataProcess(String deviceId, String jsonData,
Map<String, EmsAlarmMatchData> alarmInfoData, String category) {
Map<String, Object> obj = JSON.parseObject(jsonData, new TypeReference<Map<String, Object>>() {
});
String redisKey = RedisKeyConstants.LATEST_ALARM_RECORD + "_" + SITE_ID +"_" + deviceId;
// 获取redis里面的当前有效告警遍历添加到已存在告警key里面
Map<String, Object> currentAlarm = redisCache.getCacheMap(redisKey);
final Set<String> currentAlarmKeys = new HashSet<>();
if (currentAlarm != null && !currentAlarm.isEmpty()) {
currentAlarm.keySet().stream()
.filter(Objects::nonNull)
.map(Object::toString)
.forEach(currentAlarmKeys::add);
}
// 结合同步数据,筛选簇需要更新的告警信息
List<String> needUpdateKeys = obj.entrySet().stream()
.filter(entry -> {
Object valueObj = entry.getValue();
if (valueObj == null) {
return false;
}
int value = Integer.parseInt(valueObj.toString());
return value == 0 && currentAlarmKeys.contains(entry.getKey());
})
.map(Map.Entry::getKey)
.collect(Collectors.toList());
// 批量查询数据库-需要更新的数据
Map<String, EmsAlarmRecords> needUpdateMap = new HashMap<>();
if (!needUpdateKeys.isEmpty()) {
List<EmsAlarmRecords> records = iEmsAlarmRecordsService.getAllUnfinishedRecords(needUpdateKeys,SITE_ID);
// 转为Map便于快速获取
needUpdateMap = records.stream()
.collect(Collectors.toMap(
EmsAlarmRecords::getAlarmPoint,
record -> record
));
}
List<EmsAlarmRecords> saveOrUpdateList = new ArrayList<>();
List<EmsAlarmRecords> newAddRecordList = new ArrayList<>();
List<String> toRemoveFromRedis = new ArrayList<>();
// 遍历数据map
for (Map.Entry<String, Object> entry : obj.entrySet()) {
String key = entry.getKey();
Integer value = (Integer) entry.getValue();
Boolean isCurrentAlarm = currentAlarmKeys.contains(key);
// 值为 1且不在当前告警里面 - 新增告警
if (value == 1 && !isCurrentAlarm) {
String matchRedisKey = category + "_" + key;
Object cacheObj = alarmInfoData.get(matchRedisKey);
if (cacheObj == null) {
// 处理空数据逻辑
return;
}
EmsAlarmMatchData matchInfo = JSON.toJavaObject(cacheObj, EmsAlarmMatchData.class);
EmsAlarmRecords emsAlarmRecord = convertAlarmRecord(deviceId,matchInfo);
saveOrUpdateList.add(emsAlarmRecord);
newAddRecordList.add(emsAlarmRecord);
} else if (value == 0 && isCurrentAlarm) {// 值为 0且在当前告警里面 - 更新告警已处理
EmsAlarmRecords existingAlarm = needUpdateMap.get(key);
if (existingAlarm != null) {
existingAlarm.setStatus(AlarmStatus.DONE.getCode());
existingAlarm.setUpdateTime(new Date());
existingAlarm.setAlarmEndTime(new Date());
saveOrUpdateList.add(existingAlarm);
toRemoveFromRedis.add(key);
}
}
}
// 批量处理插入和更新操作
if (saveOrUpdateList != null && saveOrUpdateList.size() > 0) {
iEmsAlarmRecordsService.batchProcessAlarmRecords(saveOrUpdateList);
}
// 已处理的从redis里面删除
if (!toRemoveFromRedis.isEmpty()) {
redisCache.deleteAllCacheMapValue(RedisKeyConstants.LATEST_ALARM_RECORD + SITE_ID,toRemoveFromRedis.toArray());
}
// 批量添加新增的告警到Redis
Map<String, EmsAlarmRecords> newAlarms = newAddRecordList.stream()
.filter(a -> !AlarmStatus.DONE.getCode().equals(a.getStatus()))
.collect(Collectors.toMap(EmsAlarmRecords::getAlarmPoint, a -> a));
if (!newAlarms.isEmpty()) {
// 本次新增的放入redis
redisCache.setAllCacheMapValue(redisKey, newAlarms);
}
}
private EmsAlarmRecords convertAlarmRecord(String deviceId, EmsAlarmMatchData matchInfo) {
EmsAlarmRecords emsAlarmRecords = new EmsAlarmRecords();
emsAlarmRecords.setSiteId(SITE_ID);
emsAlarmRecords.setDeviceId(deviceId);
emsAlarmRecords.setDeviceType(DeviceType.TCP.toString());
emsAlarmRecords.setAlarmLevel(AlarmLevelStatus.GENERAL.getCode());
emsAlarmRecords.setStatus(AlarmStatus.WAITING.getCode());
emsAlarmRecords.setAlarmStartTime(DateUtils.getNowDate());
emsAlarmRecords.setCreateTime(DateUtils.getNowDate());
emsAlarmRecords.setCreateBy("system");
emsAlarmRecords.setUpdateTime(DateUtils.getNowDate());
emsAlarmRecords.setUpdateBy("system");
if (matchInfo != null) {
emsAlarmRecords.setAlarmPoint(matchInfo.getPoint());
emsAlarmRecords.setAlarmContent(matchInfo.getAlarmDescription());
}
return emsAlarmRecords;
}
// 空数据不处理
private boolean checkJsonDataEmpty(String jsonData) {
boolean flag = false;

View File

@ -0,0 +1,100 @@
<?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.xzzn.ems.mapper.EmsAlarmMatchDataMapper">
<resultMap type="EmsAlarmMatchData" id="EmsAlarmMatchDataResult">
<result property="id" column="id" />
<result property="point" column="point" />
<result property="alarmData" column="alarm_data" />
<result property="alarmDescription" column="alarm_description" />
<result property="siteId" column="site_id" />
<result property="deviceCategory" column="device_category" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
</resultMap>
<sql id="selectEmsAlarmMatchDataVo">
select id, point, alarm_data, alarm_description, site_id, device_category, create_by, create_time, update_by, update_time, remark from ems_alarm_match_data
</sql>
<select id="selectEmsAlarmMatchDataList" parameterType="EmsAlarmMatchData" resultMap="EmsAlarmMatchDataResult">
<include refid="selectEmsAlarmMatchDataVo"/>
<where>
<if test="point != null and point != ''"> and point = #{point}</if>
<if test="alarmData != null "> and alarm_data = #{alarmData}</if>
<if test="alarmDescription != null and alarmDescription != ''"> and alarm_description = #{alarmDescription}</if>
<if test="siteId != null and siteId != ''"> and site_id = #{siteId}</if>
<if test="deviceCategory != null and deviceCategory != ''"> and device_category = #{deviceCategory}</if>
</where>
</select>
<select id="selectEmsAlarmMatchDataById" parameterType="Long" resultMap="EmsAlarmMatchDataResult">
<include refid="selectEmsAlarmMatchDataVo"/>
where id = #{id}
</select>
<insert id="insertEmsAlarmMatchData" parameterType="EmsAlarmMatchData" useGeneratedKeys="true" keyProperty="id">
insert into ems_alarm_match_data
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="point != null">point,</if>
<if test="alarmData != null">alarm_data,</if>
<if test="alarmDescription != null">alarm_description,</if>
<if test="siteId != null">site_id,</if>
<if test="deviceCategory != null">device_category,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="point != null">#{point},</if>
<if test="alarmData != null">#{alarmData},</if>
<if test="alarmDescription != null">#{alarmDescription},</if>
<if test="siteId != null">#{siteId},</if>
<if test="deviceCategory != null">#{deviceCategory},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<update id="updateEmsAlarmMatchData" parameterType="EmsAlarmMatchData">
update ems_alarm_match_data
<trim prefix="SET" suffixOverrides=",">
<if test="point != null">point = #{point},</if>
<if test="alarmData != null">alarm_data = #{alarmData},</if>
<if test="alarmDescription != null">alarm_description = #{alarmDescription},</if>
<if test="siteId != null">site_id = #{siteId},</if>
<if test="deviceCategory != null">device_category = #{deviceCategory},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteEmsAlarmMatchDataById" parameterType="Long">
delete from ems_alarm_match_data where id = #{id}
</delete>
<delete id="deleteEmsAlarmMatchDataByIds" parameterType="String">
delete from ems_alarm_match_data where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="getAllMatchInfo" resultType="java.util.Map">
select point,alarm_description as description from ems_alarm_match_data GROUP BY point,alarm_description
</select>
</mapper>

View File

@ -11,6 +11,7 @@
<result property="alarmContent" column="alarm_content" />
<result property="alarmStartTime" column="alarm_start_time" />
<result property="alarmEndTime" column="alarm_end_time" />
<result property="alarmPoint" column="alarm_point" />
<result property="status" column="status" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
@ -23,7 +24,7 @@
</resultMap>
<sql id="selectEmsAlarmRecordsVo">
select id, device_type, alarm_level, alarm_content, alarm_start_time, alarm_end_time, status, create_by, create_time, update_by, update_time, remark, site_id, device_id, ticket_no from ems_alarm_records
select id, device_type, alarm_level, alarm_content, alarm_start_time, alarm_end_time, alarm_point, status, create_by, create_time, update_by, update_time, remark, site_id, device_id, ticket_no from ems_alarm_records
</sql>
<select id="selectEmsAlarmRecordsList" parameterType="EmsAlarmRecords" resultMap="EmsAlarmRecordsResult">
@ -34,6 +35,7 @@
<if test="alarmContent != null and alarmContent != ''"> and alarm_content = #{alarmContent}</if>
<if test="alarmStartTime != null "> and alarm_start_time = #{alarmStartTime}</if>
<if test="alarmEndTime != null "> and alarm_end_time = #{alarmEndTime}</if>
<if test="alarmPoint != null and alarmPoint != ''"> and alarm_point = #{alarmPoint}</if>
<if test="status != null and status != ''"> and status = #{status}</if>
<if test="siteId != null and siteId != ''"> and site_id = #{siteId}</if>
<if test="deviceId != null and deviceId != ''"> and device_id = #{deviceId}</if>
@ -54,6 +56,7 @@
<if test="alarmContent != null">alarm_content,</if>
<if test="alarmStartTime != null">alarm_start_time,</if>
<if test="alarmEndTime != null">alarm_end_time,</if>
<if test="alarmPoint != null">alarm_point,</if>
<if test="status != null">status,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
@ -70,6 +73,7 @@
<if test="alarmContent != null">#{alarmContent},</if>
<if test="alarmStartTime != null">#{alarmStartTime},</if>
<if test="alarmEndTime != null">#{alarmEndTime},</if>
<if test="alarmPoint != null">#{alarmPoint},</if>
<if test="status != null">#{status},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
@ -90,6 +94,7 @@
<if test="alarmContent != null">alarm_content = #{alarmContent},</if>
<if test="alarmStartTime != null">alarm_start_time = #{alarmStartTime},</if>
<if test="alarmEndTime != null">alarm_end_time = #{alarmEndTime},</if>
<if test="alarmPoint != null">alarm_point = #{alarmPoint},</if>
<if test="status != null">status = #{status},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
@ -186,4 +191,59 @@
and status = #{status}
limit 1
</select>
<select id="getAllUnfinishedRecords" resultType="com.xzzn.ems.domain.EmsAlarmRecords">
<include refid="selectEmsAlarmRecordsVo"/>
WHERE status <![CDATA[ != ]]> 1
and site_id = #{siteId}
and alarm_point IN
<foreach collection="needUpdateKeys" item="key" open="(" separator="," close=")">
#{key}
</foreach>
</select>
<insert id="batchUpsert">
INSERT into ems_alarm_records (
id,
device_type,
alarm_level,
alarm_content,
alarm_start_time,
alarm_end_time,
alarm_point,
status,
create_by,
create_time,
update_by,
update_time,
remark,
site_id,
device_id,
ticket_no
) values
<foreach collection="recordsList" item="item" separator=",">
(
#{item.id},
#{item.deviceType},
#{item.alarmLevel},
#{item.alarmContent},
#{item.alarmStartTime},
#{item.alarmEndTime},
#{item.alarmPoint},
#{item.status},
#{item.createBy},
#{item.createTime},
#{item.updateBy},
#{item.updateTime},
#{item.remark},
#{item.siteId},
#{item.deviceId},
#{item.ticketNo}
)
</foreach>
on duplicate key update
alarm_end_time = values(alarm_end_time),
status = values(status),
device_id = values(device_id)
</insert>
</mapper>

View File

@ -984,7 +984,7 @@
<select id="getPowerDataByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
select latest.dateHour as statisDate,
<include refid="powerFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H:00') AS dateHour,MAX(p.data_update_time) as max_update_time
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%Y-%m-%d %H:00') AS dateHour,MAX(p.data_update_time) as max_update_time
FROM ems_ammeter_data p
<include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour