# 企业级能耗管理平台 (EMS) 完整设计方案 (PC端/Web版)

## 1. 系统定位

**“企业能源驾驶舱”** —— 一个基于浏览器的高密度数据监控与管理中心。

* **使用者：** 坐在办公室的能源经理、运维主管、财务人员、系统管理员。
* **核心场景：** 全局监控、远程控制、报表分析、设备接入配置、电子台账管理。

---

## 2. 总体逻辑架构

采用 **边缘接入层 -> 核心服务层 -> Web管理层** 的三层架构。

### 2.1 Web前端层 (PC Only)

* **技术栈:** Vue 3 + TypeScript + Element Plus + ECharts + AntV (图关联分析)。
* **交互风格:** Admin Dashboard (左右布局)，支持多Tab页签，支持大屏模式 (DataV)。

### 2.2 核心服务层 (Backend)

* **资源与物联 (Resource):** 负责设备抽象、驱动适配 (HA/PLC)。
* **计算引擎 (Compute):** 负责虚实结合的能耗计算、实时报警判断。
* **运维与日志 (O&M):** 负责告警分发、操作审计、电子巡检台账。
* **系统安全 (IAM):** 负责RBAC权限、数据隔离 (Data Scope)。

### 2.3 边缘接入层 (Edge)

* **协议适配:** Modbus/TCP, HTTP, MQTT, WebSocket (HA)。

---

## 3. 功能模块详细设计

### 模块一：资源与物联中心 (Resource & IoT)


#### 1.1 数据源配置

* 管理 HA 实例、PLC 网关、HTTP 数据源。
* 功能：新增、编辑、连接测试、立即同步。

#### 1.2 设备管理

* **预过滤 (Pre-filter):** 后端自动清洗 `automation`, `script` 等垃圾实体。
* **交互式列表:**
* 左侧：待接入设备列表（支持 Shift 多选）。
* 底部工具栏：**批量操作**。
* `批量设为虚拟计量` -> 输入额定功率 (15W)。
* `批量关联空间` -> 弹出空间树选择。


* **复合实体聚合:** 在详情弹窗中，手动或自动勾选主实体 (`switch`) 对应的传感器 (`sensor.power`, `sensor.temp`)。



#### 1.3 空间拓扑管理

* **界面:** 左侧树状结构 (园区-楼-层-房)，右侧画布或列表。
* **操作:** 拖拽设备到房间，或者将“未分配设备”批量划入房间。

---

### 模块二：监控与控制中心 (Monitoring & Control)


#### 2.1 综合态势大屏 (Dashboard)

* **GIS/平面图:** 展示园区/楼层能耗热力图。
* **关键指标:** 今日总能耗、实时总功率、当前告警数、设备在线率。
* **实时曲线:** 叠加显示 `实测功率` 与 `虚拟计算功率` 的趋势。

#### 2.2 设备集控视图 (SCADA Lite)

* **列表模式:** 高密度表格，显示 `位置 | 设备名 | 状态 | 电流 | 功率 | 温度 | 操作`。
* **操作:** 远程开关控制 (记录操作日志)。
* **卡片模式:** 适合展示空调等复杂设备，显示面板读数。

#### 2.3 实时告警台 (Alarm Console)

* **界面:** 类似邮件收件箱，左侧是未处理告警列表，右侧是详情。
* **功能:**
* **声音提醒:** 浏览器播放报警音。
* **操作:** [确认(Ack)] / [清除] / [查看关联设备]。
* **告警类型:** 离线、过载、过热、虚实偏差过大。



---

### 模块三：能耗分析引擎 (Analytics Engine)


#### 3.1 统计报表

* **时间维度:** 日/周/月/年报表，支持同比/环比分析。
* **空间维度:** 按楼宇、按部门排名能耗。
* **分项计量:** 照明、空凋、动力、特殊用电 (通过设备类型标签聚合)。

#### 3.2 损耗与能效分析

* **线路损耗:** `楼层总表 - Σ(房间设备)`。以柱状图显示每月“未知损耗”最大的楼层。
* **虚拟运行分析:** 统计虚拟设备的“开启时长”，分析是否存在下班未关灯情况。

---

### 模块四：运维台账与审计 (O&M Ledger)


#### 4.1 巡检台账 (Inspection Ledger)

* **场景:** 运维人员拿纸质单巡检回来，或者抱着笔记本电脑去巡检。
* **功能:**
* **批量录入:** 列表显示所有设备，运维人员在“状态”列批量勾选“正常”，对异常设备单独备注。
* **功率校准:** 在台账中可以直接修正虚拟设备的 `额定功率`，系统自动更新计算参数。



#### 4.2 操作审计日志 (Operation Log)

* **功能:** 记录所有“写操作”。
* **内容:** `2023-10-27 10:00:05 | 张三(运维) | 远程关闭 | 301空调 | 成功`。
* **权限:** 结合 Level 4 数据权限，普通用户只能看自己的操作记录。

#### 4.3 同比差异报告

* **功能:** 每日展示 HA/PLC 的配置变更（新增/丢失/改名）。

---

### 模块五：系统设置 (System & Security)

#### 5.1 用户与角色 (RBAC & Data Scope)

