feat: 环保部-水生生态调查-水生生态一级页面列表

This commit is contained in:
tangwei 2026-06-26 09:32:15 +08:00
parent a96b76afcf
commit 03c43a5e8a
4 changed files with 204 additions and 0 deletions

View File

@ -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) {

View File

@ -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;
}

View File

@ -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<WeFishTQgcVo> getQgcWeFishTKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishListQgcVo> getQgcWeFishList(DataSourceRequest dataSourceRequest);
DataSourceResult<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeStaticsVo> getQgcWeFishStatics(DataSourceRequest dataSourceRequest);

View File

@ -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<WeFishListQgcVo> getQgcWeFishList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup();
Map<String, Object> 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<WeFishListQgcVo> result = new DataSourceResult<>();
if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
String groupedSql = buildWeFishListQgcGroupSql(sql.toString(), groupInfos);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.getAllList(groupedSql, paramMap);
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<WeFishListQgcVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<WeFishListQgcVo>) (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<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(page, sql.toString(), paramMap);
List<WeFishListQgcVo> list = new ArrayList<>();
for (Map<String, Object> 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<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest) {
Map<String, Object> 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<String> groupFields = new ArrayList<>();
List<String> 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<DataSourceRequest.SortDescriptor> sorts) {
if (CollUtil.isEmpty(sorts)) {
return "";
}
List<String> 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<String, Object> 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<String, Object> row, Map<String, String> 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<Object> values, Object value) {
if (value == null) {