--- schema: "hl-changelog/v2" ticket: "5656" title: "派单详情 travelers 补 nativePlace 跨服务透传(#5642 链路补全)" consumer: "admin" author: "wx" change_type: "修改接口" backend_status: "deployed" gateway_status: "verified" frontend_status: "implemented" frontend_owner: "mmg" frontend_ref: "7e7085b6" target_release: "" verified_at: "" status_note: "后端完成:PR #5661 合并 dev-v3(3ee5770af)并部署 TEST(order-v3+fleet 双服务);网关实测派单详情与 travelers 端点 nativePlace 解析正确(150784→内蒙古呼伦贝尔市等 5 场景)。" updated_at: "2026-08-08" base: "dev-v3" generated: "2026-08-07T18:40:00+08:00" --- # 派单详情 travelers 补 nativePlace 跨服务透传(#5656) ## 背景 #5642 仅为 order 管理端 `TravelerVO`(traveler/list 等)加了 `nativePlace`;派单详情走跨服务链路(order `GET /v3/internal/order/orders/{orderId}/fleet-detail-context` → fleet `BoardOrderDetailVO.travelers`),该链路 traveler DTO 未带 `nativePlace`,派单页/看板详情展示出行人时缺所属地。本单补全该链路。 ## 变更内容 | 层 | 变更 | |---|---| | hl-common | `OrderTravelerForFleetDTO` 新增可空 `nativePlace`(身份证所属地,省+地级行政区名;非身份证/未命中为 null) | | order 生产者 | `OrderFleetProviderService#toMaskedTraveler` 填充(复用 #5642 `IdCardParser` 解析结果,同源 `idProvinceName`) | | fleet 消费者 | `BoardOrderDetailVO.travelers` / `GET /admin/fleet/board/orders/{id}/travelers` / `FleetTravelerAccessService#listMasked` 均直接复用共享 DTO,无逐字段映射,自动获得字段 | 受影响接口(均为新增只读字段,无破坏性): - `GET /admin/fleet/board/orders/{orderId}`(派单详情聚合)→ `data.travelers[].nativePlace` - `GET /admin/fleet/board/orders/{orderId}/travelers` → `data[].nativePlace` - internal:`GET /v3/internal/order/orders/{orderId}/fleet-detail-context`、`GET /v3/internal/order/orders/{orderId}/fleet-travelers` 的 traveler 投影同步带 `nativePlace` 取值口径与 #5642 一致:大陆身份证命中地级码→省短名+地市名(如 `150784…`→内蒙古呼伦贝尔市);直辖市→市名;省直辖县级(4190/4290/4690/6590)→6 位精确映射;非身份证或未命中(含已撤销历史码)→`null` 不报错。 ## 关联 / 联系人 - 工单:https://git.1814.love:8443/wx/HL/issues/5656 - PR:https://git.1814.love:8443/wx/HL/pulls/5661 - 后端:wx ## 变更接口或验证证据 ### 接口契约 - 接口路径/方法/请求体:不变。 - 响应 travelers 项新增 `nativePlace`(string | null)。 ### 验证证据 - 定向测试:order `OrderFleetProviderServiceTest` 53 全过(含 fleet-detail-context nativePlace 断言);fleet `BoardOrderServiceTest` 87 + `BoardControllerTest` 11 全过(含派单详情 travelers.nativePlace 透传断言)。 - 全量:fleet `mvn -pl hl-fleet-service -am verify` 3256 测试,失败仅 ReleaseEMixedBinaryHarnessTest(1F)+ReleaseEOccupancyMysql8033RecoveryTest(10E) 两个 harness 类,git stash 基线复跑同类同败;order `-pl hl-order-service-v3 -am verify` 7610 测试 7F/95E 失败类集与 #5642 基线逐一相同;fleet spotless:check 通过。 - 部署 TEST 成功(hl-order-service-v3 + hl-fleet-service)。 - 网关验证(自建 HLTEST 订单 2085637067265449985,复用 #5642 五场景出行人):派单详情与 travelers 端点均断言 150784→内蒙古呼伦贝尔市、469001→海南五指山市、110101→北京市、PASSPORT→null、371201(已撤销码)→null;脱敏与省级字段回归通过。 ## 前端/调用方动作 - 派单页/看板详情展示出行人所属地时直接使用 `travelers[].nativePlace`;`null` 展示空(如 "-")。 - 与 #5642 traveler/list 口径一致,前端两处共用同一展示逻辑即可。 ## 前端核查(2026-08-08 mmg 实查,前端无需新改动) 本单即 #5642 协调台更正中所述「另立后端工单补 fleet-detail-context→BoardOrderDetailVO 链路」的后端补全。前端派单页所属地列早在 #5642(hl-admin@7e7085b6)已接入并透传: - `src/views/fleet/board/components/Step1OrderDetail.vue` 所属地列渲染 `traveler.nativePlace || traveler.idProvinceName || '—'`。 - 数据链 `loadBoardOrderDetail → normalizeBoardOrder(...row) → buildActiveAssignmentOrder(...order) → travelers map(...traveler)` 全程透传、无白名单丢字段。 - 后端在 `BoardOrderDetailVO.travelers` 补 nativePlace 后,前端列自动取值生效,**前端零改动**。frontend_ref 沿用 #5642 的 7e7085b6(无新提交)。