feat: 更新项目配置、数据库架构和文档路径

- 将项目文档路径从 project1.md 改为 project_management/project.md
- 启用酒店列表、房间列表和房型列表接口,并扩展启用的酒店ID范围
- 更新项目文档中的字段定义,将多个空调和能耗表字段改为数组类型以支持多设备
- 用新的 room_status_moment.sql 替换 init_db.sql,新增 bright_g 和 agreement_ver 字段,并为空调和能耗表字段使用数组类型,同时添加唯一索引支持 UPSERT
This commit is contained in:
2026-02-10 09:03:18 +08:00
parent a4763b5e30
commit daea483199
4 changed files with 39 additions and 37 deletions

View File

@@ -35,19 +35,19 @@
- 服务状态 service_mask int8 - 服务状态 service_mask int8
- 插卡状态 insert_card int2 (索引) - 插卡状态 insert_card int2 (索引)
- 空调地址 air_address text[] - 空调地址 air_address text[]
- 空调状态 air_state int2 - 空调状态 air_state int2[]
- 空调模型 air_model int2 - 空调模型 air_model int2[]
- 空调风速 air_speed int2 - 空调风速 air_speed int2[]
- 空调设置温度 air_set_temp int2 - 空调设置温度 air_set_temp int2[]
- 房间当前温度 air_now_temp int2 - 房间当前温度 air_now_temp int2[]
- 空调电磁阀状态 air_solenoid_valve int2 - 空调电磁阀状态 air_solenoid_valve int2[]
- 能耗表地址 elec_address text[] - 能耗表地址 elec_address text[]
- 能耗表电压 elec_voltage double precision - 能耗表电压 elec_voltage double precision[]
- 能耗表电流 elec_ampere double precision - 能耗表电流 elec_ampere double precision[]
- 能耗表功率 elec_power double precision - 能耗表功率 elec_power double precision[]
- 当前相位 elec_phase text - 当前相位 elec_phase double precision[]
- 能耗表能耗 elec_energy double precision - 能耗表能耗 elec_energy double precision[]
- 能耗表累计能耗 elec_sum_energy double precision - 能耗表累计能耗 elec_sum_energy double precision[]
- 碳达人状态 carbon_state int2 (索引) - 碳达人状态 carbon_state int2 (索引)
- 回路状态 dev_loops jsonb - 回路状态 dev_loops jsonb
- 碳达人节能累计 energy_carbon_sum double precision - 碳达人节能累计 energy_carbon_sum double precision

View File

