1. 文档目标

状态字典不能只写“数字等于什么”。真正可用于开发和排查的状态机还必须说明:

  • 状态属于哪个业务对象和字段;
  • 哪个动作、接口、MQ 或定时任务触发迁移;
  • 迁移允许的前置状态;
  • 迁移后要同步哪些数量、库存、资金和下游系统;
  • 哪些状态是终态,哪些允许回退或恢复;
  • 相同数值在不同枚举里为什么不能混用;
  • billStatus、orderType、srcOrderType、transType 各自解决什么问题。

本文适用于:

  • 判断页面按钮为什么不可用;
  • MQ 回调提示“状态错误或者消息重复”;
  • 单据状态与库存、付款、配送、活动状态不一致;
  • 新增状态、来源、订单类型或交易类型;
  • 评估补偿任务是否能安全重跑;
  • 排查历史数据中的废弃状态和兼容分支。
状态迁移来自当前代码静态核对。外部订单中心、支付中心、OA、配送中心的真实重试和状态合同需结合环境消息证据确认。

2. 先区分六个维度

维度回答的问题采购例子销售例子
billStatus / status这张单当前走到哪一步待支付、待出库、配送中待出库、部分出库、完成
orderType这张单本质是什么业务品类普通采购、退货、秒杀采购常由单据/出库类型表达
srcOrderType / sourceType它从哪里来预订单、秒杀、轮胎E站、机器人、SaaS
transType它造成什么交易方向采购、采退、入库销售、出库、销退
支付/核销状态钱处理到哪一步待支付、付款确认未收、部分收、全部收
数量状态商品在哪个履约阶段待发、在途、入库、退货未出、部分出、已出
flowchart LR
    DOC["一张业务单"] --> S["生命周期状态\nbillStatus"]
    DOC --> T["业务类型\norderType"]
    DOC --> SRC["来源\nsrcOrderType/sourceType"]
    DOC --> TRANS["交易方向\ntransType"]
    DOC --> MONEY["支付/核销状态"]
    DOC --> QTY["数量过程状态"]

六个维度可以同时存在。例如一张单可以是:

秒杀采购订单(orderType=30-Cxx-77)
+ 来源于秒杀(srcOrderType=13)
+ 采购交易(transType=170401)
+ 当前待支付(billStatus=10)
+ 在线支付(payment=1)
+ 明细待发数量尚未进入履约

3. 枚举入口地图

业务入口文件主要字段
采购application/KzData/Enums/PoOrderEnums.phpbillStatus, orderType, srcOrderType, payment, closeType
预订单PreOrderEnums.php主单状态、售后状态、退款状态
销售SaOrderEnums.php销售状态、出库状态、来源、支付、核销
销售出库SaInvoiceEnums.php出库状态、销退类型、来源、出库进度
秒杀FlashActivityEnums.php审批、启用、页面、商品、购物车、订单
渠道ChannelOrderEnums.php, ChannelAftersaleEnums.php渠道订单和售后字符串状态
微仓MoveMallEnums.php补货、退货、场景和支付
调拨TfInvoiceEnums.php, StfApplyEnums.php, StfInvoiceEnums.php站内/站间出入库状态
配送TransportEnums.php, ThirdDeliveryEnums.php自配送、三方配送、退回
财务PaymentEnums.php, StatementEnums.php收付款、对账、收款和发送任务
交易类型TransTypeEnums.php库存、账户、报表的业务方向

4. 采购主状态字典

4.1 状态值

值常量页面含义是否常见终态主要进入方式
0BILLSTATUS_DRAFT草稿否保存草稿、尚未提交
1BILLSTATUS_SUBMITED待处理/待审核否线下单提交、在线支付成功、退款中间恢复
2BILLSTATUS_AUDITING审核中否外部订单中心进入审核
3BILLSTATUS_AUDIT_PASS待出库否审核通过、售后确认仓库
4BILLSTATUS_DELIVERY配送中否采购发货或部分履约
5BILLSTATUS_FINISHED已完成通常是全部入库、退货退款完成等
8BILLSTATUS_AUDIT_UNPASS审核不通过通常是外部审核拒绝
9BILLSTATUS_CLOSED已关闭通常是主动关闭、行关汇总、业务关单
10BILLSTATUS_WAIT_PAY待支付否在线采购创建
11BILLSTATUS_WAIT_REFUND待退款否在线未发货退货审核通过等
12BILLSTATUS_PAY_OVERTIME已过期/支付超时不是绝对终态订单中心超时关闭消息
13BILLSTATUS_WAIT_STORAGE_IN采购退货待仓库入库否已发货/已入库采退进入仓库处理

4.2 采购不是单一路径

stateDiagram-v2
    [*] --> Draft: 保存草稿
    Draft --> Submitted: 提交线下单
    [*] --> WaitPay: 创建在线支付单
    WaitPay --> Submitted: 支付成功
    WaitPay --> PayOvertime: 超时关闭消息
    PayOvertime --> Submitted: 迟到的支付成功回调
    Submitted --> Auditing: 订单中心受理
    Submitted --> AuditPass: 部分回调直接通过
    Auditing --> AuditPass: 审核通过
    Submitted --> AuditUnpass: 审核拒绝
    Auditing --> AuditUnpass: 审核拒绝
    AuditPass --> Delivery: 上游发货
    Delivery --> Finished: 全部入库/履约完成
    AuditPass --> Closed: 未发货关闭
    Delivery --> Closed: 部分关闭并完成剩余履约
    Submitted --> WaitRefund: 在线未发货退货审核通过
    WaitRefund --> Finished: 退款成功
    AuditPass --> WaitStorageIn: 已履约采退
    WaitStorageIn --> Finished: 退货入库/结算完成

上图是多业务路径并集,不代表任意采购类型都允许所有箭头。

4.3 已观察到的迁移合同

动作/事件前置状态后置状态触发方关键副作用
普通提交草稿已提交PC/Service创建/同步采购业务
在线支付成功待支付或支付超时已提交paycenter_pay_result付款主明细、账户、payinfo、支付时间;秒杀转已支付
支付超时非关闭/非已过期在线单支付超时orderCenterOrderCancel释放活动/预订单数量或专属额度,秒杀释放锁量
订单审核通过已提交/审核中待出库订单中心允许后续配送出库
订单审核拒绝已提交/审核中审核不通过订单中心退回部分活动/数量,写审核意见
采购发货待出库/配送中/完成兼容配送中配送/订单/SaaS MQ写发货明细,待发转在途,发库存事件
全部入库配送中已完成采购入库写入库和库存,减少在途
未发货退货审核已提交待退款售后审核待发转待退
退款成功待退款已完成支付/订单中心负付款、退款明细、采退完成
关闭待出库/配送中等已关闭或保持配送中人工/MQ关闭数量、活动释放、库存事件

