强化配送订单合同调度约束
This commit is contained in:
@@ -218,7 +218,10 @@
|
||||
充装中/已就绪/配送中/待确认 -> 异常 -> 恢复到异常前状态
|
||||
```
|
||||
|
||||
- 分配时必须选择启用配送点和处于启用、在岗状态的工作人员。
|
||||
- 分配必须继承订单配送合同的履约范围:合同已指定配送点时自动带出并锁定该点;合同未指定配送点时,仅允许选择合同气站直属的启用配送点。
|
||||
- 配送人员候选仅包含目标配送点下角色为配送人员、账号启用、当前在岗且至少拥有一条启用并未过期资质的工作人员。
|
||||
- 已分配订单允许在当前配送点内改派配送人员,不允许通过改派更换配送点;每次分配或改派必须填写原因并保留分配历史。
|
||||
- 服务端必须重复校验合同固定配送点、订单当前配送点、人员组织、岗位状态和有效资质,并向正常业务冲突返回具体中文原因。
|
||||
- 开始充装前必须已完成配送点分配。
|
||||
- 每个状态动作要求当前状态合法,并追加状态记录。
|
||||
- 完成订单必须处于待确认状态,并提交确认类型、收件人和可选凭证。
|
||||
|
||||
54
docs/操作日志_配送订单合同调度约束_20260815.md
Normal file
54
docs/操作日志_配送订单合同调度约束_20260815.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 操作日志:配送订单合同调度约束
|
||||
|
||||
操作时间:2026-08-15
|
||||
|
||||
操作类型:修改、扩展
|
||||
|
||||
影响模块:平台总后台、配送订单分配、配送点候选、配送人员候选
|
||||
|
||||
## 操作前状态
|
||||
|
||||
分配弹窗独立预加载全平台配送点和启用在岗配送人员,没有读取订单合同的履约气站或配送点,也没有按所选配送点重新加载人员。跨组织组合会在提交后被后端统一转换为“请求参数不正确”;后端未校验合同固定配送点和配送人员有效资质。
|
||||
|
||||
## 具体操作
|
||||
|
||||
- 分配弹窗读取订单履约气站和当前配送点;已有配送点时自动带出并锁定。
|
||||
- 合同未指定配送点时,配送点候选限定为订单气站直属启用配送点。
|
||||
- 配送点变化时清空旧配送人员,并按气站、配送点、配送角色、启用、在岗和有效资质重新加载。
|
||||
- 配送点及工作人员列表增加可选的精确候选筛选参数,不改变无参数管理列表行为。
|
||||
- 后端分配事务增加合同固定点、同点改派、配送点状态、人员组织、岗位状态和有效资质校验。
|
||||
- 将预定义业务冲突转换为具体中文错误,数据库错误继续使用通用脱敏错误。
|
||||
- 增加后端单元测试和前端静态联动检查。
|
||||
|
||||
## 代码变更
|
||||
|
||||
- `frontend/platform_admin/src/views/resource/ResourceActionDialog.vue`:分配动作初始化、配送点锁定和人员级联。
|
||||
- `frontend/platform_admin/src/api/resources.ts`:配送点启用筛选和人员有效资质策略。
|
||||
- `frontend/platform_admin/src/api/resource-staff-relation.ts`:有效资质查询参数。
|
||||
- `frontend/platform_admin/scripts/check-gasorder-assignment-linkage.mjs`:合同调度前端回归检查。
|
||||
- `backend/api/internal/logic/platform/gasorder/gasorder.go`:分配事务的合同与人员准入校验。
|
||||
- `backend/api/internal/logic/platform/gasorder/gasorder_test.go`:分配边界测试。
|
||||
- `backend/api/internal/logic/platform/delivery/delivery.go`:配送点状态候选筛选。
|
||||
- `backend/api/internal/logic/platform/staff/staff.go`:有效资质候选筛选。
|
||||
- `docs/05-平台总后台需求.md`:同步分配与改派业务基线。
|
||||
|
||||
## 操作后状态
|
||||
|
||||
订单只能在合同确定的履约范围内分配。合同有配送点时固定该点;合同无配送点时首次选择限于合同气站,后续改派锁定已选配送点。配送人员必须属于该点、启用、在岗且资质有效。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- 后端 `gasorder`、`staff`、`delivery` 专项测试通过。
|
||||
- 后端 API 全量测试、`go vet` 和主程序构建通过。
|
||||
- 前端 TypeScript 类型检查通过。
|
||||
- 前端工作人员关系策略检查通过。
|
||||
- 前端配送订单分配联动检查通过。
|
||||
- 前端资源契约检查和生产构建通过。
|
||||
- 前端全仓 lint 未通过,失败来自既有模板文件的 2 个错误和 178 个警告;本次变更文件单独检查没有新增错误。
|
||||
|
||||
## 风险评估
|
||||
|
||||
- 本次未修改数据库结构、分配接口路径或请求字段,既有客户端保持兼容。
|
||||
- 候选列表新增的筛选参数均为可选参数;普通管理列表不携带时维持原行为。
|
||||
- 历史已分配订单沿用当前配送点并禁止跨点改派,可避免旧数据被静默迁移。
|
||||
- 若历史人员没有有效资质,将不再进入候选;需先在工作人员资质页面补充或启用有效记录。
|
||||
82
docs/项目文档_配送订单合同调度约束_v1.0.md
Normal file
82
docs/项目文档_配送订单合同调度约束_v1.0.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# 项目文档_配送订单合同调度约束_v1.0
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
本次修复平台总后台“分配订单”弹窗忽略订单配送合同和组织范围的问题。旧实现会独立加载配送点与配送人员,允许管理员组合跨气站或跨配送点数据,直到提交后才收到泛化的“请求参数不正确”。
|
||||
|
||||
修复后,分配动作继承订单创建时保存的合同履约气站和配送点快照,并由服务端执行相同的最终校验。
|
||||
|
||||
## 2. 业务规则
|
||||
|
||||
- 配送合同绑定签约用户、签约气站和可选配送点,不直接绑定配送人员。
|
||||
- 合同已指定配送点时,订单分配弹窗自动带出并锁定该点。
|
||||
- 合同未指定配送点时,仅展示合同气站直属且启用的配送点。
|
||||
- 选择配送点后,仅展示同时满足以下条件的工作人员:
|
||||
- 角色为配送人员;
|
||||
- 属于订单履约气站和目标配送点;
|
||||
- 账号启用且当前在岗;
|
||||
- 至少拥有一条启用且未过期的资质。
|
||||
- 已分配订单只允许在当前配送点内改派配送人员,不允许更换配送点。
|
||||
- 每次分配或改派继续填写原因,并追加不可覆盖的分配记录。
|
||||
- 前端候选限制不构成安全控制,服务端对合同范围、组织归属、岗位状态和有效资质进行重复校验。
|
||||
|
||||
## 3. 目录结构与核心文件
|
||||
|
||||
```text
|
||||
platforms/
|
||||
├── backend/api/internal/logic/platform/
|
||||
│ ├── gasorder/gasorder.go # 分配事务、合同范围和人员准入校验
|
||||
│ ├── gasorder/gasorder_test.go # 合同固定点、同点改派及资质回归测试
|
||||
│ ├── delivery/delivery.go # 启用配送点候选筛选
|
||||
│ └── staff/staff.go # 有效资质人员候选筛选
|
||||
├── frontend/platform_admin/
|
||||
│ ├── src/api/resources.ts # 分配动作候选规则
|
||||
│ ├── src/api/resource-staff-relation.ts # 有效资质筛选策略
|
||||
│ ├── src/views/resource/ResourceActionDialog.vue # 动作弹窗履约联动
|
||||
│ └── scripts/check-gasorder-assignment-linkage.mjs # 前端回归检查
|
||||
└── docs/ # 需求基线、项目文档与操作日志
|
||||
```
|
||||
|
||||
## 4. 接口行为
|
||||
|
||||
分配接口路径和请求字段保持不变:
|
||||
|
||||
```text
|
||||
POST /gasorder_basic/:identity/assign
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"delivery_basic_identity": "配送点唯一标识",
|
||||
"staff_account_identity": "配送人员唯一标识",
|
||||
"reason": "分配或改派原因"
|
||||
}
|
||||
```
|
||||
|
||||
候选列表新增兼容性查询条件:
|
||||
|
||||
- `/delivery_basic?gas_basic_identities=<气站标识>&status=1`
|
||||
- `/staff_account?gas_basic_identities=<气站标识>&delivery_basic_identities=<配送点标识>&role_code=delivery&status=1&work_status=on_duty&valid_credential_only=1`
|
||||
|
||||
未携带新增查询条件时,原有管理列表行为保持不变。
|
||||
|
||||
## 5. 行为变化
|
||||
|
||||
| 场景 | 修改前 | 修改后 |
|
||||
| --- | --- | --- |
|
||||
| 合同指定配送点 | 弹窗仍可选择其他配送点 | 自动带出并锁定合同配送点 |
|
||||
| 合同未指定配送点 | 可看到全平台配送点 | 仅展示合同气站直属启用配送点 |
|
||||
| 配送人员候选 | 仅按角色、启用和在岗筛选 | 追加气站、配送点和有效资质约束 |
|
||||
| 已分配订单改派 | 可再次提交不同配送点 | 只能在当前配送点内改派人员 |
|
||||
| 非法组合错误 | 统一显示请求参数不正确 | 返回合同点、组织、状态或资质的具体原因 |
|
||||
|
||||
## 6. 维护指南
|
||||
|
||||
- 调整合同配送点语义时,必须同步检查订单创建快照、分配弹窗和服务端分配校验。
|
||||
- 新增配送人员准入条件时,应同时更新人员候选查询和服务端事务校验。
|
||||
- 不得取消服务端校验或只依赖前端禁用状态。
|
||||
- 修改本功能后至少运行后端 `gasorder`、`staff`、`delivery` 单元测试,以及前端类型检查、分配联动检查和生产构建。
|
||||
|
||||
## 7. 版本记录
|
||||
|
||||
- v1.0(2026-08-15):建立合同履约范围内的订单分配与同点改派规则,补充有效资质约束和具体业务错误。
|
||||
Reference in New Issue
Block a user