docs(video): WVP-Platform 迁移提案 (proposal + tasks + design)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-04-05 18:18:53 +08:00
parent 2c2d6c3d26
commit 599314e026
3 changed files with 681 additions and 0 deletions

View File

@@ -0,0 +1,148 @@
# 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