4.4 非法或危险迁移

尝试当前代码表现风险
已支付状态再次消费支付成功抛“状态错误或者消息重复”,返回 NACK重试风暴或死信,需要幂等识别
支付超时后支付成功允许恢复为已提交专属额度可能变负,代码已有告警说明
已关闭/已超时再次超时关闭过滤并 ACK幂等但需确认秒杀/活动已释放
非待退款单消费退款成功抛状态非法外部与本地时序不一致会卡住退款
采购退货审核回调当前部分入口开头直接 ACK,旧代码不可达逻辑已迁移 dgi-purchase-service,DGJ 不再是唯一事实源

5. 采购订单类型 orderType

5.1 完整类型字典

值常量业务含义备注
00-Cxx-00ORDERTYPE_INI期初订单历史初始化
00-Cxx-01ORDERTYPE_ACTIVITY_00老活动订单已弃用,兼容历史
30-Cxx-11ORDERTYPE_ACTIVITY_30老活动订单已弃用,兼容历史
00-Cxx-02ORDERTYPE_SETMENU老套餐订单已弃用
30-Cxx-15ORDERTYPE_DIRECT云仓直发新类型
30-Cxx-02ORDERTYPE_DIRECT_OLD云仓直发老类型
30-Cxx-08ORDERTYPE_PRE_ORDER服务站预订采购与新 PreOrder 来源要区分
30-Cxx-04ORDERTYPE_RETURN_LESS其他退货采购退货
30-Cxx-05ORDERTYPE_RETURN_UNSALABLE滞销品退货可关单入库类型
30-Cxx-06ORDERTYPE_RETURN_BADGOODS不良品退货轮胎理赔也可能使用
30-Cxx-16ORDERTYPE_RETURN_DIRECT直采退货采购退货
30-Cxx-17ORDERTYPE_RETURN_UNFILLED未发货退货常进入待退款
30-Cxx-18ORDERTYPE_RETURN_FIRST首配退货可关单入库类型
30-Cxx-03ORDERTYPE_SUPPLEMENT_ORDER多发补单补齐上游多发
30-Cxx-01ORDERTYPE_NORMAL_ORDER普通采购主路径
30-Cxx-40ORDERTYPE_KA_ORDERKA 订单大客户采购语义
30-Cxx-20ORDERTYPE_BAD_GOOD不良品订单非退货常量
30-Cxx-07ORDERTYPE_DISPATCH_ORDER急件到付配送模式特殊
30-Cxx-70ORDERTYPE_SELF_PICK_ORDER急件自提自提流程
30-Cxx-09ORDERTYPE_FIRST_ORDER首批配货首配
30-Cxx-10ORDERTYPE_HDMZ_ORDER活动满赠活动来源
30-Cxx-23ORDERTYPE_ZSFL_ORDER专属返利额度/返利副作用
30-Cxx-50ORDERTYPE_BU_ORDER多供应商订单可能拆供应商
30-Cxx-60ORDERTYPE_BU_BT_ORDER多供应商授信订单支付/授信特殊
30-Cxx-71ORDERTYPE_PRE_BT_ORDER新预售专属授信预售 + 授信
30-Cxx-80ORDERTYPE_BUYING_TASK采购任务订单经营任务
30-Cxx-81ORDERTYPE_NEW_TASK上新任务订单上新任务
30-01ORDERTYPE_SELF_ORDER自制赠品订单格式与其他类型不同
30-Cxx-74ORDERTYPE_SPEED_ORDER周转仓/半日达物流特殊
30-Cxx-24ORDERTYPE_PROMOTION_ORDER不良品促销产品促销
30-Cxx-75ORDERTYPE_GIFT_ACTIVITY_ORDER赠品活动采购新赠品活动
30-Cxx-77ORDERTYPE_FLASH_ORDER秒杀采购ORDER_TYPE_MAP 显示为“折扣订单”

5.2 类型相关辅助维度

字段值含义
payment0线下挂账
payment1在线支付
closeType0未关闭
closeType1部分关闭
closeType2整单关闭
orderCate0历史普通
orderCate1现货
orderCate2意向
orderCate3多发补单
orderCate4活动
orderCate5专属订单
sendMode-1/0/1默认/普通发货/直发
signStatus0/1/2未签收/部分签收/全部签收
document_type0/1普通采购/上新采购

6. 采购来源 srcOrderType

值常量来源关键关联/副作用
0SRC_ORDER_TYPE_NORMAL普通无特殊来源
1SRC_ORDER_TYPE_ACTIVITY普通活动关闭/超时可能退活动数量
2SRC_ORDER_TYPE_PACKAGE套餐注释为未使用
3SRC_ORDER_TYPE_PDM撮合平台外部平台关系
8SRC_ORDER_TYPE_PORETURN采购退货关联原采购
9SRC_ORDER_TYPE_DIFF差异订单差异补偿
10SRC_ORDER_TYPE_ONLINE_REFUND在线未发货采购退货退款路径
11SRC_ORDER_TYPE_TYRE轮胎宝退货理赔联动
12SRC_ORDER_TYPE_PRE_ORDER新预订单提货超时退回提货数量
13SRC_ORDER_TYPE_FLASH_ACTIVITY秒杀支付转 used、关闭释放 locked/used
flowchart TD
    PO["采购单状态变化"] --> SRC{"srcOrderType"}
    SRC -->|1 活动| ACT["退回活动商品数量"]
    SRC -->|11 轮胎| TYRE["更新理赔状态"]
    SRC -->|12 预订单| PRE["退回/扣减提货数量"]
    SRC -->|13 秒杀| FLASH["locked/used 与秒杀订单联动"]
    SRC -->|0 普通| NORMAL["普通采购副作用"]

7. 新预订单状态机

7.1 主单状态

值常量含义主要迁移
1STATUS_TO_PAY待支付创建后等待支付
2STATUS_TO_PICK待提货支付成功
3STATUS_PICKING提货中部分生成采购提货单
4STATUS_PICK_FINISH全部提货可进入售后/退款收尾
9STATUS_CANCEL用户取消未支付主动取消
10STATUS_AUTO_CANCEL超时自动取消定时/订单中心超时
11STATUS_CLOSED已关闭业务关闭
12STATUS_ORDER_FINISH已完成全部提货后退款完成
stateDiagram-v2
    [*] --> ToPay
    ToPay --> ToPick: 支付成功
    ToPay --> Cancel: 用户取消
    ToPay --> AutoCancel: 超时
    ToPick --> Picking: 部分提货
    Picking --> PickFinish: 全部提货
    PickFinish --> OrderFinish: 退款/售后收尾完成
    ToPick --> Closed: 关闭
    Picking --> Closed: 关闭

