fix: 优化生态调查逻辑

This commit is contained in:
tangwei 2026-09-07 11:59:28 +08:00
parent ed71491806
commit 8e6e958886

View File

@ -235,20 +235,31 @@ public class WeFishServiceImpl implements WeFishService {
@Override @Override
public DataSourceResult<WeVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest) { public DataSourceResult<WeVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
GroupingInfo[] groups = loadOptions == null ? null : loadOptions.getGroup();
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildWeVmsstbprptSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildWeVmsstbprptViewSql())
.append(") t WHERE 1 = 1 ");
String filterSql = buildWeVmsstbprptFilterCondition( String filterSql = buildWeVmsstbprptFilterCondition(
dataSourceRequest == null ? null : dataSourceRequest.getFilter(), dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
paramMap, paramMap,
new int[]{0} new int[]{0}
); );
if (groups != null && groups.length > 0) {
return buildGroupedVmsstbprptResult(dataSourceRequest, groups, filterSql, paramMap);
}
return buildDetailVmsstbprptResult(dataSourceRequest, loadOptions, filterSql, paramMap);
}
private DataSourceResult<WeVmsstbprptVo> buildDetailVmsstbprptResult(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions,
String filterSql,
Map<String, Object> paramMap) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildWeVmsstbprptSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildWeVmsstbprptViewSql())
.append(") t WHERE 1 = 1 ");
if (StrUtil.isNotBlank(filterSql)) { if (StrUtil.isNotBlank(filterSql)) {
sql.append("AND ").append(filterSql).append(" "); sql.append("AND ").append(filterSql).append(" ");
} }
@ -270,6 +281,95 @@ public class WeFishServiceImpl implements WeFishService {
return result; return result;
} }
private DataSourceResult<WeVmsstbprptVo> buildGroupedVmsstbprptResult(DataSourceRequest dataSourceRequest,
GroupingInfo[] groups,
String filterSql,
Map<String, Object> paramMap) {
List<DataSourceRequest.GroupDescriptor> groupDescriptors = dataSourceRequest == null ? null : dataSourceRequest.getGroup();
List<String> selectItems = new ArrayList<>();
if (CollUtil.isNotEmpty(groupDescriptors)) {
for (DataSourceRequest.GroupDescriptor descriptor : groupDescriptors) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapWeVmsstbprptColumn(descriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
selectItems.add(column + " AS " + descriptor.getField());
selectItems.add("COUNT(1) AS count_" + descriptor.getField());
}
}
if (selectItems.isEmpty()) {
selectItems.add("t.sttpCode AS sttpCode");
selectItems.add("COUNT(1) AS count_sttpCode");
}
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(String.join(", ", selectItems))
.append(" FROM (")
.append(buildWeVmsstbprptViewSql())
.append(") t ")
.append("WHERE 1 = 1 ");
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
List<String> groupByColumns = new ArrayList<>();
if (CollUtil.isNotEmpty(groupDescriptors)) {
for (DataSourceRequest.GroupDescriptor descriptor : groupDescriptors) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapWeVmsstbprptColumn(descriptor.getField());
if (StrUtil.isNotBlank(column)) {
groupByColumns.add(column);
}
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns));
} else {
sql.append(" GROUP BY t.sttpCode ");
}
sql.append(buildWeVmsstbprptGroupOrderBySql(groupDescriptors));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<WeVmsstbprptVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<WeVmsstbprptVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groups)));
result.setTotal((long) rows.size());
} else {
result.setData((List<WeVmsstbprptVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groups)));
result.setTotal((long) rows.size());
}
result.setAggregates(new HashMap<>());
return result;
}
private String buildWeVmsstbprptGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
if (CollUtil.isEmpty(groups)) {
return " ORDER BY t.sttpCode ASC";
}
List<String> orderItems = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor group : groups) {
if (group == null || StrUtil.isBlank(group.getField())) {
continue;
}
String column = mapWeVmsstbprptColumn(group.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String direction = "desc".equalsIgnoreCase(group.getDir()) ? "DESC" : "ASC";
orderItems.add(column + " " + direction);
}
if (orderItems.isEmpty()) {
return " ORDER BY t.sttpCode ASC";
}
return " ORDER BY " + String.join(", ", orderItems);
}
@Override @Override
public DataSourceResult<WeWvaYearQgcVo> getWvaDefaultYearList(DataSourceRequest dataSourceRequest) { public DataSourceResult<WeWvaYearQgcVo> getWvaDefaultYearList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@ -1223,7 +1323,7 @@ public class WeFishServiceImpl implements WeFishService {
.append(" MAX(t.tm) AS latestTm ") .append(" MAX(t.tm) AS latestTm ")
.append(" FROM ( ") .append(" FROM ( ")
.append(" SELECT w.STCD AS stcd, a.NAME AS anm, MAX(w.TM) AS tm ") .append(" SELECT w.STCD AS stcd, a.NAME AS anm, MAX(w.TM) AS tm ")
.append(" FROM SD_WVA_R w ") .append(" FROM SD_ANML_R w ")
.append(" INNER JOIN SD_ANIMALDICTORY_B a ON a.ID = w.ANIMAL_ID ") .append(" INNER JOIN SD_ANIMALDICTORY_B a ON a.ID = w.ANIMAL_ID ")
.append(" WHERE NVL(w.IS_DELETED, 0) = 0 ") .append(" WHERE NVL(w.IS_DELETED, 0) = 0 ")
.append(" AND NVL(a.IS_DELETED, 0) = 0 ") .append(" AND NVL(a.IS_DELETED, 0) = 0 ")
@ -1247,7 +1347,7 @@ public class WeFishServiceImpl implements WeFishService {
.append(" GROUP BY t.stcd ") .append(" GROUP BY t.stcd ")
.append(") agg ON agg.stcd = ai.STCD ") .append(") agg ON agg.stcd = ai.STCD ")
.append("WHERE NVL(ai.IS_DELETED, 0) = 0 ") .append("WHERE NVL(ai.IS_DELETED, 0) = 0 ")
.append(" AND ai.STTP = 'WVA' ") // .append(" AND ai.STTP = 'WVA' ")
.append(" AND ai.LGTD IS NOT NULL "); .append(" AND ai.LGTD IS NOT NULL ");
if (StrUtil.isNotBlank(baseId)) { if (StrUtil.isNotBlank(baseId)) {
paramMap.put("weAnimalPointBaseId", baseId); paramMap.put("weAnimalPointBaseId", baseId);
@ -1347,7 +1447,7 @@ public class WeFishServiceImpl implements WeFishService {
"aim.STCD AS stcd, aim.STNM AS stnm, " + "aim.STCD AS stcd, aim.STNM AS stnm, " +
"MAX(w.TM) AS tm, TO_CHAR(MAX(w.TM), 'yyyy') AS yr, " + "MAX(w.TM) AS tm, TO_CHAR(MAX(w.TM), 'yyyy') AS yr, " +
"COUNT(*) AS acnt " + "COUNT(*) AS acnt " +
"FROM SD_WVA_R w " + "FROM SD_ANML_R w " +
"INNER JOIN SD_ANIMALDICTORY_B a ON a.ID = w.ANIMAL_ID " + "INNER JOIN SD_ANIMALDICTORY_B a ON a.ID = w.ANIMAL_ID " +
" AND NVL(a.IS_DELETED, 0) = 0 " + " AND NVL(a.IS_DELETED, 0) = 0 " +
" AND NVL(a.ENABLE, 1) = 1 " + " AND NVL(a.ENABLE, 1) = 1 " +
@ -3735,25 +3835,24 @@ public class WeFishServiceImpl implements WeFishService {
private String buildWeVmsstbprptViewSql() { private String buildWeVmsstbprptViewSql() {
return "SELECT " + return "SELECT " +
"ai.STCD AS id, " + "src.STCD AS id, " +
"ai.STTP AS sttpCode, " + "src.STTP_CODE AS sttpCode, " +
"ai.STLC AS stlc, " + "src.STLC AS stlc, " +
"ai.STCD AS stcd, " + "src.STCD AS stcd, " +
"ai.STNM AS stnm, " + "src.STNM AS stnm, " +
"ai.BOX AS box, " + "src.BOX AS box, " +
"ai.RSTCD AS rstcd, " + "src.RSTCD AS rstcd, " +
"eng.ENNM AS ennm, " + "src.ENNM AS ennm, " +
"ai.BASE_ID AS baseId, " + "src.BASE_ID AS baseId, " +
"hb.BASENAME AS baseName, " + "src.BASE_NAME AS baseName, " +
"ai.HBRVCD AS hbrvcd, " + "src.HBRVCD AS hbrvcd, " +
"ai.RVCD AS rvcd, " + "src.RVCD AS rvcd, " +
"ai.ORDER_INDEX AS orderIndex, " + "src.ORDER_INDEX AS orderIndex, " +
"ai.LGTD AS lgtd, " + "src.LGTD AS lgtd, " +
"ai.LTTD AS lttd " + "src.LTTD AS lttd " +
"FROM SD_AIMONITOR_B_H ai " + "FROM V_MS_STBPRP_T src " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = ai.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + "WHERE 1=1 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = ai.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + "AND NVL(src.IS_DELETED, 0) = 0";
"WHERE NVL(ai.IS_DELETED, 0) = 0";
} }
private String buildWeWvaViewSql() { private String buildWeWvaViewSql() {