---
schema: "hl-changelog/v2"
ticket: "5571"
title: "派车价0与未填价格允许发送司机（0价不再被非负金额拦截）"
consumer: "admin"
change_type: "修改接口"
author: "wx(GIT)"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "implemented"
frontend_owner: "pi-main-session"
frontend_ref: "hl-admin@e2a060d09a66cdb5b89184e3c35a3fbfd923064f"
target_release: "v2.1"
verified_at: "2026-08-06"
status_note: "后端完成：PR #5577 + #5580 已合并 dev-v3 并部署 TEST；网关实测 0 价 batchCreate 发送司机成功（assigned/protocolPrice=0.00）。前端需确认校验规则放行 0/空价并适配日格价格默认值展示（anchor #5571，hl-ui v2.1 已有 DailyVehicleFeeList 编辑入口，需前端部署后核验）。"
updated_at: "2026-08-06"
base: "dev-v3"
generated: "2026-08-06T01:33:44+08:00"
---

# 派车价0与未填价格允许发送司机（0价不再被非负金额拦截）

> **服务**: hl-fleet-service
> **PR**: [#5577](https://git.1814.love:8443/wx/HL/pulls/5577) + [#5580](https://git.1814.love:8443/wx/HL/pulls/5580)
> **Issue**: [#5571](https://git.1814.love:8443/wx/HL/issues/5571)
> **日期**: 2026-08-06

## 背景

#5571（P1 阻断）协调台浏览器实测：26-4220 派车 2 全程槽派好车/司机后，日格"本次派车价"显示 ¥0.00，行内报"**价格应为非负金额，整数最多 10 位、小数最多 2 位**"，"下一步·发送给司机"被前端表单校验拦死（0/8 日格无法完成）。wx 口径：**实际派车价格为 0 是允许的**（含团费/内部结算等场景）——0 价不得拦截发送司机。

## 校验出处定位

- 该文案出自**前端** hl-ui v2.1 `src/views/fleet/board/utils/daily-vehicle-plan.js` 提交门禁（`ASSIGNMENT_PRICE_PATTERN` 拒绝空值）与 `DailyVehiclePlanMatrix` 输入校验；**后端 dev-v3 无此文案**。
- 触发链：后端详情 `dailyVehiclePlan[].assignmentPrice` 曾回显 `null`（逐日行未冻结价格时直接取单值 `protocolPrice`），前端显示层兜底为 ¥0.00 但提交校验拿到空值即拦截。

## 变更接口

| 方法 | 路径 | 来源 | 变更 |
|---|---|---|---|
| `POST` | `/admin/fleet/assignments/batch` | `AssignmentController`（fleet） | 语义变更：用车日 `assignmentPrice` 允许为空或 0（未填→日历参考价代入）；0 价为合法派车价 |
| `GET` | `/admin/fleet/board/orders/<orderId>` | `BoardOrderController`（fleet） | 语义变更：`dailyVehiclePlan[].assignmentPrice` 不再回显 null——快照价→协议价→日历参考价→0 兜底；`priceSource` 同步（快照源优先，全缺=MISSING） |
| `POST` | `/admin/fleet/assignments/<assignmentId>/change` 等 | `AssignmentController`（fleet） | 语义变更：DAILY_V3 快照豁免矩阵仅约束免费日；收费日 0 价（无豁免原因）不再被拦截 |

字段结构均不变（无新增/删除/改名），仅取值语义与门禁口径调整。

## 前端/调用方动作（anchor #5571）

1. **校验规则放行 0 与空价**：`daily-vehicle-plan.js` 提交门禁与矩阵输入校验应允许 `0` 与空值（空值按 0/日历价兜底，由后端回显保证非 null）；仅负数与超精度（整数≤10 位、小数≤2 位）拒绝
2. **日格价格默认值展示**：后端已按"日历参考价代入→0 兜底"回显；前端如遇 `assignmentPrice=null` 的历史数据（修复前已存），可显示 `0.00` 或 `-`，不得触发"价格应为非负金额"拦截
3. **编辑入口**：hl-ui v2.1 已具备 `DailyVehicleFeeList` 日格价格输入框（editable 状态）；若当前部署版本无编辑入口，请升级前端或按后端候选参考价自动代入
4. 与日历参考价不一致的 0 价仍必须填写改价原因（`priceAdjustmentReason`，#5292 口径），前端原因输入逻辑保持不变

## 验证证据

- 定向测试：VehicleFeeQuoteServiceTest 16/16（未填→日历价代入、显式 0 价、0 日历价）、AssignmentServiceTest 371/371（null/0 放行、负数/缺司机拒绝）、BoardOrderServiceTest 84/84（回显兜底链：快照 0 优先/日历价回退/全缺 0+MISSING）、DailyVehicleAssignmentSnapshotFactoryTest 9/9（收费日 0 价免豁免、免费日必填豁免）；fleet 全量 `mvn -pl hl-fleet-service -am verify`：3168 tests，0 failures，0 errors，4 skipped（含 spotless:check）
- 网关验证（TEST）：0 价 batchCreate（HL20260804104759654，5 日 dailyPlan 全 0 价 + 改价原因，holdMode=0）→ code=200 发送司机成功：assigned、protocolPrice=0.00、vehicleFeeTotal=0.00、MANUAL；详情回显 2080599963561005058 8/8 日格 assignmentPrice 非 null 且为逐日快照价（600-730）而非旧 protocolPrice 单值；候选接口日历价参考回显不变（1500.00 CALENDAR）
- 环境说明：MySQL 集成测试依赖 127.0.0.1:3306 固定映射，本机 Docker 端口 TIME_WAIT 竞争导致部分用例偶发失败，清理残留容器+等待端口消退后单独重跑全绿

## 关联/联系人

### 链接

- [后端工单 #5571](https://git.1814.love:8443/wx/HL/issues/5571)
- [后端 PR #5577](https://git.1814.love:8443/wx/HL/pulls/5577)（null/0 门禁放开 + 回显兜底链）+ [#5580](https://git.1814.love:8443/wx/HL/pulls/5580)（快照豁免矩阵放开收费日 0 价）
- Merge commits: [349f97cc5](https://git.1814.love:8443/wx/HL/commit/349f97cc52d572c2465f90d05f797e655be60291)（#5577）、[ce28c53a8](https://git.1814.love:8443/wx/HL/commit/ce28c53a829860b240695792ac6a99e387d9d96e)（#5580）
- 关联：[#5292 逐日派车模型（0 价口径）](https://git.1814.love:8443/wx/HL/issues/5292)、[#5562 全程槽模型](https://git.1814.love:8443/wx/HL/issues/5562)

### 联系人

- **后端负责人**: @wx
- **前端消费**: 待认领（hl-admin）
