# 组织支付记录数据范围修复项目文档 v1.0 ## 1. 项目概述 - 项目名称:气站与配送点支付记录数据范围修复。 - 实施范围:`backend/api` 的气站、配送点财务只读接口及对应需求文档。 - 修复目标:移除统一支付单对不存在钱包主键的错误依赖,恢复支付记录列表与详情查询,并保持组织数据隔离。 - 技术栈:Go、Gin、GORM、PostgreSQL。 - 数据库影响:不新增字段、不执行迁移、不修改既有支付事实。 ## 2. 问题与根因 `payment_order` 是全项目统一支付尝试事实,通过 `business_type` 和 `business_identity` 关联具体业务。气站与配送点财务查询沿用了旧钱包支付表的通用关联方式,尝试访问不存在的 `payment_order.wallet_basic_id`,导致 PostgreSQL 返回 `SQLSTATE 42703`。 该错误同时影响气站与配送点的支付记录列表和详情接口。数据库结构与统一支付模型一致,不应通过补充钱包主键掩盖查询模型错误。 ## 3. 数据范围规则 ```text payment_order ├── business_type = gasorder │ └── gasorder_basic.identity = business_identity ├── business_type = ec_order │ └── ec_order.identity = business_identity └── business_type = recharge └── wallet_recharge_order.identity = business_identity └── wallet_basic.id = wallet_basic_id ``` - 气站范围分别校验 `gasorder_basic.gas_basic_id`、`ec_order.gas_station_id`,或气站自有充值单及钱包归属。 - 配送点范围分别校验 `gasorder_basic.delivery_basic_id`、`ec_order.delivery_point_id`,或配送点自有充值单及钱包归属。 - 查询使用 `EXISTS`,同时匹配业务类型和业务标识,避免不同业务表的标识偶撞。 - 未知业务类型、业务对象缺失及无法证明组织归属的记录按失败关闭处理。 - 列表和详情复用同一范围过滤器;详情增加支付单 `identity` 条件,不放宽组织校验。 - 关联业务记录归档后,只要事实仍存在且可验证归属,支付记录仍可读取。 ## 4. 目录结构与核心文件 ```text platforms/ ├── backend/api/internal/logic/ │ ├── common/ │ │ ├── payment_scope.go # 统一支付组织范围过滤器 │ │ └── payment_scope_test.go # PostgreSQL 查询边界回归测试 │ ├── gas/finance.go # 气站支付列表与详情接入 │ └── delivery/finance.go # 配送点支付列表与详情接入 └── docs/ ├── 06-气站管理系统需求.md └── 07-配送点管理系统需求.md ``` `ScopePaymentOrdersByOwner` 只接受 `gas` 和 `delivery` 两种主体类型。其他类型统一追加 `1 = 0`,避免调用方参数错误导致越权。 ## 5. 接口兼容性 - 保持既有 API 路径、分页参数、响应结构和排序不变。 - 不修改 `PaymentOrder` 模型、支付创建、渠道回调、余额扣款和退款流程。 - 钱包余额支付目前直接写入 `wallet_record`,本次不将其拼装为虚拟 `payment_order`。 - 当前用户和工作人员充值不属于气站或配送点支付范围;未来只有组织自有充值单且钱包归属一致时才会被查询。 ## 6. 测试与维护 - 回归测试覆盖燃气配送订单、商城订单、组织自有充值三类归属路径。 - 分别断言气站和配送点字段,防止跨组织字段混用。 - 断言未知主体失败关闭、详情保留组织边界,且 SQL 不再引用 `payment_order.wallet_basic_id`。 - 后续新增支付业务类型时,必须先明确其组织归属链路,再扩展公共过滤器和对应测试;不得通过付款用户反推组织。 ## 7. 已知边界 - 未完成的燃气配送支付尝试跟随订单当前配送点;成功支付后订单状态不允许再次分配,因此成功支付事实归属稳定。 - 钱包余额支付统一创建 `payment_order` 属于后续资金链路设计事项,不纳入本次缺陷修复。 - 支付创建入口的业务类型白名单属于独立安全加固事项,本次查询只负责对未知类型失败关闭。 ## 8. 变更记录 - v1.0:修复气站与配送点统一支付记录错误关联钱包主键的问题,补齐组织范围测试和需求口径。