2026-01-30 11:05:00 +08:00
|
|
|
|
-- Database Initialization Script for BLS RCU Action Server
|
2026-03-02 11:47:52 +08:00
|
|
|
|
-- 描述:创建 rcu_action 模式及 rcu_action_events 分区表,用于存储 RCU 通讯日志流水
|
2026-01-30 11:05:00 +08:00
|
|
|
|
|
|
|
|
|
|
CREATE SCHEMA IF NOT EXISTS rcu_action;
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS rcu_action.rcu_action_events (
|
|
|
|
|
|
guid VARCHAR(32) NOT NULL,
|
|
|
|
|
|
ts_ms BIGINT NOT NULL,
|
|
|
|
|
|
write_ts_ms BIGINT NOT NULL,
|
|
|
|
|
|
hotel_id INTEGER NOT NULL,
|
|
|
|
|
|
room_id VARCHAR(32) NOT NULL,
|
|
|
|
|
|
device_id VARCHAR(32) NOT NULL,
|
|
|
|
|
|
direction VARCHAR(10) NOT NULL,
|
|
|
|
|
|
cmd_word VARCHAR(10) NOT NULL,
|
|
|
|
|
|
frame_id INTEGER NOT NULL,
|
|
|
|
|
|
udp_raw TEXT NOT NULL,
|
|
|
|
|
|
action_type VARCHAR(20) NOT NULL,
|
|
|
|
|
|
sys_lock_status SMALLINT,
|
|
|
|
|
|
report_count SMALLINT,
|
|
|
|
|
|
dev_type SMALLINT,
|
|
|
|
|
|
dev_addr SMALLINT,
|
|
|
|
|
|
dev_loop INTEGER,
|
|
|
|
|
|
dev_data INTEGER,
|
|
|
|
|
|
fault_count SMALLINT,
|
|
|
|
|
|
error_type SMALLINT,
|
|
|
|
|
|
error_data SMALLINT,
|
|
|
|
|
|
type_l SMALLINT,
|
|
|
|
|
|
type_h SMALLINT,
|
|
|
|
|
|
details JSONB,
|
|
|
|
|
|
extra JSONB,
|
2026-02-02 19:43:49 +08:00
|
|
|
|
loop_name VARCHAR(255),
|
2026-01-30 11:05:00 +08:00
|
|
|
|
PRIMARY KEY (ts_ms, guid)
|
|
|
|
|
|
) PARTITION BY RANGE (ts_ms);
|
|
|
|
|
|
|
|
|
|
|
|
ALTER TABLE rcu_action.rcu_action_events
|
|
|
|
|
|
ADD COLUMN IF NOT EXISTS device_id VARCHAR(32) NOT NULL DEFAULT '';
|
|
|
|
|
|
|
2026-02-02 19:43:49 +08:00
|
|
|
|
ALTER TABLE rcu_action.rcu_action_events
|
|
|
|
|
|
ADD COLUMN IF NOT EXISTS loop_name VARCHAR(255);
|
|
|
|
|
|
|
2026-01-30 11:05:00 +08:00
|
|
|
|
-- Indexes for performance
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_rcu_action_hotel_id ON rcu_action.rcu_action_events (hotel_id);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_rcu_action_room_id ON rcu_action.rcu_action_events (room_id);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_rcu_action_device_id ON rcu_action.rcu_action_events (device_id);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_rcu_action_direction ON rcu_action.rcu_action_events (direction);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_rcu_action_cmd_word ON rcu_action.rcu_action_events (cmd_word);
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_rcu_action_action_type ON rcu_action.rcu_action_events (action_type);
|
|
|
|
|
|
|
|
|
|
|
|
-- Composite Index for typical query pattern (Hotel + Room + Time)
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_rcu_action_query_main ON rcu_action.rcu_action_events (hotel_id, room_id, ts_ms DESC);
|
2026-03-02 11:47:52 +08:00
|
|
|
|
|
|
|
|
|
|
-- Column Comments
|
|
|
|
|
|
COMMENT ON TABLE rcu_action.rcu_action_events IS 'RCU 通讯日志流水表 - 存储从 Kafka 消费的 RCU 设备上报/下发/ACK 事件';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.guid IS '主键,32位无横线 UUID';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.ts_ms IS '日志产生时间戳(毫秒),同时用作分区键';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.write_ts_ms IS '入库时间戳(毫秒),由后端服务写入时生成';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.hotel_id IS '酒店 ID';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.room_id IS '房间 ID';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.device_id IS 'RCU 设备 ID(主板编号)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.direction IS '数据方向:上报 / 下发';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.cmd_word IS '命令字,如 0x36(状态上报)、0x0F(控制下发/ACK)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.frame_id IS '通讯帧号,用于串联同一次通讯的命令与状态';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.udp_raw IS 'UDP 消息原文(base64 编码)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.action_type IS '记录行为类型:用户操作 / 设备回路状态 / 下发控制 / 0FACK / 无效';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.sys_lock_status IS '系统锁状态:0=未锁定, 1=锁定(仅 0x36 上报)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.report_count IS '本次上报设备数量(对应 device_list 长度)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.dev_type IS '设备类型编号,拆分自 device_list/fault_list/control_list';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.dev_addr IS '设备地址编号';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.dev_loop IS '设备回路编号';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.dev_data IS '设备状态数值(仅 0x36 状态上报)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.fault_count IS '本次故障设备数量(对应 fault_list 长度)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.error_type IS '故障类型:0x01=在线/离线, 0x02=电量, 0x03=电流 等';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.error_data IS '故障内容数据(含义取决于 error_type)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.type_l IS '执行方式(仅 0x0F 下发控制)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.type_h IS '执行内容(仅 0x0F 下发控制)';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.details IS '业务详情 JSONB:存储完整的 device_list / fault_list / control_list';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.extra IS '扩展信息 JSONB:存储上游传入的附加字段';
|
|
|
|
|
|
COMMENT ON COLUMN rcu_action.rcu_action_events.loop_name IS '回路名称:通过 device_id → room_type_id → loop_address 查询获得';
|