0918优化-告警工单逻辑优化

This commit is contained in:
2025-09-29 10:14:46 +08:00
parent e5a2ce4c8d
commit 2bbc0abc08
6 changed files with 70 additions and 6 deletions

View File

@ -99,5 +99,11 @@ public interface EmsAlarmRecordsMapper
public void batchUpsert(@Param("recordsList")List<EmsAlarmRecords> recordsList); public void batchUpsert(@Param("recordsList")List<EmsAlarmRecords> recordsList);
// 获取所有没有处理完成的告警记录 // 获取所有没有处理完成的告警记录
public List<EmsAlarmRecords> getAllUnfinishedRecords(@Param("needUpdateKeys")List<String> needUpdateKeys,@Param("siteId") String siteId); public List<EmsAlarmRecords> getAllUnfinishedRecords(@Param("needUpdateKeys")List<String> needUpdateKeys,@Param("siteId") String siteId,
@Param("deviceId") String deviceId);
// 根据ticketNo更新告警状态
public EmsAlarmRecords getAlarmByTicketNo(@Param("ticketNo")String ticketNo);
//获取指定设备未处理和处理中的告警
public List<EmsAlarmRecords> getNeedPutRedisAlarm(@Param("siteId")String siteId, @Param("deviceId")String deviceId);
} }

View File

@ -88,8 +88,11 @@ public interface IEmsAlarmRecordsService
public void initAlarmMatchInfo(); public void initAlarmMatchInfo();
// 获取所有没有处理完成的告警记录 // 获取所有没有处理完成的告警记录
public List<EmsAlarmRecords> getAllUnfinishedRecords(List<String> needUpdateKeys, String siteId); public List<EmsAlarmRecords> getAllUnfinishedRecords(List<String> needUpdateKeys, String siteId, String deviceId);
// 批量处理告警数据 // 批量处理告警数据
public void batchProcessAlarmRecords(List<EmsAlarmRecords> recordsList); public void batchProcessAlarmRecords(List<EmsAlarmRecords> recordsList);
// 根据site_id和deviceId更新对应的redis
public void updateRedisAlarmRecords(String siteId, String deviceId);
} }

View File

@ -9,6 +9,7 @@ import com.xzzn.common.core.domain.entity.SysUser;
import com.xzzn.common.core.redis.RedisCache; import com.xzzn.common.core.redis.RedisCache;
import com.xzzn.common.enums.AlarmLevelStatus; import com.xzzn.common.enums.AlarmLevelStatus;
import com.xzzn.common.enums.AlarmStatus; import com.xzzn.common.enums.AlarmStatus;
import com.xzzn.common.enums.TicketStatus;
import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils; import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsAlarmMatchData; import com.xzzn.ems.domain.EmsAlarmMatchData;
@ -159,6 +160,7 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
emsTicket.setContent(emsAlarmRecords.getAlarmContent()); emsTicket.setContent(emsAlarmRecords.getAlarmContent());
emsTicket.setUserId(userId); emsTicket.setUserId(userId);
emsTicket.setWorkUserId(userId); emsTicket.setWorkUserId(userId);
emsTicket.setStatus(Long.valueOf(TicketStatus.WAITING.getCode()));
emsTicket.setCreateTime(DateUtils.getNowDate()); emsTicket.setCreateTime(DateUtils.getNowDate());
emsTicket.setCreateBy(user.getUserName()); emsTicket.setCreateBy(user.getUserName());
emsTicket.setUpdateTime(DateUtils.getNowDate()); emsTicket.setUpdateTime(DateUtils.getNowDate());
@ -267,8 +269,8 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
} }
@Override @Override
public List<EmsAlarmRecords> getAllUnfinishedRecords(List<String> needUpdateKeys, String siteId) { public List<EmsAlarmRecords> getAllUnfinishedRecords(List<String> needUpdateKeys, String siteId, String deviceId) {
return emsAlarmRecordsMapper.getAllUnfinishedRecords(needUpdateKeys,siteId); return emsAlarmRecordsMapper.getAllUnfinishedRecords(needUpdateKeys,siteId,deviceId);
} }
@Override @Override
@ -276,5 +278,19 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
emsAlarmRecordsMapper.batchUpsert(recordsList); emsAlarmRecordsMapper.batchUpsert(recordsList);
} }
@Override
public void updateRedisAlarmRecords(String siteId, String deviceId) {
if (StringUtils.isEmpty(siteId) || StringUtils.isEmpty(deviceId)) {
return;
}
String redisKey = RedisKeyConstants.LATEST_ALARM_RECORD + "_" + siteId +"_" + deviceId;
List<EmsAlarmRecords> allDeviceRecords = emsAlarmRecordsMapper.getNeedPutRedisAlarm(siteId,deviceId);
// 转Map
Map<String, EmsAlarmRecords> newAlarms = allDeviceRecords.stream()
.filter(a -> !AlarmStatus.DONE.getCode().equals(a.getStatus()))
.collect(Collectors.toMap(EmsAlarmRecords::getAlarmPoint, a -> a));
redisCache.setAllCacheMapValue(redisKey, newAlarms);
}
} }

View File