7.2 预订单售后和退款

维度值含义
售后1待审核
售后4审核通过、待退款
售后8已取消
售后9退款完成
退款0无退款
退款1退款中
退款2退款完成

主单完成、售后完成和退款完成是三个字段事实,不能只查一个状态。

8. 销售主状态机

8.1 状态值

值常量含义数量条件
0SA_STATUS_WAIT待出库有效出库数量为 0,仍可出库
1SA_STATUS_OUT_FEW部分出库0 < 有效出库 + 关闭 < 销售总量
2SA_STATUS_OUTED已完成有效出库/关闭覆盖销售总量
3SA_STATUS_CLOSE已关闭停止后续出库

SaInvoiceSer::getOutboundQty() 会过滤已撤销出库,再根据销售总量、有效出库数量和关闭数量重算销售状态。

stateDiagram-v2
    [*] --> Wait
    Wait --> Partial: 部分出库
    Wait --> Finished: 一次全部出库
    Partial --> Finished: 剩余全部出库/关闭
    Wait --> Closed: 关闭
    Partial --> Closed: 关闭剩余行
    Finished --> Partial: 撤销部分出库后重算
    Finished --> Wait: 全部出库撤销后重算

销售状态可能因撤销出库回退,不是严格单向状态机。

8.2 销售来源

值常量展示来源支付/场景
0ORDER_SOURCE_TYPE_PT销售开单PC 普通开单
1ORDER_SOURCE_TYPE_KWERP 订单快维 SaaS
2ORDER_SOURCE_TYPE_MOVE微仓订单历史兼容
5ORDER_SOURCE_TYPE_APP_SALE维修厂 APP 普通已废弃兼容
6ORDER_SOURCE_TYPE_APP_ACTIVITY维修厂 APP 活动已废弃兼容
7ORDER_SOURCE_TYPE_KW_APPLET快维 SaaS 小程序历史兼容
8ORDER_SOURCE_TYPE_APPLET_CHARGEE站商城挂账
9ORDER_SOURCE_TYPE_APPLETE站商城微信
10ORDER_SOURCE_TYPE_MOVE_SENDE站维修挂账
11ORDER_SOURCE_TYPE_MOVE_PICK微仓领料挂账
12ORDER_SOURCE_TYPE_MOVE_SHOP微仓铺货微仓
13ORDER_SOURCE_TYPE_TRANSFER_OFFLINE_ONLINE线下转线上铺货微仓
14ORDER_SOURCE_TYPE_ACTE站活动小程序活动
15ORDER_SOURCE_TYPE_MOVE_SEND_WXE站维修微信
16ORDER_SOURCE_TYPE_ROBOTAI 助手订单挂账
17ORDER_SOURCE_TYPE_APP_IME站 APP IM挂账
18ORDER_SOURCE_TYPE_APP_IM_WXE站 APP IM微信
19ORDER_SOURCE_TYPE_APP_SHOPE站 APP 商城挂账
20ORDER_SOURCE_TYPE_APP_SHOP_WXE站 APP 商城微信
21ORDER_SOURCE_TYPE_APP_ACTE站 APP 活动挂账
22ORDER_SOURCE_TYPE_APP_ACT_WXE站 APP 活动微信

8.3 销售支付和核销

字段值含义
payType0挂账
payType1现金
payType2微信
hxStateCode0未收款
hxStateCode1部分收款
hxStateCode2全部收款
billNo_type0销售
billNo_type1普通铺货
billNo_type2微仓铺货

9. 销售出库状态机

9.1 状态值

值常量含义备注
0BILL_STATUS_RE_OUTED已出库老销退单兼容
1BILL_STATUS_OUTED已出库库存通常已扣减
2BILL_STATUS_SENDIND派送中配送已开始
3BILL_STATUS_ARRIVE已送达可进入对账
4BILL_STATUS_CHECK已对账未完全收款
5BILL_STATUS_OVER已核销金额已覆盖或零金额
6BILL_STATUS_CANCELED已撤销库存应反向恢复
stateDiagram-v2
    [*] --> Outed
    Outed --> Sending: 配送中
    Sending --> Arrive: 已送达
    Sending --> Outed: 配送取消/退回
    Arrive --> Check: 对账但未全部收款
    Arrive --> Over: 零金额或已全收
    Check --> Over: 后续收款完成
    Check --> Arrive: 撤销对账且未收款
    Outed --> Canceled: 撤销出库
    Sending --> Canceled: 允许的撤销路径

9.2 迁移和副作用

动作前置状态后置状态副作用
创建销售出库销售待出/部分出已出库扣库存、重算销售状态、同步下游
自配送开始已出库派送中配送信息和时间
配送完成派送中已送达签收/送达信息
配送取消派送中已出库清理或保留配送关系,允许重新配送
对账已送达或对账前状态已对账/已核销对账单变已核对,按金额决定状态
撤销对账已对账且未收款已送达有收款记录的行不会回退
收款完成已对账已核销hxStateCode=2
撤销出库未撤销已撤销反向库存、销售状态回退、同步撤销

9.3 出库辅助类型

字段值含义
return_type0普通退货
return_type1不良品退货
sourceType2移动服务站退货
sourceType3出库撤销关联原出库
sourceType4核销式撤销
sourceType5/6/7APP 普通/活动/退货
invoice_type1/2/3销售/铺货/销退
out_status0/1/2/3/4未出/全出/撤销/结单停止/关闭销售

10. 秒杀多维状态机

秒杀至少有六套状态,任何一套单独满足都不能证明可购买。

10.1 状态字典

维度字段值含义
申请apply_status0/1/2/3草稿/审批中/通过/驳回
OAoa_status0/1/2/3草稿/审批中/通过/驳回
启用enable_status0/1/2草稿/启用/提前结束
页面计算运行时1/2/3未开始/进行中/已结束
商品商品状态0/1/2/3待开始/进行中/已结束/失效
购物车status0/1失效/有效
订单order_status0/1/2/3/4已创建/待支付/已支付/取消/关闭

10.2 活动审批和启用

