From 60eeafcf73d926487013650fd3b284c5d508f740 Mon Sep 17 00:00:00 2001 From: XuJiacheng Date: Tue, 27 Jan 2026 19:49:05 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E5=AD=97=E6=AE=B5=20?= =?UTF-8?q?-=20=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE=E5=BA=93schema?= =?UTF-8?q?=E5=92=8C=E6=96=87=E6=A1=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0insert=5F?= =?UTF-8?q?card=E5=92=8Cbright=5Fg=E5=AD=97=E6=AE=B5=E6=94=AF=E6=8C=81=20-?= =?UTF-8?q?=20=E5=90=8C=E6=AD=A5=E6=9B=B4=E6=96=B0heartbeatProcessor.js?= =?UTF-8?q?=E5=92=8CdatabaseManager.js=E4=BB=A5=E6=94=AF=E6=8C=81=E6=96=B0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/db-heartbeat-schema.md | 2 ++ docs/kafka-heartbeat-producer.md | 4 ++++ scripts/db/010_heartbeat_schema.sql | 5 +++++ src/db/databaseManager.js | 9 +++++++++ src/processor/heartbeatProcessor.js | 6 ++++++ 5 files changed, 26 insertions(+) diff --git a/docs/db-heartbeat-schema.md b/docs/db-heartbeat-schema.md index 96d3e6e..040dcd3 100644 --- a/docs/db-heartbeat-schema.md +++ b/docs/db-heartbeat-schema.md @@ -33,6 +33,8 @@ | carbon_state | int2 | 是 | 碳控状态(枚举待定) | | device_count | int2 | 是 | 设备数量/上报设备数量(语义待确认) | | comm_seq | int4 | 是 | 通讯序号(语义待确认) | +| insert_card | int2 | 否 | 是否插卡(整数;可为空;不建索引) | +| bright_g | int2 | 否 | 全局亮度值(整数;可为空;不建索引) | | elec_address | text[] | 否 | 电力设备地址数组(与 voltage[] 等按下标对齐) | | voltage | double precision[] | 否 | 电压数组 | | ampere | double precision[] | 否 | 电流数组 | diff --git a/docs/kafka-heartbeat-producer.md b/docs/kafka-heartbeat-producer.md index 21492f7..bc6844a 100644 --- a/docs/kafka-heartbeat-producer.md +++ b/docs/kafka-heartbeat-producer.md @@ -39,6 +39,8 @@ | extra | object | {"source":"gw","ver":"1.2.3"} | 扩展字段:原文、版本等其他自定义字段 | | electricity | array | [{"address":"add11","voltage":3.2,...}] | 电力设备数组(按原始顺序拆列落库为数组列) | | air_conditioner | array | [{"address":"ac1","state":1,...}] | 空调设备数组(按原始顺序拆列落库为数组列) | +| insert_card | number/int | 1 | 是否插卡(整数,可为空) | +| bright_g | number/int | 80 | 全局亮度值(整数,可为空) | ## 4. JSON 示例 ```json @@ -56,6 +58,8 @@ "carbon_state": 0, "device_count": 1, "comm_seq": 7, + "insert_card": 1, + "bright_g": 80, "electricity": [ { "address": "add11", diff --git a/scripts/db/010_heartbeat_schema.sql b/scripts/db/010_heartbeat_schema.sql index 945f407..a9057f3 100644 --- a/scripts/db/010_heartbeat_schema.sql +++ b/scripts/db/010_heartbeat_schema.sql @@ -28,6 +28,9 @@ CREATE TABLE IF NOT EXISTS heartbeat.heartbeat_events ( device_count int2 NOT NULL, comm_seq int4 NOT NULL, + insert_card int2, + bright_g int2, + elec_address text[], air_address text[], voltage double precision[], @@ -80,6 +83,8 @@ ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS speed int2[]; ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS set_temp int2[]; ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS now_temp int2[]; ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS solenoid_valve int2[]; +ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS insert_card int2; +ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS bright_g int2; -- 指定索引 CREATE INDEX IF NOT EXISTS idx_heartbeat_events_hotel_id ON heartbeat.heartbeat_events (hotel_id); diff --git a/src/db/databaseManager.js b/src/db/databaseManager.js index fd789a9..33d6e90 100644 --- a/src/db/databaseManager.js +++ b/src/db/databaseManager.js @@ -98,6 +98,9 @@ class DatabaseManager { device_count int2 NOT NULL, comm_seq int4 NOT NULL, + insert_card int2, + bright_g int2, + elec_address text[], air_address text[], voltage double precision[], @@ -148,6 +151,8 @@ class DatabaseManager { ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS set_temp int2[]; ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS now_temp int2[]; ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS solenoid_valve int2[]; + ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS insert_card int2; + ALTER TABLE heartbeat.heartbeat_events ADD COLUMN IF NOT EXISTS bright_g int2; CREATE INDEX IF NOT EXISTS idx_heartbeat_events_hotel_id ON heartbeat.heartbeat_events (hotel_id); CREATE INDEX IF NOT EXISTS idx_heartbeat_events_power_state ON heartbeat.heartbeat_events (power_state); @@ -413,6 +418,8 @@ class DatabaseManager { 'carbon_state', 'device_count', 'comm_seq', + 'insert_card', + 'bright_g', 'elec_address', 'air_address', 'voltage', @@ -445,6 +452,8 @@ class DatabaseManager { e.carbon_state, e.device_count, e.comm_seq, + e.insert_card ?? null, + e.bright_g ?? null, Array.isArray(e.elec_address) ? e.elec_address : null, Array.isArray(e.air_address) ? e.air_address : null, Array.isArray(e.voltage) ? e.voltage : null, diff --git a/src/processor/heartbeatProcessor.js b/src/processor/heartbeatProcessor.js index a32dae8..ce1467f 100644 --- a/src/processor/heartbeatProcessor.js +++ b/src/processor/heartbeatProcessor.js @@ -512,6 +512,8 @@ class HeartbeatProcessor { carbon_state: pick(['carbon_state', 'carbonState', 'CarbonState']), device_count: pick(['device_count', 'deviceCount', 'DeviceCount']), comm_seq: pick(['comm_seq', 'commSeq', 'CommSeq']), + insert_card: pick(['insert_card', 'insertCard', 'InsertCard']), + bright_g: pick(['bright_g', 'brightG', 'BrightG']), extra: pick(['extra', 'Extra']), electricity: pick(['electricity', 'Electricity']), air_conditioner: pick(['air_conditioner', 'airConditioner', 'AirConditioner']), @@ -563,6 +565,8 @@ class HeartbeatProcessor { normalized.carbon_state = toIntOrUndefined(normalized.carbon_state); normalized.device_count = toIntOrUndefined(normalized.device_count); normalized.comm_seq = toIntOrUndefined(normalized.comm_seq); + normalized.insert_card = toIntOrUndefined(normalized.insert_card); + normalized.bright_g = toIntOrUndefined(normalized.bright_g); // 其余未知字段塞进 extra(避免丢信息),但不覆盖显式 extra if (!normalized.extra || typeof normalized.extra !== 'object') { @@ -585,6 +589,8 @@ class HeartbeatProcessor { 'carbon_state','carbonState','CarbonState', 'device_count','deviceCount','DeviceCount', 'comm_seq','commSeq','CommSeq', + 'insert_card','insertCard','InsertCard', + 'bright_g','brightG','BrightG', 'extra','Extra', 'electricity','Electricity', 'air_conditioner','airConditioner','AirConditioner'