# 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.227(AI 截图) - [ ] **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 → PageResult ## Phase 6: 认证与安全整合 - [ ] **T6.1** 更新 SecurityConfiguration,放行 Hook 和公开路径 - `/index/hook/**` → permitAll(ZLM 回调) - `/video/device/query/snap/**` → permitAll(设备快照) - `/video/sse/**` → permitAll(SSE 推送) - [ ] **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