stateDiagram-v2
    [*] --> Draft
    Draft --> OaWait: 提交 OA
    OaWait --> Passed: OA 通过
    OaWait --> Rejected: OA 驳回
    Rejected --> Draft: 编辑后重提
    Passed --> Enabled: 启用
    Enabled --> EndEarly: 提前结束

页面“进行中”还要求当前时间位于活动窗口,不能直接等同于 enable_status=1。

10.3 秒杀订单

stateDiagram-v2
    [*] --> Created: 创建快照
    Created --> WaitPay: 采购单生成并待支付
    WaitPay --> Paid: 支付中心成功
    Created --> Cancel: 用户取消
    WaitPay --> Cancel: 用户主动取消
    WaitPay --> Closed: 采购超时/关闭
    Paid --> Closed: 采购行关闭,可能部分释放 used
迁移数量副作用关联采购副作用
创建/待支付locked_qty += qty创建 30-Cxx-77 采购单
支付成功locked_qty -= qty, used_qty += qty采购从待支付变已提交
主动取消locked_qty -= qty关闭关联采购
支付超时/采购关闭按未支付释放 locked秒杀单变关闭
已支付采购行关闭按关闭差量减少 used_qty明细记录 closed_qty 防重复

10.4 可买条件

flowchart TD
    A["审批/OA 通过"] --> B["enable_status=1"]
    B --> C["当前时间在窗口"]
    C --> D["商品状态可售"]
    D --> E["服务站命中范围"]
    E --> F["物理/指定/预留库存足够"]
    F --> G["活动余量 = total-locked-used"]
    G --> H["站点/用户限购未超"]
    H --> BUY["允许加购/下单"]

11. 渠道订单和售后

11.1 渠道订单

值含义主要迁移
created待审核创建后等待人工/自动审核
wait_ship待发货审核通过;DCD 某些创建路径可直接进入
part_ship部分发货明细发货数量未覆盖全部
finish已完成全部发货/签收完成
cancel已取消审核拒绝或取消
stateDiagram-v2
    [*] --> Created
    [*] --> WaitShip: DCD 特定创建路径
    Created --> WaitShip: 审核通过
    Created --> Cancel: 审核拒绝
    WaitShip --> PartShip: 部分发货
    WaitShip --> Finish: 全部发货
    PartShip --> Finish: 剩余发货

11.2 渠道售后

值含义动作
created退单创建待审核
pass待收货审核通过
reject已拒绝审核拒绝
finish已完成退货入库/退款完成
stateDiagram-v2
    [*] --> Created
    Created --> Pass: action=pass
    Created --> Reject: action=reject
    Pass --> Finish: 退货处理完成

渠道状态都是字符串;CHS/CHR 是单号前缀;180601/180602 是交易类型。三者不能交叉比较。

12. 微仓补货、退货和调拨

12.1 补货主单

值常量含义实际代码说明
0MOVE_SUPPLY_STATUS_WAIT_OUT待出库枚举存在,当前创建路径直接生成已出库
1MOVE_SUPPLY_STATUS_OUTED待派送addMoveSupply() 创建即进入
2MOVE_SUPPLY_STATUS_DELIVERY派送中opt_tag=DELIEVER
3MOVE_SUPPLY_STATUS_WAIT_SHELF待上架opt_tag=CONFIRM
4MOVE_SUPPLY_STATUS_SHELF已上架对应调拨全部入库
5MOVE_SUPPLY_STATUS_CANCEL已取消取消路径需专项核对
stateDiagram-v2
    [*] --> Outed: 创建并完成调出
    Outed --> Delivery: DELIEVER
    Delivery --> Outed: DEL_CANCEL
    Delivery --> WaitShelf: CONFIRM
    WaitShelf --> Shelf: 全部扫码上架/调入

updateMsStatus() 对不符合前置状态的请求统一抛“该订单状态已改变”。

12.2 微仓退货

值含义迁移条件
1已退货/已出库创建退货并从微仓移出
2部分上架部分商品完成服务站上架
3已上架/已入库全部明细 is_shelve=1

12.3 站内调拨

值常量含义
1TF_BILL_STATUS_DRAFT草稿
2TF_BILL_STATUS_OUTED调出未调入
3TF_BILL_STATUS_IN已调出已调入
4TF_BILL_STATUS_IN_FEW已调出部分调入
5TF_BILL_STATUS_IN_CLOSE调入关闭,MAP 未列出

12.4 站间调拨申请和实单

对象值含义
申请0待出库
申请1待入库
申请2已入库
申请3发货方驳回
申请4申请方取消
实单1出库完成
实单2入库完成

补货单、调拨单、库存流水三者状态必须一起检查;补货已上架但调拨未全部调入属于不一致。

13. 配送状态映射

13.1 自配送中心

TMS 状态含义DGJ 出库状态
10待揽收已出库 1
20配送中派送中 2
90已送达已送达 3
99已取消回退已出库 1

13.2 三方配送

状态含义常见 DGJ 映射
10待接单已出库
20待取货已出库
21骑手到店已出库/派送准备
30配送中派送中
90已完成已送达
98已退回回退已出库并处理退回
99已取消回退已出库
flowchart LR
    EXT["TMS/美团/达达状态"] --> MAP["TransportSer / InvSaService 映射"]
    MAP --> INV["销售出库 billStatus"]
    INV --> UI["页面配送/送达/对账按钮"]
    MAP --> REL["配送关系与退回状态"]

14. 收付款和对账状态

14.1 收付款单

值常量含义备注
0BILLSTATUS_CONFIRMED已确认老状态
1BILLSTATUS_SUBMITED已提交待处理语义需结合入口
2BILLSTATUS_CONFIRMED1已确认V2 兼容
6BILLSTATUS_CANCELED已撤销需反向账户和核销

14.2 对账单

维度值含义
对账主单0/1草稿/已核对
收款状态0/1/2未收/部分收/已收
生成任务0/1/2/3未执行/已执行/成功/失败
发送状态1/2/3/4/5待处理/处理中/成功/失败/无需发送
机器人发送0/1/2未发送/已发送/失败
stateDiagram-v2
    [*] --> Draft
    Draft --> Checked: 核对
    Checked --> Draft: 取消核对且未发生收款
    state Checked {
        [*] --> Unreceived
        Unreceived --> Partial: 部分收款
        Partial --> Received: 全部收款
        Unreceived --> Received: 一次全收
    }

对账时,来源出库单金额已全收或金额为 0 会直接变已核销 5,否则变已对账 4。取消核对只把“仍为已对账且没有收款”的出库单回退到已送达。

15. transType 交易类型字典

15.1 库存和单据

