31-5278-5276-5273.md 3.8 KB

后端执行票 —— 设施总数三处口径不一致(5278 / 5276 / 5273)

后端执行票 —— 设施总数三处口径不一致(5278 / 5276 / 5273)

Type: task Status: ready-for-agent Category: backend-execution

来源

票 24(前端设施点位与管线真实几何图层接线) 的验收第 4 条:「设施总数与后端真实口径一致」。真机走查时发现同一屏上出现两个互相矛盾的设施总数。

实测证据(2026-10-12,只读 GET,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」并列出现——自相矛盾且无人能判断哪个是真的,值班人员无法据此判断数据完整性。

交付物

  1. 三套计数收敛为单一口径(建议以 base-archives 为准:它字段最全,且已按票 20 的 CockpitPipeNetworkType 命名空间分组),/overview/infrastructure 与 /infrastructure/management-information 改为复用同一权威来源,而不是各自遍历。
  2. 若某条记录确实不该计入(例如 objectKind 非 FACILITY、或建设年份口径不同),必须由契约表达出来并进 excluded,不得静默丢弃。
  3. 补一条契约测试:同一时刻三个端点的 facilityCount 必须相等(或按契约声明的差异显式给出)。

验收

只读 GET 实测:三个端点 facilityCount 一致;驾驶舱基础设施面板不再出现两个矛盾总数;Cockpit*Test 全绿并推送提交(基点写进票内)。

关联

由票 24 验收第 4 条派生。与票 30(几何读模型)同属设施口径,建议一并排期。

进度

Status: ready-for-agent Type: task Blocked by: Labels: ready-for-agent, backend-execution, wayfinder:task

Comments

Answer