* **用户管理:** 用户名、密码、关联部门、关联角色、状态（正常/禁用）。
* **角色管理:** 
    * **基础信息:** 角色名称、角色标识 (Key)、显示顺序。
    * **菜单权限:** 勾选系统菜单树 (Tree Select)。
    * **数据权限 (Data Scope):** 决定用户能看到哪些设备和报表数据。
        * `Level 1 (全部数据)`: 查看所有。
        * `Level 2 (自定义权限)`: 手动勾选指定的**楼宇/园区** (关联 `sys_location`)。
        * `Level 3 (本部门及以下)`: 查看用户所在部门及子部门关联的设备。
        * `Level 4 (仅本人)`: 仅查看分配给自己的设备或自己创建的记录。

* **部门管理:** 组织架构树，支持无限层级。
    * 字段: 部门名称、负责人、联系电话、排序号。

#### 5.2 字典与参数

* **电价配置 (TOU):** 
    * 支持 **分时电价 (Time-of-Use)** 配置。
    * 定义时段: 尖 (Peak)、峰 (High)、平 (Flat)、谷 (Valley)。
    * 示例: `00:00-08:00 (谷)`, `08:00-12:00 (峰)`, `12:00-14:00 (平)`...
    * 设置各时段单价 (元/kWh)。
* **系统配置:** 
    * 平台名称、Logo URL、备案号、默认语言。
    * 数据保留策略 (例如: 历史数据保留365天)。

---

## 4. 数据库设计 (核心精简版)

保留核心业务表，移除移动端相关字段。

```sql
-- 1. 接入源
CREATE TABLE integration_source (
    id UUID PRIMARY KEY,
    name VARCHAR(50),
    driver_type VARCHAR(20), -- HA, MODBUS
    config JSONB,            -- IP, Token
    status VARCHAR(20)
);

-- 2. 设备资产 (核心)
CREATE TABLE device (
    id UUID PRIMARY KEY,
    source_id UUID,
    external_id VARCHAR(100),
    
    name VARCHAR(100),
    original_name VARCHAR(100),
    device_type VARCHAR(50), -- LIGHT, SWITCH
    location_id UUID,        -- 关联空间
    dept_id UUID,            -- 关联部门(可选，用于Level 3权限)
    
    metering_mode VARCHAR(20), -- VIRTUAL, REAL
    rated_power NUMERIC(10,2), -- 额定功率
    attribute_mapping JSONB,   -- 复合实体映射
    
    status VARCHAR(20),        -- NORMAL, MAINTENANCE
    UNIQUE(source_id, external_id)
);

-- 3. 空间拓扑
CREATE TABLE sys_location (
    id UUID PRIMARY KEY,
    parent_id UUID,
    name VARCHAR(50),
    type VARCHAR(20)         -- PARK, BUILDING, FLOOR, ROOM
);

-- 4. 告警记录 (替代工单)
CREATE TABLE alarm_log (
    id UUID PRIMARY KEY,
    device_id UUID,
    type VARCHAR(50),
    content TEXT,
    status VARCHAR(20),      -- ACTIVE, ACKED, RESOLVED
    start_time TIMESTAMP
);

-- 5. 操作日志 (审计)
CREATE TABLE sys_oper_log (
    id UUID PRIMARY KEY,
    user_id UUID,
    action VARCHAR(50),      -- TURN_ON, UPDATE_CONFIG
    target VARCHAR(100),
    result BOOLEAN,
    time TIMESTAMP
);

-- 6. 巡检台账 (手动录入记录)
CREATE TABLE inspection_ledger (
    id UUID PRIMARY KEY,
    device_id UUID,
    inspector_id UUID,       -- 录入人
    status VARCHAR(20),      -- NORMAL, ABNORMAL
    calibrated_power NUMERIC,-- 仅针对虚拟设备，校准后的功率
    check_time TIMESTAMP
);

-- 7. 系统组织架构 & 权限
CREATE TABLE sys_dept (
    id UUID PRIMARY KEY,
    parent_id UUID,
    name VARCHAR(50),
    leader VARCHAR(50),
    phone VARCHAR(20),
    order_num INT
);

CREATE TABLE sys_role (
    id UUID PRIMARY KEY,
    name VARCHAR(50),
    role_key VARCHAR(50),    -- admin, common
    data_scope VARCHAR(20),  -- 1:ALL, 2:CUSTOM, 3:DEPT, 4:SELF
    menu_check_strictly BOOLEAN DEFAULT TRUE,
    status VARCHAR(1)        -- 0:Normal, 1:Disable
);

CREATE TABLE sys_user (
    id UUID PRIMARY KEY,
    dept_id UUID,
    username VARCHAR(50) UNIQUE,
    password VARCHAR(100),
    name VARCHAR(50),
    email VARCHAR(100),
    status VARCHAR(1)        -- 0:Normal, 1:Disable
);

CREATE TABLE sys_user_role (
    user_id UUID,
    role_id UUID,
    PRIMARY KEY(user_id, role_id)
);

-- 角色-部门/地点 数据权限关联 (仅当 data_scope=2 时使用)
CREATE TABLE sys_role_dept (
    role_id UUID,
    dept_id UUID, 
    PRIMARY KEY(role_id, dept_id)
);

-- 8. 系统配置
CREATE TABLE sys_config (
    config_id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    config_key VARCHAR(100) UNIQUE,
    config_value TEXT,
    config_type VARCHAR(10), -- Y/N (System built-in?)
    remark VARCHAR(500)
);

```