diff --git a/code/VideoAccess-VCMP/api/app/lib/controllers/status/alarm.js b/code/VideoAccess-VCMP/api/app/lib/controllers/status/alarm.js index 894aa48..d22ce79 100644 --- a/code/VideoAccess-VCMP/api/app/lib/controllers/status/alarm.js +++ b/code/VideoAccess-VCMP/api/app/lib/controllers/status/alarm.js @@ -6,14 +6,19 @@ async function record (ctx) { const { models } = ctx.fs.dc; const { statusCode, description = '', platform = 'yingshi', serialNo, channelNo } = ctx.request.body; - let statusRes = await models.CameraStatus.findOne({ - where: { - status: statusCode, - platform, - } - }) + // statusCode == 0 是自动恢复 + + const isRestore = statusCode == 0 + let statusRes = isRestore ? null : + await models.CameraStatus.findOne({ + where: { + status: statusCode, + platform, + } + }) let alarmRes = null; - if (!statusRes) { + if (!statusRes && !isRestore) { + // 没有这种告警状态就新建一个 statusRes = await models.CameraStatus.create({ platform: platform, status: statusCode, @@ -21,26 +26,43 @@ async function record (ctx) { forbidden: false, }) } else { - alarmRes = await models.CameraStatusAlarm.findOne({ - where: { - statusId: statusRes.id, - description, - confirm: null, - serialNo, - channelNo, - platform, - } + let findWhere = { + confirmTime: null, + serialNo, + channelNo, + platform, + } + if (isRestore) { + + } else { + findWhere.description = description + } + if (statusRes) { + findWhere.statusId = statusRes.id + } + alarmRes = await models.CameraStatusAlarm[isRestore ? 'findAll' : 'findOne']({ + where: findWhere }) } - if (alarmRes) { - await models.CameraStatusAlarm.update({ - updateTime: moment().format() - }, { + if ( + (!isRestore && alarmRes) + || (isRestore && alarmRes && alarmRes.length) + ) { + let updateD = { + updateTime: moment().format(), + confirmTime: moment().format(), + } + if (isRestore) { + updateD.autoRestore = true + } + await models.CameraStatusAlarm.update(updateD, { where: { - id: alarmRes.id + id: { + $in: isRestore ? alarmRes.map(a => a.id) : [alarmRes.id] + } } }) - } else { + } else if (!isRestore) { alarmRes = await models.CameraStatusAlarm.create({ statusId: statusRes.id, description, diff --git a/code/VideoAccess-VCMP/api/app/lib/models/camera_status_alarm.js b/code/VideoAccess-VCMP/api/app/lib/models/camera_status_alarm.js index dc8540c..e6917e7 100644 --- a/code/VideoAccess-VCMP/api/app/lib/models/camera_status_alarm.js +++ b/code/VideoAccess-VCMP/api/app/lib/models/camera_status_alarm.js @@ -99,6 +99,15 @@ module.exports = dc => { primaryKey: false, field: "platform", autoIncrement: false + }, + autoRestore: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: false, + comment: "是否自动恢复的", + primaryKey: false, + field: "auto_restore", + autoIncrement: false } }, { tableName: "camera_status_alarm", diff --git a/code/VideoAccess-VCMP/api/sequelize-automate.config.js b/code/VideoAccess-VCMP/api/sequelize-automate.config.js index 1e04c58..168adda 100644 --- a/code/VideoAccess-VCMP/api/sequelize-automate.config.js +++ b/code/VideoAccess-VCMP/api/sequelize-automate.config.js @@ -1,11 +1,11 @@ module.exports = { // 数据库配置 与 sequelize 相同 dbOptions: { - database: 'video_access', + database: 'video_access-dev', username: 'postgres', password: '123', dialect: 'postgres', - host: '10.8.30.32', + host: '10.8.30.166', port: 5432, define: { underscored: false, @@ -26,7 +26,7 @@ module.exports = { dir: './app/lib/models', // 指定输出 models 文件的目录 typesDir: 'models', // 指定输出 TypeScript 类型定义的文件目录,只有 TypeScript / Midway 等会有类型定义 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,则忽略改属性 tsNoCheck: false, // 是否添加 `@ts-nocheck` 注释到 models 文件中 ignorePrefix: [], // 生成的模型名称忽略的前缀,因为 项目中有以下表名是以 t_ 开头的,在实际模型中不需要, 可以添加多个 [ 't_data_', 't_',] ,长度较长的 前缀放前面 diff --git a/code/VideoAccess-VCMP/script/1.3.4/schema/1.alert_tables.sql b/code/VideoAccess-VCMP/script/1.3.4/schema/1.alert_tables.sql new file mode 100644 index 0000000..3b6ab0b --- /dev/null +++ b/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 '是否自动恢复的'; +