Files
aiot-platform-cloud/openspec/changes/add-video-module-wvp-migration/tasks.md
2026-04-05 18:18:53 +08:00

149 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tasks: WVP-Platform 迁移到 viewsh-module-video
**Change ID**: `add-video-module-wvp-migration`
**Branch**: `feature/video-module`
---
## Phase 0: 前置检查
- [x] **T0.1** ~~扫描 WVP 源码中的 Java 21 特性~~**已完成,无 Java 21 专有语法**,仅 `isBlank()`Java 11风险消除
- [ ] **T0.2** 确认 WVP feature 分支的当前状态和内容
## Phase 1: 代码搬迁与包结构调整
- [ ] **T1.1**`C:\workspace\java17\wvp-platform` 复制目标目录到 video-server
- 复制 `gb28181/``media/``aiot/``streamProxy/``streamPush/``vmanager/``service/``common/``utils/`
- 复制 `storager/`(含 RedisCatchStorageImpl被 67 个文件引用)
- 复制 `conf/` 中保留的配置类SipConfig、MediaConfig、UserSetting、redis、websocket、ThreadPool、Schedule、CivilCodeFileConf、VersionConfig
- [ ] **T1.2** 全局替换包名 `com.genersoft.iot.vmp``com.viewsh.module.video`
- [ ] **T1.3** 删除不迁移的文件
- `conf/security/` 全部
- `conf/ftpServer/` 全部
- `conf/MybatisConfig.java`
- `conf/SpringDocConfig.java`
- `vmanager/user/` 全部
- `jt1078/` 全部
- UserMapper、RoleMapper、UserApiKeyMapper
- User.java、Role.java、LoginUser.java、JwtUser.java
- VManageBootstrap.java
- [ ] **T1.4** 复制资源文件
- `civilCode.csv`(行政区划数据)
## Phase 2: pom.xml 依赖补充 + 配置文件整合(可并行)
- [ ] **T2.1**`viewsh-module-video-server/pom.xml` 添加必须依赖
- jain-sip-ri 1.3.0-91
- dom4j
- okhttp
- okhttp-digest 3.1.1
- bouncycastle bcprov-jdk18on 1.78.1
- fastjson2 + **fastjson2-extension-spring6**(不是 spring5
- **不引入 pagehelper-spring-boot-starter**
- [ ] **T2.2** 添加按需依赖
- paho.mqttv5 1.2.5
- jts-core 1.18.2
- cos_api 5.6.227AI 截图)
- [ ] **T2.3**`viewsh-dependencies/pom.xml` 注册新依赖版本管理
- [ ] **T2.4** 在 application.yaml 中添加 SIP/Media/UserSettings/AI 配置段
- [ ] **T2.5** 在 application-local.yaml 中配置独立 video 数据库连接(`aiot-video`
- [ ] **T2.6** 配置 `spring.main.allow-circular-references=true`(已有,确认保留)
## Phase 3: RedisTemplate 隔离(必须在编译修复前完成)
- [ ] **T3.1** 改造 WVP 的 `RedisTemplateConfig`Bean 名改为 `videoRedisTemplate`(不覆盖框架默认 Bean
- [ ] **T3.2** WVP 内部所有 `@Autowired RedisTemplate` 的地方加 `@Qualifier("videoRedisTemplate")`(涉及 30+ 文件RedisRpcConfig、RedisCatchStorageImpl 等)
## Phase 4: 多租户配置
- [ ] **T4.1** 在 application.yaml 配置多租户忽略表
```yaml
viewsh:
tenant:
ignore-tables:
- wvp_media_server
```
> 不需要自定义基类,业务表 DO 直接继承 `TenantBaseDO`,共享表 DO 继承 `BaseDO`
## Phase 5: 按域迭代 — 编译修复 + ORM 改造(合并执行)
> Phase 3/4 原本分开的编译修复和 ORM 改造合并为一个阶段,按业务域迭代推进,每个域完成后做一次 mvn compile 验证。
### 5.1 GB28181 域(核心,最先做)
- [ ] **T5.1.1** 修复 gb28181/ 编译错误认证引用、用户引用、JT1078 引用)
- [ ] **T5.1.2** DO 改造Device/DeviceChannel/Platform/PlatformChannel/CommonGroup/CommonRegion/DeviceAlarm/DeviceMobilePosition → 加 @TableName、继承 TenantBaseDO
- [ ] **T5.1.3** Mapper 改造DeviceMapper、DeviceChannelMapper、PlatformMapper、PlatformChannelMapper、GroupMapper、RegionMapper、CommonGBChannelMapper、DeviceAlarmMapper、DeviceMobilePositionMapper → 继承 BaseMapperX复杂 SQL 保留 @Select
- [ ] **T5.1.4** `mvn compile` 验证 gb28181 域
### 5.2 Media + Storager 域
- [ ] **T5.2.1** 修复 media/ 和 storager/ 编译错误
- [ ] **T5.2.2** DO 改造MediaServer继承 BaseDO无租户、StreamInfo、CloudRecord/RecordPlan/RecordPlanItem继承 TenantBaseDO
- [ ] **T5.2.3** Mapper 改造MediaServerMapper、CloudRecordServiceMapper、RecordPlanMapper
- [ ] **T5.2.4** `mvn compile` 验证 media + storager 域
### 5.3 StreamProxy + StreamPush 域
- [ ] **T5.3.1** 修复编译错误
- [ ] **T5.3.2** DO + Mapper 改造StreamProxy、StreamPush
- [ ] **T5.3.3** `mvn compile` 验证
### 5.4 AI 域
- [ ] **T5.4.1** 修复 aiot/ 编译错误
- [ ] **T5.4.2** DO 改造AiAlert/AiAlgorithm/AiAlgoTemplate/AiRoi/AiRoiAlgoBind/AiCameraSnapshot/AiConfigLog/AiEdgeDevice
- [ ] **T5.4.3** Mapper 改造(全部低复杂度)
- [ ] **T5.4.4** `mvn compile` 验证 AI 域
### 5.5 Vmanager + Service + Common 域
- [ ] **T5.5.1** 修复 vmanager/(去掉 user/、service/、common/ 编译错误
- [ ] **T5.5.2** `mvn compile` 全量验证通过
### 5.6 硬删除改逻辑删除(跨域)
- [ ] **T5.6.1** 全局搜索 `@Delete` 和 `DELETE FROM`,将 39 处硬删除改为 BaseMapperX 的 `deleteById()` / `delete(wrapper)`
- [ ] **T5.6.2** 排查通道同步、级联取消共享等场景,确认逻辑删除后的业务语义正确
### 5.7 Service 层分页适配(跨域)
- [ ] **T5.7.1** PageHelper.startPage() → MyBatis Plus Page + selectPage()
- [ ] **T5.7.2** PageInfo<T> → PageResult<T>
## Phase 6: 认证与安全整合
- [ ] **T6.1** 更新 SecurityConfiguration放行 Hook 和公开路径
- `/index/hook/**` → permitAllZLM 回调)
- `/video/device/query/snap/**` → permitAll设备快照
- `/video/sse/**` → permitAllSSE 推送)
- [ ] **T6.2** Controller 中用户获取方式替换
- WVP SecurityUtils → viewsh SecurityFrameworkUtils
- [ ] **T6.3** 删除 WVP 的 `user-settings.interface-authentication` 逻辑
## Phase 7: Controller 路径适配
- [ ] **T7.1** 所有 Controller 移到 `controller/admin/` 包下
- [ ] **T7.2** 调整 @RequestMapping 路径
- `/api/device/*` → `/video/device/*`
- `/api/gb28181/*` → `/video/gb28181/*`
- `/api/common/channel/*` → `/video/channel/*`
- `/api/ai/*` → `/video/ai/*`
- [ ] **T7.3** Hook 回调 Controller 保持 `/index/hook/*` 路径,网关加透传路由
## Phase 8: 数据库迁移
- [ ] **T8.1** 编写 `aiot-video` 数据库初始化 SQL
- 基于 WVP `数据库/2.7.4/初始化-mysql-2.7.4.sql`
- 去掉 user/role/api_key 表和 jt1078 表
- 业务表加 `tenant_id BIGINT NOT NULL DEFAULT 0`(多租户)
- 共享表wvp_media_server不加 tenant_id
- 每张表加 `creator VARCHAR(64) DEFAULT ''`, `updater VARCHAR(64) DEFAULT ''`
- `create_time` / `update_time` 字段类型统一为 `DATETIME`
- 每张表加 `deleted BIT(1) NOT NULL DEFAULT 0`(逻辑删除)
- 含唯一索引的表device、device_channel、platform、media_server、stream_proxy、stream_push、common_group、common_region将 `deleted` 加入联合唯一索引
- [ ] **T8.2** 导入 AI 模块表(从 `数据库/aiot/初始化-mysql-aiot.sql`
- [ ] **T8.3** 编写初始化数据(默认媒体服务器配置等)
## Phase 9: 验证与收尾
- [ ] **T9.1** `mvn compile` 全量编译通过
- [ ] **T9.2** VideoServerApplication 启动成功SIP 端口监听正常
- [ ] **T9.3** Swagger 文档可访问
- [ ] **T9.4** 网关路由验证
- [ ] **T9.5** SIP 设备注册测试
- [ ] **T9.6** 提交并整理 commit history