跳转至

派单服务设计(Dispatch Service Design - DIS-D)

文档编号:DOC-P71-D / DIS-D 版本:V1.1(安装师傅三分类 M1_SELF/M2_FREE/M3_SME + 运输×安装 3×3=9 组合矩阵双轴加权升级) 最近更新:2026-08-21 创建日期:2026-08-21(V8.0 阶段一派单服务独立化) 维护人:OL / TL / DT 关联文档README.mdDLV 物流商档案库CPT-D L5 物流阶段QMD 物流费公式RQD-B §八 物流配送需求RQD-O §3.2 DSP/DLV 功能组GLY V4.6 §二 DLV/LGP术语 来源:原 docs/主数据服务/平台成熟期派单服务方案.md V1.0 草案 457 行 TL 指示依据:「根据C7,C8的意见调整当前设计内容的同时,另外再编写一份专门的文档,描述平台成熟期的派单服务方案,覆盖3种模式的具体策略和相互关系,作为独立的分支任务,我会在你提供的方案基础上,讨论、修改和确认。」


一、定位与核心概念

1.1 服务定位

派单服务(DIS)是平台的物流派单决策引擎——独立于物流商档案库(DLV),承接 CPT L5 物流阶段派单触发,基于三模式业务架构(M1 自营 / M2 独立司机 / M3 物流公司)+ C7 保险赔付策略 + OL 人工调整机制,生成派单决策结果并下发 LGP 司机端。

DIS 与 DLV 的边界: - DLV 存储「主体」:物流商档案、业务模式分类(M1/M2/M3)、字段子表、保险赔付记录 DLV-019、信用评分 DLV-035 - DIS 执行「过程」:单次派单决策(合同匹配→优先级算法→司机选择→接单确认→降级策略) - 关系:DIS 通过物流商ID引用 DLV 主体档案;DIS 采集的派单结果/接单率反哺 DLV 信用评分

1.2 核心概念

概念 定义 说明
派单 平台将物流单分配给具体司机/物流公司的决策过程 单次决策,非长期档案
三模式 M1 自营 / M2 独立 / M3 物流公司 详见 §二 业务模式定义
M3 合同 平台与物流公司签订的服务合同(M3-a/b/c/d 四类型) DLV-M3 字段子表存储
C7 保险确认 司机接单前确认「当前保险周期内是否发生赔付事故」 引入派单优先级负向权重
OL 人工调整 运营人员可覆盖系统派单结果 包括跨模式调度/紧急补单/派单冻结
降级策略 M3 司机拒绝/不可用时跨模式降级到 M1 反之 M1 运力不足可升级 M3 采购

1.3 双重价值

  1. 现阶段决策引擎:以 M3 物流公司合同配置为主、M1 自营为补充,支持运营人员人工调整
  2. 成熟期弹性扩展:M2 独立司机弹性运力、智能排班算法、保险费率动态调整

二、DDD 战略设计(子域划分与限界上下文)

2.1 子域定位

子域类型 子域名称 边界 现阶段定位 DIS 角色
核心子域 派单决策子域 派单匹配引擎 + 优先级算法 + 降级策略 平台核心竞争力 本文档核心
支撑子域 M3 合同配置子域 合同 CRUD + 字段子表映射 引用 DLV-M3 字段子表 数据消费方
支撑子域 C7 保险策略子域 保险周期确认 + 赔付预警 引用 DLV-019 数据消费方
通用子域 司机接单子域 接受/拒绝 + 状态流转 与 LGP App 协同 接口契约
通用子域 人工调整子域 OL 覆盖/跨模式/紧急补单 与 OPR 协同 接口契约

2.2 限界上下文(Bounded Context)

graph TD
    subgraph "DIS 派单服务限界上下文"
        BC1["派单决策上下文<br/>(核心域)"]
        BC2["M3 合同配置上下文<br/>(支撑域)"]
        BC3["司机接单上下文<br/>(通用域)"]
        BC4["人工调整上下文<br/>(通用域)"]
        BC5["保险策略上下文<br/>(支撑域)"]
    end

    subgraph "外部上下文"
        DLV_BC["DLV 物流商档案库上下文"]
        CPT_BC["CPT 客户项目跟踪上下文"]
        LGP_BC["LGP 司机端上下文"]
        OPR_BC["OPR 运营后台上下文"]
        OPS_BC["OPS 运营服务上下文"]
        QMD_BC["QMD 报价模型上下文"]
    end

    BC1 -- "防腐层 ACL:<br/>物流单事件" --> CPT_BC
    BC1 -- "防腐层 ACL:<br/>物流商主体档案" --> DLV_BC
    BC1 -- "发布领域事件:<br/>DispatchDecided" --> BC3
    BC1 -- "发布领域事件:<br/>InsuranceWarning" --> OPS_BC
    BC2 -- "共享内核:<br/>M3 字段子表" --> DLV_BC
    BC3 -- "开放主机服务 OHS:<br/>LGP 接单 API" --> LGP_BC
    BC4 -- "开放主机服务 OHS:<br/>OPR 调整 API" --> OPR_BC
    BC5 -- "共享内核:<br/>DLV-019 保险记录" --> DLV_BC
    BC1 -. "查询费率参考" .-> QMD_BC

2.3 上下文映射模式

关系 模式 说明
DIS → CPT 防腐层(ACL) CPT L5 物流单事件经 ACL 转换为 DIS 内部 LogisticsOrder 值对象
DIS → DLV 共享内核(Shared Kernel)+ ACL M3 字段子表共享;DLV-019 保险赔付记录经 ACL 转换为 DIS 内部 InsuranceStatus 值对象
DIS → LGP 开放主机服务(OHS) LGP 接单 API(接受/拒绝/保险确认)
DIS → OPR 开放主机服务(OHS) OPR 调整 API(覆盖/跨模式/紧急补单)
DIS → OPS 发布领域事件 保险赔付 ≥80% 触发 InsuranceWarningEvent
DIS → QMD 客户/供应商(Customer/Supplier) QMD 提供费率参考,DIS 为下游消费者

