新视频推送接收(未测) app升级 告警 国际短信跟谷歌邮箱接入

This commit is contained in:
yuhaiming
2026-09-19 08:47:04 +08:00
parent e4ef35c795
commit bc1074d194
92 changed files with 5535 additions and 340 deletions

View File

@@ -1,7 +1,7 @@
-- ----------------------------------------------------------------------------
-- 智能飞禽物联平台 · 设备域建表脚本(阶段1 / 迭代 I1)
-- 说明:
-- 1. 6 张设备表 + 8 个字典 + 设备菜单 + 8 个权限字 + 2 个角色及其菜单关联。
-- 1. 7 张设备表 + 8 个字典 + 设备菜单 + 12 个权限字 + 2 个角色及其菜单关联。
-- 2. 严禁出现任何直播字段(stream_url / play_url / live_*)与医疗模板字段。
-- 3. 逻辑删除取值与框架配置一致:0 存在 / 1 删除(common-mybatis.yml: logicDeleteValue=1)。
-- 4. 唯一索引(device_no / imei)叠加逻辑删除,存在「逻辑删除后编号不可复用」的既有约束,
@@ -101,12 +101,17 @@ create table bm_device_alert (
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已处理,一期只读展示)',
status char(1) not null comment '处理状态(0未处理 1已处理)',
handle_by bigint(20) default null comment '处理人(sys_user.user_id,后台账号)',
handle_time datetime default null comment '处理时间',
message_user_id bigint(20) default null comment '告警发生时的APP收件人快照(用于消息补偿)',
alert_time datetime not null comment '告警时间',
del_flag char(1) not null default '0' comment '逻辑删除(0存在 1删除)',
primary key (alert_id),
key idx_device_id (device_id),
key idx_alert_type (alert_type),
key idx_alert_time (alert_time)
key idx_alert_time (alert_time),
key idx_status_time (status, alert_time)
) engine=innodb comment = '设备告警';
-- ============================ 五、OTA 升级包 ============================
@@ -161,7 +166,36 @@ create table bm_ota_task (
key idx_package_id (package_id)
) engine=innodb comment = 'OTA升级任务';
-- ============================ 七、字典类型(8 个) ============================
-- ============================ 七、APP 消息表 ============================
-- 用途:仅承载「设备告警」向 APP 用户的推送副本(一期不做独立消息中心,见开发计划 D8)。
-- 设计取舍:
-- 1. 不复用框架 sys_message —— 该表无「已读」字段,无法支撑 APP 未读角标;
-- 且改框架表违反「ruoyi-* 框架不动、业务只在 ruoyi-device」的项目边界。
-- 2. 与 bm_device_alert 职责分离:alert 是「设备事实」(含处理流程),
-- message 是「推送副本」(含收件人与已读状态),二者不互相替代。
-- 3. 收件人在告警落库那一刻固化(取 bm_device.bind_user_id 快照),
-- 因此设备解绑/换绑后,历史消息仍归属当时的收件人,不会被后来者看到。
drop table if exists bm_app_message;
create table bm_app_message (
message_id bigint(20) not null comment '主键(雪花)',
user_id bigint(20) not null comment '接收用户(sys_user.user_id,APP 用户)',
device_id bigint(20) default null comment '关联设备主键',
device_no varchar(32) default null comment '关联设备编号(冗余,供展示与跳转)',
alert_id bigint(20) default null comment '关联告警主键(bm_device_alert)',
alert_type varchar(32) default null comment '告警类型(offline/low_battery_hood/low_battery_ring)',
alert_level char(1) default null comment '告警级别(0提示 1警告 2严重)',
title varchar(128) not null comment '消息标题',
content varchar(255) default null comment '消息内容',
read_flag char(1) not null default '0' comment '已读标记(0未读 1已读)',
read_time datetime default null comment '已读时间',
create_time datetime not null comment '产生时间',
primary key (message_id),
unique key uk_alert_id (alert_id),
key idx_user_read (user_id, read_flag),
key idx_user_time (user_id, create_time, message_id)
) engine=innodb comment = 'APP 消息(一期仅承载设备告警通知)';
-- ============================ 八、字典类型(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, '头套连接列表');
@@ -171,7 +205,7 @@ insert into sys_dict_type values(1771500000000000006, '升级包状态', 'bm_o
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, '在线');
@@ -204,7 +238,7 @@ insert into sys_dict_data values(1771600000000000021, 1, '绑定', 'bind', 'bm
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, '设备管理目录');
-- 二级菜单
@@ -224,12 +258,18 @@ insert into sys_menu values(1771400000000000004, 'APP用户', 177140000000000000
-- APP 用户按钮(编辑权限字复用:状态变更 / 重置密码 / 解绑设备,口径同 device:ota:add)
insert into sys_menu values(1771400000000000017, '用户查询', 1771400000000000004, 1, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:appuser:query', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
insert into sys_menu values(1771400000000000018, '用户编辑', 1771400000000000004, 2, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:appuser:edit', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
-- 告警记录(后台只读 + 标记处理;告警的「消息推送」面向 APP 用户,见 bm_app_message)
insert into sys_menu values(1771400000000000005, '告警记录', 1771400000000000001, 4, 'alert', 'device/alert/index', '', 'N', 'Y', 'C', '0', '0', 'device:alert:list', 'message', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '告警记录菜单');
-- 告警记录按钮
insert into sys_menu values(1771400000000000019, '告警查询', 1771400000000000005, 1, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:alert:query', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
insert into sys_menu values(1771400000000000020, '告警处理', 1771400000000000005, 2, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:alert:edit', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
insert into sys_menu values(1771400000000000021, '告警删除', 1771400000000000005, 3, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:alert:remove', '#', '', '', 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);
@@ -244,6 +284,11 @@ insert into sys_role_menu values (1771300000000000001, 1771400000000000016);
insert into sys_role_menu values (1771300000000000001, 1771400000000000004);
insert into sys_role_menu values (1771300000000000001, 1771400000000000017);
insert into sys_role_menu values (1771300000000000001, 1771400000000000018);
-- 设备管理员:告警记录(菜单 + 查询 + 处理 + 删除)
insert into sys_role_menu values (1771300000000000001, 1771400000000000005);
insert into sys_role_menu values (1771300000000000001, 1771400000000000019);
insert into sys_role_menu values (1771300000000000001, 1771400000000000020);
insert into sys_role_menu values (1771300000000000001, 1771400000000000021);
-- 审计员:目录 + 列表 + 详情 + 导出 + OTA 列表 + APP 用户(只读)
insert into sys_role_menu values (1771300000000000002, 1771400000000000001);
insert into sys_role_menu values (1771300000000000002, 1771400000000000002);
@@ -253,3 +298,80 @@ insert into sys_role_menu values (1771300000000000002, 1771400000000000015);
-- 审计员:APP 用户菜单 + 查询(不含编辑——审计只读)
insert into sys_role_menu values (1771300000000000002, 1771400000000000004);
insert into sys_role_menu values (1771300000000000002, 1771400000000000017);
-- 审计员:告警记录菜单 + 查询(不含处理与删除——审计只读)
insert into sys_role_menu values (1771300000000000002, 1771400000000000005);
insert into sys_role_menu values (1771300000000000002, 1771400000000000019);
-- ============================ 十三、APP 客户端版本(第 8 张业务表) ============================
-- 用途:后台登记 APP(Android/iOS)版本记录,APP 冷启动经 GET /app/version/latest 检查更新。
-- 口径(与 bm_patch.sql 补丁 7 一致):
-- 1. 版本比较**只用整数构建号 version_code**(int,32 位正整数,人工递增),version_name 仅展示;
-- ⚠️ 禁止时间戳式构建号(int 上界 2147483647,时间戳会溢出)。
-- 2. 唯一键 uk_platform_version_code 不区分逻辑删除(沿用 bm_device.device_no 同口径):
-- 逻辑删除后同平台同构建号不可复用,构建号填错走编辑修正。
-- 3. file_size 用 bigint(对齐 OTA);框架把 Long 序列化为字符串,前端按字符串接收再转 MB。
-- 4. md5 列保留但允许为空(本期不采集,不参与校验)。
drop table if exists bm_app_version;
create table bm_app_version (
version_id bigint(20) not null comment '主键(雪花)',
platform varchar(16) not null comment '平台(android/ios,字典 bm_app_platform)',
version_name varchar(32) not null comment '展示版本号,如 1.0.10(仅展示,不参与比较)',
version_code int(11) not null comment '构建号,32位正整数、单调递增、平台内唯一(唯一比较依据;禁止时间戳式构建号)',
force_update char(1) not null default '0' comment '强制更新(0否 1是;无字典,页面本地映射)',
oss_id bigint(20) default null comment '关联 sys_oss.oss_id(安装包,两平台均上传)',
file_url varchar(500) default null comment '安装包 URL(两平台均上传;冗余自 sys_oss,供 APP 直接下载)',
file_name varchar(255) default null comment '安装包文件名(两平台均上传)',
file_size bigint(20) default null comment '安装包字节数(两平台均上传;框架序列化为字符串,前端取 file.raw.size 提交)',
md5 varchar(64) default null comment '安装包校验值 MD5(预留,本期不填,不参与校验)',
store_url varchar(500) default null comment 'App Store 引导地址(选填)',
changelog varchar(500) default null comment '更新说明(纯文本)',
status char(1) not null default '0' comment '状态(0停用 1启用,字典 bm_app_version_status)',
publish_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 (version_id),
unique key uk_platform_version_code (platform, version_code),
unique key uk_platform_version_name (platform, version_name),
key idx_platform_status (platform, status),
key idx_create_time (create_time)
) engine=innodb comment = 'APP客户端版本(后台维护,APP冷启动检查更新)';
-- ============================ 十四、字典类型(增量 2 个) ============================
insert into sys_dict_type values(1771500000000000009, 'APP平台', 'bm_app_platform', 1761000000000000103, 1761100000000000001, sysdate(), null, null, 'APP平台列表');
insert into sys_dict_type values(1771500000000000010, 'APP版本状态', 'bm_app_version_status', 1761000000000000103, 1761100000000000001, sysdate(), null, null, 'APP版本状态列表');
-- ============================ 十五、字典数据(增量 4 条) ============================
-- APP 平台(强制更新无字典,页面本地映射)
insert into sys_dict_data values(1771600000000000024, 1, '安卓', 'android', 'bm_app_platform', '', 'success', 'Y', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '安卓');
insert into sys_dict_data values(1771600000000000025, 2, 'iOS', 'ios', 'bm_app_platform', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, 'iOS');
-- APP 版本状态
insert into sys_dict_data values(1771600000000000026, 1, '停用', '0', 'bm_app_version_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '停用');
insert into sys_dict_data values(1771600000000000027, 2, '启用', '1', 'bm_app_version_status', '', 'success', 'Y', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '启用');
-- ============================ 十六、菜单 + 权限字(APP版本管理) ============================
-- 二级菜单(挂「设备管理」目录 1771400000000000001,order_num=5)
insert into sys_menu values(1771400000000000006, 'APP版本管理', 1771400000000000001, 5, 'app-version', 'device/appVersion/index', '', 'N', 'Y', 'C', '0', '0', 'device:appversion:list', 'list', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, 'APP版本管理菜单');
-- 按钮
insert into sys_menu values(1771400000000000022, '版本查询', 1771400000000000006, 1, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:appversion:query', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
insert into sys_menu values(1771400000000000023, '版本新增', 1771400000000000006, 2, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:appversion:add', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
insert into sys_menu values(1771400000000000024, '版本修改', 1771400000000000006, 3, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:appversion:edit', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
insert into sys_menu values(1771400000000000025, '版本删除', 1771400000000000006, 4, '', '', '', 'N', 'Y', 'F', '0', '0', 'device:appversion:remove', '#', '', '', 1761000000000000103, 1761100000000000001, sysdate(), null, null, '');
-- ============================ 十七、角色-菜单关联(APP 版本) ============================
-- 设备管理员:菜单 + 全部按钮
insert into sys_role_menu values (1771300000000000001, 1771400000000000006);
insert into sys_role_menu values (1771300000000000001, 1771400000000000022);
insert into sys_role_menu values (1771300000000000001, 1771400000000000023);
insert into sys_role_menu values (1771300000000000001, 1771400000000000024);
insert into sys_role_menu values (1771300000000000001, 1771400000000000025);
-- 设备管理员:补授框架上传权限字 system:oss:upload(menu_id=1761400000000001601 '文件上传',见 ry_vue.sql:318)
-- 只补上传这一条,读/删/改配置属超管职责,不授。
insert into sys_role_menu values (1771300000000000001, 1761400000000001601);
-- 审计员:菜单 + 仅 query(只读)
insert into sys_role_menu values (1771300000000000002, 1771400000000000006);
insert into sys_role_menu values (1771300000000000002, 1771400000000000022);