Files
kra-oa/docs/OA_MIGRATION_PLAN.md
T
2026-09-28 17:12:17 +08:00

80 lines
8.6 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.
# OA 到 oa-new 迁移执行计划
> 基线日期:2026-09-28。源:本仓库 `oa-old/server`、`oa-old/web`;目标:当前 oa-new。本文替代旧计划中的表优先、嵌套分层及跨模块并行决策。
> 当前只实施 M00;M01–M18 均未开始。进度以 [迁移入口](migration/README.md) 和 [progress.json](migration/progress.json) 为准。没有任何模块已获用户确认。
## 迁移原则
1. **OA 是业务唯一依据,KRA 提供架构。** 同一路径的登录、参数、校验、错误、返回类型及业务行为冲突时修改 oa-new;最终运行一套业务实现。禁止按客户端、开关或模式保留 OA/KRA 两套业务行为。
2. **旧契约只能增加,不能减少。** 方法、路径、请求来源、名称、类型、默认值、空值、响应字段和值、业务码、消息、Header、下载及回调 ACK 均逐项对照旧源码和请求结果。新增字段不得改变旧字段含义。
3. **表和模型不预设 KRA 优先。** 先证明实体语义、键、关联、约束及数据口径等价,再选择统一持久化模型;通过明确增量字段/迁移兼容 OA,禁止仅把不同字段改名后认作等价。
4. **遵守根 AGENTS.md 的分层。** DTO 在 `internal/service/dto`,适配器在 `internal/service/<domain>`,DO/用例/仓储接口在 `internal/biz/<domain>`,PO/仓储实现和迁移在 `internal/data/<domain>`;HTTP 在 server,外部 I/O 在 integration,任务运行在 worker。modules 仅承载模块声明、schema/seed/menu/API/task 贡献,cmd 负责 Wire。不得在 modules 下再建完整 biz/data/service 层。
5. **同步修改新 Web。** 按旧接口修改 API、表单、store、菜单和权限依赖。用户最新要求是逐接口请求结果一致即可确认;外部 OA 桌面端源码、抓包及桌面端 E2E 不是迁移门槛,不因缺少它们停止接口核对。
6. **每批完成后等待用户确认。** 可在本批内部并行盘点、开发和验证;不得提前实现下一批。用户确认记录必须来自实际用户消息,不得由测试成功、文档创建或 agent 自行代填。
7. **可恢复、可审查。** 每条接口与每项 KRA 修改都有 ID、状态和证据。未知或缺环境标 pending,不能标一致。旧缺陷和性能优化单独登记,未经评估不得混入迁移掩盖行为差异。
8. **只实施已授权范围。** M00 不改登录、业务表、生产配置或旧源码,不执行优化 SQL;保留已有暂存/未暂存改动。后续数据库变更必须有可审查脚本、数据演练及回滚说明,不用启动时自动迁移替代审查。
## 19 批顺序与边界
| 批次 | 模块 | 纳入本批的能力 |
|---|---|---|
| M00 | 基线环境台账 | 源码指纹、实际路由清单、冲突清单、核对工具、环境与恢复入口;仅预备 M01 契约 |
| M01 | 密码登录会话核心 | 下列固定 8 条接口;登录所需 UC、设备/冻结/企业/角色读取及 token 上下文一并核对,不提前实现其管理 CRUD |
| M02 | 其他认证账号生命周期 | 其余 base 接口,含 register、phoneLogin、tgPhoneLogin、sendSms 的全部 reg 分支、忘记密码、注销和实名 |
| M03 | 用户企业组织架构 | 用户、企业、部门、组织层级、账号/公司/部门关联及 OA 扩展字段 |
| M04 | 角色资源权限 | 角色、菜单、API、按钮、多角色、数据范围、常用菜单;统一 M01 会话所需读取逻辑 |
| M05 | 安全管理 | 设备、冻结、规则、黑名单、追踪、安全日志和对应启动/退出处理 |
| M06 | 公共基础配置字典文件日志 | 配置、字典、文件、断点续传、平台上传、静态下载、客户端版本数据、邮件/短信适配及通用日志 |
| M07 | 平台 CP 商务 | 平台/CP 资料、商务账号、平台绑定审核和冲突、相关授权 |
| M08 | 游戏基础资料 | 游戏、关联游戏、默认分佣、区服、合服/互通、CP/来源/类型、禁言禁充等配置 |
| M09 | 推广渠道合同活跃池 | 渠道/商务/代理、合同公告、活跃/绑定池、锁定和归属变更 |
| M10 | 申请分包 | 游戏申请、渠道包、盒子、多端打包、PC 分包任务及回调 |
| M11 | 玩家角色 | 玩家、角色、登录记录、账号关联、换绑/补链、协议与相关记录 |
| M12 | 订单充值 | 充值、补单、绑币/扣绑、平台币/余额交易、发放、支付配置及外部支付协议 |
| M13 | 扶持礼包福利 | 扶持及审核、CP 发放、礼包、福利、周/月卡;自动审核/发放任务和 SDK 发放结果 |
| M14 | 结算资金 | 结算/周期、提现、保证金、渠道币、代充、预支额度/白名单/还款及交易状态 |
| M15 | TG 业务 | /tg 身份及平台切换、层级限制、统计、申请、福利、资金接口,复用已确认的业务实现 |
| M16 | IM 客服 SDK | 后台客服、玩家专用会话、群/成员/消息/已读/评价/OCR、SDK、腾讯回调、kefu 队列和会话任务 |
| M17 | 发行报表 | Issue 玩家/充值/补单/角色/换绑、日报、渠道汇总、千游社/艺术订单等统计及导出 |
| M18 | 工具全量收尾 | 旧工具/示例逐项归属或确认处置;未归属路由/任务/静态资源清零、全量回归、数据演练和切换准备 |
M01 固定范围:
| ID | 请求 |
|---|---|
| M01-API-001 | POST /base/captcha |
| M01-API-002 | POST /base/login |
| M01-API-003 | GET /user/getUserInfo |
| M01-API-004 | POST /menu/getMenu |
| M01-API-005 | POST /user/getUserMenus |
| M01-API-006 | POST /user/setUserAuthority |
| M01-API-007 | POST /user/companySwitch |
| M01-API-008 | POST /jwt/jsonInBlacklist |
导入导出、回调、任务和消息消费者必须随所属业务一起验收;M18 是遗漏核查,不是把它们统一延后实现。13 个旧定时注册点按业务归属登记;仅有源码但无实际注册的插件单列待核实,不虚增运行功能。
## 执行与逐接口验收
每批按“冻结范围 → 补契约/数据样本 → 实现 → 逐接口核对 → 修复差异 → 用户确认”推进。M00 只冻结清单和工具,不将静态已盘点记成已迁移。
- 用相同请求和相同初始数据分别调用旧、新服务。读接口比较完整响应;写接口在两个隔离数据副本执行,比较响应及最终关联数据、计数、余额、权限或消息效果。不得向生产双写。
- 覆盖成功、缺参/错类型、无权限、无记录、重复操作及接口实际存在的分支。精确检查 null/空数组/空对象、字符串/数字、排序、分页、金额和时间单位。
- token、验证码、随机 ID 等动态值必须先登记具体 JSON 路径与规则再比对;比较其类型、结构、claims/有效期或后续使用结果。默认不得整体忽略 data、时间、金额或业务字段。
- 第三方 SDK/回调/MQ 使用本地替身或隔离依赖核对协议和副作用;模拟通过只证明该测试范围,不冒充真实外部系统验证。原始 ACK、文件流、导出 URL 和表格内容使用适用的比较方式。
- 后端按受影响层运行测试/检查;新 Web 运行相应构建与接口消费检查。**模块确认依据是逐接口请求一致,不设桌面端 E2E 门槛。**
- 已实现、静态核对、请求一致、用户确认分开记录。请求无真实可运行基线时保持 pending-runtime;未完成项不得静默豁免。
每个确认包至少包含:模块/API 状态表、旧新请求与响应证据、差异和 KRA 修改记录、字段/数据映射、测试结果及限制、待用户确认清单。证据不得包含真实口令、token、密钥或原配置文件。
## 状态、恢复与当前关卡
状态依次为 `not_started → in_progress → awaiting_confirmation → confirmed`。中途缺依赖时保留本批状态并追加 blocker;不是自动确认或自动切换下一批的理由。
恢复时先读 [迁移入口](migration/README.md)、[progress.json](migration/progress.json)、本批 verification/environment,再检查 Git 状态及源码指纹,恢复最后一条未完成 case。若代码或配置基线变化,先重建受影响证据。
当前关卡是 M00:
- 当前旧源码 `oa-old/` 尚未纳入 Git,须保存清单与内容指纹;保留 `docs/code-review-issues.md` 已暂存删除。
- 环境探测已报告本机 MySQL 可监听但账号认证 1045;Redis 无监听。连接状态、实际构建命令与证据由执行记录补齐。
- 空库或新建空容器不能视作旧 OA 数据快照;数据库认证恢复后还须验证表、样本、权限与克隆隔离。
- M00 基础文档与工具完成后交用户确认,**确认前不开始 M01 实现**。M01 的两份文档只表示范围/缺口已预备。