三、设计原则

原则 说明 TL 指示依据
业务架构解耦 派单服务作为独立模块,与 DLV 档案库、QSV 报价服务、CPT L5 物流阶段松耦合 「设计重点是业务架构的解耦」
现阶段以模式3为主 M3 物流公司合同配置 + 运营人员系统配置物流路线/货源 MFR/区域 「现阶段的需求:模式3为主」
模式1作为补充 M1 自营司机对剩余货源(未被 M3 覆盖)的物流单提供基本排班 「模式1作为补充」
允许人工调整 运营人员可对系统派单结果进行人工调整 「允许运营人员人工调整」
司机端接受/拒绝 司机接单可选「接受/拒绝」,暂时不提供选单功能 「司机端对派单接单可选择接受或拒绝,暂时不提供选单功能」
成熟期覆盖全部模式 成熟期需考虑三种模式所有组合情况 「平台在成熟阶段的需求,需要考虑目前列出的所有情况」
保险赔付纳入派单策略 DLV-019 保险赔付状态作为派单优先级负向权重因子 TL C7 指示交叉引用
DDD 战术设计 聚合根/实体/值对象/领域服务/领域事件明确划分 阶段二 DDD 引入

四、服务边界与职责

4.1 DIS 负责的职责

职责 说明 DDD 落地
派单匹配 基于 CPT L5 物流单 + DLV 主数据,执行 M3 合同匹配 + M1 排班 DispatchMatchingService 领域服务
优先级算法 计算司机派单优先级得分(业务模式 + 合同匹配度 + 距离 + 保险 + 信用) PriorityCalculator 领域服务
司机选择 从候选池选择最优司机/物流公司 DriverSelector 领域服务
接单状态机 接受/拒绝/超时状态流转 DispatchOrder 聚合根状态机
降级策略 M3→M1 跨模式降级、M2 启用(成熟期) FallbackStrategy 策略模式
OL 人工调整 覆盖派单结果、跨模式调度、紧急补单、派单冻结 ManualAdjustmentService 应用服务
保险预警 DLV-019 赔付金额 ≥80% 保额上限触发预警 InsuranceWarningEvent 领域事件
派单结果反哺 接单率/拒单率/平均响应时间反哺 DLV-035 信用评分 DispatchResultReverted 领域事件

4.2 DIS 不负责的职责(明确边界)

不负责项 归属服务 理由
物流商主体档案管理 MDS/DLV 长期档案,非单次派单
CPT L5 物流单生成 CPT CPT L4→L5 状态流转生成派单触发事件
物流费计算 QSV/QMD 派单决策时仅查询费率参考,不计算
司机端 UI/导航 LGP App 派单结果下发后由 LGP App 负责执行
运营后台 UI OPR Admin 人工调整入口由 OPR 提供,DIS 提供 API
营销获客 OPS 保险预警通知 OPS,但不执行营销动作

4.3 与其他服务的关系(架构图)

graph TD
    DIS["DIS 派单服务<br/>(本文档)"]
    DLV["DLV 物流商档案库 V1.1<br/>§2.3 业务模式分类 + §3.7 三模式字段子表"]
    CPT["CPT L5 物流阶段<br/>派单触发入口"]
    QSV["QSV 报价服务<br/>物流费率输入"]
    LGP["LGP App 司机端<br/>接受/拒绝接单"]
    OPR["OPR 运营后台<br/>人工调整 + M3 合同配置"]
    OPS["OPS 运营服务<br/>保险赔付80%预警功能"]

    DLV -- "业务模式分类<br/>M1/M2/M3 字段子表<br/>保险赔付记录 DLV-019" --> DIS
    CPT -- "L5 物流单触发派单" --> DIS
    DIS -- "派单决策结果" --> LGP
    DIS -- "运营预警" --> OPS
    OPR -- "M3 合同配置<br/>人工调整指令" --> DIS
    DIS -- "派单优先级算法<br/>含保险赔付权重" --> LGP
    QSV -. "费率参数" .-> DIS

五、DDD 战术设计

5.1 聚合根与实体

classDiagram
    class DispatchOrder {
        +String orderId
        +LogisticsOrder logisticsOrder
        +DispatchStatus status
        +Driver assignedDriver
        +DispatchMode dispatchMode
        +M3Contract contract
        +InsuranceConfirmation insuranceConfirm
        +DateTime createdAt
        +DateTime dispatchedAt
        +DateTime acceptedAt
        +accept()
        +reject(reason)
        +timeout()
        +adjust(newDriver, reason)
        +freeze()
    }

    class LogisticsOrder {
        +String orderId
        +String mfrId
        +String deliveryRoute
        +String category
        +Decimal cargoValue
        +Address pickup
        +Address delivery
    }

    class Driver {
        +String driverId
        +String dlvId
        +DispatchMode businessMode
        +Integer level
        +Decimal creditScore
        +InsuranceStatus insurance
    }

    class M3Contract {
        +String contractId
        +String logisticsCompanyId
        +M3Type type
        +DispatchMode dispatchMode
        +List routes
        +List mfrIds
        +List driverIds
        +Decimal serviceFeeRate
        +DateRange validity
    }

    class InsuranceConfirmation {
        +String driverId
        +String insurancePeriod
        +Boolean hasClaims
        +Decimal claimAmount
        +Decimal claimRatio
        +DateTime confirmedAt
    }

    DispatchOrder "1" *-- "1" LogisticsOrder : 值对象
    DispatchOrder "1" *-- "1" Driver : 引用
    DispatchOrder "1" *-- "0..1" M3Contract : 引用
    DispatchOrder "1" *-- "1" InsuranceConfirmation : 值对象
聚合根/实体 类型 边界 一致性
DispatchOrder 派单聚合根 聚合根 单次派单决策的完整生命周期 强一致(事务边界)
LogisticsOrder 物流单 值对象 由 CPT L5 事件经 ACL 转换而来 不可变
Driver 司机 实体引用 引用 DLV 物流商档案 最终一致
M3Contract M3 合同 实体引用 引用 DLV-M3 字段子表 最终一致
InsuranceConfirmation 保险确认 值对象 司机接单时确认 不可变
DispatchResult 派单结果 实体 派单完成后生成 反哺 DLV 信用评分