值常量业务语义典型方向
103091TRANSTYPE_TRANSFER站内调拨一出一入
103092TRANSTYPE_TRANSFER_S站间调拨跨站一出一入
150501TRANSTYPE_PU_PURCHASE采购入库库存增加
150502TRANSTYPE_PU_SALE_RETURN销售退货入库库存增加
150601TRANSTYPE_SA_INVOICE_SALE销售出库库存减少
150602TRANSTYPE_SA_INVOICE_RETURN销售退货按退货实现解释符号
150706TRANSTYPE_OI_IN其他入库增加
150806TRANSTYPE_OI_OUT其他出库减少
150701TRANSTYPE_OI_PROFIT盘盈增加
150801TRANSTYPE_OI_LOSS盘亏减少
170401TRANSTYPE_PO_PURCHASE采购订单采购业务
170402TRANSTYPE_PO_PURCHASE_RETURN采购退货退货业务
170403TRANSTYPE_PO_RETURN_CLOSE采退关闭关闭
170410TRANSTYPE_PO_OUT采购发货/出库在途增加
170503TRANSTYPE_PO_CLOSE采购关闭待发减少
170504TRANSTYPE_PUO_CLOSE订单退货关闭退货关闭
170502TRANSTYPE_SA_SALE_ORDER普通销售单销售业务
180001TRANSTYPE_INVEN_INI期初数量初始化
180510TRANSTYPE_INVEN_OO库存盘点盘点
180601TRANSTYPE_BIG_SALE大客户销售渠道销售
180602TRANSTYPE_BIG_SALE_RETURN大客户销退渠道退货

15.2 资金

值常量含义
153001TRANSTYPE_PAYMENT_RECEIPT销售收款
153101TRANSTYPE_PATMENT_ADD付款
153401TRANSTYPE_QTSR其他收入
153402TRANSTYPE_QTZC其他支出
154001TRANSTYPE_TRANSFER_IN_PAY调拨收款
154002TRANSTYPE_TRANSFER_OUT_PAY调拨付款
155001TRANSTYPE_PAYMENT_YSK预收款
155002TRANSTYPE_PAYMENT_RETURN账户退款
155003TRANSTYPE_PAYMENT_YEZC余额支出
155004TRANSTYPE_PAYMENT_QCHK期初还款
155005TRANSTYPE_PAYMENT_QCQK期初欠款
170001TRANSTYPE_PREORDER预订单
170002TRANSTYPE_PREORDER_RETURN预订单售后

15.3 套包和 SaaS 流水

值含义
191101拆包出库
191102拆包入库
191201组包出库
191202组包入库
1001SaaS 铺货入库
1002SaaS 铺货退单出库
2001SaaS 领用出库
2002SaaS 撤单入库
3001修理厂盘亏/补领
4001期初入库
5001/5002服务站盘盈/盘亏

15.4 已发现的语义冲突

冲突当前事实影响
170502 重用同时定义普通销售单和货位调整入仅凭数值无法区分业务来源
150602 MAP 重复键MAP 先写“销售退货”,后写“销售退款”PHP 后项覆盖前项,展示标签变成销售退款
150501 注释与 MAP常量注释为采购入库,MAP 写采购付款报表/日志名称可能误导
170403/170503/170504三种关闭语义并存关闭单、采退关闭、订单退货关闭要按表和来源区分
数字与字符串并存DGJ 主交易多为整数,SaaS 流水为字符串严格比较和序列化可能不一致

16. 状态、副作用和事实一致性

flowchart TD
    ACTION["业务动作/MQ"] --> GUARD["校验前置状态"]
    GUARD --> STATE["更新主单状态"]
    STATE --> DETAIL["更新明细/数量过程"]
    DETAIL --> INV["库存流水/实时库存"]
    DETAIL --> MONEY["付款/账户/核销"]
    DETAIL --> EXT["活动/渠道/预订单/理赔"]
    STATE --> MQ["发送下游消息"]
    MQ --> REPORT["DWD/报表"]

一个状态迁移只有在相关副作用完成后才是业务完整的。排查时按下表判断:

状态变化必查副作用
采购待支付 -> 已提交付款主明细、账户、payinfo、活动/秒杀
采购待出库 -> 配送中发货明细、数量待发转在途、库存事件
配送中 -> 完成入库单、在途减少、库存增加、成本
销售待出 -> 完成出库主明细、库存减少、销售数量重算
出库已送达 -> 对账/核销对账单、收款金额、核销状态
秒杀待支付 -> 已支付locked 减少、used 增加、采购状态
微仓待上架 -> 已上架调拨全部入库、明细上架、货位库存

17. 状态排查 SQL

17.1 采购

SELECT id, sid, billNo, billStatus, orderType, srcOrderType,
       transType, payment, closeType, orderCate, sendMode,
       srcOrderId, srcOrderNo, paymentTime, modifyTime, isDelete
FROM t_scm_po_order
WHERE sid = :sid AND billNo = :bill_no;

17.2 销售和出库

-- 替换真实 16 分片
SELECT id, billNo, billStatus, sourceType, payType,
       hxStateCode, billNo_type, srcOrderId, srcOrderNo
FROM t_scm_sa_order_{sid_mod_16}
WHERE sid = :sid AND billNo = :sale_no;

-- 替换真实 64 分片
SELECT id, billNo, billStatus, transType, sourceType,
       hxStateCode, return_type, srcOrderId, srcOrderNo,
       delieverTime, hasTime, cancelTime
FROM t_scm_sa_invoice_0_{sid_mod_64}
WHERE sid = :sid
  AND (billNo = :invoice_no OR srcOrderNo = :sale_no);

17.3 秒杀与采购联动

SELECT id, sid, bill_no, activity_id, order_status,
       pay_time, cancel_reason, create_time
FROM t_flash_order
WHERE sid = :sid AND bill_no = :flash_no;

SELECT id, activity_id, sku_id, total_qty, locked_qty, used_qty,
       status
FROM t_flash_activity_goods
WHERE activity_id = :activity_id;

SELECT id, billNo, billStatus, orderType, srcOrderType,
       srcOrderId, srcOrderNo
FROM t_scm_po_order
WHERE sid = :sid
  AND srcOrderType = 13
  AND (srcOrderId = :flash_order_id OR srcOrderNo = :flash_no);

17.4 状态时间线

SELECT iid, log, operateName, createTime
FROM t_scm_po_log
WHERE iid = :po_order_id
ORDER BY createTime, id;

SELECT iid, log, operateName, createTime
FROM t_scm_sa_log
WHERE iid = :sa_invoice_id
ORDER BY createTime, id;

