feat: 档口入库码后台批量回写 (#246)
This commit is contained in:
@@ -1022,7 +1022,7 @@ CREATE UNIQUE INDEX idx_client_assignment_current
|
||||
`ai_spec_match_decisions`。Admin 重启把未完成明细改为 `interrupted` 并完成批次计数,已经
|
||||
成功写入的 `spec_mappings` 不回滚。
|
||||
|
||||
## 17. `syb_inner_code_records` 档口入库码记录(MySQL v23,软删除 v24)
|
||||
## 17. `syb_inner_code_records` 档口入库码记录(MySQL v23,软删除 v24,后台回写 v25)
|
||||
|
||||
档口入库码使用一张业务表完成导入、匹配、回写和异常恢复。Excel 只是导入载体,系统
|
||||
不保存原文件、文件哈希,不再拆批次表或尝试记录表。
|
||||
@@ -1036,14 +1036,19 @@ CREATE UNIQUE INDEX idx_client_assignment_current
|
||||
`source_duplicate_count` 保存合并前的 Excel 源行数,只用于展示和审计,不阻止确定性匹配。
|
||||
- `stock_id/detail_id` 和 `syb_*`、`purchase_*`、`remote_inner_code` 保存最近一次远端
|
||||
规划快照,不替代 `syb_orders`,也不修改采购数据。
|
||||
- 状态固定为 `pending/ready/applying/updated/already_filled/skipped/failed/needs_check`。
|
||||
重复导入可以重置尚未完成的记录,但不得覆盖 `updated`、`already_filled`、`applying`
|
||||
或 `needs_check` 的远端结果和审计状态。
|
||||
- 状态固定为 `pending/ready/queued/applying/updated/already_filled/skipped/failed/needs_check`。
|
||||
`queued` 只表示尚未发送远端请求,`applying` 才表示已经进入逐条远端处理。重复导入可以
|
||||
重置尚未完成的记录,但不得覆盖 `queued`、`updated`、`already_filled`、`applying` 或
|
||||
`needs_check` 的远端结果和审计状态。
|
||||
- `created_by_user_id` 记录首次导入账号,`applied_by_user_id` 记录实际回写账号;时间字段
|
||||
使用 UTC ISO 8601。用户只停用不物理删除,因此外键不会阻塞账号生命周期。
|
||||
- v24 增加 `deleted_at`、`deleted_by_user_id`。正常列表、统计、匹配和新的回写入口只读取
|
||||
未删除记录;删除不改变业务状态,也不撤销顺运宝远端值。在途 `applying` 的最终结果仍
|
||||
写回同一条隐藏记录,保证远端结果审计不会丢失。
|
||||
- 重新导入同一业务键会恢复软删除记录:`pending/ready/skipped/failed` 重置为
|
||||
`pending` 并清空旧规划;`applying/updated/already_filled/needs_check` 保留状态和远端
|
||||
`pending` 并清空旧规划;`queued/applying/updated/already_filled/needs_check` 保留状态和远端
|
||||
审计。后一组状态若导入的 `inner_code` 已变化则拒绝恢复,交由人工核对。
|
||||
- v25 增加 `apply_batch_id`、`apply_queued_at` 和批次状态索引。批次仍记录在同一业务表,
|
||||
不新增批次表:提交时所选 `ready` 记录必须在同一事务内全部转为 `queued`;后台每次最多
|
||||
读取 20 条并逐条领取为 `applying`。页面按 `apply_batch_id` 聚合当前批次进度。Admin
|
||||
重启时,`queued` 恢复为 `ready` 且不会自动写远端,`applying` 转为 `needs_check`。
|
||||
|
||||
Reference in New Issue
Block a user