5.2 值对象清单

值对象 字段 用途
LogisticsOrder orderId, mfrId, deliveryRoute, category, cargoValue, pickup, delivery CPT L5 → DIS 经 ACL 转换
InsuranceStatus driverId, insurancePeriod, hasClaims, claimAmount, claimRatio, threshold DLV-019 → DIS 经 ACL 转换
DispatchPriority driverId, modeScore, contractScore, logisticsScore, insuranceScore, creditScore, levelMultiplier, totalScore 优先级算法输出
DispatchResult orderId, driverId, mode, status, dispatchedAt, acceptedAt, rejectedReason 派单完成事件载荷
AdjustmentReason type, description, operatorId, approvedBy, timestamp OL 调整留痕

5.3 领域服务

领域服务 职责 输入 输出
DispatchMatchingService M3 合同匹配 + M1 排班触发 LogisticsOrder 候选合同清单 + 司机清单
PriorityCalculator 计算司机派单优先级得分 Driver + LogisticsOrder + InsuranceStatus DispatchPriority
DriverSelector 从候选池选择最优司机 ListDriver + DispatchPriority Driver
FallbackStrategy 跨模式降级策略 failedDispatch + reason nextMode + Driver
ManualAdjustmentService OL 人工调整应用服务 DispatchOrder + AdjustmentReason DispatchOrder

5.4 领域事件

事件 触发时机 载荷 订阅方
DispatchRequested CPT L5 物流单生成 orderId, logisticsOrder DIS 派单匹配引擎
DispatchDecided DIS 完成派单决策 orderId, driverId, mode, contractId LGP App(下发司机端)+ CPT(更新订单状态)
DispatchAccepted 司机接受派单 orderId, driverId, acceptedAt CPT(订单状态→已派单)
DispatchRejected 司机拒绝派单 orderId, driverId, reason DIS FallbackStrategy(重派)
DispatchTimeout 司机超时未响应 orderId, driverId, timeoutAt DIS FallbackStrategy
DispatchAdjusted OL 人工调整派单 orderId, oldDriver, newDriver, reason CPT + LGP(重新下发)
InsuranceWarningTriggered DLV-019 赔付金额 ≥80% 保额上限 driverId, dlvId, claimRatio OPS(运营预警)
DispatchResultReverted 派单完成后反哺 orderId, driverId, status, responseTime DLV-035 信用评分

5.5 仓储与工厂

仓储 聚合 持久化 备注
DispatchOrderRepository DispatchOrder dis_dispatch_orders 表 派单聚合根持久化
DispatchResultRepository DispatchResult dis_dispatch_results 表 派单结果(用于反哺统计)
M3ContractRepository M3Contract 引用 DLV-M3 字段子表 只读仓储(DLV 维护)
DriverPoolRepository Driver 引用 DLV 物流商档案 + 司机档案 只读仓储(DLV 维护)
工厂 职责
DispatchOrderFactory 从 CPT L5 物流单事件创建 DispatchOrder 聚合根

六、业务逻辑详述

6.1 双轴三模式并行架构(运输模式 × 安装师傅模式)

DIS 派单服务是运输派单(物流商 LGP)与安装派单(师傅 WKR)的双轴决策引擎。运输轴沿用原三模式(M1-SELF / M2-INDP / M3-LOGC 物流公司合同),安装轴新增用户要求的师傅注册三分类(M1 自营 / M2 个体注册 / M3 签约安装供应商小B)。两轴形成 3×3 = 9 种派单组合,各组合优先级与适用场景矩阵单独定义。

6.1.1 运输模式 1 自营司机和车辆(M1-SELF)

定义:平台自有司机和车辆(雇佣或承租),由平台直接管理调度。

现阶段定位补充。对剩余货源(未被 M3 覆盖的物流单)提供基本自营司机排班功能。

适用场景: - M3 物流公司合同未覆盖的剩余货源 - 应急补单:M3 司机临时不可用时的紧急调度 - 特殊客户/特殊品类的高优先级订单(如高端客户指定自营配送)

派单方式:平台→司机直接派单 + 允许运营人员人工调整

司机端行为:接单可选「接受/拒绝」(M1 自营司机同样适用,但拒绝后由系统/OL 重新调度)

6.1.2 模式2 外部独立司机(M2-INDP,成熟期启用)

定义:与平台签约的独立司机(非物流公司雇员,个人工商户/自雇),直接对接平台接单。

现阶段定位成熟期启用。现阶段不实施。

适用场景: - 成熟期 M1 运力不足时的弹性补充 - 偏远区域/特殊品类专项运力 - 高峰期弹性运力扩展

派单方式:平台→司机直接派单

司机端行为:接受/拒绝(成熟期可考虑提供选单功能,现阶段不涉及)

6.1.3 模式3 专业中港跨境物流公司(M3-LOGC,现阶段为主)

定义:与不同专业物流公司签订不同类型服务合同,由物流公司提供车辆/司机资源。

现阶段定位现阶段为主。运营人员根据服务合同在系统中配置物流路线和货源 MFR 或 MFR 所在区域。

M3 合同类型多样性(TL 指示原文落地):

合同子类型 编码 合同约定内容 派单方式 现阶段优先级
类型 a M3-a 约定专门的物流路线(区域专线) 平台→物流公司→司机(两层)或平台→司机(一层) ★ 现阶段核心
类型 b M3-b 约定货源生产商或货源生产商所在区域 平台→物流公司→司机(两层)或平台→司机(一层) ★ 现阶段核心
类型 c M3-c 两层派单:平台派单给物流公司,再由物流公司派单到具体司机车辆 平台→物流公司→司机 ★ 现阶段核心
类型 d M3-d 一层派单:平台直接向司机车辆派单(但走物流公司合同) 平台→司机(合同挂靠物流公司) ★ 现阶段核心

