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

63 lines
4.2 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.
# 配送订单创建方合同约束 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. 维护指南
- 新增创建方类型时,必须同时声明前端候选来源、合同归属规则和后端校验。
- 不得只依赖前端过滤,所有组织归属规则必须在服务端重复校验。
- 合同模型新增履约主体时,应同步检查创建方、地址和合同气瓶的切换清理逻辑。
- 中文业务错误只允许透传预定义错误,数据库错误继续使用通用脱敏响应。