2026-09-09.md 6.2 KB

2026-09-09:water_pipe_info 收尾迁移(E 顺序执行)

目标

延续 09-08 管网信息查询页重构(4 票已完成):确认 water_pipe_info 表剩余关联后,按用户确认的 A2 决策(选项 2:压力分布图改为「等级分布」,network_level + pipe_network_level 字典)执行 E1→E4,删除旧表全部接口与实体类。

决策与前提

  • 用户已确认按 E 顺序执行,无异议项照做。
  • 数据迁移(water_pipe_info → pipe_network_base,network_type='2')由用户侧执行,先于代码上线生效;SQL 迁移前 GIS/统计页会查不到管网数据。
  • 所有迁移 SQL 统一追加 network_type = '2'(新表为燃气/排水/供水共用表)。
  • location 在 KingBase 是保留字,GIS mapper 中必须带引号 "location"(与 plant/pumpStation 一致)。

变更明细

后端(E:\pipe-ner-server\pipe-network-service,未提交)

  • E1a GIS:
    • mapper/WaterSupply/WaterSupplyGisMap/WaterSupplyGisMapMapper.xml:selectPipeFeatures 与 selectOverview 的 pipe 段改读 app_user.pipe_network_base(network_type='2',输出键保持 id/code/name/status/location + 4 坐标)。
    • WaterSupplyGisMapService.getDetail(String, Long) → (String, String)(管网主键为 UUID);实现注入 PipeNetworkBaseService 替代 IWaterPipeInfoService,pipe 分支 getById(id),其余分支 Long.valueOf(id);控制器 @PathVariable Long id → String id。
    • WaterSupplyGisMapServiceTest / WaterSupplyGisMapControllerTest 调用点 Long→String。
  • E1b 统计:
    • mapper/WaterSupply/PipeNetworkStatistics/PipeNetworkStatisticsMapper.xml 6 条管网 SQL 改读 pipe_network_base(network_type='2'):设施概览 pipe 段、summary(length/diameter)、管材分布(material)、管径分布(diameter)、建设年代分布(EXTRACT(YEAR FROM build_date) + MOD 十年档,KingBase 兼容)、selectPipePressureDistribution → selectPipeLevelDistribution(COALESCE(network_level,'未填报'),即 A2 选项 2);selectStatusDistribution pipe 分支改为子查询包裹 network_type='2'。
    • PipeNetworkStatisticsMapper.java 同步重命名;PipeNetworkStatisticsServiceImpl dashboard key pressureDistribution → levelDistribution。
  • E3 删除(7 个文件):WaterPipeInfoController、WaterPipeInfo 实体、WaterPipeInfoMapper(.java/.xml)、IWaterPipeInfoService、WaterPipeInfoServiceImpl、WaterPipeExportDTO。
    • WaterFacilityExportController 移除 pipeService 字段与 /pipe/export、/pipe/importData、/pipe/importTemplate 三个端点(其余四类设施保留)。
    • WaterFacilityImportService 移除 importPipes、pipeService 构造参数/字段、preparePipe、initialize(WaterPipeInfo);类注释「五类」→「四类」。
    • 测试适配:WaterFacilityQueryServiceTest(删 pipe 分页/导出测试与 mapper 路径)、WaterFacilityImportServiceTest(删 pipe 导入测试、构造器去参)、FacilityCoordinateModelTest(pipe 坐标实体改用 PipeNetworkBase;mapper 清单去 WaterPipeInfo;GIS location 断言适配)、WaterFacilityExportControllerContractTest(去 pipe 断言)。
    • 保留:sql/water_supply_facility_gis.sql 历史迁移脚本中的 water_pipe_info ALTER(表尚未物理删除,脚本为历史事实)。

前端(E:\city-life-line,未提交)

  • E2 WaterFacilityDashboard.vue:pressureDistribution:'压力等级分布' → levelDistribution:'等级分布'(描述「按等级统计管网数量」);onMounted 拉取 pipe_network_level 字典,formatStatisticRow 对 levelDistribution 行做码值→字典标签翻译(未命中回退原值;组件内不得出现「未填报」字面量,有测试约束)。
  • E4 src/api/pipeNetwork/waterSupply.js:删除死代码 exportWaterPipe(/api/water/pipe/export),全仓 grep 无残留。

验证

  • mvn -pl zksy-system,zksy-admin test:zksy-system 95/95 通过;zksy-admin 80 测中仅 CockpitEquipmentDetailAggregateControllerTest 2 个失败——该测试是用户进行中的驾驶舱设备聚合工作(工作区未跟踪文件),与本任务无关,未触碰。
  • 前端 node --test "tests/*.test.mjs":75/75 通过(含此前的 GisMapCanvas Icon 契约测试,用户并行改动已自行通过)。
  • git diff --check:前端干净;后端仅 logs/.../spring.log 运行时日志有尾随空格(历史噪声,从不入暂存)。
  • 残留 grep:后端 java/xml 中 WaterPipeInfo|IWaterPipeInfoService|WaterPipeExportDTO|water_pipe_info 仅剩迁移脚本断言 1 处(预期);前端 exportWaterPipe|/api/water/pipe 零残留。

风险与后续

  • 上线顺序:用户先执行数据迁移 SQL,再部署后端 + 前端,否则 GIS/统计的管网图层为空。
  • 旧 /api/water/pipe/* 全部 404 属预期(前端已无调用方)。
  • 两仓改动均未提交、未推送(约定:不 push)。后端用户并行改动(cockpit 相关文件、spring.log)不得混入本任务提交;提交时只暂存本任务文件。
  • length/diameter/material/build_date 列名与 PipeNetworkBase 实体一致,统计 SQL 与分页共用字段,无额外映射。

补充:供水 GIS Ticket #1/#2

  • Ticket #1 已由用户人工验收并在 Gogs 关闭;测试断言同步为人工确认的标签高度偏移(markerSize + 18),随后连同管网迁移前端改动、会话记忆和无关临时文件清理一起推送到 origin/master。
  • Ticket #2 新增 WaterGisPageShell.vue,把设施 GIS、监测设备 GIS 和报警 GIS 的页头、统计、筛选、图例、搜索结果、地图区和抽屉布局收敛到统一页壳;左侧面板改用单个有界滚动容器,报警图增加点位搜索结果列表。
  • 清理了执行代理误引入的驾驶舱 #31 本地提交及聚类/管线端点越界测试;相关补丁仅保存在系统临时目录,未混入本次提交。
  • 验证:node --test "tests/*.test.mjs" 79/79 通过;node node_modules\vite\bin\vite.js build 通过;git diff --check 通过。Spec 审查发现的坐标转换回归已恢复,Standards 审查余留插槽样式重复属 P3 非阻塞项。