说明:M3 合同的「物流路线/货源 MFR 区域」与「派单方式(一层/两层)」是两个独立维度,可自由组合。例如: - M3-a + M3-c:约定区域专线的两层派单 - M3-b + M3-d:约定货源 MFR 区域的一层派单(走物流公司合同但平台直派司机)


6.1.4 安装模式 1 自营师傅(INSTALL-M1_SELF,核心支柱)

定义:平台织布鸟 WLYT 直接雇佣签约的全职师傅(WPL REGISTER_TYPE = M1_SELF),五险一金 + 保底工资 + 绩效奖金,平台直接排班与管理。

现阶段定位派单核心支柱(与运输轴以 M3 为主形成并行核心)。标准客单、高端客户指定、VIP 厂家 MFR 深度合作项目优先由自营师傅安装。

派单方式:DIS 引擎 → WKR 师傅端 App 直接派单 + 运营 OL 人工覆盖调整。

拒单处罚:月 2 次拒单 = OL 黄牌谈话 + 1 小时岗前培训;连续 3 次 = 综合评分扣 20 分 + NORM 观察期 30 天。

6.1.5 安装模式 2 个体师傅注册(INSTALL-M2_FREE,弹性补充)

定义:香港自雇人士 / 个人工商户 / 兼职师傅,WPL 注册审核通过后直接在平台接单,平台抽佣 10%~15%(按师傅等级 GOLD 10% / AUTH 12% / NORM 15%)。

现阶段定位弹性补充。高峰期(五一/双十一/年前后)运力、离岛单、小众品类(如专业音响、定制橱柜安装)由 M2 个体师傅覆盖自营欠缺的供给。

派单方式:DIS 引擎 → WKR 师傅端 App 派单池显示,接受/拒绝抢单模式。

拒单处罚连续 2 次 35 分钟内拒单 = 综合评分扣 25 分 + 账号 30 分钟挂起 + 强制观看《拒单规则培训视频》4m12s(DIS-UC-06 异常用例落地),再拒 1 次 = -80 黄牌 SUSPEND 7 天。

6.1.6 安装模式 3 签约安装服务供应商企业-小 B(INSTALL-M3_SME,成熟期主力)

定义:与平台签约的小 B 安装公司 / 装修公司 / 工程承包商(PPL 资料册企业 ID)派遣的全职或签约师傅,师傅 WPL REGISTER_TYPE = M3_SME 且强制绑定企业 ID,平台与注册企业结算,企业负责向师傅发放工资。

现阶段定位成熟期主力。批量工程项目(如整栋唐楼 24 户统一家具安装)、厂家 MFR 深度合作(美标洁具全港 5 年保修项目)、企业全品类打包合作由 M3 安装企业承接。

派单方式:DIS 引擎 → 安装企业调度门户(mfr-portal 扩展版,安装企业角色 VIEW)→ 企业调度员派单到其内部师傅池;或 M3-d 一层模式:平台直接派单到企业挂靠的单个师傅,但走企业结算合同。

拒单处罚:企业整体季度考核系数扣 0.05(全年完成率 <95% → 次年合同降价 3%);单师傅连续拒单 = 企业侧内部替换,平台不直接扣企业师傅个人评分。


6.1.7 运输轴 × 安装轴 9 种派单组合矩阵(优先级系数)

运输 ↓ 安装 → 安装 M1 自营 (系数 ×1.15) 安装 M2 个体注册(×1.00) 安装 M3 小 B 企业(×0.95)
运输 M1 自营 🟢🟢 组合 1-1 全自营(×1.15 ×1.15 = 1.32 最高优先级)
适用:高端客户 VIP 指定、百万豪宅整屋安装
🟡🟢 组合 1-2(×1.15 ×1.00 = 1.15)
适用:自营车缺人力高峰期,临时借个体师傅
🔴🟢 组合 1-3(×1.15 ×0.95 = 1.09)
适用:自营车+签约企业师傅联合上门
运输 M2 独立物流商 🟢🟡 组合 2-1(×0.95 ×1.15 = 1.09)
适用:偏远区域物流商 M2 + 本地自营 M1 师傅
🟡🟡 组合 2-2 双个体(×0.95 ×1.00 = 0.95)
适用:小件自提+邻居师傅顺路安装
🔴🟡 组合 2-3(×0.95 ×0.95 = 0.90)
适用:M2 跨境专线 + M3 香港端安装企业
运输 M3 物流公司合同 🟢🔴 组合 3-1(×0.80 ×1.15 = 0.92)
适用:MFR 厂家跨境货运 + 自营师傅到厂安装
🟡🔴 组合 3-2(×0.80 ×1.00 = 0.80)
适用:MFR 厂家合作初期试水 + M2 个体弹性
🔴🔴 组合 3-3 全合同(×0.80 ×0.95 = 0.76 成熟期默认)
适用:MFR 深度合作批量单,物流+安装全外包合同

决策引擎执行顺序:派单引擎先算出每个单独运输候选的运输分,再算出每个安装候选的安装分(含 REGISTER_TYPE 系数),两者按 运输分 × 0.55 + 安装分 × 0.45 加权得到综合总分,按综合分从高到低生成候选列表;OL 可按负向权重人工调整单师傅分数(DIS-UC-05)。

CPT L5 派单触发时 DIS 自动分类规则:若订单 SCL 品类属于 32 细分类目的「小众定制」→ 安装候选池强制插入 ≥2 名 M2 个体师傅;若订单来源 tag = 厂家 MFR 批量项目 → 强制首选 组合 3-3 全合同。

6.2 现阶段派单服务方案(筹备期 · 模式3为主 + 模式1补充)

6.2.1 现阶段派单流程总览

