diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/controller/WeFishController.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/controller/WeFishController.java index d1e3f90f..6e90a7e7 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/controller/WeFishController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/controller/WeFishController.java @@ -27,6 +27,12 @@ public class WeFishController { return ResponseResult.successData(weFishService.getQgcWeFishTKendoListCust(dataSourceRequest)); } + @PostMapping("/we/fishList/GetKendoListCust") + @Operation(summary = "环保部-水生生态调查-水生生态一级页面列表") + public ResponseResult getQgcWeFishList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(weFishService.getQgcWeFishList(dataSourceRequest)); + } + @PostMapping("/we/fisht/year/qgc/GetKendoListCust") @Operation(summary = "全过程沿程鱼类变化情况有数据的流域和年份") public ResponseResult getQgcFishStaticsYearList(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/entity/vo/WeFishListQgcVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/entity/vo/WeFishListQgcVo.java new file mode 100644 index 00000000..5ee533c5 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/entity/vo/WeFishListQgcVo.java @@ -0,0 +1,50 @@ +package com.yfd.platform.qgc_env.wte.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +@Schema(description = "环保部-水生生态调查-水生生态一级页面列表") +public class WeFishListQgcVo { + + @Schema(description = "鱼类编码") + private String id; + + @Schema(description = "鱼类名称") + private String name; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "河流编码") + private String rvcd; + + @Schema(description = "河流名称") + private String rvcdName; + + @Schema(description = "流域编码") + private String hbrvcd; + + @Schema(description = "流域名称") + private String hbrvcdName; + + @Schema(description = "电站编码") + private String rstcd; + + @Schema(description = "电站名称") + private String ennm; + + @Schema(description = "时间") + private String tm; + + @Schema(description = "年份") + private Integer yr; + + @Schema(description = "鱼类数量") + private Long fcnt; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/WeFishService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/WeFishService.java index 5d68201f..c3e3e414 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/WeFishService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/WeFishService.java @@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.wte.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPointQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatQgcVo; @@ -15,6 +16,8 @@ public interface WeFishService { DataSourceResult getQgcWeFishTKendoListCust(DataSourceRequest dataSourceRequest); + DataSourceResult getQgcWeFishList(DataSourceRequest dataSourceRequest); + DataSourceResult>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest); DataSourceResult getQgcWeFishStatics(DataSourceRequest dataSourceRequest); diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java index b7814813..3988e87d 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java @@ -10,6 +10,7 @@ import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.GroupHelper; import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.MicroservicDynamicSQLMapper; +import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPointQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatQgcVo; @@ -90,6 +91,61 @@ public class WeFishServiceImpl implements WeFishService { return result; } + @Override + public DataSourceResult getQgcWeFishList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup(); + Map paramMap = new HashMap<>(); + + String filterSql = buildWeFishListStatFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0} + ); + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT r.id AS id, r.name AS name, r.rvcd AS rvcd, r.rvcdName AS rvcdName, ") + .append("r.hbrvcd AS hbrvcd, r.hbrvcdName AS hbrvcdName, r.rstcd AS rstcd, r.ennm AS ennm, ") + .append("r.baseId AS baseId, r.baseName AS baseName, r.tm AS tm, r.yr AS yr, r.fcnt AS fcnt, r.code AS code ") + .append("FROM (") + .append(buildWeFishListStatQgcDetailSql()) + .append(") r WHERE 1 = 1 "); + if (StrUtil.isNotBlank(filterSql)) { + sql.append("AND ").append(filterSql).append(" "); + } + + DataSourceResult result = new DataSourceResult<>(); + if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + String groupedSql = buildWeFishListQgcGroupSql(sql.toString(), groupInfos); + List> rows = microservicDynamicSQLMapper.getAllList(groupedSql, paramMap); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal(0L); + result.setAggregates(new HashMap<>()); + return result; + } + + sql.append(buildWeFishListQgcOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + Page page = loadOptions == null ? null + : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List> rows = microservicDynamicSQLMapper.pageAllList(page, sql.toString(), paramMap); + List list = new ArrayList<>(); + for (Map row : rows) { + WeFishListQgcVo vo = buildWeFishListQgcVo(row); + if (vo != null) { + list.add(vo); + } + } + + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + @Override public DataSourceResult>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest) { Map paramMap = new HashMap<>(); @@ -600,6 +656,36 @@ public class WeFishServiceImpl implements WeFishService { return sql.toString(); } + private String buildWeFishListQgcGroupSql(String baseSql, GroupingInfo[] groupInfos) { + if (groupInfos == null || groupInfos.length == 0) { + return baseSql; + } + List groupFields = new ArrayList<>(); + List selectItems = new ArrayList<>(); + for (GroupingInfo item : groupInfos) { + if (item == null || StrUtil.isBlank(item.getSelector())) { + continue; + } + String groupColumn = mapWeFishListQgcGroupColumn(item.getSelector()); + if (StrUtil.isBlank(groupColumn)) { + continue; + } + groupFields.add(groupColumn); + selectItems.add(groupColumn + " AS " + item.getSelector().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + item.getSelector().toUpperCase()); + } + if (groupFields.isEmpty()) { + return baseSql; + } + StringBuilder sql = new StringBuilder("SELECT "); + sql.append(String.join(", ", selectItems)) + .append(" FROM (") + .append(baseSql) + .append(") T GROUP BY ") + .append(String.join(", ", groupFields)); + return sql.toString(); + } + private String buildWeFishStaticsSql(String baseId, String hbrvcd, String yr, @@ -1079,6 +1165,36 @@ public class WeFishServiceImpl implements WeFishService { }; } + private String mapWeFishListQgcGroupColumn(String field) { + String column = mapWeFishListStatColumn(field); + if (StrUtil.isBlank(column)) { + return null; + } + return column.startsWith("r.") ? column.substring(2) : column; + } + + private String buildWeFishListQgcOrderBySql(List sorts) { + if (CollUtil.isEmpty(sorts)) { + return ""; + } + List orderByParts = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sorts) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapWeFishListStatColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String direction = "desc".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orderByParts.add(column + " " + direction + " NULLS LAST"); + } + if (orderByParts.isEmpty()) { + return ""; + } + return " ORDER BY " + String.join(", ", orderByParts); + } + private Object normalizeWeFishListStatValue(String field, Object value) { if (value == null) { return null; @@ -1123,6 +1239,26 @@ public class WeFishServiceImpl implements WeFishService { .setFcnt(toWeFishLongValue(firstPresentWeFishValue(row, "FCNT", "fcnt"))); } + private WeFishListQgcVo buildWeFishListQgcVo(Map row) { + if (row == null || row.isEmpty()) { + return null; + } + return new WeFishListQgcVo() + .setId(safeWeFishString(firstPresentWeFishValue(row, "ID", "id"))) + .setName(safeWeFishString(firstPresentWeFishValue(row, "NAME", "name"))) + .setBaseId(safeWeFishString(firstPresentWeFishValue(row, "BASEID", "baseId"))) + .setBaseName(safeWeFishString(firstPresentWeFishValue(row, "BASENAME", "baseName"))) + .setRvcd(safeWeFishString(firstPresentWeFishValue(row, "RVCD", "rvcd"))) + .setRvcdName(safeWeFishString(firstPresentWeFishValue(row, "RVCDNAME", "rvcdName"))) + .setHbrvcd(safeWeFishString(firstPresentWeFishValue(row, "HBRVCD", "hbrvcd"))) + .setHbrvcdName(safeWeFishString(firstPresentWeFishValue(row, "HBRVCDNAME", "hbrvcdName"))) + .setRstcd(safeWeFishString(firstPresentWeFishValue(row, "RSTCD", "rstcd"))) + .setEnnm(safeWeFishString(firstPresentWeFishValue(row, "ENNM", "ennm"))) + .setTm(toWeFishDateTimeTextValue(firstPresentWeFishValue(row, "TM", "tm"))) + .setYr(toWeFishIntegerValue(firstPresentWeFishValue(row, "YR", "yr"))) + .setFcnt(toWeFishLongValue(firstPresentWeFishValue(row, "FCNT", "fcnt"))); + } + private WeFishPointQgcVo buildWeFishPointQgcVo(Map row, Map fishNameMap) { if (row == null || row.isEmpty()) { return null; @@ -1290,6 +1426,15 @@ public class WeFishServiceImpl implements WeFishService { } } + private String toWeFishDateTimeTextValue(Object value) { + Date date = toDateValue(value); + if (date != null) { + return DateUtil.formatDateTime(date); + } + String text = safeWeFishString(value); + return StrUtil.isBlank(text) ? null : text; + } + private void appendWeFishQgcValues(List values, Object value) { if (value == null) {