From fbfe6c30f93cbb72ddcf90fb68b01884a1207421 Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Tue, 2 Dec 2025 14:09:31 +0800 Subject: [PATCH] feat: ready to reply --- .../src/main/resources/application-prod.yml | 16 +- script/sql/DATABASE-INSTALL-GUIDE.md | 366 ++++++++++++++++++ script/sql/ar-inspection-tables-rollback.sql | 43 ++ script/sql/ar-inspection-tables.sql | 334 ++++++++++++++++ 4 files changed, 751 insertions(+), 8 deletions(-) create mode 100644 script/sql/DATABASE-INSTALL-GUIDE.md create mode 100644 script/sql/ar-inspection-tables-rollback.sql create mode 100644 script/sql/ar-inspection-tables.sql diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index d77ddf5..d5c00e6 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -4,7 +4,7 @@ spring.servlet.multipart.location: /ruoyi/server/temp --- # 监控中心配置 spring.boot.admin.client: # 增加客户端开关 - enabled: true + enabled: false url: http://localhost:9090/admin instance: service-host-type: IP @@ -16,7 +16,7 @@ spring.boot.admin.client: --- # snail-job 配置 snail-job: - enabled: true + enabled: false # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 group: "ruoyi_group" # SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config`表 @@ -50,9 +50,9 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - username: root - password: root + url: jdbc:mysql://1Panel-mysql-TAXz:3306/ari?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: ari + password: fhWpsBYNxZfdAEph # # 从库数据源 # slave: # lazy: true @@ -99,13 +99,13 @@ spring: spring.data: redis: # 地址 - host: localhost + host: 1Panel-redis-HCyW # 端口,默认为6379 port: 6379 # 数据库索引 - database: 0 + database: 1 # redis 密码必须配置 - password: ruoyi123 + password: redis_X7Ehme # 连接超时时间 timeout: 10s # 是否开启ssl diff --git a/script/sql/DATABASE-INSTALL-GUIDE.md b/script/sql/DATABASE-INSTALL-GUIDE.md new file mode 100644 index 0000000..3355cfe --- /dev/null +++ b/script/sql/DATABASE-INSTALL-GUIDE.md @@ -0,0 +1,366 @@ +# AR智能巡检平台 - 数据库安装指南 + +## 文件说明 + +本目录包含以下 SQL 文件: + +### 数据库表结构文件 +- **ar-inspection-tables.sql** - AR巡检模块数据库表结构(8个业务表) +- **ar-inspection-tables-rollback.sql** - 数据库表回滚脚本(删除所有巡检表) + +### 菜单权限文件 +- **ar-inspection-menu.sql** - 菜单和权限初始化SQL(49条权限配置) +- **ar-inspection-menu-rollback.sql** - 菜单权限回滚SQL + +## 数据库表清单 + +| 序号 | 表名 | 说明 | 用途 | +|------|------|------|------| +| 1 | ar_device | AR设备管理表 | 管理AR眼镜等设备信息 | +| 2 | ar_region | 巡检区域管理表 | 管理巡检区域划分 | +| 3 | ar_point | 巡检点位管理表 | 管理具体巡检点位 | +| 4 | ar_task | 巡检任务模板表 | 定义巡检任务模板 | +| 5 | ar_step | 巡检步骤表 | 定义任务的执行步骤(支持树形结构) | +| 6 | ar_step_media | 步骤媒体文件表 | 存储步骤相关的图片/视频/音频 | +| 7 | ar_execution | 任务执行记录表 | 记录任务的执行情况 | +| 8 | ar_step_record | 步骤执行记录表 | 记录每个步骤的执行详情 | + +## 表关系图 + +``` +ar_device (设备) + └─> ar_execution (执行记录) + +ar_region (区域) + ├─> ar_point (点位) + ├─> ar_task (任务模板) + └─> ar_execution (执行记录) + +ar_point (点位) + └─> ar_step (巡检步骤) + +ar_task (任务模板) + ├─> ar_step (巡检步骤) + └─> ar_execution (执行记录) + +ar_step (巡检步骤) + ├─> ar_step (父子关系-树形结构) + └─> ar_step_record (步骤记录) + +ar_execution (执行记录) + └─> ar_step_record (步骤记录) + +ar_step_record (步骤记录) + └─> ar_step_media (步骤媒体) +``` + +## 安装步骤 + +### 第一步: 创建数据库表 + +根据你的环境选择以下任一方式执行: + +#### 方式1: 命令行导入 + +```bash +# 进入MySQL +mysql -u root -p + +# 选择数据库(请根据实际情况修改数据库名) +use ry-vue; + +# 导入表结构 +source /path/to/ar-inspection/script/sql/ar-inspection-tables.sql; + +# 验证表是否创建成功 +show tables like 'ar_%'; + +# 查看表结构(以ar_device为例) +desc ar_device; + +# 退出MySQL +exit; +``` + +#### 方式2: 直接执行命令 + +```bash +# 一条命令完成导入 +mysql -u root -p -D ry-vue < /path/to/ar-inspection/script/sql/ar-inspection-tables.sql +``` + +#### 方式3: 使用 Navicat/DBeaver/DataGrip 等 GUI 工具 + +1. 打开工具并连接到数据库 +2. 选择数据库 `ry-vue` +3. 打开 SQL 文件: `ar-inspection-tables.sql` +4. 点击"运行"或"执行"按钮 +5. 验证表是否创建成功 + +### 第二步: 导入菜单权限数据 + +```bash +# 方式1: 命令行 +mysql -u root -p -D ry-vue < /path/to/ar-inspection/script/sql/ar-inspection-menu.sql + +# 方式2: MySQL客户端 +mysql -u root -p +use ry-vue; +source /path/to/ar-inspection/script/sql/ar-inspection-menu.sql; + +# 验证菜单是否导入成功 +SELECT menu_id, menu_name, parent_id, menu_type, perms +FROM sys_menu +WHERE menu_id >= 2000 AND menu_id < 2200 +ORDER BY menu_id; +``` + +### 第三步: 分配权限给角色 + +1. 登录系统管理后台 (http://localhost:8080 或你的实际地址) +2. 进入 **系统管理 > 角色管理** +3. 选择需要授权的角色(如"管理员"),点击"修改" +4. 在菜单权限中勾选 **"AR巡检"** 及其子菜单 +5. 点击"确定"保存设置 + +### 第四步: 验证安装 + +```bash +# 验证所有表是否创建成功 +mysql -u root -p -D ry-vue -e "SHOW TABLES LIKE 'ar_%';" + +# 验证菜单权限是否导入成功 +mysql -u root -p -D ry-vue -e "SELECT COUNT(*) as menu_count FROM sys_menu WHERE menu_id >= 2000 AND menu_id < 2200;" +# 应该返回 49 条记录 + +# 验证表结构(查看ar_device表为例) +mysql -u root -p -D ry-vue -e "DESC ar_device;" +``` + +## 回滚操作 + +如果需要删除所有巡检模块的表和菜单权限,按以下顺序执行: + +### 删除菜单权限 + +```bash +mysql -u root -p -D ry-vue < /path/to/ar-inspection/script/sql/ar-inspection-menu-rollback.sql +``` + +### 删除数据库表 + +```bash +mysql -u root -p -D ry-vue < /path/to/ar-inspection/script/sql/ar-inspection-tables-rollback.sql +``` + +**警告**: 回滚操作会永久删除所有表及其数据,请在执行前确保已备份重要数据! + +## 技术特性 + +### 1. 多租户支持 +- 所有表包含 `tenant_id` 字段 +- 默认租户ID为 `000000` +- 支持数据隔离,不同租户数据互不干扰 + +### 2. 逻辑删除 +- 所有表包含 `del_flag` 字段 +- `0` = 存在, `1` = 已删除 +- 删除操作不会物理删除数据,仅标记为已删除 + +### 3. 审计字段 +所有表包含以下审计字段: +- `create_dept` - 创建部门 +- `create_by` - 创建者 +- `create_time` - 创建时间 +- `update_by` - 更新者 +- `update_time` - 更新时间 + +### 4. 主键策略 +- 使用雪花ID算法(ASSIGN_ID) +- 由应用程序生成,不使用数据库自增 +- 64位长整型,分布式友好 + +### 5. JSON字段支持 +以下表包含JSON格式字段: +- `ar_region.region_data` - 区域业务数据 +- `ar_point.position_data` - 点位坐标等数据 +- `ar_step.ai_data` - AI配置数据 +- `ar_step_record.ai_result` - AI识别结果 + +JSON字段由 MyBatis-Plus 的 `JacksonTypeHandler` 自动处理。 + +### 6. 树形结构支持 +`ar_step` 表支持树形结构: +- `parent_id` - 父步骤ID(0为顶级) +- `ancestors` - 祖级列表(如: 0,1,2) +- `is_leaf` - 是否叶子节点 + +### 7. 索引优化 +已根据常见查询场景配置索引: +- 主键索引 (PRIMARY KEY) +- 唯一索引 (UNIQUE KEY) - 防止重复数据 +- 普通索引 (KEY) - 加速查询 + +## 数据字典 + +### 设备状态 (ar_device.status) +- `0` - 启用 +- `1` - 停用 + +### 区域状态 (ar_region.status) +- `0` - 正常 +- `1` - 停用 + +### 任务状态 (ar_task.status) +- `0` - 正常 +- `1` - 停用 + +### 执行状态 (ar_execution.status) +- `pending` - 待执行 +- `in_progress` - 执行中 +- `completed` - 已完成 +- `cancelled` - 已取消 + +### 步骤记录状态 (ar_step_record.status) +- `pending` - 待执行 +- `completed` - 已完成 +- `skipped` - 已跳过 + +### 媒体类型 (ar_step_media.media_type) +- `image` - 图片 +- `video` - 视频 +- `audio` - 音频 + +### Yes/No 标志 +- `0` - 否/No +- `1` - 是/Yes + +适用于以下字段: +- `need_voice_read` - 需要语音朗读 +- `need_voice_rephrase` - 需要用户复述 +- `need_voice_confirm` - 需要确认 +- `need_ai` - 需要AI识别 +- `is_operation` - 是否操作步骤 +- `is_leaf` - 是否叶子节点 +- `is_done` - 是否完成 + +## 注意事项 + +### 1. 数据库版本要求 +- **MySQL 8.0+** (推荐 8.0.28 或更高版本) +- 字符集: `utf8mb4` +- 排序规则: `utf8mb4_unicode_ci` + +### 2. 执行顺序 +必须按以下顺序执行: +1. 先创建表结构 (`ar-inspection-tables.sql`) +2. 再导入菜单权限 (`ar-inspection-menu.sql`) + +回滚时按相反顺序: +1. 先删除菜单权限 (`ar-inspection-menu-rollback.sql`) +2. 再删除表结构 (`ar-inspection-tables-rollback.sql`) + +### 3. 数据库名称 +默认数据库名为 `ry-vue`,如果你的数据库名称不同,请在执行前修改: +```bash +# 使用你的实际数据库名 +use your_database_name; +``` + +### 4. 权限要求 +执行SQL的数据库用户需要以下权限: +- CREATE - 创建表 +- DROP - 删除表 +- INSERT - 插入数据(菜单权限) +- ALTER - 修改表结构 + +### 5. 备份建议 +在生产环境执行前,强烈建议: +1. 完整备份现有数据库 +2. 先在测试环境验证 +3. 选择低峰期执行 + +备份命令: +```bash +# 备份整个数据库 +mysqldump -u root -p ry-vue > backup_$(date +%Y%m%d_%H%M%S).sql + +# 仅备份巡检模块表 +mysqldump -u root -p ry-vue ar_device ar_region ar_point ar_task ar_step ar_step_media ar_execution ar_step_record > ar_inspection_backup_$(date +%Y%m%d_%H%M%S).sql +``` + +### 6. 索引维护 +大数据量情况下建议定期优化索引: +```sql +-- 分析表 +ANALYZE TABLE ar_device, ar_region, ar_point, ar_task, ar_step, ar_step_media, ar_execution, ar_step_record; + +-- 优化表 +OPTIMIZE TABLE ar_device, ar_region, ar_point, ar_task, ar_step, ar_step_media, ar_execution, ar_step_record; +``` + +## 示例数据 + +SQL文件中已包含示例数据(默认注释),如需使用可取消注释: + +```sql +-- 设备示例数据 +INSERT INTO ar_device VALUES(1, '000000', 'AR眼镜-001', 'DEV001', 'HoloLens 2', '0', 'AR智能眼镜设备', '0', 103, 1, sysdate(), null, null); + +-- 区域示例数据 +INSERT INTO ar_region VALUES(1, '000000', '主控室', 'REGION001', null, '0', '电厂主控室区域', '0', 103, 1, sysdate(), null, null); + +-- 点位示例数据 +INSERT INTO ar_point VALUES(1, '000000', 1, '主控台', 'POINT001', null, '主控台点位', '0', 103, 1, sysdate(), null, null); + +-- 任务模板示例数据 +INSERT INTO ar_task VALUES(1, '000000', '日常巡检任务', 'TASK001', 1, 'daily', '0', '每日例行巡检任务', '0', 103, 1, sysdate(), null, null); +``` + +## 故障排查 + +### 问题1: 表已存在错误 +``` +ERROR 1050 (42S01): Table 'ar_device' already exists +``` + +**解决方案**: +1. 先执行回滚脚本删除旧表 +2. 或手动删除冲突的表 +3. 再重新执行创建脚本 + +### 问题2: 权限不足错误 +``` +ERROR 1142 (42000): CREATE command denied to user +``` + +**解决方案**: 使用具有足够权限的用户(如root)执行,或联系数据库管理员授予权限。 + +### 问题3: 菜单ID冲突 +``` +ERROR 1062 (23000): Duplicate entry '2000' for key 'PRIMARY' +``` + +**解决方案**: +1. 先执行菜单回滚脚本 +2. 或手动删除冲突的菜单 +3. 再重新执行菜单导入脚本 + +### 问题4: 字符集不匹配 +``` +ERROR 1115 (42000): Unknown character set: 'utf8mb4' +``` + +**解决方案**: 升级MySQL到5.5.3或更高版本,或修改SQL文件中的字符集为utf8。 + +## 技术支持 + +如有问题,请通过以下方式获取帮助: + +1. 查看项目文档: `CLAUDE.md` 和 `AR-INSPECTION-SETUP.md` +2. 提交 Issue 到项目仓库 +3. 联系开发团队 + +## 更新日志 + +- **2025-01-13**: 初始版本,创建8个业务表和49条权限配置 diff --git a/script/sql/ar-inspection-tables-rollback.sql b/script/sql/ar-inspection-tables-rollback.sql new file mode 100644 index 0000000..477504c --- /dev/null +++ b/script/sql/ar-inspection-tables-rollback.sql @@ -0,0 +1,43 @@ +-- ---------------------------- +-- AR智能巡检平台 - 数据库表回滚SQL +-- 用于删除所有巡检模块相关表 +-- 创建日期: 2025-01-13 +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- 删除所有AR巡检模块表 +-- 注意: 此操作会永久删除表及其数据,请谨慎执行! +-- ---------------------------- + +DROP TABLE IF EXISTS `ar_step_media`; +DROP TABLE IF EXISTS `ar_step_record`; +DROP TABLE IF EXISTS `ar_execution`; +DROP TABLE IF EXISTS `ar_step`; +DROP TABLE IF EXISTS `ar_task`; +DROP TABLE IF EXISTS `ar_point`; +DROP TABLE IF EXISTS `ar_region`; +DROP TABLE IF EXISTS `ar_device`; + +SET FOREIGN_KEY_CHECKS = 1; + +-- ---------------------------- +-- 回滚完成 +-- ---------------------------- +-- 已删除以下8个表: +-- 1. ar_device - AR设备管理表 +-- 2. ar_region - 巡检区域管理表 +-- 3. ar_point - 巡检点位管理表 +-- 4. ar_task - 巡检任务模板表 +-- 5. ar_step - 巡检步骤表 +-- 6. ar_step_media - 步骤媒体文件表 +-- 7. ar_execution - 任务执行记录表 +-- 8. ar_step_record - 步骤执行记录表 +-- ---------------------------- + +-- 执行方式: +-- mysql -u root -p -D ry-vue < /path/to/ar-inspection-tables-rollback.sql +-- 或 +-- mysql> use ry-vue; +-- mysql> source /path/to/ar-inspection-tables-rollback.sql; diff --git a/script/sql/ar-inspection-tables.sql b/script/sql/ar-inspection-tables.sql new file mode 100644 index 0000000..03561ea --- /dev/null +++ b/script/sql/ar-inspection-tables.sql @@ -0,0 +1,334 @@ +-- ---------------------------- +-- AR智能巡检平台 - 数据库表结构SQL +-- 适用于 MySQL 8.0+ +-- 创建日期: 2025-01-13 +-- ---------------------------- + +-- 设置字符集和排序规则 +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- 表1: AR设备管理表 +-- ---------------------------- +DROP TABLE IF EXISTS `ar_device`; +CREATE TABLE `ar_device` ( + `id` bigint(20) NOT NULL COMMENT '设备ID', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `device_name` varchar(100) NOT NULL COMMENT '设备名称', + `device_no` varchar(50) NOT NULL COMMENT '设备编号', + `device_model` varchar(100) DEFAULT NULL COMMENT '设备型号', + `status` char(1) DEFAULT '0' COMMENT '状态(0启用 1停用)', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_device_no` (`device_no`, `tenant_id`), + KEY `idx_tenant_id` (`tenant_id`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AR设备管理表'; + +-- ---------------------------- +-- 表2: 巡检区域管理表 +-- ---------------------------- +DROP TABLE IF EXISTS `ar_region`; +CREATE TABLE `ar_region` ( + `id` bigint(20) NOT NULL COMMENT '区域ID', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `region_name` varchar(100) NOT NULL COMMENT '区域名称', + `region_code` varchar(50) NOT NULL COMMENT '区域编码', + `region_data` text DEFAULT NULL COMMENT '区域业务数据(JSON格式,预留)', + `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_region_code` (`region_code`, `tenant_id`), + KEY `idx_tenant_id` (`tenant_id`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检区域管理表'; + +-- ---------------------------- +-- 表3: 巡检点位管理表 +-- ---------------------------- +DROP TABLE IF EXISTS `ar_point`; +CREATE TABLE `ar_point` ( + `id` bigint(20) NOT NULL COMMENT '点位ID', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `region_id` bigint(20) NOT NULL COMMENT '所属区域ID', + `point_name` varchar(100) NOT NULL COMMENT '点位名称', + `point_code` varchar(50) NOT NULL COMMENT '点位编码', + `position_data` text DEFAULT NULL COMMENT '点位业务数据(JSON格式,包含坐标、预设等)', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_point_code` (`point_code`, `tenant_id`), + KEY `idx_region_id` (`region_id`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检点位管理表'; + +-- ---------------------------- +-- 表4: 巡检任务模板表 +-- ---------------------------- +DROP TABLE IF EXISTS `ar_task`; +CREATE TABLE `ar_task` ( + `id` bigint(20) NOT NULL COMMENT '任务ID', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `task_name` varchar(100) NOT NULL COMMENT '任务名称', + `task_code` varchar(50) NOT NULL COMMENT '任务编码', + `region_id` bigint(20) DEFAULT NULL COMMENT '关联区域ID', + `task_type` varchar(50) DEFAULT NULL COMMENT '任务类型', + `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_task_code` (`task_code`, `tenant_id`), + KEY `idx_region_id` (`region_id`), + KEY `idx_tenant_id` (`tenant_id`), + KEY `idx_task_type` (`task_type`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检任务模板表'; + +-- ---------------------------- +-- 表5: 巡检步骤表(支持树形结构) +-- ---------------------------- +DROP TABLE IF EXISTS `ar_step`; +CREATE TABLE `ar_step` ( + `id` bigint(20) NOT NULL COMMENT '步骤ID', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `task_id` bigint(20) NOT NULL COMMENT '所属任务ID', + `parent_id` bigint(20) DEFAULT 0 COMMENT '父步骤ID(0为顶级)', + `ancestors` varchar(500) DEFAULT '' COMMENT '祖级列表', + `step_name` varchar(100) NOT NULL COMMENT '步骤名称', + `step_content` text DEFAULT NULL COMMENT '步骤内容描述', + `content_voice` varchar(500) DEFAULT NULL COMMENT '步骤语音文本', + `order_num` int(11) DEFAULT 0 COMMENT '排序号', + `point_id` bigint(20) DEFAULT NULL COMMENT '关联点位ID', + `need_voice_read` char(1) DEFAULT '0' COMMENT '需要语音朗读(0否 1是)', + `need_voice_rephrase` char(1) DEFAULT '0' COMMENT '需要用户复述(0否 1是)', + `rephrase_content` text DEFAULT NULL COMMENT '复述提示文本', + `rephrase_voice` varchar(500) DEFAULT NULL COMMENT '复述语音文本', + `need_voice_confirm` char(1) DEFAULT '0' COMMENT '需要确认(0否 1是)', + `confirm_content` text DEFAULT NULL COMMENT '确认提示文本', + `confirm_voice` varchar(500) DEFAULT NULL COMMENT '确认语音文本', + `confirm_word` varchar(100) DEFAULT NULL COMMENT '确认词', + `need_ai` char(1) DEFAULT '0' COMMENT '需要AI识别(0否 1是)', + `ai_target_name` varchar(100) DEFAULT NULL COMMENT 'AI目标名称', + `ai_data` text DEFAULT NULL COMMENT 'AI配置数据(JSON格式,预留)', + `is_operation` char(1) DEFAULT '0' COMMENT '是否操作步骤(0否 1是)', + `is_leaf` char(1) DEFAULT '1' COMMENT '是否叶子节点(0否 1是)', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_task_id` (`task_id`), + KEY `idx_parent_id` (`parent_id`), + KEY `idx_point_id` (`point_id`), + KEY `idx_tenant_id` (`tenant_id`), + KEY `idx_order_num` (`order_num`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检步骤表(支持树形结构)'; + +-- ---------------------------- +-- 表6: 步骤媒体文件表 +-- ---------------------------- +DROP TABLE IF EXISTS `ar_step_media`; +CREATE TABLE `ar_step_media` ( + `id` bigint(20) NOT NULL COMMENT '媒体ID', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `step_record_id` bigint(20) NOT NULL COMMENT '步骤记录ID', + `media_type` varchar(50) NOT NULL COMMENT '媒体类型(image/video/audio)', + `file_url` varchar(500) NOT NULL COMMENT '文件URL', + `file_name` varchar(200) DEFAULT NULL COMMENT '文件名称', + `file_size` bigint(20) DEFAULT NULL COMMENT '文件大小(字节)', + `upload_time` datetime DEFAULT NULL COMMENT '上传时间', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_step_record_id` (`step_record_id`), + KEY `idx_media_type` (`media_type`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='步骤媒体文件表'; + +-- ---------------------------- +-- 表7: 任务执行记录表 +-- ---------------------------- +DROP TABLE IF EXISTS `ar_execution`; +CREATE TABLE `ar_execution` ( + `id` bigint(20) NOT NULL COMMENT '执行ID', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `task_id` bigint(20) NOT NULL COMMENT '任务模板ID', + `execution_code` varchar(50) NOT NULL COMMENT '执行编号', + `region_id` bigint(20) DEFAULT NULL COMMENT '区域ID', + `device_id` bigint(20) DEFAULT NULL COMMENT '使用设备ID', + `operator_id` bigint(20) DEFAULT NULL COMMENT '操作人ID', + `operator_name` varchar(50) DEFAULT NULL COMMENT '操作人姓名', + `custodian_id` bigint(20) DEFAULT NULL COMMENT '监护人ID', + `custodian_name` varchar(50) DEFAULT NULL COMMENT '监护人姓名', + `sender_id` bigint(20) DEFAULT NULL COMMENT '发令人ID', + `sender_name` varchar(50) DEFAULT NULL COMMENT '发令人姓名', + `recipient_id` bigint(20) DEFAULT NULL COMMENT '收令人ID', + `recipient_name` varchar(50) DEFAULT NULL COMMENT '收令人姓名', + `commander_id` bigint(20) DEFAULT NULL COMMENT '值长ID', + `commander_name` varchar(50) DEFAULT NULL COMMENT '值长姓名', + `status` varchar(20) DEFAULT 'pending' COMMENT '状态(pending待执行/in_progress执行中/completed已完成/cancelled已取消)', + `start_time` datetime DEFAULT NULL COMMENT '开始时间', + `end_time` datetime DEFAULT NULL COMMENT '结束时间', + `total_steps` int(11) DEFAULT 0 COMMENT '总步骤数', + `completed_steps` int(11) DEFAULT 0 COMMENT '已完成步骤数', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_execution_code` (`execution_code`, `tenant_id`), + KEY `idx_task_id` (`task_id`), + KEY `idx_region_id` (`region_id`), + KEY `idx_device_id` (`device_id`), + KEY `idx_status` (`status`), + KEY `idx_tenant_id` (`tenant_id`), + KEY `idx_create_time` (`create_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务执行记录表'; + +-- ---------------------------- +-- 表8: 步骤执行记录表 +-- ---------------------------- +DROP TABLE IF EXISTS `ar_step_record`; +CREATE TABLE `ar_step_record` ( + `id` bigint(20) NOT NULL COMMENT '记录ID', + `tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号', + `execution_id` bigint(20) NOT NULL COMMENT '任务执行ID', + `step_id` bigint(20) NOT NULL COMMENT '步骤ID', + `status` varchar(20) DEFAULT 'pending' COMMENT '状态(pending待执行/completed已完成/skipped已跳过)', + `is_done` char(1) DEFAULT '0' COMMENT '是否完成(0否 1是)', + `start_time` datetime DEFAULT NULL COMMENT '开始时间', + `completion_time` datetime DEFAULT NULL COMMENT '完成时间', + `duration` int(11) DEFAULT 0 COMMENT '耗时(秒)', + `text_feedback` text DEFAULT NULL COMMENT '文本反馈', + `voice_text` text DEFAULT NULL COMMENT '语音识别文本', + `ai_result` text DEFAULT NULL COMMENT 'AI识别结果(JSON格式)', + `executor_id` bigint(20) DEFAULT NULL COMMENT '执行人ID', + `executor_name` varchar(50) DEFAULT NULL COMMENT '执行人姓名', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_execution_id` (`execution_id`), + KEY `idx_step_id` (`step_id`), + KEY `idx_status` (`status`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='步骤执行记录表'; + +-- ---------------------------- +-- 插入示例数据(可选) +-- ---------------------------- + +-- 示例设备数据 +-- INSERT INTO ar_device VALUES(1, '000000', 'AR眼镜-001', 'DEV001', 'HoloLens 2', '0', 'AR智能眼镜设备', '0', 103, 1, sysdate(), null, null); +-- INSERT INTO ar_device VALUES(2, '000000', 'AR眼镜-002', 'DEV002', 'HoloLens 2', '0', 'AR智能眼镜设备', '0', 103, 1, sysdate(), null, null); + +-- 示例区域数据 +-- INSERT INTO ar_region VALUES(1, '000000', '主控室', 'REGION001', null, '0', '电厂主控室区域', '0', 103, 1, sysdate(), null, null); +-- INSERT INTO ar_region VALUES(2, '000000', '设备间', 'REGION002', null, '0', '设备机房区域', '0', 103, 1, sysdate(), null, null); + +-- 示例点位数据 +-- INSERT INTO ar_point VALUES(1, '000000', 1, '主控台', 'POINT001', null, '主控台点位', '0', 103, 1, sysdate(), null, null); +-- INSERT INTO ar_point VALUES(2, '000000', 1, '监控屏', 'POINT002', null, '监控屏点位', '0', 103, 1, sysdate(), null, null); + +-- 示例任务模板数据 +-- INSERT INTO ar_task VALUES(1, '000000', '日常巡检任务', 'TASK001', 1, 'daily', '0', '每日例行巡检任务', '0', 103, 1, sysdate(), null, null); +-- INSERT INTO ar_task VALUES(2, '000000', '设备检修任务', 'TASK002', 2, 'maintenance', '0', '设备定期检修任务', '0', 103, 1, sysdate(), null, null); + +SET FOREIGN_KEY_CHECKS = 1; + +-- ---------------------------- +-- 说明 +-- ---------------------------- +-- 1. 本SQL文件适用于 MySQL 8.0+ 版本 +-- 2. 所有表均支持多租户功能,通过 tenant_id 字段隔离 +-- 3. 所有表均支持逻辑删除,通过 del_flag 字段标识 +-- 4. 主键采用雪花ID算法,由应用程序生成,不使用数据库自增 +-- 5. 所有表包含标准审计字段: create_dept, create_by, create_time, update_by, update_time +-- 6. ar_step 表支持树形结构,通过 parent_id 和 ancestors 字段实现 +-- 7. JSON字段使用 text 类型存储,由 MyBatis-Plus 的 JacksonTypeHandler 处理 +-- 8. 索引已根据业务查询场景优化配置 +-- 9. 字符集使用 utf8mb4,支持emoji等特殊字符 +-- 10. 排序规则使用 utf8mb4_unicode_ci,确保多语言支持 + +-- ---------------------------- +-- 导入说明 +-- ---------------------------- +-- 执行方式1: 命令行导入 +-- mysql -u root -p -D ry-vue < /path/to/ar-inspection-tables.sql +-- +-- 执行方式2: MySQL客户端执行 +-- mysql> use ry-vue; +-- mysql> source /path/to/ar-inspection-tables.sql; +-- +-- 执行方式3: Navicat等GUI工具 +-- 打开SQL文件后点击"运行"按钮执行 +-- +-- 注意事项: +-- - 请确保已创建数据库 ry-vue (或根据实际情况修改数据库名) +-- - 建议先在测试环境验证后再在生产环境执行 +-- - 执行前请备份现有数据库 +-- - 示例数据默认已注释,如需使用请取消注释 + +-- ---------------------------- +-- 表关系说明 +-- ---------------------------- +-- ar_device (设备) +-- └── ar_execution (执行记录) - 通过 device_id 关联 +-- +-- ar_region (区域) +-- ├── ar_point (点位) - 通过 region_id 关联 +-- ├── ar_task (任务模板) - 通过 region_id 关联 +-- └── ar_execution (执行记录) - 通过 region_id 关联 +-- +-- ar_point (点位) +-- └── ar_step (巡检步骤) - 通过 point_id 关联 +-- +-- ar_task (任务模板) +-- ├── ar_step (巡检步骤) - 通过 task_id 关联 +-- └── ar_execution (执行记录) - 通过 task_id 关联 +-- +-- ar_step (巡检步骤) +-- ├── ar_step (父子关系) - 通过 parent_id 关联(树形结构) +-- └── ar_step_record (步骤记录) - 通过 step_id 关联 +-- +-- ar_execution (执行记录) +-- └── ar_step_record (步骤记录) - 通过 execution_id 关联 +-- +-- ar_step_record (步骤记录) +-- └── ar_step_media (步骤媒体) - 通过 step_record_id 关联 + +-- 创建完成!