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

7.1 KiB
Raw Blame History

Tasks: WVP-Platform 迁移到 viewsh-module-video

Change ID: add-video-module-wvp-migration Branch: feature/video-module


Phase 0: 前置检查

  • T0.1 扫描 WVP 源码中的 Java 21 特性已完成,无 Java 21 专有语法,仅 isBlank()Java 11风险消除
  • T0.2 确认 WVP feature 分支的当前状态和内容

Phase 1: 代码搬迁与包结构调整

  • T1.1C:\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.vmpcom.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.1viewsh-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.3viewsh-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 的 RedisTemplateConfigBean 名改为 videoRedisTemplate(不覆盖框架默认 Bean
  • T3.2 WVP 内部所有 @Autowired RedisTemplate 的地方加 @Qualifier("videoRedisTemplate")(涉及 30+ 文件RedisRpcConfig、RedisCatchStorageImpl 等)

Phase 4: 多租户配置

  • T4.1 在 application.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 全局搜索 @DeleteDELETE 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/** → 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_regiondeleted 加入联合唯一索引
  • 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