From 2490021161f2b3e8c050118d6000ffc760c88cb4 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Tue, 11 Aug 2026 18:28:25 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20=E6=B4=BE=E5=8D=95=20Step2?= =?UTF-8?q?=20=E4=B8=8B=E4=B8=80=E6=AD=A5=E7=BD=AE=E7=81=B0=E2=80=94?= =?UTF-8?q?=E2=80=94=E5=90=8E=E7=AB=AF=E5=AE=9E=E6=B5=8B=E5=B7=B2=E6=8E=92?= =?UTF-8?q?=E9=99=A4=EF=BC=8C=E6=94=B6=E6=95=9B=E5=88=B0=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=EF=BC=88#5849=20=E5=89=8D=E7=AB=AF=E9=83=A8?= =?UTF-8?q?=E5=88=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...一步置灰与日格未完成误判-前端缺陷-管理后台.md | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 changelogs-v2/2026-08/11_frontend_派单Step2下一步置灰与日格未完成误判-前端缺陷-管理后台.md diff --git a/changelogs-v2/2026-08/11_frontend_派单Step2下一步置灰与日格未完成误判-前端缺陷-管理后台.md b/changelogs-v2/2026-08/11_frontend_派单Step2下一步置灰与日格未完成误判-前端缺陷-管理后台.md new file mode 100644 index 0000000..bd924d1 --- /dev/null +++ b/changelogs-v2/2026-08/11_frontend_派单Step2下一步置灰与日格未完成误判-前端缺陷-管理后台.md @@ -0,0 +1,164 @@ +--- +schema: "hl-changelog/v2" +ticket: "frontend" +title: "派单 Step2「下一步·发送给司机」置灰:后端实测判定可用可选无冲突,日格「未通过候选校验」为前端侧误判" +consumer: "admin" +change_type: "前端缺陷" +author: "wx(GIT)" +backend_status: "not_required" +gateway_status: "not_required" +frontend_status: "pending" +frontend_owner: "mmg" +frontend_ref: "" +target_release: "" +verified_at: "" +status_note: "对应后端工单 #5849。本条只交付「后端侧已排除」这一部分的实测证据(测试服 26-3698 网关真实 API + DB 双向核实),前端判定表达式的精确定位仍在进行中,定位完成后会更新本文件。后端若需要为前端补充推进态字段,另发接口类 changelog,不在本条。" +updated_at: "2026-08-11" +base: "dev-v3" +--- + +# 派单 Step2「下一步」置灰 —— 后端侧已排除(#5849 前端部分) + +> **页面**:车务管理 → 派单看板 → 订单派车弹窗 → Step2「排车」 +> **后端**:本条**无后端改动**。下面全部是测试服实测结论,用于把排查范围收敛到前端。 + +--- + +## 一、现象 + +订单 **26-3698**(08/17→08/19,成人 10): + +- 车辆槽位 1 已选车 `蒙A-E5555 丰田埃尔法`、司机 `阿木古愣`,**三天全部「已规划用车」、全部勾了「用车」**,日历价 ¥2500、本次派车价 ¥2500 都已填 +- **8月18日** 那一行挂橙色提示:「2026-08-18 车辆槽位1 尚未通过当前日期、车辆和司机的候选校验」 +- 顶部「排车方案 1 个槽位 · **1/3 个日格已完成**」 +- 底部「已完成 **0/1** 个最终方案槽位」 +- 「下一步 · 发送给司机(1 辆)」**置灰不可点** + +同一现象在 26-5067 上表现为 8月21日 报同样的提示、「已完成 0/1」。 + +--- + +## 二、✅ 已确认事实:后端判定这三天全部可用、可选、无冲突 + +### 2.1 真实 API 实测(测试服网关,车务 admin token,2026-08-11) + +对**报错的那一天** 8/18 单独查候选: + +``` +POST /admin/fleet/assignments/candidates +Authorization: Bearer +Content-Type: application/json + +{ + "orderId": 2086270138171994114, + "requirementId": 2087111726523617282, + "fleetItemIndex": 0, + "startDate": "2026-08-18", + "endDate": "2026-08-18", + "headcount": 10, + "excludeAssignmentId": 2086270138708844545, + "vehicleKeyword": "E5555" +} +``` + +响应中该车(节选,**原样**): + +```json +{ + "plate": "蒙A-E5555", + "vehicleTypeKey": "mpv", + "vehicleTypeName": "商务车", + "seats": 7, + "seatsEnough": true, + "requirementMatched": true, + "vehicleStatus": "busy", + "serviceStatus": "ACTIVE", + "selected": false, + "available": true, + "selectable": true, + "availabilityReasonCode": "AVAILABLE", + "availabilityReasonMessage": "所选服务日期内可用", + "availabilityWindows": [{ "startDate": "2026-08-18", "endDate": "2026-08-18" }], + "conflicts": [], + "primaryDriverId": "2065272145633591298", + "primaryDriverName": "阿木古愣", + "vehicleFeePriceComplete": true, + "missingVehicleFeeDates": [] +} +``` + +**后端对 8/18 的判定是:可用 + 可选 + 无冲突 + 需求匹配 + 车费价格完整。** + +### 2.2 三种 `excludeAssignmentId` 传法结果一致 + +我们曾怀疑「逐日行传了组锚点 id,导致该日行没被排除、车被自己占用判成冲突」。**该猜测已被证伪**: + +| `excludeAssignmentId` 传法 | 8/18 结果 | +|---|---| +| 组锚点 id(`2086270138708844545`) | `available: true` / `selectable: true` | +| 该日行真实 id(`345501044920422400`) | `available: true` / `selectable: true` | +| 完全不传 | `available: true` / `selectable: true` | + +### 2.3 数据层核实:不存在任何真实资源冲突 + +槽位 0 的三行逐日切片**完全同质**,唯一差异是日期与「接机/参与」勾选: + +| 服务日 | 状态 | 车 | 司机 | 协议价 | 日历价 | 接机/参与 | +|---|---|---|---|---|---|---| +| 2026-08-17 | holding | 蒙A-E5555 | 阿木古愣 | 2500 | 2500 | **勾选** | +| 2026-08-18 | holding | 蒙A-E5555 | 阿木古愣 | 2500 | 2500 | 未勾 | +| 2026-08-19 | holding | 蒙A-E5555 | 阿木古愣 | 2500 | 2500 | 未勾 | + +跨订单全库核查:**该车与该司机在 08/17~08/19 除本单外零占用**。 + +--- + +## 三、⚠️ 待确认推测(尚未定位到表达式,供参考不要直接照做) + +三行数据里唯一的差异是「接机/参与」勾选(8/17 勾了,另两天没勾),而「日格已完成」正好是 **1/3**。 + +**推测**:前端的「日格完成」判定可能把「接机/参与」勾选当成了必要条件。 + +> 这条**尚未验证**,请以你那边的实际表达式为准。我们仍在定位「尚未通过当前日期、车辆和司机的候选校验」这句话的判定链路,定位完成后会更新本文件。 + +其它候选怀疑点(同样未验证): +- 把 `vehicleStatus === "busy"` 当成不可用(该车全局状态确实是 `busy`,因为正被本单占着,这是**正常**的) +- 用 `selected` 字段做当前选中回显匹配(逐日查询返回的是 `selected: false`) +- 用 `availabilityWindows` 要求覆盖**整个服务期**,而逐日查询只返回当天那一格 + +--- + +## 四、目标行为(wx 2026-08-11 拍板) + +> 只要**槽位里有司机、有车辆,且日期是对的**,就可以进行下一步。**定制师的需求变了,但车务可以不改派车**;和需求数对不上也可以。 + +与 #5810「换版槽位人工制」、#5824「车型/数量不符只提示不做门禁」一脉相承。 + +### 硬约束 vs 软约束 + +| 类别 | 项 | 处理 | +|---|---|---| +| **硬**(仍须拦) | 同车/同司机同日期被**别单**占用(真实资源冲突) | 阻断 | +| **硬** | 派车日期越出当前行程窗 | 阻断(后端 605062) | +| **硬** | 车辆维保/停用(605037)、司机休假/未激活(605038) | 阻断 | +| **软**(应降级为提示) | 车型不匹配 | 只提示 | +| **软** | 座位数不足 | 只提示 | +| **软** | 槽位数与需求数量不符 | 只提示 | +| **软** | 日格「未完成」(在已有车 + 有司机 + 日期正确的前提下) | 只提示 | + +> 提醒:**车型不匹配不会影响 `selectable`**。后端 `selectable = available && conflicts 全部非阻断`,`requirementMatched` / `seatsEnough` 均不参与该计算。请不要把车型不匹配纳入按钮启用条件。 + +--- + +## 五、后端侧的后续(不在本条,另发) + +- 前端放开门禁后,后端提交链路上是否还有会拒的守卫,正在核;需要后端改的部分由 **#5849** 处理,涉及契约变化会另发接口类 changelog。 +- 若确认需要后端为前端补一个「本槽位是否可推进 + 不可推进原因」的字段,会在那份 changelog 里给出字段名与口径,届时前端可从「自己推导」改为「读后端结论」,避免两边口径再次劈叉。 + +--- + +## 六、关联 + +- 后端工单 #5849 +- `selectable` 字段口径:`11_5850_候选接口显式返回selectable-修改接口-管理后台.md` +- 换版后车型陈旧快照(会让候选列表误标「需求不匹配」):#5871,修复后另发