日志字段以目标环境 DDL 为准;若业务日志缺失,还要查 MQ 和应用日志。

18. 代码检索命令

rg -n "BILLSTATUS_|ORDERTYPE_|SRC_ORDER_TYPE_" application/KzData/Enums/PoOrderEnums.php
rg -n "SA_STATUS_|OUT_BILLSTATUS_|ORDER_SOURCE_TYPE_" application/KzData/Enums/SaOrderEnums.php
rg -n "BILL_STATUS_|INVOICE_TYPE_|OUT_STATUS_" application/KzData/Enums/SaInvoiceEnums.php
rg -n "ORDER_STATUS_|APPLY_STATUS_|ENABLE_STATUS_" application/KzData/Enums/FlashActivityEnums.php
rg -n "MOVE_SUPPLY_STATUS_|MOVE_RE_STATUS_" application/KzData/Enums/MoveMallEnums.php
rg -n "TRANSTYPE_|TRANS_TYPE_" application/KzData/Enums/TransTypeEnums.php

找所有状态写入点:

rg -n "billStatus.*=|bill_status.*=|order_status.*=|setStatus\(" application/Services application/service application/controllers/tasks

找前置状态守卫:

rg -n "状态错误|状态非法|状态已改变|不能取消|不能撤销|in_array.*STATUS" application/Services application/service application/controllers/tasks

19. 常见问题故障树

19.1 回调提示状态错误

flowchart TD
    ERR["状态错误/消息重复"] --> OBJ["确认对象和字段"]
    OBJ --> CUR["查询当前状态和更新时间"]
    CUR --> LOG["查业务日志与 MQ message id"]
    LOG --> DUP{"已成功处理过"}
    DUP -->|是| IDEM["应识别为幂等成功,检查为何 NACK"]
    DUP -->|否| ORDER["检查消息乱序/人工提前操作"]
    ORDER --> SIDE["核对库存/资金/活动副作用"]

19.2 页面状态正确但业务不完整

页面状态仍需核对
采购已完成入库主明细、库存流水、实时库存
销售已完成有效出库单、库存、下游同步
出库已核销收款明细、账户流水、对账单
秒杀已支付采购状态、locked/used、支付表
微仓已上架调拨状态、明细货位和实时库存
渠道已完成每行发货/签收数量、销售出库

20. 新增或修改状态的实施清单

  1. 在 Enum 中定义值、名称和终态属性;
  2. 明确允许的前置状态和迁移图;
  3. Controller/Service 增加统一状态守卫;
  4. 数据库字段类型能容纳新值;
  5. 列表筛选、详情、按钮、导出同步;
  6. MQ 生产者和消费者更新合同;
  7. 重复消息按业务唯一键幂等;
  8. 定时补偿知道新状态是否可处理;
  9. 库存、资金、活动、来源业务副作用齐全;
  10. 报表/DWD 状态映射更新;
  11. APP、SaaS、OPS、订单中心、支付和配送完成联调;
  12. 历史数据和废弃状态仍可读取;
  13. 日志记录前后状态、动作、操作人和 request/message id;
  14. 回滚方案不是简单改回旧状态,而是反向处理副作用。

21. 回归清单

21.1 采购和预订单

  • 草稿、线下提交、在线待支付两种起点;
  • 支付成功、重复成功、超时、超时后迟到支付;
  • 审核通过、拒绝、未知结果;
  • 待发、部分发、全部发、部分入、全部入;
  • 未发货退货、已入库退货、退款、关闭;
  • 普通、活动、预订单、秒杀、轮胎、专属授信副作用;
  • 预订单部分提货、全部提货、用户取消、自动取消和售后。

21.2 销售和配送

  • 待出、部分出、全部出和关闭;
  • 部分撤销、全部撤销后状态回退;
  • 自配送和三方配送所有外部状态;
  • 配送取消/退回后恢复已出库;
  • 已送达、对账、部分收款、全收、核销;
  • 有收款和无收款两类取消对账;
  • 普通、E站、APP、机器人、SaaS 来源。

21.3 活动、渠道和微仓

  • 秒杀审批通过/拒绝、启用、提前结束和时间状态;
  • 秒杀创建、待支付、支付、取消、关闭和部分采购行关闭;
  • 渠道审核通过/拒绝、部分发货、全部发货和售后;
  • 微仓派送、取消派送、确认、部分上架、全部上架;
  • 调拨主单和补货/退货主单状态一致。

22. 当前代码风险

22.1 状态枚举分散且缺少统一迁移表

大量 Service 直接赋值,状态守卫和副作用散落在 Controller、Service、MQ 任务中。新增状态容易漏列表、报表、消息或补偿。

22.2 支付重复消息以异常 NACK 表达

已成功处理的重复消息会因为采购不再处于待支付/超时而抛错。需要用上游支付单号或消息 ID 建立幂等成功分支。

22.3 支付超时可恢复但额度可能为负

迟到支付把采购恢复为已提交;专属授信代码明确说明重新扣减可能产生负额度,必须建立业务决策和告警。

22.4 迁移服务后保留不可达旧代码

OrderCenterNotify::orderCenterAfterSaleAudit() 开头直接 ACK,后续旧实现不可达。阅读状态机时必须先确认实际责任服务。

22.5 相同状态值跨对象含义完全不同

采购 1 是已提交,销售 1 是部分出库,出库 1 是已出库,付款 1 是已提交,秒杀 1 是待支付。禁止裸数字跨域复用。

22.6 transType 存在冲突和映射覆盖

170502、150501、150602 的定义/标签存在歧义。修改前必须先统计真实表数据和所有调用方。

22.7 终态不是简单按最大值判断

采购状态值不连续,支付超时 12 可恢复;销售完成 2 可因撤销回退;出库已核销 5 后还有撤销状态 6。不能用 status >= N 作为通用终态判断。

23. 代码证据索引

