7.0 KiB
7.0 KiB
schema, ticket, title, consumer, change_type, author, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base
| schema | ticket | title | consumer | change_type | author | backend_status | gateway_status | frontend_status | frontend_owner | frontend_ref | target_release | verified_at | status_note | updated_at | base |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hl-changelog/v2 | frontend | 派单 Step2「下一步·发送给司机」置灰:后端实测判定可用可选无冲突,日格「未通过候选校验」为前端侧误判 | admin | 前端缺陷 | wx(GIT) | not_required | not_required | pending | mmg | 对应后端工单 #5849。本条只交付「后端侧已排除」这一部分的实测证据(测试服 26-3698 网关真实 API + DB 双向核实),前端判定表达式的精确定位仍在进行中,定位完成后会更新本文件。后端若需要为前端补充推进态字段,另发接口类 changelog,不在本条。 | 2026-08-11 | 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 <admin token>
Content-Type: application/json
{
"orderId": 2086270138171994114,
"requirementId": 2087111726523617282,
"fleetItemIndex": 0,
"startDate": "2026-08-18",
"endDate": "2026-08-18",
"headcount": 10,
"excludeAssignmentId": 2086270138708844545,
"vehicleKeyword": "E5555"
}
响应中该车(节选,原样):
{
"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,修复后另发