@@ -40,24 +40,26 @@ CREATE TABLE IF NOT EXISTS room_status.room_status_moment (
cardless_state INT2, cardless_state INT2,
service_mask INT8, service_mask INT8,
insert_card INT2, insert_card INT2,
bright_g INT2,
agreement_ver TEXT,
-- 空调相关 -- 空调相关
air_address TEXT[], air_address TEXT[],
air_state INT2, air_state INT2[],
air_model INT2, air_model INT2[],
air_speed INT2, air_speed INT2[],
air_set_temp INT2, air_set_temp INT2[],
air_now_temp INT2, air_now_temp INT2[],
air_solenoid_valve INT2, air_solenoid_valve INT2[],
-- 能耗相关 -- 能耗相关
elec_address TEXT[], elec_address TEXT[],
elec_voltage DOUBLE PRECISION, elec_voltage DOUBLE PRECISION[],
elec_ampere DOUBLE PRECISION, elec_ampere DOUBLE PRECISION[],
elec_power DOUBLE PRECISION, elec_power DOUBLE PRECISION[],
elec_phase TEXT, elec_phase DOUBLE PRECISION[],
elec_energy DOUBLE PRECISION, elec_energy DOUBLE PRECISION[],
elec_sum_energy DOUBLE PRECISION, elec_sum_energy DOUBLE PRECISION[],
-- 节能与外设 -- 节能与外设
carbon_state INT2, carbon_state INT2,
@@ -83,6 +85,11 @@ CREATE INDEX IF NOT EXISTS idx_room_status_moment_cardless ON room_status.room_s
CREATE INDEX IF NOT EXISTS idx_room_status_moment_insert_card ON room_status.room_status_moment (insert_card); CREATE INDEX IF NOT EXISTS idx_room_status_moment_insert_card ON room_status.room_status_moment (insert_card);
CREATE INDEX IF NOT EXISTS idx_room_status_moment_carbon ON room_status.room_status_moment (carbon_state); CREATE INDEX IF NOT EXISTS idx_room_status_moment_carbon ON room_status.room_status_moment (carbon_state);
-- 3.1 唯一索引 (支持 UPSERT)
-- 必须在 (hotel_id, room_id, device_id) 上建立唯一约束,才能使用 ON CONFLICT
CREATE UNIQUE INDEX IF NOT EXISTS idx_room_status_unique_device
ON room_status.room_status_moment (hotel_id, room_id, device_id);
-- 4. 示例:创建第一个分区 (hotel_id = 1) -- 4. 示例:创建第一个分区 (hotel_id = 1)
-- 实际部署时,可根据 hotel_id 动态创建分区 -- 实际部署时,可根据 hotel_id 动态创建分区
CREATE TABLE IF NOT EXISTS room_status.room_status_moment_h1 CREATE TABLE IF NOT EXISTS room_status.room_status_moment_h1
@@ -125,6 +132,8 @@ COMMENT ON COLUMN room_status.room_status_moment.elec_phase IS '当前相位';
COMMENT ON COLUMN room_status.room_status_moment.elec_energy IS '能耗表能耗'; COMMENT ON COLUMN room_status.room_status_moment.elec_energy IS '能耗表能耗';
COMMENT ON COLUMN room_status.room_status_moment.elec_sum_energy IS '能耗表累计能耗'; COMMENT ON COLUMN room_status.room_status_moment.elec_sum_energy IS '能耗表累计能耗';
COMMENT ON COLUMN room_status.room_status_moment.carbon_state IS '碳达人状态'; COMMENT ON COLUMN room_status.room_status_moment.carbon_state IS '碳达人状态';
COMMENT ON COLUMN room_status.room_status_moment.bright_g IS '光亮值';
COMMENT ON COLUMN room_status.room_status_moment.agreement_ver IS '协议版本';
COMMENT ON COLUMN room_status.room_status_moment.dev_loops IS '回路状态'; COMMENT ON COLUMN room_status.room_status_moment.dev_loops IS '回路状态';
COMMENT ON COLUMN room_status.room_status_moment.energy_carbon_sum IS '碳达人节能累计'; COMMENT ON COLUMN room_status.room_status_moment.energy_carbon_sum IS '碳达人节能累计';
COMMENT ON COLUMN room_status.room_status_moment.energy_nocard_sum IS '无卡节能累计'; COMMENT ON COLUMN room_status.room_status_moment.energy_nocard_sum IS '无卡节能累计';

View File

@@ -4,13 +4,6 @@ API_BASE_URL=http://www.boonlive-rcu.com:7000/api/values
PORT=3000 PORT=3000
# 数据库配置 (废弃)
#废弃DB_HOST=10.8.8.109
#废弃DB_PORT=5433
#废弃DB_USER=log_admin
#废弃DB_PASSWORD=YourActualStrongPasswordForPostgres!
#废弃DB_NAME=log_platform
# 数据库配置 # 数据库配置
POSTGRES_HOST=10.8.8.109 POSTGRES_HOST=10.8.8.109
POSTGRES_PORT=5433 POSTGRES_PORT=5433
@@ -20,10 +13,10 @@ POSTGRES_PASSWORD=YourActualStrongPasswordForPostgres!
POSTGRES_MAX_CONNECTIONS=2 POSTGRES_MAX_CONNECTIONS=2
POSTGRES_IDLE_TIMEOUT_MS=30000 POSTGRES_IDLE_TIMEOUT_MS=30000
# 启用的酒店ID列表 # 启用的酒店ID列表
ENABLED_HOTEL_IDS=1085,2100-2316 ENABLED_HOTEL_IDS=1001,1068,1085,1865,2000-2400
# 接口启用配置 (true/false) # 接口启用配置 (true/false)
ENABLE_API_HOTEL_LIST=false # 酒店列表 ENABLE_API_HOTEL_LIST=true # 酒店列表
ENABLE_API_HOST_LIST=false # 房间列表 ENABLE_API_HOST_LIST=true # 房间列表
ENABLE_API_ROOM_TYPE_INFO=false # 房型列表 ENABLE_API_ROOM_TYPE_INFO=true # 房型列表
ENABLE_API_ROOM_TYPE_MODAL_INFO=false # 回路列表 ENABLE_API_ROOM_TYPE_MODAL_INFO=false # 回路列表

View File

@@ -8,7 +8,7 @@ const fs = require('fs');
const path = require('path'); const path = require('path');
const { query, close } = require('../db/utils'); // Changed from db, all, close const { query, close } = require('../db/utils'); // Changed from db, all, close
const mdPath = path.resolve(__dirname, '../../../project1.md'); // Adjust relative path to e:\Project_Class\BLS\Web_BLS_SQL\project1.md const mdPath = path.resolve(__dirname, '../../../project_management/project.md'); // Adjust relative path to e:\Project_Class\BLS\Web_BLS_SQL_Temp\project_management\project.md
const endpoints = parseApiEndpoints(mdPath); const endpoints = parseApiEndpoints(mdPath);
const stats = { const stats = {