From d2199e47b8ce266e00ee4a01c9a42f1e29c5318e Mon Sep 17 00:00:00 2001 From: tangwei Date: Wed, 24 Jun 2026 10:02:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wq/service/impl/EnvWqDataServiceImpl.java | 65 +++++++++++++------ 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index 6910a908..32f2c970 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -3,15 +3,7 @@ package com.yfd.platform.qgc_env.wq.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yfd.platform.common.CommonConstant; -import com.yfd.platform.common.DataSourceLoadOptionsBase; -import com.yfd.platform.common.DataSourceRequest; -import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.common.Group; -import com.yfd.platform.common.GroupHelper; -import com.yfd.platform.common.GroupingInfo; -import com.yfd.platform.common.MicroservicDynamicSQLMapper; -import com.yfd.platform.common.PageInfo; +import com.yfd.platform.common.*; import com.yfd.platform.common.exception.BizException; import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo; import com.yfd.platform.qgc_base.entity.vo.DataParam; @@ -694,6 +686,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { baseSql.append("SELECT ") .append("NVL(t.IS_DELETED, 0) AS isDeleted, ") .append("t.STTP AS sttpCode, ") + .append("t.WARN_STATE AS warnState, ") .append("t.MWAY AS mway, ") .append("t.DTIN_TYPE AS dtinType, ") .append("t.STCD AS stcd, ") @@ -731,6 +724,8 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { DataSourceResult result = new DataSourceResult(); if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { result.setData(new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else if (groupInfos != null && groupInfos.length == 1 && groupInfos[0] != null && StrUtil.isNotBlank(groupInfos[0].getSelector())) { + result.setData(toMsstbprptLegacyGroups(rows, groupInfos[0].getSelector())); } else { result.setData(toLegacyGroupResult(new GroupHelper().group(rows, Arrays.asList(groupInfos)), 0)); } @@ -3181,14 +3176,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return result; } String upperField = groupField == null ? "DTINTYPE" : groupField.toUpperCase(); - String countField = "COUNT_" + upperField; - String aggregateKey = "count_" + groupField; for (Map row : rows) { Object key = row.get(upperField); if (key == null) { key = row.get(groupField); } + String countField = row.containsKey("COUNT_STCD") ? "COUNT_STCD" : "COUNT_" + upperField; + String aggregateKey = "COUNT_STCD".equals(countField) ? "count_stcd" : "count_" + groupField; Object countValue = row.get(countField); + if (countValue == null) { + countValue = row.get("count_stcd"); + } if (countValue == null) { countValue = row.get("count_" + upperField); } @@ -3208,7 +3206,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { detail.put(upperField, key); detail.put(countField, count); item.put("items", List.of(detail)); - item.put("count", count); + item.put("count", 0); item.put("summary", new Object[0]); Map aggregates = new LinkedHashMap<>(); @@ -3224,27 +3222,52 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return baseSql; } List groupFields = new ArrayList<>(); + List selectItems = new ArrayList<>(); List orderByItems = new ArrayList<>(); for (GroupingInfo item : groupInfos) { if (item == null || StrUtil.isBlank(item.getSelector())) { continue; } - groupFields.add(item.getSelector()); + String selector = item.getSelector(); + groupFields.add(selector); + selectItems.add(selector + " AS " + selector.toUpperCase()); String dir = Boolean.TRUE.equals(item.getDesc()) ? "DESC" : "ASC"; - orderByItems.add(item.getSelector() + " " + dir); + orderByItems.add(selector + " " + dir); + boolean hasCountStcd = false; + if (CollUtil.isNotEmpty(item.getSummaryInfos())) { + for (SummaryInfo summaryInfo : item.getSummaryInfos()) { + if (summaryInfo == null || StrUtil.isBlank(summaryInfo.getSelector()) || StrUtil.isBlank(summaryInfo.getSummaryType())) { + continue; + } + String summaryType = summaryInfo.getSummaryType().toUpperCase(); + String summarySelector = summaryInfo.getSelector().toUpperCase(); + if ("count".equalsIgnoreCase(summaryInfo.getSummaryType()) && "stcd".equalsIgnoreCase(summaryInfo.getSelector())) { + hasCountStcd = true; + } + switch (summaryInfo.getSummaryType().toLowerCase()) { + case "count" -> selectItems.add("COUNT(" + summaryInfo.getSelector() + ") AS " + summaryType + "_" + summarySelector); + case "sum" -> selectItems.add("SUM(" + summaryInfo.getSelector() + ") AS " + summaryType + "_" + summarySelector); + case "avg", "average" -> selectItems.add("AVG(" + summaryInfo.getSelector() + ") AS AVG_" + summarySelector); + case "min" -> selectItems.add("MIN(" + summaryInfo.getSelector() + ") AS " + summaryType + "_" + summarySelector); + case "max" -> selectItems.add("MAX(" + summaryInfo.getSelector() + ") AS " + summaryType + "_" + summarySelector); + default -> { + } + } + } + } + if (!hasCountStcd) { + selectItems.add("COUNT(*) AS COUNT_STCD"); + } } if (groupFields.isEmpty()) { return baseSql; } StringBuilder sql = new StringBuilder("SELECT "); - sql.append(String.join(", ", groupFields)); - for (String groupField : groupFields) { - sql.append(", COUNT(*) AS count_").append(groupField).append(" "); - } - sql.append("FROM (").append(baseSql).append(") T ") - .append("GROUP BY ").append(String.join(", ", groupFields)).append(" "); + sql.append(String.join(", ", selectItems)); + sql.append(" FROM (").append(baseSql).append(") T ") + .append(" GROUP BY ").append(String.join(", ", groupFields)).append(" "); if (!orderByItems.isEmpty()) { - sql.append("ORDER BY ").append(String.join(", ", orderByItems)); + sql.append(" ORDER BY ").append(String.join(", ", orderByItems)); } return sql.toString(); }