结论文件
采购状态、类型、来源和辅助维度application/KzData/Enums/PoOrderEnums.php
支付成功/迟到支付恢复application/controllers/tasks/PayCenterNotify.php
审核、退款、超时和采购 MQ 状态application/controllers/tasks/OrderCenterNotify.php
采购履约状态重算application/service/scm/InvPoService.php
预订单状态application/KzData/Enums/PreOrderEnums.php
销售和来源状态application/KzData/Enums/SaOrderEnums.php
出库和销退状态application/KzData/Enums/SaInvoiceEnums.php
销售出库数量重算application/Services/SaOrders/SaInvoiceSer.php
配送状态映射application/Services/Transport/TransportSer.php, application/service/scm/InvSaService.php
秒杀状态和副作用application/KzData/Enums/FlashActivityEnums.php, application/Services/Activity/FlashSaleSer.php
渠道订单和售后ChannelOrderEnums.php, ChannelAftersaleEnums.php, application/Services/Channel/*
微仓补货/退货MoveMallEnums.php, MoveSupplySer.php, MoveReOdSer.php
调拨TfInvoiceEnums.php, StfApplyEnums.php, StfInvoiceEnums.php
对账StatementEnums.php, application/Services/Statement/StatementSer.php
交易类型application/KzData/Enums/TransTypeEnums.php

24. 仍需环境确认

  1. 生产历史数据中所有未在 Enum MAP 出现的状态值;
  2. 外部订单中心的审核、关闭、退款状态和乱序保证;
  3. 支付中心重复回调、迟到支付和退款消息的官方合同;
  4. 采购售后迁移到 dgi-purchase-service 后的真实状态责任边界;
  5. 每个 MQ 消费者对非法状态的 ACK/NACK、重试和死信策略;
  6. 销售状态重算是否覆盖所有老出库和软删数据;
  7. 对账单已核对后的撤销和收款回滚业务规则;
  8. 微仓取消 5 的真实入口及其调拨/库存副作用;
  9. TF_BILL_STATUS_IN_CLOSE=5 的页面名称和可操作动作;
  10. transType 冲突值在生产各表的真实分布和报表解释;
  11. 废弃来源类型是否仍有外部系统持续发送;
  12. 是否可建立统一的状态迁移审计表,保存对象、前后状态、动作、请求 ID 和副作用结果。

环境核对结果要回填本文;不能仅以 Enum 注释替代跨系统状态合同。

请求-日志-数据变更追踪卡

多入口请求链路

场景调用方与入口请求载荷/上下文Controller/ConsumerService/Provider汇合点最终业务事实
用户动作迁移保存、提交、审核、关闭、出入库按钮对象 ID、动作、当前版本/状态领域 ControllerService + Enum 校验对象主表 status仅允许白名单中的 old -> new
外部回调迁移支付/OA/配送/订单中心 MQ外部状态、业务单号、消息键tasks/*Notify.php回调 Service来源单号映射的本地对象外部状态转换为本地状态,不直接照抄
定时补偿迁移超时/漏同步任务状态、时间窗、业务 IDtasks/*Task.php补偿 Service状态 + 最终业务事实只推进满足事实条件的记录
报表解释报表/导出/搜索状态码、类型码、transType查询 ControllerEnum 映射/Report Service同一原始状态字段展示名称不改变存储值

日志证据矩阵

| 链路段 | 日志来源 | 可检索锚点 | 成功信号 | 失败信号 | 与下一段关联方式 | | --- | --- | --- | --- | --- | --- | --- | | 动作请求 | Controller 日志 | request_id、业务单号、action、请求状态 | Service 接受动作 | 非法动作、无权限、并发版本冲突 | 业务单号查迁移前后快照 | | 状态校验 | Service/Enum 异常 | Enum 常量、oldStatus、目标状态 | 命中允许分支 | default/unsupported、状态已变化 | 方法分支对应主表更新 SQL | | 回调映射 | Consumer 日志 | 外部状态、消息 ID、来源单号 | 映射后状态推进并 ACK | 未知外部状态、旧消息导致回退 | 来源单号关联本地主表和关系表 | | 补偿 | Task 日志 | task、批次、业务 ID、最终事实 | 影响行数与候选数可对账 | 重复副作用、状态无变化但持续重试 | 批次列表回查状态和关联事实 |

环节数据变更台账

步骤代码位置事务读取事实写入表/缓存/MQ字段或数量变化回查证据
读取定义application/KzData/Enums/*Enums.php事务外常量值、注释、映射数组无代码常量 -> 存储值 -> 展示名Enum 文件与真实行抽样
校验当前态领域 Service事务内并加必要行锁主表 status、类型、来源无不合法时零写入异常码、更新前快照
执行动作领域 Service/Model本地事务当前态和动作前置事实主表、明细/日志status: old -> new;相关数量同步变化影响行数、更新时间、数量等式
发送事件MqSer/Providercommit 后异步边界新状态与业务快照MQ/外部系统本地 new -> 外部待同步routing key、业务键、ACK
幂等重放Consumer/Task单消息/单记录事务当前态是否已达到目标主表或无写入已完成则 new -> new 且副作用 0 次重放前后状态、流水条数不变

子模块追踪:po-status 采购主状态机

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
主动作PC/App 提交、支付、发货、入库、关闭sid、采购 billNo、当前 statusapplication/KzData/Enums/PoOrderEnums.php -> application/service/scm/InvPoService.php主单状态及明细已发、已收、已关量领域事务内 status: 0 -> 1/10/13 -> 2/3 -> 4/5;拒绝、关闭分别到 8/9request ID + sid + billNo + action非法迁移零写入;部分履约按数量账回查后走原关闭/补偿 Service
回调回查支付、订单中心、配送消费者消息 ID、来源采购单号application/controllers/tasks/PayCenterNotify.php、application/controllers/tasks/OrderCenterNotify.php当前状态是否已达到目标及支付/履约事实单消息事务内仅单向推进;重复消息 new -> new 且不重复记账message ID + routing key + billNo迟到消息先查支付和履约最终态,不直接回退终态

子模块追踪:po-type-source 采购订单类型与来源

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
创建分类普通采购、退货、调拨、赠品、秒杀创建orderType、srcOrderType、来源 IDapplication/KzData/Enums/PoOrderEnums.php -> application/service/scm/InvPoService.php类型白名单、来源唯一性、商品与供应商创建事务 insert 类型和来源;普通 30-Cxx-01,秒杀 30-Cxx-77/srcOrderType=13request ID + 来源单号 + billNo未知类型拒绝;重复来源返回既有单或按业务规则报错,不再新建
下游解释入出库、支付、报表按类型分支billNo、orderType、srcOrderTypeapplication/KzData/Enums/TransTypeEnums.php、application/service/scm/InvPoService.php主单类型、来源关系、交易类型查询/映射阶段不写;履约按类型写对应库存/资金事实billNo + transType + source ID类型错配先核实来源事实;禁止只改类型码,需领域补偿重建关系

子模块追踪:preorder-status 预订单状态机

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
主动作预订单创建、支付、转采购、售后预订单号、sid、当前状态application/KzData/Enums/PreOrderEnums.php -> application/controllers/tasks/PayCenterNotify.php预订单状态、支付结果、关联采购预订单事务内按枚举单向迁移;转单后写采购关系,金额只落一次request ID/message ID + 预订单号 + 支付单号重复支付不重复转单;失败先回查采购关系再决定补偿
售后退款取消、退款结果回调原预订单号、退款单号application/controllers/tasks/OrderCenterNotify.php、application/controllers/tasks/PayCenterNotify.php原支付成功额、已退额、售后状态反向事务 售后待处理 -> 完成/失败;退款额 old -> old+n售后单号 + 原支付单号 + message ID迟到退款不能恢复已终结订单;按原支付关系幂等重放

子模块追踪:sale-status 销售订单状态机

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
主动作创建、出库、结单、关闭sid、销售单号、billStatusapplication/KzData/Enums/SaOrderEnums.php -> application/service/scm/InvSaService.php订单量、有效出库量、关闭量、当前状态销售事务内按履约事实 待处理 -> 部分 -> 完成/关闭,状态值以 Enum 为准request ID + 销售单号 + action状态与数量不符时不直接改状态,先重算有效出库和软删记录
下游回查出库、退货、收款后重算销售单号、出库/退货/收款单号application/Services/SaOrders/SaOrderSer.php、application/service/scm/InvSaService.php出库、销退、核销事实查询重算后仅在条件满足时更新;异步 MQ 不在本地事务内销售单号 + 关联业务单 + message ID部分成功按缺失环节补偿,禁止重做已完成的库存或资金步骤

子模块追踪:invoice-status 销售出库状态机

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
出库动作PC/PDA 销售出库、撤销sid、销售单、出库 billNoapplication/KzData/Enums/SaInvoiceEnums.php -> application/Services/SaOrders/SaInvoiceSer.php可出量、库存维度、当前出库状态出库事务 insert 主明细并推进状态;撤销走反向单,不能只改终态request ID + 销售/出库单号 + SKU超出可出量或库存失败时回滚;若库存已变先按流水事实补偿
配送回调TMS/配送状态更新出库单、配送单、外部状态、消息 IDapplication/Services/Transport/TransportSer.php本地出库和配送关系、当前状态回调事务按映射单向 old -> new;本地提交后 ACKmessage ID + 出库单号 + 配送单号乱序回调不回退;关系缺失先补关系或重放原创建事件

子模块追踪:flash-status 秒杀活动、购物车与订单状态机

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
活动购买OPS 审批启用;站端加购下单活动 ID、商品 ID、sid、秒杀单号application/KzData/Enums/FlashActivityEnums.php -> application/Services/Activity/FlashSaleSer.php审批/启用/时间、范围、库存和限购本地事务内按草稿/审批/启用迁移;购物车有效态和订单待支付态写入,locked_qty +nrequest ID + activity/order/cart ID条件失效零写入;创建采购部分失败按秒杀关系释放锁量
支付补偿支付回调、超时与关闭任务采购单、秒杀单、支付单application/controllers/tasks/PayCenterNotify.php、application/Services/Activity/FlashSaleSer.php支付中心结果、采购与秒杀关系、locked/used首次成功 locked -n, used +n;取消超时按最终事实释放且重跑零变化message/task ID + 三种单号重复、迟到回调先查终态;补偿必须保证数量不为负

子模块追踪:channel-status 渠道订单与售后状态机

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
渠道正向渠道创建、发货、签收、取消渠道订单号、sid、eventapplication/KzData/Enums/ChannelOrderEnums.php -> application/controllers/tasks/OrderCenterNotify.php渠道主明细、当前 created/wait_ship/part_ship/finish/cancel单消息事务单向推进并记录发货关系message ID + channelOrderNo + event重复事件零副作用;完成后取消按售后链路处理,不回写正向旧态
渠道售后退款、退货申请与审核售后单号、原渠道订单号application/controllers/tasks/OrderCenterNotify.php原单可退量、已退量、售后状态售后事务 申请 -> 审核/完成/取消,资金库存由各自领域处理售后单号 + 原单号 + message ID部分退款/退货分别核对;缺回调按原售后键幂等补发

子模块追踪:move-status 微仓补货、退货与调拨状态机

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
补退调拨站端补货、退货、站内/站间调拨sid、微仓单号、动作application/KzData/Enums/MoveMallEnums.php -> application/service/scm/InvPoService.php微仓主单状态、关联采购/调拨和库存事实领域事务按枚举推进;生成关系单时写来源键,状态不跨对象照抄request ID + 微仓/采购/调拨单号取消前检查已出入库量;已履约部分走关闭或反向业务单
外部回调配送、订单中心或库存结果来源单号、外部状态、消息 IDapplication/controllers/tasks/OrderCenterNotify.php关系表与本地当前态回调事务仅推进允许迁移;ACK 在 commit 后message ID + 来源/本地单号乱序、重复回调保持终态;关系缺失进入人工核对而非猜测更新

子模块追踪:delivery-status 配送状态映射

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
创建配送销售出库或采购配送提交出库/采购单、配送方式、地址application/Services/Transport/TransportSer.php本地单据状态、配送关系、承运配置本地事务写配送关系;外部创建在 DB 事务外,状态 未创建 -> 待配送request ID + 本地单号 + 配送单号外部超时先查是否已创建,禁止直接重复创建
状态回调自配送/三方配送回调配送单、外部状态、message IDapplication/controllers/tasks/DispatchCenterNotify.php当前本地配送态和签收事实映射后单向更新;签收可触发业务完结,异步副作用另查message ID + 配送/业务单号未知状态标待确认;旧消息不得把签收回退为运输中

子模块追踪:finance-status 收付款、对账与交易类型状态

环节入口/触发请求/业务键代码链路读取事实写入与字段变化日志证据异常与补偿
资金动作付款、收款、核销、退款、对账财务单号、来源单号、transTypeapplication/KzData/Enums/TransTypeEnums.php -> application/Services/Statement/StatementSer.php来源应收应付、当前资金状态、已核金额财务事务 未处理 -> 已处理/失败/撤销;金额和分录同步 old -> newrequest ID + 财务/来源单号 + transType状态相同但金额不平时以分录为准,走反向分录而非直接改余额
异步确认支付中心回调、对账任务支付单号、对账批次、消息 IDapplication/controllers/tasks/PayCenterNotify.php外部终态、本地支付和业务状态首次成功落账;重复消息不新增 Payment/Info;报表查询只读message/batch ID + payOrderNo迟到支付和退款先核实外部最终态,再按领域补偿且保留审计链