状态①:待接单
初始态
丸掌柜 待接单(200)
→ 福通主单 已推送(20)
→ 福通子单 已发布(20)
→ 丸友集 待接单(10)
→ (打手系统尚未收到订单)
丸掌柜
200
待接单
子状态:201待接单 / 202已推单
福通 子单
20
已发布
PUSH_SUCCESS
丸友集
10
待接单
PENDING_ACCEPT
触发条件:丸掌柜用户支付 → 订单状态变为200(待接单),然后丸掌柜推单调用福通API ftOrderOpenApi.create()
→ 丸掌柜子状态变为202(已推单) → 福通创建主单(status=1→10→20)和子单(status=10→20),子单推送到丸友集(status=10)
状态②:服务中(代练中)
进行中
丸掌柜 服务中(300)
→ 福通主单 代练中(30)
→ 福通子单 服务中(30)
→ 丸友集 代练中(30)
→ 打手 代练中(20)
福通 主单
30
已接收/代练中
SERVE_ING
触发条件:打手在Player系统接单 → Player(10→20) → 回调Orbit → Orbit(20→30)
→ 回调福通 → 福通子单(20→30) → 福通主单(20→30) → 回调丸掌柜 → 丸掌柜(200→300)
注:打手上号后,Player子状态设为21(已上号),申请验收前必须验证 subStatus==21
状态③:待验收
进行中
丸掌柜 待验收(400)
→ 福通主单 待验收(40)
→ 福通子单 待验收(50)
→ 丸友集 待验收(40)
→ 打手 待验收(30)
丸友集
40
待验收
PENDING_VERIFICATION
打手
30
待验收
PENDING_ACCEPTANCE
触发条件:打手完成代练申请验收 → Player(20→30) → 回调Orbit → Orbit(30→40)
→ 回调福通 → 福通子单(30→50) → 福通主单(30→40) → 回调丸掌柜 → 丸掌柜(300→400)
状态④:已完成(验收通过)
终态
丸掌柜 已完成(700)
→ 福通主单 验收成功(50)
→ 福通子单 验收成功(150)
→ 丸友集 已完成(50)
→ 打手 已完成(40)
丸掌柜
700
已完成
子状态:701已完单
702申诉中 / 703申诉完成
福通 主单
50
验收成功
CHECK_SUCCESS
【终态】
福通 子单
150
验收成功
CHECK_SUCCESS
【终态】
触发条件(有两种路径):
① 丸掌柜用户主动验收 → 丸掌柜调用福通API ftOrderOpenApi.checkSuccess()
→ 福通子单(50→150) → 福通主单(40→50) → 回调丸掌柜 → 丸掌柜(400→700)
② 自动验收 → Orbit(40→50) → 回调福通 → 福通子单(50→150) → 主单(40→50) → 回调丸掌柜 → 丸掌柜(400→700)
状态⑤:异常中
异常态
丸掌柜 异常中(500)
→ 福通主单 异常中(60)
→ 福通子单 异常中(40)/撤销中(60)/仲裁中(70)
→ 丸友集 异常中(35)
→ 打手 撤销中(50)
丸掌柜
500
异常中
子状态:501推单异常
502代练中异常
福通 子单
40/60/70
异常中/撤销中/仲裁中
SERVE_ERROR / SERVE_BACK / ARBITRATION_ING
触发条件:打手申请撤销/仲裁/异常 → Player(20→50) → 回调Orbit → Orbit(30→35)
→ 回调福通 → 福通子单(30→40/60/70) → 福通主单(30→60) → 回调丸掌柜 → 丸掌柜(根据子状态:202→501 或 301→502)
取消异常恢复:丸掌柜状态可从500恢复到300(服务中),取决于福通回调 CANCEL_ERROR
状态⑥:售后中
售后
丸掌柜 售后中(600)
→ 福通主单 售后中(70)
→ 福通子单 仲裁中(70)
→ 丸友集 售后中(60)
福通 主单
70
售后中
AFTER_SALES_ING
福通 子单
70
仲裁中
ARBITRATION_ING
触发条件:丸掌柜用户申请售后 → 丸掌柜调用福通API ftOrderOpenApi.arbitration()
→ 丸掌柜(200/300/400/500→600) → 福通主单(→70) → 福通子单(→70) → 丸友集(→60)
售后类型:根据发起售后时所在的阶段,记录saleType(0-6)用于后续恢复
状态⑦:已售后(售后完成)
终态
丸掌柜 已售后(800)
→ 福通主单 售后结束(80)
→ 福通子单 仲裁结束(170)
→ 丸友集 售后完成(70)
丸掌柜
800
已售后
子状态:801已售后
802申诉中 / 803申诉完成
福通 主单
80
售后结束
AFTER_SALES_END
【终态】
福通 子单
170
仲裁结束
ARBITRATION_END
【终态】
丸友集
70
售后完成
AFTERSALE_COMPLETED
【终态】
触发条件:福通售后结算完成 → 回调丸掌柜 AFTER_SALE_REFUND → 丸掌柜(600→800)
→ 福通主单(70→80) → 福通子单(70→170) → 丸友集(60→70)
状态⑧:已取消
终态
丸掌柜 已取消(900)
→ 福通子单 取消(0)
→ 丸友集 已取消(90)
触发条件:丸掌柜用户取消订单 → 丸掌柜(→900) → 福通子单(→0) → 丸友集(→90) → 打手(→70)
补充状态:已拒绝 / 已撤销
终态
| 系统 |
状态码 |
状态名 |
说明 |
| 丸友集 |
80 |
已拒绝 REJECTED |
工作室拒绝接单 → 福通子单(→180 REJECT_END) |
| 丸友集 |
100 |
已撤销 REVOKED |
上游同意撤销,订单结束 |
| 福通 子单 |
160 |
撤销结束 SERVE_BACK_END |
撤销完成(终态) |
| 福通 子单 |
180 |
拒绝结束 REJECT_END |
被拒绝(终态) |
| 打手 |
60 |
撤销完成 REVOKED |
撤销审核通过(终态) |
【视角一】打手操作 —— 只影响 Player + Orbit 子单可见,不穿透到福通
打手是履约的实质执行人。打手在 Player 系统的所有操作,只会改变打手自己的订单状态。Orbit 工作室后台能看到子单状态变化,但不会自动同步到福通或丸掌柜。向上同步由工作室手动触发。
① 打手接单 —— 从抢单大厅抢单或指派接单
| 层级 | 变化前 | → | 变化后 | 说明 |
| 打手(Player) | 待接单(10) | → | 代练中(20) | 抢单大厅抢单成功,记录takeAt |
| Orbit 子单 | 子单状态同步为 代练中(20) | 工作室后台可见 |
| Orbit 父单 | 不变(工作室确认接单时已置为30) |
| 福通 | 不穿透到此层。福通只知工作室层级。 |
| 丸掌柜 | 不穿透 |
② 打手上号 —— 子状态 subStatus → 21(已上号)
| 层级 | 变化 | 说明 |
| 打手(Player) | 主状态仍为 代练中(20),子状态→21 | 申请验收的前置条件:subStatus必须=21 |
| Orbit及以上 | 不变 | 纯打手内部操作 |
③ 打手上传首图 —— 代练首张截图,申请验收前置条件
| 层级 | 变化 | 说明 |
| 打手(Player) | 仅记录首图URL,不改变状态 | 申请验收的前置条件:必须有首图 |
| Orbit及以上 | 不变 | 不影响上层 |
④ 🔑 打手申请验收 —— 到此为止!不穿透!
| 层级 | 变化前 | → | 变化后 | 说明 |
| 打手(Player) | 代练中(20) | → | 待验收(30) | 前置:subStatus=21(已上号)+已上传首图 |
| Orbit 子单 | 子单状态同步为 待验收(30) | 工作室后台看到该子单=待验收 |
|
🔴 Orbit 父单仍为 代练中(30)。福通仍为 服务中(30)。丸掌柜仍为 服务中(300)。打手申请验收不会自动穿透到上层。
|
⑤-⑧ 其他打手操作(均不影响福通)
| 操作 | 打手状态变化 | Orbit及以上 |
| 取消验收 | 待验收(30)→代练中(20) | 不变 |
| 申请撤销 | 代练中(20)→撤销中(50) | 不变 |
| 取消撤销 | 撤销中(50)→代练中(20) | 不变 |
| 拒绝接单 | 待接单(10)→清指派 | 不变 |
【视角二】工作室 Orbit PC 操作 — 向上通知福通(Kafka),向下管理打手
工作室是核心桥梁。福通不知道哪个打手在打,福通只知道工作室的行为(接单、拒绝、申请验收等)。
工作室收到福通订单后可立即拆单、发单给打手。打手完成后再由工作室向上同步。
↑ 向上 — 通知福通(通过 Kafka topic: orbit-ft-events)
A) 确认接单 —— Orbit 父单 10→20
| 层级 | 变化前 | → | 变化后 | 说明 |
| 工作室客服 | 点击「确认接单」POST /pc/orbit/order/accept | 手动触发 |
| Orbit 父单 | 待接单(10) | → | 已接单(20) | ACCEPTED |
| ↳ Kafka → 福通 | 事件: ACCEPT_ORDER |
| 福通子单 | 已发布(20) | → | 已发布(20) | 不变 |
B) 拒绝接单 —— Orbit → 80(已拒绝) ✅
| 层级 | 变化 | 说明 |
| 工作室客服 | 点击「拒绝接单」POST /pc/orbit/order/reject | 手动触发 |
| Orbit 父单 | 待接单(10)→已拒绝(80) ✅ | REJECTED 终态 |
| ↳ Kafka → 福通 | 事件: REJECT_ORDER | |
| 福通子单 | 已发布(20)→拒绝结束(180) ✅ | REJECT_END |
C) 🔑 申请验收 — Orbit父单 30→40,通知福通(非验收打手!)
| 层级 | 变化前 | → | 变化后 | 说明 |
| 工作室客服 | 点击「申请验收」POST /pc/orbit/order/applyAcceptance | 手动触发。可等所有打手提交后一起操作。 |
| Orbit 父单 | 代练中(30) | → | 待验收(40) | PENDING_VERIFICATION,更新applyAcceptAt |
| 验收记录 | 创建 OrbitOrderAcceptanceRecord(status=0待审核) | 记录申请人 |
| ↳ Kafka → 福通 | 事件: APPLY_ACCEPTANCE |
| 福通子单 | 服务中(30) | → | 待验收(50) | CHECK_ING |
| 福通主单 | 已接收/代练中(30) | → | 待验收(40) | CHECK_ING |
| 丸掌柜 | 服务中(300/301) | → | 待验收(400/401) | 福通回调 APPLY_CHECK |
关键:工作室「申请验收」≠ 验收打手。工作室只是改Orbit父单→40 并通知福通"这个工作室的单可以验收了"。
最终验收决定权在丸掌柜用户。工作室验收打手是另一个独立操作(见下方↓向下操作)。
D) 申请撤销 —— Orbit 父单 30→35(异常中),通知福通
| 层级 | 变化 | 说明 |
| 工作室客服 | 点击「申请撤销」POST /pc/orbit/order/applyRevoke | 手动触发 |
| Orbit 父单 | 代练中(30)→异常中(35) | IN_EXCEPTION |
| ↳ Kafka → 福通 | 事件: APPLY_REVOKE | |
| 福通子单 | 服务中(30)→异常中(40)/撤销中(60) | |
| 福通主单 | 代练中(30)→异常中(60) | SERVE_ERROR |
| 丸掌柜 | 服务中(300)→异常中(500) | 福通回调 MAIN_ORDER_ERROR |
E) 处理售后 —— Orbit → 福通仲裁结果
| 层级 | 变化 | 说明 |
| 工作室客服 | 点击「处理售后」POST /pc/orbit/order/processAftersale | |
| ↳ Kafka → 福通 | 事件: ARBITRATION_RESULT | |
| 福通子单 | 仲裁中(70)→仲裁结束(170) ✅ | ARBITRATION_END |
| 丸掌柜 | 售后中(600)→已售后(800) ✅ | 取决于autoAfterSale参数 |
↓ 向下 — 管理打手(拆单发单、验收子单、撤销子单)
F) 拆单发单 — 将福通来的子单拆成多个打手订单
API:POST /pc/orbit/order/batchDispatchOrders
工作室收到福通订单后,可以在此拆成多个打手子单,分给不同打手。
福通不知道被拆单了。福通只知道:工作室接单了、工作室申请验收了。打手内部如何拆分是工作室自己管理的。
G) 🔑 验收子单 — 只验收该打手订单,Orbit父单不变!
API:POST /pc/orbit/order/acceptanceSubOrder
打手申请验收后→工作室在后台看到子单=待验收(30)→工作室点「验收子单」→该打手(30→40)已完成✅。
验收子单 ≠ 申请验收。验收子单只是对打手个人的操作(Orbit父单不变、福通不变)。
要向上通知福通,工作室需另外点「申请验收」改Orbit父单(30→40) + Kafka APPLY_ACCEPTANCE。
H) 撤销子单 / 取消子单 / 撤销审核
API:撤销子单 POST /pc/orbit/subOrder/revoke | 取消子单 POST /pc/orbit/subOrder/cancel | 撤销审核 POST /pc/orbit/subOrder/revokeApproval
【视角三】丸掌柜用户操作 — 向下操作,先改自己状态再通知福通
丸掌柜是B端买家。所有操作方向是 向下:丸掌柜先改自己状态,再通知福通→福通通知工作室→工作室通知打手。
A) 支付 → 待接单(200); 推单 → 调用 ftOrderOpenApi.create()
| 层级 | 变化 | 说明 |
| 丸掌柜 | 支付:待付款(100)→待接单(200/201) 推单:子状态→202(已推单) | 用户支付后,再手动推单 |
| ↳ 调用福通 | ftOrderOpenApi.create() | 创建福通主单+子单 |
| 福通主单 | (新建)→已录单(1)→已支付(10)→已推送(20) | |
| 福通子单 | (新建)→初始化(10)→已发布(20) | 推送给丸友集工作室 |
| Orbit 父单 | (新建)→待接单(10) | 工作室看到新订单 |
B) 🔑 同意验收 — 丸掌柜先改自己 400→700,再调 ftOrderOpenApi.checkSuccess()
| 层级 | 变化前 | → | 变化后 | 说明 |
| 丸掌柜用户 | 点击「同意验收」completeOrder() | 代码第506行 |
| 丸掌柜 | 待验收(400/401) | → | 已完成(700/701) ✅ | 先改自己! |
| ↳ 调用福通 | ftOrderOpenApi.checkSuccess() |
| 福通子单 | 待验收(50) | → | 验收成功(150) ✅ | CHECK_SUCCESS |
| 福通主单 | 待验收(40) | → | 验收成功(50) ✅ | CHECK_SUCCESS,发送结算给Orbit |
| Orbit 父单 | 待验收(40) | → | 已完成(50) ✅ | COMPLETED |
| 打手 | 如未被验收→已完成(40) ✅ | 上游同步 | |
代码依据:OrderBaseActionApiImpl.completeOrder(506行)→状态→700(522行)→COMPLETE事件(540行)→OrderActionEventListener(62行)→FtOrderService.handleCompleteOrder(195行)→ftOrderOpenApi.checkSuccess()
C) 申请售后 — 丸掌柜 →600,调 ftOrderOpenApi.arbitration()
| 层级 | 变化 | 说明 |
| 丸掌柜 | 任意→售后中(600/601) | 可从200/300/400/500发起 |
| 福通主单 | →售后中(70) AFTER_SALES_ING | |
| 福通子单 | →仲裁中(70) ARBITRATION_ING | |
| Orbit 父单 | →售后中(60) IN_AFTERSALE | |
D) 审核售后完成 — 丸掌柜 →800,调 ftOrderOpenApi.afterSaleEnd()
| 层级 | 变化 | 说明 |
| 丸掌柜 | 售后中(600)→已售后(800) ✅ | 人工审核;或福通自动回调(autoAfterSale=true) |
| 福通主单 | 售后中(70)→售后结束(80) ✅ | AFTER_SALES_END |
| Orbit 父单 | 售后中(60)→售后完成(70) ✅ | AFTERSALE_COMPLETED |
附录:全系统订单状态枚举字典
以下列出各系统订单相关状态枚举的所有值,来源于代码实际定义,方便产品/运营对照查阅。
一、丸掌柜 — OrderBaseStatusEnum (主状态)
venus-saas-order-base
| 状态码 | 枚举名 | 中文名称 | 终态 | 说明 |
| 100 | TO_PAY | 待付款 | 否 | 下单后初始状态,等待用户支付 |
| 200 | TO_TAKING | 待接单 | 否 | 已支付,等待推单给福通 |
| 300 | IN_TAKING | 服务中 | 否 | 打手已接单,正在代练中 |
| 400 | TO_ACCEPT | 待验收 | 否 | 打手申请验收,等待用户确认 |
| 500 | IN_EXCEPTION | 异常中 | 否 | 订单发生异常(撤销/仲裁/推单失败等) |
| 600 | IN_AFTER_SALES | 售后中 | 否 | 用户/客服发起售后处理 |
| 700 | SUCCESS | 已完成 | ✅ | 验收通过,订单完成 |
| 800 | AFTER_SALES_SUCCESS | 已售后 | ✅ | 售后处理完毕 |
| 900 | CANCEL | 已取消 | ✅ | 用户取消订单 |
一-附:丸掌柜 — OrderBaseSubStatusEnum (子状态)
| 子状态码 | 枚举名 | 中文名称 | 所属主状态 | 说明 |
| 101 | TO_PAY | 待付款 | 100-待付款 | 初始子状态 |
| 201 | TO_TAKING | 待接单 | 200-待接单 | 已支付但未推单 |
| 202 | TO_TAKING_PUSHED | 待接单·已推单 | 200-待接单 | 已推送给福通 |
| 301 | IN_TAKING | 代练中 | 300-服务中 | 打手正在执行 |
| 401 | TO_ACCEPT | 待验收 | 400-待验收 | 等待用户验收 |
| 501 | TO_TAKING_PUSHED_EXCEPTION | 推单异常 | 500-异常中 | 推单阶段异常 |
| 502 | IN_TAKING_EXCEPTION | 代练中异常 | 500-异常中 | 代练阶段异常 |
| 601 | IN_AFTER_SALE | 售后中 | 600-售后中 | 售后处理中 |
| 701 | SUCCESS | 已完成 | 700-已完成 | 正常完成 |
| 702 | SUCCESS_APPEAL | 已完成·申诉中 | 700-已完成 | 完成后发起申诉 |
| 703 | SUCCESS_APPEAL_SUCCESS | 已完成·申诉完成 | 700-已完成 | 申诉处理完毕 |
| 801 | AFTER_SALE_SUCCESS | 已售后 | 800-已售后 | 售后正常完成 |
| 802 | AFTER_SALE_SUCCESS_APPEAL | 已售后·申诉中 | 800-已售后 | 售后完成后申诉 |
| 803 | AFTER_SALE_SUCCESS_APPEAL_SUCCESS | 已售后·申诉完成 | 800-已售后 | 售后申诉处理完毕 |
| 901 | TO_PAY_CANCEL | 待支付取消 | 900-已取消 | 支付前取消 |
二、福通主单 — OrderStatusEnum (主单状态)
venus-dl-futong
| 状态码 | 枚举名 | 中文名称 | 终态 | 说明 |
| 1 | INIT | 已录单 | 否 | 福通主单初始状态,订单已录入 |
| 10 | HAS_PAY | 已支付 | 否 | 用户完成支付 |
| 20 | PUSH_END | 已推送 | 否 | 已推送到供应链(丸友集等) |
| 30 | SERVE_ING | 已接收/代练中 | 否 | 供应链已接收,正在执行 |
| 40 | CHECK_ING | 待验收 | 否 | 等待用户验收 |
| 50 | CHECK_SUCCESS | 验收成功 | ✅ | 用户验收通过,主单完成 |
| 60 | SERVE_ERROR | 异常中 | 否 | 主单发生异常 |
| 70 | AFTER_SALES_ING | 售后中 | 否 | 进入售后流程 |
| 80 | AFTER_SALES_END | 售后结束 | ✅ | 售后完成 |
二-附:福通子单 — SupplyOrderStatusEnum (子单状态)
核心枚举
| 状态码 | 枚举名 | 中文名称 | 终态 | 说明 |
| 0 | CANCEL | 取消订单 | ✅ | 已取消 |
| 10 | INIT | 初始化/未发布 | 否 | 子单初始状态 |
| 12 | PUSH_FAILED | 发布失败 | 否 | 推单到供应链失败 |
| 20 | PUSH_SUCCESS | 已发布 | 否 | 推单成功,等待接单 |
| 30 | SERVE_ING | 服务中 | 否 | 打手已接单,执行中 |
| 40 | SERVE_ERROR | 异常中 | 否 | 子单发生异常 |
| 50 | CHECK_ING | 待验收 | 否 | 等待验收 |
| 60 | SERVE_BACK | 撤销中 | 否 | 撤销流程进行中 |
| 70 | ARBITRATION_ING | 仲裁中 | 否 | 仲裁流程进行中 |
| 80 | LOCKING | 锁定中 | 否 | 订单被锁定 |
| 150 | CHECK_SUCCESS | 验收成功 | ✅ | 验收通过 |
| 160 | SERVE_BACK_END | 撤销结束 | ✅ | 撤销完成 |
| 170 | ARBITRATION_END | 仲裁结束 | ✅ | 仲裁完成 |
| 180 | REJECT_END | 拒绝结束 | ✅ | 被拒绝(终态) |
二-附:福通子单 — SupplyOrderSubStatusEnum (子单子状态)
| 子状态码 | 枚举名 | 中文名称 | 说明 |
| 61 | SERVE_BACK_BY_TAKE | 打手发起撤销 | 接单方(打手方)发起撤销 |
| 62 | SERVE_BACK_BY_CREATE | 发单方发起撤销中 | 发单方(客服)发起撤销 |
| 63 | SERVE_BACK_REJECT | 撤销拒绝 | 撤销申请被拒绝 |
| 71 | ARBITRATION_ING_BY_TAKE | 打手发起仲裁中 | 接单方发起仲裁 |
| 72 | ARBITRATION_ING_BY_CREATE | 发单方发起仲裁中 | 发单方发起仲裁 |
| 151 | CHECK_SUCCESS_BY_CREATE | 用户主动点击验收成功 | 用户手动验收 |
| 152 | CHECK_SUCCESS_BY_TAKE | 自动验收成功 | 系统自动验收 |
| 160 | SERVE_BACK_END_BY_TAKE | 撤销结束 | 撤销流程完成 |
| 170 | ARBITRATION_END_BY_TAKE | 仲裁结束 | 仲裁流程完成 |
| 171 | APPLY_APPEAL | 发单方发起申诉·申诉中 | 客服发起申诉 |
| 172 | APPEAL_DEAL_COMPLETE | 申诉处理完成 | 申诉已处理 |
| 173 | APPEAL_DEAL_REJECT | 申诉被驳回 | 申诉驳回 |
| 174 | APPLY_LOCK | 发单方申请子单锁定 | 锁定子单 |
| 175 | CANCEL_LOCK | 发单方取消子单锁定 | 取消锁定 |
三、丸友集履约 — OrbitOrderStatus (父单状态)
venus-orbit-base
| 状态码 | 枚举名 | 中文名称 | 终态 | 说明 |
| 10 | PENDING_ACCEPT | 待接单 | 否 | 福通推送订单,工作室还未接单 |
| 20 | ACCEPTED | 已接单 | 否 | 工作室确认接单,等待派单给打手 |
| 30 | IN_PROGRESS | 代练中 | 否 | 打手已接单,正在执行 |
| 35 | IN_EXCEPTION | 异常中 | 否 | 代练过程中出现异常 |
| 40 | PENDING_VERIFICATION | 待验收 | 否 | 等待验收(客服手动操作后进入此状态) |
| 50 | COMPLETED | 已完成 | ✅ | 验收通过(终态) |
| 60 | IN_AFTERSALE | 售后中 | 否 | 上游发起售后 |
| 70 | AFTERSALE_COMPLETED | 售后完成 | ✅ | 售后处理完成(终态) |
| 80 | REJECTED | 已拒绝 | ✅ | 工作室拒绝接单(终态) |
| 90 | CANCEL | 已取消 | ✅ | 取消订单(终态) |
| 100 | REVOKED | 已撤销 | ✅ | 上游同意撤销(终态) |
三-附:丸友集履约 — OrbitSubStatus (父单子状态)
| 子状态码 | 枚举名 | 中文名称 | 说明 |
| 0 | IN_SERVICE | 服务中 | 正常服务状态 |
| 1 | REVOKING | 撤销中 | 撤销流程进行中 |
| 2 | REVOKED | 已撤销 | 撤销完成 |
| 3 | CANCELLING | 取消中 | 取消流程进行中 |
| 4 | PENDING_LOGIN | 待上号 | 等待打手上号 |
| 5 | PENDING_SALE | 待售后 | 等待售后处理 |
四、打手订单 — OrderStatusEnum (打手订单状态)
venus-player-base
| 状态码 | 枚举名 | 中文名称 | 终态 | 说明 |
| 10 | PENDING | 待接单 | 否 | 订单创建后初始状态,等待打手抢单 |
| 20 | IN_PROGRESS | 代练中 | 否 | 打手已接单,正在代练。子状态21=已上号 |
| 30 | PENDING_ACCEPTANCE | 待验收 | 否 | 打手完成代练,申请验收 |
| 40 | COMPLETED | 已完成 | ✅ | 验收通过,订单完成(终态) |
| 50 | REVOKING | 撤销中 | 否 | 已提交撤销申请,等待审核 |
| 60 | REVOKED | 撤销完成 | ✅ | 撤销审核通过(终态) |
| 70 | CANCELLED | 已取消 | ✅ | 订单取消(终态) |
| 80 | CANCELLING | 取消中 | 否 | 订单正在取消中 |
四-附:打手订单 — OrderSubStatus (子状态,仅一个值)
| 子状态码 | 枚举名 | 中文名称 | 说明 |
| 21 | LOGGED_IN | 已上号 | 打手已登录游戏账号,申请验收的前置条件 |
主状态流转总图(含Orbit客服手动卡口)
丸掌柜(100)待付款 ──支付──▶ 丸掌柜(200)待接单 ──推单──▶ 丸掌柜(200/202)已推单
│
┌───────────────────────┘
▼
福通主单(1)已录单 → 福通主单(10)已支付 → 福通主单(20)已推送
│
福通子单(10)初始化 → 福通子单(20)已发布 → 丸友集父单(10)待接单
│
┌───────────────┘
▼
客服确认接单: 丸友集父单(20)已接单
│
▼ 派单给打手
打手(10)待接单 ──抢单──▶ 打手(20)代练中(已上号21)
│ │
│ ┌────────────┘
│ ▼
│ 打手(30)待验收 ─── 只改打手状态 ──▶ 丸友集父单仍为(30) ──▶ 福通仍为(30) ──▶ 丸掌柜仍为(300)
│ │ │
│ │ 🔴 Orbit客服手动点击「申请验收」POST /pc/orbit/order/applyAcceptance
│ │ │ │
│ │ ▼ │
│ │ 丸友集父单(30→40) + 自动验收子单 → Player(30→40)已完成 ✅
│ │ │ │
│ │ ▼ Kafka │
│ │ 福通子单(30→50)待验收 → 福通主单(30→40)待验收 → 丸掌柜(300→400)待验收
│ │ │ │
│ │ 🔴 丸掌柜用户点击「同意验收」(丸掌柜先改自己→700, 再通知福通checkSuccess)
│ │ │ │
│ │ ▼ │
│ │ 福通子单(50→150) ✅ → 福通主单(40→50) ✅ → 丸友集(40→50) ✅
│ │ │ │
│ │ ▼ │
│ │ 丸掌柜(700)已完成 ✅ │
│ │
│ ├──客服申请撤销──▶ 丸友集父单(30→35)异常 ──Kafka──▶ 福通子单(40/60) ──▶ 福通主单(60)异常中
│ │ │
│ │ ▼
│ │ 丸掌柜(500)异常中
│ │ │
│ │ ┌─取消异常─┘
│ │ ▼
│ │ 丸掌柜(300)恢复服务中
│ │
│ └──取消──▶ 打手(70)已取消 ✅ ──▶ 丸友集(90)已取消 ✅
│ │
│ ▼
│ 丸掌柜(900)已取消 ✅
│
└──申请售后──▶ 丸掌柜(600)售后中
│
▼
福通主单(70)售后中 ──▶ 福通子单(70)仲裁中 ──▶ 丸友集(60)售后中
│
┌─客服处理售后或自动──┘
▼
丸掌柜(800)已售后 ✅ ──▶ 福通主单(80)售后结束 ✅ ──▶ 丸友集(70)售后完成 ✅