Files
platforms/docs/操作日志_用户端APP_订单操作_20260907.md
czl231 3ef33b531d 已完成用户APP首期功能开发
交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
2026-09-13 00:57:32 +08:00

36 lines
3.7 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.
# 商城订单取消与收货
操作时间2026-09-07。类型扩展与状态边界修复。影响用户商城订单列表、取消、确认收货。
## 变更前后
此前用户端仅显示支付和退款操作,即使已有取消/确认收货接口也没有对应入口。本次服务端通过 allowed_actions 发布 cancel、confirm_receipt列表显示直接操作按钮同时保留操作菜单用户明确确认后调用接口成功重新读取订单列表。
原确认收货只检查物流状态20未校验订单业务状态已取消订单残留物流状态时也可能被确认。现在在事务内锁定本人订单仅业务状态18且物流状态20允许首次收货物流30重试不改写时间。取消仅允许状态16状态22重试返回成功且不再次返还库存。
## 文件与方法
- `backend/api/internal/logic/client/user/shop.go`ListShopOrders、CancelShopOrder、ConfirmShopReceipt。已支付发货订单显示待收货收货后显示已收货仍保持原订单/物流双状态模型。
- `apps/user_app/lib/data/repositories/client_repository.dart`cancelShopOrder、confirmShopReceipt使用公开订单标识。
- `apps/user_app/lib/ui/features/orders/order_list.dart`:新增 onAction显示取消/收货及去支付入口,保留菜单。
- `apps/user_app/lib/ui/features/orders/orders_page.dart`:复用原提交锁,二次确认、失败保留状态、成功刷新商城列表。
- `backend/api/internal/logic/client/user/order_actions_test.go`:八项状态/所有权/幂等场景SQL Mock 验证不发生额外库存写入。
- `apps/user_app/test/ui/orders_page_test.dart`:增加取消与收货确认/返回/刷新测试,原退款跨标签刷新测试保留。
## 契约与兼容
继续使用原 POST shop/orders/:identity/cancel 和 POST shop/orders/:identity/confirm-receipt未新增接口或表字段。allowed_actions 为增量字段值,旧客户端继续可读。客户端不按状态数字自行推断权限,服务端再次校验归属与实时状态。气瓶订单取消未在本轮开放;其分派、支付和履约模型需单独核对,不套用商城逻辑。
## 验证记录
- Go 全量测试与 vet 通过,八项新边界测试覆盖取消重试、已支付拒绝取消、越权拒绝、已取消拒绝收货、未发货拒绝、首次收货及重试时间保护。
- Widget 订单专项三项通过包含原退款功能Flutter 静态检查及 Web 构建通过。
- 远程开发环境创建一笔指定示例商品临时订单,列表已返回 pay/cancel浏览器取消与库存恢复结果在后续条目记录。
- 浏览器已取消本轮临时订单,刷新后为“已取消”且取消/支付入口消失。公开商品接口确认指定示例商品库存为30与此前已验证恢复的基线一致未付款、未发货。
- 用户端全量55项测试通过商城订单标签新增四宽度、两种文字缩放共8张截图。初次截图发现全宽取消按钮导致换行已为订单操作指定紧凑宽度继续保留48px触控高度。
- 修正后8项截图检查、Flutter静态检查、最终Web构建通过[390px截图](视觉验收/A1/20-shop_390_1.0.png)中操作按钮已并排。订单列表159行、订单页338行、后端新专项55行未新增运行依赖或数据库迁移。
## 剩余项
图20仍不是严格1:1配送轨迹、联系配送员、发票、再次购买、订单图片等尚未齐全。确认收货未改动远程已有真实履约订单只通过隔离 SQL Mock 验证;不得为浏览器演示把未付款测试订单改成已发货。接口新增事务锁仅作用于本次操作的本人订单,不修改支付或退款规则。