10 KiB
全量迁移 892-without-redis 分支功能设计文档
1. 背景
当前分支为 892-jdk-8-without-redis,已经完成 JDK8 适配与 Redis 移除改造。目标分支 origin/892-without-redis 包含贷款定价业务、登录安全、部署脚本、生产初始化 SQL、文档与实施记录等多类改动。
本次需求已确认如下:
- 迁移范围为目标分支中的全部功能,不只限于贷款定价主链
- 迁移目标以“功能行为完全对齐目标分支”为准
- 不要求提交历史一致,也不要求逐文件原样搬运
- 当前分支已完成的 JDK8 与去 Redis 基线必须保留,不能被回退
由于两个分支不存在共同 merge base,不能按常规增量合并处理。本次应采用“以当前分支为基线,按功能行为对齐迁移”的方式落地。
2. 已确认约束
- 当前分支保留:
- JDK8 运行基线
- 去 Redis 后的内存缓存实现
- 目标分支中的所有业务能力、脚本能力、初始化能力都要迁入当前分支
- 迁移完成的判断标准是“当前分支行为与目标分支一致”,不是“文件内容完全一致”
- 不采用补丁式兜底方案,不引入额外兼容分支
- 所有本次改动需要在
doc/目录留下文档记录 - 前后端同时涉及改动时,后续必须分别输出前端实施计划和后端实施计划
3. 现状分析
3.1 分支关系现状
当前仓库中:
- 本地分支:
892-jdk-8-without-redis - 远端参考分支:
origin/892-without-redis
两者没有共同合并基线,说明不能通过简单 merge、cherry-pick 或三点 diff 来安全迁移全部功能。
3.2 目标分支改动构成
经核对,目标分支包含以下几类内容:
- 贷款定价主业务
- 流程列表的测算利率、执行利率、更新时间
- 流程详情字段补齐与详情卡片顺序调整
- 个人最终测算利率展示
- 个人测算入参对齐
- 敏感信息存储加密、接口脱敏、模型调用前解密
- 登录与账号相关
- 登录页默认账号密码移除
- 登录密码传输相关前后端改造
- 运行与部署相关
- 后端重启脚本
- 生产一键部署脚本
- 压缩包目录结构与进程识别规则调整
- 多环境配置文件补充
- 数据初始化与数据库脚本
- 贷款定价相关表结构脚本
- 菜单初始化脚本
- 生产初始化数据库脚本
- 文档与测试资产
- 业务设计文档、实施计划、实施记录
test_api示例- 前端静态测试脚本
3.3 当前分支迁移风险
如果直接套用目标分支文件,会出现以下风险:
- 覆盖当前分支已经完成的去 Redis 实现
- 引入不适配 JDK8 的实现方式
- 将目标分支中与当前分支冲突的配置整文件覆盖
- 把脚本和 SQL 迁进来但没有同步前后端行为,导致联调失败
因此,本次需要以“保留当前底座、按业务行为重建目标功能”的方式推进。
4. 方案对比
方案一:按业务域做行为对齐迁移
做法:
- 以当前分支为基线
- 按功能域拆分迁移目标分支能力
- 对于冲突文件采用手工整合
- 最终以页面表现、接口行为、脚本效果与目标分支一致为准
优点:
- 最适合当前两条独立历史的情况
- 可以稳定保住当前分支 JDK8 与去 Redis 基线
- 更容易分块验证与回归
缺点:
- 需要逐模块核对行为
- 人工整合成本高于直接覆盖
方案二:大面积覆盖目标分支文件后回补当前基线
做法:
- 尽量把目标分支文件整体覆盖到当前分支
- 再回头修复 JDK8 和去 Redis 冲突
优点:
- 前期拷贝速度快
缺点:
- 极易冲掉当前分支已经验证过的基础改造
- 后置修复成本高
- 很难确认哪些回归来自覆盖行为
方案三:按提交批量迁移
做法:
- 尝试对目标分支提交做
cherry-pick或补丁迁移
优点:
- 理论上来源更清晰
缺点:
- 两个分支无共同基线,冲突会非常多
- 目标分支提交混杂,难以按提交边界安全迁移
5. 设计结论
采用方案一:按业务域做行为对齐迁移。
核心原则如下:
- 保留当前分支的 JDK8 与去 Redis 基线
- 迁移目标分支中的全部功能,但不强求原样搬代码
- 所有冲突位置以“行为一致 + 当前底座不回退”为判定标准
- 迁移顺序固定为“基线对齐 -> 后端能力 -> 前端行为 -> 验证收口”
6. 迁移边界设计
本次将目标分支改动拆分为 5 个迁移包:
6.1 贷款定价主业务包
包含:
- 流程列表字段与刷新行为
- 详情展示与卡片顺序调整
- 个人与企业建单链路
- 个人测算入参对齐
- 最终测算利率展示
- 敏感信息加密、脱敏、模型调用链路
- 相关 SQL 脚本与测试文件
6.2 登录与账号包
包含:
- 登录页默认账号密码移除
- 登录密码传输相关前后端链路
- 控制器、API、工具函数与测试
6.3 部署与运行包
包含:
- 重启脚本
- 生产一键部署脚本
- 环境安装脚本
- 目录结构与 jar 进程识别规则
- 多环境配置文件
6.4 初始化与交付包
包含:
- 生产初始化数据库脚本
- 菜单脚本
- 表结构变更脚本
deploy/目录与交付物配置
6.5 文档与验证包
包含:
- 本次迁移设计文档
- 前端实施计划
- 后端实施计划
- 本次迁移实施记录
- 必要测试说明
7. 迁移顺序设计
7.1 第一阶段:基线对齐
目标:
- 锁定当前分支可保留的 JDK8 与去 Redis 底座
- 识别目标分支需要补入的依赖、配置、脚本、SQL 基础设施
输出:
- 迁移差异清单
- 需整合的配置与脚本列表
7.2 第二阶段:后端能力迁移
目标:
- 先完成贷款定价、登录安全、脚本能力、初始化 SQL 的后端与脚本迁移
原因:
- 前端页面行为依赖后端接口契约
- 先稳定接口、字段和脚本能力,后续前端才能一次性对齐
7.3 第三阶段:前端行为迁移
目标:
- 完成
ruoyi-ui页面、API、工具函数、页面测试脚本迁移
重点页面:
- 贷款定价流程列表
- 流程详情
- 个人/企业建单弹窗
- 登录页
- 缓存监控页
7.4 第四阶段:验证与收口
目标:
- 对迁移后的当前分支做构建、测试与关键链路核验
- 输出实施文档并确认最终行为一致
8. 冲突处理设计
8.1 Redis 冲突处理
凡是目标分支使用 Redis 的旧实现,统一保留当前分支的内存缓存能力,只迁移与业务行为相关的部分,不回退技术实现。
8.2 JDK8 冲突处理
凡是目标分支中使用高版本 JDK 写法的地方,统一改为当前分支可运行的 JDK8 写法,保持行为一致即可。
8.3 同文件多来源冲突处理
如果同一文件同时存在:
- 当前分支的去 Redis/JDK8 适配
- 目标分支的新业务功能
则采用手工整合,不做整文件覆盖。
8.4 脚本与环境冲突处理
部署脚本与环境配置以目标分支行为为目标,但需要重新核对:
- 端口
- 目录
- 进程识别规则
- 当前仓库的启动方式
8.5 文档路径处理
目标分支中存在 docs/superpowers/... 路径文档,但当前仓库规范要求将本次文档统一落到 doc/。因此文档只迁移内容,不沿用目标分支文档目录结构。
9. 详细迁移清单
9.1 贷款定价主业务
- 列表:
- 测算利率
- 执行利率
- 更新时间
- 返回列表自动刷新
- 详情:
- 个人详情字段补齐
- 详情卡片顺序调整
- 最终测算利率展示
- 建单:
- 个人测算入参对齐
- 创建请求字段与模型调用字段统一
- 安全:
custNameidNum- 存储加密、查询脱敏、模型调用前解密
- 数据:
- 流程表、输出表字段脚本
- 菜单脚本
- 测试 API 文件
9.2 登录与账号相关
- 登录页默认账号密码移除
- 密码传输工具函数
- 登录、注册、个人中心、用户管理相关前后端接口对齐
- 对应测试补齐
9.3 运行与部署相关
bin/restart_java_backend.shbin/prod/*deploy/*- 环境配置文件
- 目录结构与压缩包处理
- 启停测试脚本
9.4 初始化与交付物
- 初始化数据库脚本
- 贷款定价菜单脚本
- 生产交付压缩包相关目录
- 其他目标分支新增 SQL
10. 验收口径
迁移完成需同时满足以下条件:
10.1 后端
- 受影响模块测试可通过
- 新增关键测试覆盖关键行为
- 当前分支能正常启动后端服务
10.2 前端
ruoyi-ui在nvm use后可安装依赖npm run build:prod成功- 登录、流程列表、详情、建单、缓存监控等关键页面可正常访问
10.3 业务行为
- 贷款定价链路行为与目标分支一致
- 登录行为与目标分支一致
- 部署脚本的执行逻辑与目标分支一致
- 目标分支新增 SQL 在当前分支具备等价能力
10.4 文档
- 在
doc/目录补齐本次:- 设计文档
- 后端实施计划
- 前端实施计划
- 实施记录
11. 测试与验证设计
11.1 后端验证
- 单元或控制器测试:
- 列表字段返回
- 详情脱敏
- 登录密码传输
- 缓存监控接口
- 配置与脚本核对:
- 多环境配置
- 端口
- 路径
- 进程识别规则
- 启动验证:
- 至少确认迁移后可正常启动
11.2 前端验证
- 静态构建验证:
nvm usenpm installnpm run build:prod
- 页面链路验证:
- 登录
- 流程列表
- 流程详情
- 个人建单
- 缓存监控页
11.3 进程清理要求
若验证过程中启动前后端进程,验证结束后统一关闭,不保留测试进程。
12. 非目标
- 不追求与目标分支逐文件完全一致
- 不迁移目标分支 git 历史
- 不为了复刻目标分支而回退当前 JDK8 或去 Redis 基线
- 不新增需求之外的兼容或降级逻辑
13. 后续实施方式
设计确认后,后续实施将拆分为两份计划:
- 后端实施计划
- 前端实施计划
实施时采用“分包迁移 + 每包自验证”的方式推进,逐块完成并验证,不做一次性大批量落地后再集中排错。