102 lines
4.3 KiB
Markdown
102 lines
4.3 KiB
Markdown
# 生产数据同步总体规划
|
||
|
||
> **编写日期**: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)
|