|
|
@@ -1,5636 +0,0 @@
|
|
|
-# 虚拟电厂平台接口文档
|
|
|
-
|
|
|
-| 项目 | 内容 |
|
|
|
-|------|------|
|
|
|
-| 文档名称 | 虚拟电厂平台接口文档 |
|
|
|
-| 文档版本 | V1.0.3 |
|
|
|
-| 编制依据 | 《API设计文档0304.md》《虚拟电厂平台详细设计文档 V1.0》《虚拟电厂平台数据库设计文档 V1.1》 |
|
|
|
-| 参考规范 | DLT 1867—2024、《虚拟电厂运管管理平台与虚拟电厂信息交互规范》(2025-12-17) |
|
|
|
-| 编制日期 | 2026-06-23 |
|
|
|
-| 更新日期 | 2026-07-04 |
|
|
|
-| 文档状态 | 已对齐 service-vpp 运管平台联调实现(V1.0.3,新增邀约管理接口) |
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 目录
|
|
|
-
|
|
|
-- [1. 概述](#1-概述)
|
|
|
- - [1.4 数据存储与接口映射](#14-数据存储与接口映射)
|
|
|
-- [2. 内部 REST API(Web/移动端)](#2-内部-rest-apiweb移动端)
|
|
|
- - [2.1 通用规范](#21-通用规范)
|
|
|
- - [2.1.7 通用审计与租户字段](#217-通用审计与租户字段)
|
|
|
- - [2.2 认证授权](#22-认证授权)
|
|
|
- - [2.3 首页与看板](#23-首页与看板)
|
|
|
- - [2.4 客户管理](#24-客户管理)
|
|
|
- - [2.5 合同管理](#25-合同管理)
|
|
|
- - [2.6 资源管理](#26-资源管理)
|
|
|
- - [2.6.6 可调能力评估](#266-可调能力评估)
|
|
|
- - [2.7 运行监控](#27-运行监控)
|
|
|
- - [2.8 告警管理](#28-告警管理)
|
|
|
- - [2.9 需求响应](#29-需求响应)
|
|
|
- - [2.10 结算管理](#210-结算管理)
|
|
|
- - [2.11 信息报送](#211-信息报送)
|
|
|
- - [2.12 统计报表与数据分析](#212-统计报表与数据分析)
|
|
|
- - [2.13 系统管理](#213-系统管理)
|
|
|
- - [2.14 移动端专用](#214-移动端专用)
|
|
|
- - [2.15 运管平台主动对接(Web 管理)](#215-运管平台主动对接web-管理)
|
|
|
-- [3. 运管平台对接 API(UN/DN)](#3-运管平台对接-apiundn)
|
|
|
- - [3.1 交互概述](#31-交互概述)
|
|
|
- - [3.2 安全机制](#32-安全机制)
|
|
|
- - [3.3 通用服务](#33-通用服务)
|
|
|
- - [3.4 注册服务](#34-注册服务)
|
|
|
- - [3.5 询问服务(Poll)](#35-询问服务poll)
|
|
|
- - [3.6 报告服务](#36-报告服务)
|
|
|
- - [3.7 事件与参与服务](#37-事件与参与服务)
|
|
|
- - [3.8 信息对象服务(车网互动)](#38-信息对象服务车网互动)
|
|
|
- - [3.9 UN 侧错误码](#39-un-侧错误码)
|
|
|
- - [3.10 平台实现与配置(service-vpp)](#310-平台实现与配置service-vpp)
|
|
|
-- [4. 外部监管报送接口](#4-外部监管报送接口)
|
|
|
-- [5. 附录](#5-附录)
|
|
|
- - [5.4 内部 API 与数据表映射](#54-内部-api-与数据表映射节选)
|
|
|
- - [5.6 UN 联调 JSON 样例](#56-un-联调-json-样例)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 1. 概述
|
|
|
-
|
|
|
-### 1.1 接口体系
|
|
|
-
|
|
|
-本平台接口分为三类:
|
|
|
-
|
|
|
-| 类型 | 调用方向 | 协议 | 用途 |
|
|
|
-|------|----------|------|------|
|
|
|
-| 内部 REST API | 前端/移动端 → 平台后端 | HTTPS + JSON + JWT | 业务管理、监控、运营 |
|
|
|
-| 运管平台 API(DN) | UN ↔ DN | HTTPS + JSON + 国密 SM2/SM3 | 注册、数据上报、需求响应 |
|
|
|
-| 监管报送 API | 平台 → 外部机构 | HTTPS/文件 | 信息报送 |
|
|
|
-
|
|
|
-### 1.2 环境地址
|
|
|
-
|
|
|
-| 环境 | 平台地址(示例) | 内部 API 前缀 | 运管平台 DN 地址(示例) |
|
|
|
-|------|------------------|---------------|--------------------------|
|
|
|
-| 开发 | `http://192.168.10.151` | `/prod-api/service-vpp` | `http://{内网IP}:{PORT}` |
|
|
|
-| 测试 | `https://test.example.com` | `/prod-api/service-vpp` | 联调时向 UN 提供公网 IP+端口 |
|
|
|
-| 生产 | `https://vpp.example.com` | `/prod-api/service-vpp` | 联调时向 UN 提供公网 IP+端口 |
|
|
|
-
|
|
|
-### 1.3 路径与版本策略
|
|
|
-
|
|
|
-与《API设计文档0304.md》保持一致,内部 REST API 采用 **网关 + 服务模块** 路径格式:
|
|
|
-
|
|
|
-| 层级 | 格式 | 示例 |
|
|
|
-|------|------|------|
|
|
|
-| 网关前缀 | `/prod-api` | 统一 API 网关入口 |
|
|
|
-| 服务模块 | `/service-vpp` | 虚拟电厂微服务标识 |
|
|
|
-| 业务路径 | `/{module}/{resource}[/{id}][/action]` | `/alarm/rule`、`/customer/access` |
|
|
|
-
|
|
|
-**完整示例**:`GET /prod-api/service-vpp/customer?current=1&size=10`
|
|
|
-
|
|
|
-- 运管平台(UN/DN)接口路径不变:服务名即路径,如 `/TokenRequest`、`/Poll`
|
|
|
-- 内部 API 破坏性变更通过新增服务版本(如 `service-vpp-v2`)或网关路由版本控制
|
|
|
-
|
|
|
-### 1.4 数据存储与接口映射
|
|
|
-
|
|
|
-内部 REST API 路径格式见 §1.3;持久化按《虚拟电厂平台数据库设计文档 V1.0》落库:
|
|
|
-
|
|
|
-| 接口模块 | 主要数据表 | 说明 |
|
|
|
-|----------|------------|------|
|
|
|
-| 认证/用户/角色/菜单 | `sys_user`、`sys_role`、`sys_menu`、`sys_user_role`、`sys_role_menu` | 沿用 usky-cloud `sys_*` |
|
|
|
-| 系统配置/字典/操作日志 | `sys_config`、`sys_dict_type`、`sys_dict_data`、`sys_oper_log` | 配置键建议 `vpp.` 前缀 |
|
|
|
-| 告警规则 | `rule_engine`、`rule_engine_device`、`rule_engine_condition`、`rule_engine_cron` | 沿用 usky-cloud `rule_*` |
|
|
|
-| 告警记录/统计/通知 | `base_alarm`、`base_alarm_type`、`base_alarm_notice`、`base_alarm_statistic` | 沿用 usky-cloud `base_*` |
|
|
|
-| 设备状态/远程控制 | `dmp_device`、`dmp_device_status`、`dmp_device_command` + `vpp_device_control_log` | 物联网命令写 `dmp_*`,业务摘要写 `vpp_*` |
|
|
|
-| 可调能力评估 | `vpp_site`、`vpp_resource_point`、`vpp_device`、`vpp_dr_*` + TDengine `device_metrics` | `/capability-eval`;曲线经 `service-tsdb` 查询 |
|
|
|
-| 电子档案 | `vpp_file_archive` | VPP 专属;`bizType` + `bizId` 关联合同/客户等 |
|
|
|
-| 需求响应/运管 UN | `vpp_dr_*`、`vpp_registration` | VPP 专属;邀约台账 `vpp_dr_invitation`;UN 报文 `account` ↔ `vpp_customer.account_no` |
|
|
|
-
|
|
|
-> 接口 JSON 字段采用 **camelCase**;落库字段为 **snake_case**,由服务端映射。租户隔离统一使用 `tenantId`(对应各表 `tenant_id`)。
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 2. 内部 REST API(Web/移动端)
|
|
|
-
|
|
|
-### 2.1 通用规范
|
|
|
-
|
|
|
-> 本节与《API设计文档0304.md》「通用规范」对齐。
|
|
|
-
|
|
|
-#### 2.1.1 请求头
|
|
|
-
|
|
|
-```
|
|
|
-Content-Type: application/json
|
|
|
-Authorization: Bearer {token}
|
|
|
-```
|
|
|
-
|
|
|
-| Header | 必填 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| `Authorization` | 是(登录接口除外) | `Bearer {token}` |
|
|
|
-| `Content-Type` | 是 | `application/json`(上传接口为 `multipart/form-data`) |
|
|
|
-| `X-Tenant-Id` | 否 | 租户 ID;多租户场景下可由 Token 解析,显式传参时优先 |
|
|
|
-
|
|
|
-#### 2.1.2 统一响应格式
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": {},
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| status | string | 接口调用状态:`SUCCESS` / `FAIL` |
|
|
|
-| code | int | 业务状态码 |
|
|
|
-| msg | string | 提示信息 |
|
|
|
-| data | object | 业务数据 |
|
|
|
-| exception | string/null | 异常信息,正常为 null |
|
|
|
-
|
|
|
-#### 2.1.3 响应状态码
|
|
|
-
|
|
|
-| code | 说明 |
|
|
|
-|------|------|
|
|
|
-| 200 | 成功 |
|
|
|
-| 400 | 请求参数错误 |
|
|
|
-| 401 | 未授权,请先登录 |
|
|
|
-| 403 | 无权限访问 |
|
|
|
-| 404 | 资源不存在 |
|
|
|
-| 500 | 服务器内部错误 |
|
|
|
-
|
|
|
-**业务错误码(节选)**:
|
|
|
-
|
|
|
-| code | 说明 |
|
|
|
-|------|------|
|
|
|
-| 1001 | 用户名或密码错误 |
|
|
|
-| 1002 | 账号已被禁用 |
|
|
|
-| 2001 | 客户/资源/设备不存在 |
|
|
|
-| 2002 | 设备已离线 |
|
|
|
-| 3001 | 合同状态不允许当前操作 |
|
|
|
-| 4001 | 告警记录不存在 |
|
|
|
-| 5001 | 系统配置错误 |
|
|
|
-
|
|
|
-#### 2.1.4 分页规范
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| current | int | 否 | 页码,默认 1 |
|
|
|
-| size | int | 否 | 每页数量,默认 10,最大 100 |
|
|
|
-| sortField | string | 否 | 排序字段,如 `create_time` |
|
|
|
-| sortOrder | string | 否 | `asc` / `desc`,默认 `desc` |
|
|
|
-
|
|
|
-**响应 data 结构**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "records": [],
|
|
|
- "total": 100,
|
|
|
- "current": 1,
|
|
|
- "size": 10,
|
|
|
- "totalPages": 10
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| records | array | 当前页数据列表 |
|
|
|
-| total | int | 总记录数 |
|
|
|
-| current | int | 当前页码 |
|
|
|
-| size | int | 每页记录数 |
|
|
|
-| totalPages | int | 总页数 |
|
|
|
-
|
|
|
-#### 2.1.5 时间格式
|
|
|
-
|
|
|
-所有时间字段统一使用 ISO 8601 格式:`YYYY-MM-DDTHH:mm:ss`
|
|
|
-
|
|
|
-示例:`2026-06-23T10:15:00`
|
|
|
-
|
|
|
-#### 2.1.6 接口描述约定
|
|
|
-
|
|
|
-各业务接口采用统一描述要素(与 0304 文档一致):
|
|
|
-
|
|
|
-| 要素 | 说明 |
|
|
|
-|------|------|
|
|
|
-| **接口地址** | `METHOD /prod-api/service-vpp/...` |
|
|
|
-| **功能描述** | 接口业务用途 |
|
|
|
-| **请求参数** | Query / Body 字段表或 JSON 示例 |
|
|
|
-| **响应示例** | 含 `status`/`code`/`msg`/`data` 的完整 JSON |
|
|
|
-| **字段说明** | 关键字段与数据表映射(如有) |
|
|
|
-
|
|
|
-#### 2.1.7 通用审计与租户字段
|
|
|
-
|
|
|
-VPP 业务实体(`vpp_*` 表)在列表/详情响应中可能包含以下公共字段:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| tenantId | int | 租户 ID,多租户隔离 | tenant_id |
|
|
|
-| createTime | string | 创建时间(ISO 8601) | create_time |
|
|
|
-| updateTime | string | 更新时间(ISO 8601) | update_time |
|
|
|
-| createdBy | string | 创建人账号(≤30 字符) | created_by |
|
|
|
-| updatedBy | string | 更新人账号 | updated_by |
|
|
|
-| deleteFlag | int | 删除标识:0 未删除 / 1 已删除 | delete_flag |
|
|
|
-| deletedAt | string/null | 软删除时间,未删除时为 null | deleted_at |
|
|
|
-
|
|
|
-> 列表查询默认过滤 `deleteFlag=0`;软删除接口设置 `deleteFlag=1` 并写入 `deletedAt`。
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.2 认证授权
|
|
|
-
|
|
|
-#### 2.2.1 用户登录
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/auth/login`
|
|
|
-
|
|
|
-**功能描述**:用户登录,返回 Token 与权限信息。
|
|
|
-
|
|
|
-**权限**:公开
|
|
|
-
|
|
|
-**请求体**(映射 `sys_user`):
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| username | string | 是 | 用户账号(sys_user.user_name) |
|
|
|
-| password | string | 是 | 登录密码 |
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "username": "operator01",
|
|
|
- "password": "******"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**(对应 `sys_user` + `sys_role`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "登录成功",
|
|
|
- "data": {
|
|
|
- "token": "eyJhbGciOiJIUzI1NiJ9...",
|
|
|
- "refreshToken": "eyJhbGciOiJIUzI1NiJ9...",
|
|
|
- "expiresIn": 7200,
|
|
|
- "user": {
|
|
|
- "userId": 1001,
|
|
|
- "userName": "operator01",
|
|
|
- "nickName": "张三",
|
|
|
- "phonenumber": "13800138000",
|
|
|
- "deptId": 101,
|
|
|
- "tenantId": 1,
|
|
|
- "status": "0",
|
|
|
- "roles": [
|
|
|
- { "roleId": 10, "roleName": "运营人员", "roleKey": "vpp:operator" }
|
|
|
- ],
|
|
|
- "permissions": ["dashboard:view", "alarm:manage"]
|
|
|
- }
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-> `permissions` 由 `sys_role_menu` 关联的 `sys_menu.perms` 聚合得到。
|
|
|
-
|
|
|
-#### 2.2.2 刷新 Token
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/auth/refresh`
|
|
|
-
|
|
|
-**功能描述**:使用 refreshToken 换取新的 accessToken。
|
|
|
-
|
|
|
-**权限**:公开(需有效 refreshToken)
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| refreshToken | string | 是 | 登录时返回的刷新令牌 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "refreshToken": "eyJhbGciOiJIUzI1NiJ9..."
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "刷新成功",
|
|
|
- "data": {
|
|
|
- "token": "eyJhbGciOiJIUzI1NiJ9...",
|
|
|
- "refreshToken": "eyJhbGciOiJIUzI1NiJ9...",
|
|
|
- "expiresIn": 7200
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.2.3 退出登录
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/auth/logout`
|
|
|
-
|
|
|
-**功能描述**:注销当前会话,使 Token 失效。
|
|
|
-
|
|
|
-**权限**:已登录用户
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "退出成功",
|
|
|
- "data": null,
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.2.4 获取当前用户信息
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/auth/me`
|
|
|
-
|
|
|
-**功能描述**:获取当前登录用户详情及权限列表。
|
|
|
-
|
|
|
-**权限**:已登录用户
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应示例**(对应 `sys_user` + `sys_role` + `sys_menu`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": {
|
|
|
- "userId": 1001,
|
|
|
- "userName": "operator01",
|
|
|
- "nickName": "张三",
|
|
|
- "phonenumber": "13800138000",
|
|
|
- "email": "zhangsan@example.com",
|
|
|
- "deptId": 101,
|
|
|
- "tenantId": 1,
|
|
|
- "status": "0",
|
|
|
- "roles": [
|
|
|
- { "roleId": 10, "roleName": "运营人员", "roleKey": "vpp:operator" }
|
|
|
- ],
|
|
|
- "permissions": ["dashboard:view", "alarm:manage", "customer:view"]
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.3 首页与看板
|
|
|
-
|
|
|
-#### 2.3.1 首页核心指标
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dashboard/summary`
|
|
|
-
|
|
|
-**功能描述**:获取首页核心运营指标汇总。
|
|
|
-
|
|
|
-**权限**:`dashboard:view`
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应 data 字段**(聚合 `vpp_energy_summary_daily`、`vpp_device`、`base_alarm`、`vpp_dr_event`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| todayGenKwh | number | 今日发电量 kWh |
|
|
|
-| todayUseKwh | number | 今日用电量 kWh |
|
|
|
-| todayRevenue | number | 今日收益(元) |
|
|
|
-| onlineDeviceCount | int | 在线设备数 |
|
|
|
-| pendingAlarmCount | int | 待处理告警数 |
|
|
|
-| activeDrEventCount | int | 进行中需求响应事件数 |
|
|
|
-
|
|
|
-**响应 data**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "todayGenKwh": 12580.5,
|
|
|
- "todayUseKwh": 9820.3,
|
|
|
- "todayRevenue": 15680.0,
|
|
|
- "onlineDeviceCount": 128,
|
|
|
- "pendingAlarmCount": 5,
|
|
|
- "activeDrEventCount": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.3.2 GIS 资源分布
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dashboard/map`
|
|
|
-
|
|
|
-**功能描述**:获取资源点地理分布及实时状态,用于 GIS 地图展示。
|
|
|
-
|
|
|
-**权限**:`dashboard:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| resourceType | string | 否 | 资源类型:PV/ESS/EVCS/IND_LOAD/COM_BLDG |
|
|
|
-| runStatus | int | 否 | 运行状态:0离线 1在线 2故障 3维护 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_resource_point` + 实时功率):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| resourceId | long | 资源点 ID |
|
|
|
-| resourceCode | string | 资源编号 |
|
|
|
-| resourceName | string | 资源名称 |
|
|
|
-| resourceType | string | 资源类型 |
|
|
|
-| longitude | number | 经度 |
|
|
|
-| latitude | number | 纬度 |
|
|
|
-| runStatus | int | 运行状态 |
|
|
|
-| activePowerKw | number | 当前有功功率 kW |
|
|
|
-
|
|
|
-**响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "resourceId": 10001,
|
|
|
- "resourceCode": "RES-001",
|
|
|
- "resourceName": "浦东光伏站",
|
|
|
- "resourceType": "PV",
|
|
|
- "longitude": 121.544379,
|
|
|
- "latitude": 31.221517,
|
|
|
- "runStatus": 1,
|
|
|
- "activePowerKw": 320.5
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.3.3 实时曲线
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dashboard/curve`
|
|
|
-
|
|
|
-**功能描述**:获取首页实时/历史曲线数据。
|
|
|
-
|
|
|
-**权限**:`dashboard:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| type | string | 是 | 曲线类型:load(负荷)/ pv(发电)/ soc(储能 SOC) |
|
|
|
-| date | string | 否 | 日期,格式 YYYY-MM-DD,默认当天 |
|
|
|
-| resourceId | long | 否 | 资源点 ID,不传则全站汇总 |
|
|
|
-
|
|
|
-**响应 data**(数据来源 TDengine `vpp_device_metrics`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "type": "pv",
|
|
|
- "date": "2026-06-23",
|
|
|
- "points": [
|
|
|
- { "time": "2026-06-23T00:00:00", "value": 0.0 },
|
|
|
- { "time": "2026-06-23T08:00:00", "value": 120.5 },
|
|
|
- { "time": "2026-06-23T12:00:00", "value": 450.8 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| type | string | 曲线类型 |
|
|
|
-| date | string | 查询日期 |
|
|
|
-| points | array | 时序数据点 |
|
|
|
-| points[].time | string | 时间点(ISO 8601) |
|
|
|
-| points[].value | number | 指标值 |
|
|
|
-
|
|
|
-#### 2.3.4 资源概览统计
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/resource/overview`
|
|
|
-
|
|
|
-**功能描述**:按资源类型统计资源点数量、容量及在线率。
|
|
|
-
|
|
|
-**权限**:`resource:view`
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应 data**(聚合 `vpp_resource_point`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "totalCount": 56,
|
|
|
- "totalCapacityKw": 28500.0,
|
|
|
- "onlineRate": 0.92,
|
|
|
- "byType": [
|
|
|
- { "resourceType": "PV", "count": 20, "capacityKw": 12000.0, "onlineCount": 19 },
|
|
|
- { "resourceType": "ESS", "count": 8, "capacityKw": 5000.0, "onlineCount": 7 },
|
|
|
- { "resourceType": "EVCS", "count": 15, "capacityKw": 6500.0, "onlineCount": 14 },
|
|
|
- { "resourceType": "IND_LOAD", "count": 10, "capacityKw": 4000.0, "onlineCount": 9 },
|
|
|
- { "resourceType": "COM_BLDG", "count": 3, "capacityKw": 1000.0, "onlineCount": 3 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.4 客户管理
|
|
|
-
|
|
|
-#### 2.4.1 提交准入申请
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/customer/access`
|
|
|
-
|
|
|
-**功能描述**:提交客户准入申请。
|
|
|
-
|
|
|
-**权限**:`customer:access:create`
|
|
|
-
|
|
|
-**请求体**(映射 `vpp_customer_access`):
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| accountNo | string | 是 | 电力户号 |
|
|
|
-| customerName | string | 是 | 客户名称 |
|
|
|
-| customerType | int | 是 | 1高压 2低压商用 3居民充电桩 4自有资产 |
|
|
|
-| powerCompany | string | 是 | 供电公司简称 |
|
|
|
-| contractCapacity | number | 是 | 用电容量 kVA/kW |
|
|
|
-| businessLicenseUrl | string | 否 | 营业执照附件 URL |
|
|
|
-| creditStatus | int | 否 | 1正常 2关注 3不良 |
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "accountNo": "3100060012345",
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "customerType": 2,
|
|
|
- "powerCompany": "市北",
|
|
|
- "contractCapacity": 500.0,
|
|
|
- "businessLicenseUrl": "https://oss.example.com/license.pdf",
|
|
|
- "creditStatus": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "提交成功",
|
|
|
- "data": {
|
|
|
- "id": 5001,
|
|
|
- "applyNo": "ACC-202606230001",
|
|
|
- "accessStatus": 0,
|
|
|
- "applyAt": "2026-06-23T09:30:00"
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.4.2 准入申请列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/customer/access`
|
|
|
-
|
|
|
-**功能描述**:分页查询准入申请列表。
|
|
|
-
|
|
|
-**权限**:`customer:access:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| accessStatus | int | 否 | 0待审核 1通过 2驳回 |
|
|
|
-| applyAtStart | string | 否 | 申请开始时间 |
|
|
|
-| applyAtEnd | string | 否 | 申请结束时间 |
|
|
|
-| current | int | 否 | 页码,默认 1 |
|
|
|
-| size | int | 否 | 每页数量,默认 10 |
|
|
|
-
|
|
|
-**响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 5001,
|
|
|
- "applyNo": "ACC-202606230001",
|
|
|
- "accountNo": "3100060012345",
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "customerType": 2,
|
|
|
- "powerCompany": "市北",
|
|
|
- "contractCapacity": 500.0,
|
|
|
- "accessStatus": 0,
|
|
|
- "auditOpinion": null,
|
|
|
- "auditAt": null,
|
|
|
- "customerId": null,
|
|
|
- "applyAt": "2026-06-23T09:30:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_customer_access`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 准入申请 ID | id |
|
|
|
-| applyNo | string | 申请编号 | apply_no |
|
|
|
-| accountNo | string | 电力户号 | account_no |
|
|
|
-| customerName | string | 客户名称 | customer_name |
|
|
|
-| customerType | int | 1高压 2低压商用 3居民充电桩 4自有资产 | customer_type |
|
|
|
-| powerCompany | string | 供电公司简称 | power_company |
|
|
|
-| contractCapacity | number | 用电容量 kVA/kW | contract_capacity |
|
|
|
-| accessStatus | int | 0待审核 1通过 2驳回 | access_status |
|
|
|
-| auditOpinion | string/null | 审核意见 | audit_opinion |
|
|
|
-| auditAt | string/null | 审核时间 | audit_at |
|
|
|
-| customerId | long/null | 通过后关联的客户 ID | customer_id |
|
|
|
-| applyAt | string | 申请时间 | apply_at |
|
|
|
-
|
|
|
-#### 2.4.3 准入审核
|
|
|
-
|
|
|
-**接口地址**:`PUT /prod-api/service-vpp/customer/access/{id}/audit`
|
|
|
-
|
|
|
-**功能描述**:审核准入申请;通过时自动创建 `vpp_customer` 记录。
|
|
|
-
|
|
|
-**权限**:`customer:access:audit`
|
|
|
-
|
|
|
-**路径参数**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| id | long | 是 | 准入申请 ID |
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "passed": true,
|
|
|
- "auditOpinion": "资质齐全,准予准入"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| passed | boolean | 是 | true 通过 / false 驳回 |
|
|
|
-| auditOpinion | string | 否 | 审核意见 |
|
|
|
-
|
|
|
-**响应示例**(通过时):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "审核通过",
|
|
|
- "data": {
|
|
|
- "id": 5001,
|
|
|
- "accessStatus": 1,
|
|
|
- "customerId": 1001,
|
|
|
- "auditAt": "2026-06-23T10:00:00"
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.4.4 客户列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/customer`
|
|
|
-
|
|
|
-**功能描述**:分页查询客户档案列表。
|
|
|
-
|
|
|
-**权限**:`customer:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| customerName | string | 否 | 客户名称(模糊) |
|
|
|
-| accountNo | string | 否 | 电力户号 |
|
|
|
-| lifecycleStatus | int | 否 | 1待准入 2已准入 3已签约 4履约中 5待续约 6已续约 7已解约 |
|
|
|
-| customerType | int | 否 | 客户类型 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_customer`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 1001,
|
|
|
- "accountNo": "3100060012345",
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "customerType": 2,
|
|
|
- "powerCompany": "市北",
|
|
|
- "contractCapacity": 500.0,
|
|
|
- "creditStatus": 1,
|
|
|
- "lifecycleStatus": 4,
|
|
|
- "province": "上海市",
|
|
|
- "city": "上海市",
|
|
|
- "district": "浦东新区",
|
|
|
- "createTime": "2026-06-23T10:00:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_customer`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 客户 ID | id |
|
|
|
-| accountNo | string | 电力户号,全局唯一 | account_no |
|
|
|
-| customerName | string | 客户名称 | customer_name |
|
|
|
-| customerType | int | 客户类型 | customer_type |
|
|
|
-| powerCompany | string | 供电公司简称 | power_company |
|
|
|
-| contractCapacity | number | 用电容量 | contract_capacity |
|
|
|
-| creditStatus | int | 1正常 2关注 3不良 | credit_status |
|
|
|
-| lifecycleStatus | int | 生命周期状态(见 §2.4.4 查询参数) | lifecycle_status |
|
|
|
-| province | string | 省 | province |
|
|
|
-| city | string | 市 | city |
|
|
|
-| district | string | 区 | district |
|
|
|
-| createTime | string | 创建时间 | create_time |
|
|
|
-
|
|
|
-#### 2.4.5 客户详情
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/customer/{id}`
|
|
|
-
|
|
|
-**功能描述**:获取客户详情,含联系人、合同数、资源点数及需求响应能力。
|
|
|
-
|
|
|
-**权限**:`customer:view`
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 1001,
|
|
|
- "accountNo": "3100060012345",
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "customerType": 2,
|
|
|
- "powerCompany": "市北",
|
|
|
- "contractCapacity": 500.0,
|
|
|
- "creditStatus": 1,
|
|
|
- "lifecycleStatus": 4,
|
|
|
- "drNotifyMinutes": 30,
|
|
|
- "drUpCapacityKw": 200.0,
|
|
|
- "drDownCapacityKw": 300.0,
|
|
|
- "province": "上海市",
|
|
|
- "city": "上海市",
|
|
|
- "district": "浦东新区",
|
|
|
- "address": "张江路100号",
|
|
|
- "businessLicenseUrl": "https://oss.example.com/license.pdf",
|
|
|
- "remark": null,
|
|
|
- "contacts": [
|
|
|
- {
|
|
|
- "id": 2001,
|
|
|
- "contactName": "李四",
|
|
|
- "contactPhone": "13800138000",
|
|
|
- "contactEmail": "lisi@example.com",
|
|
|
- "isPrimary": 1,
|
|
|
- "position": "电气负责人"
|
|
|
- }
|
|
|
- ],
|
|
|
- "contractCount": 2,
|
|
|
- "resourceCount": 3,
|
|
|
- "createTime": "2026-06-23T10:00:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**(在列表字段基础上扩展):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| drNotifyMinutes | int | 需求响应提前通知分钟数,默认 30 | dr_notify_minutes |
|
|
|
-| drUpCapacityKw | number | 登记上调能力 kW | dr_up_capacity_kw |
|
|
|
-| drDownCapacityKw | number | 登记下调能力 kW | dr_down_capacity_kw |
|
|
|
-| address | string | 详细地址 | address |
|
|
|
-| businessLicenseUrl | string | 营业执照附件 URL | business_license_url |
|
|
|
-| remark | string/null | 备注 | remark |
|
|
|
-| contacts | array | 联系人列表,元素见 §2.4.7 | vpp_customer_contact |
|
|
|
-| contractCount | int | 关联合同数(聚合) | — |
|
|
|
-| resourceCount | int | 关联资源点数(聚合) | — |
|
|
|
-
|
|
|
-#### 2.4.6 更新客户
|
|
|
-
|
|
|
-**接口地址**:`PUT /prod-api/service-vpp/customer/{id}`
|
|
|
-
|
|
|
-**功能描述**:更新客户档案信息。
|
|
|
-
|
|
|
-**权限**:`customer:edit`
|
|
|
-
|
|
|
-**请求体**(字段均可选,映射 `vpp_customer`):
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------|------------|
|
|
|
-| customerName | string | 否 | 客户名称 | customer_name |
|
|
|
-| creditStatus | int | 否 | 1正常 2关注 3不良 | credit_status |
|
|
|
-| lifecycleStatus | int | 否 | 生命周期状态 | lifecycle_status |
|
|
|
-| drNotifyMinutes | int | 否 | 提前通知分钟数 | dr_notify_minutes |
|
|
|
-| drUpCapacityKw | number | 否 | 上调能力 kW | dr_up_capacity_kw |
|
|
|
-| drDownCapacityKw | number | 否 | 下调能力 kW | dr_down_capacity_kw |
|
|
|
-| province | string | 否 | 省 | province |
|
|
|
-| city | string | 否 | 市 | city |
|
|
|
-| district | string | 否 | 区 | district |
|
|
|
-| address | string | 否 | 详细地址 | address |
|
|
|
-| remark | string | 否 | 备注 | remark |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "creditStatus": 1,
|
|
|
- "lifecycleStatus": 4,
|
|
|
- "drNotifyMinutes": 30,
|
|
|
- "drUpCapacityKw": 200.0,
|
|
|
- "drDownCapacityKw": 300.0,
|
|
|
- "province": "上海市",
|
|
|
- "city": "上海市",
|
|
|
- "district": "浦东新区",
|
|
|
- "address": "张江路100号",
|
|
|
- "remark": "重点客户"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "更新成功",
|
|
|
- "data": { "id": 1001 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.4.7 客户联系人管理
|
|
|
-
|
|
|
-**数据表**:`vpp_customer_contact`
|
|
|
-
|
|
|
-| 方法 | URL | 说明 |
|
|
|
-|------|-----|------|
|
|
|
-| GET | `/prod-api/service-vpp/customer/{id}/contact` | 联系人列表 |
|
|
|
-| POST | `/prod-api/service-vpp/customer/{id}/contact` | 新增联系人 |
|
|
|
-| PUT | `/prod-api/service-vpp/customer/{id}/contact/{contactId}` | 更新联系人 |
|
|
|
-| DELETE | `/prod-api/service-vpp/customer/{id}/contact/{contactId}` | 删除联系人 |
|
|
|
-
|
|
|
-**新增/更新请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| contactName | string | 是 | 联系人姓名 |
|
|
|
-| contactPhone | string | 是 | 联系电话 |
|
|
|
-| contactEmail | string | 否 | 邮箱 |
|
|
|
-| isPrimary | int | 是 | 是否主联系人:0否 1是 |
|
|
|
-| position | string | 否 | 职务 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "contactName": "李四",
|
|
|
- "contactPhone": "13800138000",
|
|
|
- "contactEmail": "lisi@example.com",
|
|
|
- "isPrimary": 1,
|
|
|
- "position": "电气负责人"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**列表响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-[
|
|
|
- {
|
|
|
- "id": 2001,
|
|
|
- "customerId": 1001,
|
|
|
- "contactName": "李四",
|
|
|
- "contactPhone": "13800138000",
|
|
|
- "contactEmail": "lisi@example.com",
|
|
|
- "isPrimary": 1,
|
|
|
- "position": "电气负责人"
|
|
|
- }
|
|
|
-]
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.5 合同管理
|
|
|
-
|
|
|
-#### 2.5.1 合同模板列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/contract/template`
|
|
|
-
|
|
|
-**功能描述**:查询合同模板列表。
|
|
|
-
|
|
|
-**权限**:`contract:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| contractType | int | 否 | 1购售电 2需求响应合作 3聚合代理 4服务代理 5居民充电桩 6自有资产 |
|
|
|
-| isEnabled | int | 否 | 是否启用:0否 1是 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_contract_template`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 10,
|
|
|
- "templateCode": "DR_COOP_V1",
|
|
|
- "templateName": "需求响应合作协议模板",
|
|
|
- "contractType": 2,
|
|
|
- "version": "1.0",
|
|
|
- "fileUrl": "https://oss.example.com/template/dr_coop.docx",
|
|
|
- "variablesJson": { "customerName": "客户名称", "shareRatio": "分成比例" },
|
|
|
- "isEnabled": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_contract_template`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 模板 ID | id |
|
|
|
-| templateCode | string | 模板编码 | template_code |
|
|
|
-| templateName | string | 模板名称 | template_name |
|
|
|
-| contractType | int | 合同类型 | contract_type |
|
|
|
-| version | string | 版本号 | version |
|
|
|
-| fileUrl | string | 模板文件 URL | file_url |
|
|
|
-| variablesJson | object | 模板变量占位符定义 | variables_json |
|
|
|
-| isEnabled | int | 0禁用 1启用 | is_enabled |
|
|
|
-
|
|
|
-#### 2.5.2 创建合同
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/contract`
|
|
|
-
|
|
|
-**功能描述**:创建合同草稿。
|
|
|
-
|
|
|
-**权限**:`contract:create`
|
|
|
-
|
|
|
-**数据表**:`vpp_contract`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "customerId": 1001,
|
|
|
- "templateId": 10,
|
|
|
- "contractType": 2,
|
|
|
- "contractName": "需求响应合作协议",
|
|
|
- "signDate": "2026-01-15",
|
|
|
- "effectiveDate": "2026-01-15",
|
|
|
- "expireDate": "2026-12-31",
|
|
|
- "shareRatio": 70.0,
|
|
|
- "priceJson": {},
|
|
|
- "fileUrl": "https://oss.example.com/contract.pdf"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| customerId | long | 是 | 客户 ID |
|
|
|
-| templateId | long | 否 | 模板 ID |
|
|
|
-| contractType | int | 是 | 合同类型 |
|
|
|
-| contractName | string | 是 | 合同名称 |
|
|
|
-| signDate | string | 否 | 签订日期 YYYY-MM-DD |
|
|
|
-| effectiveDate | string | 否 | 生效日期 |
|
|
|
-| expireDate | string | 否 | 到期日期 |
|
|
|
-| shareRatio | number | 否 | 分成比例% |
|
|
|
-| priceJson | object | 否 | 电价条款 JSON |
|
|
|
-| accountInfoJson | object | 否 | 分成账户信息 |
|
|
|
-| fileUrl | string | 否 | 合同文件 URL |
|
|
|
-| remark | string | 否 | 备注 |
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "创建成功",
|
|
|
- "data": {
|
|
|
- "id": 3001,
|
|
|
- "contractNo": "CT-202601150001",
|
|
|
- "contractStatus": 0
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-> 合同附件除 `fileUrl` 外,建议通过 `POST /prod-api/service-vpp/archive` 写入 `vpp_file_archive`(`bizType=CONTRACT`,`bizId=合同ID`),便于多附件管理。
|
|
|
-
|
|
|
-#### 2.5.3 合同列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/contract`
|
|
|
-
|
|
|
-**功能描述**:分页查询合同列表。
|
|
|
-
|
|
|
-**权限**:`contract:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| contractNo | string | 否 | 合同编号 |
|
|
|
-| customerName | string | 否 | 客户名称(模糊) |
|
|
|
-| accountNo | string | 否 | 电力户号 |
|
|
|
-| contractStatus | int | 否 | 0草稿 1审核中 2已生效 3已到期 4已终止 |
|
|
|
-| contractType | int | 否 | 合同类型 |
|
|
|
-| signDateStart | string | 否 | 签订日期起 |
|
|
|
-| signDateEnd | string | 否 | 签订日期止 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_contract`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 3001,
|
|
|
- "contractNo": "CT-202601150001",
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "contractType": 2,
|
|
|
- "contractName": "需求响应合作协议",
|
|
|
- "contractStatus": 2,
|
|
|
- "signDate": "2026-01-15",
|
|
|
- "effectiveDate": "2026-01-15",
|
|
|
- "expireDate": "2026-12-31",
|
|
|
- "shareRatio": 70.0
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_contract`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 合同 ID | id |
|
|
|
-| contractNo | string | 合同编号 | contract_no |
|
|
|
-| customerId | long | 客户 ID | customer_id |
|
|
|
-| customerName | string | 客户名称(关联) | — |
|
|
|
-| contractType | int | 合同类型 | contract_type |
|
|
|
-| contractName | string | 合同名称 | contract_name |
|
|
|
-| contractStatus | int | 0草稿 1审核中 2已生效 3已到期 4已终止 | contract_status |
|
|
|
-| signDate | string | 签订日期 YYYY-MM-DD | sign_date |
|
|
|
-| effectiveDate | string | 生效日期 | effective_date |
|
|
|
-| expireDate | string | 到期日期 | expire_date |
|
|
|
-| shareRatio | number | 分成比例 % | share_ratio |
|
|
|
-
|
|
|
-#### 2.5.4 合同详情
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/contract/{id}`
|
|
|
-
|
|
|
-**功能描述**:获取合同详情及审核流水。
|
|
|
-
|
|
|
-**权限**:`contract:view`
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 3001,
|
|
|
- "contractNo": "CT-202601150001",
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "templateId": 10,
|
|
|
- "contractType": 2,
|
|
|
- "contractName": "需求响应合作协议",
|
|
|
- "contractStatus": 2,
|
|
|
- "signDate": "2026-01-15",
|
|
|
- "effectiveDate": "2026-01-15",
|
|
|
- "expireDate": "2026-12-31",
|
|
|
- "fileUrl": "https://oss.example.com/contract.pdf",
|
|
|
- "shareRatio": 70.0,
|
|
|
- "priceJson": { "peakPrice": 1.2, "valleyPrice": 0.4 },
|
|
|
- "accountInfoJson": { "bankName": "工商银行", "accountNo": "6222****" },
|
|
|
- "remark": null,
|
|
|
- "auditLogs": [
|
|
|
- {
|
|
|
- "action": 1,
|
|
|
- "opinion": "提交审核",
|
|
|
- "operatorName": "张三",
|
|
|
- "operatedAt": "2026-01-10T10:00:00"
|
|
|
- },
|
|
|
- {
|
|
|
- "action": 2,
|
|
|
- "opinion": "审核通过",
|
|
|
- "operatorName": "李四",
|
|
|
- "operatedAt": "2026-01-12T14:00:00"
|
|
|
- }
|
|
|
- ],
|
|
|
- "archives": [
|
|
|
- { "id": 5001, "fileName": "需求响应合作协议.pdf", "fileUrl": "https://oss.example.com/contract.pdf" }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**(在列表字段基础上扩展):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| templateId | long | 模板 ID | template_id |
|
|
|
-| fileUrl | string | 合同文件 URL | file_url |
|
|
|
-| priceJson | object | 电价条款 JSON | price_json |
|
|
|
-| accountInfoJson | object | 分成账户信息 JSON | account_info_json |
|
|
|
-| remark | string/null | 备注 | remark |
|
|
|
-| auditLogs | array | 审核流水 | vpp_contract_audit_log |
|
|
|
-| auditLogs[].action | int | 1提交 2通过 3驳回 4归档 | action |
|
|
|
-| auditLogs[].opinion | string | 审核意见 | opinion |
|
|
|
-| auditLogs[].operatorName | string | 操作人姓名 | created_by |
|
|
|
-| auditLogs[].operatedAt | string | 操作时间 | create_time |
|
|
|
-| archives | array | 电子档案列表 | vpp_file_archive |
|
|
|
-
|
|
|
-#### 2.5.5 提交合同审核
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/contract/{id}/submit`
|
|
|
-
|
|
|
-**功能描述**:将草稿合同提交审核,`contractStatus` 变更为 1。
|
|
|
-
|
|
|
-**权限**:`contract:submit`
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "提交成功",
|
|
|
- "data": { "id": 3001, "contractStatus": 1 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.5.6 合同审核
|
|
|
-
|
|
|
-**接口地址**:`PUT /prod-api/service-vpp/contract/{id}/audit`
|
|
|
-
|
|
|
-**功能描述**:审核合同,写入 `vpp_contract_audit_log`。
|
|
|
-
|
|
|
-**权限**:`contract:audit`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| passed | boolean | 是 | true 通过 / false 驳回 |
|
|
|
-| opinion | string | 否 | 审核意见 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "passed": true,
|
|
|
- "opinion": "审核通过"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "审核通过",
|
|
|
- "data": { "id": 3001, "contractStatus": 2 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.5.7 合同归档
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/contract/{id}/archive`
|
|
|
-
|
|
|
-**功能描述**:合同归档,写入审核流水(action=4)。
|
|
|
-
|
|
|
-**权限**:`contract:archive`
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "归档成功",
|
|
|
- "data": { "id": 3001 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.6 资源管理
|
|
|
-
|
|
|
-#### 2.6.1 资源点列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/resource`
|
|
|
-
|
|
|
-**功能描述**:分页查询资源点列表。
|
|
|
-
|
|
|
-**权限**:`resource:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| resourceName | string | 否 | 资源名称(模糊) |
|
|
|
-| resourceCode | string | 否 | 资源编号 |
|
|
|
-| resourceType | string | 否 | PV/ESS/EVCS/IND_LOAD/COM_BLDG |
|
|
|
-| district | string | 否 | 区/区域 |
|
|
|
-| runStatus | int | 否 | 0离线 1在线 2故障 3维护 |
|
|
|
-| customerId | long | 否 | 所属客户 ID |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_resource_point`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 2001,
|
|
|
- "resourceCode": "RES-PV-001",
|
|
|
- "resourceName": "浦东光伏站",
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "resourceType": "PV",
|
|
|
- "capacityKw": 500.0,
|
|
|
- "adjustableKw": 0,
|
|
|
- "district": "浦东新区",
|
|
|
- "runStatus": 1,
|
|
|
- "responsePriority": 5,
|
|
|
- "createTime": "2026-01-20T10:00:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_resource_point`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 资源点 ID | id |
|
|
|
-| resourceCode | string | 资源编号,全局唯一 | resource_code |
|
|
|
-| resourceName | string | 资源名称 | resource_name |
|
|
|
-| customerId | long | 所属客户 ID | customer_id |
|
|
|
-| customerName | string | 客户名称(关联查询) | — |
|
|
|
-| resourceType | string | PV/ESS/EVCS/IND_LOAD/COM_BLDG | resource_type |
|
|
|
-| capacityKw | number | 装机容量 kW | capacity_kw |
|
|
|
-| adjustableKw | number | 可调容量 kW | adjustable_kw |
|
|
|
-| district | string | 区/区域 | district |
|
|
|
-| runStatus | int | 0离线 1在线 2故障 3维护 | run_status |
|
|
|
-| responsePriority | int | 响应优先级 1-10 | response_priority |
|
|
|
-| createTime | string | 创建时间 | create_time |
|
|
|
-
|
|
|
-#### 2.6.2 资源看板(实时)
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/resource/board`
|
|
|
-
|
|
|
-**功能描述**:获取资源点实时运行看板数据(Redis 缓存 + TDengine)。
|
|
|
-
|
|
|
-**权限**:`resource:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| resourceType | string | 否 | 资源类型 |
|
|
|
-| district | string | 否 | 区/区域 |
|
|
|
-| runStatus | int | 否 | 运行状态 |
|
|
|
-| customerId | long | 否 | 客户 ID |
|
|
|
-
|
|
|
-**响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "resourceId": 2001,
|
|
|
- "resourceCode": "RES-PV-001",
|
|
|
- "resourceName": "浦东光伏站",
|
|
|
- "resourceType": "PV",
|
|
|
- "runStatus": 1,
|
|
|
- "activePowerKw": 320.5,
|
|
|
- "voltage": 380.0,
|
|
|
- "current": 520.3,
|
|
|
- "soc": null,
|
|
|
- "evChargePowerKw": null,
|
|
|
- "abnormal": false
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| resourceId | long | 资源点 ID |
|
|
|
-| resourceCode | string | 资源编号 |
|
|
|
-| resourceName | string | 资源名称 |
|
|
|
-| resourceType | string | 资源类型 |
|
|
|
-| runStatus | int | 运行状态 |
|
|
|
-| activePowerKw | number | 当前有功功率 kW(实时) |
|
|
|
-| voltage | number | 电压 V |
|
|
|
-| current | number | 电流 A |
|
|
|
-| soc | number/null | 储能 SOC%,非储能资源为 null |
|
|
|
-| evChargePowerKw | number/null | 充电桩充电功率 kW |
|
|
|
-| abnormal | boolean | 是否异常(超阈值/离线超时等) |
|
|
|
-
|
|
|
-#### 2.6.3 新增资源点
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/resource`
|
|
|
-
|
|
|
-**功能描述**:新增资源点及运行参数配置。
|
|
|
-
|
|
|
-**权限**:`resource:create`
|
|
|
-
|
|
|
-**数据表**:`vpp_resource_point` + `vpp_resource_point_config`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------|------------|
|
|
|
-| resourceCode | string | 是 | 资源编号 | resource_code |
|
|
|
-| resourceName | string | 是 | 资源名称 | resource_name |
|
|
|
-| customerId | long | 是 | 所属客户 ID | customer_id |
|
|
|
-| resourceType | string | 是 | PV/ESS/EVCS/IND_LOAD/COM_BLDG | resource_type |
|
|
|
-| capacityKw | number | 是 | 装机容量 kW | capacity_kw |
|
|
|
-| adjustableKw | number | 否 | 可调容量 kW | adjustable_kw |
|
|
|
-| province | string | 否 | 省 | province |
|
|
|
-| city | string | 否 | 市 | city |
|
|
|
-| district | string | 否 | 区/区域 | district |
|
|
|
-| address | string | 否 | 地址 | address |
|
|
|
-| longitude | number | 否 | 经度 | longitude |
|
|
|
-| latitude | number | 否 | 纬度 | latitude |
|
|
|
-| ownerName | string | 否 | 业主名称 | owner_name |
|
|
|
-| contactName | string | 否 | 联系人 | contact_name |
|
|
|
-| contactPhone | string | 否 | 联系电话 | contact_phone |
|
|
|
-| responsePriority | int | 否 | 响应优先级 1-10 | response_priority |
|
|
|
-| config | object | 否 | 运行参数配置,见下表 | vpp_resource_point_config |
|
|
|
-| config.collectIntervalSec | int | 否 | 采集间隔(秒) | collect_interval_sec |
|
|
|
-| config.powerUpperLimit | number | 否 | 功率上限 kW | power_upper_limit |
|
|
|
-| config.powerLowerLimit | number | 否 | 功率下限 kW | power_lower_limit |
|
|
|
-| config.socUpperLimit | number | 否 | SOC 上限 % | soc_upper_limit |
|
|
|
-| config.socLowerLimit | number | 否 | SOC 下限 % | soc_lower_limit |
|
|
|
-| config.offlineTimeoutSec | int | 否 | 离线判定超时(秒) | offline_timeout_sec |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "resourceCode": "RES-PV-001",
|
|
|
- "resourceName": "浦东光伏站",
|
|
|
- "customerId": 1001,
|
|
|
- "resourceType": "PV",
|
|
|
- "capacityKw": 500.0,
|
|
|
- "adjustableKw": 0,
|
|
|
- "province": "上海市",
|
|
|
- "city": "上海市",
|
|
|
- "district": "浦东新区",
|
|
|
- "address": "张江路100号",
|
|
|
- "longitude": 121.544379,
|
|
|
- "latitude": 31.221517,
|
|
|
- "ownerName": "上海某某有限公司",
|
|
|
- "contactName": "李四",
|
|
|
- "contactPhone": "13800138000",
|
|
|
- "responsePriority": 5,
|
|
|
- "config": {
|
|
|
- "collectIntervalSec": 900,
|
|
|
- "powerUpperLimit": 550.0,
|
|
|
- "offlineTimeoutSec": 300
|
|
|
- }
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "创建成功",
|
|
|
- "data": { "id": 2001, "resourceCode": "RES-PV-001" },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.6.4 更新/删除资源点
|
|
|
-
|
|
|
-**GET 资源详情** — `GET /prod-api/service-vpp/resource/{id}`
|
|
|
-
|
|
|
-**响应 data 示例**(`vpp_resource_point` + `vpp_resource_point_config`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 2001,
|
|
|
- "resourceCode": "RES-PV-001",
|
|
|
- "resourceName": "浦东光伏站",
|
|
|
- "customerId": 1001,
|
|
|
- "resourceType": "PV",
|
|
|
- "capacityKw": 500.0,
|
|
|
- "adjustableKw": 0,
|
|
|
- "province": "上海市",
|
|
|
- "city": "上海市",
|
|
|
- "district": "浦东新区",
|
|
|
- "address": "张江路100号",
|
|
|
- "longitude": 121.544379,
|
|
|
- "latitude": 31.221517,
|
|
|
- "ownerName": "上海某某有限公司",
|
|
|
- "contactName": "李四",
|
|
|
- "contactPhone": "13800138000",
|
|
|
- "runStatus": 1,
|
|
|
- "responsePriority": 5,
|
|
|
- "unResourceId": null,
|
|
|
- "config": {
|
|
|
- "collectIntervalSec": 900,
|
|
|
- "powerUpperLimit": 550.0,
|
|
|
- "powerLowerLimit": null,
|
|
|
- "socUpperLimit": null,
|
|
|
- "socLowerLimit": null,
|
|
|
- "offlineTimeoutSec": 300
|
|
|
- },
|
|
|
- "devices": [
|
|
|
- { "id": 3001, "deviceCode": "DEV-INV-001", "deviceName": "1#逆变器", "commStatus": 1 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**(映射 `vpp_resource_point` + `vpp_resource_point_config`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 资源点 ID | id |
|
|
|
-| resourceCode | string | 资源编号 | resource_code |
|
|
|
-| resourceName | string | 资源名称 | resource_name |
|
|
|
-| customerId | long | 所属客户 ID | customer_id |
|
|
|
-| resourceType | string | 资源类型 | resource_type |
|
|
|
-| capacityKw | number | 装机容量 kW | capacity_kw |
|
|
|
-| adjustableKw | number | 可调容量 kW | adjustable_kw |
|
|
|
-| province/city/district/address | string | 地址信息 | province 等 |
|
|
|
-| longitude/latitude | number | 经纬度 | longitude/latitude |
|
|
|
-| ownerName | string | 业主名称 | owner_name |
|
|
|
-| contactName/contactPhone | string | 联系人信息 | contact_name/phone |
|
|
|
-| runStatus | int | 运行状态 | run_status |
|
|
|
-| responsePriority | int | 响应优先级 | response_priority |
|
|
|
-| unResourceId | string/null | 运管平台分路资源 ID | un_resource_id |
|
|
|
-| config | object | 运行参数配置 | vpp_resource_point_config |
|
|
|
-| devices | array | 关联设备列表,元素见 §2.6.5 | vpp_device |
|
|
|
-
|
|
|
-**PUT 更新资源** — `PUT /prod-api/service-vpp/resource/{id}`
|
|
|
-
|
|
|
-请求体字段同新增,均可选。
|
|
|
-
|
|
|
-**DELETE 软删除** — `DELETE /prod-api/service-vpp/resource/{id}`
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "删除成功",
|
|
|
- "data": null,
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.6.5 设备管理
|
|
|
-
|
|
|
-**数据表**:`vpp_device`(关联 `dmp_device`)
|
|
|
-
|
|
|
-| 方法 | URL | 说明 |
|
|
|
-|------|-----|------|
|
|
|
-| GET | `/prod-api/service-vpp/resource/{resourceId}/device` | 设备列表 |
|
|
|
-| POST | `/prod-api/service-vpp/resource/{resourceId}/device` | 新增设备 |
|
|
|
-| PUT | `/prod-api/service-vpp/device/{id}` | 更新设备 |
|
|
|
-| DELETE | `/prod-api/service-vpp/device/{id}` | 软删除 |
|
|
|
-
|
|
|
-**新增/更新请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| deviceCode | string | 是 | 设备编号(与 dmp_device.device_id 一致) |
|
|
|
-| deviceName | string | 是 | 设备名称 |
|
|
|
-| deviceType | string | 是 | INVERTER/PCS/EVCS/METER/Gateway 等 |
|
|
|
-| manufacturer | string | 否 | 厂商 |
|
|
|
-| model | string | 否 | 型号 |
|
|
|
-| ratedPowerKw | number | 否 | 额定功率 kW |
|
|
|
-| gatewayId | string | 否 | IoT 网关标识 |
|
|
|
-| registerDmp | boolean | 否 | 是否同步注册 dmp_device |
|
|
|
-| remark | string | 否 | 备注 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "deviceCode": "DEV-INV-001",
|
|
|
- "deviceName": "1#逆变器",
|
|
|
- "deviceType": "INVERTER",
|
|
|
- "manufacturer": "华为",
|
|
|
- "model": "SUN2000-50KTL",
|
|
|
- "ratedPowerKw": 50.0,
|
|
|
- "registerDmp": true
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**设备列表响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 3001,
|
|
|
- "deviceCode": "DEV-INV-001",
|
|
|
- "deviceName": "1#逆变器",
|
|
|
- "resourceId": 2001,
|
|
|
- "deviceType": "INVERTER",
|
|
|
- "manufacturer": "华为",
|
|
|
- "model": "SUN2000-50KTL",
|
|
|
- "ratedPowerKw": 50.0,
|
|
|
- "commStatus": 1,
|
|
|
- "runStatus": 1,
|
|
|
- "firmwareVersion": "V100R001",
|
|
|
- "lastOnlineAt": "2026-06-23T10:15:00",
|
|
|
- "dmpDeviceId": "DEV-INV-001",
|
|
|
- "dmpDeviceUuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**设备对象关键字段**:
|
|
|
-
|
|
|
-| 字段 | 数据表 | 说明 |
|
|
|
-|------|--------|------|
|
|
|
-| deviceCode | vpp_device.device_code | 业务设备编码 |
|
|
|
-| dmpDeviceId | dmp_device.device_id | 物联网设备 ID(与 deviceCode 通常一致) |
|
|
|
-| dmpDeviceUuid | dmp_device.device_uuid | 物联网 UUID |
|
|
|
-| commStatus | dmp_device_status.device_status | 1 在线 / 2 离线 |
|
|
|
-
|
|
|
-#### 2.6.6 可调能力评估
|
|
|
-
|
|
|
-> **界面映射**:Web「可调能力评估」页(站点筛选、顶部汇总卡片、可调能力曲线、历史响应)。
|
|
|
-> **数据表**:`vpp_site`、`vpp_resource_point`、`vpp_device`、`vpp_dr_participation`、`vpp_dr_event`、`vpp_dr_evaluation`
|
|
|
-> **时序数据**:TDengine `device_metrics`(经 `service-tsdb` Feign 查询,子表 `_{device_uuid}`)
|
|
|
-
|
|
|
-**模块前缀**:`/prod-api/service-vpp/capability-eval`
|
|
|
-
|
|
|
-| 方法 | URL | 说明 |
|
|
|
-|------|-----|------|
|
|
|
-| GET | `/prod-api/service-vpp/capability-eval/summary` | 顶部汇总统计 |
|
|
|
-| GET | `/prod-api/service-vpp/capability-eval/load-curve` | 可调能力曲线(基线 vs 实际负荷) |
|
|
|
-| GET | `/prod-api/service-vpp/capability-eval/history` | 历史响应记录(分页) |
|
|
|
-
|
|
|
-**站点下拉**:复用 `GET /prod-api/service-vpp/site`(§2.6 站点管理)。
|
|
|
-
|
|
|
-**权限**:`resource:view`
|
|
|
-
|
|
|
-##### 2.6.6.1 顶部汇总统计
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/capability-eval/summary`
|
|
|
-
|
|
|
-**功能描述**:按站点(或全部站点)统计总资源/负荷类/储能类/发电类的户数与装机容量,并返回最大上调、最大下调能力。
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| siteId | long | 否 | 站点 ID;不传则统计全部站点 |
|
|
|
-
|
|
|
-**分类规则**:
|
|
|
-
|
|
|
-| category | 说明 | resource_type 映射 |
|
|
|
-|----------|------|------------------|
|
|
|
-| TOTAL | 总资源 | 全部 |
|
|
|
-| LOAD | 负荷类 | IND_LOAD、COM_BLDG、EVCS |
|
|
|
-| STORAGE | 储能类 | ESS |
|
|
|
-| GENERATION | 发电类 | PV |
|
|
|
-
|
|
|
-**最大上下调能力**:
|
|
|
-
|
|
|
-- 优先汇总 TDengine 最新 `up_capacity_kw` / `down_capacity_kw`(在线设备,`vpp_device.device_uuid` 关联子表)
|
|
|
-- 无时序数据时回退 `vpp_resource_point.max_up_kw` / `min_down_kw`(`is_control=1`)
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "siteId": 1,
|
|
|
- "siteName": "示范站点",
|
|
|
- "total": {
|
|
|
- "category": "TOTAL",
|
|
|
- "categoryLabel": "总资源",
|
|
|
- "customerCount": 3,
|
|
|
- "capacityKw": 5500.0
|
|
|
- },
|
|
|
- "load": {
|
|
|
- "category": "LOAD",
|
|
|
- "categoryLabel": "负荷类",
|
|
|
- "customerCount": 3,
|
|
|
- "capacityKw": 3300.0
|
|
|
- },
|
|
|
- "storage": {
|
|
|
- "category": "STORAGE",
|
|
|
- "categoryLabel": "储能类",
|
|
|
- "customerCount": 1,
|
|
|
- "capacityKw": 1100.0
|
|
|
- },
|
|
|
- "generation": {
|
|
|
- "category": "GENERATION",
|
|
|
- "categoryLabel": "发电类",
|
|
|
- "customerCount": 1,
|
|
|
- "capacityKw": 1100.0
|
|
|
- },
|
|
|
- "maxUpKw": 120.0,
|
|
|
- "maxDownKw": 110.0
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| siteId | long | 站点 ID(全部站点时为 null) |
|
|
|
-| siteName | string | 站点名称;全部站点时为「全部站点」 |
|
|
|
-| total / load / storage / generation | object | 分类统计对象 |
|
|
|
-| *.category | string | TOTAL / LOAD / STORAGE / GENERATION |
|
|
|
-| *.categoryLabel | string | 分类中文名 |
|
|
|
-| *.customerCount | int | 户数(站点关联客户去重) |
|
|
|
-| *.capacityKw | number | 装机容量 kW(`capacity_kw` 汇总) |
|
|
|
-| maxUpKw | number | 最大上调能力 kW |
|
|
|
-| maxDownKw | number | 最大下调能力 kW |
|
|
|
-
|
|
|
-##### 2.6.6.2 可调能力曲线
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/capability-eval/load-curve`
|
|
|
-
|
|
|
-**功能描述**:返回指定日期的负荷曲线,用于「可调能力曲线」Tab。每 10 分钟一个点(`00:00` ~ `23:50`),对比基线负荷与实际负荷。
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| siteId | long | 否 | 站点 ID;不传则聚合全部站点资源 |
|
|
|
-| date | string | 否 | 统计日期 `yyyy-MM-dd`,默认当天 |
|
|
|
-
|
|
|
-**数据来源(dataSource)**:
|
|
|
-
|
|
|
-| 值 | 说明 |
|
|
|
-|----|------|
|
|
|
-| tsdb | 从 TDengine 查询实测有功功率并聚合 |
|
|
|
-| mock | 无 TSDB 数据时使用模拟曲线(联调兜底) |
|
|
|
-
|
|
|
-**TSDB 查询说明**:
|
|
|
-
|
|
|
-- 经 `service-tsdb` 的 `RemoteTsdbProxyService.queryHistoryDeviceData` 批量查询
|
|
|
-- 设备标识:`vpp_device.device_uuid`,子表 `_{device_uuid}`
|
|
|
-- 有功功率指标匹配顺序:`active_power` → `totalActivePower` → `totalactivepower` → `activepowera`
|
|
|
-- **实际负荷**:统计日各 10 分钟桶内多设备功率均值之和
|
|
|
-- **基线负荷**:7 日前同时段功率作为参考基线;若基线无数据则与实际负荷一致
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "siteId": 1,
|
|
|
- "siteName": "示范站点",
|
|
|
- "date": "2026-07-07",
|
|
|
- "dataSource": "tsdb",
|
|
|
- "points": [
|
|
|
- {
|
|
|
- "time": "11:40",
|
|
|
- "baselineLoadKw": 907.57,
|
|
|
- "actualLoadKw": 967.65
|
|
|
- },
|
|
|
- {
|
|
|
- "time": "11:50",
|
|
|
- "baselineLoadKw": 912.30,
|
|
|
- "actualLoadKw": 970.12
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| siteId | long | 站点 ID |
|
|
|
-| siteName | string | 站点名称 |
|
|
|
-| date | string | 统计日期 yyyy-MM-dd |
|
|
|
-| dataSource | string | tsdb / mock |
|
|
|
-| points | array | 曲线数据点 |
|
|
|
-| points[].time | string | 时刻 HH:mm |
|
|
|
-| points[].baselineLoadKw | number | 基线负荷 kW |
|
|
|
-| points[].actualLoadKw | number | 实际负荷 kW |
|
|
|
-
|
|
|
-##### 2.6.6.3 历史响应记录
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/capability-eval/history`
|
|
|
-
|
|
|
-**功能描述**:分页查询站点下资源曾参与的需求响应事件,用于「历史响应」Tab,按事件开始时间倒序。
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| siteId | long | 否 | 站点 ID;不传则查全部站点资源参与记录 |
|
|
|
-| current | int | 否 | 页码,默认 1 |
|
|
|
-| size | int | 否 | 每页数量,默认 10,最大 100 |
|
|
|
-
|
|
|
-**响应 data.records 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "records": [
|
|
|
- {
|
|
|
- "eventId": 1,
|
|
|
- "eventCode": "EVT_20260707_001",
|
|
|
- "eventName": "削峰响应",
|
|
|
- "eventType": 1,
|
|
|
- "eventTypeLabel": "削峰",
|
|
|
- "responseType": 1,
|
|
|
- "responseTypeLabel": "日前",
|
|
|
- "startTime": "2026-07-07T14:00:00",
|
|
|
- "endTime": "2026-07-07T16:00:00",
|
|
|
- "targetCapacityKw": 500.0,
|
|
|
- "actualCapacityKw": 480.0,
|
|
|
- "qualifiedRate": 96.0
|
|
|
- }
|
|
|
- ],
|
|
|
- "total": 1,
|
|
|
- "current": 1,
|
|
|
- "size": 10
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| eventId | long | 事件 ID | vpp_dr_event.id |
|
|
|
-| eventCode | string | 事件编码 | vpp_dr_event.event_id |
|
|
|
-| eventName | string | 事件名称 | vpp_dr_event.event_name |
|
|
|
-| eventType | int | 1削峰 2填谷 | vpp_dr_event.event_type |
|
|
|
-| eventTypeLabel | string | 事件类型中文 | — |
|
|
|
-| responseType | int | 1日前 2日内 3秒级 | vpp_dr_event.response_type |
|
|
|
-| responseTypeLabel | string | 响应类型中文 | — |
|
|
|
-| startTime | string | 响应开始时间 | vpp_dr_event.start_time |
|
|
|
-| endTime | string | 响应结束时间 | vpp_dr_event.end_time |
|
|
|
-| targetCapacityKw | number | 目标/出清容量 kW | cleared_capacity_kw 或 target_capacity_kw |
|
|
|
-| actualCapacityKw | number | 实际响应容量 kW | vpp_dr_evaluation.actual_capacity_kw |
|
|
|
-| qualifiedRate | number | 达标率 % | vpp_dr_evaluation.qualified_rate |
|
|
|
-
|
|
|
-> **与 §2.9.3 的区别**:§2.9.3 为**单个 DR 事件**的能力评估(参与前判断);本节为**运营看板级**可调能力评估(按站点汇总资源分类、日负荷曲线与历史参与记录)。
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.7 运行监控
|
|
|
-
|
|
|
-#### 2.7.1 实时监控数据
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/monitor/realtime`
|
|
|
-
|
|
|
-**功能描述**:获取资源点/设备实时监控数据。
|
|
|
-
|
|
|
-**权限**:`monitor:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| resourceId | long | 否 | 资源点 ID(与 deviceId/customerId 三选一或组合) |
|
|
|
-| deviceId | long | 否 | 设备 ID |
|
|
|
-| customerId | long | 否 | 客户 ID,返回该客户下所有资源实时数据 |
|
|
|
-
|
|
|
-**响应 data**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "resourceId": 2001,
|
|
|
- "devices": [
|
|
|
- {
|
|
|
- "deviceId": 3001,
|
|
|
- "deviceCode": "DEV-INV-001",
|
|
|
- "commStatus": 1,
|
|
|
- "runStatus": 1,
|
|
|
- "activePowerKw": 320.5,
|
|
|
- "voltage": 380.0,
|
|
|
- "current": 520.3,
|
|
|
- "soc": null,
|
|
|
- "lastOnlineAt": "2026-06-23T10:15:00.000+08:00"
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.7.2 历史数据查询
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/monitor/history`
|
|
|
-
|
|
|
-**功能描述**:查询设备/资源历史运行数据(TDengine)。
|
|
|
-
|
|
|
-**权限**:`monitor:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| resourceIds | string | 否 | 资源点 ID,逗号分隔 |
|
|
|
-| deviceIds | string | 否 | 设备 ID,逗号分隔 |
|
|
|
-| metrics | string | 是 | 指标名,逗号分隔,如 activePowerKw,voltage,soc |
|
|
|
-| startTime | string | 是 | 开始时间 ISO 8601 |
|
|
|
-| endTime | string | 是 | 结束时间 ISO 8601 |
|
|
|
-| granularity | string | 否 | 粒度:15m/1h/1d,默认 15m |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "deviceId": 3001,
|
|
|
- "deviceCode": "DEV-INV-001",
|
|
|
- "metric": "activePowerKw",
|
|
|
- "granularity": "15m",
|
|
|
- "points": [
|
|
|
- { "time": "2026-06-23T08:00:00", "value": 120.5 },
|
|
|
- { "time": "2026-06-23T08:15:00", "value": 135.2 },
|
|
|
- { "time": "2026-06-23T08:30:00", "value": 148.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.7.3 设备远程控制
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/device/{id}/control`
|
|
|
-
|
|
|
-**功能描述**:向设备下发远程控制指令。
|
|
|
-
|
|
|
-**权限**:`device:control`
|
|
|
-
|
|
|
-**路径参数**:`id` — 设备 ID(`vpp_device.id`)
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "controlType": "START",
|
|
|
- "params": {
|
|
|
- "targetPowerKw": 100
|
|
|
- }
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**controlType 枚举**:`START`、`STOP`、`CONFIG`、`OTA`
|
|
|
-
|
|
|
-**落库说明**:
|
|
|
-
|
|
|
-- 命令下发记录写入 `dmp_device_command`(`device_uuid`、`command_content`、`command_status` 等)。
|
|
|
-- 业务侧摘要写入 `vpp_device_control_log`,可通过 `dmpCommandId` 关联物联网命令记录。
|
|
|
-- 设备在线状态以 `dmp_device_status` 为准(`device_status`:1 在线、2 离线)。
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "指令已下发",
|
|
|
- "data": {
|
|
|
- "controlLogId": 8001,
|
|
|
- "dmpCommandId": "CMD-20260623001",
|
|
|
- "controlResult": 2
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 响应字段 | 说明 |
|
|
|
-|----------|------|
|
|
|
-| controlLogId | vpp_device_control_log.id |
|
|
|
-| dmpCommandId | dmp_device_command 命令 ID |
|
|
|
-| controlResult | 0失败 1成功 2执行中 |
|
|
|
-
|
|
|
-#### 2.7.4 控制日志
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/device/{id}/controlLog`
|
|
|
-
|
|
|
-**功能描述**:查询设备远程控制历史记录。
|
|
|
-
|
|
|
-**权限**:`device:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| controlType | string | 否 | START/STOP/CONFIG/OTA |
|
|
|
-| controlResult | int | 否 | 0失败 1成功 2执行中 |
|
|
|
-| startTime | string | 否 | 操作开始时间 |
|
|
|
-| endTime | string | 否 | 操作结束时间 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_device_control_log`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 8001,
|
|
|
- "deviceId": 3001,
|
|
|
- "controlType": "START",
|
|
|
- "controlParams": { "targetPowerKw": 100 },
|
|
|
- "controlResult": 1,
|
|
|
- "resultMessage": "执行成功",
|
|
|
- "createdBy": "operator01",
|
|
|
- "createTime": "2026-06-23T10:20:00",
|
|
|
- "dmpCommandId": "CMD-20260623001"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_device_control_log`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 控制日志 ID | id |
|
|
|
-| deviceId | long | 设备 ID | device_id |
|
|
|
-| controlType | string | START/STOP/CONFIG/OTA | control_type |
|
|
|
-| controlParams | object | 控制参数 JSON | control_params |
|
|
|
-| controlResult | int | 0失败 1成功 2执行中 | control_result |
|
|
|
-| resultMessage | string | 执行结果说明 | result_message |
|
|
|
-| createdBy | string | 操作人账号 | created_by |
|
|
|
-| createTime | string | 操作时间 | create_time |
|
|
|
-| dmpCommandId | string | 物联网命令 ID(关联 dmp_device_command) | dmp_command_id |
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.8 告警管理
|
|
|
-
|
|
|
-> **数据表**:规则 → `rule_engine*`;告警记录 → `base_alarm`;类型 → `base_alarm_type`;通知 → `base_alarm_notice` / `base_alarm_notice_result`;统计 → `base_alarm_statistic`。
|
|
|
-
|
|
|
-#### 2.8.1 告警规则 CRUD
|
|
|
-
|
|
|
-| 方法 | URL | 说明 | 数据表 |
|
|
|
-|------|-----|------|--------|
|
|
|
-| GET | `/prod-api/service-vpp/alarm/rule` | 规则列表 | `rule_engine` |
|
|
|
-| POST | `/prod-api/service-vpp/alarm/rule` | 新增规则 | `rule_engine` + 关联表 |
|
|
|
-| GET | `/prod-api/service-vpp/alarm/rule/{id}` | 规则详情 | `rule_engine` |
|
|
|
-| PUT | `/prod-api/service-vpp/alarm/rule/{id}` | 更新规则 | `rule_engine` |
|
|
|
-| DELETE | `/prod-api/service-vpp/alarm/rule/{id}` | 删除规则 | `rule_engine` |
|
|
|
-| GET | `/prod-api/service-vpp/alarm/rule/{id}/device` | 规则绑定设备 | `rule_engine_device` |
|
|
|
-| PUT | `/prod-api/service-vpp/alarm/rule/{id}/device` | 更新绑定设备 | `rule_engine_device` |
|
|
|
-| GET | `/prod-api/service-vpp/alarm/rule/{id}/log` | 规则执行日志 | `rule_engine_log` |
|
|
|
-
|
|
|
-**查询参数(列表)**:`name`、`status`(0 停用 / 1 启用)、`tenantId`、`current`、`size`
|
|
|
-
|
|
|
-**创建/更新规则请求体示例**(映射 `rule_engine` + `rule_engine_device`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "name": "功率超限110%",
|
|
|
- "status": 1,
|
|
|
- "descr": "光伏功率超过额定110%触发告警",
|
|
|
- "detail": {
|
|
|
- "metric": "activePowerKw",
|
|
|
- "operator": ">",
|
|
|
- "thresholdRatio": 1.1,
|
|
|
- "action": "alarmEvent",
|
|
|
- "alarmType": "PWR_OVER",
|
|
|
- "alarmGrade": 2
|
|
|
- },
|
|
|
- "devices": [
|
|
|
- {
|
|
|
- "deviceId": "DEV-INV-001",
|
|
|
- "deviceUuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
|
|
- "identifier": "activePower",
|
|
|
- "productId": 100
|
|
|
- }
|
|
|
- ],
|
|
|
- "conditions": [
|
|
|
- {
|
|
|
- "optionalCondition": "AND",
|
|
|
- "expression": "activePowerKw > ratedPower * 1.1",
|
|
|
- "descr": "功率超限",
|
|
|
- "type": 1
|
|
|
- }
|
|
|
- ],
|
|
|
- "cronExpressions": ["0 */5 * * * ?"],
|
|
|
- "tenantId": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 请求字段 | 数据表字段 | 说明 |
|
|
|
-|----------|------------|------|
|
|
|
-| name | rule_engine.name | 规则名称(≤20 字符) |
|
|
|
-| status | rule_engine.status | 0 停用 / 1 启用 |
|
|
|
-| descr | rule_engine.descr | 规则描述 |
|
|
|
-| detail | rule_engine.detail | JSON,含阈值、动作;`action=alarmEvent` 时写入 `base_alarm` |
|
|
|
-| devices[] | rule_engine_device | deviceId 对应 `vpp_device.device_code` |
|
|
|
-| conditions[] | rule_engine_condition | type:1 触发条件 / 2 约束条件 |
|
|
|
-| cronExpressions[] | rule_engine_cron.cron | CRON 表达式 |
|
|
|
-
|
|
|
-**规则详情响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 12,
|
|
|
- "name": "功率超限110%",
|
|
|
- "status": 1,
|
|
|
- "descr": "光伏功率超过额定110%触发告警",
|
|
|
- "detail": { "action": "alarmEvent", "alarmGrade": 2 },
|
|
|
- "devices": [],
|
|
|
- "conditions": [],
|
|
|
- "cronExpressions": ["0 */5 * * * ?"],
|
|
|
- "tenantId": 1,
|
|
|
- "createTime": "2026-06-01T10:00:00.000+08:00",
|
|
|
- "updateTime": "2026-06-20T15:30:00.000+08:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**规则列表响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 12,
|
|
|
- "name": "功率超限110%",
|
|
|
- "status": 1,
|
|
|
- "descr": "光伏功率超过额定110%触发告警",
|
|
|
- "deviceCount": 5,
|
|
|
- "tenantId": 1,
|
|
|
- "createTime": "2026-06-01T10:00:00.000+08:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**更新绑定设备** — `PUT /alarm/rule/{id}/device`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "devices": [
|
|
|
- {
|
|
|
- "deviceId": "DEV-INV-001",
|
|
|
- "deviceUuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
|
|
- "identifier": "activePower",
|
|
|
- "productId": 100
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**规则执行日志** — `GET /alarm/rule/{id}/log`
|
|
|
-
|
|
|
-**查询参数**:`startTime`、`endTime`、`current`、`size`
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `rule_engine_log`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 501,
|
|
|
- "ruleId": 12,
|
|
|
- "executeTime": "2026-06-23T10:15:00.000+08:00",
|
|
|
- "executeResult": 1,
|
|
|
- "executeMessage": "规则命中,已触发 alarmEvent",
|
|
|
- "alarmId": 158001
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.8.2 告警类型字典
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/alarm/type`
|
|
|
-
|
|
|
-**功能描述**:获取告警类型字典列表。
|
|
|
-
|
|
|
-**权限**:`alarm:view`
|
|
|
-
|
|
|
-**数据表**:`base_alarm_type`
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 1,
|
|
|
- "typeCode": "PWR_OVER",
|
|
|
- "typeName": "功率越限",
|
|
|
- "typeAbbrevia": "越限",
|
|
|
- "alarmDesc": "设备运行功率超过设定阈值"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.8.3 告警列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/alarm`
|
|
|
-
|
|
|
-**功能描述**:分页查询告警记录列表。
|
|
|
-
|
|
|
-**权限**:`alarm:view`
|
|
|
-
|
|
|
-**数据表**:`base_alarm`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| handleStatus | int | 否 | 0未处理 1已处理 |
|
|
|
-| alarmGrade | int | 否 | 告警等级 1-5 |
|
|
|
-| alarmType | string | 否 | 告警类型编码 |
|
|
|
-| deviceId | string | 否 | 设备编号 |
|
|
|
-| alarmObject | string | 否 | 告警对象(模糊) |
|
|
|
-| alarmTimeStart | string | 否 | 告警时间起 |
|
|
|
-| alarmTimeEnd | string | 否 | 告警时间止 |
|
|
|
-| tenantId | long | 否 | 租户 ID |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `base_alarm`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 158001,
|
|
|
- "deviceId": "DEV-INV-001",
|
|
|
- "alarmTime": "2026-06-23T10:15:00.000+08:00",
|
|
|
- "alarmType": "PWR_OVER",
|
|
|
- "alarmObject": "浦东光伏站",
|
|
|
- "alarmData": "550.2",
|
|
|
- "alarmAttribute": "activePowerKw",
|
|
|
- "alarmContent": "功率超限110%",
|
|
|
- "alarmGrade": 2,
|
|
|
- "alarmAddress": "上海市浦东新区张江路100号",
|
|
|
- "handleStatus": 0,
|
|
|
- "handleBy": null,
|
|
|
- "handleTime": null,
|
|
|
- "handleContent": null,
|
|
|
- "alarmFalse": 0,
|
|
|
- "sitePhoto": null,
|
|
|
- "tenantId": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.8.4 告警处理(确认/派单/处理合一)
|
|
|
-
|
|
|
-`base_alarm` 以 `handle_status`、`handle_by`、`handle_time`、`handle_content` 承载闭环,以下接口为业务语义封装。
|
|
|
-
|
|
|
-##### 2.8.4.1 确认告警
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/alarm/{id}/confirm`
|
|
|
-
|
|
|
-**功能描述**:确认已知晓告警,可选记录操作人到 `sys_oper_log`。
|
|
|
-
|
|
|
-**权限**:`alarm:manage`
|
|
|
-
|
|
|
-**路径参数**:`id` — 告警记录 ID(`base_alarm.id`)
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "确认成功",
|
|
|
- "data": { "id": 158001 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-##### 2.8.4.2 派单
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/alarm/{id}/dispatch`
|
|
|
-
|
|
|
-**功能描述**:指派告警处理人,预填 `handle_by` 信息。
|
|
|
-
|
|
|
-**权限**:`alarm:manage`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| handlerName | string | 是 | 处理人姓名 |
|
|
|
-| handlerPhone | string | 是 | 处理人电话 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "handlerName": "李四",
|
|
|
- "handlerPhone": "13800138000"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "派单成功",
|
|
|
- "data": { "id": 158001, "handleBy": "李四" },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-##### 2.8.4.3 处理告警
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/alarm/{id}/handle`
|
|
|
-
|
|
|
-**功能描述**:完成告警处理闭环,更新 `base_alarm.handle_*` 字段。
|
|
|
-
|
|
|
-**权限**:`alarm:manage`
|
|
|
-
|
|
|
-**落库字段**:`handle_status=1`、`handle_by`、`handle_time`、`handle_content`、`site_photo`
|
|
|
-
|
|
|
-**处理请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "handleContent": "已远程重启设备,恢复正常",
|
|
|
- "handleBy": "张三",
|
|
|
- "handlePhone": "13900139000",
|
|
|
- "sitePhoto": "https://oss.example.com/photo.jpg"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| handleContent | string | 是 | 处理说明 |
|
|
|
-| handleBy | string | 是 | 处理人姓名 |
|
|
|
-| handlePhone | string | 否 | 处理人电话 |
|
|
|
-| sitePhoto | string | 否 | 现场照片 URL |
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "处理完成",
|
|
|
- "data": {
|
|
|
- "id": 158001,
|
|
|
- "handleStatus": 1,
|
|
|
- "handleBy": "张三",
|
|
|
- "handleTime": "2026-06-23T10:30:00.000+08:00"
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.8.5 误报关闭
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/alarm/{id}/closeFalse`
|
|
|
-
|
|
|
-**功能描述**:将告警标记为误报并关闭。
|
|
|
-
|
|
|
-**权限**:`alarm:manage`
|
|
|
-
|
|
|
-**路径参数**:`id` — 告警记录 ID
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**落库**:`base_alarm.alarm_false = 1`,`handle_status = 1`
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "已关闭",
|
|
|
- "data": { "id": 158001, "alarmFalse": 1, "handleStatus": 1 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.8.6 告警通知配置
|
|
|
-
|
|
|
-**数据表**:`base_alarm_notice`(配置)、`base_alarm_notice_result`(推送结果)
|
|
|
-
|
|
|
-| 方法 | URL | 说明 |
|
|
|
-|------|-----|------|
|
|
|
-| GET | `/prod-api/service-vpp/alarm/notice` | 通知配置列表 |
|
|
|
-| POST | `/prod-api/service-vpp/alarm/notice` | 新增通知配置 |
|
|
|
-| PUT | `/prod-api/service-vpp/alarm/notice/{id}` | 更新通知配置 |
|
|
|
-
|
|
|
-**列表查询参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| productCode | string | 否 | 产品编码,VPP 固定为 VPP |
|
|
|
-| typeCode | string | 否 | 告警类型编码 |
|
|
|
-| tenantId | long | 否 | 租户 ID |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**列表响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 101,
|
|
|
- "productCode": "VPP",
|
|
|
- "typeCode": "PWR_OVER",
|
|
|
- "typeName": "功率越限",
|
|
|
- "receiver1": "1001,1002",
|
|
|
- "receiver2": "1003",
|
|
|
- "timeOut1": 30,
|
|
|
- "timeOut2": 60,
|
|
|
- "noticeMethod": "1,2,4",
|
|
|
- "tenantId": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**创建通知配置请求体示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "productCode": "VPP",
|
|
|
- "typeCode": "PWR_OVER",
|
|
|
- "receiver1": "1001,1002",
|
|
|
- "receiver2": "1003",
|
|
|
- "timeOut1": 30,
|
|
|
- "timeOut2": 60,
|
|
|
- "noticeMethod": "1,2,4",
|
|
|
- "tenantId": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| productCode | string | 是 | 产品编码 |
|
|
|
-| typeCode | string | 是 | 告警类型编码 |
|
|
|
-| receiver1 | string | 是 | 一级接收人 userId,逗号分隔 |
|
|
|
-| receiver2 | string | 否 | 二级接收人 |
|
|
|
-| receiver3 | string | 否 | 三级接收人 |
|
|
|
-| timeOut1 | int | 否 | 一级超时升级(分钟) |
|
|
|
-| timeOut2 | int | 否 | 二级超时升级(分钟) |
|
|
|
-| noticeMethod | string | 是 | 通知方式,逗号分隔 |
|
|
|
-| tenantId | long | 否 | 租户 ID |
|
|
|
-
|
|
|
-> `noticeMethod`:1 站内 / 2 微信 / 3 语音 / 4 短信 / 5 邮件(与 `base_alarm_notice_result.notice_type` 一致)。
|
|
|
-
|
|
|
-**创建/更新响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "保存成功",
|
|
|
- "data": { "id": 101 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.8.7 告警统计
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/alarm/statistics`
|
|
|
-
|
|
|
-**功能描述**:按日/月维度统计告警数量。
|
|
|
-
|
|
|
-**权限**:`alarm:view`
|
|
|
-
|
|
|
-**数据表**:`base_alarm_statistic`(汇总)或 `base_alarm`(实时聚合)
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| startDate | string | 是 | 开始日期 YYYY-MM-DD |
|
|
|
-| endDate | string | 是 | 结束日期 YYYY-MM-DD |
|
|
|
-| statisticDimen | int | 否 | 1日 2月,默认 1 |
|
|
|
-| tenantId | long | 否 | 租户 ID |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "alarmNum": 128,
|
|
|
- "pitfallNum": 5,
|
|
|
- "statisticDimen": 1,
|
|
|
- "statisticTime": "2026-06-23T00:00:00.000+08:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.9 需求响应
|
|
|
-
|
|
|
-> **实现说明(service-vpp)**
|
|
|
-> - 运管平台邀约经 `DistributeEventRequest` 入库 `vpp_dr_event`(Poll 主动拉取或 UN 推送 `/DistributeEventRequest`)。
|
|
|
-> - Web 端参与/出清成功后,若 `vpp.un.outbound-enabled=true`,自动向 UN 发送 `CreateOptRequest` / `CreateCqRequest`。
|
|
|
-> - 出清公示确认:Web 调用 `ack-clearing`,或配置 `auto-ack-clearing=true` 在 Poll 入库后自动发送 `CreateEventResponse`。
|
|
|
-> - 参与记录按电力户号 `vpp_customer.account_no` 与 UN 报文 `list[].account` 映射。
|
|
|
-
|
|
|
-#### 2.9.0 事件状态枚举
|
|
|
-
|
|
|
-| eventStatus | 说明 | 典型触发 |
|
|
|
-|-------------|------|----------|
|
|
|
-| 0 | 待参与 | 邀约入库 |
|
|
|
-| 1 | 已申报 | Web 参与 / UN 申报反馈 |
|
|
|
-| 2 | 执行中 | 出清确认 / Web 出清 |
|
|
|
-| 3 | 已结束 | Web 结束事件 |
|
|
|
-| 4 | 已取消 | Web 拒绝 / UN optOut |
|
|
|
-
|
|
|
-#### 2.9.1 事件列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dr/event`
|
|
|
-
|
|
|
-**功能描述**:分页查询需求响应事件列表。
|
|
|
-
|
|
|
-**权限**:`dr:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| eventStatus | int | 否 | 0待参与 1已申报 2执行中 3已结束 4已取消 |
|
|
|
-| responseType | int | 否 | 1日前 2日内 3秒级 |
|
|
|
-| eventType | int | 否 | 1削峰 2填谷 |
|
|
|
-| startTime | string | 否 | 响应开始时间起 |
|
|
|
-| endTime | string | 否 | 响应开始时间止 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_dr_event`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 6001,
|
|
|
- "eventId": "EVE_20260623001",
|
|
|
- "eventName": "夏季削峰需求响应",
|
|
|
- "responseType": 1,
|
|
|
- "eventType": 1,
|
|
|
- "startTime": "2026-06-23T14:00:00",
|
|
|
- "endTime": "2026-06-23T16:00:00",
|
|
|
- "targetCapacityKw": 1500.0,
|
|
|
- "clearedCapacityKw": 1200.0,
|
|
|
- "subsidyPrice": 3.5,
|
|
|
- "eventStatus": 2
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_dr_event`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 本地事件 ID | id |
|
|
|
-| eventId | string | 运管平台事件 ID | event_id |
|
|
|
-| eventName | string | 事件名称 | event_name |
|
|
|
-| responseType | int | 1日前 2日内 3秒级 | response_type |
|
|
|
-| eventType | int | 1削峰 2填谷 | event_type |
|
|
|
-| startTime | string | 响应开始时间 | start_time |
|
|
|
-| endTime | string | 响应结束时间 | end_time |
|
|
|
-| targetCapacityKw | number | 目标容量 kW | target_capacity_kw |
|
|
|
-| clearedCapacityKw | number | 出清容量 kW | cleared_capacity_kw |
|
|
|
-| subsidyPrice | number | 补贴单价(元/kWh 或协议约定单位) | subsidy_price |
|
|
|
-| eventStatus | int | 事件状态,见 §2.9.0 | event_status |
|
|
|
-
|
|
|
-#### 2.9.2 事件详情
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dr/event/{id}`
|
|
|
-
|
|
|
-**功能描述**:获取事件详情,含活动期、补贴标准、出清容量及参与资源列表。
|
|
|
-
|
|
|
-**权限**:`dr:view`
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 6001,
|
|
|
- "eventId": "EVE_20260623001",
|
|
|
- "eventName": "夏季削峰需求响应",
|
|
|
- "responseType": 1,
|
|
|
- "eventType": 1,
|
|
|
- "startTime": "2026-06-23T14:00:00",
|
|
|
- "endTime": "2026-06-23T16:00:00",
|
|
|
- "targetCapacityKw": 1500.0,
|
|
|
- "clearedCapacityKw": 1200.0,
|
|
|
- "subsidyPrice": 3.5,
|
|
|
- "eventStatus": 2,
|
|
|
- "participations": [
|
|
|
- {
|
|
|
- "id": 7001,
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "resourceId": 2001,
|
|
|
- "resourceName": "工业负荷A",
|
|
|
- "participateStatus": 1,
|
|
|
- "declaredCapacityKw": 500.0,
|
|
|
- "clearedCapacityKw": 450.0,
|
|
|
- "declaredAt": "2026-06-22T16:00:00"
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**(在列表字段基础上扩展):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| participations | array | 参与记录列表 | vpp_dr_participation |
|
|
|
-| participations[].id | long | 参与记录 ID | id |
|
|
|
-| participations[].customerId | long | 客户 ID | customer_id |
|
|
|
-| participations[].customerName | string | 客户名称(关联) | — |
|
|
|
-| participations[].resourceId | long | 资源点 ID | resource_id |
|
|
|
-| participations[].resourceName | string | 资源名称(关联) | — |
|
|
|
-| participations[].participateStatus | int | 0待确认 1已参与 2已拒绝 | participate_status |
|
|
|
-| participations[].declaredCapacityKw | number | 申报容量 kW | declared_capacity_kw |
|
|
|
-| participations[].clearedCapacityKw | number | 出清容量 kW | cleared_capacity_kw |
|
|
|
-| participations[].declaredAt | string | 申报时间 | declared_at |
|
|
|
-
|
|
|
-#### 2.9.2.1 新增事件
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/event`
|
|
|
-
|
|
|
-**功能描述**:手工录入需求响应事件(联调/演练场景);`eventId` 不传时自动生成,初始状态为**待参与(0)**。运管平台同步事件请走 UN `DistributeEventRequest` 入库。
|
|
|
-
|
|
|
-**权限**:`dr:manage`
|
|
|
-
|
|
|
-**数据表**:`vpp_dr_event`
|
|
|
-
|
|
|
-**请求体字段说明**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------|------------|
|
|
|
-| eventId | string | 否 | 运管平台事件 ID;不传则自动生成 `EVE_yyyyMMddHHmmss_XXXX` | event_id |
|
|
|
-| eventName | string | 否 | 事件名称;不传则使用 eventId | event_name |
|
|
|
-| responseType | int | 是 | 1日前 2日内 3秒级 | response_type |
|
|
|
-| eventType | int | 否 | 1削峰 2填谷 | event_type |
|
|
|
-| startTime | string | 是 | 响应开始时间(ISO 8601) | start_time |
|
|
|
-| endTime | string | 是 | 响应结束时间(ISO 8601) | end_time |
|
|
|
-| targetCapacityKw | number | 是 | 目标容量 kW,须 > 0 | target_capacity_kw |
|
|
|
-| clearedCapacityKw | number | 否 | 出清容量 kW | cleared_capacity_kw |
|
|
|
-| subsidyPrice | number | 否 | 补贴标准 元/kWh | subsidy_price |
|
|
|
-
|
|
|
-**请求体示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "eventName": "夏季削峰需求响应(演练)",
|
|
|
- "responseType": 1,
|
|
|
- "eventType": 1,
|
|
|
- "startTime": "2026-06-23T14:00:00",
|
|
|
- "endTime": "2026-06-23T16:00:00",
|
|
|
- "targetCapacityKw": 1500.0,
|
|
|
- "subsidyPrice": 3.5
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": {
|
|
|
- "id": 6001,
|
|
|
- "eventId": "EVE_20260623140000_A1B2",
|
|
|
- "eventName": "夏季削峰需求响应(演练)",
|
|
|
- "responseType": 1,
|
|
|
- "eventType": 1,
|
|
|
- "startTime": "2026-06-23T14:00:00",
|
|
|
- "endTime": "2026-06-23T16:00:00",
|
|
|
- "targetCapacityKw": 1500.0,
|
|
|
- "subsidyPrice": 3.5,
|
|
|
- "eventStatus": 0
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.9.2.2 修改事件
|
|
|
-
|
|
|
-**接口地址**:`PUT /prod-api/service-vpp/dr/event/{id}`
|
|
|
-
|
|
|
-**功能描述**:修改手工录入的事件信息。
|
|
|
-
|
|
|
-**权限**:`dr:manage`
|
|
|
-
|
|
|
-**路径参数**:`id` — 本地事件 ID(`vpp_dr_event.id`)
|
|
|
-
|
|
|
-**前置条件**:
|
|
|
-
|
|
|
-- `eventStatus=0`(待参与)
|
|
|
-- 无关联参与记录、执行明细、评估报告
|
|
|
-
|
|
|
-**请求体**:字段同 §2.9.2.1(`eventId` 不可修改,传了也忽略)
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": null,
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.9.2.3 删除事件
|
|
|
-
|
|
|
-**接口地址**:`DELETE /prod-api/service-vpp/dr/event/{id}`
|
|
|
-
|
|
|
-**功能描述**:软删除需求响应事件(`deleteFlag=1`)。
|
|
|
-
|
|
|
-**权限**:`dr:manage`
|
|
|
-
|
|
|
-**路径参数**:`id` — 本地事件 ID
|
|
|
-
|
|
|
-**前置条件**:
|
|
|
-
|
|
|
-- `eventStatus` 为 0(待参与)或 4(已取消)
|
|
|
-- 无关联参与记录、执行明细、评估报告
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": null,
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.9.3 能力评估
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dr/event/{id}/capability`
|
|
|
-
|
|
|
-**功能描述**:评估事件可调能力,聚合客户登记能力及资源实时可用性。
|
|
|
-
|
|
|
-**权限**:`dr:view`
|
|
|
-
|
|
|
-**数据表**:`vpp_customer`(dr_up/down_capacity_kw)+ `vpp_resource_point`
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应 data**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "totalUpCapacityKw": 1500.0,
|
|
|
- "totalDownCapacityKw": 2000.0,
|
|
|
- "avgResponseTimeSec": 120,
|
|
|
- "avgRampSpeedKwMin": 50.0,
|
|
|
- "resources": [
|
|
|
- {
|
|
|
- "resourceId": 2001,
|
|
|
- "resourceName": "工业负荷A",
|
|
|
- "upCapacityKw": 500.0,
|
|
|
- "downCapacityKw": 800.0,
|
|
|
- "responsePriority": 1,
|
|
|
- "available": true
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| totalUpCapacityKw | number | 汇总上调能力 kW |
|
|
|
-| totalDownCapacityKw | number | 汇总下调能力 kW |
|
|
|
-| avgResponseTimeSec | int | 平均响应时间(秒) |
|
|
|
-| avgRampSpeedKwMin | number | 平均爬坡速度 kW/min |
|
|
|
-| resources | array | 分资源能力明细 |
|
|
|
-| resources[].resourceId | long | 资源点 ID |
|
|
|
-| resources[].resourceName | string | 资源名称 |
|
|
|
-| resources[].upCapacityKw | number | 上调能力 kW |
|
|
|
-| resources[].downCapacityKw | number | 下调能力 kW |
|
|
|
-| resources[].responsePriority | int | 响应优先级 |
|
|
|
-| resources[].available | boolean | 当前是否可用(在线且未故障) |
|
|
|
-
|
|
|
-#### 2.9.4 参与/拒绝事件
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/event/{id}/participate`
|
|
|
-
|
|
|
-**功能描述**:确认参与或拒绝需求响应事件,写入 `vpp_dr_participation`;**已启用 outbound 时同步 UN `CreateOptRequest`**。
|
|
|
-
|
|
|
-**权限**:`dr:participate`
|
|
|
-
|
|
|
-**路径参数**:`id` — 事件 ID(`vpp_dr_event.id`)
|
|
|
-
|
|
|
-**参与请求参数**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| participate | boolean | 是 | true 参与 / false 拒绝 |
|
|
|
-| strategyId | long | 否 | 响应策略 ID(参与时) |
|
|
|
-| declaredCapacityKw | number | 否 | 申报总容量 kW |
|
|
|
-| resources | array | 否 | 资源分拆列表 |
|
|
|
-| resources[].resourceId | long | 是 | 资源点 ID |
|
|
|
-| resources[].declaredCapacityKw | number | 是 | 申报容量 kW |
|
|
|
-| reason | string | 否 | 拒绝原因(拒绝时必填) |
|
|
|
-
|
|
|
-**请求体(参与)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "participate": true,
|
|
|
- "strategyId": 10,
|
|
|
- "declaredCapacityKw": 1200.0,
|
|
|
- "resources": [
|
|
|
- { "resourceId": 2001, "declaredCapacityKw": 500.0 },
|
|
|
- { "resourceId": 2002, "declaredCapacityKw": 700.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**请求体(拒绝)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "participate": false,
|
|
|
- "reason": "可调容量不足"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "申报成功",
|
|
|
- "data": {
|
|
|
- "eventId": 6001,
|
|
|
- "participateStatus": 1,
|
|
|
- "declaredCapacityKw": 1200.0
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.9.5 出清分拆申报
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/event/{id}/clearing`
|
|
|
-
|
|
|
-**功能描述**:出清后按资源分拆申报容量,写入 `vpp_dr_execution` 并更新事件为执行中;**已启用 outbound 时同步 UN `CreateCqRequest`**。
|
|
|
-
|
|
|
-**权限**:`dr:participate`
|
|
|
-
|
|
|
-**请求体**(更新 `vpp_dr_participation.cleared_capacity_kw`):
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| totalClearedCapacityKw | number | 是 | 出清总容量 kW |
|
|
|
-| resources | array | 是 | 资源分拆列表 |
|
|
|
-| resources[].resourceId | long | 是 | 资源点 ID |
|
|
|
-| resources[].clearedCapacityKw | number | 是 | 分拆出清容量 kW |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "totalClearedCapacityKw": 1200.0,
|
|
|
- "resources": [
|
|
|
- { "resourceId": 2001, "clearedCapacityKw": 450.0 },
|
|
|
- { "resourceId": 2002, "clearedCapacityKw": 750.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "分拆申报成功",
|
|
|
- "data": { "eventId": "EVE_20260623001", "totalClearedCapacityKw": 1200.0 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.9.6 执行监控
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dr/event/{id}/monitor`
|
|
|
-
|
|
|
-**功能描述**:实时监控事件执行进度,数据来自 `vpp_dr_execution`。
|
|
|
-
|
|
|
-**权限**:`dr:view`
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应 data**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "eventId": "EVE_20260623001",
|
|
|
- "targetCapacityKw": 1200.0,
|
|
|
- "actualCapacityKw": 1050.0,
|
|
|
- "progressPercent": 87.5,
|
|
|
- "remainingMinutes": 45,
|
|
|
- "resources": [
|
|
|
- {
|
|
|
- "resourceId": 2001,
|
|
|
- "targetKw": 500.0,
|
|
|
- "actualKw": 480.0,
|
|
|
- "executeStatus": 1
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| eventId | string | 运管平台事件 ID |
|
|
|
-| targetCapacityKw | number | 目标/出清容量 kW |
|
|
|
-| actualCapacityKw | number | 当前实际响应容量 kW |
|
|
|
-| progressPercent | number | 执行进度百分比 |
|
|
|
-| remainingMinutes | int | 剩余执行分钟数 |
|
|
|
-| resources | array | 分资源执行明细(`vpp_dr_execution`) |
|
|
|
-| resources[].resourceId | long | 资源点 ID |
|
|
|
-| resources[].targetKw | number | 目标调节量 kW |
|
|
|
-| resources[].actualKw | number | 实际调节量 kW |
|
|
|
-| resources[].executeStatus | int | 0待执行 1执行中 2已完成 3异常 |
|
|
|
-
|
|
|
-#### 2.9.7 手动干预
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/event/{id}/intervene`
|
|
|
-
|
|
|
-**功能描述**:执行中手动切换策略或调整执行。
|
|
|
-
|
|
|
-**权限**:`dr:intervene`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| action | string | 是 | ADJUST(切换策略)/ PAUSE(暂停)/ RESUME(恢复) |
|
|
|
-| strategyId | long | 否 | 目标策略 ID(action=ADJUST 时必填) |
|
|
|
-| remark | string | 否 | 干预说明 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "action": "ADJUST",
|
|
|
- "strategyId": 11,
|
|
|
- "remark": "实际响应偏低,切换备用策略"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "干预指令已下发",
|
|
|
- "data": null,
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.9.8 确认出清公示
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/event/{id}/ack-clearing`
|
|
|
-
|
|
|
-**功能描述**:向 UN 发送 `CreateEventResponse` 确认出清公示,事件状态推进为**执行中(2)**,并初始化 `vpp_dr_execution`(若尚未创建)。
|
|
|
-
|
|
|
-**权限**:`dr:participate`
|
|
|
-
|
|
|
-**前置条件**:`eventStatus=1`(已申报),且已完成出清公示 Poll 入库(`clearedCapacityKw` 有值)
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": null,
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-> 等价 UN 报文见 §3.7.4;也可由 `vpp.un.auto-ack-clearing=true` 在 Poll 收到出清公示后自动触发。
|
|
|
-
|
|
|
-#### 2.9.9 结束事件
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/event/{id}/complete`
|
|
|
-
|
|
|
-**功能描述**:将执行中事件标记为**已结束(3)**,汇总执行明细写入 `vpp_dr_evaluation`(若不存在则创建)。
|
|
|
-
|
|
|
-**权限**:`dr:intervene`
|
|
|
-
|
|
|
-**前置条件**:`eventStatus=2`,且存在执行明细
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": null,
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.9.10 效果评估报告
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dr/event/{id}/evaluation`
|
|
|
-
|
|
|
-**功能描述**:获取事件响应效果评估报告。
|
|
|
-
|
|
|
-**权限**:`dr:view`
|
|
|
-
|
|
|
-**响应 data 示例**(映射 `vpp_dr_evaluation`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "eventId": 6001,
|
|
|
- "eventName": "夏季削峰需求响应",
|
|
|
- "targetCapacityKw": 1200.0,
|
|
|
- "actualCapacityKw": 1050.0,
|
|
|
- "responseDurationMin": 120,
|
|
|
- "subsidyAmount": 7350.0,
|
|
|
- "qualifiedRate": 87.5,
|
|
|
- "reportFileUrl": "https://oss.example.com/dr/eval_6001.pdf",
|
|
|
- "evaluatedAt": "2026-06-23T18:00:00",
|
|
|
- "resourceDetails": [
|
|
|
- {
|
|
|
- "resourceId": 2001,
|
|
|
- "resourceName": "工业负荷A",
|
|
|
- "targetKw": 450.0,
|
|
|
- "actualKw": 420.0,
|
|
|
- "qualifiedRate": 93.3
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data 字段说明**(映射 `vpp_dr_evaluation`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| eventId | long | 本地事件 ID | event_id |
|
|
|
-| eventName | string | 事件名称 | — |
|
|
|
-| targetCapacityKw | number | 目标容量 kW | target_capacity_kw |
|
|
|
-| actualCapacityKw | number | 实际响应容量 kW | actual_capacity_kw |
|
|
|
-| responseDurationMin | int | 响应持续分钟数 | response_duration_min |
|
|
|
-| subsidyAmount | number | 补贴金额(元) | subsidy_amount |
|
|
|
-| qualifiedRate | number | 达标率 % | qualified_rate |
|
|
|
-| reportFileUrl | string | 评估报告文件 URL | report_file_url |
|
|
|
-| evaluatedAt | string | 评估时间 | evaluated_at |
|
|
|
-| resourceDetails | array | 分资源评估明细 | — |
|
|
|
-| resourceDetails[].resourceId | long | 资源点 ID | — |
|
|
|
-| resourceDetails[].resourceName | string | 资源名称 | — |
|
|
|
-| resourceDetails[].targetKw | number | 目标 kW | — |
|
|
|
-| resourceDetails[].actualKw | number | 实际 kW | — |
|
|
|
-| resourceDetails[].qualifiedRate | number | 达标率 % | — |
|
|
|
-
|
|
|
-#### 2.9.11 响应策略 CRUD
|
|
|
-
|
|
|
-**数据表**:`vpp_dr_strategy` + `vpp_dr_strategy_resource`
|
|
|
-
|
|
|
-| 方法 | URL | 说明 |
|
|
|
-|------|-----|------|
|
|
|
-| GET | `/prod-api/service-vpp/dr/strategy` | 策略列表 |
|
|
|
-| POST | `/prod-api/service-vpp/dr/strategy` | 新增策略 |
|
|
|
-| GET | `/prod-api/service-vpp/dr/strategy/{id}` | 策略详情 |
|
|
|
-| PUT | `/prod-api/service-vpp/dr/strategy/{id}` | 更新策略 |
|
|
|
-| DELETE | `/prod-api/service-vpp/dr/strategy/{id}` | 删除策略 |
|
|
|
-
|
|
|
-**列表查询参数**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------|------------|
|
|
|
-| strategyName | string | 否 | 策略名称(模糊) | strategy_name |
|
|
|
-| responseType | int | 否 | 适用响应类型:1日前 2日内 3秒级 | response_type |
|
|
|
-| isEnabled | int | 否 | 0禁用 1启用 | is_enabled |
|
|
|
-| current | int | 否 | 页码 | — |
|
|
|
-| size | int | 否 | 每页数量 | — |
|
|
|
-
|
|
|
-**创建/更新请求体字段说明**(映射 `vpp_dr_strategy` + `vpp_dr_strategy_resource`):
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------|------------|
|
|
|
-| strategyCode | string | 是 | 策略编码,全局唯一 | strategy_code |
|
|
|
-| strategyName | string | 是 | 策略名称 | strategy_name |
|
|
|
-| responseType | int | 是 | 适用响应类型:1日前 2日内 3秒级 | response_type |
|
|
|
-| adjustStepKw | number | 否 | 调节步长 kW | adjust_step_kw |
|
|
|
-| executeMode | int | 否 | 执行模式:1并行 2串行,默认 1 | execute_mode |
|
|
|
-| strategyConfig | object/string | 否 | 策略扩展配置 JSON;**请求可传 JSON 对象或 JSON 字符串**,服务端统一序列化后落库 | strategy_config |
|
|
|
-| isDefault | int | 否 | 是否默认策略:0否 1是,默认 0 | is_default |
|
|
|
-| isEnabled | int | 否 | 是否启用:0否 1是,默认 1 | is_enabled |
|
|
|
-| resources | array | 否 | 关联资源列表 | vpp_dr_strategy_resource |
|
|
|
-| resources[].resourceId | long | 是 | 资源点 ID | resource_id |
|
|
|
-| resources[].priority | int | 否 | 优先级序号,默认 0 | priority |
|
|
|
-| resources[].maxAdjustKw | number | 否 | 最大调节量 kW | max_adjust_kw |
|
|
|
-
|
|
|
-**创建/更新请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "strategyCode": "DR_PEAK_V1",
|
|
|
- "strategyName": "削峰默认策略",
|
|
|
- "responseType": 1,
|
|
|
- "adjustStepKw": 50.0,
|
|
|
- "executeMode": 1,
|
|
|
- "isDefault": 1,
|
|
|
- "isEnabled": 1,
|
|
|
- "strategyConfig": { "rampMinutes": 5 },
|
|
|
- "resources": [
|
|
|
- { "resourceId": 2001, "priority": 1, "maxAdjustKw": 500.0 },
|
|
|
- { "resourceId": 2002, "priority": 2, "maxAdjustKw": 800.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**策略详情响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 10,
|
|
|
- "strategyCode": "DR_PEAK_V1",
|
|
|
- "strategyName": "削峰默认策略",
|
|
|
- "responseType": 1,
|
|
|
- "adjustStepKw": 50.0,
|
|
|
- "executeMode": 1,
|
|
|
- "strategyConfig": "{\"rampMinutes\":5}",
|
|
|
- "isDefault": 1,
|
|
|
- "isEnabled": 1,
|
|
|
- "resources": [
|
|
|
- { "resourceId": 2001, "resourceName": "工业负荷A", "priority": 1, "maxAdjustKw": 500.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**策略列表/详情响应字段说明**(映射 `vpp_dr_strategy`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 策略 ID | id |
|
|
|
-| strategyCode | string | 策略编码 | strategy_code |
|
|
|
-| strategyName | string | 策略名称 | strategy_name |
|
|
|
-| responseType | int | 适用响应类型 | response_type |
|
|
|
-| adjustStepKw | number | 调节步长 kW | adjust_step_kw |
|
|
|
-| executeMode | int | 1并行 2串行 | execute_mode |
|
|
|
-| strategyConfig | string | 策略扩展配置(JSON 字符串,对应库表 JSON 列;前端需 `JSON.parse` 后使用) | strategy_config |
|
|
|
-| isDefault | int | 是否默认策略 | is_default |
|
|
|
-| isEnabled | int | 是否启用 | is_enabled |
|
|
|
-| resources | array | 关联资源(详情接口返回,含 resourceName) | vpp_dr_strategy_resource |
|
|
|
-| resources[].resourceId | long | 资源点 ID | resource_id |
|
|
|
-| resources[].resourceName | string | 资源名称(关联查询,仅详情) | — |
|
|
|
-| resources[].priority | int | 优先级序号 | priority |
|
|
|
-| resources[].maxAdjustKw | number | 最大调节量 kW | max_adjust_kw |
|
|
|
-| tenantId | int | 租户 ID | tenant_id |
|
|
|
-| createTime | string | 创建时间 | create_time |
|
|
|
-| createdBy | string | 创建人 | created_by |
|
|
|
-
|
|
|
-> **strategyConfig 入参说明**:`POST/PUT /dr/strategy` 请求体中 `strategyConfig` 支持 JSON 对象(推荐)或 JSON 字符串两种格式;响应中为 JSON 字符串。
|
|
|
-
|
|
|
-#### 2.9.12 邀约管理
|
|
|
-
|
|
|
-> **数据表**:`vpp_dr_invitation`(关联 `vpp_dr_event`、`vpp_customer`、`vpp_customer_contact`、`vpp_dr_participation`)
|
|
|
-> **界面映射**:Web「邀约管理」列表与「添加邀约」弹窗。
|
|
|
-> **业务说明**:聚合商向签约企业下发需求响应邀约;同一事件对同一企业仅允许一条有效邀约。客户确认参与后,可关联 `vpp_dr_participation` 并同步 UN `CreateOptRequest`(见 §2.9.4)。
|
|
|
-
|
|
|
-##### 2.9.12.0 枚举
|
|
|
-
|
|
|
-**replyStatus(回复情况)**
|
|
|
-
|
|
|
-| 值 | 说明 | 界面展示 |
|
|
|
-|----|------|----------|
|
|
|
-| 0 | 待回复 | 待回复 |
|
|
|
-| 1 | 参与 | 参与 |
|
|
|
-| 2 | 拒绝 | 拒绝 |
|
|
|
-| 3 | 超时 | 超时未回复 |
|
|
|
-
|
|
|
-**responseStatus(响应状态)**
|
|
|
-
|
|
|
-| 值 | 说明 | 界面展示 |
|
|
|
-|----|------|----------|
|
|
|
-| 0 | 待响应 | 待响应 |
|
|
|
-| 1 | 已申报 | 响应已申报 |
|
|
|
-| 2 | 执行中 | 响应执行中 |
|
|
|
-| 3 | 已结束 | 响应已结束 |
|
|
|
-| 4 | 已取消 | 已取消 |
|
|
|
-
|
|
|
-**smsNotifyStatus(短信通知)**
|
|
|
-
|
|
|
-| 值 | 说明 |
|
|
|
-|----|------|
|
|
|
-| 0 | 未发送 |
|
|
|
-| 1 | 已发送 |
|
|
|
-| 2 | 发送失败 |
|
|
|
-
|
|
|
-**transactionType(交易类型)**
|
|
|
-
|
|
|
-| 值 | 说明 |
|
|
|
-|----|------|
|
|
|
-| 1 | 削峰 |
|
|
|
-| 2 | 填谷 |
|
|
|
-
|
|
|
-##### 2.9.12.1 邀约列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dr/invitation`
|
|
|
-
|
|
|
-**功能描述**:分页查询企业邀约台账,支持按下发日期、响应类型、企业名称筛选。
|
|
|
-
|
|
|
-**权限**:`dr:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------|------------|
|
|
|
-| issueDateStart | string | 否 | 下发日期起(yyyy-MM-dd) | issue_time |
|
|
|
-| issueDateEnd | string | 否 | 下发日期止(yyyy-MM-dd) | issue_time |
|
|
|
-| responseType | int | 否 | 1日前 2日内 3秒级 | response_type |
|
|
|
-| customerId | long | 否 | 客户 ID | customer_id |
|
|
|
-| customerName | string | 否 | 企业名称(模糊) | — |
|
|
|
-| drEventId | long | 否 | 本地事件 ID | dr_event_id |
|
|
|
-| replyStatus | int | 否 | 回复情况 | reply_status |
|
|
|
-| responseStatus | int | 否 | 响应状态 | response_status |
|
|
|
-| current | int | 否 | 页码 | — |
|
|
|
-| size | int | 否 | 每页数量 | — |
|
|
|
-
|
|
|
-**响应 data.records 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 1,
|
|
|
- "invitationNo": "INV_20260704120000_A1B2",
|
|
|
- "drEventId": 1,
|
|
|
- "drEventCode": "EVE_20260430001",
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "用户站",
|
|
|
- "executeStartDate": "2026-05-01",
|
|
|
- "executeEndDate": "2026-05-01",
|
|
|
- "replyDeadline": "2026-04-28T18:00:00",
|
|
|
- "issueTime": "2026-04-27T10:00:00",
|
|
|
- "transactionType": 1,
|
|
|
- "responseType": 1,
|
|
|
- "demandCapacityKw": 500.0,
|
|
|
- "declaredCapacityKw": 480.0,
|
|
|
- "replyStatus": 1,
|
|
|
- "responseStatus": 1,
|
|
|
- "smsNotifyStatus": 0
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 邀约 ID | id |
|
|
|
-| invitationNo | string | 邀约编号 | invitation_no |
|
|
|
-| drEventId | long | 本地事件 ID | dr_event_id |
|
|
|
-| drEventCode | string | 需求响应编号(关联 `vpp_dr_event.event_id`) | — |
|
|
|
-| customerId | long | 客户 ID | customer_id |
|
|
|
-| customerName | string | 企业名称(关联) | — |
|
|
|
-| executeStartDate | string | 执行开始日期 | execute_start_date |
|
|
|
-| executeEndDate | string | 执行结束日期 | execute_end_date |
|
|
|
-| replyDeadline | string | 邀约回复截止日期 | reply_deadline |
|
|
|
-| issueTime | string | 下发时间 | issue_time |
|
|
|
-| transactionType | int | 交易类型:1削峰 2填谷 | transaction_type |
|
|
|
-| responseType | int | 1日前 2日内 3秒级 | response_type |
|
|
|
-| demandCapacityKw | number | 需求容量 kW | demand_capacity_kw |
|
|
|
-| declaredCapacityKw | number | 已申报容量 kW | declared_capacity_kw |
|
|
|
-| replyStatus | int | 回复情况,见 §2.9.12.0 | reply_status |
|
|
|
-| responseStatus | int | 响应状态,见 §2.9.12.0 | response_status |
|
|
|
-| smsNotifyStatus | int | 短信通知状态 | sms_notify_status |
|
|
|
-
|
|
|
-##### 2.9.12.2 邀约详情
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/dr/invitation/{id}`
|
|
|
-
|
|
|
-**功能描述**:获取单条邀约详情,含关联事件与客户主联系人信息。
|
|
|
-
|
|
|
-**权限**:`dr:view`
|
|
|
-
|
|
|
-**响应 data**:在列表字段基础上扩展 `remark`、`participationId`、`smsContactId`、`smsContactName`、`smsContactPhone`、`smsNotifyAt` 及 §2.1.7 审计字段。
|
|
|
-
|
|
|
-##### 2.9.12.3 新增邀约
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/invitation`
|
|
|
-
|
|
|
-**功能描述**:向指定企业下发需求响应邀约;`invitationNo` 不传时自动生成 `INV_yyyyMMddHHmmss_XXXX`;`issueTime` 默认当前时间;`transactionType`、`responseType` 未传时从关联事件复制。
|
|
|
-
|
|
|
-**权限**:`dr:manage`
|
|
|
-
|
|
|
-**数据表**:`vpp_dr_invitation`
|
|
|
-
|
|
|
-**请求体字段说明**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------|------------|
|
|
|
-| drEventId | long | 是 | 需求响应事件 ID(`vpp_dr_event.id`) | dr_event_id |
|
|
|
-| customerId | long | 是 | 企业客户 ID | customer_id |
|
|
|
-| executeStartDate | string | 是 | 执行开始日期(yyyy-MM-dd) | execute_start_date |
|
|
|
-| executeEndDate | string | 是 | 执行结束日期(yyyy-MM-dd) | execute_end_date |
|
|
|
-| replyDeadline | string | 是 | 邀约回复截止日期(ISO 8601) | reply_deadline |
|
|
|
-| demandCapacityKw | number | 是 | 需求容量 kW,须 > 0 | demand_capacity_kw |
|
|
|
-| declaredCapacityKw | number | 否 | 已申报容量 kW;新建时可预填 0 | declared_capacity_kw |
|
|
|
-| transactionType | int | 否 | 交易类型;默认取事件 `eventType` | transaction_type |
|
|
|
-| responseType | int | 否 | 响应类型;默认取事件 `responseType` | response_type |
|
|
|
-| smsContactId | long | 否 | 短信通知联系人;默认取客户主联系人 | sms_contact_id |
|
|
|
-| remark | string | 否 | 备注 | remark |
|
|
|
-
|
|
|
-**请求体示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "drEventId": 1,
|
|
|
- "customerId": 1001,
|
|
|
- "executeStartDate": "2026-05-01",
|
|
|
- "executeEndDate": "2026-05-01",
|
|
|
- "replyDeadline": "2026-04-28T18:00:00",
|
|
|
- "demandCapacityKw": 500.0,
|
|
|
- "declaredCapacityKw": 0
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**业务规则**:
|
|
|
-
|
|
|
-- 同一 `drEventId` + `customerId` 不可重复创建(`uk_dr_invitation_event_customer`)
|
|
|
-- 初始 `replyStatus=0`(待回复)、`responseStatus=0`(待响应)、`smsNotifyStatus=0`(未发送)
|
|
|
-- `executeStartDate` ≤ `executeEndDate`;`replyDeadline` 应早于执行开始时间
|
|
|
-
|
|
|
-**响应 data**:返回完整邀约对象(含生成的 `id`、`invitationNo`、`issueTime`)。
|
|
|
-
|
|
|
-##### 2.9.12.4 修改邀约
|
|
|
-
|
|
|
-**接口地址**:`PUT /prod-api/service-vpp/dr/invitation/{id}`
|
|
|
-
|
|
|
-**功能描述**:修改待回复状态的邀约信息。
|
|
|
-
|
|
|
-**权限**:`dr:manage`
|
|
|
-
|
|
|
-**前置条件**:`replyStatus=0`(待回复)且 `responseStatus=0`(待响应)
|
|
|
-
|
|
|
-**可修改字段**:`executeStartDate`、`executeEndDate`、`replyDeadline`、`demandCapacityKw`、`declaredCapacityKw`、`transactionType`、`responseType`、`smsContactId`、`remark`
|
|
|
-
|
|
|
-##### 2.9.12.5 删除邀约
|
|
|
-
|
|
|
-**接口地址**:`DELETE /prod-api/service-vpp/dr/invitation/{id}`
|
|
|
-
|
|
|
-**功能描述**:软删除邀约记录(`deleteFlag=1`)。
|
|
|
-
|
|
|
-**权限**:`dr:manage`
|
|
|
-
|
|
|
-**前置条件**:`replyStatus` 为 0、2 或 3,且 `responseStatus=0`;已关联 `participationId` 的不可删除
|
|
|
-
|
|
|
-##### 2.9.12.6 发送短信通知
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/invitation/{id}/notify-sms`
|
|
|
-
|
|
|
-**功能描述**:向邀约联系人发送阿里云短信;成功后更新 `smsNotifyStatus=1`、`smsNotifyAt`。
|
|
|
-
|
|
|
-**权限**:`dr:manage`
|
|
|
-
|
|
|
-**配置项**(Nacos 共享 + `service-vpp` 本地):
|
|
|
-
|
|
|
-| 配置键 | 说明 |
|
|
|
-|--------|------|
|
|
|
-| `sms.ali.region-id` | 阿里云区域,如 `cn-hangzhou` |
|
|
|
-| `sms.ali.access-key-id` | AccessKey ID |
|
|
|
-| `sms.ali.access-key-secret` | AccessKey Secret |
|
|
|
-| `vpp.sms.sign-name` | 短信签名 |
|
|
|
-| `vpp.sms.invitation-template-code` | 邀约默认模板 CODE(需在阿里云单独申请,勿与告警模板混用) |
|
|
|
-| `vpp.sms.enabled` | 是否启用,默认 `true` |
|
|
|
-
|
|
|
-**阿里云模板变量**(代码默认构建,须与控制台模板占位符**完全一致**;默认模板 `SMS_465362899`):
|
|
|
-
|
|
|
-| 变量名 | 说明 | 示例 |
|
|
|
-|--------|------|------|
|
|
|
-| `meet` | 需求响应事件名称 | 夏季削峰需求响应 |
|
|
|
-| `time` | 响应开始时间(无则取回复截止时间) | 2026-07-08 14:00:00 |
|
|
|
-| `room` | 客户名称 | 上海某某有限公司 |
|
|
|
-
|
|
|
-> **注意**:告警模块使用的 `SMS_463791105` 变量为 `deviceName`、`time`、`alarmType`、`alarmContent`,**不能**直接作为邀约模板。若控制台模板变量名不同,请在请求体传入 `templateParam` 覆盖。
|
|
|
-
|
|
|
-**请求体(可选)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| contactId | long | 否 | 覆盖默认联系人;不传则使用 `smsContactId` 或客户主联系人 |
|
|
|
-| templateCode | string | 否 | 覆盖默认模板 CODE;不传则使用 `vpp.sms.invitation-template-code` |
|
|
|
-| templateParam | string | 否 | 覆盖默认模板变量 JSON;须与 `templateCode` 对应模板占位符一致 |
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "短信已发送",
|
|
|
- "data": {
|
|
|
- "smsNotifyStatus": 1,
|
|
|
- "smsNotifyAt": "2026-07-04T17:30:00"
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-##### 2.9.12.7 企业回复邀约
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/dr/invitation/{id}/reply`
|
|
|
-
|
|
|
-**功能描述**:企业确认参与或拒绝邀约;参与时写入/更新 `vpp_dr_participation` 并回写 `participationId`、`declaredCapacityKw`;**已启用 outbound 时同步 UN `CreateOptRequest`**。
|
|
|
-
|
|
|
-**权限**:`dr:participate`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| participate | boolean | 是 | true 参与 / false 拒绝 |
|
|
|
-| declaredCapacityKw | number | 否 | 申报容量 kW(参与时必填) |
|
|
|
-| reason | string | 否 | 拒绝原因(拒绝时必填) |
|
|
|
-
|
|
|
-**状态流转**:
|
|
|
-
|
|
|
-- 参与:`replyStatus=1`,`responseStatus=1`(已申报)
|
|
|
-- 拒绝:`replyStatus=2`,`responseStatus=4`(已取消)
|
|
|
-- 超过 `replyDeadline` 未回复:由定时任务置 `replyStatus=3`
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.10 结算管理
|
|
|
-
|
|
|
-> **数据表**:`vpp_energy_reading_monthly`、`vpp_settlement_bill`、`vpp_settlement_bill_detail`、`vpp_payment_record`
|
|
|
-
|
|
|
-#### 2.10.1 月度电量核算
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/settlement/energyReading`
|
|
|
-
|
|
|
-**功能描述**:查询月度电量核算结果。
|
|
|
-
|
|
|
-**权限**:`settlement:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| customerId | long | 否 | 客户 ID |
|
|
|
-| resourceId | long | 否 | 资源点 ID |
|
|
|
-| settleYear | int | 否 | 结算年 |
|
|
|
-| settleMonth | int | 否 | 结算月 1-12 |
|
|
|
-| calcStatus | int | 否 | 0待核算 1已核算 2异常 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_energy_reading_monthly`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 9001,
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "resourceId": 2001,
|
|
|
- "resourceName": "浦东光伏站",
|
|
|
- "settleYear": 2026,
|
|
|
- "settleMonth": 5,
|
|
|
- "totalEnergyKwh": 12580.5,
|
|
|
- "peakEnergyKwh": 3200.0,
|
|
|
- "flatEnergyKwh": 4500.0,
|
|
|
- "valleyEnergyKwh": 3800.0,
|
|
|
- "sharpEnergyKwh": 1080.5,
|
|
|
- "genEnergyKwh": 8500.0,
|
|
|
- "calcStatus": 1,
|
|
|
- "calcAt": "2026-06-01T08:00:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_energy_reading_monthly`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 记录 ID | id |
|
|
|
-| customerId | long | 客户 ID | customer_id |
|
|
|
-| customerName | string | 客户名称(关联) | — |
|
|
|
-| resourceId | long | 资源点 ID | resource_id |
|
|
|
-| resourceName | string | 资源名称(关联) | — |
|
|
|
-| settleYear | int | 结算年 | settle_year |
|
|
|
-| settleMonth | int | 结算月 1-12 | settle_month |
|
|
|
-| totalEnergyKwh | number | 总电量 kWh | total_energy_kwh |
|
|
|
-| peakEnergyKwh | number | 峰段电量 | peak_energy_kwh |
|
|
|
-| flatEnergyKwh | number | 平段电量 | flat_energy_kwh |
|
|
|
-| valleyEnergyKwh | number | 谷段电量 | valley_energy_kwh |
|
|
|
-| sharpEnergyKwh | number | 尖段电量 | sharp_energy_kwh |
|
|
|
-| genEnergyKwh | number | 发电量 kWh | gen_energy_kwh |
|
|
|
-| calcStatus | int | 0待核算 1已核算 2异常 | calc_status |
|
|
|
-| calcAt | string | 核算时间 | calc_at |
|
|
|
-
|
|
|
-#### 2.10.2 触发电量核算
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/settlement/energyReading/calculate`
|
|
|
-
|
|
|
-**功能描述**:触发指定月份电量核算任务。
|
|
|
-
|
|
|
-**权限**:`settlement:calculate`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| settleYear | int | 是 | 结算年 |
|
|
|
-| settleMonth | int | 是 | 结算月 |
|
|
|
-| customerId | long | 否 | 客户 ID,不传则全量核算 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "settleYear": 2026,
|
|
|
- "settleMonth": 5,
|
|
|
- "customerId": 1001
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "核算任务已提交",
|
|
|
- "data": { "taskId": "CALC-202605-001", "customerCount": 1 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.10.3 账单列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/settlement/bill`
|
|
|
-
|
|
|
-**功能描述**:分页查询电费账单列表。
|
|
|
-
|
|
|
-**权限**:`settlement:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| customerId | long | 否 | 客户 ID |
|
|
|
-| paymentStatus | int | 否 | 0未缴 1部分 2已缴 3逾期 |
|
|
|
-| settleYear | int | 否 | 结算年 |
|
|
|
-| settleMonth | int | 否 | 结算月 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_settlement_bill`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 10001,
|
|
|
- "billNo": "BILL-202605-1001",
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "settleYear": 2026,
|
|
|
- "settleMonth": 5,
|
|
|
- "totalEnergyKwh": 12580.5,
|
|
|
- "totalAmount": 15680.0,
|
|
|
- "paidAmount": 0,
|
|
|
- "paymentStatus": 0,
|
|
|
- "dueDate": "2026-06-15",
|
|
|
- "generatedAt": "2026-06-01T10:00:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应 data.records 字段说明**(映射 `vpp_settlement_bill`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 账单 ID | id |
|
|
|
-| billNo | string | 账单编号 | bill_no |
|
|
|
-| customerId | long | 客户 ID | customer_id |
|
|
|
-| customerName | string | 客户名称(关联) | — |
|
|
|
-| settleYear | int | 结算年 | settle_year |
|
|
|
-| settleMonth | int | 结算月 | settle_month |
|
|
|
-| totalEnergyKwh | number | 总电量 kWh | total_energy_kwh |
|
|
|
-| totalAmount | number | 账单总金额(元) | total_amount |
|
|
|
-| paidAmount | number | 已缴金额(元) | paid_amount |
|
|
|
-| paymentStatus | int | 0未缴 1部分 2已缴 3逾期 | payment_status |
|
|
|
-| dueDate | string | 缴费截止日期 | due_date |
|
|
|
-| generatedAt | string | 账单生成时间 | generated_at |
|
|
|
-
|
|
|
-#### 2.10.4 生成账单
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/settlement/bill/generate`
|
|
|
-
|
|
|
-**功能描述**:根据月度电量核算生成电费账单。
|
|
|
-
|
|
|
-**权限**:`settlement:generate`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| settleYear | int | 是 | 结算年 |
|
|
|
-| settleMonth | int | 是 | 结算月 |
|
|
|
-| customerIds | array | 否 | 客户 ID 列表,不传则按已核算客户批量生成 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "settleYear": 2026,
|
|
|
- "settleMonth": 5,
|
|
|
- "customerIds": [1001, 1002]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "账单生成成功",
|
|
|
- "data": { "generatedCount": 2, "billIds": [10001, 10002] },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.10.5 账单详情
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/settlement/bill/{id}`
|
|
|
-
|
|
|
-**功能描述**:获取账单详情及分时明细。
|
|
|
-
|
|
|
-**权限**:`settlement:view`
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 10001,
|
|
|
- "billNo": "BILL-202605-1001",
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "accountNo": "3100060012345",
|
|
|
- "settleYear": 2026,
|
|
|
- "settleMonth": 5,
|
|
|
- "totalEnergyKwh": 12580.5,
|
|
|
- "totalAmount": 15680.0,
|
|
|
- "paidAmount": 0,
|
|
|
- "paymentStatus": 0,
|
|
|
- "dueDate": "2026-06-15",
|
|
|
- "billFileUrl": "https://oss.example.com/bill/10001.pdf",
|
|
|
- "details": [
|
|
|
- { "timePeriod": 1, "timePeriodName": "尖", "energyKwh": 1080.5, "price": 1.5, "amount": 1620.75 },
|
|
|
- { "timePeriod": 2, "timePeriodName": "峰", "energyKwh": 3200.0, "price": 1.2, "amount": 3840.0 },
|
|
|
- { "timePeriod": 3, "timePeriodName": "平", "energyKwh": 4500.0, "price": 0.8, "amount": 3600.0 },
|
|
|
- { "timePeriod": 4, "timePeriodName": "谷", "energyKwh": 3800.0, "price": 0.4, "amount": 1520.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.10.6 账单下载
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/settlement/bill/{id}/download`
|
|
|
-
|
|
|
-**功能描述**:下载账单 PDF 文件。
|
|
|
-
|
|
|
-**权限**:`settlement:view`
|
|
|
-
|
|
|
-**响应**:`Content-Type: application/pdf` 文件流;或返回 `billFileUrl` 重定向。
|
|
|
-
|
|
|
-#### 2.10.7 缴费记录
|
|
|
-
|
|
|
-**GET 缴费记录列表** — `GET /prod-api/service-vpp/settlement/bill/{id}/payment`
|
|
|
-
|
|
|
-**响应 data 示例**(映射 `vpp_payment_record`):
|
|
|
-
|
|
|
-```json
|
|
|
-[
|
|
|
- {
|
|
|
- "id": 11001,
|
|
|
- "billId": 10001,
|
|
|
- "paymentAmount": 8000.0,
|
|
|
- "paymentMethod": 1,
|
|
|
- "paymentMethodName": "线下转账",
|
|
|
- "paymentDate": "2026-06-10",
|
|
|
- "voucherUrl": "https://oss.example.com/voucher/11001.jpg",
|
|
|
- "remark": "首期付款",
|
|
|
- "createdBy": "operator01",
|
|
|
- "createdByName": "张三",
|
|
|
- "createTime": "2026-06-10T14:00:00"
|
|
|
- }
|
|
|
-]
|
|
|
-```
|
|
|
-
|
|
|
-**缴费记录字段说明**(映射 `vpp_payment_record`):
|
|
|
-
|
|
|
-| 字段名 | 类型 | 说明 | 数据表字段 |
|
|
|
-|--------|------|------|------------|
|
|
|
-| id | long | 缴费记录 ID | id |
|
|
|
-| billId | long | 账单 ID | bill_id |
|
|
|
-| paymentAmount | number | 缴费金额(元) | payment_amount |
|
|
|
-| paymentMethod | int | 1线下转账 2电费抵扣 3其他 | payment_method |
|
|
|
-| paymentMethodName | string | 缴费方式名称(字典翻译) | — |
|
|
|
-| paymentDate | string | 缴费日期 YYYY-MM-DD | payment_date |
|
|
|
-| voucherUrl | string | 缴费凭证 URL | voucher_url |
|
|
|
-| remark | string | 对账备注 | remark |
|
|
|
-| createdBy | string | 录入人账号 | created_by |
|
|
|
-| createdByName | string | 录入人姓名(关联) | — |
|
|
|
-| createTime | string | 录入时间 | create_time |
|
|
|
-
|
|
|
-**POST 录入线下缴费** — `POST /prod-api/service-vpp/settlement/bill/{id}/payment`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| paymentAmount | number | 是 | 缴费金额 |
|
|
|
-| paymentMethod | int | 是 | 1线下转账 2电费抵扣 3其他 |
|
|
|
-| paymentDate | string | 是 | 缴费日期 YYYY-MM-DD |
|
|
|
-| voucherUrl | string | 否 | 缴费凭证 URL |
|
|
|
-| remark | string | 否 | 对账备注 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "paymentAmount": 8000.0,
|
|
|
- "paymentMethod": 1,
|
|
|
- "paymentDate": "2026-06-10",
|
|
|
- "voucherUrl": "https://oss.example.com/voucher/11001.jpg",
|
|
|
- "remark": "首期付款"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "录入成功",
|
|
|
- "data": {
|
|
|
- "id": 11001,
|
|
|
- "billId": 10001,
|
|
|
- "paidAmount": 8000.0,
|
|
|
- "paymentStatus": 1
|
|
|
- },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.11 信息报送
|
|
|
-
|
|
|
-> **数据表**:`vpp_report_task`、`vpp_report_record`、`vpp_report_data`、`vpp_report_audit_log`
|
|
|
-
|
|
|
-#### 2.11.1 报送任务列表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/report/task`
|
|
|
-
|
|
|
-**功能描述**:分页查询监管报送任务列表。
|
|
|
-
|
|
|
-**权限**:`report:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| taskStatus | int | 否 | 0待填报 1待审核 2报送中 3已完成 4已逾期 |
|
|
|
-| reportOrg | int | 否 | 1交易中心 2能监局 3经信委 4国网上海 |
|
|
|
-| reportCycle | int | 否 | 1月报 2年报 3临时 |
|
|
|
-| deadlineStart | string | 否 | 截止日期起 |
|
|
|
-| deadlineEnd | string | 否 | 截止日期止 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**taskStatus**:0待填报 1待审核 2报送中 3已完成 4已逾期
|
|
|
-
|
|
|
-**响应 data.records 元素**(映射 `vpp_report_task`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 12001,
|
|
|
- "taskNo": "RPT-202605-001",
|
|
|
- "taskName": "2026年5月虚拟电厂运行月报",
|
|
|
- "reportOrg": 1,
|
|
|
- "reportOrgName": "交易中心",
|
|
|
- "reportCycle": 1,
|
|
|
- "reportType": "VPP_MONTHLY",
|
|
|
- "deadline": "2026-06-10T18:00:00",
|
|
|
- "taskStatus": 0,
|
|
|
- "assigneeId": 1001,
|
|
|
- "assigneeName": "张三",
|
|
|
- "remindDays": 3
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.11.2 报送记录详情
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/report/record/{id}`
|
|
|
-
|
|
|
-**功能描述**:获取报送记录详情及审核流水。
|
|
|
-
|
|
|
-**权限**:`report:view`
|
|
|
-
|
|
|
-**响应 data 示例**(映射 `vpp_report_record` + `vpp_report_audit_log`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 13001,
|
|
|
- "taskId": 12001,
|
|
|
- "taskName": "2026年5月虚拟电厂运行月报",
|
|
|
- "recordNo": "REC-202605-001",
|
|
|
- "reportPeriod": "2026-05",
|
|
|
- "submitMode": 1,
|
|
|
- "recordStatus": 0,
|
|
|
- "reportFileUrl": null,
|
|
|
- "receiptFileUrl": null,
|
|
|
- "retryCount": 0,
|
|
|
- "submittedAt": null,
|
|
|
- "auditLogs": [],
|
|
|
- "formData": null,
|
|
|
- "isDraft": true
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.11.3 获取预填报数据
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/report/record/{id}/prefill`
|
|
|
-
|
|
|
-**功能描述**:从客户、合同、结算、DR 等模块自动拉取预填报数据。
|
|
|
-
|
|
|
-**权限**:`report:edit`
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "reportPeriod": "2026-05",
|
|
|
- "customerCount": 56,
|
|
|
- "totalCapacityKw": 28500.0,
|
|
|
- "totalGenKwh": 1250000.0,
|
|
|
- "totalUseKwh": 980000.0,
|
|
|
- "drEventCount": 3,
|
|
|
- "drTotalSubsidy": 45000.0,
|
|
|
- "formData": {
|
|
|
- "basicInfo": { "vppName": "伍继虚拟电厂", "reportMonth": "2026-05" },
|
|
|
- "resourceStats": { "pvCount": 20, "essCount": 8 },
|
|
|
- "energyData": { "genKwh": 1250000.0, "useKwh": 980000.0 }
|
|
|
- }
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.11.4 保存填报数据
|
|
|
-
|
|
|
-**接口地址**:`PUT /prod-api/service-vpp/report/record/{id}/data`
|
|
|
-
|
|
|
-**功能描述**:保存或暂存报送填报数据,写入 `vpp_report_data`。
|
|
|
-
|
|
|
-**权限**:`report:edit`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| formData | object | 是 | 填报表单 JSON |
|
|
|
-| isDraft | boolean | 是 | true 草稿 / false 定稿 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "formData": {
|
|
|
- "basicInfo": { "vppName": "伍继虚拟电厂", "reportMonth": "2026-05" },
|
|
|
- "energyData": { "genKwh": 1250000.0, "useKwh": 980000.0 }
|
|
|
- },
|
|
|
- "isDraft": true
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "保存成功",
|
|
|
- "data": { "recordId": 13001, "isDraft": true },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.11.5 校验填报数据
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/report/record/{id}/validate`
|
|
|
-
|
|
|
-**功能描述**:校验填报数据完整性与逻辑一致性。
|
|
|
-
|
|
|
-**权限**:`report:edit`
|
|
|
-
|
|
|
-**请求参数**:无
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "valid": false,
|
|
|
- "errors": [
|
|
|
- { "field": "energyData.genKwh", "message": "发电量不能为负数" },
|
|
|
- { "field": "resourceStats.pvCount", "message": "光伏数量与系统统计不一致" }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.11.6 提交审核
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/report/record/{id}/submitAudit`
|
|
|
-
|
|
|
-**功能描述**:提交报送记录进入审核流程,`recordStatus` 变更为 1。
|
|
|
-
|
|
|
-**权限**:`report:submit`
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "提交成功",
|
|
|
- "data": { "recordId": 13001, "recordStatus": 1 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.11.7 报送审核
|
|
|
-
|
|
|
-**接口地址**:`PUT /prod-api/service-vpp/report/record/{id}/audit`
|
|
|
-
|
|
|
-**功能描述**:审核报送记录,写入 `vpp_report_audit_log`。
|
|
|
-
|
|
|
-**权限**:`report:audit`
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| passed | boolean | 是 | true 通过 / false 驳回 |
|
|
|
-| opinion | string | 否 | 审核意见 |
|
|
|
-| auditLevel | int | 是 | 1填报 2复核 3审批 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "passed": true,
|
|
|
- "opinion": "数据准确",
|
|
|
- "auditLevel": 2
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.11.8 执行报送
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/report/record/{id}/submit`
|
|
|
-
|
|
|
-**功能描述**:向监管机构执行报送(接口推送或生成文件),失败自动重试(次数由 `vpp.report.retry.max` 配置)。
|
|
|
-
|
|
|
-**权限**:`report:submit`
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "recordId": 13001,
|
|
|
- "recordStatus": 3,
|
|
|
- "submitMode": 1,
|
|
|
- "submittedAt": "2026-06-08T10:00:00",
|
|
|
- "reportFileUrl": "https://oss.example.com/report/13001.xlsx",
|
|
|
- "receiptFileUrl": "https://oss.example.com/receipt/13001.pdf"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.11.9 历史报送查询
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/report/history`
|
|
|
-
|
|
|
-**功能描述**:查询历史报送记录。
|
|
|
-
|
|
|
-**权限**:`report:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| reportOrg | int | 否 | 报送机构 |
|
|
|
-| reportPeriod | string | 否 | 报送周期,如 2026-05 |
|
|
|
-| recordStatus | int | 否 | 0草稿 1待审核 2报送中 3成功 4失败 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 13001,
|
|
|
- "recordNo": "REC-202605-001",
|
|
|
- "taskName": "2026年5月虚拟电厂运行月报",
|
|
|
- "reportOrg": 1,
|
|
|
- "reportPeriod": "2026-05",
|
|
|
- "recordStatus": 3,
|
|
|
- "submittedAt": "2026-06-08T10:00:00",
|
|
|
- "receiptFileUrl": "https://oss.example.com/receipt/13001.pdf"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.12 统计报表与数据分析
|
|
|
-
|
|
|
-> **数据来源**:`vpp_energy_summary_daily`、`vpp_energy_reading_monthly`、`vpp_settlement_bill`、`vpp_dr_evaluation`
|
|
|
-
|
|
|
-#### 2.12.1 能源统计报表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/statistics/energy`
|
|
|
-
|
|
|
-**功能描述**:按资源/时间维度统计发用电量。
|
|
|
-
|
|
|
-**权限**:`statistics:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| resourceIds | string | 否 | 资源点 ID,逗号分隔 |
|
|
|
-| startDate | string | 是 | 开始日期 YYYY-MM-DD |
|
|
|
-| endDate | string | 是 | 结束日期 YYYY-MM-DD |
|
|
|
-| granularity | string | 否 | day/month,默认 day |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "summary": { "totalGenKwh": 125000.0, "totalUseKwh": 98000.0, "greenRatio": 72.5 },
|
|
|
- "series": [
|
|
|
- { "date": "2026-06-01", "genKwh": 4200.0, "useKwh": 3200.0 },
|
|
|
- { "date": "2026-06-02", "genKwh": 4500.0, "useKwh": 3100.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.12.2 月度运行报告
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/statistics/monthlyReport`
|
|
|
-
|
|
|
-**功能描述**:生成指定资源点月度运行报告数据。
|
|
|
-
|
|
|
-**权限**:`statistics:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| resourceId | long | 否 | 资源点 ID,不传则全站 |
|
|
|
-| year | int | 是 | 年份 |
|
|
|
-| month | int | 是 | 月份 1-12 |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "year": 2026,
|
|
|
- "month": 5,
|
|
|
- "resourceName": "浦东光伏站",
|
|
|
- "genEnergyKwh": 85000.0,
|
|
|
- "useEnergyKwh": 12000.0,
|
|
|
- "maxPowerKw": 480.0,
|
|
|
- "avgPowerKw": 320.5,
|
|
|
- "onlineRate": 0.95,
|
|
|
- "alarmCount": 3,
|
|
|
- "drParticipateCount": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.12.3 电费结算报表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/statistics/settlementReport`
|
|
|
-
|
|
|
-**功能描述**:电费结算汇总报表。
|
|
|
-
|
|
|
-**权限**:`statistics:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| settleYear | int | 是 | 结算年 |
|
|
|
-| settleMonth | int | 否 | 结算月 |
|
|
|
-| customerId | long | 否 | 客户 ID |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "settleYear": 2026,
|
|
|
- "settleMonth": 5,
|
|
|
- "customerCount": 56,
|
|
|
- "totalEnergyKwh": 680000.0,
|
|
|
- "totalAmount": 850000.0,
|
|
|
- "paidAmount": 620000.0,
|
|
|
- "unpaidAmount": 230000.0,
|
|
|
- "overdueCount": 3
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.12.4 响应结算报表
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/statistics/drSettlement`
|
|
|
-
|
|
|
-**功能描述**:需求响应补贴结算汇总。
|
|
|
-
|
|
|
-**权限**:`statistics:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| startDate | string | 是 | 开始日期 |
|
|
|
-| endDate | string | 是 | 结束日期 |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "eventCount": 5,
|
|
|
- "totalTargetCapacityKw": 6000.0,
|
|
|
- "totalActualCapacityKw": 5200.0,
|
|
|
- "avgQualifiedRate": 86.7,
|
|
|
- "totalSubsidyAmount": 45000.0,
|
|
|
- "events": [
|
|
|
- {
|
|
|
- "eventId": "EVE_20260623001",
|
|
|
- "eventName": "夏季削峰需求响应",
|
|
|
- "subsidyAmount": 7350.0,
|
|
|
- "qualifiedRate": 87.5
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.12.5 总能耗统计
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/analytics/energyTotal`
|
|
|
-
|
|
|
-**功能描述**:总能耗/总费用统计,支持多维度视图。
|
|
|
-
|
|
|
-**权限**:`analytics:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| view | string | 否 | amount(电量)/ cost(费用),默认 amount |
|
|
|
-| granularity | string | 否 | day/month/year,默认 month |
|
|
|
-| startDate | string | 是 | 开始日期 |
|
|
|
-| endDate | string | 是 | 结束日期 |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "view": "amount",
|
|
|
- "granularity": "month",
|
|
|
- "total": 680000.0,
|
|
|
- "unit": "kWh",
|
|
|
- "points": [
|
|
|
- { "period": "2026-01", "value": 620000.0 },
|
|
|
- { "period": "2026-02", "value": 580000.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.12.6 分时用电分析
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/analytics/timeOfUse`
|
|
|
-
|
|
|
-**功能描述**:按尖峰平谷分析用电结构。
|
|
|
-
|
|
|
-**权限**:`analytics:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| customerId | long | 否 | 客户 ID |
|
|
|
-| startDate | string | 是 | 开始日期 |
|
|
|
-| endDate | string | 是 | 结束日期 |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "totalEnergyKwh": 12580.5,
|
|
|
- "periods": [
|
|
|
- { "timePeriod": 1, "name": "尖", "energyKwh": 1080.5, "ratio": 0.086 },
|
|
|
- { "timePeriod": 2, "name": "峰", "energyKwh": 3200.0, "ratio": 0.254 },
|
|
|
- { "timePeriod": 3, "name": "平", "energyKwh": 4500.0, "ratio": 0.358 },
|
|
|
- { "timePeriod": 4, "name": "谷", "energyKwh": 3800.0, "ratio": 0.302 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.12.7 同比/环比分析
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/analytics/trend`
|
|
|
-
|
|
|
-**功能描述**:指标同比/环比趋势分析。
|
|
|
-
|
|
|
-**权限**:`analytics:view`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| metric | string | 是 | 指标:genKwh/useKwh/revenue/subsidy |
|
|
|
-| compareType | string | 是 | yoy(同比)/ mom(环比) |
|
|
|
-| period | string | 是 | 统计周期,如 2026-05 或 2026 |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "metric": "genKwh",
|
|
|
- "compareType": "yoy",
|
|
|
- "currentPeriod": "2026-05",
|
|
|
- "currentValue": 1250000.0,
|
|
|
- "compareValue": 1100000.0,
|
|
|
- "changeRate": 0.136,
|
|
|
- "changeDirection": "up"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.12.8 报表导出
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/statistics/{type}/export`
|
|
|
-
|
|
|
-**功能描述**:导出统计报表文件。
|
|
|
-
|
|
|
-**权限**:`statistics:export`
|
|
|
-
|
|
|
-**路径参数**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| type | string | 是 | energy/monthlyReport/settlementReport/drSettlement |
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| format | string | 否 | pdf/xlsx,默认 xlsx |
|
|
|
-| 其他 | — | — | 与对应统计接口查询参数一致 |
|
|
|
-
|
|
|
-**响应**:文件流(`Content-Disposition: attachment`)
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.13 系统管理
|
|
|
-
|
|
|
-> **数据表**:用户/角色/菜单 → `sys_*`;配置 → `sys_config`;字典 → `sys_dict_*`;操作日志 → `sys_oper_log`;电子档案 → `vpp_file_archive`。
|
|
|
-
|
|
|
-#### 2.13.1 用户管理
|
|
|
-
|
|
|
-| 方法 | URL | 说明 | 数据表 |
|
|
|
-|------|-----|------|--------|
|
|
|
-| GET | `/prod-api/service-vpp/system/user` | 用户列表 | `sys_user` |
|
|
|
-| POST | `/prod-api/service-vpp/system/user` | 创建用户 | `sys_user` |
|
|
|
-| GET | `/prod-api/service-vpp/system/user/{userId}` | 用户详情 | `sys_user` |
|
|
|
-| PUT | `/prod-api/service-vpp/system/user/{userId}` | 更新用户 | `sys_user` |
|
|
|
-| DELETE | `/prod-api/service-vpp/system/user/{userId}` | 禁用/删除 | `sys_user`(`del_flag`) |
|
|
|
-| PUT | `/prod-api/service-vpp/system/user/{userId}/role` | 分配角色 | `sys_user_role` |
|
|
|
-| PUT | `/prod-api/service-vpp/system/user/{userId}/resetPassword` | 重置密码 | `sys_user` |
|
|
|
-
|
|
|
-**查询参数(列表)**:`userName`、`nickName`、`phonenumber`、`status`、`deptId`、`tenantId`、`current`、`size`
|
|
|
-
|
|
|
-**创建用户请求体示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "userName": "operator02",
|
|
|
- "nickName": "王五",
|
|
|
- "password": "******",
|
|
|
- "phonenumber": "13800138001",
|
|
|
- "email": "wangwu@example.com",
|
|
|
- "deptId": 101,
|
|
|
- "status": "0",
|
|
|
- "roleIds": [10, 11],
|
|
|
- "tenantId": 1
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**用户列表响应 data.records 元素**(映射 `sys_user`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "userId": 1001,
|
|
|
- "userName": "operator01",
|
|
|
- "nickName": "张三",
|
|
|
- "phonenumber": "13800138000",
|
|
|
- "email": "zhangsan@example.com",
|
|
|
- "deptId": 101,
|
|
|
- "deptName": "运营部",
|
|
|
- "status": "0",
|
|
|
- "tenantId": 1,
|
|
|
- "createTime": "2026-01-01T10:00:00",
|
|
|
- "roles": [{ "roleId": 10, "roleName": "运营人员" }]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**分配角色请求体** — `PUT /system/user/{userId}/role`:
|
|
|
-
|
|
|
-```json
|
|
|
-{ "roleIds": [10, 11] }
|
|
|
-```
|
|
|
-
|
|
|
-**重置密码请求体** — `PUT /system/user/{userId}/resetPassword`:
|
|
|
-
|
|
|
-```json
|
|
|
-{ "password": "NewPass@123" }
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.13.2 角色与菜单权限
|
|
|
-
|
|
|
-| 方法 | URL | 说明 | 数据表 |
|
|
|
-|------|-----|------|--------|
|
|
|
-| GET | `/prod-api/service-vpp/system/role` | 角色列表 | `sys_role` |
|
|
|
-| POST | `/prod-api/service-vpp/system/role` | 创建角色 | `sys_role` |
|
|
|
-| GET | `/prod-api/service-vpp/system/role/{roleId}` | 角色详情 | `sys_role` |
|
|
|
-| PUT | `/prod-api/service-vpp/system/role/{roleId}` | 更新角色 | `sys_role` |
|
|
|
-| DELETE | `/prod-api/service-vpp/system/role/{roleId}` | 删除角色 | `sys_role` |
|
|
|
-| GET | `/prod-api/service-vpp/system/menu` | 菜单树(含按钮权限) | `sys_menu` |
|
|
|
-| GET | `/prod-api/service-vpp/system/role/{roleId}/menu` | 角色已分配菜单 | `sys_role_menu` |
|
|
|
-| PUT | `/prod-api/service-vpp/system/role/{roleId}/menu` | 分配菜单 | `sys_role_menu` |
|
|
|
-
|
|
|
-**分配菜单请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "menuIds": [1001, 1002, 1003]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-> 按钮级权限由 `sys_menu.perms` 标识(如 `alarm:manage`),前端按 `menuType`(M 目录 / C 菜单 / F 按钮)渲染。
|
|
|
-
|
|
|
-**角色列表响应 data.records 元素**(映射 `sys_role`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "roleId": 10,
|
|
|
- "roleName": "运营人员",
|
|
|
- "roleKey": "vpp:operator",
|
|
|
- "roleSort": 1,
|
|
|
- "status": "0",
|
|
|
- "remark": "虚拟电厂运营角色",
|
|
|
- "createTime": "2026-01-01T10:00:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**创建/更新角色请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "roleName": "运营人员",
|
|
|
- "roleKey": "vpp:operator",
|
|
|
- "roleSort": 1,
|
|
|
- "status": "0",
|
|
|
- "remark": "虚拟电厂运营角色"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**菜单树响应 data 示例**(映射 `sys_menu`):
|
|
|
-
|
|
|
-```json
|
|
|
-[
|
|
|
- {
|
|
|
- "menuId": 1000,
|
|
|
- "menuName": "虚拟电厂",
|
|
|
- "parentId": 0,
|
|
|
- "menuType": "M",
|
|
|
- "path": "/vpp",
|
|
|
- "perms": null,
|
|
|
- "children": [
|
|
|
- {
|
|
|
- "menuId": 1001,
|
|
|
- "menuName": "告警管理",
|
|
|
- "parentId": 1000,
|
|
|
- "menuType": "C",
|
|
|
- "path": "alarm",
|
|
|
- "perms": "alarm:view",
|
|
|
- "children": [
|
|
|
- { "menuId": 1002, "menuName": "告警处理", "menuType": "F", "perms": "alarm:manage" }
|
|
|
- ]
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
-]
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.13.3 系统配置
|
|
|
-
|
|
|
-| 方法 | URL | 数据表 |
|
|
|
-|------|-----|--------|
|
|
|
-| GET | `/prod-api/service-vpp/system/config` | `sys_config` |
|
|
|
-| GET | `/prod-api/service-vpp/system/config/{configKey}` | `sys_config` |
|
|
|
-| PUT | `/prod-api/service-vpp/system/config/{configKey}` | `sys_config` |
|
|
|
-
|
|
|
-**查询参数**:`configName`、`tenantId`
|
|
|
-
|
|
|
-**更新配置请求体**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "configValue": "900",
|
|
|
- "configName": "默认采集频率秒",
|
|
|
- "remark": "VPP 全局采集间隔"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-VPP 推荐配置键(`config_key`):
|
|
|
-
|
|
|
-| configKey | 说明 |
|
|
|
-|-----------|------|
|
|
|
-| vpp.collect.interval.default | 默认采集频率(秒) |
|
|
|
-| vpp.data.retention.years | 时序数据保留年数 |
|
|
|
-| vpp.alarm.escalate.minutes | 告警升级间隔(分钟) |
|
|
|
-| vpp.report.retry.max | 报送失败最大重试次数 |
|
|
|
-| vpp.dr.notify.minutes.default | 需求响应默认提前通知(分钟) |
|
|
|
-
|
|
|
-#### 2.13.4 数据字典
|
|
|
-
|
|
|
-| 方法 | URL | 数据表 |
|
|
|
-|------|-----|--------|
|
|
|
-| GET | `/prod-api/service-vpp/system/dict/type` | `sys_dict_type` |
|
|
|
-| GET | `/prod-api/service-vpp/system/dict/data/{dictType}` | `sys_dict_data` |
|
|
|
-
|
|
|
-**字典类型列表响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-[
|
|
|
- {
|
|
|
- "dictId": 1,
|
|
|
- "dictName": "客户类型",
|
|
|
- "dictType": "vpp_customer_type",
|
|
|
- "status": "0",
|
|
|
- "remark": "VPP客户类型枚举"
|
|
|
- }
|
|
|
-]
|
|
|
-```
|
|
|
-
|
|
|
-**字典数据响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-[
|
|
|
- { "dictCode": 1, "dictLabel": "高压", "dictValue": "1", "dictSort": 1, "status": "0" },
|
|
|
- { "dictCode": 2, "dictLabel": "低压商用", "dictValue": "2", "dictSort": 2, "status": "0" },
|
|
|
- { "dictCode": 3, "dictLabel": "居民充电桩", "dictValue": "3", "dictSort": 3, "status": "0" },
|
|
|
- { "dictCode": 4, "dictLabel": "自有资产", "dictValue": "4", "dictSort": 4, "status": "0" }
|
|
|
-]
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.13.5 操作日志
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/system/operLog`
|
|
|
-
|
|
|
-**功能描述**:分页查询系统操作审计日志。
|
|
|
-
|
|
|
-**权限**:`system:operLog:view`
|
|
|
-
|
|
|
-**数据表**:`sys_oper_log`
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| operName | string | 否 | 操作人账号 |
|
|
|
-| title | string | 否 | 模块标题 |
|
|
|
-| businessType | int | 否 | 业务类型 |
|
|
|
-| status | int | 否 | 0正常 1异常 |
|
|
|
-| startTime | string | 否 | 操作时间起 |
|
|
|
-| endTime | string | 否 | 操作时间止 |
|
|
|
-| tenantId | long | 否 | 租户 ID |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "operId": 181001,
|
|
|
- "title": "告警管理",
|
|
|
- "businessType": 2,
|
|
|
- "operName": "operator01",
|
|
|
- "operUrl": "/prod-api/service-vpp/alarm/158001/handle",
|
|
|
- "operIp": "10.0.0.12",
|
|
|
- "status": 0,
|
|
|
- "operTime": "2026-06-23T10:20:00.000+08:00",
|
|
|
- "consumingTime": 125
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.13.6 电子档案
|
|
|
-
|
|
|
-| 方法 | URL | 说明 | 数据表 |
|
|
|
-|------|-----|------|--------|
|
|
|
-| GET | `/prod-api/service-vpp/archive` | 档案列表 | `vpp_file_archive` |
|
|
|
-| POST | `/prod-api/service-vpp/archive` | 上传档案(multipart) | `vpp_file_archive` |
|
|
|
-| GET | `/prod-api/service-vpp/archive/{id}` | 档案详情/预览 | `vpp_file_archive` |
|
|
|
-| GET | `/prod-api/service-vpp/archive/{id}/download` | 下载 | `vpp_file_archive` |
|
|
|
-| DELETE | `/prod-api/service-vpp/archive/{id}` | 软删除 | `vpp_file_archive` |
|
|
|
-
|
|
|
-**查询参数**:`bizType`(CONTRACT / CUSTOMER / RESOURCE 等)、`bizId`、`fileType`、`current`、`size`
|
|
|
-
|
|
|
-**上传表单字段**:
|
|
|
-
|
|
|
-| 字段 | 必填 | 说明 |
|
|
|
-|------|------|------|
|
|
|
-| file | 是 | 文件流 |
|
|
|
-| bizType | 是 | 业务类型 |
|
|
|
-| bizId | 是 | 业务主键 ID |
|
|
|
-| remark | 否 | 备注 |
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 5001,
|
|
|
- "fileName": "需求响应合作协议.pdf",
|
|
|
- "fileUrl": "https://oss.example.com/vpp/contract/5001.pdf",
|
|
|
- "fileType": "pdf",
|
|
|
- "fileSize": 2048576,
|
|
|
- "bizType": "CONTRACT",
|
|
|
- "bizId": 3001,
|
|
|
- "createdBy": 1001,
|
|
|
- "createTime": "2026-06-23T09:00:00.000+08:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.14 移动端专用
|
|
|
-
|
|
|
-移动端与 Web 共用 `/prod-api/service-vpp` 接口,以下补充移动端典型场景。
|
|
|
-
|
|
|
-#### 2.14.1 运营端首页
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/mobile/operator/home`
|
|
|
-
|
|
|
-**功能描述**:运营端移动端首页聚合数据。
|
|
|
-
|
|
|
-**权限**:`dashboard:view`
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "summary": {
|
|
|
- "todayGenKwh": 12580.5,
|
|
|
- "onlineDeviceCount": 128,
|
|
|
- "pendingAlarmCount": 5,
|
|
|
- "activeDrEventCount": 1
|
|
|
- },
|
|
|
- "recentAlarms": [
|
|
|
- { "id": 158001, "alarmContent": "功率超限110%", "alarmTime": "2026-06-23T10:15:00", "alarmGrade": 2 }
|
|
|
- ],
|
|
|
- "activeDrEvents": [
|
|
|
- { "id": 6001, "eventName": "夏季削峰需求响应", "startTime": "2026-06-23T14:00:00", "eventStatus": 2 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.14.2 业主端我的资源
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/mobile/owner/resource`
|
|
|
-
|
|
|
-**功能描述**:按当前登录用户关联的 `customerId` 过滤资源列表及实时状态。
|
|
|
-
|
|
|
-**权限**:已登录业主用户
|
|
|
-
|
|
|
-**响应 data 示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "customerId": 1001,
|
|
|
- "customerName": "上海某某有限公司",
|
|
|
- "resources": [
|
|
|
- {
|
|
|
- "resourceId": 2001,
|
|
|
- "resourceName": "浦东光伏站",
|
|
|
- "resourceType": "PV",
|
|
|
- "capacityKw": 500.0,
|
|
|
- "runStatus": 1,
|
|
|
- "activePowerKw": 320.5,
|
|
|
- "todayGenKwh": 1250.0
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.14.3 业主端账单
|
|
|
-
|
|
|
-**接口地址**:`GET /prod-api/service-vpp/mobile/owner/bill`
|
|
|
-
|
|
|
-**功能描述**:业主端查看本人账单列表。
|
|
|
-
|
|
|
-**权限**:已登录业主用户
|
|
|
-
|
|
|
-**请求参数(Query)**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| paymentStatus | int | 否 | 缴费状态 |
|
|
|
-| current | int | 否 | 页码 |
|
|
|
-| size | int | 否 | 每页数量 |
|
|
|
-
|
|
|
-**响应 data.records 元素**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 10001,
|
|
|
- "billNo": "BILL-202605-1001",
|
|
|
- "settleYear": 2026,
|
|
|
- "settleMonth": 5,
|
|
|
- "totalAmount": 15680.0,
|
|
|
- "paidAmount": 0,
|
|
|
- "paymentStatus": 0,
|
|
|
- "dueDate": "2026-06-15"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.14.4 消息通知
|
|
|
-
|
|
|
-| 方法 | URL | 说明 |
|
|
|
-|------|-----|------|
|
|
|
-| GET | `/prod-api/service-vpp/mobile/message` | 消息列表 |
|
|
|
-| PUT | `/prod-api/service-vpp/mobile/message/{id}/read` | 标记已读 |
|
|
|
-
|
|
|
-**消息列表查询参数**:`msgType`(alarm/dr/bill/system)、`isRead`(0/1)、`current`、`size`
|
|
|
-
|
|
|
-**消息列表响应 data.records 元素**(关联 `base_alarm_notice_result` / `sys_notice`):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "id": 14001,
|
|
|
- "msgType": "alarm",
|
|
|
- "title": "功率超限告警",
|
|
|
- "content": "浦东光伏站功率超过额定110%",
|
|
|
- "isRead": 0,
|
|
|
- "bizId": 158001,
|
|
|
- "createTime": "2026-06-23T10:15:00"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**标记已读响应**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "操作成功",
|
|
|
- "data": null,
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 2.14.5 微信订阅消息绑定
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/mobile/wechat/subscribe`
|
|
|
-
|
|
|
-**功能描述**:绑定微信 openId 并订阅消息模板。
|
|
|
-
|
|
|
-**权限**:已登录用户
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 参数名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| code | string | 是 | 微信登录 code |
|
|
|
-| templateIds | array | 是 | 订阅消息模板 ID 列表 |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "code": "wx_login_code_xxx",
|
|
|
- "templateIds": ["TEMPLATE_ALARM_001", "TEMPLATE_DR_001"]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "status": "SUCCESS",
|
|
|
- "code": 200,
|
|
|
- "msg": "绑定成功",
|
|
|
- "data": { "openId": "oXXXX", "subscribedCount": 2 },
|
|
|
- "exception": null
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 2.15 运管平台主动对接(Web 管理)
|
|
|
-
|
|
|
-> 网关前缀:`/prod-api/service-vpp/un`
|
|
|
-> 实现类:`UnIntegrationController` → `VppUnIntegrationService`
|
|
|
-> 用于联调阶段手动触发 Token、注册、Poll;生产环境建议配合 `poll-enabled` 定时任务。
|
|
|
-
|
|
|
-#### 2.15.1 刷新 UN Token
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/un/token/refresh`
|
|
|
-
|
|
|
-**功能描述**:向 UN 发送 `TokenRequest`,刷新本地 Token 缓存(默认 25 分钟有效,UN 侧 JWT 约 30 分钟)。
|
|
|
-
|
|
|
-**权限**:`system:admin` 或联调专用角色(建议)
|
|
|
-
|
|
|
-**前置条件**:`vpp.un.outbound-enabled=true` 且已配置 `vpp.un.base-url`、`vpp.un.dn-id`
|
|
|
-
|
|
|
-**响应 data**:UN `TokenResponse` 原文(含 `token` 字段)
|
|
|
-
|
|
|
-#### 2.15.2 注册 UN
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/un/register`
|
|
|
-
|
|
|
-**功能描述**:向 UN 发送 `CreateRegistrationRequest`,成功后 `registrationID` 写入 `vpp_registration` 及配置缓存。
|
|
|
-
|
|
|
-**响应 data**:UN `CreateRegistrationResponse` 原文
|
|
|
-
|
|
|
-#### 2.15.3 手动 Poll
|
|
|
-
|
|
|
-**接口地址**:`POST /prod-api/service-vpp/un/poll`
|
|
|
-
|
|
|
-**功能描述**:向 UN 发送 `Poll`,解析响应并自动入库/应答:
|
|
|
-
|
|
|
-| Poll 响应 root | 平台动作 |
|
|
|
-|----------------|----------|
|
|
|
-| PollResponse | 无待处理指令 |
|
|
|
-| DistributeEventRequest | 入库 `vpp_dr_event`,同步参与记录 |
|
|
|
-| ReregistrationRequest | 自动重新注册 |
|
|
|
-| CreateReportRequest | 回 `CreateReportResponse` 并按类型上报报告 |
|
|
|
-
|
|
|
-**响应 data**:UN Poll 响应原文
|
|
|
-
|
|
|
-#### 2.15.4 配置项(Nacos / bootstrap.yml)
|
|
|
-
|
|
|
-| 配置键 | 类型 | 默认 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| vpp.un.base-url | string | — | UN 基地址,如 `https://27.115.117.6:32001` |
|
|
|
-| vpp.un.dn-id | string | — | 运营商 ID |
|
|
|
-| vpp.un.dn-name | string | — | 运营商名称(注册报文) |
|
|
|
-| vpp.un.transport-address | string | — | DN 公网回调地址 |
|
|
|
-| vpp.un.outbound-enabled | boolean | false | 启用 DN→UN 主动调用 |
|
|
|
-| vpp.un.poll-enabled | boolean | false | 启用 Poll 定时任务 |
|
|
|
-| vpp.un.poll-interval-sec | int | 10 | Poll 间隔(秒) |
|
|
|
-| vpp.un.crypto-enabled | boolean | false | 启用 SM2/SM3 加解密 |
|
|
|
-| vpp.un.un-public-key | string | — | UN 公钥 Base64 |
|
|
|
-| vpp.un.dn-public-key | string | — | DN 公钥 Base64 |
|
|
|
-| vpp.un.dn-private-key | string | — | DN 私钥 Base64 |
|
|
|
-| vpp.un.price-down-coeff | string | 0.8 | 申报价格下调系数 |
|
|
|
-| vpp.un.token-header | string | Authorization | Token 请求头 |
|
|
|
-| vpp.un.token-prefix | string | Bearer | Token 前缀 |
|
|
|
-| vpp.un.token-ttl-minutes | int | 25 | 本地 Token 缓存分钟数 |
|
|
|
-| vpp.un.auto-ack-clearing | boolean | false | Poll 出清公示后自动 CreateEventResponse |
|
|
|
-| vpp.un.auto-register-on-startup | boolean | false | 启动时自动 Token + 注册 |
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 3. 运管平台对接 API(UN/DN)
|
|
|
-
|
|
|
-### 3.1 交互概述
|
|
|
-
|
|
|
-依据 DLT 1867—2024 及《虚拟电厂接口联调须知》,虚拟电厂运营商平台(**DN**)与运管平台(**UN**)通过 REST(HTTP) 交互。
|
|
|
-
|
|
|
-**角色说明**:
|
|
|
-
|
|
|
-- **DN**:本平台,需暴露 HTTP 服务供 UN 调用,同时主动调用 UN
|
|
|
-- **UN**:上海虚拟电厂运管平台
|
|
|
-
|
|
|
-**交互模式**:
|
|
|
-
|
|
|
-| 模式 | 说明 |
|
|
|
-|------|------|
|
|
|
-| 主动推送 | DN 向 UN 发送注册、数据报告 |
|
|
|
-| 被动拉取 | UN 通过 Poll 下发事件、报告请求、重新注册指令 |
|
|
|
-| 轮询 | DN 定时 Poll(建议 ≤30s,注册返回 `pollFreq` 如 PT10S) |
|
|
|
-
|
|
|
-**联调顺序(摘要)**:
|
|
|
-
|
|
|
-1. 获取 Token → 创建注册 → 元数据报告注册
|
|
|
-2. 实时/曲线数据上报
|
|
|
-3. 启动 Poll → 拉取事件 → 参与申报 → 出清分拆 → 确认公示
|
|
|
-4. 负荷预测/可调节能力预测上报
|
|
|
-
|
|
|
-### 3.2 安全机制
|
|
|
-
|
|
|
-| 项目 | 规范 |
|
|
|
-|------|------|
|
|
|
-| 传输 | HTTPS |
|
|
|
-| 请求方式 | POST |
|
|
|
-| 请求体加密 | SM2,使用 **UN 公钥**加密,Base64 编码 |
|
|
|
-| 数字签名 | SM3withSM2,使用 **DN 私钥**签名,Base64 后放入请求头 `X-Sign` |
|
|
|
-| 响应验签 | 从响应头取 `X-Sign`,UN 公钥验签 |
|
|
|
-| 响应解密 | Base64 解码后,DN 私钥 SM2 解密 |
|
|
|
-| Token | JWT,请求头 `Authorization: Bearer {token}`,有效期 **30 分钟** |
|
|
|
-| DN 被动接口 | UN 调用 DN 时:`crypto-enabled=true` 则请求体 SM2 解密 + `X-Sign` 验签;响应体 SM2 加密 + 签名(`VppUnDnCryptoRequestAdvice` / `ResponseAdvice`) |
|
|
|
-
|
|
|
-**密钥**:UN 分配 UN 公钥、DN 公钥、DN 私钥(均 Base64 编码)。联调初期可设 `vpp.un.crypto-enabled=false` 走明文 JSON。
|
|
|
-
|
|
|
-### 3.3 通用服务
|
|
|
-
|
|
|
-#### 3.3.1 获取 Token
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/TokenRequest`
|
|
|
-
|
|
|
-**调用方**:DN → UN
|
|
|
-
|
|
|
-**落库**:无(Token 缓存 Redis)
|
|
|
-
|
|
|
-**请求体(明文结构,实际需 SM2 加密 + SM3withSM2 签名)**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| root | string | 是 | 固定 `TokenRequest` |
|
|
|
-| version | int | 是 | 协议版本,当前为 1 |
|
|
|
-| requestID | string | 是 | UUID,请求唯一标识 |
|
|
|
-| dnID | string | 是 | 虚拟电厂运营商 ID |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "TokenRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "bf992657-d1b1-4634-badd-2be6f1275e4f",
|
|
|
- "dnID": "10010103000002"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应体(TokenResponse)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "TokenResponse",
|
|
|
- "version": 1,
|
|
|
- "code": 200,
|
|
|
- "description": "ok",
|
|
|
- "requestID": "bf992657-d1b1-4634-badd-2be6f1275e4f",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 响应字段 | 类型 | 说明 |
|
|
|
-|----------|------|------|
|
|
|
-| root | string | `TokenResponse` |
|
|
|
-| code | int | 200 成功 |
|
|
|
-| description | string | 结果描述 |
|
|
|
-| requestID | string | 与请求一致 |
|
|
|
-| dnID | string | 运营商 ID |
|
|
|
-| token | string | JWT,有效期 30 分钟 |
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 3.4 注册服务
|
|
|
-
|
|
|
-#### 3.4.1 创建注册请求
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/CreateRegistrationRequest`
|
|
|
-
|
|
|
-**功能描述**:首次注册或重新注册,成功后持久化至 `vpp_registration`。
|
|
|
-
|
|
|
-**调用方**:DN → UN
|
|
|
-
|
|
|
-**请求体(CreateRegistrationRequest)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "CreateRegistrationRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "8c03c417-3147-4d33-9d00-1ebbd71b7b09",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "dnName": "上海市自动需求响应平台",
|
|
|
- "registrationID": "208916e4-5b3f-440c-b60c-ffd5b6c37f2a",
|
|
|
- "reportOnly": false,
|
|
|
- "pullMode": true,
|
|
|
- "signature": false,
|
|
|
- "transport": "REST",
|
|
|
- "transportAddress": "http://27.115.117.6:9000"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 字段 | 说明 |
|
|
|
-|------|------|
|
|
|
-| registrationID | 首次注册为空;重新注册必须携带首次返回的 ID |
|
|
|
-| transportAddress | DN 服务公网地址,供 UN 回调 |
|
|
|
-| pullMode | true 表示 UN 通过 Poll 下发指令 |
|
|
|
-
|
|
|
-**响应字段说明**(映射 `vpp_registration`):
|
|
|
-
|
|
|
-| 响应字段 | 类型 | 说明 | 落库字段 |
|
|
|
-|----------|------|------|----------|
|
|
|
-| registrationID | string | 注册 ID | vpp_registration.registration_id |
|
|
|
-| pollFreq | string | Poll 频率 ISO8601 | — |
|
|
|
-| unID | string | 运管平台 ID | — |
|
|
|
-| code | int | 200 成功 | vpp_registration.reg_status=1 |
|
|
|
-
|
|
|
-**响应体(CreateRegistrationResponse)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "CreateRegistrationResponse",
|
|
|
- "version": 1,
|
|
|
- "code": 200,
|
|
|
- "description": "ok",
|
|
|
- "requestID": "8c03c417-3147-4d33-9d00-1ebbd71b7b09",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "unID": "test_un",
|
|
|
- "registrationID": "93eaa056-8553-4eb8-8113-15590cb98224",
|
|
|
- "pollFreq": "PT10S",
|
|
|
- "transport": ["REST"],
|
|
|
- "serviceSpecific": []
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-> **重要**:`registrationID` 需持久化至 `vpp_registration` 表,重新注册时必带,否则返回 `WrongRegistrationID`。
|
|
|
-
|
|
|
-#### 3.4.2 DN 侧被动接口(UN 调用 DN)
|
|
|
-
|
|
|
-DN 需实现 HTTP POST 服务端点(`UnDnController`,默认端口 **9906**,路径与服务名一致)。联调时 UN 访问 `{transportAddress}/{服务名}`。
|
|
|
-
|
|
|
-| 服务名 | DN 路径 | 说明 | 实现状态 |
|
|
|
-|--------|---------|------|----------|
|
|
|
-| TokenRequest | `/TokenRequest` | Token 请求(联调回显) | 已实现 |
|
|
|
-| CreateRegistrationRequest | `/CreateRegistrationRequest` | 注册(联调回显) | 已实现 |
|
|
|
-| RegisterReportRequest | `/RegisterReportRequest` | 元数据报告注册回显 | 已实现 |
|
|
|
-| MomentDataReportRequest | `/MomentDataReportRequest` | 实时数据报告回显 | 已实现 |
|
|
|
-| IntervalDataReportRequest | `/IntervalDataReportRequest` | 曲线数据报告回显 | 已实现 |
|
|
|
-| Poll | `/Poll` | UN 询问 DN(联调回显 PollResponse) | 已实现 |
|
|
|
-| **DistributeEventRequest** | `/DistributeEventRequest` | **事件邀约/反馈/出清公示推送** | **已实现,入库 vpp_dr_event** |
|
|
|
-| CreateOptRequest | `/CreateOptRequest` | 参与申报同步 + CreateOptResponse | 已实现 |
|
|
|
-| CreateCqRequest | `/CreateCqRequest` | 分拆出清同步 + CreateCqResponse | 已实现 |
|
|
|
-| CreateEventResponse | `/CreateEventResponse` | 出清公示确认 + 标准响应 | 已实现 |
|
|
|
-
|
|
|
-**被动接口成功响应扩展字段**(便于联调):
|
|
|
-
|
|
|
-| 字段 | 说明 |
|
|
|
-|------|------|
|
|
|
-| eventID | 运管平台事件 ID |
|
|
|
-| internalId | 本地 `vpp_dr_event.id` |
|
|
|
-| eventStatus | 本地事件状态(0~4) |
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 3.5 询问服务(Poll)
|
|
|
-
|
|
|
-#### 3.5.1 Poll 请求
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/Poll`
|
|
|
-
|
|
|
-**功能描述**:DN 定时轮询 UN,获取待处理指令(事件、报告请求、重新注册等)。
|
|
|
-
|
|
|
-**调用方**:DN → UN
|
|
|
-
|
|
|
-**频率**:注册返回 `pollFreq`,建议 ≤30s
|
|
|
-
|
|
|
-**请求体**:
|
|
|
-
|
|
|
-| 字段名 | 类型 | 必填 | 说明 |
|
|
|
-|--------|------|------|------|
|
|
|
-| root | string | 是 | 固定 `Poll` |
|
|
|
-| version | int | 是 | 协议版本 |
|
|
|
-| requestID | string | 是 | UUID |
|
|
|
-| dnID | string | 是 | 运营商 ID |
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "Poll",
|
|
|
- "version": 1,
|
|
|
- "requestID": "bf992657-d1b1-4634-badd-2be6f1275e4f",
|
|
|
- "dnID": "10010103000002"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**无指令时响应(PollResponse)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "PollResponse",
|
|
|
- "version": 1,
|
|
|
- "code": 200,
|
|
|
- "description": "ok",
|
|
|
- "requestID": "bf992657-d1b1-4634-badd-2be6f1275e4f",
|
|
|
- "dnID": "10010103000002"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 3.5.2 Poll 可返回的指令类型
|
|
|
-
|
|
|
-| 响应 root | 说明 | DN 后续动作(service-vpp 自动/手动) |
|
|
|
-|-----------|------|--------------------------------------|
|
|
|
-| PollResponse | 无待处理指令 | 无 |
|
|
|
-| ReregistrationRequest | 重新注册 | `VppUnIntegrationService.register()` |
|
|
|
-| DistributeEventRequest | 事件邀约/申报反馈/分拆通知/出清公示 | `VppDrEventIngestService.ingestDistributeEvent` |
|
|
|
-| CreateReportRequest | 拉取数据报告 | `VppUnReportService.handleCreateReportRequest` |
|
|
|
-
|
|
|
-**定时 Poll**:`vpp.un.poll-enabled=true` 时,`VppUnPollScheduler` 按 `poll-interval-sec` 执行(默认 10s)。
|
|
|
-
|
|
|
-**Token 失效重试**:HTTP 客户端检测 `TokenExpiredException` 等消息后自动刷新 Token 并重试一次。
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 3.6 报告服务
|
|
|
-
|
|
|
-#### 3.6.0 CreateReportRequest 应答流程(Poll 触发)
|
|
|
-
|
|
|
-UN 通过 Poll 返回 `CreateReportRequest` 后,DN 按以下顺序处理(`VppUnReportServiceImpl`):
|
|
|
-
|
|
|
-1. `POST {UN_BASE}/CreateReportResponse` — 确认收到报告请求
|
|
|
-2. 按 `reportRequestID` 上报对应报告:
|
|
|
-
|
|
|
-| reportRequestID | 后续上报接口 | 数据来源(当前实现) |
|
|
|
-|---------------|--------------|----------------------|
|
|
|
-| MetaDataReport | RegisterReportRequest | `vpp_resource_point`(unResourceId / resourceCode) |
|
|
|
-| IntervalDataReport | IntervalDataReportRequest | 在线资源点 adjustableKw(占位,待接 TDengine 96 点) |
|
|
|
-| MomentDataReport | MomentDataReportRequest | 同上 |
|
|
|
-
|
|
|
-> 完整 96 点曲线、能力预测等需后续对接 TDengine 与预测服务。
|
|
|
-
|
|
|
-#### 3.6.1 元数据报告注册
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/RegisterReportRequest`
|
|
|
-
|
|
|
-**功能描述**:向 UN 注册可上报的数据维度与量测点定义。
|
|
|
-
|
|
|
-**调用方**:DN → UN
|
|
|
-
|
|
|
-**落库**:`vpp_registration.meta_report_id`
|
|
|
-
|
|
|
-**请求体(摘要)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "RegisterReportRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "53dc702a-e400-4b06-bb06-335ea876171b",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "reportRequestID": "MetaDataReport",
|
|
|
- "report": [
|
|
|
- {
|
|
|
- "createdDateTime": "2019-11-30 12:00:00",
|
|
|
- "reportDescription": {
|
|
|
- "rID": 0,
|
|
|
- "metric": { "metricName": "AP", "multiplier": "k", "symbol": "W" },
|
|
|
- "reportDataSource": { "resourceID": ["10010103000002"] },
|
|
|
- "readingType": "Direct_Read",
|
|
|
- "samplingRate": { "minPeriod": "PT15M", "maxPeriod": "PT15M" }
|
|
|
- }
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**数据维度**:虚拟电厂运营商、聚合用户(户号)、分路可调节资源。
|
|
|
-
|
|
|
-**主要量测点(MetricName)**:
|
|
|
-
|
|
|
-| 量测点 | 单位 | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| AP | kW | 有功功率 |
|
|
|
-| AP_E | kWh | 用电量 |
|
|
|
-| AP_PE | kWh | 发电量 |
|
|
|
-| 实时上调/下调能力 | kW | 仅运营商维度 |
|
|
|
-| 实时响应时间 | s | 仅运营商维度 |
|
|
|
-| 实时爬坡速度 | kW/min | 仅运营商维度 |
|
|
|
-| 日前申报上调/下调能力 | kW | 预测数据 |
|
|
|
-
|
|
|
-**响应体(RegisterReportResponse)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "RegisterReportResponse",
|
|
|
- "version": 1,
|
|
|
- "code": 200,
|
|
|
- "description": "ok",
|
|
|
- "requestID": "53dc702a-e400-4b06-bb06-335ea876171b",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "reportRequestID": "MetaDataReport"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**上报日志**:每次调用写入 `vpp_report_log`(`report_type=RegisterReport`)。
|
|
|
-
|
|
|
-#### 3.6.2 实时数据报告(MomentDataReportRequest)
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/MomentDataReportRequest`
|
|
|
-
|
|
|
-**功能描述**:上报 15 分钟级实时运行数据及能力数据。
|
|
|
-
|
|
|
-**数据来源**:TDengine `device_metrics` 聚合
|
|
|
-
|
|
|
-**落库**:`vpp_report_log`(`report_type=MomentData`)
|
|
|
-
|
|
|
-| 项目 | 规格 |
|
|
|
-|------|------|
|
|
|
-| 密度 | 15 分钟 |
|
|
|
-| 频率 | 每 15 分钟,24 小时不间断 |
|
|
|
-| 延迟 | ≤ 30 分钟 |
|
|
|
-| 时标含义 | 00:15:00 代表 00:00:00~00:15:00 的平均/累加 |
|
|
|
-
|
|
|
-**请求体示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "MomentDataReportRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "a4af721e-6a52-4191-af84-71b778d48d6f",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "reportRequestID": "MomentDataReport",
|
|
|
- "createdDateTime": "2026-06-23 10:15:00",
|
|
|
- "report": [
|
|
|
- {
|
|
|
- "resourceID": "10010103000002",
|
|
|
- "metricName": "AP",
|
|
|
- "value": 1250.5,
|
|
|
- "multiplier": "k",
|
|
|
- "symbol": "W"
|
|
|
- },
|
|
|
- {
|
|
|
- "resourceID": "RES-PV-001",
|
|
|
- "metricName": "AP",
|
|
|
- "value": 320.5,
|
|
|
- "multiplier": "k",
|
|
|
- "symbol": "W"
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**能力数据**:须提前 30 分钟上报(如 9:00 上报 9:30 的能力)。
|
|
|
-
|
|
|
-#### 3.6.3 曲线数据报告(IntervalDataReportRequest)
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/IntervalDataReportRequest`
|
|
|
-
|
|
|
-**功能描述**:上报上一日 96 点有功功率曲线及日前申报能力。
|
|
|
-
|
|
|
-**数据来源**:TDengine 日聚合 + `vpp_energy_summary_daily`
|
|
|
-
|
|
|
-**落库**:`vpp_report_log`(`report_type=IntervalData`)
|
|
|
-
|
|
|
-| 项目 | 规格 |
|
|
|
-|------|------|
|
|
|
-| 频率 | 每日一次 |
|
|
|
-| 截止 | 次日 06:00 前 |
|
|
|
-| 数据点 | 96 点/日(15 分钟间隔,00:15~次日 00:00) |
|
|
|
-| 内容 | 上日有功功率 96 点 + 日前申报能力等 |
|
|
|
-
|
|
|
-**请求体示例(节选)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "IntervalDataReportRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "b5bf832f-7b63-5202-bg95-82c889e59g7g",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "reportRequestID": "IntervalDataReport",
|
|
|
- "createdDateTime": "2026-06-24 05:30:00",
|
|
|
- "report": [
|
|
|
- {
|
|
|
- "resourceID": "10010103000002",
|
|
|
- "metricName": "AP",
|
|
|
- "intervals": [
|
|
|
- { "time": "2026-06-23 00:15:00", "value": 980.0 },
|
|
|
- { "time": "2026-06-23 00:30:00", "value": 965.5 }
|
|
|
- ]
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 3.6.4 可调节能力负荷预测(RegulateForecastReportRequest)
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/RegulateForecastReportRequest`
|
|
|
-
|
|
|
-**功能描述**:上报次日可调节能力负荷预测数据。
|
|
|
-
|
|
|
-**调用方**:DN → UN
|
|
|
-
|
|
|
-**数据来源**:`vpp_customer`(dr_up/down_capacity_kw)+ 资源预测算法
|
|
|
-
|
|
|
-**落库**:`vpp_report_log`(`report_type=RegulateForecast`)
|
|
|
-
|
|
|
-**报送要求**:每日 6:00 前完成次日数据报送;须包含 96 点预测数据。
|
|
|
-
|
|
|
-**请求体示例(节选)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "RegulateForecastReportRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "c6cg943g-8c74-6313-ch06-93d990f60h8h",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "forecastDate": "2026-06-24",
|
|
|
- "upCapacityKw": [
|
|
|
- { "time": "2026-06-24 00:15:00", "value": 1500.0 }
|
|
|
- ],
|
|
|
- "downCapacityKw": [
|
|
|
- { "time": "2026-06-24 00:15:00", "value": 2000.0 }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "RegulateForecastReportResponse",
|
|
|
- "version": 1,
|
|
|
- "code": 200,
|
|
|
- "description": "ok",
|
|
|
- "requestID": "c6cg943g-8c74-6313-ch06-93d990f60h8h",
|
|
|
- "dnID": "10010103000002"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-#### 3.6.5 数据报告统一响应(DataReportResponse)
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "DataReportResponse",
|
|
|
- "version": 1,
|
|
|
- "code": 200,
|
|
|
- "description": "ok",
|
|
|
- "requestID": "a4af721e-6a52-4191-af84-71b778d48d6f",
|
|
|
- "dnID": "10010103000002"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 3.7 事件与参与服务
|
|
|
-
|
|
|
-#### 3.7.1 事件下发(DistributeEventRequest)
|
|
|
-
|
|
|
-通过 **Poll 返回** 或 **UN 推送** `POST {DN}/DistributeEventRequest` 到达 DN,解析后写入 `vpp_dr_event`(`raw_payload` 存原文)。
|
|
|
-
|
|
|
-**Event 结构(联调 JSON 20251127)**:
|
|
|
-
|
|
|
-| 节点 | 说明 |
|
|
|
-|------|------|
|
|
|
-| events[].descriptor | eventID、notification、control、filing、lastFiling、deadline 等 |
|
|
|
-| events[].activePeriod[] | dtstart、dtend(活动期,可多段) |
|
|
|
-| events[].signals.signal[] | ENERGY_PRICE → subsidyPrice;DEMAND_CHARGE → targetCapacityKw |
|
|
|
-| events[].target.resources[] | 户号申报/出清明细(account + values[].value) |
|
|
|
-
|
|
|
-**descriptor 关键字段映射(入库)**:
|
|
|
-
|
|
|
-| UN 字段 | 本地字段 | 映射规则 |
|
|
|
-|---------|----------|----------|
|
|
|
-| notification | responseType | mediumterm→1 日前,days→2 日内,near→3 秒级 |
|
|
|
-| control | eventType | peakClipping→1 削峰,fillValley→2 填谷 |
|
|
|
-| DEMAND_CHARGE signal | targetCapacityKw | 取 irregular.values[0].value |
|
|
|
-| ENERGY_PRICE signal | subsidyPrice | 取 irregular.values[0].value |
|
|
|
-| filing/lastFiling/resources | eventStatus 阶段 | 见 `VppUnEventPhase` |
|
|
|
-
|
|
|
-**业务阶段识别(VppUnEventPhase)**:
|
|
|
-
|
|
|
-| 阶段 | 条件 | 本地状态 |
|
|
|
-|------|------|----------|
|
|
|
-| INVITATION | filing=true,resources 空 | 0 待参与 |
|
|
|
-| DECLARE_FEEDBACK | filing=true,resources 有申报量 | 1 已申报 |
|
|
|
-| SPLIT_NOTICE | filing=false,lastFiling=true | 1 已申报 |
|
|
|
-| CLEARING_PUBLICITY | resources 含出清量 | 1 已申报(待 ack-clearing) |
|
|
|
-
|
|
|
-**Poll/推送示例(节选,完整样例见 §5.6)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "DistributeEventRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "a18b7934-43fe-4cae-bafc-5d185dd21e34",
|
|
|
- "dnID": "10010103000052",
|
|
|
- "events": [
|
|
|
- {
|
|
|
- "descriptor": {
|
|
|
- "eventID": "YY#1100_10010103000052",
|
|
|
- "control": "peakClipping",
|
|
|
- "notification": "mediumterm",
|
|
|
- "filing": true,
|
|
|
- "deadline": "2025-11-28 12:59:00"
|
|
|
- },
|
|
|
- "activePeriod": [
|
|
|
- { "dtstart": "2025-11-28T13:00:00", "dtend": "2025-11-28T18:00:00" }
|
|
|
- ],
|
|
|
- "signals": {
|
|
|
- "signal": [
|
|
|
- {
|
|
|
- "signalName": "ENERGY_PRICE",
|
|
|
- "intervals": { "irregular": { "values": [{ "value": 6 }] } }
|
|
|
- },
|
|
|
- {
|
|
|
- "signalName": "DEMAND_CHARGE",
|
|
|
- "intervals": { "irregular": { "values": [{ "value": 400 }] } }
|
|
|
- }
|
|
|
- ]
|
|
|
- },
|
|
|
- "target": { "resources": [] }
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**参与记录同步**:`target.resources[]` 或 `CreateOptRequest.list[]` 中 `account` 匹配 `vpp_customer.account_no`,写入 `vpp_dr_participation`。
|
|
|
-
|
|
|
-#### 3.7.2 创建参与请求(CreateOptRequest)
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/CreateOptRequest`
|
|
|
-
|
|
|
-**功能描述**:向 UN 申报参与(optIn)或拒绝(optOut)。
|
|
|
-
|
|
|
-**触发方式**:
|
|
|
-
|
|
|
-- Web:`POST /dr/event/{id}/participate`(outbound 启用时自动上报)
|
|
|
-- 联调:UN 推送至 DN `/CreateOptRequest`(本地同步 + 回显 CreateOptResponse)
|
|
|
-
|
|
|
-**参与请求体(optIn,官方格式)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "CreateOptRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "111",
|
|
|
- "dnID": "10010103000052",
|
|
|
- "eventID": "YY#1100_10010103000052",
|
|
|
- "optType": "optIn",
|
|
|
- "createdDateTime": "2025-11-27 13:34:00",
|
|
|
- "priceDownCoeff": "0.8",
|
|
|
- "list": [
|
|
|
- { "load": "10000", "account": "3101330499683", "needzk": "是" },
|
|
|
- { "load": "90000", "account": "3100149000967", "needzk": "否" }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-| 字段 | 说明 |
|
|
|
-|------|------|
|
|
|
-| optType | optIn 参与 / optOut 拒绝 |
|
|
|
-| list[].account | 电力户号(对应 vpp_customer.account_no) |
|
|
|
-| list[].load | 申报容量 kW(字符串) |
|
|
|
-| list[].needzk | 是否需要直控:是/否 |
|
|
|
-| priceDownCoeff | 价格下调系数,默认 0.8 |
|
|
|
-
|
|
|
-**拒绝请求体(optOut)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "CreateOptRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "111",
|
|
|
- "dnID": "10010103000052",
|
|
|
- "eventID": "YY#1100_10010103000052",
|
|
|
- "optType": "optOut"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应(CreateOptResponse)**:回显请求字段 + `code=200`。
|
|
|
-
|
|
|
-#### 3.7.3 分拆出清申报(CreateCqRequest)
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/CreateCqRequest`
|
|
|
-
|
|
|
-**功能描述**:末位运营商按户号分拆出清量;结构与 CreateOptRequest 一致,地址改为 `/CreateCqRequest`。
|
|
|
-
|
|
|
-**触发方式**:Web `POST /dr/event/{id}/clearing`(outbound 启用时自动上报)
|
|
|
-
|
|
|
-**请求体示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "CreateCqRequest",
|
|
|
- "version": 1,
|
|
|
- "requestID": "111",
|
|
|
- "dnID": "10010103000052",
|
|
|
- "eventID": "YY#1100_10010103000052",
|
|
|
- "optType": "optIn",
|
|
|
- "createdDateTime": "2025-11-27 13:34:00",
|
|
|
- "priceDownCoeff": "0.8",
|
|
|
- "list": [
|
|
|
- { "load": "10000", "account": "3101330499683" },
|
|
|
- { "load": "90000", "account": "3100149000967" }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-> 削峰出清量为负数、填谷为正数(UN 侧约定);本地 Web 出清使用正值 kW,上报 UN 前按户号汇总。
|
|
|
-
|
|
|
-#### 3.7.4 确认出清公示(CreateEventResponse)
|
|
|
-
|
|
|
-**接口地址**:`POST {UN_BASE}/CreateEventResponse`
|
|
|
-
|
|
|
-**功能描述**:收到 UN 出清公示(Poll 返回 DistributeEventRequest / CLEARING_PUBLICITY)后确认。
|
|
|
-
|
|
|
-**触发方式**:
|
|
|
-
|
|
|
-- Web:`POST /dr/event/{id}/ack-clearing`
|
|
|
-- 配置:`vpp.un.auto-ack-clearing=true`
|
|
|
-
|
|
|
-**请求体(官方格式)**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "root": "CreateEventResponse",
|
|
|
- "version": 1,
|
|
|
- "code": 200,
|
|
|
- "description": "ok",
|
|
|
- "requestID": "a42bb01d-2395-4038-a95c-7691a9273fc4",
|
|
|
- "dnID": "10010103000002",
|
|
|
- "eventResponses": [
|
|
|
- {
|
|
|
- "optType": "optIn",
|
|
|
- "code": 200,
|
|
|
- "description": "ok",
|
|
|
- "requestID": "9ab66db1-8fd4-4b03-8fd0-c97005a7e33f",
|
|
|
- "qualifiedEventID": {
|
|
|
- "eventID": "YY#1100_10010103000052",
|
|
|
- "modificationNumber": 0
|
|
|
- }
|
|
|
- }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**本地效果**:`vpp_dr_event.eventStatus=2`,初始化 `vpp_dr_execution`。
|
|
|
-
|
|
|
-#### 3.7.5 需求响应交互时序
|
|
|
-
|
|
|
-```mermaid
|
|
|
-sequenceDiagram
|
|
|
- participant Web as Web/移动端
|
|
|
- participant DN as 虚拟电厂平台(DN)
|
|
|
- participant UN as 运管平台(UN)
|
|
|
-
|
|
|
- DN->>UN: TokenRequest
|
|
|
- DN->>UN: CreateRegistrationRequest
|
|
|
- loop poll-interval-sec
|
|
|
- DN->>UN: Poll
|
|
|
- UN-->>DN: DistributeEventRequest(邀约)
|
|
|
- end
|
|
|
- Web->>DN: POST /dr/event/{id}/participate
|
|
|
- DN->>UN: CreateOptRequest(optIn)
|
|
|
- UN-->>DN: Poll → DistributeEventRequest(申报反馈)
|
|
|
- UN-->>DN: Poll → DistributeEventRequest(分拆通知)
|
|
|
- Web->>DN: POST /dr/event/{id}/clearing
|
|
|
- DN->>UN: CreateCqRequest
|
|
|
- UN-->>DN: Poll → DistributeEventRequest(出清公示)
|
|
|
- Web->>DN: POST /dr/event/{id}/ack-clearing
|
|
|
- DN->>UN: CreateEventResponse
|
|
|
- Web->>DN: POST /dr/event/{id}/complete
|
|
|
- Web->>DN: GET /dr/event/{id}/evaluation
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 3.8 信息对象服务(车网互动)
|
|
|
-
|
|
|
-> 车网互动相关接口为车网项目个性化能力,一般 VPP 运营商可不开发。
|
|
|
-
|
|
|
-| 方向 | 说明 |
|
|
|
-|------|------|
|
|
|
-| UN → DN | Poll 返回 ObjectMessage(启停充放电、功率调节) |
|
|
|
-| DN → UN | ObjectMessageResponse(接收确认) |
|
|
|
-| DN → UN | ObjectMessage(执行结果通知) |
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 3.9 UN 侧错误码
|
|
|
-
|
|
|
-| code | description | 处理建议 |
|
|
|
-|------|-------------|----------|
|
|
|
-| 200 | ok | 正常 |
|
|
|
-| 400 | WrongRoot | 检查接口名称 |
|
|
|
-| 400 | UnregisteredDn | 重新 CreateRegistrationRequest |
|
|
|
-| 400 | DnNotExist | 检查 dnID |
|
|
|
-| 400 | WrongRegistrationID | 检查 registrationID |
|
|
|
-| 400 | EventNotExist | 事件不存在 |
|
|
|
-| 400 | LoadForecastDataNot96Points | 补全 96 点预测数据 |
|
|
|
-| 400 | JsonWrong | 检查 JSON 格式 |
|
|
|
-| 500 | NoToken | 先获取 Token |
|
|
|
-| 500 | JWTDecodeException | Token 解码失败 |
|
|
|
-| 500 | TokenExpiredException | Token 过期,重新获取 |
|
|
|
-| 500 | JWTVerificationException | Token 无效 |
|
|
|
-
|
|
|
-**Token 异常响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "timestamp": "2021-11-12T08:29:14.038+0000",
|
|
|
- "status": 500,
|
|
|
- "error": "Internal Server Error",
|
|
|
- "message": "JWTVerificationException",
|
|
|
- "path": "/QueryRegistrationRequest"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-### 3.10 平台实现与配置(service-vpp)
|
|
|
-
|
|
|
-#### 3.10.1 代码模块映射
|
|
|
-
|
|
|
-| 能力 | 主要类 | 说明 |
|
|
|
-|------|--------|------|
|
|
|
-| DN 被动接口 | `UnDnController` / `VppUnDnServiceImpl` | UN 调用 DN |
|
|
|
-| DN 主动客户端 | `VppUnHttpExecutor` / `VppUnClient` | DN 调用 UN |
|
|
|
-| Token 缓存 | `VppUnTokenHolder` | 自动刷新、失败重试 |
|
|
|
-| 国密 | `VppUnCryptoService` + `VppUnDnCrypto*Advice` | SM2/SM3withSM2 |
|
|
|
-| 事件入库 | `VppDrEventIngestServiceImpl` / `VppUnEventParser` | DistributeEventRequest 解析 |
|
|
|
-| 参与同步 | `VppUnDrSyncServiceImpl` | account → vpp_dr_participation |
|
|
|
-| 执行初始化 | `VppDrExecutionBootstrapServiceImpl` | ack 后创建 execution |
|
|
|
-| Poll 调度 | `VppUnPollScheduler` | 定时 Poll |
|
|
|
-| 报告应答 | `VppUnReportServiceImpl` | CreateReportRequest 链路 |
|
|
|
-| Web 联调 | `UnIntegrationController` | /un/token、/register、/poll |
|
|
|
-| 报文构造 | `VppUnMessageBuilder` | 标准 JSON 报文 |
|
|
|
-| 启动注册 | `VppUnBootstrapRunner` | auto-register-on-startup |
|
|
|
-
|
|
|
-#### 3.10.2 服务端口与路径
|
|
|
-
|
|
|
-| 类型 | 地址示例 |
|
|
|
-|------|----------|
|
|
|
-| 内部 Web API | `http://{host}:9906` 经网关 `/prod-api/service-vpp/...` |
|
|
|
-| DN 被动 UN 接口 | `http://{公网IP}:9906/TokenRequest` 等(无网关前缀) |
|
|
|
-| UN 主动调用目标 | `vpp.un.base-url` + `/Poll`、`/CreateOptRequest` 等 |
|
|
|
-
|
|
|
-#### 3.10.3 联调检查清单
|
|
|
-
|
|
|
-1. 配置 `vpp.un.dn-id`、`transport-address`、密钥(或 crypto-enabled=false)
|
|
|
-2. `POST /un/token/refresh` → 获取 Token
|
|
|
-3. `POST /un/register` → 保存 registrationID
|
|
|
-4. `vpp.un.poll-enabled=true` 或手动 `POST /un/poll` → 事件入库
|
|
|
-5. Web 参与/出清/确认 → 验证 UN 侧收到 Opt/Cq/EventResponse
|
|
|
-6. 客户档案 `account_no` 与 UN 户号一致
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 4. 外部监管报送接口
|
|
|
-
|
|
|
-采用适配器模式,由报送服务统一调度,各机构独立实现。内部任务与记录对应 `vpp_report_task`、`vpp_report_record`、`vpp_report_data`。
|
|
|
-
|
|
|
-| 机构 | 适配器 | 对接方式 | reportOrg 枚举 | 说明 |
|
|
|
-|------|--------|----------|----------------|------|
|
|
|
-| 上海电力交易中心 | `TradeCenterReportAdapter` | REST API / 文件上传 | 1 | 按交易中心规范 |
|
|
|
-| 华东能监局 | `EnergyBureauReportAdapter` | 文件报送 | 2 | 生成标准格式文件 |
|
|
|
-| 上海市经信委 | `EconomyInfoReportAdapter` | REST API | 3 | 按月/年/临时 |
|
|
|
-| 国网上海电力 | `StateGridReportAdapter` | REST API | 4 | 运行与响应数据 |
|
|
|
-
|
|
|
-**报送重试策略**:失败后自动重试,次数由 `sys_config.vpp.report.retry.max` 控制(默认 3 次),间隔 1min / 5min / 15min(指数退避)。
|
|
|
-
|
|
|
-**内部触发接口**:`POST /prod-api/service-vpp/report/record/{id}/submit`(见 2.11.8)
|
|
|
-
|
|
|
-### 4.1 交易中心 REST 报送(示例)
|
|
|
-
|
|
|
-**接口地址**:`POST {TRADE_CENTER_BASE}/vpp/report/submit`(由适配器封装)
|
|
|
-
|
|
|
-**功能描述**:向上海电力交易中心推送月度运行数据。
|
|
|
-
|
|
|
-**触发方式**:内部 `TradeCenterReportAdapter` 调用
|
|
|
-
|
|
|
-**请求体**(由 `vpp_report_data.form_data` 转换):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "reportPeriod": "2026-05",
|
|
|
- "vppName": "伍继虚拟电厂",
|
|
|
- "totalCapacityKw": 28500.0,
|
|
|
- "totalGenKwh": 1250000.0,
|
|
|
- "totalUseKwh": 980000.0,
|
|
|
- "drEventCount": 3,
|
|
|
- "drTotalSubsidy": 45000.0,
|
|
|
- "attachments": [
|
|
|
- { "fileName": "运行月报.xlsx", "fileUrl": "https://oss.example.com/report/13001.xlsx" }
|
|
|
- ]
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**响应示例**:
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "code": 200,
|
|
|
- "message": "报送成功",
|
|
|
- "receiptNo": "TC-202606080001",
|
|
|
- "receiptUrl": "https://trade.example.com/receipt/TC-202606080001.pdf"
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-**落库**:更新 `vpp_report_record.record_status=3`、`receipt_file_url`、`submitted_at`。
|
|
|
-
|
|
|
-### 4.2 能监局文件报送(示例)
|
|
|
-
|
|
|
-**接口地址**:文件上传至指定 SFTP/OSS 目录(由 `EnergyBureauReportAdapter` 封装)
|
|
|
-
|
|
|
-**请求**:生成符合能监局模板的标准格式文件(xlsx/pdf)
|
|
|
-
|
|
|
-**响应**:文件上传成功回执;`vpp_report_record.receipt_file_url` 存储回执路径
|
|
|
-
|
|
|
-### 4.3 经信委 REST 报送(示例)
|
|
|
-
|
|
|
-**接口地址**:`POST {ECONOMY_BASE}/api/vpp/monthlyReport`
|
|
|
-
|
|
|
-**请求头**:`Authorization: Bearer {机构Token}`
|
|
|
-
|
|
|
-**请求体**:同 4.1,`reportOrg=3`
|
|
|
-
|
|
|
-**响应**:`{ "success": true, "recordId": "EIC-202605-001" }`
|
|
|
-
|
|
|
-### 4.4 国网上海 REST 报送(示例)
|
|
|
-
|
|
|
-**接口地址**:`POST {STATE_GRID_BASE}/vpp/data/upload`
|
|
|
-
|
|
|
-**请求体**:运行数据 + 需求响应执行数据(来源 `vpp_dr_evaluation`、`vpp_energy_summary_daily`)
|
|
|
-
|
|
|
-**响应**:`{ "status": "ACCEPTED", "batchId": "SG-20260608001" }`
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-## 5. 附录
|
|
|
-
|
|
|
-### 5.1 内部 API 模块索引
|
|
|
-
|
|
|
-| 模块 | 路径前缀 | 主要接口数 |
|
|
|
-|------|----------|------------|
|
|
|
-| 认证 | `/prod-api/service-vpp/auth` | 4 |
|
|
|
-| 首页 | `/prod-api/service-vpp/dashboard` | 4 |
|
|
|
-| 客户 | `/prod-api/service-vpp/customer` | 10+ |
|
|
|
-| 合同 | `/prod-api/service-vpp/contract` | 8+ |
|
|
|
-| 资源 | `/prod-api/service-vpp/resource` | 10+ |
|
|
|
-| 监控 | `/prod-api/service-vpp/monitor` | 4 |
|
|
|
-| 告警 | `/prod-api/service-vpp/alarm` | 15+ |
|
|
|
-| 需求响应 | `/prod-api/service-vpp/dr` | 20+ |
|
|
|
-| 运管联调 | `/prod-api/service-vpp/un` | 3 |
|
|
|
-| 结算 | `/prod-api/service-vpp/settlement` | 8+ |
|
|
|
-| 报送 | `/prod-api/service-vpp/report` | 10+ |
|
|
|
-| 统计 | `/prod-api/service-vpp/statistics` | 6+ |
|
|
|
-| 分析 | `/prod-api/service-vpp/analytics` | 4 |
|
|
|
-| 系统 | `/prod-api/service-vpp/system` | 10+ |
|
|
|
-| 移动端 | `/prod-api/service-vpp/mobile` | 6+ |
|
|
|
-
|
|
|
-### 5.2 运管平台 API 索引
|
|
|
-
|
|
|
-| 服务类型 | 接口 | 方向 | 实现 |
|
|
|
-|----------|------|------|------|
|
|
|
-| 通用 | TokenRequest | DN→UN | 已实现 |
|
|
|
-| 注册 | CreateRegistrationRequest | DN→UN | 已实现 |
|
|
|
-| 询问 | Poll | DN→UN | 已实现(含定时) |
|
|
|
-| 事件 | DistributeEventRequest | UN→DN / Poll | 已实现 |
|
|
|
-| 报告 | CreateReportResponse | DN→UN | 已实现 |
|
|
|
-| 报告 | RegisterReportRequest | DN→UN | 已实现(Poll 触发) |
|
|
|
-| 报告 | MomentDataReportRequest | DN→UN | 已实现(Poll 触发,占位数据) |
|
|
|
-| 报告 | IntervalDataReportRequest | DN→UN | 已实现(Poll 触发,占位数据) |
|
|
|
-| 报告 | RegulateForecastReportRequest | DN→UN | 待完善 |
|
|
|
-| 参与 | CreateOptRequest | DN→UN | 已实现 |
|
|
|
-| 参与 | CreateCqRequest | DN→UN | 已实现 |
|
|
|
-| 事件 | CreateEventResponse | DN→UN | 已实现 |
|
|
|
-| 对象 | ObjectMessage | UN↔DN | 未实现 |
|
|
|
-
|
|
|
-### 5.3 权限码清单(节选)
|
|
|
-
|
|
|
-| 权限码 | 说明 |
|
|
|
-|--------|------|
|
|
|
-| dashboard:view | 首页查看 |
|
|
|
-| customer:access:create | 提交准入 |
|
|
|
-| customer:access:audit | 准入审核 |
|
|
|
-| contract:create | 创建合同 |
|
|
|
-| contract:audit | 合同审核 |
|
|
|
-| resource:manage | 资源管理 |
|
|
|
-| device:control | 设备远程控制 |
|
|
|
-| alarm:manage | 告警管理 |
|
|
|
-| dr:participate | 需求响应参与 |
|
|
|
-| dr:manage | 需求响应管理(含邀约下发) |
|
|
|
-| settlement:manage | 结算管理 |
|
|
|
-| report:submit | 信息报送 |
|
|
|
-| system:admin | 系统管理 |
|
|
|
-
|
|
|
-### 5.4 内部 API 与数据表映射(节选)
|
|
|
-
|
|
|
-| API 路径前缀 | 主要数据表 | 类型 |
|
|
|
-|--------------|------------|------|
|
|
|
-| `/prod-api/service-vpp/auth`、`/prod-api/service-vpp/system/user` | `sys_user`、`sys_user_role` | usky `sys_*` |
|
|
|
-| `/prod-api/service-vpp/system/role`、`/prod-api/service-vpp/system/menu` | `sys_role`、`sys_menu`、`sys_role_menu` | usky `sys_*` |
|
|
|
-| `/prod-api/service-vpp/system/config` | `sys_config` | usky `sys_*` |
|
|
|
-| `/prod-api/service-vpp/system/dict` | `sys_dict_type`、`sys_dict_data` | usky `sys_*` |
|
|
|
-| `/prod-api/service-vpp/system/operLog` | `sys_oper_log` | usky `sys_*` |
|
|
|
-| `/prod-api/service-vpp/alarm/rule` | `rule_engine`、`rule_engine_device`、`rule_engine_condition`、`rule_engine_cron` | usky `rule_*` |
|
|
|
-| `/prod-api/service-vpp/alarm` | `base_alarm`、`base_alarm_type` | usky `base_*` |
|
|
|
-| `/prod-api/service-vpp/alarm/notice` | `base_alarm_notice`、`base_alarm_notice_result` | usky `base_*` |
|
|
|
-| `/prod-api/service-vpp/device/{id}/control` | `dmp_device_command`、`vpp_device_control_log` | usky `dmp_*` + `vpp_*` |
|
|
|
-| `/prod-api/service-vpp/archive` | `vpp_file_archive` | VPP 专属 |
|
|
|
-| `/prod-api/service-vpp/resource` | `vpp_resource_point`、`vpp_device`、`vpp_site` | VPP 专属 |
|
|
|
-| `/prod-api/service-vpp/capability-eval` | `vpp_site`、`vpp_resource_point`、`vpp_device`、`vpp_dr_participation`、`vpp_dr_event`、`vpp_dr_evaluation` + TDengine `device_metrics` | VPP 专属 + 时序库 |
|
|
|
-| `/prod-api/service-vpp/customer` 等核心业务 | `vpp_customer`、`vpp_contract`、`vpp_resource_point` 等 | VPP 专属 |
|
|
|
-| `/prod-api/service-vpp/settlement` | `vpp_energy_reading_monthly`、`vpp_settlement_bill`、`vpp_payment_record` | VPP 专属 |
|
|
|
-| `/prod-api/service-vpp/report` | `vpp_report_task`、`vpp_report_record`、`vpp_report_data` | VPP 专属 |
|
|
|
-| `/prod-api/service-vpp/dr` | `vpp_dr_event`、`vpp_dr_invitation`、`vpp_dr_participation`、`vpp_dr_strategy`、`vpp_dr_execution`、`vpp_dr_evaluation` | VPP 专属 |
|
|
|
-| `/prod-api/service-vpp/un` | 调用 UN,落库同 DR + `vpp_registration` | VPP 专属 |
|
|
|
-| 运管平台 DN 被动路径 | `vpp_dr_event`、`vpp_dr_participation`、`vpp_registration` | VPP 专属 |
|
|
|
-| 运管平台 UN 主动客户端 | `vpp_registration`、`vpp_report_log`(报告日志待完善) | VPP 专属 |
|
|
|
-| 监控/统计时序数据 | TDengine `device_metrics` | 时序库 |
|
|
|
-
|
|
|
-### 5.5 参考文档
|
|
|
-
|
|
|
-1. 《API设计文档0304.md》(通用规范与路径格式)
|
|
|
-2. 《虚拟电厂平台详细设计文档 V1.0》
|
|
|
-3. 《虚拟电厂平台数据库设计文档 V1.0》
|
|
|
-4. 《虚拟电厂接口联调须知》(2025-12-11)
|
|
|
-5. 《虚拟电厂运管管理平台-虚拟电厂接口联调 JSON 报文实例》(2025-11-27)
|
|
|
-6. DLT 1867—2024《电力需求响应信息交互规范》
|
|
|
-
|
|
|
-### 5.6 UN 联调 JSON 样例
|
|
|
-
|
|
|
-工程内置样例(与联调文档 20251127 对齐),路径:
|
|
|
-
|
|
|
-`service-vpp/service-vpp-biz/src/main/resources/un-samples/`
|
|
|
-
|
|
|
-| 文件名 | root | 用途 |
|
|
|
-|--------|------|------|
|
|
|
-| poll-request.json | Poll | DN 主动 Poll |
|
|
|
-| distribute-event-invitation.json | DistributeEventRequest | 邀约入库测试 |
|
|
|
-| create-opt-request.json | CreateOptRequest | 参与申报 |
|
|
|
-| create-cq-request.json | CreateCqRequest | 分拆出清 |
|
|
|
-| create-event-response.json | CreateEventResponse | 出清公示确认 |
|
|
|
-
|
|
|
-**本地被动接口测试示例**:
|
|
|
-
|
|
|
-```http
|
|
|
-POST http://localhost:9906/DistributeEventRequest
|
|
|
-Content-Type: application/json
|
|
|
-
|
|
|
-(Body 使用 distribute-event-invitation.json 内容)
|
|
|
-```
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-**文档结束**
|