Files
platforms/docs/操作日志_组织支付记录数据范围修复_20260819.md

75 lines
4.4 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-08-19 21:16:03
操作类型:修改、扩展
影响模块:后端 API、气站管理端财务、配送点管理端财务、需求文档
## 操作前状态
- 气站与配送点支付记录沿用旧钱包子表查询,执行 `payment_order.wallet_basic_id` 关联。
- 统一支付模型没有 `wallet_basic_id`,列表与详情请求触发 PostgreSQL `SQLSTATE 42703`
- 气站需求把统一支付单描述为钱包范围,配送点需求仍使用已删除的 `wallet_payment``wallet_refund` 名称。
- 缺少统一支付记录的组织数据范围回归测试。
## 具体操作
1. 新增公共支付范围过滤器,分别通过燃气配送订单、商城订单和组织自有充值单验证气站或配送点归属。
2. 未知业务类型、孤立业务对象和无法证明组织归属的充值记录按失败关闭处理。
3. 气站与配送点支付列表、详情改为复用同一过滤器,删除对支付单钱包主键的错误依赖。
4. 增加 PostgreSQL SQL 回归测试,覆盖三类业务、两类组织、详情边界和未知主体。
5. 修正气站与配送点需求文档的统一支付事实、组织归属和钱包余额支付边界。
6. 新增项目文档,记录问题根因、查询结构、兼容性和后续维护规则。
## 行为变化
- 修改前:进入气站或配送点“支付记录”页面后,查询不存在的字段并返回数据库错误。
- 修改后:支付记录按关联业务对象验证当前组织归属,列表与详情可正常查询。
- 修改后:跨组织、未知类型、业务对象缺失、用户或工作人员充值不会进入组织端结果集。
- 保持不变:接口路径、分页、排序、响应结构、支付模型、支付创建、渠道回调、余额支付、退款和数据库结构。
## 代码变更
- `backend/api/internal/logic/common/payment_scope.go`
- 新增 `ScopePaymentOrdersByOwner`,统一追加气站或配送点支付数据范围。
- 使用三组 `EXISTS` 验证 `gasorder``ec_order``recharge` 业务对象。
- `backend/api/internal/logic/common/payment_scope_test.go`
- 新增气站、配送点、失败关闭及详情一致性测试。
- `backend/api/internal/logic/gas/finance.go`
- 新增 `paymentOrderQuery`;修改 `ListPaymentOrder``GetPaymentOrder`
- `backend/api/internal/logic/delivery/finance.go`
- 新增 `paymentOrderQuery`;修改 `ListPayment``GetPayment`
- `docs/06-气站管理系统需求.md`
- 将支付记录从钱包直接归属修正为业务对象验证归属。
- `docs/07-配送点管理系统需求.md`
- 修正统一支付与退款资源名称及组织归属口径。
- `docs/项目文档_组织支付记录数据范围修复_v1.0.md`
- 新增完整项目说明、目录结构、兼容性和维护指南。
## 验证结果
- `go test ./internal/logic/common ./internal/logic/gas ./internal/logic/delivery`:通过。
- `go test ./...`:通过。
- `go vet ./...`:通过。
- `go build ./cmd/main/main.go`:通过。
- 平台总后台 `pnpm contract:check`:通过,共 48 个资源。
- 气站管理端 `pnpm contract:check`:通过,共 20 个资源。
- 配送点管理端 `pnpm contract:check`:通过,共 18 个资源。
- `git diff --check`:通过,无空白错误。
- 定向搜索确认生产代码不再包含 `payment_order.wallet_basic_id` 或对应错误关联。
## 边界案例
- 归档业务对象仍可凭现存业务标识验证组织归属,不因业务状态归档丢失支付事实。
- 未完成的燃气配送支付尝试跟随订单当前配送点;成功支付后订单不可重新分配,成功事实归属稳定。
- 充值记录同时校验充值单主体和钱包主体,避免仅凭可伪造或漂移的单一字段放行。
- 详情接口必须同时满足支付单标识和组织范围,不允许通过猜测 UUID 越权。
## 风险评估
- 查询新增关联子查询,依赖现有业务标识和组织字段索引;数据量增长后应关注执行计划和慢查询指标。
- 钱包余额支付当前只形成 `wallet_record`,仍不会显示为 `payment_order`;统一建单属于后续资金链路设计,不在本次修复范围。
- 支付创建入口尚未增加业务类型白名单;本次查询已对未知类型失败关闭,写入侧加固应独立评审。
- 本次不涉及数据库迁移,回滚只需恢复查询代码和文档,不影响既有支付事实。