---
schema: "hl-changelog/v2"
ticket: "5643"
title: "派车价按车型+日期回显价格日历价（修复空收费日期误免）+ 调价/行程链接文案优化"
consumer: "admin"
change_type: "修改接口"
author: "wx(GIT)"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "后端完成：PR #5647 已合并 dev-v3 并部署 TEST（15:46 滚动 DONE）。网关验证 6 项全 PASS：候选传空收费日期数组回显日历价 800×4=3200（修复前 4 天 FREE ¥0.00）；按日历价派车成功且快照 source=AUTO；调价与行程链接文案按新口径展示。前端无需配合。"
updated_at: "2026-08-07"
base: "dev-v3"
generated: "2026-08-07T15:50:00+08:00"
---

# 派车价按车型+日期回显价格日历价（修复空收费日期误免）+ 调价/行程链接文案优化

> **服务**: hl-fleet-service
> **PR**: [#5647](https://git.1814.love:8443/wx/HL/pulls/5647)
> **Issue**: [#5643](https://git.1814.love:8443/wx/HL/issues/5643)
> **日期**: 2026-08-07
> **影响**: 🟢 **缺陷修复 + 文案优化**，无契约结构变更（字段不变，仅返回值/报错文案修正）。前端无需改代码。

## 背景

#5643（P1）wx 实测：价格日历有数据（SUV普拉多¥1000/天、GL8¥900、帕萨特¥600、考斯特¥1500，2026-08 各日期），但派车订单 26-6457（蒙A-H7777 汉兰达 SUV 8/9-8/12）派车价 4 天都 ¥0.00。

**根因**：`POST /admin/fleet/assignments/candidates` 把请求里的 `chargeableServiceDates=[]`（空数组）按字面空集处理 → 全程误判"免费" → 逐日 `assignmentPrice=¥0.00 source=FREE`、自动总价 ¥0。需求未配置收费日期时前端回传空数组（而非 null），触发该路径。

**网关复现**：同一需求传 `[]` → 4 天 FREE ¥0.00；不传 → 正常 800×4=3200（汉兰达日历价 ¥800/天）。

## 修复内容（内部，无接口/字段结构变化）

1. **候选取价空数组归一化**：`AssignmentCandidateService` 对 `chargeableServiceDates` 做空集合→未指定（=全部服务日收费）归一化，候选车辆逐日回显日历价（`source=CALENDAR`）、自动总价正确求和。创建/改派边界的"全免需二次确认+原因"守卫语义不变（`resolveChargeableServiceDates` 未动）；已落库全免组（收费日为空的合法态）的改派/保留行取价不受影响。
2. **调价报错文案可行动化**（创建与逐日方案两处）：价=日历价的日期填了调价原因时，报错由「日历价日期不能填写车辆调价原因」改为「派车价与日历价一致的日期无需填写调价原因，请清空未调价日期的调价原因后重试」。校验语义与审计不变量不变（调价日必须有原因、未调价日不留原因）。
3. **行程链接文案分级**：派单通知模板渲染 `itinerary.url 预览阶段（无可定位派车组）显示「行程链接在派单成功后自动生成」；派车组可定位但无效/定位歧义仍显示「行程链接暂不可用，请联系车务确认」（失败关闭保留）；HOLD 未 finalize 组签链仍按 #5461 设计失败关闭。模板渲染的收费/免费日期摘要同步空数组归一化。

## 变更接口

- `POST /admin/fleet/assignments/candidates`：`chargeableServiceDates` 传 `[]` 与不传行为一致（全部服务日按价格日历取价）；候选车辆 `dailyVehicleFees[].calendarPrice/assignmentPrice`、`autoVehicleFeeTotal` 正常回显（非 ¥0）。
- `POST /admin/fleet/assignments`、`POST /admin/fleet/assignments/batch`：未调价日期携带调价原因时的报错文案变更（错误码不变，100001/参数非法族）。
- `POST /admin/fleet/message-templates/:templateId/render`：`itinerary.url` 在预览阶段的占位文案变更（见上）。

## 验证证据

- 全量 `mvn -pl hl-fleet-service -am verify`：3252 Tests，Failures=0，Errors=0（dev-v3 @ 76bc874d）；新增候选空收费日期回归用例；spotless 通过。
- 部署 TEST：15:46 滚动 DONE。
- 网关（订单 26-6457，蒙A-H7777 汉兰达 8/9-8/12，日历价 ¥800/天）6 项全 PASS：①候选传 `[]` 回显 800×4=3200 ②默认入参同样 3200 ③预览文案=行程链接在派单成功后自动生成 ④价=日历价+原因报新文案 ⑤HOLD 派车成功且 DB 快照 calendar=800 全收费、total=3200.00、source=AUTO ⑥HOLD 未 finalize 组渲染按设计失败关闭。

## 前端配合

无需配合。派车弹窗/候选列表原本读取的字段不变，现在能拿到正确的日历价。
