feat(alarm): ICC 报警事件订阅与设备报警监控/报警派单 - 重建 device_alarm 表(迁移20261024_icc_event_alarm.sql:alarm_code 唯一、uuid、line 关联、客户、等级、事件标记、alarm_time 等 19 字段与 4 索引)并新建 alarm_dispatch 派单表(15 字段);订阅服务 IccEventSubscribeService 复用 OAuth2 鉴权向 ICC 注册报警事件回调(POST subscribe/mqinfo,monitor 带 token、同名覆盖保活),每 30 分钟保活任务(sys_job 种子);回调 POST /api/icc-event/callback 无鉴权仅 URL token 校验,兼容单条/数组事件解析、按 alarmCode 幂等 upsert、匹配 electric_line.line_code 回填线路客户;新增 GET /api/device-alarms(列表+今日/严重/未派单统计+客户/等级/关键词筛选)与 POST /api/device-alarms/:id/dispatch(AD 派单号、同报警重复派单拦截、电工在岗审核校验、NoticeService 站内通知);GET /api/alarm-dispatches 台账(联电工/客户名);前端设备报警监控页(统计卡/筛选/表格/发起报警派单弹窗/30 秒轮询+严重报警红灯闪烁与 Web Audio 蜂鸣/订阅状态弹窗)与报警派单台账页+路由;菜单 63/64、role_menu、sys_job 种子;同步 db_init/db_seed 与设计文档;端到端验证通过
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
This commit is contained in:
1 parent
c8a4330f3b
commit
44fc9a1d54
24 files changed
+2825
-126
No files matched your search
@@ -88,3 +88,58 @@ electricity_data 表结构重建(ICC 模拟量同步)
|
||||
- 手动同步接口:`POST /api/electricity-data/sync`(JWT+RBAC `device:list`,返回 pulled/inserted/updated/skipped/synced)
|
||||
- 不做前端页面/菜单
|
||||
|
||||
2026-10-24 ICC 报警事件订阅
|
||||
|
||||
`device_alarm`(设备报警信息表)与 `alarm_dispatch`(报警派单信息表)原为旧设计(含 equip_id/building_id/floor_no/location/history_count/fault_type/alarm_date 等与 ICC 事件结构不符的字段),本次按 ICC 平台事件订阅推送的通用事件格式重建。两表均为空表,已 DROP 重建。迁移文件:`database/migrations/20261024_icc_event_alarm.sql`(2026-10-24 已执行到生产库),`database/db_init.sql` 同步更新。
|
||||
|
||||
device_alarm 表(设备报警信息表,ICC 事件订阅)
|
||||
|
||||
| 字段 | 类型 | 键 | 说明 |
|
||||
| :---------- | :------------ | :----- | :-------------------------------------------------- |
|
||||
| id | BIGSERIAL | PK | 自增主键 |
|
||||
| alarm_code | VARCHAR(128) | UNIQUE | ICC 报警编码(幂等键) |
|
||||
| uuid | VARCHAR(128) | | ICC 事件 uuid |
|
||||
| line_id | BIGINT | IDX | 智电线路 ID(→ electric_line,nodeCode/deviceCode 匹配 line_code) |
|
||||
| line_code | VARCHAR(64) | | 线路编码(electric_line.line_code) |
|
||||
| line_name | VARCHAR(128) | | 线路名称 |
|
||||
| customer_id | BIGINT | IDX | 客户 ID(由 line_id 联出) |
|
||||
| node_code | VARCHAR(64) | | 探测器节点编码(info.nodeCode) |
|
||||
| device_code | VARCHAR(64) | | 设备编码(info.deviceCode) |
|
||||
| device_name | VARCHAR(128) | | 设备名称(info.deviceName) |
|
||||
| org_code | VARCHAR(64) | | 组织编码(info.orgCode) |
|
||||
| org_name | VARCHAR(128) | | 组织名称(info.orgName) |
|
||||
| alarm_type | INT | | 报警类型(info.alarmType) |
|
||||
| alarm_grade | SMALLINT | IDX | 报警等级 1/2/3(1 最严重) |
|
||||
| alarm_stat | SMALLINT | | 报警状态(info.alarmStat) |
|
||||
| is_event | BOOLEAN | | 是否事件(info.isEvent) |
|
||||
| alarm_time | TIMESTAMPTZ | IDX | 报警发生时间(info.alarmDate 秒级时间戳) |
|
||||
| alarm_value | NUMERIC(14,4) | | 报警数值(部分事件带值,可空) |
|
||||
| synced_at | TIMESTAMPTZ | | 入库时间 |
|
||||
|
||||
alarm_dispatch 表(报警派单信息表)
|
||||
|
||||
| 字段 | 类型 | 键 | 说明 |
|
||||
| :----------- | :------------ | :----- | :-------------------------------------- |
|
||||
| id | BIGSERIAL | PK | 自增主键 |
|
||||
| dispatch_no | VARCHAR(64) | UNIQUE | 报警派单号(如 AD20261024001,生成规则由后端实现) |
|
||||
| alarm_id | BIGINT | IDX | 报警 ID(→ device_alarm) |
|
||||
| line_id | BIGINT | | 线路 ID |
|
||||
| line_code | VARCHAR(64) | | 线路编码 |
|
||||
| line_name | VARCHAR(128) | | 线路名称 |
|
||||
| customer_id | BIGINT | FK | 客户 ID(→ customer) |
|
||||
| alarm_time | TIMESTAMPTZ | | 报警时间(快照) |
|
||||
| alarm_grade | SMALLINT | | 报警等级(快照) |
|
||||
| fault_desc | TEXT | | 故障事项(报警类型描述) |
|
||||
| dispatcher | VARCHAR(64) | | 派发人(当前登录用户 realName) |
|
||||
| worker_id | BIGINT | IDX | 共享电工 ID(→ worker) |
|
||||
| status | SMALLINT | IDX | 状态:0已派发 1已处理 |
|
||||
| created_at | TIMESTAMPTZ | | 创建时间 |
|
||||
| completed_at | TIMESTAMPTZ | | 完成时间 |
|
||||
|
||||
订阅机制:
|
||||
|
||||
- 回调接口:`POST /api/icc-event/callback`,接收 ICC 平台事件订阅推送的报警事件,按 `alarm_code` 幂等入库 device_alarm(重复事件覆盖更新)
|
||||
- 保活任务:每 30 分钟执行一次(向 ICC 平台上报回调地址,保活事件订阅)
|
||||
- 字段映射:info.nodeCode→node_code、info.deviceCode→device_code、info.deviceName→device_name、info.orgCode→org_code、info.orgName→org_name、info.alarmType→alarm_type、info.alarmGrade→alarm_grade、info.alarmStat→alarm_stat、info.isEvent→is_event、info.alarmDate(秒级时间戳)→alarm_time;line_id/line_code/customer_id 由 nodeCode/deviceCode 匹配 electric_line.line_code 联出
|
||||
- 报警派单:从 device_alarm 派单写入 alarm_dispatch,dispatch_no 生成规则由后端实现(如 AD20261024001)
|
||||
|
||||
Reference in new issue
Block a user