fix: 优化逻辑

This commit is contained in:
tangwei 2026-06-24 10:02:29 +08:00
parent 2e69b3e73c
commit d2199e47b8

View File

@ -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<String, Object> 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<String, Object> aggregates = new LinkedHashMap<>();
@ -3224,27 +3222,52 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
return baseSql;
}
List<String> groupFields = new ArrayList<>();
List<String> selectItems = new ArrayList<>();
List<String> 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();
}