flowchart TD
    START["CPT L5 物流单生成<br/>(订单进入派单阶段)"]

    M3MATCH["M3 合同匹配<br/>运营人员已配置:<br/>·物流路线(M3-a)<br/>·货源MFR/区域(M3-b)"]

    M3MATCH -- "匹配成功" --> M3DISP["M3 派单执行<br/>按合同类型 c/d 选择派单方式"]
    M3DISP -- "类型c: 两层派单" --> M3LOGC["物流公司接收<br/>物流公司内部派单到司机"]
    M3DISP -- "类型d: 一层派单" --> M3DRIVER["平台直接派单给司机<br/>(合同挂靠物流公司)"]

    M3MATCH -- "未匹配(剩余货源)" --> M1DISP["M1 自营司机排班<br/>基本排班功能"]

    M3LOGC --> DRIVER["司机接单确认<br/>(含C7保险周期确认)"]
    M3DRIVER --> DRIVER
    M1DISP --> DRIVER

    DRIVER -- "接受" --> EXECUTE["物流执行<br/>CPT L5 物流阶段流转"]
    DRIVER -- "拒绝" --> REASSIGN["重新派单<br/>·优先尝试同模式其他司机<br/>·跨模式降级: M3→M1<br/>·OL 人工调整介入"]

    REASSIGN --> M3DISP
    REASSIGN --> M1DISP

    OPMAN["OL 运营人工调整<br/>·可覆盖系统派单结果<br/>·可手动指定司机/车辆<br/>·可跨模式调度"]
    OPMAN -.->. M3DISP
    OPMAN -.->. M1DISP
    OPMAN -.->. REASSIGN

6.2.2 M3 合同配置流程(现阶段核心功能)

配置入口:OPR 运营后台 → 物流商管理 → M3 合同配置

配置流程

步骤 动作 负责角色 输入 输出
1 选择物流公司 OL DLV 物流商ID(M3 模式) 锁定合同主体
2 选择合同子类型 OL M3-a/b/c/d 任一或组合 DLV-M3-002 合同类型
3 配置物流路线(M3-a) OL 区域专线或区域范围 JSON DLV-M3-003 约定物流路线
4 配置货源 MFR 或区域(M3-b) OL MFR ID 列表 / MFR 所在区域 DLV-M3-004 约定货源生产商或区域
5 选择派单方式(M3-c/d) OL 两层派单 / 一层派单 DLV-M3-005 派单方式
6 关联旗下司机车辆清单 OL 司机ID + 车辆ID 列表 DLV-M3-006 物流公司旗下司机车辆清单
7 配置服务费率与合同有效期 OL + FL 服务费率 + 起止日期 DLV-M3-007 合同有效期 + 服务费率
8 生效并记录 系统 DLV-M3-008 运营配置入口记录

6.2.3 M3 派单匹配算法(现阶段)

# 伪代码:M3 派单匹配算法(DispatchMatchingService.dispatch_match_m3)
def dispatch_match_m3(logistics_order):
    """
    输入:CPT L5 物流单(含 MFR ID、收货地址、品类、货值等)
    输出:匹配的 M3 合同清单 + 派单方式
    """
    # 1. 货源 MFR 匹配(M3-b 优先)
    m3_b_contracts = query_m3_contracts(
        type='M3-b',
        mfr_id=logistics_order.mfr_id,
        mfr_region=logistics_order.mfr_region
    )

    # 2. 物流路线匹配(M3-a)
    m3_a_contracts = query_m3_contracts(
        type='M3-a',
        route_contains=logistics_order.delivery_route
    )

    # 3. 合并候选合同(按优先级排序)
    candidates = prioritize_contracts(m3_b_contracts + m3_a_contracts)

    # 4. 派单方式决策(M3-c 两层 vs M3-d 一层)
    for contract in candidates:
        if contract.dispatch_mode == 'M3-c':
            # 两层派单:通知物流公司,由其内部分配司机
            notify_logistics_company(contract.logistics_company_id, logistics_order)
            return {'mode': 'M3-c', 'contract': contract, 'status': 'pending_company_dispatch'}
        elif contract.dispatch_mode == 'M3-d':
            # 一层派单:平台直接派给物流公司旗下司机
            driver = select_driver_from_company(contract.logistics_company_id, logistics_order)
            if driver:
                # C7 保险周期确认
                if verify_insurance_clearance(driver):
                    send_dispatch_to_driver(driver, logistics_order)
                    return {'mode': 'M3-d', 'contract': contract, 'driver': driver, 'status': 'dispatched'}
                else:
                    # 保险赔付记录存在,降低优先级或限制高货值订单
                    if logistics_order.cargo_value > HIGH_VALUE_THRESHOLD:
                        continue  # 跳过该司机,尝试下一个
                    else:
                        send_dispatch_with_insurance_notice(driver, logistics_order)
                        return {'mode': 'M3-d', 'contract': contract, 'driver': driver, 'status': 'dispatched_with_insurance_notice'}

    # 5. 无 M3 合同匹配 → 转入 M1 自营司机排班
    return {'mode': 'M1-fallback', 'status': 'no_m3_match'}

6.2.4 M1 自营司机排班(现阶段补充)

触发条件:M3 合同未匹配的剩余货源物流单

排班逻辑

步骤 动作 说明
1 查询可用 M1 自营司机 排班状态=可用 + 车辆类型匹配 + 区域覆盖
2 按距离/载重/时段评分排序 基本排班算法(不过度复杂化)
3 C7 保险周期确认 同 M3-d 流程
4 派单给评分最高司机 系统自动派单
5 司机接受/拒绝 拒绝后尝试次优司机,全部拒绝则 OL 人工调整
6 OL 人工调整入口 OL 可覆盖系统派单结果,手动指定司机/车辆

现阶段 M1 不提供选单功能(TL 指示):司机端只能对系统派来的单据选择「接受/拒绝」,不能主动浏览选择单据。

6.2.5 司机接单行为(现阶段统一规则)

适用范围:M1 自营司机 + M3-d 一层派单司机(M3-c 两层派单由物流公司内部分配,不在平台司机端体现)

接单流程

