From fdd2cde4444884e3aba5d525424b314029814945 Mon Sep 17 00:00:00 2001 From: 王彪总 Date: Sat, 30 May 2026 17:46:18 +0800 Subject: [PATCH] feat(garden): GIS数据核对导出按道路名称合并十谱绿地数据 --- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/GisRoadController.java | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/vo/GisRoadExportVO.java | 3 +-- 2 files changed, 80 insertions(+), 13 deletions(-) diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/GisRoadController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/GisRoadController.java index 701cf71..9d81d37 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/GisRoadController.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/GisRoadController.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; import com.zteits.urbanops.framework.common.pojo.PageResult; import com.zteits.urbanops.framework.common.pojo.CommonResult; @@ -70,35 +71,102 @@ public class GisRoadController { HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = gisRoadService.getGisRoadPage(pageReqVO).getList(); - List exportList = new ArrayList<>(); + + // 按道路名称分组 + Map> groupedByRoad = new LinkedHashMap<>(); + List unassociatedList = new ArrayList<>(); for (GisRoadRespVO vo : list) { + if (vo.getRoadName() == null || vo.getRoadName().isEmpty()) { + unassociatedList.add(vo); + } else { + groupedByRoad.computeIfAbsent(vo.getRoadName(), k -> new ArrayList<>()).add(vo); + } + } + + List exportList = new ArrayList<>(); + + // 未关联的记录:保持原样 + for (GisRoadRespVO vo : unassociatedList) { GisRoadExportVO exportVO = new GisRoadExportVO(); exportVO.setGisPlotName(vo.getGisPlotName()); exportVO.setRoadName(vo.getRoadName()); - exportVO.setGisPlotArea(vo.getGisPlotArea()); + exportVO.setGisPlotArea(vo.getGisPlotArea() != null ? String.format("%.2f", vo.getGisPlotArea()) : null); exportVO.setTotalArea(vo.getTotalArea()); - exportVO.setGisIsRelatedStr(vo.getGisIsRelated() != null && vo.getGisIsRelated() == 1 ? "已关联" : "未关联"); + exportVO.setGisIsRelatedStr("未关联"); exportVO.setGisDiffArea(vo.getGisDiffArea()); exportVO.setCompanyName(vo.getCompanyName()); exportVO.setDeptName(vo.getDeptName()); - // 位置信息:起点描述 ~ 终点描述 - String positionInfo = ""; - if (vo.getStartingRemark() != null) { - positionInfo += vo.getStartingRemark(); + String positionInfo = buildPositionInfo(vo); + exportVO.setPositionInfo(positionInfo.isEmpty() ? null : positionInfo); + exportList.add(exportVO); + } + + // 已关联的记录:按道路名称合并 + for (Map.Entry> entry : groupedByRoad.entrySet()) { + List group = entry.getValue(); + GisRoadRespVO first = group.get(0); + + GisRoadExportVO exportVO = new GisRoadExportVO(); + exportVO.setRoadName(entry.getKey()); + + // 十谱绿地名称:用顿号拼接 + exportVO.setGisPlotName(group.stream() + .map(GisRoadRespVO::getGisPlotName) + .filter(Objects::nonNull) + .collect(Collectors.joining("、"))); + + // 十谱绿地面积:一一对应拼接,不求和 + exportVO.setGisPlotArea(group.stream() + .map(v -> v.getGisPlotArea() != null ? String.format("%.2f", v.getGisPlotArea()) : "0.00") + .collect(Collectors.joining("、"))); + + // 道路面积:求和 + float sumTotalArea = 0; + for (GisRoadRespVO v : group) { + if (v.getTotalArea() != null) { + sumTotalArea += v.getTotalArea(); + } } - if (vo.getEndRemark() != null) { - if (!positionInfo.isEmpty()) { - positionInfo += " ~ "; + exportVO.setTotalArea(sumTotalArea); + + // 十谱绿地面积求和(用于计算差异面积) + float sumGisPlotArea = 0; + for (GisRoadRespVO v : group) { + if (v.getGisPlotArea() != null) { + sumGisPlotArea += v.getGisPlotArea(); } - positionInfo += vo.getEndRemark(); } + + // 差异面积:十谱绿地面积合计 - 道路面积合计 + exportVO.setGisDiffArea(sumGisPlotArea - sumTotalArea); + + exportVO.setGisIsRelatedStr("已关联"); + exportVO.setCompanyName(first.getCompanyName()); + exportVO.setDeptName(first.getDeptName()); + // 位置信息:起点描述 ~ 终点描述 + String positionInfo = buildPositionInfo(first); exportVO.setPositionInfo(positionInfo.isEmpty() ? null : positionInfo); exportList.add(exportVO); } + String filename = "十谱绿地核对" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + ".xls"; ExcelUtils.write(response, filename, "数据", GisRoadExportVO.class, exportList); } + private String buildPositionInfo(GisRoadRespVO vo) { + String positionInfo = ""; + if (vo.getStartingRemark() != null) { + positionInfo += vo.getStartingRemark(); + } + if (vo.getEndRemark() != null) { + if (!positionInfo.isEmpty()) { + positionInfo += " ~ "; + } + positionInfo += vo.getEndRemark(); + } + return positionInfo; + } + @PostMapping("/associate") @Operation(summary = "关联道路到 GIS 图斑") // @PreAuthorize("@ss.hasPermission('garden:gis-road:query')") diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/vo/GisRoadExportVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/vo/GisRoadExportVO.java index cb91a6c..c85336c 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/vo/GisRoadExportVO.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/gis/vo/GisRoadExportVO.java @@ -22,8 +22,7 @@ public class GisRoadExportVO { @Schema(description = "十谱绿地面积") @ExcelProperty("十谱绿地面积(㎡)") - @JsonSerialize(using = TwoDecimalFloatSerializer.class) - private Float gisPlotArea; + private String gisPlotArea; @Schema(description = "道路面积") @ExcelProperty("道路面积(㎡)") -- libgit2 0.21.4