feat: 沿程鱼类变化情况柱状图

This commit is contained in:
tangwei 2026-06-29 17:27:50 +08:00
parent b1b7cacef7
commit 435452a79c
3 changed files with 138 additions and 0 deletions

View File

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

View File

@ -39,6 +39,8 @@ public interface WeFishService {
DataSourceResult<WeFishStatQgcVo> getQgcWeFishStatList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishStatQgcVo> getWeFishStatList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishListStatQgcVo> getQgcFishListStat(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishPointQgcVo> getQgcWeFishPoint(DataSourceRequest dataSourceRequest);

View File

@ -424,6 +424,21 @@ public class WeFishServiceImpl implements WeFishService {
return result;
}
@Override
public DataSourceResult<WeFishStatQgcVo> getWeFishStatList(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 = buildWeFishStatSql(baseId, hbrvcd, yr, rstcdList, paramMap);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.getAllList(sql, paramMap);
return buildWeFishStatResult(rows);
}
@Override
public DataSourceResult<WeFishStatQgcVo> getQgcWeFishStatList(DataSourceRequest dataSourceRequest) {
Map<String, Object> paramMap = new HashMap<>();
@ -792,6 +807,121 @@ public class WeFishServiceImpl implements WeFishService {
return sql.toString();
}
private String buildWeFishStatSql(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("TO_CHAR(we.TM, 'yyyy') AS YR ")
.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 SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ")
.append(" AND NVL(dict.IS_DELETED, 0) = 0 ")
.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} ");
}
sql.append("AND section.RSTCD IS NOT NULL ")
.append("AND dict.SPEC_ORIGIN IS NOT NULL ")
.append("GROUP BY section.RSTCD, eng.ENNM, ")
.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, ")
.append("TO_CHAR(we.TM, 'yyyy') ")
.append(") t ")
.append("INNER JOIN (")
.append("SELECT det.STCD, det.SORT ")
.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("WHERE t.TY IS NOT NULL ");
if (StrUtil.isNotBlank(yr)) {
paramMap.put("weFishStatYr", yr);
sql.append("AND t.YR = #{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 t.STCD IN (").append(String.join(", ", placeholders)).append(") ");
}
}
sql.append("ORDER BY t2.SORT ASC NULLS LAST");
return sql.toString();
}
private DataSourceResult<WeFishStatQgcVo> buildWeFishStatResult(List<Map<String, Object>> rows) {
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 buildWeFishListStatQgcDetailSql() {
return "SELECT " +
"dict.FISH_ID AS id, " +