|
|
|
@ -209,8 +209,8 @@
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import {getByAlarmInfo, handleExceptions} from "@/api/board";
|
|
|
|
|
import {saveWebSocketAlarmData} from "@/api/ems/record/recordAlarmData";
|
|
|
|
|
import {getByAlarmInfo} from "@/api/board";
|
|
|
|
|
import {handleExceptions} from "@/api/ems/record/recordAlarmData";
|
|
|
|
|
import icon5 from "@/assets/images/icon5.jpg";
|
|
|
|
|
import vueSeamlessScroll from 'vue-seamless-scroll'
|
|
|
|
|
|
|
|
|
@ -358,108 +358,6 @@ export default {
|
|
|
|
|
return time
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
getActualValueFromDeviceParam(deviceParam, monitorField) {
|
|
|
|
|
if (!deviceParam || monitorField === null || monitorField === undefined) {
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (monitorField) {
|
|
|
|
|
case 0: // 温度
|
|
|
|
|
return deviceParam.temperature
|
|
|
|
|
case 1: // 湿度
|
|
|
|
|
return deviceParam.humidity
|
|
|
|
|
case 2: // 振动-速度(mm/s)
|
|
|
|
|
return deviceParam.vibrationSpeed || deviceParam.VibrationSpeed
|
|
|
|
|
case 3: // 振动-位移(um)
|
|
|
|
|
return deviceParam.vibrationDisplacement || deviceParam.VibrationDisplacement
|
|
|
|
|
case 4: // 振动-加速度(g)
|
|
|
|
|
return deviceParam.vibrationAcceleration || deviceParam.VibrationAcceleration
|
|
|
|
|
case 5: // 振动-温度(℃)
|
|
|
|
|
return deviceParam.vibrationTemp || deviceParam.VibrationTemp
|
|
|
|
|
case 6: // 噪音
|
|
|
|
|
return deviceParam.noise
|
|
|
|
|
case 7: // 照度
|
|
|
|
|
return deviceParam.illuminance
|
|
|
|
|
case 8: // 气体浓度
|
|
|
|
|
return deviceParam.concentration
|
|
|
|
|
default:
|
|
|
|
|
console.warn('未知的监测字段:', monitorField)
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
async saveRealtimeAlarmData(alarmData, alarmStatus = 1) {
|
|
|
|
|
try {
|
|
|
|
|
// 构建符合EmsRecordAlarmData实体的数据列表
|
|
|
|
|
// 每个触发的告警规则对应一条EmsRecordAlarmData记录
|
|
|
|
|
const alarmDataList = []
|
|
|
|
|
|
|
|
|
|
if (!alarmData.alarmRules || alarmData.alarmRules.length === 0) {
|
|
|
|
|
console.warn('告警数据中没有告警规则')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取当前时间并格式化为后端期望的格式
|
|
|
|
|
const getCurrentTimeForBackend = () => {
|
|
|
|
|
const now = new Date()
|
|
|
|
|
const year = now.getFullYear()
|
|
|
|
|
const month = String(now.getMonth() + 1).padStart(2, '0')
|
|
|
|
|
const day = String(now.getDate()).padStart(2, '0')
|
|
|
|
|
const hours = String(now.getHours()).padStart(2, '0')
|
|
|
|
|
const minutes = String(now.getMinutes()).padStart(2, '0')
|
|
|
|
|
const seconds = String(now.getSeconds()).padStart(2, '0')
|
|
|
|
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 为每个触发的告警规则创建一条记录
|
|
|
|
|
for (const rule of alarmData.alarmRules) {
|
|
|
|
|
// 获取对应字段的实际数值
|
|
|
|
|
const actualValue = this.getActualValueFromDeviceParam(alarmData.deviceParam, rule.monitorField)
|
|
|
|
|
|
|
|
|
|
const alarmRecord = {
|
|
|
|
|
// 设备相关信息
|
|
|
|
|
monitorId: alarmData.monitorId,
|
|
|
|
|
collectTime: getCurrentTimeForBackend(), // 使用当前时间并格式化为后端期望格式
|
|
|
|
|
|
|
|
|
|
// 告警类型:根据规则的triggerRule设置(0=大于阈值,1=小于阈值)
|
|
|
|
|
alarmType: rule.triggerRule || 0,
|
|
|
|
|
|
|
|
|
|
// 告警状态:根据用户操作设置(0=已处理,1=未处理)
|
|
|
|
|
alarmStatus: alarmStatus,
|
|
|
|
|
|
|
|
|
|
// 告警数据:实际触发告警的数值
|
|
|
|
|
alarmData: actualValue ? String(actualValue) : '',
|
|
|
|
|
|
|
|
|
|
// 告警原因:使用字段名称
|
|
|
|
|
cause: this.getFieldName(rule.monitorField),
|
|
|
|
|
|
|
|
|
|
// 其他字段可以为空,后端会设置默认值
|
|
|
|
|
operationName: null,
|
|
|
|
|
operationTime: null,
|
|
|
|
|
notifyUser: null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
alarmDataList.push(alarmRecord)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (alarmDataList.length === 0) {
|
|
|
|
|
console.warn('没有有效的告警记录可保存')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 发送到后端保存
|
|
|
|
|
const response = await saveWebSocketAlarmData(alarmDataList)
|
|
|
|
|
if (response.code === 200) {
|
|
|
|
|
console.log('告警数据保存成功:', response.msg)
|
|
|
|
|
return true
|
|
|
|
|
} else {
|
|
|
|
|
this.$message.error('告警数据保存失败: ' + response.msg)
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
this.$message.error('保存告警数据异常')
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
async processRealtimeAlarm() {
|
|
|
|
|
this.alarmProcessing = true
|
|
|
|
|
console.log(this.currentRealtimeAlarm.alarmRules[0])
|
|
|
|
|