chore(6057): 多槽位越需求索引派车业务码 605911/605912 替代 500(已部署实测)
所有检测均成功
changelog-filename-gate / validate (push) Successful in 2s

这个提交包含在:
API Changelog Bot 2026-08-19 01:33:38 +08:00
父节点 2ee06034ef
当前提交 9d7a1663e2

查看文件

@ -0,0 +1,63 @@
---
schema: "hl-changelog/v2"
ticket: "6057"
title: "多槽位越需求索引派车业务码 605911/605912 替代 500required_vehicle_type 落 NULL 防御)"
consumer: "admin"
author: "wx"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "后端完成PR #6064 + #6065 已合并 dev-v3584f3adc3 / b07855c228并部署 TESThl-fleet-service Deploy task d6cb4687 + 3bed5be8,jar 01:27:55、双实例 01:28 重启)。越界索引由 500vehicleType is required收敛为 605911 业务码;快照车型兜底缺失拦成 605912。错误消息自解释,前端全局错误处理可直接展示,无需适配;派车看板正常只发送已声明/已增槽槽位,行为不变。"
updated_at: "2026-08-19"
base: "dev-v3"
generated: "2026-08-19T01:32:00+08:00"
---
# 多槽位越需求索引派车业务码 605911/605912 替代 500#6057
## 背景
批量派车(车务最终实派方案)`fleetDecisionFinal` 放行的 `fleetItemIndex` 可能越出当前需求 `fleet[]` 声明的车辆总数(如需求声明 1 辆车却按 index=1 派第 2 辆)。该场景此前 `resolveFleetItemByIndex` 返 null、无占位可消费走拉单组装,`required_vehicle_type` 落 NULLDAILY_V3 快照契约 required 字段),确认派车阶段快照校验炸 `vehicleType is required` **500**P1 复现单 R2
## 变更接口
| 接口 | 变更 |
| --- | --- |
| `POST /admin/fleet/assignments/batch``items[]` | **行为变更**`fleetItemIndex` 越出当前需求声明车辆数且该索引无 addSlot/展开占位可消费时,整批 fail-fast 返回 **605911**,零写入;有占位(经 `POST /admin/fleet/assignments/slots` 增槽或展开生成)的越界索引不受影响,正常消费占位车型快照派车 |
| `POST /admin/fleet/assignments/batch`(防御) | 需求项定位不到且所选车辆型号归一不出规范车型时,落库前拦 **605912**,不再留 NULL 车型脏行到确认派车阶段炸 500 |
## 新增错误码fleet 605xxx 段)
| 错误码 | 消息 | 触发条件 | 前端处置 |
| --- | --- | --- | --- |
| `605911` | 用车条目索引越界:超出当前需求声明的车辆数 | `fleetItemIndex` ≥ 需求 `fleet[]` 全部 count 之和且该索引无占位 | 引导车务调整需求条目数或先经增槽addSlot再派;消息自解释可直接 toast |
| `605912` | 派车快照缺少需求车型,请检查用车需求车型明细 | 需求项定位不到且车辆型号无法归一(罕见,防御性) | 检查用车需求车型明细 |
## 行为口径
- **合法索引不变**`index < 声明车辆数`(含 count-1 边界)与占位消费(增槽/展开)路径 200 正常,落库 `required_vehicle_type` 非空。
- **整批原子**:越界索引在锁内拉单组装前 fail-fast,任一项失败整批回滚、零写入。
- **对照一致**:需求声明条目数调整到位后同一请求 200复现单 R2 实测验证)。
- 接口说明swagger notes已同步新口径多派/新增槽位须先经 addSlot 生成占位。
## 前端动作
无必须动作:错误消息自解释,走全局错误提示即可。派车看板正常只发送已声明/已增槽的槽位索引,交互不变。若后续做 605911 专属引导文案,可按上表触发条件提示「调整需求车辆数或先增槽」。
## 验证证据
- 单测AssignmentServiceTest 513 全绿):越界索引批派 605911 拦截且 `insert` 零写入;`index=count-1` 命中/`index=count` 越界边界;占位消费的新增槽位仍成功;车型无法归一 605912 防御。`mvn -pl hl-fleet-service -am verify` 3838 测试仅剩 1 个 `ReleaseEMixedBinaryHarnessTest` Windows 环境抖动失败(基线 dev-v3 @ b93c7ddcc 同款失败、单跑通过;Testcontainers 集成测试 12 条通过。
- 部署PR #6064 squash 合并 dev-v3merge commit `584f3adc3`+ 文档对齐 PR #6065`b07855c228`;Deploy Panel task `d6cb4687` + `3bed5be8` success,测试服 jar mtime 2026-08-19 01:27:54110669169 bytes,双实例 8087/8187 滚动重启健康。
- 网关实测TEST,admin token复现单 R2 `HL20260818215924074`(需求声明 suv×1批量派车 `fleetItemIndex=1`**605911**(非 500;复现单 R1 `HL20260818215914552` 同场景 → **605911**;同单合法索引 `fleetItemIndex=0` → 200 assigned,落库 `required_vehicle_type='suv'` 非空、越界请求零写入DB 核对仅 2 行合法行)。
## 关联 / 联系人
- Issuehttps://git.1814.love:8443/wx/HL/issues/6057
- PRhttps://git.1814.love:8443/wx/HL/pulls/6064 (主修复)+ https://git.1814.love:8443/wx/HL/pulls/6065 (接口说明对齐)
- Commitmergehttps://git.1814.love:8443/wx/HL/commit/584f3adc32e530389a994d92f3a002c312381632
- 后端负责人wx