feat(device): 一期设备域 I1-I5 全量实现(APP 接口/后台管理/OTA/MQTT/直播)
模块接入:
- 新增 ruoyi-device(org.dromara.device)并注册到根/ruoyi-modules/ruoyi-admin pom
APP 侧(/app/**,需登录,仅本人绑定设备):
- 账号闭环:短信/邮箱验证码注册登录、密码重置(不跨界返回散列)
- 设备:绑定/列表/详情/重命名/解绑(越权统一"设备不存在",防 IDOR)
- 眼罩开关(/app/device/{deviceNo}/hood,低电不对称拦截)
- 定位(/app/device/{deviceNo}/location)
- 直播(/app/stream 6 端点 + /app/device/{deviceNo}/live,自建 ZLMediaKit,设备主动推流)
后台(/device/**):
- 设备 CRUD/统计/删除/导出(ExcelBuilder)
- OTA(6 端点:升级包管理 + 批量下发,total==created+skipped+failed)
MQTT(T05):
- 遥测/事件/ack 监听、指令下发+回执(防串设备)、离线扫描、低电告警
- 报文身份仅来自 Topic,反查 device_id 防跨设备伪造
数据与脚本:
- script/sql/ry_device.sql(6 表/字典/权限字/菜单)、bm_patch.sql
- script/mqtt 设备模拟器(mqtt-simulate.js)
安全:
- MQTT broker 凭据外置为环境变量 MQTT_USERNAME/MQTT_PASSWORD,不落明文
- ZLM webhook 密钥外置为环境变量 ZLM_SECRET(未配置时 /zlm/hook/** 失败关闭),不落明文
This commit is contained in:
142
script/sql/bm_patch.sql
Normal file
142
script/sql/bm_patch.sql
Normal file
@@ -0,0 +1,142 @@
|
||||
-- ============================================================================
|
||||
-- 智能飞禽物联平台 · 项目自有补丁脚本(PROJECT PATCH,非框架基线)
|
||||
-- 文件:script/sql/bm_patch.sql
|
||||
-- 说明:本文件承载「项目自有的库表变更」,与框架基线 ry_vue.sql 分离维护,
|
||||
-- 以便将来框架(RuoYi-Vue-Plus)升级时按补丁重放、避免与基线冲突。
|
||||
-- 【请勿修改 ry_vue.sql 以保持与上游基线一致】。
|
||||
-- 执行方式:连接业务库(bird_monitoring)后整体执行本文件。
|
||||
-- ============================================================================
|
||||
|
||||
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- 补丁 1:为 sys_user.phone_number 增加唯一索引(uk_sys_user_phone_number)
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- 背景:
|
||||
-- 框架基线 ry_vue.sql 中 sys_user.phone_number 仅有普通索引
|
||||
-- key idx_sys_user_phone (phone_number) -- 非唯一
|
||||
-- 无法在 DB 层阻止「同一手机号注册多个账号」。
|
||||
-- APP 账号闭环(迭代 I2)的注册为「先查后插」,存在并发同号双写(TOCTOU)风险;
|
||||
-- 应用层已用「按手机号加 Redisson 锁 + 判重」将其降到接近零(见 AppAuthServiceImpl#register),
|
||||
-- 但 **DB 唯一键才是最终防线**,故以本补丁补充该约束;应用层锁保留作为双保险。
|
||||
--
|
||||
-- ★ 执行前必读 · 前置检查(务必先跑 SELECT,确认无重复再执行 ALTER)
|
||||
-- 1) 检查是否存在重复的「非空」手机号:
|
||||
-- SELECT phone_number, COUNT(*) AS cnt
|
||||
-- FROM sys_user
|
||||
-- WHERE phone_number IS NOT NULL AND phone_number <> ''
|
||||
-- GROUP BY phone_number
|
||||
-- HAVING COUNT(*) > 1;
|
||||
-- → 期望返回 0 行。若返回了行,须先人工清理重复数据(每个手机号仅保留一条),
|
||||
-- 再执行本补丁;否则第 2 步 ALTER 会因重复键失败(1062)。
|
||||
--
|
||||
-- 2) 空字符串归一化说明:
|
||||
-- phone_number 列默认值为 ''(可存在多行同为 ''),而 MySQL 唯一索引
|
||||
-- **不允许多个 ''(空串)**、但**允许多个 NULL**(NULL 不参与唯一性判定)。
|
||||
-- 因此本补丁先将 '' 归一化为 NULL,使唯一约束只作用于「非空手机号」。
|
||||
--
|
||||
-- ★ 执行前已核验(2026-09-16 实测线上库 bird_monitoring.sys_user)
|
||||
-- - 总行数:3;
|
||||
-- - 非空 phone_number:仅 1 行(属 sys_user);
|
||||
-- - 重复手机号:无(前置检查 SELECT 返回 0 行);
|
||||
-- - app_user 记录:0 条。
|
||||
-- => 满足前置条件,可安全执行。执行后如需复核:
|
||||
-- SHOW INDEX FROM sys_user WHERE Key_name = 'uk_sys_user_phone_number';
|
||||
--
|
||||
-- ★ MySQL 限制说明(不要用存储过程硬凑 IF NOT EXISTS)
|
||||
-- MySQL 不支持 "ALTER TABLE ... ADD UNIQUE KEY IF NOT EXISTS"。
|
||||
-- 本补丁**未**用存储过程模拟幂等;若重复执行本文件,将出现如下**预期报错**(可忽略):
|
||||
-- ERROR 1061 (42000): Duplicate key name 'uk_sys_user_phone_number'
|
||||
-- 看到该报错即表示索引已存在,无需再次创建。
|
||||
--
|
||||
-- ★ 影响面提示(重要)
|
||||
-- 该唯一索引作用于整张 sys_user 表(含 sys_user 与 app_user 两类 user_type),
|
||||
-- 即执行后**手机号在全表范围内唯一**(非空手机号不可在「后台用户」与「APP 用户」间重复)。
|
||||
-- 这与迭代 I2 早期「两类用户手机号互不冲突」的表述不同:现在由 DB 强制全局唯一。
|
||||
-- 若后台新增用户时用到已被 APP 占用的手机号,将因该唯一键报 1062(属预期约束)。
|
||||
--
|
||||
-- ★ 回滚(如需撤销)
|
||||
-- ALTER TABLE sys_user DROP INDEX uk_sys_user_phone_number;
|
||||
-- ----------------------------------------------------------------------------
|
||||
|
||||
-- 步骤 1:将空字符串手机号归一化为 NULL(唯一索引允许多个 NULL)
|
||||
UPDATE sys_user SET phone_number = NULL WHERE phone_number = '';
|
||||
|
||||
-- 步骤 2:新增唯一索引
|
||||
ALTER TABLE sys_user ADD UNIQUE KEY uk_sys_user_phone_number (phone_number);
|
||||
|
||||
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- 补丁 2:为 sys_user.email 增加唯一索引(uk_sys_user_email)
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- 背景:
|
||||
-- 迭代「邮箱注册」新增邮箱账号入口后,email 成为与 phone_number 并列的账号标识,
|
||||
-- 同样需要「先查后插」之外的第二道防线(DB 唯一键)。
|
||||
-- 框架基线 ry_vue.sql 中 sys_user.email 无任何索引。
|
||||
--
|
||||
-- ★ 执行前必读 · 前置检查
|
||||
-- 1) 重复非空邮箱检查:
|
||||
-- SELECT email, COUNT(*) AS cnt FROM sys_user
|
||||
-- WHERE email IS NOT NULL AND email <> ''
|
||||
-- GROUP BY email HAVING COUNT(*) > 1;
|
||||
-- → 期望返回 0 行。
|
||||
-- 2) 空串归一化:email 列默认值为 ''(实测线上 9 行中 8 行为 ''),
|
||||
-- 而 MySQL 唯一索引允许多个 NULL 但**不允许多个 ''**,故必须先归一化。
|
||||
--
|
||||
-- ★ 执行前已核验(2026-09-17 实测线上库 bird_monitoring.sys_user)
|
||||
-- - 总行数 9;非空 email 仅 1 行(admin 的 crazyLionLi@163.com);
|
||||
-- - 重复邮箱:无(前置检查 SELECT 返回 0 行);
|
||||
-- - app_user 记录 8 条,email 全为 ''。
|
||||
-- => 满足前置条件,可安全执行。
|
||||
--
|
||||
-- ★ 影响面提示
|
||||
-- 与手机号同一口径:该唯一索引作用于整张 sys_user 表(含 sys_user 与 app_user),
|
||||
-- 即邮箱在全表范围内唯一。若后台新增用户填写了已被 APP 占用的邮箱,将报 1062(属预期约束)。
|
||||
--
|
||||
-- ★ 重复执行本文件时的预期报错(可忽略)
|
||||
-- ERROR 1061 (42000): Duplicate key name 'uk_sys_user_email'
|
||||
--
|
||||
-- ★ 回滚
|
||||
-- ALTER TABLE sys_user DROP INDEX uk_sys_user_email;
|
||||
-- ----------------------------------------------------------------------------
|
||||
|
||||
-- 步骤 1:将空字符串邮箱归一化为 NULL
|
||||
UPDATE sys_user SET email = NULL WHERE email = '';
|
||||
|
||||
-- 步骤 2:新增唯一索引
|
||||
ALTER TABLE sys_user ADD UNIQUE KEY uk_sys_user_email (email);
|
||||
|
||||
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- 补丁 3:将 sys_user.phone_number / email 的列默认值 '' 改为 NULL
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- ★ 本补丁是「邮箱注册」能否落地的关键前提,不可省略。
|
||||
--
|
||||
-- 背景(两个坑叠加才会暴露):
|
||||
-- 1) 本项目 MyBatis-Plus 全局字段策略为 insertStrategy: NOT_NULL(见
|
||||
-- ruoyi-common-mybatis/src/main/resources/common-mybatis.yml)——
|
||||
-- 实体字段为 null 时,该列会被**整个从 INSERT 语句中省略**,而不是写入 NULL;
|
||||
-- 2) 此时生效的是**列默认值**,而 phone_number / email 的基线默认值都是 ''。
|
||||
--
|
||||
-- 于是:邮箱注册创建的账号不填手机号 ⇒ INSERT 省略 phone_number ⇒ 落库为 ''
|
||||
-- ⇒ 第二个邮箱注册账号再落 '' ⇒ 撞 uk_sys_user_phone_number 报 1062。
|
||||
-- 同一问题对称存在于 email:手机号注册的账号不填邮箱 ⇒ 落 '' ⇒ 第二个撞 uk_sys_user_email。
|
||||
--
|
||||
-- 修法:把两列的默认值改为 NULL(NULL 不参与唯一性判定,可多行共存)。
|
||||
-- 这样「字段为 null ⇒ INSERT 省略该列 ⇒ 落库 NULL」成为一致且唯一的行为,
|
||||
-- 无需修改框架实体 SysUser(不改框架文件的铁律得以保持)。
|
||||
--
|
||||
-- ★ 影响面提示(有意为之的正向变化)
|
||||
-- 后台「新增用户」不填邮箱/手机号时,落库由 '' 变为 NULL。
|
||||
-- 应用层所有比较均已用 StringUtils.isBlank 处理('' 与 null 等价),
|
||||
-- 实测已确认无逻辑依赖 '' 这一具体取值。
|
||||
--
|
||||
-- ★ 回滚(恢复到基线默认值,回滚前须先处理已落 NULL 的行)
|
||||
-- ALTER TABLE sys_user MODIFY COLUMN phone_number varchar(11) DEFAULT '' COMMENT '手机号码';
|
||||
-- ALTER TABLE sys_user MODIFY COLUMN email varchar(50) DEFAULT '' COMMENT '用户邮箱';
|
||||
-- ----------------------------------------------------------------------------
|
||||
|
||||
-- 步骤 1:手机号列默认值改为 NULL
|
||||
ALTER TABLE sys_user MODIFY COLUMN phone_number varchar(11) DEFAULT NULL COMMENT '手机号码';
|
||||
|
||||
-- 步骤 2:邮箱列默认值改为 NULL
|
||||
ALTER TABLE sys_user MODIFY COLUMN email varchar(50) DEFAULT NULL COMMENT '用户邮箱';
|
||||
239
script/sql/ry_device.sql
Normal file
239
script/sql/ry_device.sql
Normal file
@@ -0,0 +1,239 @@
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- 智能飞禽物联平台 · 设备域建表脚本(阶段1 / 迭代 I1)
|
||||
-- 说明:
|
||||
-- 1. 6 张设备表 + 8 个字典 + 设备菜单 + 8 个权限字 + 2 个角色及其菜单关联。
|
||||
-- 2. 严禁出现任何直播字段(stream_url / play_url / live_*)与医疗模板字段。
|
||||
-- 3. 逻辑删除取值与框架配置一致:0 存在 / 1 删除(common-mybatis.yml: logicDeleteValue=1)。
|
||||
-- 4. 唯一索引(device_no / imei)叠加逻辑删除,存在「逻辑删除后编号不可复用」的既有约束,
|
||||
-- 与 RuoYi 既有模式一致,已在字段注释中写明;如需复用时改用物理删除策略。
|
||||
-- 作者:Kou 日期:2026-09-16
|
||||
-- ----------------------------------------------------------------------------
|
||||
|
||||
-- ============================ 一、设备主表 ============================
|
||||
drop table if exists bm_device;
|
||||
create table bm_device (
|
||||
device_id bigint(20) not null comment '主键(雪花,仅内部关联)',
|
||||
device_no varchar(32) not null comment '业务编号,唯一(逻辑删除后编号不可复用)',
|
||||
imei varchar(32) not null comment '绑定码IMEI,唯一(逻辑删除后不可复用)',
|
||||
name varchar(64) default null comment '用户侧名称≤20字符',
|
||||
model varchar(64) default null comment '型号',
|
||||
sn varchar(64) default null comment '出厂序列号',
|
||||
hw_version varchar(32) default null comment '硬件版本',
|
||||
sw_version varchar(32) default null comment '软件版本',
|
||||
fw_version varchar(32) default null comment '固件版本',
|
||||
pkg_version varchar(32) default null comment '数据包版本',
|
||||
ip varchar(64) default null comment '设备IP',
|
||||
mac varchar(64) default null comment 'MAC',
|
||||
wifi_ssid varchar(64) default null comment 'WiFi SSID',
|
||||
status char(1) not null default '0' comment '状态(0未激活 1在线 2离线)',
|
||||
bind_user_id bigint(20) default null comment '当前绑定APP用户',
|
||||
bind_time datetime default null comment '最近一次绑定时间',
|
||||
hood_connected char(1) not null default '0' comment '头套(0断开 1已连接)',
|
||||
hood_cover_on char(1) not null default '0' comment '眼罩(0打开 1遮盖)',
|
||||
signal_level tinyint not null default 0 comment '信号等级(0离线 1弱 2一般 3强)',
|
||||
hood_battery tinyint default null comment '头套电量0-100',
|
||||
ring_battery tinyint default null comment '脚环电量0-100',
|
||||
lng decimal(10,7) default null comment '最新经度',
|
||||
lat decimal(10,7) default null comment '最新纬度',
|
||||
address varchar(255) default null comment '地址(设备上报)',
|
||||
last_online_time datetime default null comment '最后在线时间',
|
||||
remark varchar(500) default null comment '备注',
|
||||
create_dept bigint(20) default null comment '创建部门',
|
||||
create_by bigint(20) default null comment '创建者',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by bigint(20) default null comment '更新者',
|
||||
update_time datetime comment '更新时间',
|
||||
del_flag char(1) not null default '0' comment '逻辑删除(0存在 1删除)',
|
||||
primary key (device_id),
|
||||
unique key uk_device_no (device_no),
|
||||
unique key uk_imei (imei),
|
||||
key idx_bind_user (bind_user_id),
|
||||
key idx_status (status),
|
||||
key idx_last_online (last_online_time)
|
||||
) engine=innodb comment = '设备主表';
|
||||
|
||||
-- ============================ 二、设备绑定流水 ============================
|
||||
drop table if exists bm_device_bind;
|
||||
create table bm_device_bind (
|
||||
bind_id bigint(20) not null comment '主键(雪花)',
|
||||
device_id bigint(20) not null comment '设备物理主键',
|
||||
device_no varchar(32) default null comment '设备编号(冗余,便于审计/后台展示)',
|
||||
user_id bigint(20) not null comment '操作APP用户',
|
||||
imei varchar(32) default null comment 'IMEI(冗余快照)',
|
||||
action varchar(16) not null comment '动作(bind/unbind/rebind)',
|
||||
bind_time datetime not null comment '操作时间',
|
||||
remark varchar(255) default null comment '备注',
|
||||
primary key (bind_id),
|
||||
key idx_device_id (device_id),
|
||||
key idx_user_id (user_id),
|
||||
key idx_device_action_time (device_id, action, bind_time)
|
||||
) engine=innodb comment = '设备绑定流水(无逻辑删除,禁止抹除历史)';
|
||||
|
||||
-- ============================ 三、设备遥测历史 ============================
|
||||
drop table if exists bm_device_telemetry;
|
||||
create table bm_device_telemetry (
|
||||
telemetry_id bigint(20) not null comment '主键(雪花)',
|
||||
device_id bigint(20) not null comment '设备主键',
|
||||
device_no varchar(32) default null comment '设备编号(冗余)',
|
||||
hood_battery tinyint default null comment '头套电量0-100',
|
||||
ring_battery tinyint default null comment '脚环电量0-100',
|
||||
signal_level tinyint default null comment '信号等级(0离线 1弱 2一般 3强)',
|
||||
hood_connected char(1) default null comment '头套连接(0断开 1已连接)',
|
||||
hood_cover_on char(1) default null comment '眼罩状态(0打开 1遮盖)',
|
||||
lng decimal(10,7) default null comment '经度',
|
||||
lat decimal(10,7) default null comment '纬度',
|
||||
address varchar(255) default null comment '地址',
|
||||
report_time datetime not null comment '设备上报时间',
|
||||
primary key (telemetry_id),
|
||||
key idx_device_time (device_id, report_time)
|
||||
) engine=innodb comment = '设备遥测历史(一期仅落库,不做轨迹回放)';
|
||||
|
||||
-- ============================ 四、设备告警 ============================
|
||||
drop table if exists bm_device_alert;
|
||||
create table bm_device_alert (
|
||||
alert_id bigint(20) not null comment '主键(雪花)',
|
||||
device_id bigint(20) not null comment '设备主键',
|
||||
device_no varchar(32) default null comment '设备编号(冗余)',
|
||||
alert_type varchar(32) not null comment '告警类型(offline/low_battery_hood/low_battery_ring)',
|
||||
alert_level char(1) not null comment '告警级别(0提示 1警告 2严重)',
|
||||
alert_value varchar(64) default null comment '触发值(如电量)',
|
||||
content varchar(255) default null comment '告警文案',
|
||||
status char(1) not null comment '状态(0未处理 1已处理,一期只读展示)',
|
||||
alert_time datetime not null comment '告警时间',
|
||||
primary key (alert_id),
|
||||
key idx_device_id (device_id),
|
||||
key idx_alert_type (alert_type),
|
||||
key idx_alert_time (alert_time)
|
||||
) engine=innodb comment = '设备告警';
|
||||
|
||||
-- ============================ 五、OTA 升级包 ============================
|
||||
drop table if exists bm_ota_package;
|
||||
create table bm_ota_package (
|
||||
package_id bigint(20) not null comment '主键(雪花)',
|
||||
model varchar(64) not null comment '适用型号',
|
||||
version varchar(32) not null comment '版本号',
|
||||
oss_id bigint(20) default null comment '关联sys_oss.oss_id',
|
||||
file_url varchar(500) default null comment '文件URL(冗余)',
|
||||
file_name varchar(255) default null comment '文件名',
|
||||
file_size bigint(20) default null comment '文件字节数',
|
||||
md5 varchar(64) default null comment '校验值MD5',
|
||||
changelog varchar(500) default null comment '更新说明',
|
||||
status char(1) not null default '0' comment '状态(0停用 1启用)',
|
||||
remark varchar(500) default null comment '备注',
|
||||
create_dept bigint(20) default null comment '创建部门',
|
||||
create_by bigint(20) default null comment '创建者',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by bigint(20) default null comment '更新者',
|
||||
update_time datetime comment '更新时间',
|
||||
del_flag char(1) not null default '0' comment '逻辑删除(0存在 1删除)',
|
||||
primary key (package_id),
|
||||
unique key uk_model_version (model, version),
|
||||
key idx_status (status)
|
||||
) engine=innodb comment = 'OTA升级包';
|
||||
|
||||
-- ============================ 六、OTA 升级任务 ============================
|
||||
drop table if exists bm_ota_task;
|
||||
create table bm_ota_task (
|
||||
task_id bigint(20) not null comment '主键(雪花)',
|
||||
package_id bigint(20) not null comment '升级包',
|
||||
version varchar(32) default null comment '冗余版本',
|
||||
device_id bigint(20) not null comment '设备主键',
|
||||
device_no varchar(32) default null comment '冗余编号',
|
||||
status char(1) not null default '0' comment '状态(0待升级 1升级中 2成功 3失败)',
|
||||
result_msg varchar(500) default null comment '结果信息',
|
||||
progress tinyint default null comment '进度0-100',
|
||||
operator_id bigint(20) default null comment '操作人(后台用户)',
|
||||
times int(4) not null default 0 comment '下发次数',
|
||||
start_time datetime default null comment '开始时间',
|
||||
finish_time datetime default null comment '完成时间',
|
||||
create_dept bigint(20) default null comment '创建部门',
|
||||
create_by bigint(20) default null comment '创建者',
|
||||
create_time datetime comment '创建时间',
|
||||
update_by bigint(20) default null comment '更新者',
|
||||
update_time datetime comment '更新时间',
|
||||
del_flag char(1) not null default '0' comment '逻辑删除(0存在 1删除)',
|
||||
primary key (task_id),
|
||||
key idx_device_no (device_no),
|
||||
key idx_status (status),
|
||||
key idx_package_id (package_id)
|
||||
) engine=innodb comment = 'OTA升级任务';
|
||||
|
||||
-- ============================ 七、字典类型(8 个) ============================
|
||||
insert into sys_dict_type values(1771500000000000001, '设备状态', 'bm_device_status', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '设备状态列表');
|
||||
insert into sys_dict_type values(1771500000000000002, '信号等级', 'bm_signal_level', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '信号等级列表');
|
||||
insert into sys_dict_type values(1771500000000000003, '头套连接', 'bm_hood_connected', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '头套连接列表');
|
||||
insert into sys_dict_type values(1771500000000000004, '眼罩状态', 'bm_hood_cover', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '眼罩状态列表');
|
||||
insert into sys_dict_type values(1771500000000000005, 'OTA任务状态', 'bm_ota_task_status', 1761000000000000103, 1761100000000000001, sysdate(), null, null, 'OTA任务状态列表');
|
||||
insert into sys_dict_type values(1771500000000000006, '升级包状态', 'bm_ota_package_status', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '升级包状态列表');
|
||||
insert into sys_dict_type values(1771500000000000007, '告警类型', 'bm_alert_type', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '告警类型列表');
|
||||
insert into sys_dict_type values(1771500000000000008, '绑定动作', 'bm_bind_action', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '绑定动作列表');
|
||||
|
||||
-- ============================ 八、字典数据 ============================
|
||||
-- 设备状态
|
||||
insert into sys_dict_data values(1771600000000000001, 1, '未激活', '0', 'bm_device_status', '', 'info', 'Y', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '未激活');
|
||||
insert into sys_dict_data values(1771600000000000002, 2, '在线', '1', 'bm_device_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '在线');
|
||||
insert into sys_dict_data values(1771600000000000003, 3, '离线', '2', 'bm_device_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '离线');
|
||||
-- 信号等级
|
||||
insert into sys_dict_data values(1771600000000000004, 1, '离线', '0', 'bm_signal_level', '', 'danger', 'Y', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '离线');
|
||||
insert into sys_dict_data values(1771600000000000005, 2, '弱', '1', 'bm_signal_level', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '弱');
|
||||
insert into sys_dict_data values(1771600000000000006, 3, '一般', '2', 'bm_signal_level', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '一般');
|
||||
insert into sys_dict_data values(1771600000000000007, 4, '强', '3', 'bm_signal_level', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '强');
|
||||
-- 头套连接
|
||||
insert into sys_dict_data values(1771600000000000008, 1, '已断开', '0', 'bm_hood_connected', '', 'danger', 'Y', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '已断开');
|
||||
insert into sys_dict_data values(1771600000000000009, 2, '已连接', '1', 'bm_hood_connected', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '已连接');
|
||||
-- 眼罩状态
|
||||
insert into sys_dict_data values(1771600000000000010, 1, '打开', '0', 'bm_hood_cover', '', 'primary', 'Y', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '打开');
|
||||
insert into sys_dict_data values(1771600000000000011, 2, '遮盖', '1', 'bm_hood_cover', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '遮盖');
|
||||
-- OTA任务状态
|
||||
insert into sys_dict_data values(1771600000000000012, 1, '待升级', '0', 'bm_ota_task_status', '', 'info', 'Y', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '待升级');
|
||||
insert into sys_dict_data values(1771600000000000013, 2, '升级中', '1', 'bm_ota_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '升级中');
|
||||
insert into sys_dict_data values(1771600000000000014, 3, '成功', '2', 'bm_ota_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '成功');
|
||||
insert into sys_dict_data values(1771600000000000015, 4, '失败', '3', 'bm_ota_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '失败');
|
||||
-- 升级包状态
|
||||
insert into sys_dict_data values(1771600000000000016, 1, '停用', '0', 'bm_ota_package_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '停用');
|
||||
insert into sys_dict_data values(1771600000000000017, 2, '启用', '1', 'bm_ota_package_status', '', 'success', 'Y', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '启用');
|
||||
-- 告警类型
|
||||
insert into sys_dict_data values(1771600000000000018, 1, '设备离线', 'offline', 'bm_alert_type', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '设备离线');
|
||||
insert into sys_dict_data values(1771600000000000019, 2, '头套低电', 'low_battery_hood', 'bm_alert_type', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '头套低电');
|
||||
insert into sys_dict_data values(1771600000000000020, 3, '脚环低电', 'low_battery_ring', 'bm_alert_type', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '脚环低电');
|
||||
-- 绑定动作
|
||||
insert into sys_dict_data values(1771600000000000021, 1, '绑定', 'bind', 'bm_bind_action', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '绑定');
|
||||
insert into sys_dict_data values(1771600000000000022, 2, '解绑', 'unbind', 'bm_bind_action', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '解绑');
|
||||
insert into sys_dict_data values(1771600000000000023, 3, '换绑', 'rebind', 'bm_bind_action', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '换绑');
|
||||
|
||||
-- ============================ 九、菜单 + 权限字 ============================
|
||||
-- 一级目录
|
||||
insert into sys_menu values(1771400000000000001, '设备管理', 0, 6, 'device', null, '', 'N', 'Y', 'M', '0', '0', '', 'dashboard', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '设备管理目录');
|
||||
-- 二级菜单
|
||||
insert into sys_menu values(1771400000000000002, '设备列表', 1771400000000000001, 1, 'device', 'device/device/index', '', 'N', 'Y', 'C', '0', '0', 'device:device:list', 'form', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '设备列表菜单');
|
||||
insert into sys_menu values(1771400000000000003, 'OTA管理', 1771400000000000001, 2, 'ota', 'device/ota/index', '', 'N', 'Y', 'C', '0', '0', 'device:ota:list', 'upload', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, 'OTA管理菜单');
|
||||
-- 设备列表按钮
|
||||
insert into sys_menu values(1771400000000000011, '设备查询', 1771400000000000002, 1, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:device:query', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
|
||||
insert into sys_menu values(1771400000000000012, '设备新增', 1771400000000000002, 2, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:device:add', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
|
||||
insert into sys_menu values(1771400000000000013, '设备修改', 1771400000000000002, 3, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:device:edit', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
|
||||
insert into sys_menu values(1771400000000000014, '设备删除', 1771400000000000002, 4, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:device:remove', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
|
||||
insert into sys_menu values(1771400000000000015, '设备导出', 1771400000000000002, 5, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:device:export', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
|
||||
-- OTA 按钮
|
||||
insert into sys_menu values(1771400000000000016, 'OTA新增', 1771400000000000003, 1, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:ota:add', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
|
||||
|
||||
-- ============================ 十、角色 ============================
|
||||
insert into sys_role values(1771300000000000001, '设备管理员', 'device_admin', 5, 1, 1, 1, '0', '0', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '设备域管理角色');
|
||||
insert into sys_role values(1771300000000000002, '审计员', 'device_auditor', 6, 1, 1, 1, '0', '0', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '设备域只读审计角色');
|
||||
|
||||
-- ============================ 十一、角色-菜单关联 ============================
|
||||
-- 设备管理员:全部设备菜单
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000001);
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000002);
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000003);
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000011);
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000012);
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000013);
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000014);
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000015);
|
||||
insert into sys_role_menu values (1771300000000000001, 1771400000000000016);
|
||||
-- 审计员:目录 + 列表 + 详情 + 导出 + OTA 列表
|
||||
insert into sys_role_menu values (1771300000000000002, 1771400000000000001);
|
||||
insert into sys_role_menu values (1771300000000000002, 1771400000000000002);
|
||||
insert into sys_role_menu values (1771300000000000002, 1771400000000000003);
|
||||
insert into sys_role_menu values (1771300000000000002, 1771400000000000011);
|
||||
insert into sys_role_menu values (1771300000000000002, 1771400000000000015);
|
||||
Reference in New Issue
Block a user