服务器选型:腾讯云
确认使用腾讯云服务器,具体配置待定
flowchart TB
subgraph Client["客户端层"]
MiniApp["微信小程序
(用户端)"]
WebAdmin["管理后台 Web
(运营管理)"]
OCPP["外部平台
(OCPP设备通信)"]
end
subgraph Gateway["网关层 / Nginx"]
Nginx["SSL卸载
负载均衡
路由分发"]
end
subgraph MicroServices["Spring Cloud 微服务"]
subgraph Core["核心业务服务"]
User["用户服务
User"]
Order["订单服务
Order"]
Device["设备服务
Device"]
Settlement["结算服务
Settle"]
end
subgraph Support["支撑服务"]
Operation["运营服务
Operation"]
System["系统服务
System"]
Task["定时任务
Task"]
end
Gateway_Svc["网关服务
Gateway"]
end
subgraph Infrastructure["基础设施层"]
Nacos["Nacos
服务注册/配置中心"]
RocketMQ["RocketMQ
消息队列"]
MySQL["MySQL 8.0
主数据库"]
Redis["Redis 7.x
缓存"]
MinIO["MinIO/OSS
文件存储"]
end
MiniApp -->|HTTPS/REST| Nginx
WebAdmin -->|HTTPS/REST| Nginx
OCPP -->|WebSocket/HTTP| Nginx
Nginx --> Gateway_Svc
Gateway_Svc --> User
Gateway_Svc --> Order
Gateway_Svc --> Device
Gateway_Svc --> Settlement
Gateway_Svc --> Operation
Gateway_Svc --> System
User --> Nacos
Order --> Nacos
Device --> Nacos
Settlement --> Nacos
Operation --> Nacos
System --> Nacos
Order --> RocketMQ
Device --> RocketMQ
User --> MySQL
Order --> MySQL
Device --> MySQL
Settlement --> MySQL
Operation --> MySQL
User --> Redis
Order --> Redis
Device --> Redis
Settlement --> Redis
Operation --> MinIO
System --> MinIO
style Client fill:#e0f2fe,stroke:#0077b6,stroke-width:2px
style Gateway fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
style MicroServices fill:#dcfce7,stroke:#16a34a,stroke-width:2px
style Infrastructure fill:#f3e8ff,stroke:#9333ea,stroke-width:2px
style Core fill:#fff,stroke:#0077b6,stroke-width:1px
style Support fill:#fff,stroke:#0077b6,stroke-width:1px
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 小程序 | 原生开发 + Vant Weapp | 微信生态,成熟稳定 |
| 管理后台前端 | Vue 3 + Element Plus | 响应式,生态完善 |
| 后端框架 | Spring Boot 2.7 / Spring Cloud 2022 | 主流微服务框架 |
| 服务注册 | Nacos 2.x | 配置中心 + 注册中心一体化 |
| 网关 | Spring Cloud Gateway | 统一入口,路由 + 鉴权 |
| 数据库 | MySQL 8.0 | 主业务数据存储 |
| 缓存 | Redis 7.x | 会话、热点数据、分布式锁 |
| 消息队列 | RocketMQ 5.x | 设备事件异步处理 |
| 文件存储 | MinIO / 阿里OSS | 发票、合同等文件 |
| 日志 | ELK Stack (可选) | 日志采集与分析 |
| 监控 | Prometheus + Grafana | 指标监控 |
flowchart LR
subgraph Base["基础设施层"]
Common["energy-common
公共模块"]
Gateway["energy-gateway
网关服务"]
end
subgraph Domain["业务域服务"]
User["energy-user
用户服务"]
Device["energy-device
设备服务"]
Order["energy-order
订单服务"]
Settlement["energy-settlement
结算服务"]
end
subgraph Support["支撑服务"]
Operation["energy-operation
运营服务"]
System["energy-system
系统服务"]
Task["energy-task
定时任务"]
end
Gateway --> Common
User --> Common
Device --> Common
Order --> Common
Settlement --> Common
Operation --> Common
System --> Common
Task --> Common
User --> Gateway
Device --> Gateway
Order --> Gateway
Settlement --> Gateway
Operation --> Gateway
System --> Gateway
Task --> Gateway
Order --> User
Order --> Device
Settlement --> Order
Settlement --> User
Settlement --> Device
Operation --> User
Operation --> Device
Operation --> Order
Task --> Order
Task --> Settlement
style Base fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
style Domain fill:#dcfce7,stroke:#16a34a,stroke-width:2px
style Support fill:#e0f2fe,stroke:#0077b6,stroke-width:2px
| 模块 | 端口 | 主要职责 | 数据库 |
|---|---|---|---|
energy-gateway | 8080 | 统一入口,路由、鉴权、限流 | - |
energy-user | 8081 | 用户注册登录、企业账户、员工绑定 | user_db |
energy-device | 8082 | 区域、站点、充电桩、充电枪管理 | device_db |
energy-order | 8083 | 充电订单、实时计费、支付 | order_db |
energy-settlement | 8084 | 分账规则、结算单、对账核销 | settlement_db |
energy-operation | 8085 | 运维工单、运营报表、消息通知 | operation_db |
energy-system | 8086 | 权限管理、角色配置、操作日志 | system_db |
energy-task | 8087 | 日结算、数据报表、定时任务 | - |
erDiagram
REGION ||--o{ SITE : "管辖"
SITE ||--o{ STATION : "包含"
STATION ||--o{ GUN : "拥有"
GUN }o--o| PRICING_RULE : "应用"
SITE ||--o| AGENT : "归属"
REGION {
bigint id PK
varchar code UK
varchar name
bigint parent_id
bigint agent_id
tinyint status
}
SITE {
bigint id PK
varchar code UK
varchar name
bigint region_id FK
bigint agent_id FK
varchar address
decimal latitude
decimal longitude
tinyint status
}
STATION {
bigint id PK
varchar code UK
bigint site_id FK
varchar manufacturer
varchar model
decimal power_rate
int gun_count
tinyint status
}
GUN {
bigint id PK
bigint station_id FK
varchar gun_no
tinyint status
decimal current_power
bigint pricing_rule_id FK
}
PRICING_RULE {
bigint id PK
varchar name
varchar rule_type
varchar scope_type
bigint scope_id
tinyint status
}
AGENT {
bigint id PK
varchar name
varchar level
bigint parent_id
decimal balance
tinyint status
}
erDiagram
USER ||--o| COMPANY : "绑定"
USER ||--o{ EMPLOYEE : "关联"
COMPANY ||--o{ EMPLOYEE : "拥有"
USER {
bigint id PK
varchar openid UK
varchar unionid
varchar nickname
varchar phone
bigint company_id FK
tinyint status
}
COMPANY {
bigint id PK
varchar name
varchar credit_code
decimal balance
decimal credit_limit
tinyint status
}
EMPLOYEE {
bigint id PK
bigint user_id FK
bigint company_id FK
varchar employee_no
varchar department
tinyint status
}
erDiagram
USER ||--o{ CHARGING_ORDER : "下单"
GUN ||--o{ CHARGING_ORDER : "使用"
CHARGING_ORDER ||--o| INVOICE : "开具"
CHARGING_ORDER ||--o{ ORDER_SPLIT : "分账"
ORDER_SPLIT ||--o| STATEMENT : "汇总"
AGENT ||--o{ STATEMENT : "关联"
CHARGING_ORDER {
bigint id PK
varchar order_no UK
bigint user_id FK
bigint company_id FK
bigint gun_id FK
datetime start_time
datetime end_time
int total_seconds
decimal charged_kwh
decimal electricity_fee
decimal service_fee
decimal total_amount
varchar status
varchar pay_status
varchar split_status
}
ORDER_SPLIT {
bigint id PK
bigint order_id FK
varchar split_type
bigint target_id
decimal split_ratio
decimal split_amount
tinyint status
}
STATEMENT {
bigint id PK
varchar statement_no UK
bigint agent_id FK
date settle_date
decimal total_amount
decimal order_count
varchar status
datetime audit_time
}
INVOICE {
bigint id PK
varchar invoice_no UK
bigint order_id FK
bigint user_id FK
decimal amount
varchar status
}
erDiagram
WORK_ORDER ||--|| USER : "报修人"
WORK_ORDER ||--o| STATION : "关联设备"
WORK_ORDER ||--o| USER : "处理人"
WORK_ORDER {
bigint id PK
varchar order_no UK
bigint reporter_id FK
bigint station_id FK
bigint handler_id FK
varchar type
varchar priority
varchar description
varchar status
datetime handle_time
varchar result
}
USER ||--o{ MESSAGE : "接收"
MESSAGE {
bigint id PK
bigint user_id FK
varchar type
varchar title
varchar content
tinyint is_read
datetime create_time
}
-- 区域表
CREATE TABLE region (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
code VARCHAR(32) NOT NULL UNIQUE COMMENT '区域编码',
name VARCHAR(64) NOT NULL COMMENT '区域名称',
parent_id BIGINT DEFAULT 0 COMMENT '父区域ID(树形结构)',
agent_id BIGINT COMMENT '归属代理商ID',
status TINYINT DEFAULT 1 COMMENT '状态:0禁用 1启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='区域表';
-- 站点表
CREATE TABLE site (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
code VARCHAR(32) NOT NULL UNIQUE COMMENT '站点编码',
name VARCHAR(128) NOT NULL COMMENT '站点名称',
region_id BIGINT NOT NULL COMMENT '所属区域',
agent_id BIGINT COMMENT '归属代理商ID',
address VARCHAR(256) COMMENT '详细地址',
latitude DECIMAL(10, 6) COMMENT '纬度',
longitude DECIMAL(10, 6) COMMENT '经度',
status TINYINT DEFAULT 1 COMMENT '状态:0关闭 1营业',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_region_id (region_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='站点表';
-- 充电桩表
CREATE TABLE station (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
code VARCHAR(64) NOT NULL UNIQUE COMMENT '设备编码/桩号',
site_id BIGINT NOT NULL COMMENT '所属站点',
manufacturer VARCHAR(64) COMMENT '设备厂商',
model VARCHAR(64) COMMENT '设备型号',
power_rate DECIMAL(6, 2) COMMENT '额定功率(kW)',
gun_count INT DEFAULT 2 COMMENT '枪数量',
status TINYINT DEFAULT 1 COMMENT '状态:0离线 1空闲 2充电 3故障',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_site_id (site_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='充电桩表';
-- 充电枪表
CREATE TABLE gun (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
station_id BIGINT NOT NULL COMMENT '所属充电桩',
gun_no VARCHAR(8) NOT NULL COMMENT '枪口号:A/B/C',
status TINYINT DEFAULT 1 COMMENT '状态:0离线 1空闲 2充电 3故障',
current_power DECIMAL(6, 2) DEFAULT 0 COMMENT '当前功率(kW)',
pricing_rule_id BIGINT COMMENT '关联计费规则ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_station_gun (station_id, gun_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='充电枪表';
-- 用户表(小程序用户)
CREATE TABLE user (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
openid VARCHAR(64) NOT NULL UNIQUE COMMENT '微信openid',
unionid VARCHAR(64) COMMENT '微信unionid',
nickname VARCHAR(64) COMMENT '昵称',
phone VARCHAR(20) COMMENT '手机号',
company_id BIGINT COMMENT '绑定企业ID',
status TINYINT DEFAULT 1 COMMENT '状态:0禁用 1正常',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- 企业账户表
CREATE TABLE company (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
name VARCHAR(128) NOT NULL COMMENT '企业名称',
credit_code VARCHAR(32) COMMENT '统一社会信用代码',
balance DECIMAL(12, 2) DEFAULT 0 COMMENT '账户余额',
credit_limit DECIMAL(12, 2) DEFAULT 0 COMMENT '透支额度',
status TINYINT DEFAULT 1 COMMENT '状态:0禁用 1启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企业账户表';
-- 员工绑定表
CREATE TABLE employee (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
user_id BIGINT NOT NULL COMMENT '用户ID',
company_id BIGINT NOT NULL COMMENT '企业ID',
employee_no VARCHAR(32) COMMENT '员工工号',
department VARCHAR(64) COMMENT '部门',
status TINYINT DEFAULT 1 COMMENT '状态:0解绑 1绑定',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_user_company (user_id, company_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工绑定表';
-- 充电订单表
CREATE TABLE charging_order (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
order_no VARCHAR(32) NOT NULL UNIQUE COMMENT '订单号',
user_id BIGINT NOT NULL COMMENT '用户ID',
company_id BIGINT COMMENT '企业ID(可空)',
gun_id BIGINT NOT NULL COMMENT '充电枪ID',
start_time DATETIME COMMENT '开始充电时间',
end_time DATETIME COMMENT '结束时间',
total_seconds INT DEFAULT 0 COMMENT '充电时长(秒)',
charged_kwh DECIMAL(10, 3) DEFAULT 0 COMMENT '充电电量(kWh)',
electricity_fee DECIMAL(10, 2) DEFAULT 0 COMMENT '电费',
service_fee DECIMAL(10, 2) DEFAULT 0 COMMENT '服务费',
total_amount DECIMAL(10, 2) DEFAULT 0 COMMENT '订单总金额',
status VARCHAR(16) NOT NULL COMMENT '订单状态',
pay_status VARCHAR(16) DEFAULT 'UNPAID' COMMENT '支付状态',
split_status VARCHAR(16) DEFAULT 'UNSPLIT' COMMENT '分账状态',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_user_id (user_id),
INDEX idx_gun_id (gun_id),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='充电订单表';
-- 计费规则表
CREATE TABLE pricing_rule (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
name VARCHAR(64) NOT NULL COMMENT '规则名称',
rule_type VARCHAR(16) NOT NULL COMMENT '规则类型:TIME时段/BASIC基础',
scope_type VARCHAR(16) NOT NULL COMMENT '适用范围:GLOBAL/REGION/SITE',
scope_id BIGINT COMMENT '关联范围ID',
status TINYINT DEFAULT 1 COMMENT '状态:0禁用 1启用',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='计费规则表';
| 项目 | 说明 |
|---|---|
| 基础路径 | https://api.energy-charging.com |
| 协议 | HTTPS |
| 数据格式 | JSON |
| 字符编码 | UTF-8 |
| 模块 | 接口 | 方法 | 说明 |
|---|---|---|---|
| 认证 | /api/mini/auth/login | POST | 微信code登录 |
| 认证 | /api/mini/auth/phone | POST | 绑定手机号 |
| 站点 | /api/mini/site/list | GET | 附近站点列表 |
| 站点 | /api/mini/site/detail/{id} | GET | 站点详情 |
| 充电 | /api/mini/charge/qrcode | POST | 解析充电桩二维码 |
| 充电 | /api/mini/charge/start | POST | 启动充电 |
| 充电 | /api/mini/charge/stop | POST | 停止充电 |
| 充电 | /api/mini/charge/status/{orderId} | GET | 充电状态(轮询) |
| 订单 | /api/mini/order/list | GET | 订单列表 |
| 订单 | /api/mini/order/detail/{id} | GET | 订单详情 |
| 发票 | /api/mini/invoice/apply | POST | 申请发票 |
| 模块 | 接口 | 方法 | 说明 |
|---|---|---|---|
| 登录 | /api/admin/auth/login | POST | 后台登录 |
| 登录 | /api/admin/auth/sms/send | POST | 发送短信验证码 |
| 仪表盘 | /api/admin/dashboard/stats | GET | 运营统计数据 |
| 设备 | /api/admin/device/region/* | CRUD | 区域管理 |
| 设备 | /api/admin/device/site/* | CRUD | 站点管理 |
| 设备 | /api/admin/device/station/* | CRUD | 充电桩管理 |
| 设备 | /api/admin/device/gun/* | CRUD | 充电枪管理 |
| 用户 | /api/admin/user/personal/* | CRUD | 个人用户管理 |
| 用户 | /api/admin/user/company/* | CRUD | 企业用户管理 |
| 订单 | /api/admin/order/list | GET | 订单列表 |
| 计费 | /api/admin/pricing/rule/* | CRUD | 计费规则 |
| 结算 | /api/admin/settlement/statement/* | CRUD | 结算单 |
| 工单 | /api/admin/workorder/* | CRUD | 运维工单 |
| 报表 | /api/admin/report/* | GET | 运营/财务报表 |
| 系统 | /api/admin/system/role/* | CRUD | 角色管理 |
| 系统 | /api/admin/system/admin/* | CRUD | 管理员账号 |
| 系统 | /api/admin/system/log | GET | 操作日志 |
flowchart TD
subgraph 用户操作["用户端"]
A[用户扫码] --> B[解析二维码获取枪ID]
end
subgraph 系统检查["系统检查"]
B --> C{设备状态?}
C -->|忙| D[返回设备忙]
C -->|空闲| E{账户余额?}
E -->|不足| F[返回余额不足]
E -->|充足| G[创建订单WAITING]
end
subgraph 设备交互["设备交互"]
G --> H[通知设备启动]
H --> I{启动成功?}
I -->|失败| J[订单EXCEPTION]
I -->|成功| K[订单CHARGING]
K --> L[启动实时会话]
L --> M[设备定时上报状态]
M --> N{心跳超时?}
N -->|2分钟| O[更新设备离线]
N -->|正常| P{停止充电?}
P -->|用户主动| Q[停止充电]
P -->|设备上报| Q
Q --> R[停止充电计算费用]
R --> S[订单FINISHED]
end
subgraph 支付分账["支付与分账"]
S --> T{发起微信支付}
T -->|成功| U[更新PAID → 分账]
T -->|失败| V[标记欠费催款]
end
U --> W[订单完成]
J --> X[异常处理]
style A fill:#0077b6,color:#fff
style W fill:#166534,color:#fff
style D fill:#dc2626,color:#fff
style F fill:#dc2626,color:#fff
style X fill:#f59e0b,color:#fff
flowchart LR
subgraph 触发["分账触发"]
A[订单支付完成
T+0 或 T+1]
end
subgraph 计算["分账计算"]
B[查询站点分账规则] --> C[计算分账金额]
C --> D[平台分成
订单金额 × 平台比例]
C --> E[代理分成
订单金额 × 代理比例]
C --> F[场地分成
订单金额 × 场地比例]
end
subgraph 记录["分账记录"]
D --> G[记录分账流水]
E --> G
F --> G
G --> H[更新订单状态
SPLITTED]
end
A --> B
style A fill:#0077b6,color:#fff
style H fill:#166534,color:#fff
flowchart TD
subgraph 定时任务["定时任务 - 每日凌晨 02:00"]
A[T+1结算任务启动]
end
subgraph 数据汇总["数据汇总"]
A --> B[查询昨日所有已支付订单]
B --> C[按站点分组汇总]
C --> D[按分账方分组]
end
subgraph 生成结算单["结算单生成"]
D --> E[生成代理结算单]
D --> F[生成场地结算单]
E --> G[状态: PENDING待审核]
F --> G
end
subgraph 审核["人工审核"]
G --> H{审核通过?}
H -->|通过| I[状态: APPROVED]
H -->|驳回| J[填写驳回原因]
J --> K[返回重新核对]
K --> B
end
subgraph 打款["线下打款"]
I --> L[运营人员线下打款]
L --> M[登记打款信息]
M --> N[状态: PAID]
end
subgraph 通知["通知相关方"]
G --> O[发送结算单给代理/场地确认]
N --> P[发送结算完成通知]
end
style A fill:#0077b6,color:#fff
style N fill:#166534,color:#fff
style J fill:#f59e0b,color:#fff
flowchart TD
A[充电开始] --> B[获取充电开始时间]
B --> C[确定适用计费规则
枪 → 桩 → 站点优先级]
C --> D{当前时段类型?}
D -->|峰时| E[获取峰时电价
获取峰时服务费]
D -->|平时| F[获取平时电价
获取平时服务费]
D -->|谷时| G[获取谷时电价
获取谷时服务费]
E --> H[计算当前费用]
F --> H
G --> H
H --> I[更新实时会话
current_kwh / current_fee]
I --> J{充电中?}
J -->|是| K[继续计费]
K --> B
J -->|停止| L[结束计费
汇总总费用]
L --> M[更新订单
电费 + 服务费]
M --> N[计费完成]
style A fill:#0077b6,color:#fff
style N fill:#166534,color:#fff
order:pay:lock:{orderId}WHERE region_id IN (SELECT region_ids FROM admin_user WHERE agent_id = ?)| 场景 | 方案 |
|---|---|
| 充电状态查询 | Redis 缓存,热点数据 5 秒过期 |
| 订单创建 | Redis 分布式锁 + 唯一索引防重 |
| 支付回调 | 消息队列异步处理,防止重复提交 |
| 报表导出 | 异步任务 + 文件下载 |
| 环境 | 用途 | 规模 |
|---|---|---|
| DEV | 开发测试 | 单机 |
| TEST | 功能测试 | 2节点 |
| UAT | 用户验收 | 2节点 |
| PROD | 生产环境 | 4节点+ |
| 版本 | 日期 | 修改内容 |
|---|---|---|
| v1.1 | 2026-03-21 | 明确7项待确认事项:服务器选型(腾讯云)、OCPP对接(待明确)、微信支付(暂未申请)、短信服务(先默认)、小程序AppID(先默认)、上线时间(本月底)、开发团队(1人+AI) |
| v1.0.2 | 2026-03-21 | 核心数据表增加SQL建表语句,放在表格结构图下方 |
| v1.0.1 | 2026-03-21 | 优化可视化展示:系统架构图改为Mermaid流程图、目录树改为动态可折叠JavaScript、ER关系图改为Mermaid ER Diagram、数据表改为可视化表格结构图 |
| v1.0 | 2026-03-21 | 初始版本 |