售后申请与销售退货申请
本文整理销售退货申请、审核、退货入库、异常退货和 APP/SAAS 同步。它和普通销售退货、出库撤销、采购售后不同,排查时要先确认退货来源和原始销售出库单。
业务目标
- 客户或服务站对已出库商品发起退货申请。
- 后台审核退货申请。
- 审核通过后执行退货入库,恢复库存。
- 同步销售单、出库单、收款/退款、APP/SAAS 下游状态。
入口文件
- 退货申请控制器:
application/controllers/applyReturn/ApplyReturnOrder.php - 退货申请服务:
application/Services/ApplyReturn/ApplyReturnSer.php - PC 销售:
application/controllers/scm/InvSa.php - 销售退货任务:
application/controllers/tasks/SaleReturn.php - 全车件销退:
application/controllers/allcarpart/sale/SaReturnOrder.php - 同步下游:
application/Services/SyncOrder/SyncOrderSer.php
核心表
| 表 | 用途 | | --- | --- | | t_scm_apply_return_order | 销售退货申请主表 | | t_scm_apply_return_order_info | 退货申请明细 | | t_scm_abnormal_return_log | 异常退货记录 | | t_scm_sa_order / t_scm_sa_order_info | 原销售单和明细 | | t_scm_sa_invoice / t_scm_sa_invoice_info | 原出库单和明细 | | t_scm_inventory / t_scm_inventory_info | 销售退货入库流水 | | t_scm_payment / t_scm_payment_info | 退款/冲账 |
核心方法
ApplyReturnSer::add:新增退货申请。ApplyReturnSer::getList:申请列表。ApplyReturnSer::detail:申请详情。ApplyReturnSer::check:审核。ApplyReturnSer::inStorageDetail:入库详情。ApplyReturnSer::inStorage:退货入库。ApplyReturnSer::cancel:取消。ApplyReturnSer::orderFinish:订单完成处理。ApplyReturnSer::validate:业务校验。
主流程
flowchart TD
A["发起退货申请"] --> B["校验原销售/出库和可退数量"]
B --> C["生成退货申请主表和明细"]
C --> D["后台审核"]
D -->|通过| E["退货入库"]
E --> F["写销售退货库存流水"]
F --> G["恢复实时库存"]
G --> H["同步销售/出库/APP/SAAS"]
D -->|驳回| I["申请结束"]
状态和数量口径
- 可退数量 = 原出库数量 - 已退数量 - 已申请未完成数量。
- 退货入库数量影响实时库存,交易类型通常看
TransTypeEnums::TRANSTYPE_SA_INVOICE_RETURN。 - 退款/冲账是否发生,取决于销售单支付方式、收款状态和业务规则。
- 异常退货记录不一定等同于正常退货申请,需要看
t_scm_abnormal_return_log。
异常流程
- 申请失败:查原出库单是否已撤销、可退数量是否为 0。
- 审核失败:查审核状态、退货明细、权限。
- 入库失败:查货位、库存写入、是否重复入库。
- 库存未恢复:查销售退货库存流水和实时库存。
- 下游没同步:查
SyncOrderSer事件和 APP/SAAS 消费日志。
常用 SQL
select * from t_scm_apply_return_order where sid = :sid and billNo = :return_bill_no;
select * from t_scm_apply_return_order_info where order_id = :return_order_id;
select * from t_scm_sa_invoice where sid = :sid and billNo = :invoice_bill_no;
select * from t_scm_sa_invoice_info where invoiceId = :invoice_id;
select * from t_scm_inventory where sid = :sid and srcBillNo = :return_bill_no;
常用 rg 命令
rg -n "ApplyReturnOrder|ApplyReturnSer|inStorage|orderFinish" application/controllers application/Services
rg -n "SCM_APPLY_RETURN_ORDER|SCM_SA_RETURN_LOG|TRANSTYPE_SA_INVOICE_RETURN" application
rg -n "APP_APPLY_RETURN_FINISH|APP_APPLY_RETURN_CHECKED|apply_return" application/Services application/controllers/tasks application/KzData/Enums
改动风险和回归清单
- 正常退货申请:新增、审核通过、入库。
- 驳回/取消:状态和可退数量恢复。
- 部分退货:数量和金额按明细计算。
- 重复提交:同一出库明细不能重复退超。
- 库存:退货入库流水、实时库存、报表。
- 下游:APP/SAAS 退货审核和完成事件。