sequenceDiagram
    participant SYS as 平台派单系统
    participant LGP as LGP App 司机端
    participant DRIVER as 司机
    participant OPR as OPR 运营后台

    SYS->>LGP: 推送派单通知(含订单摘要 + C7保险确认请求)
    LGP->>DRIVER: 显示派单详情

    alt 保险周期内无赔付事故
        DRIVER->>LGP: 确认「无赔付事故」
    else 保险周期内已发生赔付
        DRIVER->>LGP: 提供已发生赔付金额
        SYS->>SYS: 派单策略评估(降低优先级或限制高货值)
    end

    alt 接受
        DRIVER->>LGP: 点击「接受」
        LGP->>SYS: 接单确认
        SYS->>SYS: 订单状态→已派单
    else 拒绝
        DRIVER->>LGP: 点击「拒绝」
        LGP->>SYS: 拒绝反馈
        SYS->>SYS: 重新派单(同模式其他司机→跨模式降级→OL人工调整)
    end

    Note over DRIVER,OPR: 暂不提供选单功能(TL 指示)<br/>司机不能主动浏览选择单据

6.2.6 OL 运营人工调整机制

调整入口:OPR 运营后台 → 物流派单管理 → 人工调整

可调整操作

调整类型 说明 限制
覆盖系统派单结果 取消系统派单,手动指定其他司机/车辆 需填写调整原因
跨模式调度 M3→M1 或 M1→M3 切换 需 BO/TL 授权(涉及成本变化)
紧急补单 M3 司机临时不可用,紧急调度 M1 自营 系统记录紧急补单标记
派单冻结/解冻 临时冻结某司机/车辆的派单(如保险赔付预警) 自动同步 DLV-019 保险状态
批量调整 批量调整多个订单的派单(如区域运力临时调整) 需 OL 主管审批

6.3 成熟期派单服务方案(规模化运营 · 三模式全覆盖)

6.3.1 成熟期演进目标

维度 现阶段(筹备期) 成熟期
模式覆盖 M3 为主 + M1 补充 M1 + M2 + M3 全覆盖
M1 排班 基本排班 + 人工调整 智能排班算法(含 GPS/路况/载重优化)
M2 独立司机 不启用 弹性运力扩展
M3 合同类型 a/b/c/d 四类 新增组合类型 + 动态合同管理
派单方式 M3-c 两层 + M3-d 一层 引入 M2 一层派单 + 混合派单
司机端 接受/拒绝(无选单) 接受/拒绝 + 可选选单功能(TL 暂未要求,成熟期评估)
保险策略 C7 保险周期确认 + 80% 预警 引入保险费率动态调整 + 风险定价
人工调整 OL 全程可调 OL 异常介入 + 系统自动化为主

6.3.2 成熟期三模式协同关系

graph TD
    ORDER["CPT L5 物流单"]
    MATCH["派单匹配引擎<br/>(统一入口)"]

    ORDER --> MATCH

    MATCH -- "M3 合同匹配<br/>(优先)" --> M3["M3 物流公司派单<br/>·两层派单(M3-c)<br/>·一层派单(M3-d)"]
    MATCH -- "M2 独立司机匹配<br/>(弹性补充)" --> M2["M2 独立司机派单<br/>·平台→司机直接派单"]
    MATCH -- "M1 自营司机匹配<br/>(剩余/应急)" --> M1["M1 自营司机排班<br/>·智能排班算法"]

    M3 -- "运力不足/拒绝" --> FALLBACK1["降级到 M2/M1"]
    M2 -- "运力不足/拒绝" --> FALLBACK2["降级到 M1"]
    M1 -- "运力不足" --> ESCALATE["升级到 TL/BO<br/>紧急运力采购"]

    M3 --> CONFIRM["司机接单确认<br/>(含C7保险周期确认)"]
    M2 --> CONFIRM
    M1 --> CONFIRM

    CONFIRM -- "接受" --> EXECUTE["物流执行"]
    CONFIRM -- "拒绝" --> MATCH

    OPR["OL 运营人工调整<br/>(全程可介入)"] -.->. MATCH
    OPR -.->. M3
    OPR -.->. M2
    OPR -.->. M1

6.3.3 成熟期派单优先级算法(含 C7 保险赔付权重)

# 伪代码:成熟期派单优先级算法(PriorityCalculator.calculate_dispatch_priority)
def calculate_dispatch_priority(driver, logistics_order):
    """
    计算司机派单优先级得分(分数越高优先级越高)
    """
    score = 0

    # 1. 业务模式优先级(M3 > M2 > M1,现阶段策略)
    mode_score = {'M3': 100, 'M2': 80, 'M1': 60}
    score += mode_score[driver.business_mode]

    # 2. 合同匹配度(M3 专用)
    if driver.business_mode == 'M3':
        score += match_m3_contract_score(driver.contract, logistics_order)

    # 3. 距离/载重/时段评分(基本排班)
    score += calculate_logistics_score(driver, logistics_order)

    # 4. C7 保险赔付状态(负向权重)
    insurance_record = query_insurance_record(driver.dlv_id)
    if insurance_record.has_claims:
        # 已发生赔付事故 → 降低优先级
        score -= 20
        # 高货值订单限制
        if logistics_order.cargo_value > HIGH_VALUE_THRESHOLD:
            score -= 50  # 大幅降低
        # 赔付金额接近保额上限 80%
        if insurance_record.claim_ratio >= 0.8:
            score -= 80  # 接近暂停派单
            trigger_operation_alert(driver.dlv_id)  # 触发运营预警

    # 5. 信用评分(DLV-035)
    score += driver.credit_score * 0.1

    # 6. 等级乘数(DLV-L1/L2/L3)
    level_multiplier = {'DLV-L1': 1.05, 'DLV-L2': 1.0, 'DLV-L3': 0.95}
    score *= level_multiplier[driver.level]

    return score

6.3.4 成熟期 M2 独立司机启用方案(待 TL 决策)

启用条件(建议): - M1 + M3 运力连续 30 天利用率 ≥85% - 出现 M3 合同未覆盖的新区域/新品类 - 高峰期弹性运力需求(如双 11/618 等促销季)

M2 启用流程: 1. BO/TL 决策启用 M2 模式 2. OL 在 DLV 档案库新建 M2 独立司机档案(DLV-M2-INDP 字段子表) 3. M2 司机签订个人合作合同(含保险参保状态) 4. M2 司机接入 LGP App(与 M1/M3 司机端同一 App,权限差异) 5. 派单匹配引擎纳入 M2 候选池


