Type: task Status: ready-for-agent Category: backend-execution
票 24(前端设施点位与管线真实几何图层接线) 的验收第 4 条:「设施总数与后端真实口径一致」。真机走查时发现同一屏上出现两个互相矛盾的设施总数。
http://192.168.110.96:8301)| 端点 | totals.facilityCount |
行业拆分 |
|---|---|---|
/infrastructure/base-archives |
5278 | 燃气 537 / 供水 1004 / 排水 3737 / 窨井 0 |
/overview/infrastructure |
5276 | 燃气 537 / 供水 1004 / 排水 3735 / 窨井 0 |
/infrastructure/management-information |
5273 | (片区×行业视图) |
三者各自内部自洽(5278 = 537+1004+3737;5276 = 537+1004+3735),说明不是某处漏加,而是三套服务对同一张 app_user.pipe_network_base 采用了不同的计数口径。
差异定位到排水 2 条(3737 vs 3735)。两条链路的服务实现不同:
CockpitInfrastructureBaseArchivesService(5278):逐设施遍历,typeCode 非空 → 类型已知 → objectKind == "FACILITY" → 行业/设施类型/片区/建设年份分桶匹配 → 计数。BusinessCockpitOverviewInfrastructureAdapter(5276):按 pipe_network_base.network_type 分组,另有 addFacilityCount(...) 直接补 WATER_PLANT / WATER_PUMP_STATION / DRAINAGE_PUMP_STATION 等计数。CockpitInfrastructureManagementInformationService(5273):片区×行业聚合,又是一套。实测 /overview/infrastructure 的 industries[DRAINAGE].facilityTypes 只有 DRAINAGE_PIPE(3735),即 DRAINAGE_PUMP_STATION 补计数为 0;具体是哪 2 条被 base-archives 计入而 overview 未计入(或反之),需在真实库上逐条比对确认。
驾驶舱基础设施面板由 overviewStore 把两个端点并成一张卡片:总数与行业构成取自 /overview/infrastructure,片区分布取自 /infrastructure/base-archives(见 overviewStore.js 文件头第 11 行)。两端点口径不一致时,同一张卡片上「设施总数 5276」与「片区分布 未分区 5278」并列出现——自相矛盾且无人能判断哪个是真的,值班人员无法据此判断数据完整性。
base-archives 为准:它字段最全,且已按票 20 的 CockpitPipeNetworkType 命名空间分组),/overview/infrastructure 与 /infrastructure/management-information 改为复用同一权威来源,而不是各自遍历。objectKind 非 FACILITY、或建设年份口径不同),必须由契约表达出来并进 excluded,不得静默丢弃。facilityCount 必须相等(或按契约声明的差异显式给出)。只读 GET 实测:三个端点 facilityCount 一致;驾驶舱基础设施面板不再出现两个矛盾总数;Cockpit*Test 全绿并推送提交(基点写进票内)。
由票 24 验收第 4 条派生。与票 30(几何读模型)同属设施口径,建议一并排期。
Status: ready-for-agent Type: task Blocked by: Labels: ready-for-agent, backend-execution, wayfinder:task