@ -3,10 +3,15 @@ package com.xzzn.ems.service.impl;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import com.xzzn.common.enums.AlarmStatus;
import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsAlarmRecords;
import com.xzzn.ems.domain.EmsTicket; import com.xzzn.ems.domain.EmsTicket;
import com.xzzn.ems.domain.vo.TicketListVo; import com.xzzn.ems.domain.vo.TicketListVo;
import com.xzzn.ems.mapper.EmsAlarmRecordsMapper;
import com.xzzn.ems.mapper.EmsTicketMapper; import com.xzzn.ems.mapper.EmsTicketMapper;
import com.xzzn.ems.service.IEmsAlarmRecordsService;
import com.xzzn.ems.service.IEmsTicketService; import com.xzzn.ems.service.IEmsTicketService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -23,6 +28,10 @@ public class EmsTicketServiceImpl implements IEmsTicketService
{ {
@Autowired @Autowired
private EmsTicketMapper emsTicketMapper; private EmsTicketMapper emsTicketMapper;
@Autowired
private EmsAlarmRecordsMapper emsAlarmRecordsMapper;
@Autowired
private IEmsAlarmRecordsService iEmsAlarmRecordsService;
/** /**
* 查询工单主-工单详情 * 查询工单主-工单详情
@ -76,6 +85,21 @@ public class EmsTicketServiceImpl implements IEmsTicketService
@Override @Override
public int updateEmsTicket(EmsTicket emsTicket) public int updateEmsTicket(EmsTicket emsTicket)
{ {
String status = emsTicket.getStatus().toString();
String ticketNo = emsTicket.getTicketNo();
// 判断工单状态为3-已完成
if ("3".equals(status) && !StringUtils.isEmpty(ticketNo)) {
// 处理告警数据状态-已处理
EmsAlarmRecords emsAlarmRecords = emsAlarmRecordsMapper.getAlarmByTicketNo(ticketNo);
if (emsAlarmRecords != null) {
emsAlarmRecords.setStatus(AlarmStatus.DONE.getCode());
emsAlarmRecords.setUpdateTime(DateUtils.getNowDate());
emsAlarmRecords.setAlarmEndTime(DateUtils.getNowDate());
emsAlarmRecordsMapper.updateEmsAlarmRecords(emsAlarmRecords);
// 更新告警redis
iEmsAlarmRecordsService.updateRedisAlarmRecords(emsAlarmRecords.getSiteId(),emsAlarmRecords.getDeviceId());
}
}
emsTicket.setUpdateTime(DateUtils.getNowDate()); emsTicket.setUpdateTime(DateUtils.getNowDate());
return emsTicketMapper.updateEmsTicket(emsTicket); return emsTicketMapper.updateEmsTicket(emsTicket);
} }

View File

@ -866,7 +866,7 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
// 批量查询数据库-需要更新的数据 // 批量查询数据库-需要更新的数据
Map<String, EmsAlarmRecords> needUpdateMap = new HashMap<>(); Map<String, EmsAlarmRecords> needUpdateMap = new HashMap<>();
if (!needUpdateKeys.isEmpty()) { if (!needUpdateKeys.isEmpty()) {
List<EmsAlarmRecords> records = iEmsAlarmRecordsService.getAllUnfinishedRecords(needUpdateKeys,SITE_ID); List<EmsAlarmRecords> records = iEmsAlarmRecordsService.getAllUnfinishedRecords(needUpdateKeys,SITE_ID, deviceId);
// 转为Map便于快速获取 // 转为Map便于快速获取
needUpdateMap = records.stream() needUpdateMap = records.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(

View File

@ -192,10 +192,11 @@
limit 1 limit 1
</select> </select>
<select id="getAllUnfinishedRecords" resultType="com.xzzn.ems.domain.EmsAlarmRecords"> <select id="getAllUnfinishedRecords" resultMap="EmsAlarmRecordsResult">
<include refid="selectEmsAlarmRecordsVo"/> <include refid="selectEmsAlarmRecordsVo"/>
WHERE status <![CDATA[ != ]]> 1 WHERE status <![CDATA[ != ]]> 1
and site_id = #{siteId} and site_id = #{siteId}
and device_id = #{deviceId}
and alarm_point IN and alarm_point IN
<foreach collection="needUpdateKeys" item="key" open="(" separator="," close=")"> <foreach collection="needUpdateKeys" item="key" open="(" separator="," close=")">
#{key} #{key}
@ -246,4 +247,18 @@
status = values(status), status = values(status),
device_id = values(device_id) device_id = values(device_id)
</insert> </insert>
<select id="getAlarmByTicketNo" resultType="com.xzzn.ems.domain.EmsAlarmRecords">
<include refid="selectEmsAlarmRecordsVo"/>
WHERE ticket_no = #{ticketNo}
limit 1
</select>
<select id="getNeedPutRedisAlarm" resultType="com.xzzn.ems.domain.EmsAlarmRecords">
<include refid="selectEmsAlarmRecordsVo"/>
WHERE status <![CDATA[ != ]]> 1
and site_id = #{siteId}
and device_id = #{deviceId}
and alarm_point is not null
</select>
</mapper> </mapper>