当前同步策略

DGJ updated

  • 允许 replace 明细。
  • 原因是 DGJ 的销售单追加/改单本身就存在删明细再重建的业务实现。
  • 但不是无条件 replace,已出库或已退款订单要降级成保守同步。

GRSPROD updated

  • 优先按商品业务键增量同步,不做纯 replace。
  • 当前协议以 invId 作为明细匹配主键。
  • 如果将来协议再次允许一单多行同 invId,这块需要重新升级匹配规则。

DGJ2.0 销售单主操作清单

操作 典型方法 说明 同步关注点
创建销售单 SaOrderSer::saCreate2() 创建销售单主表、明细、来源关联和接单记录。 对应 GARAGE_REPAIR_ORDER_CREATED
追加商品 / 改单 SaOrderSer::saAppend() 先删旧明细,再重建新明细,并重算数量与金额。 DGJ updated 支持 replace 明细的关键依据。
未发货关闭 SaOrderSer::returnOrderNoOut()
InvSaService::closeSaleOr(type=1)
关闭未发货销售单,更新销售单状态并作废接单。 对应取消类同步。
销售单结单 / 完成 InvSaService::closeSaleOr(type=2) 更新销售单完成状态,并联动收款相关状态。 适合归到 COMPLETED 或纯状态更新。
出库生成 SaOrderSer::saOrderOut()
SaInvoiceSer::outBound()
按销售单生成出库单,推动销售单出库状态变化。 走出库单同步事件,不完全属于订单更新消息。
撤销出库 出库撤销流程 + MQ 回滚销售单的出库数量和状态。 对应 GARAGE_REPAIR_OUTBOUND_CANCELLED
退货 / 售后 retOrder2()
returnChargeOrder()
围绕出库后逆向流程,可能影响数量、金额和可见状态。 是否同步给另外两端,需要按业务边界再定。

事件与落表对照

DGJ2.0 侧:销售单相关操作会更新哪些表

事件 / 操作 更新表 主要字段
创建销售单 sa_order
sa_order_info
sass_order_rel
sa_order_info_ext
sa_order_take
billNototalQtyamountsourceTypesrcOrderIdvincarModel 等。
追加商品 / 改单 sa_order_info
sa_order
先硬删旧明细再重插;主表重算 totalQtytotalAmountamount
未发货关闭 / 取消 apply_return_order
sa_order
sa_order_log
sa_order_take
billStatus = 3modifyTime、接单状态失效。
结单 / 完成 sa_order
收款相关表
sa_order_log
sa_order_take
billStatus = 2modifyTime,并触发收款状态联动。
出库单创建 / 撤销 sa_invoice
sa_invoice_info
通过出库单维度影响销售单履约进度,并发 MQ 给 SaaS。

SaaS 侧:消费这些事件后会更新哪些表

事件 更新表 主要字段
GARAGE_REPAIR_ORDER_CREATED t_order
t_order_detail
t_order_ext
t_order_summary
站点、客户、金额、数量、状态、支付方式、地址、明细商品、VIN/车型、汇总展示。
GARAGE_REPAIR_ORDER_UPDATED / MODIFIED / COMPLETED t_order
t_order_detail
t_order_ext
t_order_summary
订单表头更新、明细同步、扩展信息更新、汇总恢复或刷新。
GARAGE_REPAIR_ORDER_CANCELLED t_order
t_order_detail
order_statuscancel_time,以及整单明细状态。
老出库同步事件 t_order
t_order_detail
t_order_outflow
t_order_summary
出库数量、出库状态、出库流水、汇总展示。
老撤销出库事件 t_order
t_order_detail
t_order_outflow
回滚出库数量和状态,并删除对应出库流水。

明细匹配规则对照

来源类型 / 场景 典型场景 当前匹配主键 说明
纯线下开单 站管家本地直接建销售单 invId 当前协议没有源订单行字段,线下消息按商品维度对齐。
线上订单初次落销售单 E站商城、E站维修、E站活动、E站 IM、机器人订单 invId 创建与修改消息里不再传 srcOrderEntryId,由消费端按商品主键匹配。
线上单在 DGJ 后续追加商品 人工加行、补料 invId DGJ 更新允许 replace 明细,前提是订单还没有履约痕迹。
内部派生单 / 出库维度派生单 线下转线上、履约派生 不依赖创建/修改消息 更多通过出库单事件补仓库、库区和履约维度信息。
历史迁移单 老数据补齐 invId 如果只有结果单据,没有行级来源信息,也按商品主键兜底。

当前重点关注点

需要继续盯的风险

  • 当前消息里去掉了 storageIdareaId,这两个维度应由出库单消息补齐。
  • DGJ COMPLETED 如果只是纯状态消息,不该误走明细 replace。
  • 已出库、已退款订单不能再被粗暴删明细,否则会影响 t_order_outflow 等关联。

比较稳的共识

  • DGJ updated 允许 replace 明细,但要加履约保护。
  • GRSPROD updated 现在按 invId 做增量同步,不做纯 replace。
  • 取消、完成、出库、撤销出库仍然应该维持各自独立事件,不要全部挤进 updated。