--- schema: "hl-changelog/v2" ticket: "5931" title: "看板/矩阵 Map 跨层清理 + 契约强类型化(fleetCount 下线)" consumer: "admin" author: "wx" change_type: "修改接口" backend_status: "deployed" gateway_status: "verified" frontend_status: "not_required" frontend_owner: "mmg" frontend_ref: "" target_release: "" verified_at: "2026-08-16" status_note: "后端完成:PR #5984 已合并 dev-v3(617a83dcf)并部署 TEST(user-service + order-v3 + fleet 三服务按顺序发布 UP)。fleetCount 下线/强类型化零 wire 变化由 wire 级单测覆盖;跨服务 Feign unreads[] 字段逐字段一致,容错双向安全。" updated_at: "2026-08-16" base: "dev-v3" generated: "2026-08-16T00:20:00+08:00" --- # 看板/矩阵 Map 跨层清理 + 契约强类型化(#5931) ## 背景 矩阵/看板若干出参用 `Map` 跨层(违 CODE_RULES §3 VO 强制),且部分契约字段随枚举文案漂移。本次把 Map 全部强类型化,并明确若干统计口径。**矩阵 `fleetCount` 字段删除**(前端已迁 `fleetTeamCounts`)。 ## 变更接口与行为变化 | 接口 | 变更 | | --- | --- | | `GET /admin/fleet/matrix/grid` | 删除 `fleetCount`(旧 Map);补录 `fleetTeamCounts[]`;`statusCounts.effectiveStatusCounts` 改强类型五字段(`unassigned`/`unassigned_urgent`/`holding`/`holding_urgent`/`assigned`),**JSON 键名与历史 Map 完全一致,前端零感知** | | `GET /admin/fleet/board/orders` | records[] 新增 `baseAssignmentStatus`(槽位落库基础态,不派生不覆写) | | `GET /admin/fleet/board/summary` | `todayDepartCount` 口径明确为「start_date==TODAY 且代表槽位**落库** status=assigned」(陈旧定稿覆写后已派车出团不再漏计) | | `GET /admin/fleet/dashboard/summary` | `pendingStatusCards` 固定顺序+固定中文标签(待派车/待确认),不随枚举文案漂移 | | 看板候选游标 | 畸形游标由 500 系统异常改业务码 **605310**(请刷新后重试) | ## 前端动作 - **矩阵 `fleetCount` 已下线,勿再使用**——改用 `fleetTeamCounts`(若仍读 fleetCount 会 undefined)。 - `effectiveStatusCounts` 键名不变,零改动。 - 看板/矩阵候选操作遇 605310 提示「刷新后重试」即可。 - 其余为后端口径/健壮性修正,无前端改动。 ## 内部 Feign 契约(后端三服务,前端不直连) - `/internal/message/chat/biz-unread-batch` 出参 `unreadMap`(Map) → `unreads[]`(`{bizId, unreadCount}` 列表)。**部署顺序**:user-service 先于或同批 order-v3/fleet 发布(已按此执行)。 ## 验证证据 - fleet 258 目标测试(Matrix/Board/EffectiveStatus/Dashboard 六服务)+ FleetRedLineArchTest 13 + spotless 全绿;order-v3 354 + user-service 4 全绿。 - `effectiveStatusCounts` 键名与旧 Map 一致性经 MockMvc wire 级断言;四处 ChatBizUnreadItemVO 字段逐字段比对一致。