feat: 沿程鱼类变化情况二级弹窗

This commit is contained in:
tangwei 2026-06-29 17:32:38 +08:00
parent 435452a79c
commit 6865cf7317
4 changed files with 193 additions and 0 deletions

View File

@ -87,6 +87,12 @@ public class WeFishController {
return ResponseResult.successData(weFishService.getWeFishStatList(dataSourceRequest)); return ResponseResult.successData(weFishService.getWeFishStatList(dataSourceRequest));
} }
@PostMapping("/we/fisht/detail/GetKendoListCust")
@Operation(summary = "沿程鱼类变化情况二级弹窗")
public ResponseResult getWeFishDetailList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getWeFishDetailList(dataSourceRequest));
}
@PostMapping("/we/fishList/stat/qgc/GetKendoListCust") @PostMapping("/we/fishList/stat/qgc/GetKendoListCust")
@Operation(summary = "环保部-水生生态调查-水生生态面板") @Operation(summary = "环保部-水生生态调查-水生生态面板")
public ResponseResult getQgcFishListStat(@RequestBody DataSourceRequest dataSourceRequest) { public ResponseResult getQgcFishListStat(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -0,0 +1,36 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
@Schema(description = "沿程鱼类变化情况二级弹窗")
public class WeFishDetailVo {
@Schema(description = "电站编码")
private String rsctd;
@Schema(description = "电站名称")
private String rsctdName;
@Schema(description = "鱼类列表")
private List<String> fishList;
@Schema(description = "断面列表")
private List<StationItem> stcdList;
@Data
@Accessors(chain = true)
@Schema(description = "断面信息")
public static class StationItem {
@Schema(description = "断面编码")
private String stcd;
@Schema(description = "断面名称")
private String stnm;
}
}

View File

@ -4,6 +4,7 @@ import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; 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.WeFishListQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishDetailVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeMsstbprptVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeMsstbprptVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPointQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPointQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatQgcVo;
@ -41,6 +42,8 @@ public interface WeFishService {
DataSourceResult<WeFishStatQgcVo> getWeFishStatList(DataSourceRequest dataSourceRequest); DataSourceResult<WeFishStatQgcVo> getWeFishStatList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishDetailVo> getWeFishDetailList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishListStatQgcVo> getQgcFishListStat(DataSourceRequest dataSourceRequest); DataSourceResult<WeFishListStatQgcVo> getQgcFishListStat(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishPointQgcVo> getQgcWeFishPoint(DataSourceRequest dataSourceRequest); DataSourceResult<WeFishPointQgcVo> getQgcWeFishPoint(DataSourceRequest dataSourceRequest);

View File

@ -12,6 +12,7 @@ import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper; 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.WeFishListQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishDetailVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeMsstbprptVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeMsstbprptVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPointQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPointQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatQgcVo;
@ -439,6 +440,30 @@ public class WeFishServiceImpl implements WeFishService {
return buildWeFishStatResult(rows); return buildWeFishStatResult(rows);
} }
@Override
public DataSourceResult<WeFishDetailVo> getWeFishDetailList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
Page<?> page = loadOptions == null ? null
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Map<String, Object> paramMap = new HashMap<>();
DataSourceRequest.FilterDescriptor filter = dataSourceRequest == null ? null : dataSourceRequest.getFilter();
String baseId = firstNonBlankWeFishFilter(filter, "baseId", "base_id");
String rstcd = getFirstWeFishFilterText(filter, "stcd");
String rvcd = firstNonBlankWeFishFilter(filter, "rvcd", "hbrvcd");
String yr = getFirstWeFishFilterText(filter, "yr");
String ty = getFirstWeFishFilterText(filter, "ty");
String sql = buildWeFishDetailSql(baseId, rstcd, rvcd, yr, ty, paramMap);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(page, sql, paramMap);
DataSourceResult<WeFishDetailVo> result = new DataSourceResult<>();
result.setData(buildWeFishDetailResult(rows));
result.setTotal(page != null ? page.getTotal() : (long) rows.size());
result.setAggregates(new HashMap<>());
return result;
}
@Override @Override
public DataSourceResult<WeFishStatQgcVo> getQgcWeFishStatList(DataSourceRequest dataSourceRequest) { public DataSourceResult<WeFishStatQgcVo> getQgcWeFishStatList(DataSourceRequest dataSourceRequest) {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
@ -922,6 +947,129 @@ public class WeFishServiceImpl implements WeFishService {
return result; return result;
} }
private String buildWeFishDetailSql(String baseId,
String rstcd,
String rvcd,
String yr,
String ty,
Map<String, Object> paramMap) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append("section.RSTCD AS rstcd, ")
.append("eng.ENNM AS rstcdName, ")
.append("TO_CHAR(WM_CONCAT(DISTINCT section.STCD)) AS stcd, ")
.append("TO_CHAR(WM_CONCAT(DISTINCT section.STNM)) AS stnm, ")
.append("TO_CHAR(WM_CONCAT(DISTINCT dict.NAME)) AS name ")
.append("FROM SD_WE_B_H section ")
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
.append(" AND NVL(we.STATUS, 1) = 1 ")
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON section.RSTCD = eng.STCD ")
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ")
.append(" AND NVL(dict.IS_DELETED, 0) = 0 ")
.append("WHERE NVL(section.USFL, 0) = 1 ")
.append("AND section.RSTCD IS NOT NULL ")
.append("AND dict.NAME IS NOT NULL ");
if (StrUtil.isNotBlank(baseId)) {
paramMap.put("weFishDetailBaseId", baseId);
sql.append("AND section.BASE_ID = #{map.weFishDetailBaseId} ");
}
if (StrUtil.isNotBlank(rstcd)) {
paramMap.put("weFishDetailRstcd", rstcd);
sql.append("AND section.RSTCD = #{map.weFishDetailRstcd} ");
}
if (StrUtil.isNotBlank(rvcd)) {
paramMap.put("weFishDetailRvcd", rvcd);
sql.append("AND section.HBRVCD = #{map.weFishDetailRvcd} ");
}
if (StrUtil.isNotBlank(yr)) {
paramMap.put("weFishDetailYr", yr);
sql.append("AND TO_CHAR(we.TM, 'yyyy') = #{map.weFishDetailYr} ");
}
if (StrUtil.isNotBlank(ty)) {
paramMap.put("weFishDetailTy", ty);
sql.append("AND CASE ")
.append("WHEN dict.SPEC_ORIGIN = 2 THEN '1' ")
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
.append("END = #{map.weFishDetailTy} ");
}
sql.append("GROUP BY section.RSTCD, eng.ENNM ")
.append("ORDER BY eng.ENNM ASC NULLS LAST");
return sql.toString();
}
private List<WeFishDetailVo> buildWeFishDetailResult(List<Map<String, Object>> rows) {
List<WeFishDetailVo> result = new ArrayList<>();
if (CollUtil.isEmpty(rows)) {
return result;
}
for (Map<String, Object> row : rows) {
String stcd = safeWeFishString(firstPresentWeFishValue(row, "STCD", "stcd"));
String stnm = safeWeFishString(firstPresentWeFishValue(row, "STNM", "stnm"));
String fishNames = safeWeFishString(firstPresentWeFishValue(row, "NAME", "name"));
WeFishDetailVo vo = new WeFishDetailVo()
.setRsctd(safeWeFishString(firstPresentWeFishValue(row, "RSTCD", "rstcd")))
.setRsctdName(safeWeFishString(firstPresentWeFishValue(row, "RSTCDNAME", "rstcdName")))
.setFishList(splitWeFishText(fishNames))
.setStcdList(buildWeFishStationItems(stcd, stnm));
result.add(vo);
}
return result;
}
private List<WeFishDetailVo.StationItem> buildWeFishStationItems(String stcdText, String stnmText) {
List<WeFishDetailVo.StationItem> result = new ArrayList<>();
if (StrUtil.isBlank(stcdText) || StrUtil.isBlank(stnmText)) {
return result;
}
List<String> stcdList = splitWeFishText(stcdText);
List<String> stnmList = splitWeFishText(stnmText);
int size = Math.min(stcdList.size(), stnmList.size());
for (int i = 0; i < size; i++) {
result.add(new WeFishDetailVo.StationItem()
.setStcd(stcdList.get(i))
.setStnm(stnmList.get(i)));
}
return result;
}
private List<String> splitWeFishText(String text) {
if (StrUtil.isBlank(text)) {
return new ArrayList<>();
}
String[] parts = text.split(",");
List<String> result = new ArrayList<>();
Set<String> seen = new HashSet<>();
for (String part : parts) {
String value = StrUtil.trim(part);
if (StrUtil.isBlank(value) || !seen.add(value)) {
continue;
}
result.add(value);
}
return result;
}
private String firstNonBlankWeFishFilter(DataSourceRequest.FilterDescriptor filter, String... fields) {
if (fields == null) {
return null;
}
for (String field : fields) {
String value = getFirstWeFishFilterText(filter, field);
if (StrUtil.isNotBlank(value)) {
return value;
}
}
return null;
}
private String buildWeFishListStatQgcDetailSql() { private String buildWeFishListStatQgcDetailSql() {
return "SELECT " + return "SELECT " +
"dict.FISH_ID AS id, " + "dict.FISH_ID AS id, " +