--- schema: "hl-changelog/v2" ticket: "5910" title: "修复改订单人数后车务复核确认无法闭环——复核confirm按全需求行判定满派并重新盖章" consumer: "admin" change_type: "修复" author: "wx(GIT)" backend_status: "deployed" gateway_status: "not_required" frontend_status: "not_required" frontend_owner: "mmg" frontend_ref: "db1f3507" target_release: "" verified_at: "2026-08-12" status_note: "后端已修复并部署测试服,API 实测闭环通过。改订单人数换版打回待派车后,车务核对沿用原车/司机,对派车点「确认执行」复核即可:复核时按整个需求判定满派并重新盖章(归属→当前需求)发 finalPlan,订单正确回到「配车完成」。此前复核后订单永久卡「处理中」的死锁已解除。前端 2026-08-12 复核 not_required:无接口契约变化、零新字段消费;dispatchPlanGeneration 系详情快照透传回 confirm 乐观锁(useAssignFlow.js:136-148/449-462),后端重盖章后下发新值前端直读最新;staleFinalizedPlan/finalizedByFleet 系后端派生状态(BoardSlotSummary.vue:189-194),复核闭环后由后端翻正,前端展示逻辑不变自动受益,无需联调改动。" updated_at: "2026-08-12" base: "dev-v3" --- # 修复:改订单人数后车务复核确认无法闭环——复核confirm按全需求行判定满派并重新盖章(#5910) > **服务**: hl-fleet-service > **PR**: #5911(已合并 dev-v3 并部署测试服) > **日期**: 2026-08-12 > **背景**: 承接 #5851(换版即作废定稿)+#5899(守卫防自动重新盖章)。改订单人数换版打回待派车后,车务复核 confirm 无法把订单推回「配车完成」。 ## 修复内容(对前端透明,无接口契约变化) **根因**:`AssignmentService.revalidateAssignedAfterBaselineChange`(复核 confirm 走的分支)两处叠加: 1. 用**单组行** `isRequirementFinalizedTopologyRows(groupRows,...)` 对**整个需求**拓扑,多车订单单组行数 ≠ 槽位×日期,必 false → 永不发 finalPlan。 2. 复核 confirm 全程不调 `markDispatchPlanFinalized` 重新盖章,`plan_finalized_requirement_id` 永留旧需求 → #5899 守卫 `hasStaleFinalizedPlanRows` 永命中 → 即便拓扑齐全也不发 finalPlan。 旁证死锁:`batchCreate` 重新提交原方案被 605014 拒、`change` 改派被 605029 强制真换车/司机,车务「确认沿用原方案」无出口。 **修复**:复核 confirm 改用**需求下全部行** `isRequirementFullyAssignedRows` 判满派(内部已含陈旧定稿降级 + 载客量校验,部分派单/缺车/容量不足返回 false,防 #5824 误标 DONE),满派时**先 `markDispatchPlanGeneration` 重新盖章(归属→当前需求)再发 finalPlan**。车务逐组复核,最后一组复核完即闭环,订单回「配车完成」,车/司机沿用原方案不用换。 ## 行为变化 | 场景 | 旧 | 新 | |---|---|---| | 多车订单改人数后复核 confirm | ❌ 永久卡「处理中」,不盖章不发 finalPlan,无 API 可救 | ✅ 复核即整需求重新盖章发 finalPlan,订单回「配车完成」 | | 部分派单/缺车/容量不足复核 | ✅ 不盖章不发 finalPlan | ✅ 不变(防 #5824 误标 DONE) | | 单车订单改人数后复核 | ❌ 同样卡死 | ✅ 正常闭环 | ## 验证证据(测试服 API 实测,订单 2086270141158346754,2 组多车) 换版作废后(两组 `assigned` + `finalized=0` + `generation=NULL` + 归属旧 v3,需求 PROCESSING,订单「配车 处理中」): - 车务对第一组复核 confirm → 触发**整需求重新盖章**:两组 `dispatch_plan_finalized=1`、新 `generation=345816481176621056`、归属全部 → 当前 v4 - 发 finalPlan:订单「配车」`PROCESSING 处理中` → `DONE 已完成`,需求 `PROCESSING` → `DONE` - 车务看板:`dispatchPlanGeneration=345816481176621056` 一致、两组「已派车」、执行全确认 单测:新增多车满派重新盖章+发finalPlan、部分派单不盖章不发finalPlan(防 #5824 回归)、单车回归 3 例;调整容量不足/行程中换版 2 例断言。AssignmentServiceTest 480 + ArchTest 13 + spotless 全绿,反向验证有效。前端无改动,无需联调。