适配数据库 :MySQL 8.0+数据库引擎 :InnoDB字符集 / 排序规则 :utf8mb4 / utf8mb4_unicode_ci外键约束规则 :ON DELETE RESTRICT ON UPDATE CASCADE文档用途 :开发、测试、运维的表结构标准参考,支持直接复制到 Word 整理为正式文档更新时间:2026-02-02
目录
- 基础支撑表1.1 sequence(序列生成表)
- 系统管理表2.1 sys_user(用户信息主表)2.2 sys_role(角色表)2.3 sys_permission(权限表)2.4 sys_role_perm(角色权限关联中间表)2.5 sys_perm_change_log(权限变更日志表)2.6 sys_operate_log(用户操作日志表)
- 设备管理表3.1 charging_pile(充电桩设备主表)3.2 pile_protect_param(设备保护参数表)3.3 pile_firmware_upgrade(设备固件升级记录表)
- 充电控制表4.1 charge_mode_config(充电模式配置表)4.2 timed_charge_task(定时充电任务表)4.3 charge_power_control(充电功率控制表)4.4 charge_record(充电记录主表)4.5 charge_real_time_data(充电实时数据表)4.6 charge_control_command(充电远程控制指令表)
- 告警与日志表5.1 device_alarm(设备告警表)5.2 data_warning(数据异常预警表)
- 计费与订单表6.1 price_config(全局电价配置表)6.2 charge_order(充电订单表)6.3 refund_record(退款记录表)
- 通知管理表7.1 notify_template(通知模板表)7.2 notify_record(通知推送记录表)
- 系统参数配置表8.1 sys_param(全局系统参数表)
- 附录9.1 表关联关系总览9.2 核心字段枚举值说明9.3 数据库初始化基础数据
通用字段说明
文档中所有表统一使用以下通用字段,含义、约束保持一致:
create_time:数据创建时间,自动赋值,无需手动插入update_time:数据更新时间,修改数据时自动刷新xxx_user_id:操作人 ID,均关联sys_user.id,记录数据操作主体- 自增主键均从 1 开始,标识为
AUTO_INCREMENT=1 - 索引命名规则:唯一索引
idx_表名_字段名、普通索引idx_字段名、联合索引idx_表名_字段1_字段2
1. 基础支撑表
1.1 sequence(序列生成表)
表注释
生成全库唯一业务编号(充电记录号、告警号、订单号等),通过自定义函数get_sequence原子性获取序列值,避免并发重复,为全库基础支撑表
建表语句
mysql
CREATE TABLE `sequence` (
`seq_name` VARCHAR(50) NOT NULL COMMENT '序列名称,唯一标识序列类型',
`current_val` INT(11) NOT NULL DEFAULT 1 COMMENT '当前序列值,调用函数后自动递增',
`increment_val` INT(11) NOT NULL DEFAULT 1 COMMENT '序列步长,每次获取的增量值',
PRIMARY KEY (`seq_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='序列生成表,用于生成唯一业务编号';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| seq_name | VARCHAR(50) | NOT NULL | - | 主键 | 50 | 序列名称,唯一标识序列类型 | 如 charge_record_no、alarm_no |
| current_val | INT(11) | NOT NULL | 1 | - | 11 | 当前序列值,调用函数后递增 | 初始值根据业务需求设置 |
| increment_val | INT(11) | NOT NULL | 1 | - | 11 | 序列步长,每次获取的增量值 | 默认为 1,保证编号连续 |
关联函数(原子性获取序列)
mysql
DELIMITER //
CREATE FUNCTION `get_sequence`(seq_name VARCHAR(50)) RETURNS INT
DETERMINISTIC COMMENT '原子性获取序列值,避免并发重复'
BEGIN
UPDATE sequence SET current_val = current_val + increment_val WHERE seq_name = seq_name;
RETURN (SELECT current_val FROM sequence WHERE seq_name = seq_name);
END //
DELIMITER ;
初始化数据
| seq_name | current_val | increment_val | 业务用途 |
|---|---|---|---|
| charge_record_no | 10000000 | 1 | 充电记录编号(8 位起始) |
| alarm_no | 100000 | 1 | 设备告警编号(6 位起始) |
| notify_no | 100000 | 1 | 通知推送编号(6 位起始) |
| refund_no | 100000 | 1 | 退款单号(6 位起始) |
| order_no | 10000000 | 1 | 充电订单编号(8 位起始) |
2. 系统管理表
2.1 sys_user(用户信息主表)
表注释
存储系统所有用户核心信息,为系统双核心主表之一,所有业务表的用户关联均基于此表,敏感信息(密码、身份证)AES 加密存储
建表语句
mysql
CREATE TABLE `sys_user` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户主键ID,系统内唯一标识',
`user_phone` VARCHAR(20) NOT NULL COMMENT '用户手机号,登录账号,唯一',
`user_password` VARCHAR(100) NOT NULL COMMENT '登录密码,AES加密存储',
`user_name` VARCHAR(50) DEFAULT NULL COMMENT '用户真实姓名',
`user_avatar` VARCHAR(255) DEFAULT NULL COMMENT '用户头像URL地址',
`user_address` VARCHAR(255) DEFAULT NULL COMMENT '用户家庭地址,充电桩安装地址',
`id_card` VARCHAR(20) DEFAULT NULL COMMENT '身份证号,AES加密存储,实名认证用',
`wechat_openid` VARCHAR(100) DEFAULT NULL COMMENT '微信OpenID,微信登录/支付关联',
`alipay_openid` VARCHAR(100) DEFAULT NULL COMMENT '支付宝OpenID,支付宝登录/支付关联',
`role_id` INT(11) NOT NULL DEFAULT 2 COMMENT '角色ID,关联sys_role.id',
`user_status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '用户状态:0=禁用,1=正常',
`notify_type` TINYINT(2) NOT NULL DEFAULT 1 COMMENT '通知方式:1=仅APP,2=仅短信,3=APP+短信',
`last_login_time` DATETIME DEFAULT NULL COMMENT '用户最后登录时间',
`password_update_time` DATETIME DEFAULT NULL COMMENT '密码最后修改时间',
`login_error_count` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '连续登录错误次数,≥5次锁定',
`login_lock_time` DATETIME DEFAULT NULL COMMENT '账号锁定时间,锁定后至该时间前无法登录',
`session_timeout` TINYINT(2) NOT NULL DEFAULT 30 COMMENT '登录超时时间,单位:分钟',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '用户创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '用户信息更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_sys_user_user_phone` (`user_phone`),
UNIQUE KEY `idx_sys_user_wechat_openid` (`wechat_openid`),
UNIQUE KEY `idx_sys_user_alipay_openid` (`alipay_openid`),
KEY `idx_role_id` (`role_id`),
KEY `idx_user_status` (`user_status`),
CONSTRAINT `fk_sys_user_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户信息主表,存储系统所有用户核心信息';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 用户主键 ID,系统内唯一标识 | 自增起始值 1,唯一标识每个用户 |
| user_phone | VARCHAR(20) | NOT NULL | - | 唯一索引 | 20 | 用户手机号,登录账号,唯一 | 支持国内 / 国际手机号,作为唯一登录凭证 |
| user_password | VARCHAR(100) | NOT NULL | - | - | 100 | 登录密码,AES 加密存储 | 不可逆加密,密码长度要求≥6 位 |
| user_name | VARCHAR(50) | NULL | NULL | - | 50 | 用户真实姓名 | 用于身份展示、设备绑定审核 |
| user_avatar | VARCHAR(255) | NULL | NULL | - | 255 | 用户头像 URL 地址 | 存储远程文件地址,如 OSS/CDN 地址 |
| user_address | VARCHAR(255) | NULL | NULL | - | 255 | 用户家庭地址,充电桩安装地址 | 便于售后维护、设备定位 |
| id_card | VARCHAR(20) | NULL | NULL | - | 20 | 身份证号,AES 加密存储,实名认证用 | 设备绑定、退款审核时需校验 |
| wechat_openid | VARCHAR(100) | NULL | NULL | 唯一索引 | 100 | 微信 OpenID,微信登录 / 支付关联 | 微信扫码登录、微信支付的唯一标识 |
| alipay_openid | VARCHAR(100) | NULL | NULL | 唯一索引 | 100 | 支付宝 OpenID,支付宝登录 / 支付关联 | 支付宝扫码登录、支付宝支付的唯一标识 |
| role_id | INT(11) | NOT NULL | 2 | 普通索引、外键 | 11 | 角色 ID,关联 sys_role.id | 1 = 管理员,2 = 普通用户(默认) |
| user_status | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 用户状态:0 = 禁用,1 = 正常 | 禁用后用户无法登录系统 |
| notify_type | TINYINT(2) | NOT NULL | 1 | - | 2 | 通知方式:1 = 仅 APP,2 = 仅短信,3=APP + 短信 | 系统推送消息的首选方式 |
| last_login_time | DATETIME | NULL | NULL | - | - | 用户最后登录时间 | 每次登录成功后刷新 |
| password_update_time | DATETIME | NULL | NULL | - | - | 密码最后修改时间 | 用于密码有效期校验、安全提醒 |
| login_error_count | TINYINT(1) | NOT NULL | 0 | - | 1 | 连续登录错误次数,≥5 次锁定 | 登录成功后重置为 0 |
| login_lock_time | DATETIME | NULL | NULL | - | - | 账号锁定时间,锁定后至该时间前无法登录 | 锁定时间默认 24 小时,管理员可手动解锁 |
| session_timeout | TINYINT(2) | NOT NULL | 30 | - | 2 | 登录超时时间,单位:分钟 | 无操作超时后自动退出登录 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 用户创建时间 | 自动赋值,无需手动插入 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 用户信息更新时间 | 修改数据时自动刷新 |
关联关系
- 多对一关联
sys_role表:通过role_id外键,一个角色对应多个用户,一个用户仅属于一个角色 - 一对多关联所有业务表:作为
user_id/xxx_user_id外键源表,一个用户对应多条业务记录
2.2 sys_role(角色表)
表注释
存储系统用户角色,实现基于角色的权限控制(RBAC),仅维护核心角色信息,权限分配通过中间表sys_role_perm实现
建表语句
mysql
CREATE TABLE `sys_role` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '角色主键ID,系统内唯一标识',
`role_name` VARCHAR(50) NOT NULL COMMENT '角色名称,唯一',
`role_desc` VARCHAR(255) DEFAULT NULL COMMENT '角色描述,说明权限范围',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '角色创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '角色信息更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_sys_role_role_name` (`role_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='角色表,存储系统用户角色';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 角色主键 ID,系统内唯一标识 | 1 = 管理员,2 = 普通用户 |
| role_name | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 角色名称,唯一 | 如 "管理员""普通用户",不可重复 |
| role_desc | VARCHAR(255) | NULL | NULL | - | 255 | 角色描述,说明权限范围 | 用于后台角色管理展示 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 角色创建时间 | 自动赋值,无需手动插入 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 角色信息更新时间 | 修改数据时自动刷新 |
关联关系
- 一对多关联
sys_user表:通过id作为sys_user.role_id外键,一个角色对应多个用户 - 多对多关联
sys_permission表:通过中间表sys_role_perm关联,一个角色对应多个权限
2.3 sys_permission(权限表)
表注释
存储系统所有操作权限,分为菜单权限和按钮权限,支持自关联实现父子层级(菜单下挂按钮),权限标识perm_key为业务层权限校验核心
建表语句
mysql
CREATE TABLE `sys_permission` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '权限主键ID,系统内唯一标识',
`perm_name` VARCHAR(100) NOT NULL COMMENT '权限名称,用于前端展示',
`perm_key` VARCHAR(100) NOT NULL COMMENT '权限标识,业务层校验核心,格式:模块:操作',
`perm_type` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '权限类型:1=菜单权限,2=按钮权限',
`parent_id` INT(11) DEFAULT NULL COMMENT '父权限ID,关联自身id,NULL为顶级权限',
`perm_desc` VARCHAR(255) DEFAULT NULL COMMENT '权限描述,说明操作范围',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '权限创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '权限信息更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_sys_perm_perm_name` (`perm_name`),
UNIQUE KEY `idx_sys_perm_perm_key` (`perm_key`),
KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='权限表,存储系统所有操作权限';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 权限主键 ID,系统内唯一标识 | 自增起始值 1 |
| perm_name | VARCHAR(100) | NOT NULL | - | 唯一索引 | 100 | 权限名称,用于前端展示 | 如 "设备查询""启动充电",不可重复 |
| perm_key | VARCHAR(100) | NOT NULL | - | 唯一索引 | 100 | 权限标识,业务层校验核心,格式:模块:操作 | 如 device:query、charge:start,后端鉴权用 |
| perm_type | TINYINT(1) | NOT NULL | 1 | - | 1 | 权限类型:1 = 菜单权限,2 = 按钮权限 | 1 对应前端导航菜单,2 对应页面操作按钮 |
| parent_id | INT(11) | NULL | NULL | 普通索引 | 11 | 父权限 ID,关联自身 id,NULL 为顶级权限 | 实现权限父子层级,如 "设备管理" 菜单下挂 "设备查询" 按钮 |
| perm_desc | VARCHAR(255) | NULL | NULL | - | 255 | 权限描述,说明操作范围 | 用于后台权限管理展示 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 权限创建时间 | 自动赋值,无需手动插入 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 权限信息更新时间 | 修改数据时自动刷新 |
关联关系
- 自关联:通过
parent_id关联自身id,实现权限的父子层级结构 - 多对多关联
sys_role表:通过中间表sys_role_perm关联,一个权限可分配给多个角色
2.4 sys_role_perm(角色权限关联中间表)
表注释
角色 - 权限多对多关联中间表,维护角色与权限的关联关系,通过联合唯一索引避免重复分配,记录权限分配操作人
建表语句
mysql
CREATE TABLE `sys_role_perm` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '关联主键ID,中间表唯一标识',
`role_id` INT(11) NOT NULL COMMENT '角色ID,关联sys_role.id',
`perm_id` INT(11) NOT NULL COMMENT '权限ID,关联sys_permission.id',
`create_user_id` INT(11) NOT NULL COMMENT '创建人ID,关联sys_user.id,记录权限分配人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '关联创建时间,即权限分配时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_sys_role_perm_role_perm` (`role_id`,`perm_id`),
KEY `idx_role_id` (`role_id`),
KEY `idx_perm_id` (`perm_id`),
CONSTRAINT `fk_sys_role_perm_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_sys_role_perm_perm_id` FOREIGN KEY (`perm_id`) REFERENCES `sys_permission` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_sys_role_perm_create_user` FOREIGN KEY (`create_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联中间表,实现角色与权限的多对多关联';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 关联主键 ID,中间表唯一标识 | 自增起始值 1 |
| role_id | INT(11) | NOT NULL | - | 普通索引、外键、联合索引 | 11 | 角色 ID,关联 sys_role.id | 外键约束,主表记录删除时禁止删除 |
| perm_id | INT(11) | NOT NULL | - | 普通索引、外键、联合索引 | 11 | 权限 ID,关联 sys_permission.id | 外键约束,主表记录删除时禁止删除 |
| create_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 创建人 ID,关联 sys_user.id,记录权限分配人 | 记录哪个管理员分配了该权限 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 关联创建时间,即权限分配时间 | 自动赋值,无需手动插入 |
关联关系
- 多对一关联
sys_role表:role_id为外键,多个关联记录对应一个角色 - 多对一关联
sys_permission表:perm_id为外键,多个关联记录对应一个权限 - 多对一关联
sys_user表:create_user_id为外键,记录权限分配操作人
2.5 sys_perm_change_log(权限变更日志表)
表注释
记录角色权限的所有变更操作(新增 / 删除 / 修改),保存变更前后的权限对比,用于权限审计和问题追溯,数据仅新增不修改 / 删除
建表语句
mysql
CREATE TABLE `sys_perm_change_log` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '日志主键ID,系统内唯一标识',
`role_id` INT(11) NOT NULL COMMENT '角色ID,关联sys_role.id,记录变更的角色',
`change_user_id` INT(11) NOT NULL COMMENT '变更人ID,关联sys_user.id,记录操作人',
`change_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '权限变更时间',
`before_perm` VARCHAR(500) NOT NULL COMMENT '变更前权限,perm_key以英文逗号分隔',
`after_perm` VARCHAR(500) NOT NULL COMMENT '变更后权限,perm_key以英文逗号分隔',
`change_type` TINYINT(2) NOT NULL COMMENT '变更类型:1=新增权限,2=删除权限,3=修改权限',
`change_remark` VARCHAR(255) DEFAULT NULL COMMENT '变更备注,说明变更原因',
PRIMARY KEY (`id`),
KEY `idx_role_id` (`role_id`),
KEY `idx_change_user_id` (`change_user_id`),
KEY `idx_change_time` (`change_time`),
CONSTRAINT `fk_sys_perm_log_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_sys_perm_log_user_id` FOREIGN KEY (`change_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='权限变更日志表,记录角色权限的所有变更操作';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 日志主键 ID,系统内唯一标识 | 自增起始值 1 |
| role_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 角色 ID,关联 sys_role.id,记录变更的角色 | 外键约束,主表记录删除时禁止删除 |
| change_user_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 变更人 ID,关联 sys_user.id,记录操作人 | 外键约束,记录哪个管理员执行了变更 |
| change_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 权限变更时间 | 自动赋值,无需手动插入 |
| before_perm | VARCHAR(500) | NOT NULL | - | - | 500 | 变更前权限,perm_key 以英文逗号分隔 | 如 device:query,charge:start |
| after_perm | VARCHAR(500) | NOT NULL | - | - | 500 | 变更后权限,perm_key 以英文逗号分隔 | 变更后最新的权限集合 |
| change_type | TINYINT(2) | NOT NULL | - | - | 2 | 变更类型:1 = 新增,2 = 删除,3 = 修改 | 标识权限变更的具体操作类型 |
| change_remark | VARCHAR(255) | NULL | NULL | - | 255 | 变更备注,说明变更原因 | 便于后续审计、问题追溯 |
关联关系
- 多对一关联
sys_role表:role_id为外键,一个角色对应多条变更日志 - 多对一关联
sys_user表:change_user_id为外键,一个用户对应多条操作日志
2.6 sys_operate_log(用户操作日志表)
表注释
记录系统所有用户的操作行为(登录 / 退出 / 模块操作),记录操作 IP / 设备 / 执行结果,用于系统审计、操作追溯和问题排查,数据仅新增不修改
建表语句
mysql
CREATE TABLE `sys_operate_log` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '日志主键ID,系统内唯一标识',
`user_id` INT(11) NOT NULL COMMENT '操作人ID,关联sys_user.id,匿名操作记0',
`operate_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作执行时间',
`operate_type` TINYINT(2) NOT NULL COMMENT '操作类型:1=登录,2=退出,3=新增,4=修改,5=删除,6=查询',
`operate_module` VARCHAR(50) NOT NULL COMMENT '操作模块,如用户管理、设备管理',
`operate_content` VARCHAR(255) NOT NULL COMMENT '操作内容,简明描述操作行为',
`operate_ip` VARCHAR(50) DEFAULT NULL COMMENT '操作IP地址,支持IPv4/IPv6',
`operate_device` VARCHAR(100) DEFAULT NULL COMMENT '操作设备,如Chrome/Windows10、微信小程序',
`is_success` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '操作是否成功:0=失败,1=成功',
`fail_reason` VARCHAR(255) DEFAULT NULL COMMENT '失败原因,操作失败时记录',
`operate_detail` TEXT DEFAULT NULL COMMENT '操作详情,存储请求参数/响应结果,用于问题排查',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_operate_time` (`operate_time`),
KEY `idx_operate_type` (`operate_type`),
KEY `idx_operate_module` (`operate_module`),
KEY `idx_is_success` (`is_success`),
CONSTRAINT `fk_sys_operate_log_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户操作日志表,记录系统所有用户的操作行为';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 日志主键 ID,系统内唯一标识 | 自增起始值 1 |
| user_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 操作人 ID,关联 sys_user.id,匿名操作记 0 | 外键约束,记录操作主体,匿名操作(如游客访问)记 0 |
| operate_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 操作执行时间 | 自动赋值,精确到秒 |
| operate_type | TINYINT(2) | NOT NULL | - | 普通索引 | 2 | 操作类型:1 = 登录,2 = 退出,3 = 新增,4 = 修改,5 = 删除,6 = 查询 | 标识操作的核心类型 |
| operate_module | VARCHAR(50) | NOT NULL | - | 普通索引 | 50 | 操作模块,如用户管理、设备管理 | 便于按模块筛选日志 |
| operate_content | VARCHAR(255) | NOT NULL | - | - | 255 | 操作内容,简明描述操作行为 | 如 "新增用户:13800138000""启动充电桩:SN10001" |
| operate_ip | VARCHAR(50) | NULL | NULL | - | 50 | 操作 IP 地址,支持 IPv4/IPv6 | 记录用户操作的终端 IP,用于溯源 |
| operate_device | VARCHAR(100) | NULL | NULL | - | 100 | 操作设备,如 Chrome/Windows10、微信小程序 | 记录用户操作的终端设备 / 浏览器 |
| is_success | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 操作是否成功:0 = 失败,1 = 成功 | 标识操作执行结果 |
| fail_reason | VARCHAR(255) | NULL | NULL | - | 255 | 失败原因,操作失败时记录 | 如 "密码错误""权限不足""设备离线" |
| operate_detail | TEXT | NULL | NULL | - | 不限 | 操作详情,存储请求参数 / 响应结果 | 存储 JSON 格式的请求 / 响应数据,便于问题排查 |
关联关系
- 多对一关联
sys_user表:user_id为外键,一个用户对应多条操作日志,无反向关联
3. 设备管理表
3.1 charging_pile(充电桩设备主表)
表注释
存储充电桩设备核心信息,为系统双核心主表之一,所有设备相关业务表均关联此表,记录设备绑定状态、在线状态、运行状态等核心属性
建表语句
mysql
CREATE TABLE `charging_pile` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '设备主键ID,系统内唯一标识',
`pile_sn` VARCHAR(50) NOT NULL COMMENT '充电桩序列号,设备唯一标识',
`pile_imei` VARCHAR(50) NOT NULL COMMENT '充电桩IMEI码,物联网卡唯一标识',
`pile_name` VARCHAR(50) DEFAULT NULL COMMENT '设备自定义名称,用户可修改',
`user_id` INT(11) DEFAULT NULL COMMENT '绑定用户ID,关联sys_user.id,未绑定为NULL',
`bind_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '绑定状态:0=未绑定,1=已绑定',
`bind_time` DATETIME DEFAULT NULL COMMENT '设备绑定时间',
`bind_audit_type` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '绑定审核类型:1=自动,2=手动',
`bind_audit_user_id` INT(11) DEFAULT NULL COMMENT '绑定审核人ID,关联sys_user.id,自动审核为NULL',
`bind_audit_time` DATETIME DEFAULT NULL COMMENT '绑定审核时间',
`online_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '在线状态:0=离线,1=在线',
`run_status` TINYINT(2) NOT NULL DEFAULT 0 COMMENT '运行状态:0=待机,1=充电中,2=故障,3=休眠',
`gun_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '枪头状态:0=未插入,1=已插入',
`gun_temp` INT(3) DEFAULT NULL COMMENT '枪头温度,单位:℃',
`lightning_status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '防雷模块状态:0=故障,1=正常',
`ground_status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '接地状态:0=异常,1=正常',
`rated_power` DECIMAL(5,1) NOT NULL DEFAULT 7.0 COMMENT '设备额定功率,单位:kW',
`max_power` DECIMAL(5,1) NOT NULL DEFAULT 7.0 COMMENT '设备最大充电功率,单位:kW',
`voltage_range` VARCHAR(50) NOT NULL DEFAULT '220V' COMMENT '充电电压范围',
`current_range` VARCHAR(50) NOT NULL DEFAULT '32A' COMMENT '充电电流范围',
`network_type` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '网络模式:1=WiFi,2=4G',
`wifi_ssid` VARCHAR(100) DEFAULT NULL COMMENT 'WiFi账号,网络模式为WiFi时填写',
`wifi_password` VARCHAR(100) DEFAULT NULL COMMENT 'WiFi密码,AES加密存储',
`apn_param` VARCHAR(100) DEFAULT NULL COMMENT '4G APN参数,网络模式为4G时填写',
`firmware_version` VARCHAR(50) NOT NULL DEFAULT 'V1.0.0' COMMENT '设备当前固件版本',
`last_online_time` DATETIME DEFAULT NULL COMMENT '设备最后在线时间',
`offline_reason` VARCHAR(50) DEFAULT NULL COMMENT '设备离线原因,如网络故障、断电',
`refresh_frequency` TINYINT(2) NOT NULL DEFAULT 10 COMMENT '设备状态刷新频率,单位:秒',
`time_zone` VARCHAR(50) NOT NULL DEFAULT 'Asia/Shanghai' COMMENT '设备时区设置',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '设备注册时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '设备信息更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_charging_pile_sn` (`pile_sn`),
UNIQUE KEY `idx_charging_pile_imei` (`pile_imei`),
KEY `idx_user_id` (`user_id`),
KEY `idx_bind_status` (`bind_status`),
KEY `idx_online_status` (`online_status`),
KEY `idx_run_status` (`run_status`),
KEY `idx_gun_status` (`gun_status`),
CONSTRAINT `fk_charging_pile_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_charging_pile_audit_user` FOREIGN KEY (`bind_audit_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='充电桩设备主表,存储设备核心信息';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 设备主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_sn | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 充电桩序列号,设备唯一标识 | 设备出厂唯一编号,不可重复 |
| pile_imei | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 充电桩 IMEI 码,物联网卡唯一标识 | 设备网络通信的唯一标识 |
| pile_name | VARCHAR(50) | NULL | NULL | - | 50 | 设备自定义名称,用户可修改 | 如 "客厅充电桩",便于用户区分多设备 |
| user_id | INT(11) | NULL | NULL | 普通索引、外键 | 11 | 绑定用户 ID,关联 sys_user.id,未绑定为 NULL | 未绑定设备该字段为 NULL |
| bind_status | TINYINT(1) | NOT NULL | 0 | 普通索引 | 1 | 绑定状态:0 = 未绑定,1 = 已绑定 | 标识设备是否被用户绑定 |
| bind_time | DATETIME | NULL | NULL | - | - | 设备绑定时间 | 绑定成功后自动赋值 |
| bind_audit_type | TINYINT(1) | NOT NULL | 1 | - | 1 | 绑定审核类型:1 = 自动,2 = 手动 | 自动审核无需管理员干预,手动审核需管理员确认 |
| bind_audit_user_id | INT(11) | NULL | NULL | 外键 | 11 | 绑定审核人 ID,关联 sys_user.id,自动审核为 NULL | 手动审核时记录审核的管理员 ID |
| bind_audit_time | DATETIME | NULL | NULL | - | - | 绑定审核时间 | 审核完成后自动赋值 |
| online_status | TINYINT(1) | NOT NULL | 0 | 普通索引 | 1 | 在线状态:0 = 离线,1 = 在线 | 标识设备是否与系统建立网络连接 |
| run_status | TINYINT(2) | NOT NULL | 0 | 普通索引 | 2 | 运行状态:0 = 待机,1 = 充电中,2 = 故障,3 = 休眠 | 设备核心运行状态,关联业务逻辑 |
| gun_status | TINYINT(1) | NOT NULL | 0 | 普通索引 | 1 | 枪头状态:0 = 未插入,1 = 已插入 | 枪头插入车辆后才可启动充电 |
| gun_temp | INT(3) | NULL | NULL | - | 3 | 枪头温度,单位:℃ | 实时采集,超过阈值触发告警 |
| lightning_status | TINYINT(1) | NOT NULL | 1 | - | 1 | 防雷模块状态:0 = 故障,1 = 正常 | 故障时禁止充电,保障安全 |
| ground_status | TINYINT(1) | NOT NULL | 1 | - | 1 | 接地状态:0 = 异常,1 = 正常 | 异常时禁止充电,保障安全 |
| rated_power | DECIMAL(5,1) | NOT NULL | 7.0 | - | 5,1 | 设备额定功率,单位:kW | 设备设计的标准充电功率 |
| max_power | DECIMAL(5,1) | NOT NULL | 7.0 | - | 5,1 | 设备最大充电功率,单位:kW | 设备支持的最大充电功率,不可超过 |
| voltage_range | VARCHAR(50) | NOT NULL | 220V | - | 50 | 充电电压范围 | 如 "220V""380V",适配不同电网 |
| current_range | VARCHAR(50) | NOT NULL | 32A | - | 50 | 充电电流范围 | 如 "32A",标识设备最大输出电流 |
| network_type | TINYINT(1) | NOT NULL | 1 | - | 1 | 网络模式:1=WiFi,2=4G | 设备与系统通信的网络方式 |
| wifi_ssid | VARCHAR(100) | NULL | NULL | - | 100 | WiFi 账号,网络模式为 WiFi 时填写 | 设备连接的 WiFi 名称 |
| wifi_password | VARCHAR(100) | NULL | NULL | - | 100 | WiFi 密码,AES 加密存储 | 加密存储,防止泄露 |
| apn_param | VARCHAR(100) | NULL | NULL | - | 100 | 4G APN 参数,网络模式为 4G 时填写 | 物联网卡的 APN 配置参数 |
| firmware_version | VARCHAR(50) | NOT NULL | V1.0.0 | - | 50 | 设备当前固件版本 | 如 V1.0.0,用于固件升级判断 |
| last_online_time | DATETIME | NULL | NULL | - | - | 设备最后在线时间 | 设备离线后记录最后一次在线的时间 |
| offline_reason | VARCHAR(50) | NULL | NULL | - | 50 | 设备离线原因,如网络故障、断电 | 设备离线时自动记录原因 |
| refresh_frequency | TINYINT(2) | NOT NULL | 10 | - | 2 | 设备状态刷新频率,单位:秒 | 设备向系统上报状态的时间间隔 |
| time_zone | VARCHAR(50) | NOT NULL | Asia/Shanghai | - | 50 | 设备时区设置 | 默认为东八区,保证时间同步 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 设备注册时间 | 设备首次接入系统时自动赋值 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 设备信息更新时间 | 修改数据时自动刷新 |
关联关系
- 多对一关联
sys_user表:user_id(绑定用户)、bind_audit_user_id(审核人)为外键,一个用户可绑定多个设备 - 核心主表,一对多关联所有设备相关业务表:
pile_protect_param、pile_firmware_upgrade、charge_record等 - 一对一关联
pile_protect_param、charge_mode_config、charge_power_control表
3.2 pile_protect_param(设备保护参数表)
表注释
存储充电桩设备安全保护阈值参数,与设备主表一对一关联,一个设备仅对应一套保护参数,参数超过阈值时触发设备保护并告警
建表语句
mysql
CREATE TABLE `pile_protect_param` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '保护参数主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`over_voltage` DECIMAL(5,1) NOT NULL DEFAULT 250.0 COMMENT '过压保护阈值,单位:V',
`under_voltage` DECIMAL(5,1) NOT NULL DEFAULT 180.0 COMMENT '欠压保护阈值,单位:V',
`over_current` DECIMAL(5,1) NOT NULL DEFAULT 32.0 COMMENT '过流保护阈值,单位:A',
`over_temp` INT(3) NOT NULL DEFAULT 60 COMMENT '过温保护阈值,单位:℃',
`leakage_current` DECIMAL(4,2) NOT NULL DEFAULT 0.03 COMMENT '漏电保护阈值,单位:A',
`ground_threshold` DECIMAL(4,2) NOT NULL DEFAULT 0.05 COMMENT '接地保护阈值,单位:A',
`voltage_fluctuation` DECIMAL(4,1) NOT NULL DEFAULT 10.0 COMMENT '电压波动保护阈值,单位:V',
`current_fluctuation` DECIMAL(4,1) NOT NULL DEFAULT 5.0 COMMENT '电流波动保护阈值,单位:A',
`update_user_id` INT(11) NOT NULL COMMENT '更新人ID,关联sys_user.id,记录参数修改人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '参数更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_pile_protect_param_pile_id` (`pile_id`),
CONSTRAINT `fk_pile_protect_param_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_pile_protect_param_user_id` FOREIGN KEY (`update_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='设备保护参数表,存储设备安全保护阈值参数';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 保护参数主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_id | INT(11) | NOT NULL | - | 唯一索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 一对一关联,一个设备仅对应一套参数 |
| over_voltage | DECIMAL(5,1) | NOT NULL | 250.0 | - | 5,1 | 过压保护阈值,单位:V | 电压超过该值触发过压保护,停止充电 |
| under_voltage | DECIMAL(5,1) | NOT NULL | 180.0 | - | 5,1 | 欠压保护阈值,单位:V | 电压低于该值触发欠压保护,停止充电 |
| over_current | DECIMAL(5,1) | NOT NULL | 32.0 | - | 5,1 | 过流保护阈值,单位:A | 电流超过该值触发过流保护,停止充电 |
| over_temp | INT(3) | NOT NULL | 60 | - | 3 | 过温保护阈值,单位:℃ | 设备 / 枪头温度超过该值触发过温保护 |
| leakage_current | DECIMAL(4,2) | NOT NULL | 0.03 | - | 4,2 | 漏电保护阈值,单位:A | 漏电流超过该值触发漏电保护,切断电源 |
| ground_threshold | DECIMAL(4,2) | NOT NULL | 0.05 | - | 4,2 | 接地保护阈值,单位:A | 接地异常电流超过该值触发接地保护 |
| voltage_fluctuation | DECIMAL(4,1) | NOT NULL | 10.0 | - | 4,1 | 电压波动保护阈值,单位:V | 电压波动超过该值触发保护 |
| current_fluctuation | DECIMAL(4,1) | NOT NULL | 5.0 | - | 4,1 | 电流波动保护阈值,单位:A | 电流波动超过该值触发保护 |
| update_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 更新人 ID,关联 sys_user.id,记录参数修改人 | 记录哪个管理员 / 用户修改了保护参数 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 参数更新时间 | 修改数据时自动刷新 |
关联关系
- 一对一关联
charging_pile表:pile_id为唯一索引,一个设备仅对应一套保护参数 - 多对一关联
sys_user表:update_user_id为外键,记录参数更新操作人
3.3 pile_firmware_upgrade(设备固件升级记录表)
表注释
存储充电桩设备固件升级的所有记录,与设备主表一对多关联,一个设备可对应多条升级记录,记录升级版本、进度、结果等信息
建表语句
mysql
CREATE TABLE `pile_firmware_upgrade` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '升级记录主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`firmware_version_old` VARCHAR(50) NOT NULL COMMENT '升级前固件版本',
`firmware_version_new` VARCHAR(50) NOT NULL COMMENT '升级后固件版本',
`upgrade_package` VARCHAR(255) NOT NULL COMMENT '固件升级包URL地址',
`upgrade_size` DECIMAL(10,2) DEFAULT NULL COMMENT '升级包大小,单位:MB',
`upgrade_type` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '升级类型:1=单个设备,2=批量设备',
`upgrade_status` TINYINT(2) NOT NULL DEFAULT 0 COMMENT '升级状态:0=未开始,1=升级中,2=成功,3=失败',
`upgrade_progress` INT(3) NOT NULL DEFAULT 0 COMMENT '升级进度,单位:%',
`upgrade_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '升级开始时间',
`complete_time` DATETIME DEFAULT NULL COMMENT '升级完成时间',
`fail_reason` VARCHAR(255) DEFAULT NULL COMMENT '升级失败原因,如网络故障、包损坏',
`rollback_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '回滚状态:0=未回滚,1=已回滚',
`rollback_time` DATETIME DEFAULT NULL COMMENT '回滚执行时间',
`operate_user_id` INT(11) NOT NULL COMMENT '操作人ID,关联sys_user.id,记录升级操作人',
PRIMARY KEY (`id`),
KEY `idx_pile_id` (`pile_id`),
KEY `idx_upgrade_status` (`upgrade_status`),
KEY `idx_upgrade_time` (`upgrade_time`),
CONSTRAINT `fk_pile_firmware_upgrade_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_pile_firmware_upgrade_user_id` FOREIGN KEY (`operate_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='设备固件升级记录表,存储设备固件升级信息';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 升级记录主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 一对多关联,一个设备可对应多条升级记录 |
| firmware_version_old | VARCHAR(50) | NOT NULL | - | - | 50 | 升级前固件版本 | 如 V1.0.0,记录升级前的版本号 |
| firmware_version_new | VARCHAR(50) | NOT NULL | - | - | 50 | 升级后固件版本 | 如 V1.1.0,记录升级后的目标版本号 |
| upgrade_package | VARCHAR(255) | NOT NULL | - | - | 255 | 固件升级包 URL 地址 | 存储升级包的远程地址,如 OSS/CDN 地址 |
| upgrade_size | DECIMAL(10,2) | NULL | NULL | - | 10,2 | 升级包大小,单位:MB | 记录升级包的文件大小,便于展示 |
| upgrade_type | TINYINT(1) | NOT NULL | 1 | - | 1 | 升级类型:1 = 单个设备,2 = 批量设备 | 标识是单设备升级还是多设备批量升级 |
| upgrade_status | TINYINT(2) | NOT NULL | 0 | 普通索引 | 2 | 升级状态:0 = 未开始,1 = 升级中,2 = 成功,3 = 失败 | 标识升级的当前执行状态 |
| upgrade_progress | INT(3) | NOT NULL | 0 | - | 3 | 升级进度,单位:% | 0-100,升级中实时刷新进度 |
| upgrade_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 升级开始时间 | 启动升级时自动赋值 |
| complete_time | DATETIME | NULL | NULL | - | - | 升级完成时间 | 升级成功 / 失败后自动赋值 |
| fail_reason | VARCHAR(255) | NULL | NULL | - | 255 | 升级失败原因,如网络故障、包损坏 | 升级失败时记录具体原因,便于排查 |
| rollback_status | TINYINT(1) | NOT NULL | 0 | - | 1 | 回滚状态:0 = 未回滚,1 = 已回滚 | 升级失败后可执行版本回滚,标识回滚状态 |
| rollback_time | DATETIME | NULL | NULL | - | - | 回滚执行时间 | 回滚操作完成后自动赋值 |
| operate_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 操作人 ID,关联 sys_user.id,记录升级操作人 | 记录哪个管理员执行了升级操作 |
关联关系
- 多对一关联
charging_pile表:pile_id为外键,一个设备可对应多条升级记录 - 多对一关联
sys_user表:operate_user_id为外键,记录升级操作人
4. 充电控制表
4.1 charge_mode_config(充电模式配置表)
表注释
存储充电桩设备的充电模式及峰谷电价配置,与设备主表一对一关联,一个设备仅对应一套配置,支持立即、定时、峰谷三种充电模式
建表语句
mysql
CREATE TABLE `charge_mode_config` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '配置主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`default_mode` TINYINT(2) NOT NULL DEFAULT 1 COMMENT '默认充电模式:1=立即充电,2=定时充电,3=峰谷充电',
`peak_start` TIME DEFAULT NULL COMMENT '峰时开始时间,峰谷模式时生效',
`peak_end` TIME DEFAULT NULL COMMENT '峰时结束时间,峰谷模式时生效',
`valley_start` TIME DEFAULT NULL COMMENT '谷时开始时间,峰谷模式时生效',
`valley_end` TIME DEFAULT NULL COMMENT '谷时结束时间,峰谷模式时生效',
`peak_price` DECIMAL(4,2) DEFAULT NULL COMMENT '峰时电价,单位:元/kWh,峰谷模式时生效',
`valley_price` DECIMAL(4,2) DEFAULT NULL COMMENT '谷时电价,单位:元/kWh,峰谷模式时生效',
`holiday_peak_price` DECIMAL(4,2) DEFAULT NULL COMMENT '节假日峰时电价,单位:元/kWh',
`holiday_valley_price` DECIMAL(4,2) DEFAULT NULL COMMENT '节假日谷时电价,单位:元/kWh',
`workday_type` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '工作日区分:1=周一至周五,2=自定义',
`workday_detail` VARCHAR(50) DEFAULT NULL COMMENT '自定义工作日,如1,2,3,4,5(1=周一)',
`update_user_id` INT(11) NOT NULL COMMENT '更新人ID,关联sys_user.id,记录配置修改人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '配置更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_charge_mode_config_pile_id` (`pile_id`),
CONSTRAINT `fk_charge_mode_config_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_charge_mode_config_user_id` FOREIGN KEY (`update_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='充电模式配置表,存储设备充电模式及峰谷电价配置';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 配置主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_id | INT(11) | NOT NULL | - | 唯一索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 一对一关联,一个设备仅对应一套配置 |
| default_mode | TINYINT(2) | NOT NULL | 1 | - | 2 | 默认充电模式:1 = 立即,2 = 定时,3 = 峰谷 | 设备默认采用的充电模式 |
| peak_start | TIME | NULL | NULL | - | - | 峰时开始时间,峰谷模式时生效 | 如 08:00:00,峰谷模式下的峰时起始时间 |
| peak_end | TIME | NULL | NULL | - | - | 峰时结束时间,峰谷模式时生效 | 如 22:00:00,峰谷模式下的峰时结束时间 |
| valley_start | TIME | NULL | NULL | - | - | 谷时开始时间,峰谷模式时生效 | 如 22:00:00,峰谷模式下的谷时起始时间 |
| valley_end | TIME | NULL | NULL | - | - | 谷时结束时间,峰谷模式时生效 | 如 08:00:00,峰谷模式下的谷时结束时间 |
| peak_price | DECIMAL(4,2) | NULL | NULL | - | 4,2 | 峰时电价,单位:元 /kWh,峰谷模式时生效 | 峰时充电的单价,高于谷时电价 |
| valley_price | DECIMAL(4,2) | NULL | NULL | - | 4,2 | 谷时电价,单位:元 /kWh,峰谷模式时生效 | 谷时充电的单价,低于峰时电价 |
| holiday_peak_price | DECIMAL(4,2) | NULL | NULL | - | 4,2 | 节假日峰时电价,单位:元 /kWh | 节假日峰时的充电单价 |
| holiday_valley_price | DECIMAL(4,2) | NULL | NULL | - | 4,2 | 节假日谷时电价,单位:元 /kWh | 节假日谷时的充电单价 |
| workday_type | TINYINT(1) | NOT NULL | 1 | - | 1 | 工作日区分:1 = 周一至周五,2 = 自定义 | 标识工作日的判断规则 |
| workday_detail | VARCHAR(50) | NULL | NULL | - | 50 | 自定义工作日,如 1,2,3,4,5(1 = 周一) | workday_type=2 时生效,逗号分隔数字 |
| update_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 更新人 ID,关联 sys_user.id,记录配置修改人 | 记录哪个管理员 / 用户修改了充电模式配置 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 配置更新时间 | 修改数据时自动刷新 |
关联关系
- 一对一关联
charging_pile表:pile_id为唯一索引,一个设备仅对应一套充电模式配置 - 多对一关联
sys_user表:update_user_id为外键,记录配置更新操作人 - 业务关联
price_config表:无物理外键,设备本地配置优先级高于全局电价配置
4.2 timed_charge_task(定时充电任务表)
表注释
存储用户创建的定时充电任务,与设备主表一对多关联,一个设备可创建多个任务(受系统参数限制),任务执行后生成充电记录
建表语句
mysql
CREATE TABLE `timed_charge_task` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '任务主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`task_name` VARCHAR(50) DEFAULT NULL COMMENT '任务自定义名称,用户可修改',
`start_time` TIME NOT NULL COMMENT '充电开始时间',
`end_time` TIME NOT NULL COMMENT '充电结束时间',
`cycle_type` TINYINT(2) NOT NULL DEFAULT 1 COMMENT '循环类型:1=每天,2=工作日,3=周末,4=自定义',
`cycle_detail` VARCHAR(50) DEFAULT NULL COMMENT '自定义循环详情,如1,3,5(1=周一)',
`target_energy` DECIMAL(5,2) DEFAULT NULL COMMENT '目标充电电量,单位:kWh,达到后停止',
`target_battery` DECIMAL(3,1) DEFAULT NULL COMMENT '目标电池电量,单位:%,达到后停止',
`remind_time` TINYINT(2) NOT NULL DEFAULT 10 COMMENT '任务执行提醒时间,单位:分钟,执行前提醒',
`task_status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '任务状态:0=禁用,1=启用',
`create_user_id` INT(11) NOT NULL COMMENT '创建人ID,关联sys_user.id,记录任务创建人',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '任务创建时间',
`update_user_id` INT(11) DEFAULT NULL COMMENT '更新人ID,关联sys_user.id,记录任务修改人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '任务更新时间',
`delete_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除状态:0=未删除,1=已删除(逻辑删除)',
PRIMARY KEY (`id`),
KEY `idx_pile_id` (`pile_id`),
KEY `idx_cycle_type` (`cycle_type`),
KEY `idx_task_status` (`task_status`),
KEY `idx_delete_status` (`delete_status`),
CONSTRAINT `fk_timed_charge_task_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_timed_charge_task_create_user` FOREIGN KEY (`create_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_timed_charge_task_update_user` FOREIGN KEY (`update_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='定时充电任务表,存储用户创建的定时充电任务';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 任务主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 一对多关联,一个设备可创建多个任务 |
| task_name | VARCHAR(50) | NULL | NULL | - | 50 | 任务自定义名称,用户可修改 | 如 "夜间充电",便于用户区分多任务 |
| start_time | TIME | NOT NULL | - | - | - | 充电开始时间 | 如 23:00:00,任务执行的起始时间 |
| end_time | TIME | NOT NULL | - | - | - | 充电结束时间 | 如 07:00:00,任务执行的结束时间 |
| cycle_type | TINYINT(2) | NOT NULL | 1 | 普通索引 | 2 | 循环类型:1 = 每天,2 = 工作日,3 = 周末,4 = 自定义 | 任务的执行周期规则 |
| cycle_detail | VARCHAR(50) | NULL | NULL | - | 50 | 自定义循环详情,如 1,3,5(1 = 周一) | cycle_type=4 时生效,逗号分隔数字 |
| target_energy | DECIMAL(5,2) | NULL | NULL | - | 5,2 | 目标充电电量,单位:kWh,达到后停止 | 如 10.00,充电量达到该值后自动停止 |
| target_battery | DECIMAL(3,1) | NULL | NULL | - | 3,1 | 目标电池电量,单位:%,达到后停止 | 如 80.0,电池电量达到该值后自动停止 |
| remind_time | TINYINT(2) | NOT NULL | 10 | - | 2 | 任务执行提醒时间,单位:分钟,执行前提醒 | 如 10,任务执行前 10 分钟推送提醒 |
| task_status | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 任务状态:0 = 禁用,1 = 启用 | 禁用的任务不会执行 |
| create_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 创建人 ID,关联 sys_user.id,记录任务创建人 | 记录哪个用户创建了该任务 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 任务创建时间 | 自动赋值,无需手动插入 |
| update_user_id | INT(11) | NULL | NULL | 外键 | 11 | 更新人 ID,关联 sys_user.id,记录任务修改人 | 任务修改时记录操作人 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 任务更新时间 | 修改数据时自动刷新 |
| delete_status | TINYINT(1) | NOT NULL | 0 | 普通索引 | 1 | 删除状态:0 = 未删除,1 = 已删除(逻辑删除) | 逻辑删除,便于数据追溯 |
关联关系
- 多对一关联
charging_pile表:pile_id为外键,一个设备可创建多个定时任务(受系统参数MAX_TASK_NUM限制) - 多对一关联
sys_user表:create_user_id/update_user_id为外键,记录任务操作人 - 业务关联
charge_record表:无物理外键,任务执行后生成对应的充电记录
4.3 charge_power_control(充电功率控制表)
表注释
存储充电桩设备的充电功率控制参数,与设备主表一对一关联,一个设备仅对应一套参数,支持手动 / 自动功率调节,保障充电安全
建表语句
mysql
CREATE TABLE `charge_power_control` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '控制参数主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`min_power` DECIMAL(5,1) NOT NULL DEFAULT 1.0 COMMENT '最小充电功率,单位:kW',
`max_power` DECIMAL(5,1) NOT NULL DEFAULT 7.0 COMMENT '最大充电功率,单位:kW',
`step_power` DECIMAL(2,1) NOT NULL DEFAULT 0.1 COMMENT '功率调节步进,单位:kW/步',
`auto_adjust_status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '自动调节状态:0=关闭,1=开启',
`grid_load_threshold` DECIMAL(5,1) NOT NULL DEFAULT 5.0 COMMENT '电网负荷阈值,单位:kW,自动调节时生效',
`temp_adjust_threshold` INT(3) NOT NULL DEFAULT 50 COMMENT '温度调节阈值,单位:℃,自动调节时生效',
`update_user_id` INT(11) NOT NULL COMMENT '更新人ID,关联sys_user.id,记录参数修改人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '参数更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_charge_power_control_pile_id` (`pile_id`),
CONSTRAINT `fk_charge_power_control_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_charge_power_control_user_id` FOREIGN KEY (`update_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='充电功率控制表,存储设备充电功率控制参数';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 控制参数主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_id | INT(11) | NOT NULL | - | 唯一索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 一对一关联,一个设备仅对应一套参数 |
| min_power | DECIMAL(5,1) | NOT NULL | 1.0 | - | 5,1 | 最小充电功率,单位:kW | 设备支持的最小充电功率,不可低于 |
| max_power | DECIMAL(5,1) | NOT NULL | 7.0 | - | 5,1 | 最大充电功率,单位:kW | 设备支持的最大充电功率,不可超过 |
| step_power | DECIMAL(2,1) | NOT NULL | 0.1 | - | 2,1 | 功率调节步进,单位:kW / 步 | 每次调节的功率增量,如 0.1kW / 步 |
| auto_adjust_status | TINYINT(1) | NOT NULL | 1 | - | 1 | 自动调节状态:0 = 关闭,1 = 开启 | 开启后设备根据电网负荷 / 温度自动调节功率 |
| grid_load_threshold | DECIMAL(5,1) | NOT NULL | 5.0 | - | 5,1 | 电网负荷阈值,单位:kW,自动调节时生效 | 电网负荷超过该值时自动降低充电功率 |
| temp_adjust_threshold | INT(3) | NOT NULL | 50 | - | 3 | 温度调节阈值,单位:℃,自动调节时生效 | 设备温度超过该值时自动降低充电功率 |
| update_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 更新人 ID,关联 sys_user.id,记录参数修改人 | 记录哪个管理员 / 用户修改了功率参数 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 参数更新时间 | 修改数据时自动刷新 |
关联关系
- 一对一关联
charging_pile表:pile_id为唯一索引,一个设备仅对应一套功率控制参数 - 多对一关联
sys_user表:update_user_id为外键,记录参数更新操作人
4.4 charge_record(充电记录主表)
表注释
存储每笔充电的核心详情,为充电业务核心主表,与设备主表一对多关联,一笔充电记录对应一个充电订单,是计费、统计的核心依据
建表语句
mysql
CREATE TABLE `charge_record` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '充电记录主键ID,系统内唯一标识',
`record_no` VARCHAR(50) NOT NULL COMMENT '充电记录编号,唯一,通过sequence生成',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`user_id` INT(11) NOT NULL COMMENT '用户ID,关联sys_user.id',
`car_model` VARCHAR(50) DEFAULT NULL COMMENT '充电车辆型号',
`battery_before` DECIMAL(3,1) DEFAULT NULL COMMENT '充电前电池电量,单位:%',
`battery_after` DECIMAL(3,1) DEFAULT NULL COMMENT '充电后电池电量,单位:%',
`start_time` DATETIME NOT NULL COMMENT '充电开始时间',
`end_time` DATETIME DEFAULT NULL COMMENT '充电结束时间',
`charge_duration` INT(11) DEFAULT NULL COMMENT '充电时长,单位:分钟',
`total_energy` DECIMAL(6,2) DEFAULT NULL COMMENT '充电总电量,单位:kWh',
`avg_power` DECIMAL(5,1) DEFAULT NULL COMMENT '平均充电功率,单位:kW',
`peak_power` DECIMAL(5,1) DEFAULT NULL COMMENT '峰值充电功率,单位:kW',
`charge_mode` TINYINT(2) NOT NULL DEFAULT 1 COMMENT '充电模式:1=立即,2=定时,3=峰谷',
`charge_cost` DECIMAL(6,2) DEFAULT NULL COMMENT '充电总费用,单位:元',
`peak_energy` DECIMAL(6,2) DEFAULT NULL COMMENT '峰时充电电量,单位:kWh',
`valley_energy` DECIMAL(6,2) DEFAULT NULL COMMENT '谷时充电电量,单位:kWh',
`holiday_energy` DECIMAL(6,2) DEFAULT NULL COMMENT '节假日充电电量,单位:kWh',
`stop_reason` TINYINT(2) DEFAULT NULL COMMENT '停止原因:1=正常完成,2=手动停止,3=设备故障,4=保护触发,5=网络断开,6=定量完成',
`record_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '记录状态:0=充电中,1=已完成,2=异常终止',
`abnormal_type` TINYINT(2) DEFAULT NULL COMMENT '异常类型:1=功率异常,2=电量异常,3=温度异常,4=电压电流异常',
`abnormal_desc` VARCHAR(255) DEFAULT NULL COMMENT '异常描述,说明异常具体原因',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_charge_record_no` (`record_no`),
KEY `idx_pile_id` (`pile_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_start_time` (`start_time`),
KEY `idx_end_time` (`end_time`),
KEY `idx_charge_mode` (`charge_mode`),
KEY `idx_record_status` (`record_status`),
KEY `idx_abnormal_type` (`abnormal_type`),
CONSTRAINT `fk_charge_record_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_charge_record_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='充电记录主表,存储每笔充电的核心详情';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | BIGINT(20) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 20 | 充电记录主键 ID,系统内唯一标识 | 自增起始值 1,BIGINT 适配大数据量 |
| record_no | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 充电记录编号,唯一,通过 sequence 生成 | 如 10000001,业务层唯一标识 |
| pile_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 一对多关联,一个设备对应多条充电记录 |
| user_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 用户 ID,关联 sys_user.id | 一对多关联,一个用户对应多条充电记录 |
| car_model | VARCHAR(50) | NULL | NULL | - | 50 | 充电车辆型号 | 如 "特斯拉 Model 3",用户可手动填写 |
| battery_before | DECIMAL(3,1) | NULL | NULL | - | 3,1 | 充电前电池电量,单位:% | 如 20.0,充电开始时的电池电量 |
| battery_after | DECIMAL(3,1) | NULL | NULL | - | 3,1 | 充电后电池电量,单位:% | 如 80.0,充电结束时的电池电量 |
| start_time | DATETIME | NOT NULL | - | 普通索引 | - | 充电开始时间 | 精确到秒,充电启动时自动赋值 |
| end_time | DATETIME | NULL | NULL | 普通索引 | - | 充电结束时间 | 充电完成 / 终止后自动赋值 |
| charge_duration | INT(11) | NULL | NULL | - | 11 | 充电时长,单位:分钟 | 自动计算:end_time - start_time |
| total_energy | DECIMAL(6,2) | NULL | NULL | - | 6,2 | 充电总电量,单位:kWh | 充电过程中实时累计,结束后固化 |
| avg_power | DECIMAL(5,1) | NULL | NULL | - | 5,1 | 平均充电功率,单位:kW | 自动计算:总电量 / 充电时长 |
| peak_power | DECIMAL(5,1) | NULL | NULL | - | 5,1 | 峰值充电功率,单位:kW | 充电过程中记录的最大实时功率 |
| charge_mode | TINYINT(2) | NOT NULL | 1 | 普通索引 | 2 | 充电模式:1 = 立即,2 = 定时,3 = 峰谷 | 与 charge_mode_config.default_mode 一致 |
| charge_cost | DECIMAL(6,2) | NULL | NULL | - | 6,2 | 充电总费用,单位:元 | 基于电量和电价自动计算,与订单金额一致 |
| peak_energy | DECIMAL(6,2) | NULL | NULL | - | 6,2 | 峰时充电电量,单位:kWh | 峰谷模式下,峰时时段的充电量 |
| valley_energy | DECIMAL(6,2) | NULL | NULL | - | 6,2 | 谷时充电电量,单位:kWh | 峰谷模式下,谷时时段的充电量 |
| holiday_energy | DECIMAL(6,2) | NULL | NULL | - | 6,2 | 节假日充电电量,单位:kWh | 节假日时段的充电量 |
| stop_reason | TINYINT(2) | NULL | NULL | - | 2 | 停止原因:1 = 正常,2 = 手动,3 = 故障,4 = 保护,5 = 断网,6 = 定量 | 标识充电停止的具体原因 |
| record_status | TINYINT(1) | NOT NULL | 0 | 普通索引 | 1 | 记录状态:0 = 充电中,1 = 已完成,2 = 异常终止 | 充电业务的核心状态,关联订单生成逻辑 |
| abnormal_type | TINYINT(2) | NULL | NULL | 普通索引 | 2 | 异常类型:1 = 功率,2 = 电量,3 = 温度,4 = 电压电流 | record_status=2 时生效,标识异常类型 |
| abnormal_desc | VARCHAR(255) | NULL | NULL | - | 255 | 异常描述,说明异常具体原因 | 如 "枪头温度超过 60℃",便于问题排查 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 记录创建时间 | 充电启动时自动赋值 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 记录更新时间 | 充电过程中实时刷新,结束后固化 |
关联关系
- 充电业务核心主表,多对一关联
charging_pile表:pile_id为外键,一个设备对应多条充电记录 - 多对一关联
sys_user表:user_id为外键,一个用户对应多条充电记录 - 一对多关联
charge_real_time_data表:一笔充电记录对应多条实时数据 - 一对一关联
charge_order表:一笔充电记录对应一个充电订单 - 业务关联
timed_charge_task表:无物理外键,定时任务触发的充电记录可关联任务 ID - 业务关联
device_alarm表:充电异常时生成对应的设备告警
4.5 charge_real_time_data(充电实时数据表)
表注释
存储充电过程中的实时采集参数,与充电记录主表一对多关联,一笔充电记录对应多条实时数据,按设备刷新频率持续采集,充电结束后停止
建表语句
mysql
CREATE TABLE `charge_real_time_data` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '实时数据主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`record_id` BIGINT(20) DEFAULT NULL COMMENT '充电记录ID,关联charge_record.id',
`collect_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据采集时间',
`current` DECIMAL(4,1) DEFAULT NULL COMMENT '实时充电电流,单位:A',
`voltage` DECIMAL(5,1) DEFAULT NULL COMMENT '实时充电电压,单位:V',
`power` DECIMAL(5,1) DEFAULT NULL COMMENT '实时充电功率,单位:kW',
`energy` DECIMAL(6,2) DEFAULT NULL COMMENT '累计充电电量,单位:kWh',
`pile_temp` INT(3) DEFAULT NULL COMMENT '设备机身温度,单位:℃',
`battery_temp` INT(3) DEFAULT NULL COMMENT '车辆电池温度,单位:℃',
`gun_temp` INT(3) DEFAULT NULL COMMENT '充电枪头温度,单位:℃',
`lightning_status` TINYINT(1) DEFAULT NULL COMMENT '防雷模块状态:0=故障,1=正常',
`ground_status` TINYINT(1) DEFAULT NULL COMMENT '接地状态:0=异常,1=正常',
`remaining_time` INT(11) DEFAULT NULL COMMENT '预计剩余充电时间,单位:分钟',
`remaining_energy` DECIMAL(5,2) DEFAULT NULL COMMENT '预计剩余充电电量,单位:kWh',
`grid_load` DECIMAL(5,1) DEFAULT NULL COMMENT '实时电网负荷,单位:kW',
`data_status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '数据状态:0=异常,1=正常',
PRIMARY KEY (`id`),
KEY `idx_pile_id` (`pile_id`),
KEY `idx_record_id` (`record_id`),
KEY `idx_collect_time` (`collect_time`),
KEY `idx_data_status` (`data_status`),
CONSTRAINT `fk_charge_real_time_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_charge_real_time_record_id` FOREIGN KEY (`record_id`) REFERENCES `charge_record` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='充电实时数据表,存储充电过程中的实时采集参数';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | BIGINT(20) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 20 | 实时数据主键 ID,系统内唯一标识 | 自增起始值 1,BIGINT 适配高频采集的大数据量 |
| pile_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 多对一关联,一个设备对应多条实时数据 |
| record_id | BIGINT(20) | NULL | NULL | 普通索引、外键 | 20 | 充电记录 ID,关联 charge_record.id | 多对一关联,一笔充电记录对应多条实时数据 |
| collect_time | DATETIME | NOT NULL | 系统当前时间 | 普通索引 | - | 数据采集时间 | 精确到秒,采集时自动赋值 |
| current | DECIMAL(4,1) | NULL | NULL | - | 4,1 | 实时充电电流,单位:A | 设备实时采集的充电电流 |
| voltage | DECIMAL(5,1) | NULL | NULL | - | 5,1 | 实时充电电压,单位:V | 设备实时采集的充电电压 |
| power | DECIMAL(5,1) | NULL | NULL | - | 5,1 | 实时充电功率,单位:kW | 自动计算:电压 × 电流 / 1000 |
| energy | DECIMAL(6,2) | NULL | NULL | - | 6,2 | 累计充电电量,单位:kWh | 从充电开始到采集时的累计电量 |
| pile_temp | INT(3) | NULL | NULL | - | 3 | 设备机身温度,单位:℃ | 设备实时采集的机身温度 |
| battery_temp | INT(3) | NULL | NULL | - | 3 | 车辆电池温度,单位:℃ | 通过车桩通信采集的电池温度 |
| gun_temp | INT(3) | NULL | NULL | - | 3 | 充电枪头温度,单位:℃ | 设备实时采集的枪头温度 |
| lightning_status | TINYINT(1) | NULL | NULL | - | 1 | 防雷模块状态:0 = 故障,1 = 正常 | 设备实时采集的防雷模块状态 |
| ground_status | TINYINT(1) | NULL | NULL | - | 1 | 接地状态:0 = 异常,1 = 正常 | 设备实时采集的接地状态 |
| remaining_time | INT(11) | NULL | NULL | - | 11 | 预计剩余充电时间,单位:分钟 | 基于当前功率和剩余电量自动计算 |
| remaining_energy | DECIMAL(5,2) | NULL | NULL | - | 5,2 | 预计剩余充电电量,单位:kWh | 基于电池总容量和当前电量计算 |
| grid_load | DECIMAL(5,1) | NULL | NULL | - | 5,1 | 实时电网负荷,单位:kW | 设备采集的电网实时负荷 |
| data_status | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 数据状态:0 = 异常,1 = 正常 | 标识采集数据是否有效,异常数据不参与计算 |
关联关系
- 多对一关联
charging_pile表:pile_id为外键,一个设备对应多条实时数据 - 多对一关联
charge_record表:record_id为外键,一笔充电记录对应多条实时数据
4.6 charge_control_command(充电远程控制指令表)
表注释
存储用户 / 管理员发送的充电桩远程控制指令,与设备主表一对多关联,记录指令类型、参数、执行状态,是车桩远程通信的核心表
建表语句
mysql
CREATE TABLE `charge_control_command` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '指令主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`user_id` INT(11) NOT NULL COMMENT '操作人ID,关联sys_user.id,记录指令发送人',
`command_type` TINYINT(2) NOT NULL COMMENT '指令类型:1=启动充电,2=停止充电,3=设备休眠,4=设备唤醒,5=解锁枪头,6=调节功率',
`command_param` VARCHAR(50) DEFAULT NULL COMMENT '指令参数,如调节功率时填写5.0(kW)',
`command_status` TINYINT(2) NOT NULL DEFAULT 0 COMMENT '指令状态:0=未执行,1=执行中,2=执行成功,3=执行失败',
`send_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '指令发送时间',
`execute_time` DATETIME DEFAULT NULL COMMENT '指令执行时间',
`fail_reason` VARCHAR(255) DEFAULT NULL COMMENT '执行失败原因,如设备离线、权限不足',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '指令备注,说明发送原因',
PRIMARY KEY (`id`),
KEY `idx_pile_id` (`pile_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_command_type` (`command_type`),
KEY `idx_command_status` (`command_status`),
KEY `idx_send_time` (`send_time`),
CONSTRAINT `fk_charge_control_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_charge_control_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='充电远程控制指令表,存储远程控制指令';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 指令主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 多对一关联,一个设备可接收多条指令 |
| user_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 操作人 ID,关联 sys_user.id,记录指令发送人 | 记录哪个用户 / 管理员发送了指令 |
| command_type | TINYINT(2) | NOT NULL | - | 普通索引 | 2 | 指令类型:1 = 启动,2 = 停止,3 = 休眠,4 = 唤醒,5 = 解锁,6 = 调功率 | 标识指令的具体操作类型 |
| command_param | VARCHAR(50) | NULL | NULL | - | 50 | 指令参数,如调节功率时填写 5.0(kW) | 部分指令需传参,如调功率、定量充电 |
| command_status | TINYINT(2) | NOT NULL | 0 | 普通索引 | 2 | 指令状态:0 = 未执行,1 = 执行中,2 = 成功,3 = 失败 | 标识指令的执行状态 |
| send_time | DATETIME | NOT NULL | 系统当前时间 | 普通索引 | - | 指令发送时间 | 发送指令时自动赋值 |
| execute_time | DATETIME | NULL | NULL | - | - | 指令执行时间 | 设备执行指令后自动赋值 |
| fail_reason | VARCHAR(255) | NULL | NULL | - | 255 | 执行失败原因,如设备离线、权限不足 | 指令执行失败时记录具体原因 |
| remark | VARCHAR(255) | NULL | NULL | - | 255 | 指令备注,说明发送原因 | 便于后续追溯指令发送的场景 |
关联关系
- 多对一关联
charging_pile表:pile_id为外键,一个设备可接收多条远程控制指令 - 多对一关联
sys_user表:user_id为外键,一个用户可发送多条控制指令 - 业务关联
charge_record表:无物理外键,启动 / 停止指令执行后更新充电记录状态
5. 告警与日志表
5.1 device_alarm(设备告警表)
表注释
存储充电桩设备的所有告警信息,与设备主表一对多关联,记录告警类型、级别、处理状态,告警触发后自动推送通知给用户 / 管理员
建表语句
mysql
CREATE TABLE `device_alarm` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '告警主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`user_id` INT(11) DEFAULT NULL COMMENT '绑定用户ID,关联sys_user.id,未绑定为NULL',
`alarm_no` VARCHAR(50) NOT NULL COMMENT '告警编号,唯一,通过sequence生成',
`alarm_type` TINYINT(2) NOT NULL COMMENT '告警类型:1=过压,2=欠压,3=过流,4=过温,5=漏电,6=接地异常,7=设备离线,8=枪头未拔',
`alarm_level` TINYINT(1) NOT NULL DEFAULT 2 COMMENT '告警级别:1=紧急,2=一般,3=提示',
`alarm_content` VARCHAR(255) NOT NULL COMMENT '告警内容,详细说明告警信息',
`alarm_param` VARCHAR(100) DEFAULT NULL COMMENT '告警参数,如过温时的温度值:65℃',
`alarm_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '告警触发时间',
`recover_time` DATETIME DEFAULT NULL COMMENT '告警恢复时间',
`alarm_status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '告警状态:0=已恢复,1=未恢复',
`handle_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '处理状态:0=未处理,1=已处理',
`handle_user_id` INT(11) DEFAULT NULL COMMENT '处理人ID,关联sys_user.id,记录告警处理人',
`handle_time` DATETIME DEFAULT NULL COMMENT '告警处理时间',
`handle_remark` VARCHAR(255) DEFAULT NULL COMMENT '处理备注,说明处理措施',
`auto_recover` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '自动恢复:0=手动恢复,1=自动恢复',
`alarm_push` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '告警推送:0=未推送,1=已推送',
`push_time` DATETIME DEFAULT NULL COMMENT '告警推送时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_device_alarm_no` (`alarm_no`),
KEY `idx_pile_id` (`pile_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_alarm_type` (`alarm_type`),
KEY `idx_alarm_level` (`alarm_level`),
KEY `idx_alarm_time` (`alarm_time`),
KEY `idx_alarm_status` (`alarm_status`),
KEY `idx_handle_status` (`handle_status`),
CONSTRAINT `fk_device_alarm_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_device_alarm_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_device_alarm_handle_user` FOREIGN KEY (`handle_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='设备告警表,存储设备所有告警信息';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 告警主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 多对一关联,一个设备可触发多条告警 |
| user_id | INT(11) | NULL | NULL | 普通索引、外键 | 11 | 绑定用户 ID,关联 sys_user.id,未绑定为 NULL | 告警推送的主接收人,未绑定设备为 NULL |
| alarm_no | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 |
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| alarm_no | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 告警编号,唯一,通过 sequence 生成 | 如 100001,业务层唯一标识告警事件 |
| alarm_type | TINYINT(2) | NOT NULL | - | 普通索引 | 2 | 告警类型:1 = 过压,2 = 欠压,3 = 过流,4 = 过温,5 = 漏电,6 = 接地异常,7 = 设备离线,8 = 枪头未拔 | 关联设备保护参数阈值触发逻辑 |
| alarm_level | TINYINT(1) | NOT NULL | 2 | 普通索引 | 1 | 告警级别:1 = 紧急,2 = 一般,3 = 提示 | 1 需立即处理,3 仅提醒无需干预 |
| alarm_content | VARCHAR(255) | NOT NULL | - | - | 255 | 告警内容,详细说明告警信息 | 如 "枪头温度 65℃,超过过温阈值 60℃" |
| alarm_param | VARCHAR(100) | NULL | NULL | - | 100 | 告警参数,如过温时的温度值:65℃ | 存储触发告警的具体数值,便于排查 |
| alarm_time | DATETIME | NOT NULL | 系统当前时间 | 普通索引 | - | 告警触发时间 | 精确到秒,阈值触发时自动赋值 |
| recover_time | DATETIME | NULL | NULL | - | - | 告警恢复时间 | 设备状态恢复正常后自动赋值 |
| alarm_status | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 告警状态:0 = 已恢复,1 = 未恢复 | 标识设备当前是否仍处于告警状态 |
| handle_status | TINYINT(1) | NOT NULL | 0 | 普通索引 | 1 | 处理状态:0 = 未处理,1 = 已处理 | 需人工确认处理结果后更新为 1 |
| handle_user_id | INT(11) | NULL | NULL | 外键 | 11 | 处理人 ID,关联 sys_user.id,记录告警处理人 | 管理员处理后记录操作人 ID |
| handle_time | DATETIME | NULL | NULL | - | - | 告警处理时间 | 处理人确认后自动赋值 |
| handle_remark | VARCHAR(255) | NULL | NULL | - | 255 | 处理备注,说明处理措施 | 如 "断电降温后重启设备,告警恢复" |
| auto_recover | TINYINT(1) | NOT NULL | 0 | - | 1 | 自动恢复:0 = 手动恢复,1 = 自动恢复 | 如设备离线后重连,自动恢复告警状态 |
| alarm_push | TINYINT(1) | NOT NULL | 1 | - | 1 | 告警推送:0 = 未推送,1 = 已推送 | 标识是否已向用户 / 管理员推送通知 |
| push_time | DATETIME | NULL | NULL | - | - | 告警推送时间 | 通知发送成功后自动赋值 |
关联关系
- 多对一关联
charging_pile表:pile_id为外键,一个设备可触发多条告警记录 - 多对一关联
sys_user表:user_id为告警推送对象,handle_user_id为告警处理人 - 业务关联
notify_record表:无物理外键,告警推送后生成对应的通知记录
5.2 data_warning(数据异常预警表)
表注释
存储设备采集数据的异常预警信息,与设备主表一对多关联,预警阈值低于告警阈值,用于提前发现潜在风险,避免触发设备保护
建表语句
mysql
CREATE TABLE `data_warning` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '预警主键ID,系统内唯一标识',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`user_id` INT(11) DEFAULT NULL COMMENT '绑定用户ID,关联sys_user.id,未绑定为NULL',
`warning_type` TINYINT(2) NOT NULL COMMENT '预警类型:1=电压偏高,2=电压偏低,3=电流偏高,4=温度偏高,5=电量异常',
`warning_param` VARCHAR(100) NOT NULL COMMENT '预警参数,如电压240V(阈值245V)',
`warning_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '预警触发时间',
`warning_status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '预警状态:0=已解除,1=未解除',
`relieve_time` DATETIME DEFAULT NULL COMMENT '预警解除时间',
`warning_push` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '预警推送:0=未推送,1=已推送',
`push_time` DATETIME DEFAULT NULL COMMENT '预警推送时间',
PRIMARY KEY (`id`),
KEY `idx_pile_id` (`pile_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_warning_type` (`warning_type`),
KEY `idx_warning_time` (`warning_time`),
KEY `idx_warning_status` (`warning_status`),
CONSTRAINT `fk_data_warning_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_data_warning_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='数据异常预警表,存储设备采集数据的异常预警信息';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 预警主键 ID,系统内唯一标识 | 自增起始值 1 |
| pile_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 多对一关联,一个设备可触发多条预警 |
| user_id | INT(11) | NULL | NULL | 普通索引、外键 | 11 | 绑定用户 ID,关联 sys_user.id,未绑定为 NULL | 预警推送的主接收人,未绑定设备为 NULL |
| warning_type | TINYINT(2) | NOT NULL | - | 普通索引 | 2 | 预警类型:1 = 电压偏高,2 = 电压偏低,3 = 电流偏高,4 = 温度偏高,5 = 电量异常 | 阈值低于告警,提前预警潜在风险 |
| warning_param | VARCHAR(100) | NOT NULL | - | - | 100 | 预警参数,如电压 240V(阈值 245V) | 存储触发预警的具体数值和阈值对比 |
| warning_time | DATETIME | NOT NULL | 系统当前时间 | 普通索引 | - | 预警触发时间 | 精确到秒,阈值触发时自动赋值 |
| warning_status | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 预警状态:0 = 已解除,1 = 未解除 | 设备数据恢复正常后更新为 0 |
| relieve_time | DATETIME | NULL | NULL | - | - | 预警解除时间 | 数据恢复正常后自动赋值 |
| warning_push | TINYINT(1) | NOT NULL | 1 | - | 1 | 预警推送:0 = 未推送,1 = 已推送 | 标识是否已向用户推送预警通知 |
| push_time | DATETIME | NULL | NULL | - | - | 预警推送时间 | 通知发送成功后自动赋值 |
关联关系
- 多对一关联
charging_pile表:pile_id为外键,一个设备可触发多条预警记录 - 多对一关联
sys_user表:user_id为预警推送对象 - 业务关联
pile_protect_param表:无物理外键,预警阈值基于保护参数下调设定
6. 计费与订单表
6.1 price_config(全局电价配置表)
表注释
存储系统全局的电价配置信息,支持分时段、分节假日设置电价,设备本地配置优先级高于全局配置,用于无本地配置设备的计费
建表语句
mysql
CREATE TABLE `price_config` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '电价配置主键ID,系统内唯一标识',
`price_type` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '电价类型:1=工作日,2=周末,3=节假日',
`peak_start` TIME NOT NULL COMMENT '峰时开始时间',
`peak_end` TIME NOT NULL COMMENT '峰时结束时间',
`valley_start` TIME NOT NULL COMMENT '谷时开始时间',
`valley_end` TIME NOT NULL COMMENT '谷时结束时间',
`peak_price` DECIMAL(4,2) NOT NULL COMMENT '峰时电价,单位:元/kWh',
`valley_price` DECIMAL(4,2) NOT NULL COMMENT '谷时电价,单位:元/kWh',
`flat_price` DECIMAL(4,2) NOT NULL COMMENT '平段电价,单位:元/kWh,峰谷外时段',
`holiday_list` VARCHAR(255) DEFAULT NULL COMMENT '节假日列表,如2025-01-01,2025-02-01',
`is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认配置:0=否,1=是,仅一条默认',
`effective_time` DATETIME NOT NULL COMMENT '配置生效时间',
`expire_time` DATETIME DEFAULT NULL COMMENT '配置失效时间,NULL为永久有效',
`create_user_id` INT(11) NOT NULL COMMENT '创建人ID,关联sys_user.id',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '配置创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_price_config_default` (`is_default`) USING BTREE WHERE (`is_default` = 1),
KEY `idx_price_type` (`price_type`),
KEY `idx_effective_time` (`effective_time`),
CONSTRAINT `fk_price_config_user_id` FOREIGN KEY (`create_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='全局电价配置表,存储系统全局的电价配置信息';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 电价配置主键 ID,系统内唯一标识 | 自增起始值 1 |
| price_type | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 电价类型:1 = 工作日,2 = 周末,3 = 节假日 | 不同类型时段对应不同电价 |
| peak_start | TIME | NOT NULL | - | - | - | 峰时开始时间 | 如 08:00:00,峰时电价的起始时间 |
| peak_end | TIME | NOT NULL | - | - | - | 峰时结束时间 | 如 22:00:00,峰时电价的结束时间 |
| valley_start | TIME | NOT NULL | - | - | - | 谷时开始时间 | 如 22:00:00,谷时电价的起始时间 |
| valley_end | TIME | NOT NULL | - | - | - | 谷时结束时间 | 如 08:00:00,谷时电价的结束时间 |
| peak_price | DECIMAL(4,2) | NOT NULL | - | - | 4,2 | 峰时电价,单位:元 /kWh | 峰时时段的充电单价,高于谷时和平段 |
| valley_price | DECIMAL(4,2) | NOT NULL | - | - | 4,2 | 谷时电价,单位:元 /kWh | 谷时时段的充电单价,低于峰时和平段 |
| flat_price | DECIMAL(4,2) | NOT NULL | - | - | 4,2 | 平段电价,单位:元 /kWh,峰谷外时段 | 峰谷时段外的默认电价 |
| holiday_list | VARCHAR(255) | NULL | NULL | - | 255 | 节假日列表,如 2025-01-01,2025-02-01 | price_type=3 时生效,逗号分隔日期 |
| is_default | TINYINT(1) | NOT NULL | 0 | 唯一索引 | 1 | 是否默认配置:0 = 否,1 = 是,仅一条默认 | 系统默认使用的电价配置,仅能有一条 |
| effective_time | DATETIME | NOT NULL | - | 普通索引 | - | 配置生效时间 | 配置开始生效的时间点 |
| expire_time | DATETIME | NULL | NULL | - | - | 配置失效时间,NULL 为永久有效 | 配置失效后不再使用 |
| create_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 创建人 ID,关联 sys_user.id | 记录配置的创建管理员 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 配置创建时间 | 自动赋值,无需手动插入 |
关联关系
- 多对一关联
sys_user表:create_user_id为外键,记录配置创建人 - 业务关联
charge_mode_config表:无物理外键,设备本地配置优先级更高
6.2 charge_order(充电订单表)
表注释
存储每笔充电的订单信息,与充电记录一对一关联,记录订单金额、支付状态、支付方式,是计费和财务对账的核心依据
建表语句
mysql
CREATE TABLE `charge_order` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '订单主键ID,系统内唯一标识',
`order_no` VARCHAR(50) NOT NULL COMMENT '订单编号,唯一,通过sequence生成',
`record_id` BIGINT(20) NOT NULL COMMENT '充电记录ID,关联charge_record.id',
`pile_id` INT(11) NOT NULL COMMENT '设备ID,关联charging_pile.id',
`user_id` INT(11) NOT NULL COMMENT '用户ID,关联sys_user.id',
`total_energy` DECIMAL(6,2) NOT NULL COMMENT '充电总电量,单位:kWh',
`total_amount` DECIMAL(6,2) NOT NULL COMMENT '订单总金额,单位:元',
`peak_amount` DECIMAL(6,2) DEFAULT 0.00 COMMENT '峰时费用,单位:元',
`valley_amount` DECIMAL(6,2) DEFAULT 0.00 COMMENT '谷时费用,单位:元',
`flat_amount` DECIMAL(6,2) DEFAULT 0.00 COMMENT '平段费用,单位:元',
`discount_amount` DECIMAL(6,2) DEFAULT 0.00 COMMENT '优惠金额,单位:元',
`pay_amount` DECIMAL(6,2) NOT NULL COMMENT '实付金额,单位:元=总金额-优惠金额',
`pay_type` TINYINT(2) NOT NULL COMMENT '支付方式:1=微信支付,2=支付宝,3=余额支付',
`pay_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '支付状态:0=未支付,1=已支付,2=已退款',
`pay_time` DATETIME DEFAULT NULL COMMENT '支付时间',
`order_status` TINYINT(2) NOT NULL DEFAULT 0 COMMENT '订单状态:0=待支付,1=已完成,2=已取消,3=已退款',
`cancel_time` DATETIME DEFAULT NULL COMMENT '订单取消时间',
`cancel_reason` VARCHAR(255) DEFAULT NULL COMMENT '订单取消原因',
`refund_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '退款状态:0=未退款,1=退款中,2=已退款',
`refund_time` DATETIME DEFAULT NULL COMMENT '退款完成时间',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '订单创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '订单更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_charge_order_no` (`order_no`),
UNIQUE KEY `idx_charge_order_record` (`record_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_pile_id` (`pile_id`),
KEY `idx_pay_status` (`pay_status`),
KEY `idx_order_status` (`order_status`),
KEY `idx_create_time` (`create_time`),
CONSTRAINT `fk_charge_order_record_id` FOREIGN KEY (`record_id`) REFERENCES `charge_record` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_charge_order_pile_id` FOREIGN KEY (`pile_id`) REFERENCES `charging_pile` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_charge_order_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='充电订单表,存储每笔充电的订单信息';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | BIGINT(20) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 20 | 订单主键 ID,系统内唯一标识 | 自增起始值 1,BIGINT 适配大数据量 |
| order_no | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 订单编号,唯一,通过 sequence 生成 | 如 10000001,业务层唯一标识订单 |
| record_id | BIGINT(20) | NOT NULL | - | 唯一索引、外键 | 20 | 充电记录 ID,关联 charge_record.id | 一对一关联,一笔充电记录对应一个订单 |
| pile_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 设备 ID,关联 charging_pile.id | 冗余存储,便于快速查询 |
| user_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 用户 ID,关联 sys_user.id | 订单归属用户 |
| total_energy | DECIMAL(6,2) | NOT NULL | - | - | 6,2 | 充电总电量,单位:kWh | 与 charge_record.total_energy 一致 |
| total_amount | DECIMAL(6,2) | NOT NULL | - | - | 6,2 | 订单总金额,单位:元 | 基于电量和电价计算的总费用 |
| peak_amount | DECIMAL(6,2) | NULL | 0.00 | - | 6,2 | 峰时费用,单位:元 | 峰时时段产生的费用 |
| valley_amount | DECIMAL(6,2) | NULL | 0.00 | - | 6,2 | 谷时费用,单位:元 | 谷时时段产生的费用 |
| flat_amount | DECIMAL(6,2) | NULL | 0.00 | - | 6,2 | 平段费用,单位:元 | 平段时段产生的费用 |
| discount_amount | DECIMAL(6,2) | NULL | 0.00 | - | 6,2 | 优惠金额,单位:元 | 优惠券、满减等活动抵扣的金额 |
| pay_amount | DECIMAL(6,2) | NOT NULL | - | - | 6,2 | 实付金额,单位:元 = 总金额 - 优惠金额 | 用户实际需要支付的金额 |
| pay_type | TINYINT(2) | NOT NULL | - | - | 2 | 支付方式:1 = 微信支付,2 = 支付宝,3 = 余额支付 | 记录用户的支付渠道 |
| pay_status | TINYINT(1) | NOT NULL | 0 | 普通索引 | 1 | 支付状态:0 = 未支付,1 = 已支付,2 = 已退款 | 标识订单的支付进度 |
| pay_time | DATETIME | NULL | NULL | - | - | 支付时间 | 用户完成支付后自动赋值 |
| order_status | TINYINT(2) | NOT NULL | 0 | 普通索引 | 2 | 订单状态:0 = 待支付,1 = 已完成,2 = 已取消,3 = 已退款 | 订单的核心业务状态 |
| cancel_time | DATETIME | NULL | NULL | - | - | 订单取消时间 | 订单取消后自动赋值 |
| cancel_reason | VARCHAR(255) | NULL | NULL | - | 255 | 订单取消原因 | 如 "用户主动取消""设备故障" |
| refund_status | TINYINT(1) | NOT NULL | 0 | - | 1 | 退款状态:0 = 未退款,1 = 退款中,2 = 已退款 | 标识订单的退款进度 |
| refund_time | DATETIME | NULL | NULL | - | - | 退款完成时间 | 退款到账后自动赋值 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 订单创建时间 | 充电记录生成后自动创建订单 |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 订单更新时间 | 订单状态变更时自动刷新 |
关联关系
- 一对一关联
charge_record表:record_id为唯一外键,一笔充电记录对应一个订单 - 多对一关联
charging_pile表:pile_id为外键,一个设备对应多个订单 - 多对一关联
sys_user表:user_id为外键,一个用户对应多个订单 - 一对多关联
refund_record表:一个订单可对应多条退款记录(部分退款场景)
6.3 refund_record(退款记录表)
表注释
存储充电订单的退款记录,与订单表一对多关联,支持全额退款和部分退款,记录退款金额、原因、状态,用于财务对账和退款追溯
建表语句
mysql
CREATE TABLE `refund_record` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '退款记录主键ID,系统内唯一标识',
`refund_no` VARCHAR(50) NOT NULL COMMENT '退款单号,唯一,通过sequence生成',
`order_id` BIGINT(20) NOT NULL COMMENT '订单ID,关联charge_order.id',
`order_no` VARCHAR(50) NOT NULL COMMENT '订单编号,冗余存储',
`user_id` INT(11) NOT NULL COMMENT '用户ID,关联sys_user.id',
`refund_amount` DECIMAL(6,2) NOT NULL COMMENT '退款金额,单位:元',
`refund_type` TINYINT(1) NOT NULL COMMENT '退款类型:1=全额退款,2=部分退款',
`refund_reason` VARCHAR(255) NOT NULL COMMENT '退款原因,如设备故障、充电异常',
`refund_status` TINYINT(2) NOT NULL DEFAULT 0 COMMENT '退款状态:0=申请中,1=审核通过,2=退款中,3=已退款,4=审核驳回',
`apply_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '退款申请时间',
`audit_user_id` INT(11) DEFAULT NULL COMMENT '审核人ID,关联sys_user.id',
`audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
`audit_remark` VARCHAR(255) DEFAULT NULL COMMENT '审核备注',
`refund_time` DATETIME DEFAULT NULL COMMENT '退款到账时间',
`refund_channel` VARCHAR(50) DEFAULT NULL COMMENT '退款渠道,如微信支付、支付宝',
`refund_transaction` VARCHAR(100) DEFAULT NULL COMMENT '退款交易号,支付渠道返回',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_refund_record_no` (`refund_no`),
KEY `idx_order_id` (`order_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_refund_status` (`refund_status`),
KEY `idx_apply_time` (`apply_time`),
CONSTRAINT `fk_refund_record_order_id` FOREIGN KEY (`order_id`) REFERENCES `charge_order` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_refund_record_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_refund_record_audit_user` FOREIGN KEY (`audit_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='退款记录表,存储充电订单的退款记录';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 退款记录主键 ID,系统内唯一标识 | 自增起始值 1 |
| refund_no | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 退款单号,唯一,通过 sequence 生成 | 如 100001,业务层唯一标识退款事件 |
| order_id | BIGINT(20) | NOT NULL | - | 普通索引、外键 | 20 | 订单 ID,关联 charge_order.id | 多对一关联,一个订单可对应多条退款记录 |
| order_no | VARCHAR(50) | NOT NULL | - | - | 50 | 订单编号,冗余存储 | 便于快速查询,无需关联订单表 |
| user_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 用户 ID,关联 sys_user.id | 退款申请人 |
| refund_amount | DECIMAL(6,2) | NOT NULL | - | - | 6,2 | 退款金额,单位:元 | 全额退款等于订单实付金额,部分退款小于实付 |
| refund_type | TINYINT(1) | NOT NULL | - | - | 1 | 退款类型:1 = 全额退款,2 = 部分退款 | 标识退款的额度类型 |
| refund_reason | VARCHAR(255) | NOT NULL | - | - | 255 | 退款原因,如设备故障、充电异常 | 用户申请时填写,审核时参考 |
| refund_status | TINYINT(2) | NOT NULL | 0 | 普通索引 | 2 | 退款状态:0 = 申请中,1 = 审核通过,2 = 退款中,3 = 已退款,4 = 审核驳回 | 退款流程的核心状态 |
| apply_time | DATETIME | NOT NULL | 系统当前时间 | 普通索引 | - | 退款申请时间 | 用户提交申请时自动赋值 |
| audit_user_id | INT(11) | NULL | NULL | 外键 | 11 | 审核人 ID,关联 sys_user.id | 管理员审核后记录操作人 ID |
| audit_time | DATETIME | NULL | NULL | - | - | 审核时间 | 审核完成后自动赋值 |
| audit_remark | VARCHAR(255) | NULL | NULL | - | 255 | 审核备注 | 如 "设备故障属实,同意退款" |
| refund_time | DATETIME | NULL | NULL | - | - | 退款到账时间 | 资金到用户账户后自动赋值 |
| refund_channel | VARCHAR(50) | NULL | NULL | - | 50 | 退款渠道,如微信支付、支付宝 | 与订单支付渠道一致 |
| refund_transaction | VARCHAR(100) | NULL | NULL | - | 100 | 退款交易号,支付渠道返回 | 支付渠道生成的唯一退款凭证,用于对账 |
关联关系
- 多对一关联
charge_order表:order_id为外键,一个订单可对应多条退款记录 - 多对一关联
sys_user表:user_id为退款申请人,audit_user_id为审核人
7. 通知管理表
7.1 notify_template(通知模板表)
表注释
存储系统所有通知的模板信息,支持短信、APP 推送两种渠道,模板变量通过占位符替换,实现通知内容的标准化和个性化
建表语句
mysql
CREATE TABLE `notify_template` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '模板主键ID,系统内唯一标识',
`template_code` VARCHAR(50) NOT NULL COMMENT '模板编码,唯一,如ALARM_DEVICE_OFFLINE',
`template_name` VARCHAR(100) NOT NULL COMMENT '模板名称,如设备离线告警',
`notify_type` TINYINT(1) NOT NULL COMMENT '通知类型:1=短信,2=APP推送',
`template_content` TEXT NOT NULL COMMENT '模板内容,支持变量占位符,如{pile_name}设备离线',
`template_var` VARCHAR(255) DEFAULT NULL COMMENT '模板变量,逗号分隔,如pile_name,alarm_time',
`is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认模板:0=否,1=是,同类型仅一条',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '模板状态:0=禁用,1=启用',
`create_user_id` INT(11) NOT NULL COMMENT '创建人ID,关联sys_user.id',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '模板创建时间',
`update_user_id` INT(11) DEFAULT NULL COMMENT '更新人ID,关联sys_user.id',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '模板更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_notify_template_code` (`template_code`),
UNIQUE KEY `idx_notify_template_default` (`notify_type`,`is_default`) USING BTREE WHERE (`is_default` = 1),
KEY `idx_notify_type` (`notify_type`),
KEY `idx_status` (`status`),
CONSTRAINT `fk_notify_template_create_user` FOREIGN KEY (`create_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_notify_template_update_user` FOREIGN KEY (`update_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='通知模板表,存储系统所有通知的模板信息';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 模板主键 ID,系统内唯一标识 | 自增起始值 1 |
| template_code | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 模板编码,唯一,如 ALARM_DEVICE_OFFLINE | 业务层调用模板的唯一标识 |
| template_name | VARCHAR(100) | NOT NULL | - | - | 100 | 模板名称,如设备离线告警 | 便于后台管理展示 |
| notify_type | TINYINT(1) | NOT NULL | - | 普通索引、联合索引 | 1 | 通知类型:1 = 短信,2=APP 推送 | 不同渠道对应不同模板格式 |
| template_content | TEXT | NOT NULL | - | - | 不限 | 模板内容,支持变量占位符,如 {pile_name} 设备离线 | 占位符用 {} 包裹,发送时替换为实际值 |
| template_var | VARCHAR(255) | NULL | NULL | - | 255 | 模板变量,逗号分隔,如 pile_name,alarm_time | 记录模板中所有占位符变量,便于参数传递 |
| is_default | TINYINT(1) | NOT NULL | 0 | 联合索引 | 1 | 是否默认模板:0 = 否,1 = 是,同类型仅一条 | 同通知类型下仅能有一个默认模板 |
| status | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 模板状态:0 = 禁用,1 = 启用 | 禁用的模板不可用于发送通知 |
| create_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 创建人 ID,关联 sys_user.id | 记录模板创建的管理员 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 模板创建时间 | 自动赋值,无需手动插入 |
| update_user_id | INT(11) | NULL | NULL | 外键 | 11 | 更新人 ID,关联 sys_user.id | 模板修改后记录操作人 ID |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 模板更新时间 | 修改模板时自动刷新 |
关联关系
- 多对一关联
sys_user表:create_user_id/update_user_id为外键,记录模板操作人 - 一对多关联
notify_record表:一个模板可生成多条通知记录
7.2 notify_record(通知推送记录表)
表注释
存储系统所有通知的推送记录,与通知模板一对多关联,记录推送对象、渠道、状态、结果,用于通知追溯和送达率统计
建表语句
mysql
CREATE TABLE `notify_record` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '通知记录主键ID,系统内唯一标识',
`notify_no` VARCHAR(50) NOT NULL COMMENT '通知编号,唯一,通过sequence生成',
`template_id` INT(11) NOT NULL COMMENT '模板ID,关联notify_template.id',
`template_code` VARCHAR(50) NOT NULL COMMENT '模板编码,冗余存储',
`user_id` INT(11) NOT NULL COMMENT '接收人ID,关联sys_user.id',
`notify_type` TINYINT(1) NOT NULL COMMENT '通知类型:1=短信,2=APP推送',
`notify_content` TEXT NOT NULL COMMENT '推送内容,替换变量后的最终内容',
`push_status` TINYINT(2) NOT NULL DEFAULT 0 COMMENT '推送状态:0=待推送,1=推送中,2=推送成功,3=推送失败',
`push_time` DATETIME DEFAULT NULL COMMENT '推送时间',
`receive_time` DATETIME DEFAULT NULL COMMENT '接收时间,APP推送时生效',
`fail_reason` VARCHAR(255) DEFAULT NULL COMMENT '推送失败原因,如手机号无效、用户未安装APP',
`push_channel` VARCHAR(50) DEFAULT NULL COMMENT '推送渠道,如阿里云短信、极光推送',
`channel_no` VARCHAR(100) DEFAULT NULL COMMENT '渠道流水号,推送平台返回',
`business_type` TINYINT(2) NOT NULL COMMENT '业务类型:1=设备告警,2=充电完成,3=订单支付,4=退款通知',
`business_id` VARCHAR(50) DEFAULT NULL COMMENT '业务ID,如告警ID、订单ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_notify_record_no` (`notify_no`),
KEY `idx_template_id` (`template_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_notify_type` (`notify_type`),
KEY `idx_push_status` (`push_status`),
KEY `idx_business_type` (`business_type`),
CONSTRAINT `fk_notify_record_template_id` FOREIGN KEY (`template_id`) REFERENCES `notify_template` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_notify_record_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='通知推送记录表,存储系统所有通知的推送记录';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | BIGINT(20) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 20 | 通知记录主键 ID,系统内唯一标识 | 自增起始值 1,BIGINT 适配高频推送场景 |
| notify_no | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 通知编号,唯一,通过 sequence 生成 | 如 100001,业务层唯一标识通知事件 |
| template_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 模板 ID,关联 notify_template.id | 多对一关联,一个模板对应多条通知记录 |
| template_code | VARCHAR(50) | NOT NULL | - | - | 50 | 模板编码,冗余存储 | 便于快速查询,无需关联模板表 |
| user_id | INT(11) | NOT NULL | - | 普通索引、外键 | 11 | 接收人 ID,关联 sys_user.id | 通知的接收用户 |
| notify_type | TINYINT(1) | NOT NULL | - | 普通索引 | 1 | 通知类型:1 = 短信,2=APP 推送 | 与模板的通知类型一致 |
| notify_content | TEXT | NOT NULL | - | - | 不限 | 推送内容,替换变量后的最终内容 | 如 "客厅充电桩于 2025-01-01 10:00 离线,请及时处理" |
| push_status | TINYINT(2) | NOT NULL | 0 | 普通索引 | 2 | 推送状态:0 = 待推送,1 = 推送中,2 = 推送成功,3 = 推送失败 | 通知推送的核心状态 |
| push_time | DATETIME | NULL | NULL | - | - | 推送时间 | 发送通知时自动赋值 |
| receive_time | DATETIME | NULL | NULL | - | - | 接收时间,APP 推送时生效 | 用户点击或接收通知后自动赋值 |
| fail_reason | VARCHAR(255) | NULL | NULL | - | 255 | 推送失败原因,如手机号无效、用户未安装 APP | 推送失败时记录具体原因,便于排查 |
| push_channel | VARCHAR(50) | NULL | NULL | - | 50 | 推送渠道,如阿里云短信、极光推送 | 实际执行推送的第三方平台 |
| channel_no | VARCHAR(100) | NULL | NULL | - | 100 | 渠道流水号,推送平台返回 | 第三方平台生成的唯一推送凭证 |
| business_type | TINYINT(2) | NOT NULL | - | 普通索引 | 2 | 业务类型:1 = 设备告警,2 = 充电完成,3 = 订单支付,4 = 退款通知 | 关联通知的业务场景 |
| business_id | VARCHAR(50) | NULL | NULL | - | 50 | 业务 ID,如告警 ID、订单 ID | 关联具体的业务记录,便于追溯 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 记录创建时间 | 生成通知记录时自动赋值 |
关联关系
- 多对一关联
notify_template表:template_id为外键,一个模板对应多条通知记录 - 多对一关联
sys_user表:user_id为外键,一个用户对应多条通知记录 - 业务关联
device_alarm/charge_order等表:通过business_type和business_id关联具体业务
8. 系统参数配置表
8.1 sys_param(全局系统参数表)
表注释
存储系统的全局参数配置,支持动态调整系统运行规则,无需修改代码即可变更系统行为,参数生效无需重启服务
建表语句
mysql
CREATE TABLE `sys_param` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '参数主键ID,系统内唯一标识',
`param_code` VARCHAR(50) NOT NULL COMMENT '参数编码,唯一,如MAX_TASK_NUM',
`param_name` VARCHAR(100) NOT NULL COMMENT '参数名称,如最大定时任务数',
`param_value` VARCHAR(255) NOT NULL COMMENT '参数值,如10',
`param_type` TINYINT(1) NOT NULL COMMENT '参数类型:1=数字,2=字符串,3=布尔值,4=日期',
`param_desc` VARCHAR(255) DEFAULT NULL COMMENT '参数描述,说明参数用途',
`param_group` VARCHAR(50) NOT NULL COMMENT '参数分组,如设备管理、充电控制',
`is_system` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否系统参数:0=否,1=是,不可删除',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '参数状态:0=禁用,1=启用',
`create_user_id` INT(11) NOT NULL COMMENT '创建人ID,关联sys_user.id',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '参数创建时间',
`update_user_id` INT(11) DEFAULT NULL COMMENT '更新人ID,关联sys_user.id',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '参数更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_sys_param_code` (`param_code`),
KEY `idx_param_group` (`param_group`),
KEY `idx_status` (`status`),
CONSTRAINT `fk_sys_param_create_user` FOREIGN KEY (`create_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_sys_param_update_user` FOREIGN KEY (`update_user_id`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='全局系统参数表,存储系统的全局参数配置';
字段详细信息
| 字段名 | 数据类型 | 非空约束 | 默认值 | 主键 / 索引 | 字段长度 | 字段注释 | 补充说明 |
|---|---|---|---|---|---|---|---|
| id | INT(11) | NOT NULL | 自增 | 主键、AUTO_INCREMENT=1 | 11 | 参数主键 ID,系统内唯一标识 | 自增起始值 1 |
| param_code | VARCHAR(50) | NOT NULL | - | 唯一索引 | 50 | 参数编码,唯一,如 MAX_TASK_NUM | 业务层获取参数的唯一标识 |
| param_name | VARCHAR(100) | NOT NULL | - | - | 100 | 参数名称,如最大定时任务数 | 便于后台管理展示 |
| param_value | VARCHAR(255) | NOT NULL | - | - | 255 | 参数值,如 10 | 存储参数的具体值,不同类型格式不同 |
| param_type | TINYINT(1) | NOT NULL | - | - | 1 | 参数类型:1 = 数字,2 = 字符串,3 = 布尔值,4 = 日期 | 用于参数值的格式校验 |
| param_desc | VARCHAR(255) | NULL | NULL | - | 255 | 参数描述,说明参数用途 | 如 "单个用户可创建的最大定时充电任务数" |
| param_group | VARCHAR(50) | NOT NULL | - | 普通索引 | 50 | 参数分组,如设备管理、充电控制 | 便于按模块管理参数 |
| is_system | TINYINT(1) | NOT NULL | 0 | - | 1 | 是否系统参数:0 = 否,1 = 是,不可删除 | 系统核心参数,禁止删除 |
| status | TINYINT(1) | NOT NULL | 1 | 普通索引 | 1 | 参数状态:0 = 禁用,1 = 启用 | 禁用的参数不参与系统运行 |
| create_user_id | INT(11) | NOT NULL | - | 外键 | 11 | 创建人 ID,关联 sys_user.id | 记录参数创建的管理员 |
| create_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 参数创建时间 | 自动赋值,无需手动插入 |
| update_user_id | INT(11) | NULL | NULL | 外键 | 11 | 更新人 ID,关联 sys_user.id | 参数修改后记录操作人 ID |
| update_time | DATETIME | NOT NULL | 系统当前时间 | - | - | 参数更新时间 | 修改参数时自动刷新 |
初始化核心参数示例
| param_code | param_name | param_value | param_type | param_desc | param_group | is_system |
|---|---|---|---|---|---|---|
| MAX_TASK_NUM | 单用户最大定时任务数 | 10 | 1 | 单个用户可创建的最大定时充电任务数量 | 充电控制 | 1 |
| LOGIN_LOCK_TIME | 登录锁定时长 (分钟) | 1440 | 1 | 连续登录失败 5 次后,账号锁定时长,默认 24 小时 | 系统管理 | 1 |
| DATA_REFRESH_TIME | 数据刷新间隔 (秒) | 10 | 1 | 设备实时数据上报间隔时间 | 设备管理 | 1 |
| ALARM_PUSH_DELAY | 告警推送延迟 (秒) | 5 | 1 | 告警触发后延迟推送,避免误报 | 告警管理 | 1 |
| ORDER_EXPIRE_TIME | 订单过期时间 (分钟) | 30 | 1 | 订单创建后未支付的过期时长 | 计费订单 | 1 |
关联关系
- 多对一关联
sys_user表:create_user_id/update_user_id为外键,记录参数操作人
9. 附录
9.1 表关联关系总览
- 核心主表关联
sys_user(用户) ← 多表关联:所有业务表的user_id均关联此表charging_pile(设备) ← 多表关联:所有设备相关表的pile_id均关联此表charge_record(充电记录) ←→charge_order(订单):一对一强关联
- 多对多关联
sys_role(角色) ←→sys_permission(权限):通过sys_role_perm中间表关联
- 一对多关联
charging_pile→pile_protect_param/charge_mode_config/charge_power_control:一对一关联charging_pile→pile_firmware_upgrade/device_alarm/charge_record:一对多关联charge_record→charge_real_time_data:一对多关联charge_order→refund_record:一对多关联