Appearance
金刚下单端标准单全链路闭环
本页是金刚到家标准单的技术底稿,覆盖「下单 → 支付 → 入家政广场 → 承接 → 履约 → 完成 → 结算 → 提现」全链路,并给出资金账实对照、配置快照和核对 SQL。
核对基准:2026-09-11 15:07(生产库只读查询 + storeapi、clientapi 代码库)。文中金额、比例、时长均为当日生产实际值;生产数据会变化,排查时以实时查询为准。
适用范围:金刚下单端全国标准单,业务模式固定为 PLATFORM_STANDARD_SOURCE。安心支付订单、门店共享单不适用本页资金口径,差异见「第七节」。
一、结论摘要
- 标准单的正式入口只有一个:支付成功后由定时任务幂等发布到门店端家政广场,由员工抢单、站长派单或云平台人工指派承接。原「积分 + 轮发游标」的员工池自动轮发不再作为新订单入口,只保留历史派发记录的收尾;但后台支付回调仍保留历史自动派发调用,见第八节差异清单第 1 条。
- 收款方固定为金刚科技平台商户,与来源门店、员工开发码无关;开发码只决定开发归因和开发奖金。
- 服务奖金在订单完成后先冻结进员工钱包,冻结期结束自动转入可提现余额,员工提现时再由易宝出款。服务奖金不再直接易宝分账到员工商户。
- 开发奖金是独立任务,有完整退款冲减链路;服务奖金目前没有退款冲减链路。
- 「已完成」不等于「已到账」,也不等于「已提现」:完成 → 冻结 → 到余额 → 申请提现 → 财务审核打款,是四个不同状态。
二、全链路总览
| 阶段 | 触发方式 | 代码入口 | 数据落点与结果 |
|---|---|---|---|
| 下单 | 端上请求 | clientapi/module_client/service/order_create_service.py | 写入 order,业务模式标记为平台标准单 |
| 归因锁定 | 提交订单 | clientapi/module_client/service/development_attribution_service.py | 写入订单归因快照,锁定唯一开发主体 |
| 可接预检 | 端上请求 | clientapi/module_client/service/standard_order_availability_service.py | 仅做提前提示,不锁定员工 |
| 支付与快照 | 支付回调 | clientapi/module_client/service/payment_service.py → 配置快照服务 | 订单转待派发,固化服务奖金比例、开发奖金比例、冻结时长和收款商户 |
| 入广场 | 定时任务 | storeapi/module_admin/service/standard_order_square_service.py | 幂等写入一条家政广场记录 |
| 承接 | 端上操作 | storeapi/module_admin/service/staff_appraisal_service.py 广场服务 | 绑定员工、占用档期、写入派工记录和操作审计 |
| 履约 | 员工端操作 | storeapi/module_admin/service/staff_order_service.py | 订单状态 40 → 50 → 60 → 80 |
| 完成入队 | 完成订单同时 | 结算服务与开发奖金服务 | 生成结算任务、开发奖金任务,并冻结服务奖金 |
| 解冻到账 | 定时任务 | 标准单结算任务、开发奖金释放任务 | 钱包冻结金额转入可提现余额 |
| 提现 | 员工申请 + 财务审核 | staff_wallet_service.py、staff_withdrawal_payout_service.py | 生成提现单,易宝出款,成功后扣冻结余额 |
| 退款 | 客户取消 / 退款回调 | clientapi 取消服务、storeapi/module_admin/service/order_refund_service.py | 订单转已取消、广场记录关闭、档期释放、开发奖金冲减 |
三、订单与广场状态机
订单状态含义由员工端状态管理器统一维护:
order_status | 含义 | 标准单是否会出现 |
|---|---|---|
| 20 | 派单待确认 | 会。支付后待派发、站长派单后待员工确认 |
| 30 | 已拒绝 | 会。员工拒绝站长派单 |
| 40 | 已派单 | 会。员工抢单成功即进入 |
| 50 | 执行中 | 会。员工点击前往服务 |
| 60 | 开始服务 | 会。员工点击开始服务 |
| 70 | 服务结束 | 旧流程兼容,新流程不主动写入 |
| 80 | 已完成 | 会。完成即触发结算入队 |
| 99 | 已取消 | 会。客户取消或退款成功后 |
合法流转:20 → 30 / 40;40 → 50;50 → 60;60 → 80;70 → 80。跨状态跳转会被拒绝。
家政广场记录状态:
demand_status | 含义 | 说明 |
|---|---|---|
| 1 | 待承接 | 可被员工抢单或站长派单 |
| 2 | 已承接 | 已绑定员工,并记录承接方式 |
| 4 | 已取消 | 客户取消、退款回调或人工关闭 |
| -1 | 已过期 | 到预约服务时间仍无人承接,由批量任务置为过期 |
承接方式在广场记录上体现为员工抢单、站长派单或云平台人工指派,用于事后区分是谁把订单派出去的。
四、承接三通道与权限
| 通道 | 操作方 | 承接后订单状态 | 关键约束 |
|---|---|---|---|
| 员工抢单 | 已上架标准员工 | 直接进入已派单 | 只能抢本人满足工种、服务区域、休息日和档期的订单 |
| 站长派单 | 站长 | 派单待确认,员工确认后进入已派单 | 只能处理本人负责区域和工种内的订单,并从真实合格候选中选择 |
| 云平台人工指派 | 云平台运营 | 由参数决定直接承接或待确认 | 只能走受保护的内部运维通道,必须填写操作原因和请求键 |
| 历史员工池派发 | 系统 | 不适用 | 仅保留历史派发记录的确认、拒绝和超时收尾;后台支付回调仍存在该调用,见第八节差异清单第 1 条 |
实现要点:
- 并发保护:抢单和派单都以「广场记录仍为待承接」为更新条件,更新行数不为 1 直接判定「已被抢走或派出」,不产生第二笔承接。
- 幂等:每次抢派都要带不少于 8 位的请求键,重复请求返回首次结果;同一请求键被换人复用会被拒绝。
- 档期占用:承接成功即写入员工档期锁和派工记录,先释放旧派工再写新派工;取消订单时同步释放档期锁并清理派工。
- 权限边界:公司负责人和门店负责人只能查看标准单,抢单和派单请求一律拒绝;门店店员按页面权限只读;站长个人服务区域与站长负责范围互相独立,互不扩大。
- 资格校验:统一走同一套资格校验,校验不通过时不允许绕过,也不允许平台侧直接改绑员工。
五、资金闭环
5.1 收款
金刚自有标准单统一由金刚科技平台商户收款,云平台配置优先、后端环境变量兜底,不从来源门店读取收款商户。当前生产生效的 YEEPAY_ORDER_MERCHANT_NO 为 10092389988(尾号 9888)。门店码、员工海报只记录归因,不改变收款方。
5.1.1 补价扫码的商户分流
补价不能按“都是标准单”直接套用同一个二维码,必须先判断订单来源:
| 订单来源 | 识别口径 | 客户扫码使用的收款码/商户 | 当前代码入口 | 备注 |
|---|---|---|---|---|
| 小羽佳同步协同订单 | source_type = 'XYJ_ORDER_V2'(或补价记录标记为该来源) | 小羽佳同步下来的 external_pay_qr_code,继续走原小羽佳易宝收款通道 | 门店端协同补价展示与状态回传 | 不创建金刚普通补价二维码,不切换到 9888 |
| 金刚自有订单 | source_type = 'NORMAL' | 业务口径要求使用金刚平台尾号 9888 商户,即 10092389988 | 金刚标准单主支付已由 create_standard_order_qrcode_payment_service() 按 YEEPAY_ORDER_MERCHANT_NO 创建 | 与小羽佳外部收款码不能混用 |
实现口径:金刚自有订单的普通补价入口 create_additional_payment_qrcode_service() 已改用官方聚合扫码接口,按 YEEPAY_ORDER_MERCHANT_NO 传入 10092389988,并使用门店收款官方回调地址;支付记录标记为 official_qrcode,回调和员工端状态查询均校验该商户号。小羽佳协同补价仍不得调用此入口。上线前仍需用小额生产订单核对易宝后台商户号、回调和退款对账结果。
5.2 支付时快照
支付成功时把当时的规则固化成订单快照,之后改配置不影响已支付订单:
| 配置项 | 生产当前值 | 近一次生效 | 用途 |
|---|---|---|---|
| 服务奖金比例 | 0.70 | 2026-07-18 | 计算订单级服务奖金池 |
| 员工开发奖金比例 | 0.05 | 2026-07-15 | 计算员工开发奖金 |
| 门店开发奖金比例 | 0.05 | 2026-07-15 | 仅历史门店归因兼容 |
| 服务奖金冻结时长(分钟) | 120 | 2026-09-11 | 完成后冻结多久转入可提现余额 |
| 开发奖金冻结时长(小时) | 2 | 2026-09-11 | 开发奖金冻结多久释放 |
| 平台收款商户 | 已配置为平台主体(具体值以云平台配置为准,不写入知识库) | 2026-07-28 | 客户支付进入的平台商户 |
| 平台打款商户 | 已配置为平台主体(员工提现出款用,配置中心可改) | 2026-09-11 | 员工钱包提现时的出款商户号,未配置时回退出款环境变量与收款商户 |
| 接单超时(分钟) | 15 | 2026-07-15 | 历史派发确认时限 |
| 路程缓冲(分钟) | 60 | 2026-07-15 | 档期占用缓冲 |
历史已支付订单保留各自支付时的快照:2026-09-11 之前支付的订单冻结时长快照为 240 分钟(4 小时),不随配置调整变化。排查老订单必须看快照值,不能只看当前配置。
5.3 服务奖金
| 项目 | 口径 |
|---|---|
| 计算基数 | 订单净实付金额,缺失时回退实付金额 |
| 比例 | 支付时快照中的服务奖金比例;代码没有隐式默认值,缺失即转人工确认 |
| 小羽佳协同订单 | 关联广场来源为 external_api 时,取小羽佳推送到广场的 commission_amount 作为员工服务奖金,比例固定按 100%;例如推送 160 元,员工服务奖金为 160 元 |
| 订单补价 | 小羽佳补价和金刚补价统一按补价金额的 70% 计入服务员工,30% 留在公司;按补价记录上的 staff_id 归集,匹配不到服务员工时归主服务员工。补价不产生开发奖金;现金补价由员工现场直接收取,平台未收款,不计入 |
| 订单级奖金池 | 主单服务奖金 + 已支付补价金额 × 70%,按分位保留两位小数 |
| 多人分配 | 必须为实际服务员工,显式分配比例合计必须等于 100%;未配置分配时按人数平均,尾差归主服务员工,主服务员工金额 = 奖金池 − 其他人之和 |
| 幂等键 | 按「订单 + 员工」维度唯一,任务重跑不重复入账 |
处理链路:
- 订单完成时生成一条结算任务,任务默认走员工钱包模式,可提现时间 = 完成时间 + 冻结时长。
- 同时向员工钱包写入一条冻结流水,金额计入钱包冻结余额,明细类型为服务奖金,状态为冻结中。此时不增加可提现余额。
- 冻结期结束后由定时任务解冻:冻结余额减少、可提现余额增加、累计收入增加,流水状态转为可用。任务转为成功。
- 小羽佳协同订单主单金额取外部推送的员工应得金额,按 100% 计入;其补价与金刚自有订单补价统一按 70% 计入。两者均在完成后冻结 2 小时,期满转可提现余额,补价不产生开发奖金。
- 比例显式为 0 或金额为 0(例如 0 元订单)时标记为无需发放,不产生钱包流水。
- 缺少比例、缺少净实付金额或员工手机号异常时转人工确认,不自动出款。
- 2026-09-11 之前遗留的易宝分账任务按当前规则迁移为钱包冻结路径;已成功的历史分账任务不再重复转入钱包。
5.4 开发奖金
| 项目 | 口径 |
|---|---|
| 计算基数 | 与服务奖金相同,取订单净实付金额 |
| 比例 | 支付时锁定的归因快照比例,员工和门店默认 5% |
| 发放对象 | 归因主体:员工进员工钱包;历史门店归因进门店钱包 |
| 释放时间 | 完成时间 + 开发奖金冻结时长 |
| 幂等键 | 按订单唯一,重复完成或任务重跑不重复发放 |
退款冲减:开发奖金有完整冲减链路——尚未解冻的减少冻结金额,已解冻未提现的从可提现余额扣减,已提现的形成待冲减金额并从后续开发奖金抵扣。
5.5 平台留存
平台留存 = 客户实付金额 − 服务奖金 − 开发奖金。有开发归因时约为 25%,无归因时约为 30%。平台留存不单独生成任务或流水,沉淀在平台收款商户。
5.6 员工提现
| 环节 | 规则 |
|---|---|
| 申请条件 | 员工必须完成易宝个人入网;金额不低于平台配置的最低提现金额(当前 1 元);同一员工同时只允许一笔在途提现 |
| 申请动作 | 申请金额从可提现余额转入冻结余额,员工端显示为分账/提现中,并生成提现单和申请流水 |
| 审核动作 | 财务在云平台执行通过、驳回、确认到账或失败;必须填写原因,确认到账必须填写渠道交易号 |
| 打款执行 | 财务点击“通过并打款”后由提现执行器调用易宝余额分账出款:从「金刚科技平台打款商户号」配置的出款商户(未配置时回退环境变量和平台收款商户)直接分账到员工易宝入网商户号,幂等请求号固定,任务重跑先查本地分账记录避免重复出款 |
| 到账落点 | 出款商户只负责出资,钱直接进员工易宝个人商户(入网时绑定的结算卡),不经过平台钱包,也不需要财务手工转账 |
| 结果处理 | 成功后扣除冻结余额并累计已提现金额;提交成功但未回调时为处理中;失败进入重试或人工复核。重试间隔为 5、15、60 分钟 |
| 驳回或失败 | 金额从冻结余额退回可提现余额 |
真实出款同时受执行模式和二级开关保护;未同时开启时任务只做干跑,不调用易宝。
5.7 每笔钱落在哪里
| 资金动作 | 数据落点 |
|---|---|
| 客户支付 | 支付流水表(含交易号、实付金额、收款商户);金刚标准单主支付当前应为 10092389988 |
| 小羽佳协同补价 | 补价记录中的 external_pay_qr_code 及外部回传字段;沿用小羽佳原易宝收款通道 |
| 金刚自有补价 | order_additional_payments 及关联支付流水;业务目标为使用金刚尾号 9888 商户,旧快捷接口当前未显式记录商户号 |
| 订单配置快照 | 标准单配置快照表 |
| 开发归因与比例 | 订单归因快照表 |
| 服务奖金结算任务 | 标准单结算任务表 |
| 开发奖金冻结与释放 | 开发奖金任务表 |
| 钱包余额 | 员工钱包账户表(可提现余额、冻结余额、累计收入、累计提现) |
| 钱包明细 | 员工钱包流水表(服务奖金冻结、服务奖金解冻、开发奖金释放、提现申请、驳回/失败) |
| 提现单据 | 员工提现申请表 |
| 多人服务奖金分配 | 服务奖金分配表 |
5.8 相关定时任务
| 任务 | 作用 | 备注 |
|---|---|---|
| 标准单待派发处理 | 已改为「发布到家政广场」 | 历史任务名保留,宝塔配置无需改名 |
| 标准单结算处理 | 解冻服务奖金到钱包余额、推进历史分账任务 | 建议分钟级执行,有分布式锁 |
| 开发奖金释放 | 到期把开发奖金释放到钱包 | 支持干跑 |
| 开发奖金退款核对 | 处理退款冲减和待抵扣 | 支持干跑 |
| 员工提现打款 | 调用易宝完成出款 | 支持干跑,真实出款需双层开关 |
5.9 生产快照(2026-09-11 15:07)
用于验证上面各条规则确实在跑,不代表业务量评价;当前样本包含内部测试订单。
| 指标 | 数值 |
|---|---|
| 标准单订单 | 共 52 张:已完成 12、服务中 1、已取消 39 |
| 服务奖金结算任务 | 11 条,全部为员工钱包模式且已成功 |
| 已进入员工钱包的服务奖金 | 7 条流水,合计 976.52 元 |
| 开发奖金任务 | 3 条:可用 1 条 14.95 元,已冲正 2 条 |
| 安心支付佣金入账 | 1 条 160.00 元(属安心支付口径,用于对比) |
| 钱包提现申请 | 1 条 160.00 元,状态为待审核 |
| 多人服务奖金分配配置 | 0 条,暂无多人订单 |
| 家政广场标准单记录 | 30 条:已承接 10、已过期 5、已取消 15 |
| 历史员工池派发记录 | 26 条,均为历史收尾状态 |
结算金额自检结果:已抽查多笔已完成订单,结算金额与「净实付 × 快照比例」完全一致,误差为 0.00 元。
六、账实核对
以下 SQL 均为只读查询,排查时把订单号替换为实际值。
订单与快照:
sql
SELECT o.order_number, o.order_status, o.business_mode, o.source,
o.total_pay_actual, o.pay_actual, s.service_bonus_rate,
s.settlement_grace_minutes, s.development_freeze_months
FROM `order` o
LEFT JOIN standard_order_config_snapshot s ON s.order_number = o.order_number
WHERE o.order_number = :order_number;结算任务与钱包流水是否对齐:
sql
SELECT t.order_number, t.staff_id, t.task_status, t.settlement_mode,
t.bonus_base_amount, t.bonus_rate, t.bonus_pool_amount,
t.settlement_amount, t.allocation_rate,
t.service_completed_at, t.grace_end_at, t.processed_at,
l.ledger_type, l.ledger_status, l.amount, l.available_at
FROM standard_order_settlement_task t
LEFT JOIN staff_wallet_ledger l
ON l.idempotency_key = CONCAT('STANDARD_ORDER_SERVICE_BONUS:', t.id)
WHERE t.order_number = :order_number;公式自检(结算金额应等于净实付 × 快照比例,误差不超过 0.01 元):
sql
SELECT t.order_number, t.bonus_base_amount, t.bonus_rate, t.bonus_pool_amount,
ROUND(t.bonus_base_amount * t.bonus_rate, 2) AS expect_pool,
ROUND(t.bonus_base_amount * t.bonus_rate - t.bonus_pool_amount, 2) AS diff
FROM standard_order_settlement_task t
WHERE t.task_status = 'SUCCESS' AND t.bonus_base_amount > 0
ORDER BY t.id DESC LIMIT 20;开发奖金与退款冲减:
sql
SELECT order_number, subject_type, task_status, calculation_base, bonus_rate,
bonus_amount, refund_amount, offset_pending_amount, available_at
FROM development_bonus_task
WHERE order_number = :order_number;提现单与钱包冻结是否一致:
sql
SELECT w.withdrawal_no, w.status, w.apply_amount, w.fee_amount, w.actual_amount,
w.payout_status, w.payout_attempt_count, w.payout_last_error
FROM staff_withdrawal_application w
WHERE w.staff_mobile = :staff_mobile
ORDER BY w.id DESC LIMIT 10;七、与安心支付、门店共享单的边界
| 维度 | 金刚标准单 | 安心支付订单 | 门店共享单 |
|---|---|---|---|
| 业务模式标记 | 平台标准单 | 安心支付 | 门店共享 |
| 收款方 | 金刚科技平台商户 | 安心渠道,核销后结算 | 承接门店自行结算 |
| 订单完成后的资金动作 | 服务奖金冻结进员工钱包,到期转可提现余额 | 等渠道核销后计入员工钱包,不执行标准单分账 | 按共享订单佣金规则处理,不生成服务奖金任务 |
| 是否走标准单结算任务 | 是 | 否,结算任务遇到安心订单会直接取消并说明原因 | 否 |
| 提现 | 走员工钱包提现 | 计入钱包后同样走钱包提现 | 按门店结算口径 |
判定标准单的唯一依据是业务模式标记,不能只看产品名称相似。
八、差异与缺口清单
以下为 2026-09-11 核对发现的现状差异,本页只登记风险和影响,不在文档范围内修复。
| 编号 | 现象 | 影响 | 建议方向 |
|---|---|---|---|
| 1 | 历史员工池派发通道仍可通过后台支付回调触发,与家政广场并存;生产上已出现同一订单既进入广场又生成员工池派发记录的情况 | 同一订单存在两条承接记录,口径容易混淆,极端情况下可能重复占用员工档期 | 明确以家政广场为唯一入口,下线或串行化后台支付回调中的自动派发调用,保留历史记录的收尾处理 |
| 2 | 服务奖金没有退款冲减链路,只有开发奖金有 | 订单完成后发生退款,已进员工钱包的服务奖金不会自动扣回,依赖财务人工处理 | 参照开发奖金补齐服务奖金冲减,或明确书面人工追偿流程和判断标准 |
| 3 | 0 元或免单订单也会走完整完成闭环,生成金额为 0 的结算任务 | 结算任务量被非资金订单占用,任务列表噪音大 | 完成时对 0 元订单直接标记无需发放,或在运营口径中明确区分 |
| 4 | 长期停留「开始服务」未完成的订单不会被自动收口 | 订单长期挂起,不计入完成和结算 | 明确长期未完成的判定阈值和运营处理动作 |
| 5 | 标准单整体取消率明显高于完成量,其中包含内部测试订单 | 直接看订单量会严重低估或高估真实业务量 | 统计口径中区分测试单与真实单,输出时标注 |
| 6 | 金刚自有订单普通补价已切换官方聚合扫码并校验 9888 商户;生产易宝后台商户、回调和退款对账尚未完成小额实单核验 | 若生产配置或易宝侧路由未同步,可能出现下单成功但回调、退款或对账异常 | 用小额生产订单核对商户号、回调入账、补价状态和退款链路,确认后关闭该风险 |
九、待核实项
以下内容无法从代码和数据库确证,排查时不要当作已知事实:
- 宝塔计划任务的实际触发频率、执行用户和日志路径,仓库只能确认任务入口,不能确认生产调度配置。
- 服务奖金结算任务当前是否按分钟级持续运行,需要查生产任务日志确认最近执行时间。
- 单产品级别的服务奖金比例覆盖配置是否存在并生效,需查配置表按产品的生效记录。