Browse Source

视频告警自动恢复逻辑

dev_trial
巴林闲侠 2 years ago
parent
commit
50458a3a15
  1. 48
      code/VideoAccess-VCMP/api/app/lib/controllers/status/alarm.js
  2. 9
      code/VideoAccess-VCMP/api/app/lib/models/camera_status_alarm.js
  3. 6
      code/VideoAccess-VCMP/api/sequelize-automate.config.js
  4. 5
      code/VideoAccess-VCMP/script/1.3.4/schema/1.alert_tables.sql

48
code/VideoAccess-VCMP/api/app/lib/controllers/status/alarm.js

@ -6,14 +6,19 @@ async function record (ctx) {
const { models } = ctx.fs.dc; const { models } = ctx.fs.dc;
const { statusCode, description = '', platform = 'yingshi', serialNo, channelNo } = ctx.request.body; const { statusCode, description = '', platform = 'yingshi', serialNo, channelNo } = ctx.request.body;
let statusRes = await models.CameraStatus.findOne({ // statusCode == 0 是自动恢复
const isRestore = statusCode == 0
let statusRes = isRestore ? null :
await models.CameraStatus.findOne({
where: { where: {
status: statusCode, status: statusCode,
platform, platform,
} }
}) })
let alarmRes = null; let alarmRes = null;
if (!statusRes) { if (!statusRes && !isRestore) {
// 没有这种告警状态就新建一个
statusRes = await models.CameraStatus.create({ statusRes = await models.CameraStatus.create({
platform: platform, platform: platform,
status: statusCode, status: statusCode,
@ -21,26 +26,43 @@ async function record (ctx) {
forbidden: false, forbidden: false,
}) })
} else { } else {
alarmRes = await models.CameraStatusAlarm.findOne({ let findWhere = {
where: { confirmTime: null,
statusId: statusRes.id,
description,
confirm: null,
serialNo, serialNo,
channelNo, channelNo,
platform, platform,
} }
if (isRestore) {
} else {
findWhere.description = description
}
if (statusRes) {
findWhere.statusId = statusRes.id
}
alarmRes = await models.CameraStatusAlarm[isRestore ? 'findAll' : 'findOne']({
where: findWhere
}) })
} }
if (alarmRes) { if (
await models.CameraStatusAlarm.update({ (!isRestore && alarmRes)
updateTime: moment().format() || (isRestore && alarmRes && alarmRes.length)
}, { ) {
let updateD = {
updateTime: moment().format(),
confirmTime: moment().format(),
}
if (isRestore) {
updateD.autoRestore = true
}
await models.CameraStatusAlarm.update(updateD, {
where: { where: {
id: alarmRes.id id: {
$in: isRestore ? alarmRes.map(a => a.id) : [alarmRes.id]
}
} }
}) })
} else { } else if (!isRestore) {
alarmRes = await models.CameraStatusAlarm.create({ alarmRes = await models.CameraStatusAlarm.create({
statusId: statusRes.id, statusId: statusRes.id,
description, description,

9
code/VideoAccess-VCMP/api/app/lib/models/camera_status_alarm.js

@ -99,6 +99,15 @@ module.exports = dc => {
primaryKey: false, primaryKey: false,
field: "platform", field: "platform",
autoIncrement: false autoIncrement: false
},
autoRestore: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: false,
comment: "是否自动恢复的",
primaryKey: false,
field: "auto_restore",
autoIncrement: false
} }
}, { }, {
tableName: "camera_status_alarm", tableName: "camera_status_alarm",

6
code/VideoAccess-VCMP/api/sequelize-automate.config.js

@ -1,11 +1,11 @@
module.exports = { module.exports = {
// 数据库配置 与 sequelize 相同 // 数据库配置 与 sequelize 相同
dbOptions: { dbOptions: {
database: 'video_access', database: 'video_access-dev',
username: 'postgres', username: 'postgres',
password: '123', password: '123',
dialect: 'postgres', dialect: 'postgres',
host: '10.8.30.32', host: '10.8.30.166',
port: 5432, port: 5432,
define: { define: {
underscored: false, underscored: false,
@ -26,7 +26,7 @@ module.exports = {
dir: './app/lib/models', // 指定输出 models 文件的目录 dir: './app/lib/models', // 指定输出 models 文件的目录
typesDir: 'models', // 指定输出 TypeScript 类型定义的文件目录,只有 TypeScript / Midway 等会有类型定义 typesDir: 'models', // 指定输出 TypeScript 类型定义的文件目录,只有 TypeScript / Midway 等会有类型定义
emptyDir: false, // !!! 谨慎操作 生成 models 之前是否清空 `dir` 以及 `typesDir` emptyDir: false, // !!! 谨慎操作 生成 models 之前是否清空 `dir` 以及 `typesDir`
tables: ['camera_status_alarm_camera',], // 指定生成哪些表的 models,如 ['user', 'user_post'];如果为 null,则忽略改属性 tables: ['camera_status_alarm',], // 指定生成哪些表的 models,如 ['user', 'user_post'];如果为 null,则忽略改属性
skipTables: [], // 指定跳过哪些表的 models,如 ['user'];如果为 null,则忽略改属性 skipTables: [], // 指定跳过哪些表的 models,如 ['user'];如果为 null,则忽略改属性
tsNoCheck: false, // 是否添加 `@ts-nocheck` 注释到 models 文件中 tsNoCheck: false, // 是否添加 `@ts-nocheck` 注释到 models 文件中
ignorePrefix: [], // 生成的模型名称忽略的前缀,因为 项目中有以下表名是以 t_ 开头的,在实际模型中不需要, 可以添加多个 [ 't_data_', 't_',] ,长度较长的 前缀放前面 ignorePrefix: [], // 生成的模型名称忽略的前缀,因为 项目中有以下表名是以 t_ 开头的,在实际模型中不需要, 可以添加多个 [ 't_data_', 't_',] ,长度较长的 前缀放前面

5
code/VideoAccess-VCMP/script/1.3.4/schema/1.alert_tables.sql

@ -0,0 +1,5 @@
alter table camera_status_alarm
add auto_restore bool default false;
comment on column camera_status_alarm.auto_restore is '是否自动恢复的';
Loading…
Cancel
Save