## 目标 - 列表与详情页统一显示“用户、状态、来源、发货状态”等中文枚举名称 - 在订单详情提供“退款”入口(支持全额/部分退款),并完善数据还原(积分、库存/履约、优惠券)与幂等、校验流程 - 支持用户发起退款申请→后台审核→执行退款的闭环 ## 前端改造 ### 枚举与显示 - 新增/复用前端常量映射: - 订单状态:`{1: 待支付, 2: 已支付, 3: 已取消, 4: 已退款}` - 来源类型:`{1: 商城直购, 2: 抽奖票据, 3: 其他}` - 发货状态:`{1: 待发货, 2: 已发货, 3: 已签收, 4: 异常}` - 抽奖结果:`is_winner(0/1)→否/是`、`level(1/2/3)→S/A/B` - 列表与详情使用映射显示中文名;用户信息显示 `nickname`(无则显示 `用户ID`) ### 退款入口与交互 - 详情页添加“退款”按钮:显示可退款金额(默认 `actual_amount`)、支持部分退款(输入退款金额与原因) - 提交后刷新详情;在详情页增加“退款记录”区块,显示每笔退款状态与时间、原因 - 禁用策略: - 已取消或已退款不可再次退款 - 货已签收或虚拟已履约需走人工审批(按钮灰显或改为“申请退款”) ## 后端接口与流程 ### 管理端 - 创建退款:`POST /api/admin/pay/refunds` - 入参:`order_no, amount, reason` - 校验:订单存在且`status=2`;`amount>0 && <= 未退款余额` - 幂等:生成`refund_no`唯一;重复请求返回既有状态 - 执行: - 微信真实退款:调用`/v3/refund/domestic/refunds`(成功→记录到`payment_refunds`并落账) - 数据还原: - 积分:写 `user_points_ledger(action=refund_restore, points=points_amount)`(按原抵扣金额,部分退款按比例/策略) - 虚拟履约:若`is_consumed=1`且可撤销,标记撤销或新建“撤销记录”;否则保留人工处理标记 - 发货:如已发/已签收不自动撤销,标记异常并提示人工流程(退货入库) - 订单状态: - 全额退款→置`status=4已退款` - 部分退款→保持`status=2已支付`,记录累计退款额(在`payment_refunds`中维护) - 查询退款:`GET /api/admin/pay/refunds`、`GET /api/admin/pay/refunds/:refund_no` - 在订单详情接口增加退款列表聚合(展示退款记录) ### 用户端退款(申请→审核→执行) - 用户申请:`POST /api/app/orders/:order_no/refund/apply`(金额与原因) - 管理端审核:`POST /api/admin/pay/refunds/:refund_no/approve | /reject` - 审核通过→执行退款(同管理端创建退款);拒绝→记录原因 ## 数据模型建议(支付域) - `payment_refunds`:`refund_no`唯一,`order_id/order_no/channel/status(submitted/success/abnormal/closed)`, `amount_refund`, `reason`, `success_time`, `raw` - 在现有`orders`保持`order_no`唯一;在退款、通知增加幂等校验(`refund_no/notify_id`) ## 校验与边界 - 金额单位统一“分”;仅信任后端计算出的可退余额 - 订单来源:抽奖类订单(`source_type=2`)需校验抽奖资产状态(`user_inventory`)是否可撤销 - 已签收/履约完成:默认不自动撤销,需人工处理或审批流;在系统中标注并可导出 ## 幂等与一致性 - 退款:`refund_no`唯一;重复请求返回现有记录 - 回调解密与验签:使用 SDK `notify.Handler`;退款结果通过回调或主动查询推进记录状态 - 状态推进使用事务与条件更新(如`WHERE status=2`)保证并发安全 ## 前端展示增强(详情) - 信息区块:订单、活动、付款、订单项、发货、积分、退款记录 - 显示中文枚举;金额统一格式化(分→元)或保留分展示 - 退款弹窗:输入金额/原因;显示可退款上限与提示规则(履约/签收需审批) ## 验收标准 - 列表与详情均显示中文枚举;详情展示活动与付款信息完整 - 管理端可创建退款并正确落账(占位或真实接入);用户申请退款可走审批流程 - 幂等与边界校验完善;构建与联调通过 ## 实施步骤 1. 前端:新增枚举常量并替换列表/详情的显示;详情页加退款按钮与退款记录展示 2. 后端:完善退款创建与查询接口、数据还原逻辑与幂等;补充详情接口聚合退款记录 3. 用户端:新增退款申请与后台审核接口(可按你需求分阶段) 4. 测试与联调:金额/并发/履约/签收边界;通知与查询兜底