-- ICC 报警事件订阅:按 ICC 平台事件订阅推送的通用事件格式重建 device_alarm / alarm_dispatch -- 两表原为旧设计(equip_id/building_id/floor_no/location/history_count/fault_type/alarm_date 等与 ICC 事件结构不符),现为空表,DROP 重建 DROP TABLE IF EXISTS alarm_dispatch CASCADE; DROP TABLE IF EXISTS device_alarm CASCADE; CREATE TABLE device_alarm ( id BIGSERIAL PRIMARY KEY, alarm_code VARCHAR(128) NOT NULL UNIQUE, -- ICC 报警编码(幂等键) uuid VARCHAR(128), -- ICC 事件 uuid line_id BIGINT, -- 智电线路 ID(→ electric_line,nodeCode/deviceCode 匹配 line_code) line_code VARCHAR(64), -- 线路编码(electric_line.line_code) line_name VARCHAR(128), -- 线路名称 customer_id BIGINT, -- 客户 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, -- 报警等级 1/2/3(1 最严重) alarm_stat SMALLINT, -- 报警状态(info.alarmStat) is_event BOOLEAN DEFAULT FALSE, -- 是否事件(info.isEvent) alarm_time TIMESTAMPTZ, -- 报警发生时间(info.alarmDate 秒级时间戳) alarm_value NUMERIC(14,4), -- 报警数值(部分事件带值,可空) synced_at TIMESTAMPTZ NOT NULL DEFAULT NOW() -- 入库时间 ); COMMENT ON TABLE device_alarm IS '设备报警信息表(ICC 事件订阅)'; CREATE INDEX idx_alarm_time ON device_alarm (alarm_time DESC); CREATE INDEX idx_alarm_line ON device_alarm (line_id); CREATE INDEX idx_alarm_customer ON device_alarm (customer_id); CREATE INDEX idx_alarm_grade ON device_alarm (alarm_grade); CREATE TABLE alarm_dispatch ( id BIGSERIAL PRIMARY KEY, dispatch_no VARCHAR(64) NOT NULL UNIQUE, -- 报警派单号(如 AD20261024001,生成规则由后端实现) alarm_id BIGINT, -- 报警 ID(→ device_alarm) line_id BIGINT, -- 线路 ID line_code VARCHAR(64), -- 线路编码 line_name VARCHAR(128), -- 线路名称 customer_id BIGINT REFERENCES customer(id), -- 客户 ID alarm_time TIMESTAMPTZ, -- 报警时间(快照) alarm_grade SMALLINT, -- 报警等级(快照) fault_desc TEXT, -- 故障事项(报警类型描述) dispatcher VARCHAR(64), -- 派发人(当前登录用户 realName) worker_id BIGINT, -- 共享电工 ID(→ worker) status SMALLINT NOT NULL DEFAULT 0, -- 状态:0已派发 1已处理 created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), completed_at TIMESTAMPTZ ); COMMENT ON TABLE alarm_dispatch IS '报警派单信息表'; CREATE INDEX idx_alarm_disp_status ON alarm_dispatch (status); CREATE INDEX idx_alarm_disp_worker ON alarm_dispatch (worker_id); CREATE INDEX idx_alarm_disp_alarm ON alarm_dispatch (alarm_id);