Files
shanxia2.0/docs/data-migration/00-master-plan.md
T
2026-07-13 20:26:43 +08:00

102 lines
4.3 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.
# 生产数据同步总体规划
> **编写日期**:2026-07-12
> **状态**:P0 方案已定稿(用户:中文名登录)
> **目标库**:`shanxia2.0`(租户 `tenant_no = 'shanxia2.0'`)
---
## 1. 目标
1. 在门户 2.0 建立**统一用户体系**(`sys_user` + 角色 + 菜单权限)
2. 将 sx 库 CRM、报销生产数据迁入对应 `crm_*`、`bx_*` 表
3. 将地磅库业务数据迁入 `db_*` 表
4. 全过程可审计、可回滚、可重复执行(幂等)
---
## 2. 已确认决策
| 决策项 | 结论 |
|--------|------|
| 登录账号(`user_no`) | **以中文名为准**(真实姓名);见 [02-user-unification.md](./02-user-unification.md) |
| 超级管理员 | 保留 `admin` 账号(不按中文名改) |
| 租户编号 | 统一 `shanxia2.0` |
| **主键 ID(全局)** | **原系统 id 原样迁入**:`bigint`/`int` → 同值 `VARCHAR` 字符串;详见 [05-id-preservation-policy.md](./05-id-preservation-policy.md) |
| 主键例外 | **仅 `sys_user`**:P0 已用门户 UUID,外键经 `user_mapping`;字典 id 按类型+值对齐 |
| 密码 | 优先沿用 bx/CRM 的 bcrypt;地磅明文密码**不迁入**,统一重置临时密码 |
| 地磅用户 | 并入 `sys_user`,分配「地磅操作员」角色;无中文名的账号单独处理 |
---
## 3. 阶段划分
```
P0 基础主数据
├── 字典 sys_dict_data
├── 部门 sys_dept
├── 角色 sys_role + sys_role_menu
└── 用户 sys_user + sys_user_role ← 阻塞项,最先人工确认映射表
P1 CRM 业务(~7110 行级 INSERT)
└── 产品 → 客户 → 线索 → 商机 → 报价 → 合同(按依赖顺序)
P2 报销业务(~857 行)
└── 费用项/工作流 → 备用金 → 报销单 → 附件
P3 地磅业务(~4254 行)
└── 车辆 → migrate_dibang_data.py(计划/地磅单/出入库)
P4 验收
└── 抽样单据 + 登录 + 附件 URL + 行数对账
```
---
## 4. 执行原则
1. **先映射、后灌数**:P0 生成 `user_mapping`;业务表 ID 多为恒等映射,见 [05-id-preservation-policy.md](./05-id-preservation-policy.md)
2. **dry-run 优先**:所有脚本支持 `--dry-run`,生产执行前在测试库跑通
3. **只追加日志**:`phase-*/logs/` 按批次追加,不覆盖
4. **备份**:每阶段执行前 mysqldump 目标库
5. **不双写**:切换窗口内旧系统只读对照,不做双向同步
---
## 5. 脚本与产物
| 产物 | 路径 | 状态 |
|------|------|------|
| 用户映射表 | `mappings/user_mapping.csv` | 已生成初稿 |
| 产品分类 ID 映射 | `mappings/crm_product_category_id_mapping.csv` | ✅ 5 行恒等映射 |
| 产品 ID 映射 | `mappings/crm_product_id_mapping.csv` | ✅ 239 行恒等映射 |
| 产品编号映射 | `mappings/crm_product_no_mapping.csv` | ✅ 239 行 old→new |
| 产品编号统一脚本 | `backend/scripts/renumber_crm_product_no.py` | ✅ 已执行 |
| CRM ID 映射 | `mappings/crm_id_mapping.csv` | 待 P1(汇总;多为 source_id=new_id) |
| 报销 ID 映射 | `mappings/bx_id_mapping.csv` | 待 P2 |
| 地磅迁移脚本 | `backend/scripts/migrate_dibang_data.py` | 已有 |
| 用户迁移脚本 | `backend/scripts/migrate_users.py` | 已有 |
| 产品分类迁移脚本 | `backend/scripts/migrate_crm_product_category.py` | ✅ 已执行 |
| 产品迁移脚本 | `backend/scripts/migrate_crm_product.py` | ✅ 已执行(239 行) |
---
## 6. 风险摘要
| 风险 | 对策 |
|------|------|
| 中文名重复 | 映射表人工审核;冲突时 `user_no` 追加手机后四位 |
| 吴九华等手机号不一致 | 映射表标注,合并时取 bx 或 CRM 较新记录 |
| 工作流审批人节点 | 导入用户后重绑 `bx_workflow_node.approver_id` |
| CRM `create_by` 为 bigint | 经 `user_mapping` 转为门户 `sys_user.id`(用户表为 P0 例外,不保留源 id) |
| 附件 MinIO URL 失效 | P4 前批量 HEAD 检查 |
---
## 7. 相关文档
- CRM 数据注意事项:`docs/superpowers/specs/2026-05-30-crm-migration-design.md` §7
- 地磅数据脚本说明:`docs/db-migration/00-migration-plan.md` §7
- 报销范围:`docs/bx-migration/00-migration-plan.md`(代码移植;数据同步在本目录 P2)
- 主键 ID 全局策略:[05-id-preservation-policy.md](./05-id-preservation-policy.md)