113 lines
3.3 KiB
Markdown
113 lines
3.3 KiB
Markdown
# P1-1b:CRM 产品
|
||
|
||
> **前置**:P1-1a 产品分类;P0 用户 mapping
|
||
> **全局 ID**:[05-id-preservation-policy.md](../05-id-preservation-policy.md)
|
||
> **下游**:客户/报价/合同等引用 `crm_product.id`
|
||
|
||
---
|
||
|
||
## 1. 目标
|
||
|
||
将 sx `crm_product` 写入门户 `crm_product`,并生成:
|
||
|
||
`docs/data-migration/mappings/crm_product_id_mapping.csv`
|
||
|
||
**数据来源**:仅从原 CRM(`sx.crm_product`)全量迁入 `del_flag=0` 行;**不**合并地磅 `cargos`、报销产品表。
|
||
|
||
---
|
||
|
||
## 2. 源数据规模(live sx,2026-07-12)
|
||
|
||
| 指标 | 值 |
|
||
|------|-----|
|
||
| 有效产品行 | 239 |
|
||
| 产品分类(已迁) | 5 |
|
||
| sx.sql 快照 INSERT | ~240(与 live 差 1 条删除/滞后) |
|
||
|
||
---
|
||
|
||
## 3. 执行前检查
|
||
|
||
```sql
|
||
-- 目标:应为空(首次执行)
|
||
SELECT COUNT(*) FROM crm_product WHERE tenant_no='shanxia2.0' AND del_flag=0;
|
||
|
||
-- 分类已就绪
|
||
SELECT COUNT(*) FROM crm_product_category WHERE del_flag=0;
|
||
|
||
-- 源
|
||
SELECT COUNT(*) FROM crm_product WHERE del_flag=0;
|
||
```
|
||
|
||
确认文件存在:
|
||
|
||
- `docs/data-migration/mappings/user_mapping_result.csv`
|
||
- `docs/data-migration/mappings/crm_product_category_id_mapping.csv`
|
||
|
||
---
|
||
|
||
## 4. 执行步骤
|
||
|
||
| 步骤 | 操作 | 状态 |
|
||
|------|------|------|
|
||
| 1 | 备份目标库 `mysqldump shanxia2.0` | 跳过(执行前 0 行) |
|
||
| 2 | `migrate_crm_product.py --dry-run` | ✅ 2026-07-12 |
|
||
| 3 | 审阅 dry-run(239 行、category_id 抽样) | ✅ |
|
||
| 4 | 正式执行 + `--mapping-out` | ✅ 插入 239 行 |
|
||
| 5 | SQL + 界面验收 | SQL ✅(脚本);界面待人工 |
|
||
| 6 | 追加 `logs/` 批次记录 | ✅ `logs/2026-07-12-2055-product.md` |
|
||
|
||
### 4.1 命令
|
||
|
||
```bash
|
||
cd backend
|
||
|
||
venv/bin/python scripts/migrate_crm_product.py --dry-run \
|
||
--env-file .env.production \
|
||
--user-mapping ../docs/data-migration/mappings/user_mapping_result.csv
|
||
|
||
venv/bin/python scripts/migrate_crm_product.py \
|
||
--env-file .env.production \
|
||
--user-mapping ../docs/data-migration/mappings/user_mapping_result.csv \
|
||
--mapping-out ../docs/data-migration/mappings/crm_product_id_mapping.csv
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 字段映射速查
|
||
|
||
| 源 | 目标 | 说明 |
|
||
|----|------|------|
|
||
| id | id | **原样保留** `str(source_id)` |
|
||
| category_id | category_id | **原样保留** `str(source_id)` |
|
||
| product_no | product_no | 直接 |
|
||
| name | name | 直接 |
|
||
| cost | cost_price | 重命名 |
|
||
| status | status | 保持 `on`/`off` |
|
||
| is_toxic / is_explosive | 默认 0 | 源表无字段 |
|
||
| tenant_id | tenant_no | `shanxia2.0` |
|
||
| create_by | create_by | user_mapping;1→admin |
|
||
|
||
---
|
||
|
||
## 6. 验收标准
|
||
|
||
- [x] 目标有效行数 = 源有效行数(239)
|
||
- [x] mapping CSV 239 行,`source_id` = `new_id`
|
||
- [x] 抽样 `category_id` 落在已迁 5 个分类 id 内
|
||
- [ ] 产品列表页正常展示、分类全路径正确(待人工)
|
||
|
||
---
|
||
|
||
## 7. 与地磅的关系(说明)
|
||
|
||
地磅业务表(计划/出入库/地磅单)存的是**货物名称文本**,无 `cargo_id` / `product_id` 外键;门户 2.0 地磅方案 A 继续存名称文本,CRM 产品仅作下拉来源。详见迁移问答与 `docs/db-migration/00-migration-plan.md`。
|
||
|
||
---
|
||
|
||
## 8. 二次移植说明
|
||
|
||
1. 保留历史 `logs/` 与 mapping CSV,新批次只追加
|
||
2. 默认 skip 已映射 `source_id`;源数据变更用 `--update`
|
||
3. 勿 `--force` 清库;增量只迁 mapping 中不存在的源行
|