feat: 环保部-沿程鱼类变化情况柱状图

This commit is contained in:
tangwei 2026-06-26 08:22:51 +08:00
parent acaa7344d0
commit bd11b3ba57
4 changed files with 184 additions and 0 deletions

View File

@ -38,4 +38,10 @@ public class WeFishController {
public ResponseResult getQgcWeFishStatics(@RequestBody DataSourceRequest dataSourceRequest) { public ResponseResult getQgcWeFishStatics(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcWeFishStatics(dataSourceRequest)); return ResponseResult.successData(weFishService.getQgcWeFishStatics(dataSourceRequest));
} }
@PostMapping("/we/fisht/stat/qgc/GetKendoListCust")
@Operation(summary = "环保部-沿程鱼类变化情况柱状图")
public ResponseResult getQgcWeFishStatList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcWeFishStatList(dataSourceRequest));
}
} }

View File

@ -0,0 +1,26 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Map;
@Data
@Schema(description = "全过程沿程鱼类变化情况柱状图")
public class WeFishStatQgcVo {
@Schema(description = "电站编码")
private String stcd;
@Schema(description = "电站名称")
private String stnm;
@Schema(description = "鱼类类型总数")
private Long total;
@Schema(description = "鱼类类型明细key 为鱼类类型value 为鱼种类数量")
private Map<String, Long> detail;
@Schema(description = "排序")
private Integer sort;
}

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.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishTQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishTQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeStaticsVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeStaticsVo;
@ -15,4 +16,6 @@ public interface WeFishService {
DataSourceResult<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest); DataSourceResult<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeStaticsVo> getQgcWeFishStatics(DataSourceRequest dataSourceRequest); DataSourceResult<WeStaticsVo> getQgcWeFishStatics(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishStatQgcVo> getQgcWeFishStatList(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.GroupHelper;
import com.yfd.platform.common.GroupingInfo; 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.WeFishStatQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishTQgcVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeFishTQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeRvcdYearVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeRvcdYearVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeStaticsVo; import com.yfd.platform.qgc_env.wte.entity.vo.WeStaticsVo;
@ -145,6 +146,52 @@ public class WeFishServiceImpl implements WeFishService {
return result; return result;
} }
@Override
public DataSourceResult<WeFishStatQgcVo> getQgcWeFishStatList(DataSourceRequest dataSourceRequest) {
Map<String, Object> paramMap = new HashMap<>();
DataSourceRequest.FilterDescriptor filter = dataSourceRequest == null ? null : dataSourceRequest.getFilter();
String baseId = getFirstWeFishFilterText(filter, "baseId");
String hbrvcd = getFirstWeFishFilterText(filter, "hbrvcd");
String yr = getFirstWeFishFilterText(filter, "yr");
List<String> rstcdList = getWeFishFilterTexts(filter, "rstcd");
String sql = buildWeFishStatQgcSql(baseId, hbrvcd, yr, rstcdList, paramMap);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.getAllList(sql, paramMap);
LinkedHashMap<String, WeFishStatQgcVo> resultMap = new LinkedHashMap<>();
for (Map<String, Object> row : rows) {
String stcd = safeWeFishString(firstPresentWeFishValue(row, "STCD", "stcd"));
if (StrUtil.isBlank(stcd)) {
continue;
}
WeFishStatQgcVo vo = resultMap.computeIfAbsent(stcd, key -> {
WeFishStatQgcVo item = new WeFishStatQgcVo();
item.setStcd(key);
item.setStnm(safeWeFishString(firstPresentWeFishValue(row, "STNM", "stnm")));
item.setSort(toWeFishIntegerValue(firstPresentWeFishValue(row, "SORT", "sort")));
item.setTotal(0L);
item.setDetail(new LinkedHashMap<>());
return item;
});
Long num = toWeFishLongValue(firstPresentWeFishValue(row, "NUM", "num"));
if (num == null) {
num = 0L;
}
String ty = safeWeFishString(firstPresentWeFishValue(row, "TY", "ty"));
if (StrUtil.isNotBlank(ty)) {
vo.getDetail().put(ty, num);
}
vo.setTotal((vo.getTotal() == null ? 0L : vo.getTotal()) + num);
}
DataSourceResult<WeFishStatQgcVo> result = new DataSourceResult<>();
result.setData(new ArrayList<>(resultMap.values()));
result.setTotal((long) resultMap.size());
result.setAggregates(new HashMap<>());
return result;
}
private String buildWeFishQgcGroupSql(String baseSql, GroupingInfo[] groupInfos) { private String buildWeFishQgcGroupSql(String baseSql, GroupingInfo[] groupInfos) {
if (groupInfos == null || groupInfos.length == 0) { if (groupInfos == null || groupInfos.length == 0) {
return baseSql; return baseSql;
@ -280,6 +327,86 @@ public class WeFishServiceImpl implements WeFishService {
return sql.toString(); return sql.toString();
} }
private String buildWeFishStatQgcSql(String baseId,
String hbrvcd,
String yr,
List<String> rstcdList,
Map<String, Object> paramMap) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT t.STCD AS stcd, t.STNM AS stnm, t.NUM AS num, t.TY AS ty, t2.SORT AS sort ")
.append("FROM (")
.append("SELECT section.RSTCD AS STCD, ")
.append("eng.ENNM AS STNM, ")
.append("COUNT(DISTINCT fish.FTP) AS NUM, ")
.append("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 AS TY ")
.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 eng.STCD = section.RSTCD ")
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
.append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
.append("WHERE NVL(section.USFL, 0) = 1 ");
if (StrUtil.isNotBlank(baseId)) {
paramMap.put("weFishStatBaseId", baseId);
sql.append("AND section.BASE_ID = #{map.weFishStatBaseId} ");
}
if (StrUtil.isNotBlank(hbrvcd)) {
paramMap.put("weFishStatHbrvcd", hbrvcd);
sql.append("AND section.HBRVCD = #{map.weFishStatHbrvcd} ");
}
if (StrUtil.isNotBlank(yr)) {
paramMap.put("weFishStatYr", yr);
sql.append("AND TO_CHAR(we.TM, 'yyyy') = #{map.weFishStatYr} ");
}
if (CollUtil.isNotEmpty(rstcdList)) {
List<String> placeholders = new ArrayList<>();
int index = 0;
for (String rstcd : rstcdList) {
if (StrUtil.isBlank(rstcd)) {
continue;
}
String key = "weFishStatRstcd" + index++;
paramMap.put(key, rstcd);
placeholders.add("#{map." + key + "}");
}
if (CollUtil.isNotEmpty(placeholders)) {
sql.append("AND section.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
}
}
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 IS NOT NULL ")
.append("GROUP BY section.RSTCD, eng.ENNM, 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")
.append(") t ")
.append("INNER JOIN (")
.append("SELECT det.STCD, det.SORT, cfg.RVCD ")
.append("FROM MS_ALONG_B cfg ")
.append("INNER JOIN MS_ALONGDET_B det ON cfg.ID = det.ALONG_ID ")
.append("WHERE det.STTP = 'ENG' ")
.append(" AND cfg.CODE = 'common' ")
.append(" AND NVL(det.IS_DELETED, 0) = 0 ")
.append(" AND NVL(cfg.IS_DELETED, 0) = 0")
.append(") t2 ON t.STCD = t2.STCD ")
.append("ORDER BY t2.SORT ASC NULLS LAST, t.STCD ASC, t.TY ASC");
return sql.toString();
}
private String buildWeFishStaticsSql(String baseId, private String buildWeFishStaticsSql(String baseId,
String hbrvcd, String hbrvcd,
String yr, String yr,
@ -687,6 +814,28 @@ public class WeFishServiceImpl implements WeFishService {
} }
} }
private Integer toWeFishIntegerValue(Object value) {
if (value == null) {
return null;
}
if (value instanceof Number number) {
return number.intValue();
}
try {
return Integer.parseInt(String.valueOf(value).trim());
} catch (Exception ex) {
return null;
}
}
private String safeWeFishString(Object value) {
if (value == null) {
return null;
}
String text = String.valueOf(value).trim();
return StrUtil.isBlank(text) ? null : text;
}
private String getFirstWeFishFilterText(DataSourceRequest.FilterDescriptor filter, String fieldName) { private String getFirstWeFishFilterText(DataSourceRequest.FilterDescriptor filter, String fieldName) {
List<String> values = getWeFishFilterTexts(filter, fieldName); List<String> values = getWeFishFilterTexts(filter, fieldName);
return CollUtil.isEmpty(values) ? null : values.get(0); return CollUtil.isEmpty(values) ? null : values.get(0);