Files
platforms/docs/项目文档_配送订单创建方合同约束_v1.1.md
2026-08-14 01:15:33 +08:00

4.2 KiB
Raw Blame History

配送订单创建方合同约束 v1.1

1. 项目概述

本次修复平台总后台创建气体配送订单时,创建方候选与配送合同相互独立的问题。旧实现允许管理员选择任意用户、气站、配送点或工作人员,错误组合直到提交后才收到泛化参数错误;配送点和工作人员还缺少完整的服务端合同归属校验。

2. 业务规则

  • 用户创建方只能是合同签约用户,由合同自动带出并只读展示。
  • 气站创建方只能是合同签约气站,由合同自动带出并只读展示。
  • 配送点创建方只能是合同指定配送点;合同未指定配送点时禁止使用该类型。
  • 合同指定配送点时,工作人员候选仅包含同时属于合同气站、合同配送点的启用人员。
  • 合同未指定配送点时,工作人员候选仅包含合同气站直属的启用人员。
  • 切换配送合同时,收货地址、合同气瓶和原创建方全部清空;保留创建方类型并按新合同重新匹配。
  • 平台登录管理员是操作人,不自动作为订单业务创建方。
  • 前端候选限制与后端最终校验同时生效,伪造请求不能绕过。
  • 本次不修改数据库结构和业务数据。

3. 核心文件

  • frontend/platform_admin/src/api/resources.ts:声明合同上下文、固定主体映射和工作人员组织筛选规则。
  • frontend/platform_admin/src/views/resource/use-resource-relation-linkage.ts:负责合同切换、主体自动带出、工作人员候选过滤和提交前校验。
  • frontend/platform_admin/src/views/resource/ResourceFieldForm.vue:在合同或类型未选择时禁用创建方并展示操作引导。
  • frontend/platform_admin/src/views/resource/ResourceRecordPage.vue:展示合同约束说明,并将合同直接确定的主体设为只读。
  • backend/api/internal/logic/platform/gasorder/gasorder.go:校验四类创建方与合同的归属关系,并返回安全的中文业务错误。
  • backend/api/internal/logic/platform/gasorder/gasorder_test.go:覆盖合法组合、跨合同主体、无配送点合同、直属工作人员和停用工作人员。

4. 行为变化

场景 修改前 修改后
用户、气站创建方 可从全平台候选中选择 合同自动带出,只读
配送点创建方 可选择任意配送点 仅合同指定配送点;未指定时禁止
工作人员创建方 可选择任意工作人员 仅合同履约组织内的启用人员
切换合同 地址、气瓶联动,创建方不联动 地址、气瓶、创建方全部重新匹配
伪造跨合同请求 用户和气站部分拦截,配送点和人员缺口 四种类型均由服务端拒绝
错误提示 请求参数不正确 返回具体的合同归属中文原因

5. 操作日志

操作时间2026-08-14

操作类型:修复、扩展

影响模块:平台总后台、气体配送订单创建接口

操作前状态:创建方仅按类型加载全平台候选;合同不参与筛选;配送点和工作人员缺少服务端合同一致性校验。

具体操作:扩展动态关系配置以支持合同上下文、固定主体和组织筛选;补充创建页说明、只读展示及切换清理;新增后端四类创建方校验和中文业务错误;增加专项检查与单元测试。

操作后状态:创建方与配送合同保持一致,错误组合无法在正常页面选中,伪造请求也会被后端拒绝。

验证结果执行前端创建方专项检查、TypeScript 类型检查、生产构建及后端 gasorder 单元测试;详细结果以本次提交记录为准。

风险评估:动态合同约束仅在显式配置的订单创建方字段启用,其他动态关系保持原行为;数据库和公共接口字段保持兼容。

6. 维护指南

  • 新增创建方类型时,必须同时声明前端候选来源、合同归属规则和后端校验。
  • 不得只依赖前端过滤,所有组织归属规则必须在服务端重复校验。
  • 合同模型新增履约主体时,应同步检查创建方、地址和合同气瓶的切换清理逻辑。
  • 中文业务错误只允许透传预定义错误,数据库错误继续使用通用脱敏响应。