fix: 电话通知报警,逻辑完善,改为报警电话列表获取电话号码,通知成功后24小时不再打电话等等。

This commit is contained in:
tianyongbao
2026-03-09 23:37:33 +08:00
parent abadce8318
commit 1676ef7599
7 changed files with 355 additions and 89 deletions

View File

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.time.LocalDateTime;
import java.util.List;
/**
* 告警电话通知记录 Mapper
@@ -17,7 +18,8 @@ import java.time.LocalDateTime;
public interface AquWarnCallNoticeMapper extends BaseMapper<AquWarnCallNotice> {
/**
* 查询指定设备、告警标题、时间范围内的通知数量(通过关联表反查 title
* 查询指定设备、告警标题、时间范围内「回执成功」的通知数量
* 只有 callStatus=3回执成功的记录才算真正通知到人才会触发抑制
*
* @param deviceId 设备ID
* @param title 告警标题(如"溶解氧"、"设备离线"等)
@@ -29,14 +31,16 @@ public interface AquWarnCallNoticeMapper extends BaseMapper<AquWarnCallNotice> {
"INNER JOIN aqu_message_warn w ON w.id = m.message_warn_id " +
"WHERE n.device_id = #{deviceId} " +
"AND w.title = #{title} " +
"AND n.call_status = 3 " +
"AND n.call_time >= #{afterTime}")
long countByDeviceAndTitleAfter(@Param("deviceId") Long deviceId,
@Param("title") String title,
@Param("afterTime") LocalDateTime afterTime);
/**
* 查询指定设备、告警标题、时段范围内的通知数量(免打扰模式:每个时段只通知一次)
* 查询指定设备、告警标题、时段范围内「回执成功」的通知数量(免打扰模式:每个时段只通知一次)
* 时段划分08:00-14:00、14:00-20:00、20:00-08:00
* 只有 callStatus=3回执成功的记录才算真正通知到人才会触发抑制
*
* @param deviceId 设备ID
* @param title 告警标题
@@ -48,8 +52,31 @@ public interface AquWarnCallNoticeMapper extends BaseMapper<AquWarnCallNotice> {
"INNER JOIN aqu_message_warn w ON w.id = m.message_warn_id " +
"WHERE n.device_id = #{deviceId} " +
"AND w.title = #{title} " +
"AND n.call_status = 3 " +
"AND n.call_time >= #{periodStart}")
long countByDeviceAndTitleInPeriod(@Param("deviceId") Long deviceId,
@Param("title") String title,
@Param("periodStart") LocalDateTime periodStart);
/**
* 查询 callStatus=0 且 callTime <= now 的到期待发记录
* 用于定时任务扫描并触发语音通知
*
* @param now 当前时间
* @return 到期待发的通知记录列表
*/
@Select("SELECT * FROM aqu_call_notice WHERE call_status = 0 AND call_time <= #{now} ORDER BY call_time ASC")
List<AquWarnCallNotice> selectDuePendingNotices(@Param("now") LocalDateTime now);
/**
* 通过 callNoticeId 查询关联的第一条告警消息内容
* 用于定时任务重发时构建 TTS 参数
*
* @param callNoticeId 通知记录ID
* @return 告警消息内容,不存在时返回 null
*/
@Select("SELECT w.message FROM aqu_message_warn w " +
"INNER JOIN aqu_map_message_warn_call_notice m ON m.message_warn_id = w.id " +
"WHERE m.call_notice_id = #{callNoticeId} LIMIT 1")
String selectWarnMessageByCallNoticeId(@Param("callNoticeId") Long callNoticeId);
}