七、对接方案

7.1 与 DLV 物流商档案库对接

DLV 数据 来源 DIS 用途
业务模式分类(DLV-M1/M2/M3) DLV §2.3 派单模式选择
M3 字段子表(DLV-M3-001~008) DLV §3.7 M3 合同配置读取
保险赔付记录(DLV-019) DLV §3.3 C7 保险周期确认 + 派单优先级权重
物流商等级(DLV-L1/L2/L3) DLV §2.1 派单优先级乘数
信用评分(DLV-035) DLV §3.x 派单优先级加分
旗下司机车辆清单(DLV-M3-006) DLV §3.7 M3-d 一层派单司机选择

7.2 与 CPT 客户项目跟踪服务对接

对接点 方向 说明
L5 物流单生成 → DIS CPT→DIS CPT L4 签约完成后,L5 物流单生成时发布 DispatchRequested 事件
DIS 派单决策 → CPT DIS→CPT DIS 发布 DispatchDecided 事件,CPT 更新订单状态为「已派单」
司机接单确认 → CPT LGP→DIS→CPT DIS 发布 DispatchAccepted 事件,CPT 更新订单状态
OL 人工调整 → CPT OPR→DIS→CPT DIS 发布 DispatchAdjusted 事件,CPT 更新订单状态

7.3 与 LGP 司机端对接

API 方向 用途
POST /lgp/dispatch/notify DIS→LGP 推送派单通知给司机
POST /lgp/dispatch/accept LGP→DIS 司机接受派单
POST /lgp/dispatch/reject LGP→DIS 司机拒绝派单
POST /lgp/insurance/confirm LGP→DIS C7 保险周期确认
GET /lgp/dispatch/{id} LGP→DIS 查询派单详情

7.4 与 OPR 运营后台对接

API 方向 用途
GET /dis/m3-contracts OPR→DIS 查询 M3 合同清单
POST /dis/m3-contracts OPR→DIS 新建/更新 M3 合同配置
POST /dis/adjust OPR→DIS 人工调整派单结果
GET /dis/dispatch/{id} OPR→DIS 查询派单详情
GET /dis/dispatch/history OPR→DIS 查询派单历史(按司机/物流商/订单)
GET /dis/alerts/insurance OPR→DIS 查询保险赔付预警清单
POST /dis/dispatch/freeze OPR→DIS 冻结/解冻司机派单

7.5 与 OPS 运营服务对接

对接点 方向 说明
保险赔付 ≥80% 预警 DIS→OPS 发布 InsuranceWarningTriggered 事件,OPS 触发运营预警流程
派单结果反哺 DLV-035 DIS→DLV 派单完成后发布 DispatchResultReverted 事件,DLV 更新信用评分

7.6 与 QMD 报价模型对接

对接点 方向 说明
物流费率参考 QMD→DIS 派单决策时查询物流费率(参考),不参与计算

八、接口定义与数据流

8.1 接口清单

接口 来源 目标 用途
POST /dis/dispatch CPT L5 DIS 触发派单(输入物流单,输出派单结果)
GET /dis/m3-contracts OPR DIS 查询 M3 合同清单
POST /dis/m3-contracts OPR DIS 新建/更新 M3 合同配置
POST /dis/adjust OPR DIS 人工调整派单结果
POST /lgp/dispatch/accept LGP DIS 司机接受派单
POST /lgp/dispatch/reject LGP DIS 司机拒绝派单
POST /lgp/insurance/confirm LGP DIS C7 保险周期确认
GET /dis/alerts/insurance OPR DIS 查询保险赔付预警清单

8.2 数据流向

数据 来源 目标 频率
M3 合同配置 OPR DLV-M3 字段子表 配置变更时
派单决策结果 DIS CPT L5 / LGP App 每次派单
司机接单状态 LGP DIS / CPT 每次接单
保险赔付记录 保险公司/司机 DLV-019 接单时同步
信用评分反哺 CPT L5/L8 DLV-035~041 月度
运营预警 DIS OPR 保险赔付≥80%时

九、现阶段实施路线图(筹备期 → 早期运营)

9.1 阶段划分

阶段 时间 目标 关键交付
阶段1:M3 合同配置功能 现阶段 OPR 运营后台支持 M3-a/b/c/d 合同配置 M3 合同配置 CRUD + DLV-M3 字段子表
阶段2:M3 派单匹配引擎 现阶段 根据 M3 合同配置自动匹配物流单 派单匹配算法 + 优先级评分
阶段3:M1 自营司机排班 现阶段 剩余货源的基本排班 M1 排班算法 + 人工调整
阶段4:LGP App 接单功能 现阶段 司机端接受/拒绝 + C7 保险确认 LGP App 派单详情页 + 接受/拒绝按钮
阶段5:OL 人工调整 现阶段 OPR 后台人工调整派单 覆盖派单 + 跨模式调度 + 紧急补单
阶段6:C7 保险预警 现阶段 运营预警功能 DLV-019 同步 + 80% 预警 + OL 介入入口
阶段7:成熟期 M2 启用 成熟期 M2 独立司机接入 M2 字段子表 + 派单匹配纳入 M2
阶段8:成熟期智能排班 成熟期 M1 智能排班算法升级 GPS/路况/载重优化算法

9.2 现阶段(阶段1-6)实施优先级

优先级 阶段 说明
🔴 P0 阶段1 + 阶段2 M3 合同配置 + 派单匹配引擎(现阶段核心)
🟡 P1 阶段3 + 阶段4 M1 排班 + LGP App 接单(现阶段补充)
🟢 P2 阶段5 + 阶段6 OL 人工调整 + C7 保险预警(运营支撑)
🔵 成熟期 阶段7 + 阶段8 M2 启用 + 智能排班升级(待 TL 决策)

十、业务架构解耦设计

10.1 模块边界

