# 后端执行票 —— 驾驶舱设施点位与管线几何读模型 # 后端执行票 —— 驾驶舱设施点位与管线几何读模型 Type: task Status: ready-for-agent Category: backend-execution ## 背景与来源 [票 24(前端设施点位与管线真实几何图层接线)](../cockpit-real-data-wayfinding/issues/24-24.md) 范围第 1 项要求先定「权威读取路径」;维护者 2026-10-12 裁定:**新开后端驾驶舱几何读模型**,不在前端复用业务 GIS 端点。 ## 已核实的事实(一手来源,2026-10-12) 1. **驾驶舱侧没有任何几何端点**:`zksy-admin` 下 24 个 `Cockpit*Controller` 中无一产出几何。`/api/cockpit/v1/map-snapshot` 只返回 `monitoringPoints` + `unassociatedEquipment`;`/infrastructure/base-archives` 只有聚合统计。 2. **全后端只有两处几何产出**:`WaterSupplyGisMapController`(`/waterSupply/gis/map/features`)与 `gasbasic/GisController`。两者都在 `/api/cockpit/v1/**` 之外。 3. **两者都要鉴权**:实测 `GET /waterSupply/gis/map/features` 返回 HTTP 200 + 业务 `code=401 认证失败`。ADR 0005 明文规定免鉴权范围「不扩展到后端其他业务路径」,故前端不可直接复用。 4. **数据底座按行业不均**(决定建模口径的关键事实): | 行业 | 管线几何 | 构件属性 | | --- | --- | --- | | 燃气 | `pipe_network_base`(`network_type='0'`)每条**仅 2 个端点**(`startLongitude/startLatitude/endLongitude/endLatitude`),直线段 | ✅ `gas_pipe_point`:经纬度 + `pointType`(阀门/调压/计量/阴极保护/弯头/三通/其它)+ `networkId` 关联所属管线 | | 供水 | 同表 `network_type='2'`,同为 2 端点直线段 | ❌ 无管点构件表 | | 排水 | 同表 `network_type='1'`,同为 2 端点直线段 | ⚠️ 有 `drainage.domain.PipeNetworkInfo`(管线/管点/排口),未见构件类型字段 | | 窨井 | 无管线;`ManholeBase` 有经纬度 | ❌ | 规模:`pipe_network_base` 共 5268 条(燃气 537 / 供水 996 / 排水 3735),管线总长 67.6 km。 ## 交付物 1. **新增免鉴权几何端点**,挂在 `/api/cockpit/v1/**` 下(继承 ADR 0005 的免鉴权口径与只读语义),返回 GeoJSON `FeatureCollection`: - 管段 `LineString`(沿用现有两点的 `[lon, lat]` 坐标顺序约定); - 管点/构件 `Point`,带 `pointType` 与所属 `networkId`。 2. **跨行业覆盖如实呈现**:哪些行业有几何、哪些没有,必须由响应本身表达,不得让前端猜。燃气按裁定出全套构件;供水/排水只有真实 2 点直线段就只给直线段;窨井给点位。 3. **坐标校核纪律与决策票 07 一致**:范围校验、零坐标、未校验坐标一律不得静默渲染,须随几何一并给出可判定的状态(与 `map-snapshot` 的 `coordinateValidation` 同形),由前端决定进「无地图位置」清单还是上图。 4. **不做坐标臆造**:不得为缺坐标的记录生成默认点或吸附推断节点。管段目前无共享端点拓扑,**不得据此推断弯头/三通连接关系**。 ## 验收 只读 GET 实测:免鉴权可取到真实几何;坐标缺失/非法的对象带明确状态;燃气构件类型齐全、供水/排水/窨井的覆盖缺口在响应中如实可判;`Cockpit*Test` 全绿并推送提交(基点写进票内)。 ## 关联 由[票 24](../cockpit-real-data-wayfinding/issues/24-24.md) 范围第 1 项派生;票 24 的真实几何验收依赖本票落地。 ## 进度 Status: ready-for-agent Type: task Blocked by: Labels: ready-for-agent, backend-execution, wayfinder:task ## Comments ## Answer