🔄 退款/售后系统设计

本章详述即时配送小程序的退款与售后流程,包括:用户取消、客服退款、异常订单处理、退款规则、数据表结构,以及管理端退款审核功能。

退款安全 T+1到账 原路退回

退款原则:退款必须原路退回,确保资金安全;退款申请需审核,异常订单由客服介入处理;退款后需更新相关业务状态(订单、优惠券、积分等)。

一、退款流程详细时序图

1.1 用户取消订单(未接单)

sequenceDiagram participant U as 用户 participant APP as 小程序 participant API as 后端服务 participant PAY as 微信支付 participant DB as 数据库 U->>APP: 申请取消订单 APP->>API: 提交取消申请 API->>DB: 检查订单状态 DB-->>API: 状态=待接单,可取消 API->>PAY: 申请退款(按原路退回) PAY-->>API: 退款成功 API->>DB: 更新订单状态(已取消) API->>DB: 退还优惠券(如已使用) API->>DB: 退还积分(如已赠送) API-->>APP: 退款成功 APP-->>U: 展示取消成功

1.2 骑手已接单后取消

sequenceDiagram participant U as 用户 participant APP as 小程序 participant API as 后端服务 participant C as 骑手 participant PAY as 微信支付 participant DB as 数据库 U->>APP: 申请取消(骑手已接单) APP->>API: 提交取消申请 API->>DB: 检查订单状态 DB-->>API: 状态=已接单 API->>C: 推送取消请求 C->>API: 同意/拒绝取消 alt 骑手同意 API->>PAY: 申请退款 PAY-->>API: 退款成功 API->>DB: 更新订单+记录原因 API-->>APP: 取消成功 else 骑手拒绝 API-->>APP: 取消被拒绝 APP-->>U: 展示骑手拒绝原因 end

1.3 客服/后台取消

sequenceDiagram participant CS as 客服 participant ADMIN as 管理端 participant API as 后端服务 participant PAY as 微信支付 participant DB as 数据库 participant U as 用户 CS->>ADMIN: 查询异常订单 ADMIN->>API: 获取订单详情 API-->>ADMIN: 订单信息 CS->>ADMIN: 提交退款申请 ADMIN->>API: 创建退款工单 API->>DB: 记录退款原因 alt 需财务审核 API->>FIN[财务审核]: 推送审核 FIN->>API: 审核通过 end API->>PAY: 申请退款 PAY-->>API: 退款成功 API->>DB: 更新订单+退款记录 API->>U: 通知用户退款 API-->>ADMIN: 退款完成

二、退款规则设计

2.1 退款时限规则

订单状态用户自主取消需骑手同意退款比例
待支付--自动取消,不扣款
待接单✅ 可取消-100% 退回
已接单(骑手未取件)❌ 需申请✅ 需骑手同意100% 退回
配送中❌ 需申请❌ 骑手可拒绝需协商(扣除已产生费用)
已送达❌ 需申请-需客服判断

2.2 退款金额计算规则

场景退款金额说明
未接单取消实付金额 100%全额退款
骑手已接单未取件实付金额 100%全额退款,骑手无损失
配送中取消(骑手已产生费用)实付金额 - ¥3.00补偿骑手已产生费用
商品损坏/丢失实付金额 100%由责任方承担(骑手/商家)
延误导致拒收实付金额 100%平台承担,不扣骑手

2.3 退款时效

  • 微信支付退款:原路退回,T+1 到账(微信侧处理)
  • 钱包余额退款:实时到账
  • 优惠券:退款后自动返还,限当日有效
  • 积分:退款后自动返还,限30日内

三、退款状态机

stateDiagram-v2 [*] --> 待申请: 用户发起退款 待申请 --> 待审核: 提交申请 待审核 --> 审核中: 客服受理 审核中 --> 待退款: 审核通过 审核中 --> 已拒绝: 审核不通过 已拒绝 --> [*]: 通知用户 待退款 --> 退款中: 调用支付退款 退款中 --> 已退款: 退款成功 退款中 --> 退款失败: 退款失败 退款失败 --> 待退款: 重试 已退款 --> [*]: 通知用户

四、退款相关数据表

4.1 退款记录表 ot_refund

字段类型说明
idbigint主键
refund_novarchar(32)退款单号
order_idbigint关联订单ID
order_novarchar(32)订单编号
user_idbigint用户ID
courier_idbigint骑手ID(可空)
refund_typetinyint退款类型(1用户取消/2投诉退款/3后台退款)
refund_reasonvarchar(200)退款原因
refund_amountdecimal(10,2)退款金额
pay_amountdecimal(10,2)原支付金额
coupon_returntinyint是否返还优惠券(0否/1是)
points_returnint返还积分数量
statustinyint状态(0待审核/1审核中/2待退款/3已退款/4已拒绝)
apply_user_idbigint申请人ID
audit_user_idbigint审核人ID
audit_remarkvarchar(200)审核备注
pay_refund_novarchar(64)微信退款单号
refund_timedatetime退款成功时间
created_atdatetime创建时间
updated_atdatetime更新时间

4.2 退款原因配置表 ot_refund_reason

字段类型说明
idbigint主键
reason_namevarchar(50)原因名称
reason_typetinyint原因类型(1用户/2系统)
refund_ratiodecimal(3,2)默认退款比例(0.00-1.00)
need_courier_confirmtinyint是否需骑手确认(0否/1是)
statustinyint状态(0禁用/1启用)
sortint排序

五、退款核心API

接口说明关键参数
POST /app/ot/refund/apply用户申请退款order_id, reason_id, remark
GET /app/ot/refund/list用户退款记录page, size, status
GET /app/ot/refund/detail退款详情refund_id
POST /app/ot/refund/courier/confirm骑手确认取消refund_id, agree
POST /admin/ot/refund/page管理端退款列表page, size, status, date
POST /admin/ot/refund/audit审核退款refund_id, agree, remark
POST /admin/ot/refund/batch-audit批量审核refund_ids, agree, remark

六、用户端退款申请页面

新建文件:structurepages/1.12-用户-退款申请.html

6.1 页面结构

区块内容
订单信息订单号、商品信息、支付金额、下单时间
退款原因退款原因选择(Chip组件)+ 补充说明
退款金额系统计算的可退款金额展示
退款方式原路退回(微信支付/钱包余额)
提交按钮提交退款申请

6.2 退款进度查询

状态展示内容
待审核等待客服处理,预计24小时内
审核通过审核通过,退款处理中
退款成功退款成功,T+1到账说明
已拒绝拒绝原因,联系客服入口

文档同步:requirements_v2.md 退款模块 | 维护:项目团队