bindbox-game/.trae/documents/后台订单管理完善方案.md
邹方成 6ee627139c
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 40s
feat: 新增支付测试小程序与微信支付集成
feat(pay): 添加支付API基础结构
feat(miniapp): 创建支付测试小程序页面与配置
feat(wechatpay): 配置微信支付参数与证书
fix(guild): 修复成员列表查询条件
docs: 更新代码规范文档与需求文档
style: 统一前后端枚举显示与注释格式
refactor(admin): 重构用户奖励发放接口参数处理
test(title): 添加称号效果参数验证测试
2025-11-17 00:42:08 +08:00

65 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 目标
- 为管理后台补齐“订单管理”全套能力:全局订单列表/详情、筛选与搜索、状态流转(取消/发货/签收/履约)、退款、导出与对账入口;与现有用户维度订单查询保持一致风格。
# 现状与缺口
- 已有:按用户查看订单、运营漏斗统计;无全局订单页与发货、退款、对账的管理操作。
- 模型完备:`orders/order_items/shipping_records/user_points_ledger`,但缺少支付域表与真实退款流程;`CreateRefund`占位未挂路由。
# 后端接口设计
- 订单列表(全局):`GET /api/admin/pay/orders`
- 筛选:`status(1/2/3/4)``source_type(1/2/3)``pay_time_range``created_range``user_id/order_no``is_consumed`
- 排序:`created_at/paid_at` 倒序
- 返回:分页、订单聚合(含金额、状态、支付时间、用户信息摘要)
- 订单详情:`GET /api/admin/pay/orders/:order_no`
- 返回:订单主信息 + `order_items` + `shipping_records` + 记账流水摘要
- 订单备注更新:`PUT /api/admin/pay/orders/:order_no/remark`
- 订单取消:`POST /api/admin/pay/orders/:order_no/cancel`
- 行为:若`status=1待支付`→置`status=3已取消`/写`cancelled_at`,幂等
- 发货单列表:`GET /api/admin/pay/shipments`
- 筛选:`status(1待发/2已发/3已签收/4异常)``order_no/product_id/express_no`、时间范围
- 创建发货:`POST /api/admin/pay/shipments`
- 入参:`order_no/order_item_id/address_id/quantity/express_code(optional)`;行为:生成`shipping_records`,将`status=1待发`
- 标记已发货:`PUT /api/admin/pay/shipments/:id/ship`
- 入参:`express_code/express_no`;行为:置`status=2已发/shipped_at`
- 标记已签收:`PUT /api/admin/pay/shipments/:id/receive`
- 行为:置`status=3已签收/received_at`
- 标记异常:`PUT /api/admin/pay/shipments/:id/abnormal`
- 履约完成(虚拟):`PUT /api/admin/pay/orders/:order_no/consume`
- 行为:`is_consumed=1`,用于虚拟资产核销;幂等
- 退款(对接支付域):
- 创建退款:`POST /api/admin/pay/refunds`保留当前占位实现后续替换为真实支付退款API
- 查询退款:`GET /api/admin/pay/refunds``GET /api/admin/pay/refunds/:refund_no`
- 导出:`GET /api/admin/pay/orders/export`按筛选条件导出CSV/XLSX
- 对账入口:`POST /api/admin/pay/bills/import`(后续结合支付域实现)
# 服务层与数据层
- 新增 `admin` 服务模块:封装订单聚合查询、详情组装、状态流转与发货操作;使用 Gorm 事务与条件更新保证幂等。
- DAO 复用:`orders/order_items/shipping_records/user_points_ledger`;索引建议:`orders.order_no`唯一、`shipping_records.express_no`索引。
# 前端管理页
- 新增“订单管理”菜单及页面:
- 订单列表页:筛选(状态、来源、时间、用户、订单号、履约)、表格列(订单号、用户、金额、状态、支付时间、来源、履约、备注)、操作(查看、取消、退款、履约、导出)
- 订单详情页:订单主信息、订单项、发货记录(创建/发货/签收/异常)、记账流水与日志
- 发货管理页:发货单列表,支持搜索与状态更新
- API 封装:在 `web/admin/src/api/` 新增 `pay-orders.ts``shipments.ts`,匹配后端接口
# 业务与校验
- 金额与状态校验:取消仅允许`status=1`;履约仅允许`status=2`;发货需校验行项目数量与地址。
- 幂等:状态流转采用条件更新;重复请求直接返回当前状态。
- 审计:请求日志已入库(`dblogger`),增加关键操作的业务日志字段。
# 验收标准
- 管理端可全局查看与筛选订单,支持详情、取消、履约、发货、签收、异常标记;
- 退款创建与查询可用(占位版本),后续升级为真实退款;
- 导出按筛选条件生成数据;
- 运营漏斗与新页面数据口径一致;编译与基础联调通过。
# 实施步骤
1. 后端:新增订单与发货相关接口与服务;将退款占位路由挂载;完善查询与分页;幂等与事务。
2. 前端新增API文件与页面组件列表/详情/发货接入菜单与路由UI按现有风格。
3. 校验:编译与接口联调、权限校验、筛选与导出验证;漏斗口径确认。
4. 留待增强:接入真实支付退款与对账流程;增加订单号唯一索引与支付幂等表。
# 风险与处理
- 真实退款未接入:先保留管理操作占位,避免资金走错;上线前需联通支付域。
- 并发与幂等:条件更新控制状态流;失败重试与告警结合现有日志。