外部渠道、全车件与大客户订单

模块职责

渠道模块用于承接外部平台或大客户订单,把外部订单转换为 DGJ 侧平台订单、销售出库或采购相关单据,并把审核、发货、签收、售后状态回传给渠道方。

主要入口

  • 内部渠道 API:application/controllers/inner/channel
  • 渠道订单控制器:application/controllers/inner/channel/Order.php
  • 渠道商品控制器:application/controllers/inner/channel/Goods.php
  • 渠道售后控制器:application/controllers/inner/channel/Aftersale.php
  • 全车件入口:application/controllers/allcarpart

关键 Service

  • application/Services/Channel/BaseOrder.php:渠道订单列表、详情、创建、发货、签收基础逻辑。
  • application/Services/Channel/BaseGoods.php:渠道商品基础能力。
  • application/Services/Channel/BaseAftersale.php:渠道售后基础能力。
  • application/Services/Channel/Fc/FcOrderService.php:FC 渠道订单。
  • application/Services/Channel/Fc/FcGoodsService.php:FC 渠道商品。
  • application/Services/Channel/Fc/FcAftersaleService.php:FC 渠道售后。
  • application/Services/Channel/CzgDcd:其他渠道实现。

关键模型

  • 渠道订单主表:application/models/channel/ChannelOrderModel.php
  • 渠道订单明细:ChannelOrderInfoModel.php
  • 渠道售后主表:ChannelAftersaleModel.php
  • 渠道售后明细:ChannelAftersaleInfoModel.php
  • 渠道签收明细:ChannelOrderSignDetailModel.php

渠道订单状态

定义在 application/KzData/Enums/ChannelOrderEnums.php

  • created:待审核。
  • wait_ship:待发货。
  • part_ship:部分发货。
  • finish:已完成。
  • cancel:已取消。

审核结果:

  • 1 审核通过。
  • 0 审核拒绝。

订单号前缀:

  • CHS:平台订单。
  • CHR:平台退单。

渠道订单创建流程

渠道方请求创建订单
  -> inner/channel/Order::create
  -> BaseChannel 根据 sceneCode 选择具体渠道 Service
  -> BaseOrder::formatRequestToOrderEntry
  -> 生成 DGJ 平台订单号 CHS
  -> 写 channel_order 和 channel_order_info
  -> 返回 saleOrderNo/sourceOrderNo/details

关键校验:

  • 场景码 sceneCode 必须能找到渠道服务。
  • 外部订单号不能重复。
  • 商品明细要映射到 DGJ SKU 或可识别的第三方商品。
  • 服务站、商户、店铺、客户关系必须存在。

渠道审核流程

渠道订单待审核
  -> inner/channel/Order::order_approve
  -> 具体渠道 Service 执行审核
  -> 审核通过后状态变 wait_ship
  -> 审核拒绝后状态变 cancel 或拒绝态
  -> MqSer::sendChannelOrderApprove 通知渠道

渠道发货流程

渠道订单 wait_ship / part_ship
  -> BaseOrder::delivery
  -> checkCanDelivery 校验剩余可发数量
  -> 组装出库参数
  -> InvCuService::submitOrderV2 创建出库/大客户出库单
  -> 更新 channel_order_info.shiped_num
  -> 更新 channel_order 状态 part_ship 或 finish
  -> MqSer::sendChannelOrderDelivery 通知渠道

业务边界:

  • 发货数量不能超过明细剩余数量。
  • 部分发货后订单保持 part_ship
  • 全部发货后订单变 finish
  • 发货会关联 DGJ 侧销售/出库单据。

渠道签收流程

渠道方回传签收
  -> inner/channel/Order::confirm_receipt
  -> BaseOrder::confirm_receipt
  -> 生成 signingNo + shipOrderNo + shipOrderRowNo 的唯一签收 ID
  -> 写 channel_order_sign_detail
  -> 防止重复签收

全车件模块

全车件入口集中在 application/controllers/allcarpart,它是一套相对独立的采购、销售、库存、资金页面:

  • allcarpart/purchase:询价、采购订单、采购退货、模板。
  • allcarpart/sale:销售单、销售出库、销售退货、销售价格策略。
  • allcarpart/storage:库存、仓库、货位、盘点。
  • allcarpart/fund:账户、付款单。
  • allcarpart/goods:商品和搜索。

路由在 application/config/routes.php 中显式映射,例如:

  • allcarpart/purchase/po-return-order
  • allcarpart/sale/sa-order
  • allcarpart/sale/sa-invoice-order
  • allcarpart/storage/inventory
  • allcarpart/fund/payment-order

与其他模块的关系

  • 销售:渠道订单发货通常会落销售或出库单。
  • 库存:发货扣库存,退货入库。
  • MQ:渠道审核、发货、退货动作通过 MqSer 推送。
  • 客户/供应商:渠道订单需要映射服务站、商户、外部店铺和客户。
  • 报表:全车件和渠道订单最终也会进入采购、销售、库存或资金报表。

排查建议

  • 渠道重复下单:查 source_order_no 和短时间重复请求锁。
  • 发货失败:查订单状态是否为 wait_shippart_ship,明细剩余数量是否足够。
  • 渠道没收到发货:查 MqSer::sendChannelOrderDeliverydgj_channel 队列。
  • 全车件页面路由 404:先看 application/config/routes.php 中 allcarpart 映射。