Przeglądaj źródła

fix(audio): 修复漏失告警数据保存问题

- 修改 NoiseLeakAlarmService 中 saveLeakAlarm 方法参数,添加 maxValue 参数
- 在 alarm_data 表中保存漏失告警的 RMS 越限上限值
- 更新 DeviceContactApiMapper 注释,明确按台账编码查询维护记录联系人和台账负责人电话
- 移除状态表中不必要的负责人电话查询逻辑
- 优化告警数据入库逻辑,只保存最大值用于越限判断
林仔 3 tygodni temu
rodzic
commit
2dc7f5f2a4

+ 7 - 3
audio-service/src/main/java/com/zksy/audio/service/NoiseLeakAlarmService.java

@@ -148,7 +148,7 @@ public class NoiseLeakAlarmService {
             boolean newlyConfirmed = confirmedLeakEncode.add(encode);
             if (alarmCount == 1 || newlyConfirmed) {
                 run(encode, "一级漏失告警短信", () -> deviceNotifier.sendLevelOneSms(encode, "漏失报警", "RMS=" + rms));
-                if (saveLeakAlarm(encode, rms, count, lowerFreq, upperFreq)) {
+                if (saveLeakAlarm(encode, rms, count, maxValue, lowerFreq, upperFreq)) {
                     log.info("确认漏失告警: encode={}, 本次确认采用{}份独立采样", encode, count);
                 } else {
                     confirmedLeakEncode.remove(encode);
@@ -184,18 +184,22 @@ public class NoiseLeakAlarmService {
                 .le(NoiseInfo::getCenterFrequency, upperFreq));
     }
 
-    private boolean saveLeakAlarm(String encode, Integer rms, long count, double lowerFreq, double upperFreq) {
+    private boolean saveLeakAlarm(String encode, Integer rms, long count, Double maxValue,
+                                  double lowerFreq, double upperFreq) {
         AlarmData alarm = new AlarmData();
         alarm.setDeviceCode(encode);
         alarm.setWarningType("漏失报警");
         alarm.setWarningCode(LEAK_WARNING_CODE);
+        // 漏失告警只在 alarm_data 中保存 RMS 的越限上限;最小值仅用于恢复判断,不入库。
+        if (maxValue != null) {
+            alarm.setMaxValue(BigDecimal.valueOf(maxValue));
+        }
         if (rms != null) {
             alarm.setActualValue(BigDecimal.valueOf(rms));
         }
         alarm.setAlarmLevel(1);
         alarm.setAlarmStatus(0);
         alarm.setCreateTime(LocalDateTime.now());
-        alarm.setCreateTime(LocalDateTime.now());
         alarm.setRemark(alarmCount == 1
                 ? String.format("漏失监测单次独立采样确认:rms≥阈值且在漏失频段[%.0f,%.0f]Hz", lowerFreq, upperFreq)
                 : String.format("漏失监测确认漏失:最近%d分钟内%d次采样rms≥阈值且在漏失频段[%.0f,%.0f]Hz",

+ 2 - 4
zk-api-service/src/main/java/com/zksy/api/mapper/DeviceContactApiMapper.java

@@ -5,13 +5,11 @@ import org.apache.ibatis.annotations.Select;
 import java.util.List;
 
 public interface DeviceContactApiMapper {
-    /** 台账编码先关联设备主键,沿用维护人员和状态负责人的联系人来源。 */
+    /** 按台账编码查询维护记录联系人和台账负责人电话,状态表不存储负责人。 */
     @Select("SELECT m.maintain_person_phone FROM app_user.equipment_base b "
             + "JOIN app_user.equipment_maintain m ON m.equipment_id = b.equipment_id "
             + "WHERE b.equipment_code = #{deviceCode} "
-            + "UNION SELECT u.phonenumber FROM app_user.equipment_base b "
-            + "JOIN app_user.equipment_status s ON s.equipment_id = b.equipment_id AND s.del_flag = '0' "
-            + "JOIN app_user.sys_user u ON u.user_id = s.user_id AND u.del_flag = '0' "
+            + "UNION SELECT b.maintainer_phone FROM app_user.equipment_base b "
             + "WHERE b.equipment_code = #{deviceCode}")
     List<String> selectPhonesByDeviceCode(@Param("deviceCode") String deviceCode);
 }