fix: 优化逻辑

This commit is contained in:
tangwei 2026-05-27 08:56:15 +08:00
parent 2a20b09b6f
commit 30d0522a9c

View File

@ -7,6 +7,7 @@ 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;
@ -47,9 +48,12 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
RequestHolder.getHttpServletRequest().getParameter(CommonConstant.CALCULATE_FLAG)
);
StringBuilder sql = new StringBuilder(buildEnvWqDataBaseSql(calculated));
StringBuilder sql = new StringBuilder(buildEnvWqProcessBaseSql(calculated));
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildEnvWqDataFilterCondition(
if (calculated) {
paramMap.put("recordUser", SecurityUtils.getUserId());
}
String filterSql = buildEnvWqFilterCondition(
dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
paramMap,
new int[]{0}
@ -62,27 +66,27 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
String groupBy = KendoUtil.getGroupBy(dataSourceRequest);
GroupingInfo[] groupInfos = loadOptions.getGroup();
if (StrUtil.isNotBlank(groupBy) && groupInfos != null && groupInfos.length > 0) {
String groupedSql = buildEnvWqDataGroupSql(sql.toString(), groupBy, groupInfos);
String groupedSql = buildEnvWqGroupSql(sql.toString(), dataSourceRequest, groupInfos);
List<Map<String, Object>> list = microservicDynamicSQLMapper.pageAllList(null, groupedSql, paramMap);
list = filterInvalidEnvWqGroupRows(list, groupInfos);
DataSourceResult result = new DataSourceResult();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData(new GroupHelper().faltGroup(list, Arrays.asList(groupInfos)));
} else {
result.setData(new GroupHelper().group(list, Arrays.asList(groupInfos)));
result.setData(toLegacyGroupResult(new GroupHelper().group(list, Arrays.asList(groupInfos)), 0));
}
result.setTotal(0L);
result.setAggregates(new HashMap<>());
return result;
}
sql.append(buildEnvWqDataOrderBySql(dataSourceRequest.getSort()));
sql.append(buildEnvWqOrderBySql(dataSourceRequest.getSort()));
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
List<EnvWqDataVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EnvWqDataVo.class);
fillEnvWqDataDerivedFields(list);
fillEnvWqDataLimit(list);
List<EnvWqVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EnvWqVo.class);
fillEnvWqDerivedFields(list, calculated);
DataSourceResult<EnvWqDataVo> result = new DataSourceResult<>();
DataSourceResult<EnvWqVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
@ -940,10 +944,12 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
case "type" -> "T.TYPE";
case "sttype" -> "T.STTYPE";
case "sfdb" -> "T.SFDB";
case "dtinType" -> "T.DTINTYPE";
case "rstcdStepSort" -> "T.RSTCDSTEPSORT";
case "baseStepSort" -> "T.BASESTEPSORT";
case "rvcdStepSort" -> "T.RVCDSTEPSORT";
case "siteStepSort" -> "T.SITESTEPSORT";
case "drMonth" -> "T.DR_MONTH";
case "drYear" -> "T.DR_YEAR";
case "wqSfdbHy" -> "T.WQ_SFDB_HY";
case "wqSfdbHn" -> "T.WQ_SFDB_HN";
@ -954,6 +960,84 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
};
}
private List<Map<String, Object>> filterInvalidEnvWqGroupRows(List<Map<String, Object>> rows,
GroupingInfo[] groupInfos) {
if (rows == null || rows.isEmpty() || groupInfos == null || groupInfos.length == 0) {
return rows;
}
boolean containsBaseGroup = false;
for (GroupingInfo groupInfo : groupInfos) {
if (groupInfo == null || StrUtil.isBlank(groupInfo.getSelector())) {
continue;
}
String selector = groupInfo.getSelector();
if ("baseStepSort".equals(selector) || "baseId".equals(selector) || "baseName".equals(selector)) {
containsBaseGroup = true;
break;
}
}
if (!containsBaseGroup) {
return rows;
}
List<Map<String, Object>> filtered = new ArrayList<>();
for (Map<String, Object> row : rows) {
Object baseStepSort = readGroupValue(row, "baseStepSort");
Object baseId = readGroupValue(row, "baseId");
Object baseName = readGroupValue(row, "baseName");
if (!isBlankGroupValue(baseStepSort) || !isBlankGroupValue(baseId) || !isBlankGroupValue(baseName)) {
filtered.add(row);
}
}
return filtered;
}
private List<Map<String, Object>> toLegacyGroupResult(List<Group> groups, int depth) {
if (groups == null) {
return null;
}
List<Map<String, Object>> result = new ArrayList<>();
for (Group group : groups) {
if (group == null) {
continue;
}
Map<String, Object> item = new LinkedHashMap<>();
if (depth > 0 && group.getField() != null) {
item.put("field", group.getField());
}
item.put("key", group.getKey());
item.put("keyName", group.getKeyName());
item.put("keyExt", group.getKeyExt() == null ? new HashMap<>() : group.getKeyExt());
item.put("count", group.getCount());
item.put("summary", group.getSummary() == null ? new Object[0] : group.getSummary());
item.put("aggregates", group.getAggregates() == null ? new HashMap<>() : group.getAggregates());
if (group.getItems() != null && !group.getItems().isEmpty() && group.getItems().get(0) instanceof Group) {
item.put("items", toLegacyGroupResult(group.getItems(), depth + 1));
} else {
item.put("items", group.getItems());
}
result.add(item);
}
return result;
}
private Object readGroupValue(Map<String, Object> row, String field) {
Object value = row.get(field);
if (value == null) {
value = row.get(field.toUpperCase());
}
return value;
}
private boolean isBlankGroupValue(Object value) {
if (value == null) {
return true;
}
if (value instanceof String str) {
return StrUtil.isBlank(str);
}
return false;
}
private String buildEnvWqGroupSql(String baseSql,
DataSourceRequest dataSourceRequest,
GroupingInfo[] groupInfos) {