forked from erp-dev/erp
feat: hpname and external_order_id + product_name unique together
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
|
||||
1. 按 `BianHaoID` 对本次拉到的 records 分组
|
||||
2. 每个分组 upsert 一条 `PrintingOrder`
|
||||
3. 分组内每条 record 按 `ID` upsert 一条 `PrintingJob`
|
||||
3. 分组内每条 record 按 `BianHaoID + YanSe` 覆盖 upsert 一条 `PrintingJob`
|
||||
4. 仅当本地全部写入成功后,才推进外部 cursor
|
||||
|
||||
## 字段映射
|
||||
@@ -39,25 +39,27 @@
|
||||
| `customer.KhName` | 客户名 | `PrintingOrder.customer` | 按本商户 `Customer.name` 精确匹配,取第一条 |
|
||||
| `KhID` | 外部客户 ID | `PrintingOrder.external_customer_id` | 原样保存 |
|
||||
| `customer.KhName` | 外部客户名 | `PrintingOrder.external_customer_name` | 原样保存 |
|
||||
| `HpName` | 布料名 | `PrintingOrder.fabric` | 原样保存到订单面料字段 |
|
||||
| `CaoZY` | 外部操作员/业务员 | `PrintingOrder.created_by` / `PrintingOrder.external_employee_name` | 若能匹配到内部员工且员工绑定了系统用户,则 `created_by` 取该用户,`external_employee_name` 置空;否则 `created_by` 取固定同步用户,`external_employee_name` 保留原文 |
|
||||
| `SHDZ` | 布料来源 + 工艺 | `PrintingOrder.fabric_source` / `PrintingOrder.craft` | 以空白字符 split;第 1 段为 `fabric_source`,剩余重新拼接为 `craft` |
|
||||
| `SeHao` | 幅宽 | `PrintingOrder.width` | 原样保存 |
|
||||
| `MeoA` | 曲线 | `PrintingOrder.curve` | 原样保存 |
|
||||
| `FidJ` | 电脑位置 | `PrintingOrder.position` | 取分组首条 record 的原始值 |
|
||||
| `BeiZhu` | 滚筒注意事项 | `PrintingOrder.rolling_warn` | 原样保存 |
|
||||
| `KdRiQi` | 下单日期 | `PrintingOrder.outgoing_date` | 按 ISO 时间解析并保存 |
|
||||
| 分组首条原始数据 | 外部来源快照 | `PrintingOrder.external_raw` | 保存 order 级别的原始数据,便于追溯 |
|
||||
|
||||
补充说明:
|
||||
|
||||
- 外部没有可靠的 “面料” 字段,因此 `PrintingOrder.fabric` 本次同步固定写空字符串 `""`
|
||||
- `BianHaoKD`、`RiQi`、`FidJ` 等当前未单独属性化的字段,保留在 `external_raw` 中
|
||||
- 外部 `HpName` 已作为布料名使用,直接写入 `PrintingOrder.fabric`
|
||||
- `BianHaoKD`、`RiQi` 等当前未单独属性化的字段,保留在 `external_raw` 中
|
||||
- `BianHaoKD` 当前样例值类似 `"1.27"`,不按日期强解析
|
||||
|
||||
### 二、单条 record -> PrintingJob
|
||||
|
||||
| 外部字段 | 含义 | 本系统字段 | 规则 |
|
||||
| --- | --- | --- | --- |
|
||||
| `ID` | 明细顺序 ID | `PrintingJob.original_id` | 幂等键;原样保存 |
|
||||
| `ID` | 明细顺序 ID | `PrintingJob.original_id` | 保存最近一次覆盖该任务的外部明细 ID,便于追溯 |
|
||||
| `YanSe` | 外部产品名 | `PrintingJob.product` / `PrintingJob.external_product_name` | 若能按本商户 `Product.name` 精确匹配,直接绑定该产品且不再拉图;若本地不存在,则先创建产品、拉图并上传到 storage,成功后绑定该产品 |
|
||||
| `ShuLiang` | 下单数量 | `PrintingJob.quantity` | 按整数解析;当前预期外部值为整数字符串或 `10.00` 这类可安全转整数的值 |
|
||||
| `JiJiaDW` | 单位 | `PrintingJob.unit` | 去掉前导 `/` 后保存,例如 `/段` -> `段` |
|
||||
@@ -66,6 +68,12 @@
|
||||
| `YanSe` | 外部产品名 | `PrintingJob.description` | 本次不单独映射到 description;原始值由 `product.name` 或 `external_product_name` / `external_raw` 表达 |
|
||||
| 单条原始数据 | 外部来源快照 | `PrintingJob.external_raw` | 保存 job 级别完整原始 record |
|
||||
|
||||
补充说明:
|
||||
|
||||
- `PrintingJob` 的覆盖唯一性按 `PrintingOrder.external_order_id + YanSe` 处理
|
||||
- 若同一外部订单下再次出现相同 `YanSe`,则更新已有 `PrintingJob`,不再新增
|
||||
- 更新时 `original_id` 会覆盖为最新外部 record 的 `ID`
|
||||
|
||||
## 员工绑定规则
|
||||
|
||||
1. 读取外部 `CaoZY`
|
||||
|
||||
Reference in New Issue
Block a user