feat: 环保部-沿程鱼类变化情况柱状图
This commit is contained in:
parent
acaa7344d0
commit
bd11b3ba57
@ -38,4 +38,10 @@ public class WeFishController {
|
||||
public ResponseResult getQgcWeFishStatics(@RequestBody DataSourceRequest 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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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.WeFishStatQgcVo;
|
||||
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishTQgcVo;
|
||||
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<WeStaticsVo> getQgcWeFishStatics(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<WeFishStatQgcVo> getQgcWeFishStatList(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
|
||||
@ -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.WeFishStatQgcVo;
|
||||
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.WeStaticsVo;
|
||||
@ -145,6 +146,52 @@ public class WeFishServiceImpl implements WeFishService {
|
||||
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) {
|
||||
if (groupInfos == null || groupInfos.length == 0) {
|
||||
return baseSql;
|
||||
@ -280,6 +327,86 @@ public class WeFishServiceImpl implements WeFishService {
|
||||
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,
|
||||
String hbrvcd,
|
||||
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) {
|
||||
List<String> values = getWeFishFilterTexts(filter, fieldName);
|
||||
return CollUtil.isEmpty(values) ? null : values.get(0);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user