# 后端执行票 —— 片区/行业筛选的端点覆盖缺口(事件族三端点、几何读模型、概览与工单端点) ## Question 维护者 2026-10-19 反馈第 8 条:上方菜单栏「当前范围」(全部/城南/城北/太常/未分区)没有影响到场景及物体的筛选,行业也需一并检查。 前端执行票 [67](67-district.md) 已把**前端能接的都接上**(一张图、基础档案、管理信息、监测分布、预警分析),并把**后端不收该参数的端点**在界面上如实说明。本票承接剩下的**后端契约缺口**——前端不伪造筛选(票 67 的验收纪律:不支持的参数不得前端伪造,也不得静默忽略)。 **实测证据(2026-10-22,只读探针 `http://192.168.110.96:8301/api/cockpit/v1/**`,载荷与脚本落盘 `verify/artifacts/t67/`)** 判据两条:① 非法值 `district=99` 是否 400;② `district=0/1` 的响应是否真的不同。 ### 一、片区(district):事件族三个端点完全不读该参数 | 端点 | 非法值 99 | 0/1 响应 | 结论 | |---|---|---|---| | `/events/multidimensional-analysis` | **400**(`district must be 0, 1, 2 or UNASSIGNED`) | 桶计数不同 | **已支持**(前端已接线) | | `/events/current` | 200 | 逐字节相同 | **不读参数** | | `/events/history-analysis` | 200 | 逐字节相同 | **不读参数** | | `/events/handling-efficiency` | 200 | 逐字节相同 | **不读参数** | 三个端点的响应 `filters` 里也**没有**片区字段(只有 `mode/level/industry/status` 与 `eventFamily/industry/level/workOrderState`)。 于是「预警处置」模式里:预警分析随片区收窄,当前预警 / 历史事件 / 预警效率始终是全域 —— 同一模式四个数各说各话,前端只能靠界面说明交代(票 67 已做),根子在契约。 **要求**:三个端点按 `multidimensional-analysis` 的既有形态补齐 `district`(0/1/2/UNASSIGNED)+ 非法值 400 + `filters` 回显 `district`/`districtName`。 ### 二、片区:几何读模型没有片区字段(**降级为锦上添花**,前端已能自行推导) `/infrastructure/geometry` 实测 **6766 个 feature**,properties 只有: `source` / `sourceId` / `code` / `name` / `industry` / `typeCode` / `networkType` / `networkLevel` / `pointType` / `networkId` / `diameter` / `remark` / `sourceCoordinates` / `coordinateValidation(s)`。 **没有任何片区字段**;端点本身也不收 `district`(`district=0/1` 响应逐字节相同、非法值 99 不 400)。 > **2026-10-23 更正(维护者指出 + 前端已落地)**:片区信息一直在**设施编码**里 —— > 编码规则是「片区 + 行业 + 时间编码」(`TCRQ202609080001` = 太常·燃气管)。 > 前端票 67 已按编码前缀推出片区并据此裁剪管线图层(实测前缀与 `name` 里的片区词 6762/6762 一致、零反例)。 > **所以本段不再是阻塞项**:管线现在能按片区筛。 **仍然建议(非阻塞)**:几何 feature 直接下发 `district`(与其它端点同一套 0/1/2/null 语义)或 `location`/正式编码字段, 理由有三:① 前端不必依赖拼音前缀约定(`CB`=城北目前是**推定**,现网无该前缀数据可验证); ② 现网 4 个对象用的是另一套编码(`GD-001`、`YL-YJ-00x`),片区只能回 null、按片区查看时被排除; ③ 编码规则一变,前端推导会静默错位(票 67 的 E1b/E13 只能在闸门里靠落盘载荷发现)。 ### 三、行业(industry):三个端点不读该参数 | 端点 | 非法行业 | 结论 | |---|---|---| | `/overview/infrastructure` | 200,响应不变 | **无任何入参**(控制器没有 @RequestParam) | | `/overview/warning-settings` | 200,响应不变 | 不读 `industry` | | `/work-orders` | 200,响应不变 | 不读 `industry`(票 65 新增端点) | | `/infrastructure/geometry` | 200,响应不变 | 不读 `industry`,但几何全量取回后前端本地筛,**不算缺口** | **要求**:给 `/work-orders` 补 `industry`(非法值 400)。 > **概览三端点已被替代(2026-10-22 当日晚些时候)**:前端并行落地的票 05–08 把概览数据源换成四个新端点 > `/overview/perception`、`/overview/pipe-network`、`/overview/warning-study`、`/overview/alarm-disposal`。 > 这四个端点在本机后端**尚未部署(实测一律 404)**,参数面还无法实测;前端按规格 §1「四个端点都不收入参」实现, > 并在界面为概览四块的片区/行业各挂了一句口径说明。**要求**:这四端点上线时明确参数面 —— 要么按规格继续不收 > (前端说明维持),要么补 `district`/`industry` 并与其它端点同一套 400 校验;上线后按 > `verify/artifacts/t67/` 的探针复跑,把前端说明的依据从"规格"升级为"实测"。 ### 四、已支持且前端已接线的(本票不改,仅作对照) `/map-snapshot`、`/infrastructure/base-archives`、`/infrastructure/management-information`、`/monitoring/distribution` 的 `district` 与 `industry` 均实测生效。 ## Acceptance - 事件族三端点补齐 `district`:非法值 400、`filters` 回显、`district=0/1` 的计数真的不同(契约测试成对正反证)。 - (非阻塞)几何读模型下发片区归属,或正式确认「片区看编码前两位」这条规则(含城北前缀字母),并在 `coverage` 里说明管段/构件各自的片区来源。 - `/work-orders` 补 `industry`;非法值 400。 - 概览四个新端点部署时明确参数面(不收则维持前端说明;收则与既有端点同套语义 + 400),并补齐实测证据。 - 契约测试覆盖:合法值生效、非法值 400、不传=全域(不得把「不传」静默当成某个片区)。 - 前端侧复验归 [票 18](18-frontend-real-integration-gate.md)(部署后按 `verify/artifacts/t67/` 的同一套探针复跑)。 ## Context - 前端票:[67: 「当前范围」与「行业」筛选生效面审计与补齐](67-district.md)(本票的全部实测数据、对照表与界面说明由它产出)。 - 复跑探针:`.scratch/cockpit-real-data-wayfinding/verify/artifacts/t67/probe-district.sh`、`probe-geometry-and-industry.sh`、`diff-district.py`。 - 既有裁定:票 12(district 片区契约)、票 24(几何图层)、票 49(设施编码)、票 65(work-orders 端点)。 ## 进度 - 2026-10-22 由前端票 67 收口时另立:前端能接的都接了,剩下的是后端契约本身不认这些参数。 Status: ready-for-agent Type: task Blocked by: Labels: wayfinder:task ## Comments ## Answer