graph LR
    subgraph "DLV 档案库模块"
        DLV[(DLV 物流商档案库)]
        DLV_M1[M1 字段子表]
        DLV_M2[M2 字段子表]
        DLV_M3[M3 字段子表]
    end

    subgraph "DIS 派单服务模块(本文档)"
        MATCH[派单匹配引擎]
        ALGO[优先级算法]
        SCHED[排班调度器]
        ADJUST[人工调整接口]
    end

    subgraph "CPT L5 物流阶段模块"
        CPT[(CPT 订单流转)]
        L5[L5 派单触发]
    end

    subgraph "LGP App 司机端模块"
        LGP[(司机端)]
        ACCEPT[接单接受/拒绝]
        INS_CFM[C7 保险确认]
    end

    subgraph "OPR 运营后台模块"
        OPR[(运营后台)]
        M3_CFG[M3 合同配置]
        MANUAL[人工调整]
        ALERT[保险预警]
    end

    DLV -- "业务模式分类+字段子表" --> MATCH
    CPT -- "L5 物流单" --> MATCH
    MATCH --> ALGO
    ALGO --> SCHED
    SCHED --> LGP
    ADJUST --> SCHED
    OPR --> M3_CFG
    M3_CFG --> DLV_M3
    OPR --> MANUAL
    MANUAL --> ADJUST
    LGP --> ACCEPT
    LGP --> INS_CFM
    INS_CFM --> DLV
    OPR --> ALERT

10.2 数据库表设计草案(待阶段三细化)

表名 用途 主要字段
dis_dispatch_orders 派单聚合根持久化 order_id, logistics_order_json, status, driver_id, mode, contract_id, insurance_confirm_json, created_at, dispatched_at, accepted_at
dis_dispatch_results 派单结果(反哺统计) order_id, driver_id, mode, status, response_time, rejected_reason
dis_m3_contracts_cache M3 合同配置缓存(读自 DLV-M3 字段子表) contract_id, logistics_company_id, type, dispatch_mode, routes_json, mfr_ids_json, driver_ids_json, service_fee_rate, validity
dis_insurance_warnings 保险赔付预警记录 warning_id, driver_id, dlv_id, claim_ratio, triggered_at, status
dis_manual_adjustments OL 人工调整留痕 adjustment_id, order_id, type, old_driver_id, new_driver_id, reason, operator_id, approved_by, created_at

十一、待 TL 决策的开放问题

# 问题 听写建议 待 TL 指示
Q1 M3 合同配置是否支持「组合类型」(如 M3-a + M3-c 同时生效) ✅ 支持,TL 原话「M3 合同的物流路线/货源 MFR 区域与派单方式是两个独立维度,可自由组合」已落地 待确认
Q2 M1 自营司机排班是否需要 GPS 实时定位 现阶段不做,成熟期阶段8引入智能排班时再做 待确认
Q3 司机拒绝派单后的「同模式其他司机」候选数量 建议 3 个,全部拒绝后跨模式降级 待确认
Q4 C7 保险赔付预警阈值(80%)是否可配置 建议运营后台可配置(默认 80%) 待确认
Q5 OL 人工调整是否需要二级审批 建议覆盖派单/紧急补单一审(OL主管);跨模式调度需 BO/TL 授权 待确认
Q6 M2 独立司机启用条件(30天利用率 ≥85%)阈值是否合理 待 TL 评估 待确认

十二、修订记录

版本 日期 修订人 修订内容
V1.0 草案 2026-08-21 上午 DT 初稿(位于 docs/主数据服务/平台成熟期派单服务方案.md,457 行)
V1.0 2026-08-21 下午 DT 迁移升级为独立服务设计:① 文档迁移至 docs/派单服务/派单服务设计.md,编号升级为 DOC-P71-D DIS-D;② 引入 DDD 战略设计(§二 子域划分+限界上下文+上下文映射);③ 引入 DDD 战术设计(§五 聚合根/实体/值对象/领域服务/领域事件/仓储);④ 服务边界与职责表对齐 DDD 落地(§4.1);⑤ 业务逻辑保留原有三模式+M3合同+M1排班+C7保险+OL调整完整内容;⑥ 接口与数据流合并到§八;⑦ 新增§十一待 TL 决策的开放问题
V1.1 2026-08-21 DT 安装师傅三分类升级(运输轴 × 安装轴 双轴三模式 3×3=9 组合矩阵)(承接用户指令:"派单服务还包括安装师傅,分为模式1/2/3"):① §6.1 原"三种物流供应商"升级为"双轴三模式并行架构 运输×安装";② §6.1.4 新增安装模式 1 M1_SELF(自营全职师傅 ×1.15 系数,拒单规则:月 2 黄牌谈话 / 连续 3 次 -20 分);③ §6.1.5 新增安装模式 2 M2_FREE(香港自雇 / 个体户注册师傅 ×1.00,抽佣 10-15% 等级化,拒单:连续 2 次 -25 分 + 30m 挂起 + 4m12s 培训视频);④ §6.1.6 新增安装模式 3 M3_SME(签约安装服务供应商小 B 企业派遣 ×0.95 企业结算,必绑 PPL-SME-ID,拒单:企业季度系数 -0.05 / 次年降 3%);⑤ §6.1.7 新增 9 组合矩阵表(运输 3 行 × 安装 3 列,1-1 全自营 1.32 / 3-3 全合同 0.76 默认成熟期)+ 加权公式:综合总分 = 运输分 × 0.55 + 安装分 × 0.45 + CPT L5 小众品类 / MFR 批量强制规则;⑥ WPL 特征库 V1.2 REGISTER_TYPE Enum 三分类 + WPL-006b 签约企业 ID 字段联动;⑦ dispatch.html 扩展三列 M1/M2/M3 安装候选池卡片 + 今日派单记录安装类型 badge 列;⑧ 文档头 V1.0→V1.1 + 最近更新 2026-08-21

本文档为派单服务(DIS DOC-P71-D V1.1)的设计文档,独立于 DLV 物流商档案库,承接 CPT L5 派单触发,下发 LGP 司机端 + WKR 师傅端双端协同派单。原《平台成熟期派单服务方案》已迁移至本文档,主数据服务目录下原文件已删除。