feat: 环保部-水生生态调查二级页面
This commit is contained in:
parent
11f45d65e0
commit
805dab9c10
@ -75,6 +75,12 @@ public class WeFishController {
|
|||||||
return ResponseResult.successData(weFishService.getWeCompareBarList(dataSourceRequest));
|
return ResponseResult.successData(weFishService.getWeCompareBarList(dataSourceRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/we/fishPage/qgc/GetKendoListCust")
|
||||||
|
@Operation(summary = "环保部-水生生态调查二级页面")
|
||||||
|
public ResponseResult getQgcWeFishPageList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(weFishService.getQgcWeFishPageList(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/base/evnmAutoMonitor/GetKendoListCust")
|
@PostMapping("/base/evnmAutoMonitor/GetKendoListCust")
|
||||||
@Operation(summary = "环保自动监测开展情况")
|
@Operation(summary = "环保自动监测开展情况")
|
||||||
public ResponseResult getEnvmAutoMonitorList(@RequestBody DataSourceRequest dataSourceRequest) {
|
public ResponseResult getEnvmAutoMonitorList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
|||||||
@ -0,0 +1,37 @@
|
|||||||
|
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.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@Schema(description = "环保部-水生生态调查二级页面数据")
|
||||||
|
public class WeFishPageQgcVo {
|
||||||
|
|
||||||
|
@Schema(description = "鱼类名称")
|
||||||
|
private String ftp;
|
||||||
|
|
||||||
|
@Schema(description = "科属")
|
||||||
|
private String genus;
|
||||||
|
|
||||||
|
@Schema(description = "开始年份鱼类总量")
|
||||||
|
private Integer startFtpCnt;
|
||||||
|
|
||||||
|
@Schema(description = "开始年份总量")
|
||||||
|
private Integer startCnt;
|
||||||
|
|
||||||
|
@Schema(description = "开始年份占比")
|
||||||
|
private BigDecimal startYear;
|
||||||
|
|
||||||
|
@Schema(description = "结束年份鱼类总量")
|
||||||
|
private Integer endFtpCnt;
|
||||||
|
|
||||||
|
@Schema(description = "结束年份总量")
|
||||||
|
private Integer endCnt;
|
||||||
|
|
||||||
|
@Schema(description = "结束年份占比")
|
||||||
|
private BigDecimal endYear;
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
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 WeFishPageTableVo {
|
||||||
|
|
||||||
|
@Schema(description = "表头")
|
||||||
|
private List<WeCompareBarHeadColumnVo> columns;
|
||||||
|
|
||||||
|
@Schema(description = "表格数据")
|
||||||
|
private Object dataSource;
|
||||||
|
|
||||||
|
@Schema(description = "总数")
|
||||||
|
private Long total;
|
||||||
|
}
|
||||||
@ -9,6 +9,7 @@ import com.yfd.platform.qgc_env.wte.entity.vo.WeEnvmAutoMonitorVo;
|
|||||||
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishDetailVo;
|
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishDetailVo;
|
||||||
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishHbbQgcDetailVo;
|
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishHbbQgcDetailVo;
|
||||||
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.WeFishPageTableVo;
|
||||||
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;
|
||||||
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatTabVo;
|
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishStatTabVo;
|
||||||
@ -43,6 +44,8 @@ public interface WeFishService {
|
|||||||
|
|
||||||
DataSourceResult<WeCompareBarTableVo> getWeCompareBarList(DataSourceRequest dataSourceRequest);
|
DataSourceResult<WeCompareBarTableVo> getWeCompareBarList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
DataSourceResult<WeFishPageTableVo> getQgcWeFishPageList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
DataSourceResult<WeEnvmAutoMonitorVo> getEnvmAutoMonitorList(DataSourceRequest dataSourceRequest);
|
DataSourceResult<WeEnvmAutoMonitorVo> getEnvmAutoMonitorList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
DataSourceResult<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest);
|
DataSourceResult<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest);
|
||||||
|
|||||||
@ -18,6 +18,8 @@ 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.WeFishDetailVo;
|
||||||
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishHbbQgcDetailVo;
|
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishHbbQgcDetailVo;
|
||||||
|
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPageQgcVo;
|
||||||
|
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPageTableVo;
|
||||||
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;
|
||||||
@ -480,6 +482,136 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult<WeFishPageTableVo> getQgcWeFishPageList(DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||||
|
DataSourceRequest.FilterDescriptor filter = dataSourceRequest == null ? null : dataSourceRequest.getFilter();
|
||||||
|
|
||||||
|
String startYear = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "startYear");
|
||||||
|
String endYear = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "endYear");
|
||||||
|
if (StrUtil.isBlank(startYear)) {
|
||||||
|
throw new IllegalArgumentException("开始年份不能为空!");
|
||||||
|
}
|
||||||
|
if (StrUtil.isBlank(endYear)) {
|
||||||
|
throw new IllegalArgumentException("结束年份(endYear)不能为空!");
|
||||||
|
}
|
||||||
|
|
||||||
|
String baseId = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "baseId");
|
||||||
|
String hbrvcd = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "hbrvcd");
|
||||||
|
String rstcd = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "rstcd");
|
||||||
|
String ftp = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "ftp");
|
||||||
|
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("startYear", startYear);
|
||||||
|
paramMap.put("endYear", endYear);
|
||||||
|
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ftp, genus, startFtpCnt, startCnt, startYear, endFtpCnt, endCnt, endYear ")
|
||||||
|
.append("FROM (")
|
||||||
|
.append("SELECT dict.NAME AS ftp, ")
|
||||||
|
.append("CONCAT(CONCAT(dict.FAMILY,'-'),dict.GENUS) as genus, ")
|
||||||
|
.append("agg.startYear AS startYear, agg.endYear AS endYear, ")
|
||||||
|
.append("agg.startCnt AS startCnt, agg.startFtpCnt AS startFtpCnt, ")
|
||||||
|
.append("agg.endCnt AS endCnt, agg.endFtpCnt AS endFtpCnt ")
|
||||||
|
.append("FROM (")
|
||||||
|
.append("SELECT ftp, hbrvcd, ")
|
||||||
|
.append("ROUND(MAX(startYear), 2) AS startYear, ")
|
||||||
|
.append("ROUND(MAX(endYear), 2) AS endYear, ")
|
||||||
|
.append("MAX(startCnt) AS startCnt, ")
|
||||||
|
.append("MAX(startFtpCnt) AS startFtpCnt, ")
|
||||||
|
.append("MAX(endCnt) AS endCnt, ")
|
||||||
|
.append("MAX(endFtpCnt) AS endFtpCnt ")
|
||||||
|
.append("FROM (")
|
||||||
|
.append("SELECT fishAgg.ftp AS ftp, fishAgg.hbrvcd AS hbrvcd, fishAgg.fcnt AS fcnt, ")
|
||||||
|
.append("CASE WHEN fishAgg.yr = #{map.startYear} ")
|
||||||
|
.append("THEN CASE WHEN NVL(totalAgg.fcnt, 0) = 0 THEN 0 ELSE 100 * fishAgg.fcnt / totalAgg.fcnt END END AS startYear, ")
|
||||||
|
.append("CASE WHEN fishAgg.yr = #{map.endYear} ")
|
||||||
|
.append("THEN CASE WHEN NVL(totalAgg.fcnt, 0) = 0 THEN 0 ELSE 100 * fishAgg.fcnt / totalAgg.fcnt END END AS endYear, ")
|
||||||
|
.append("CASE WHEN fishAgg.yr = #{map.startYear} THEN fishAgg.fcnt END AS startFtpCnt, ")
|
||||||
|
.append("CASE WHEN fishAgg.yr = #{map.startYear} THEN totalAgg.fcnt END AS startCnt, ")
|
||||||
|
.append("CASE WHEN fishAgg.yr = #{map.endYear} THEN fishAgg.fcnt END AS endFtpCnt, ")
|
||||||
|
.append("CASE WHEN fishAgg.yr = #{map.endYear} THEN totalAgg.fcnt END AS endCnt ")
|
||||||
|
.append("FROM (")
|
||||||
|
.append("SELECT fish.FTP AS ftp, section.HBRVCD AS hbrvcd, SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ")
|
||||||
|
.append("FROM SD_WE_R we ")
|
||||||
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD ")
|
||||||
|
.append("INNER JOIN V_SD_FISHDICTORY_B dictFilter ON dictFilter.FISH_ID = fish.FTP ")
|
||||||
|
.append(" AND (section.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ")
|
||||||
|
.append("WHERE NVL(we.STATUS, 1) = 1 ")
|
||||||
|
.append("AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("AND TO_CHAR(we.TM, 'YYYY') IN (#{map.startYear}, #{map.endYear}) ");
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
paramMap.put("fishPageBaseId", baseId);
|
||||||
|
sql.append("AND section.BASE_ID = #{map.fishPageBaseId} ");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
|
paramMap.put("fishPageHbrvcd", hbrvcd);
|
||||||
|
sql.append("AND section.HBRVCD = #{map.fishPageHbrvcd} ");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(rstcd)) {
|
||||||
|
paramMap.put("fishPageRstcd", rstcd);
|
||||||
|
sql.append("AND section.RSTCD = #{map.fishPageRstcd} ");
|
||||||
|
}
|
||||||
|
sql.append("GROUP BY fish.FTP, section.HBRVCD, TO_CHAR(we.TM, 'YYYY') ")
|
||||||
|
.append(") fishAgg ")
|
||||||
|
.append("LEFT JOIN (")
|
||||||
|
.append("SELECT SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ")
|
||||||
|
.append("FROM SD_WE_R we ")
|
||||||
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD ")
|
||||||
|
.append("INNER JOIN V_SD_FISHDICTORY_B dictFilter ON dictFilter.FISH_ID = fish.FTP ")
|
||||||
|
.append(" AND (section.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ")
|
||||||
|
.append("WHERE NVL(we.STATUS, 1) = 1 ")
|
||||||
|
.append("AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("AND TO_CHAR(we.TM, 'YYYY') IN (#{map.startYear}, #{map.endYear}) ");
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
sql.append("AND section.BASE_ID = #{map.fishPageBaseId} ");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
|
sql.append("AND section.HBRVCD = #{map.fishPageHbrvcd} ");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(rstcd)) {
|
||||||
|
sql.append("AND section.RSTCD = #{map.fishPageRstcd} ");
|
||||||
|
}
|
||||||
|
sql.append("GROUP BY TO_CHAR(we.TM, 'YYYY') ")
|
||||||
|
.append(") totalAgg ON totalAgg.yr = fishAgg.yr ")
|
||||||
|
.append(") temp ")
|
||||||
|
.append("GROUP BY ftp, hbrvcd ")
|
||||||
|
.append(") agg ")
|
||||||
|
.append("INNER JOIN V_SD_FISHDICTORY_B dict ON dict.FISH_ID = agg.ftp ")
|
||||||
|
.append(" AND (agg.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY')")
|
||||||
|
.append(") r WHERE 1 = 1 ");
|
||||||
|
if (StrUtil.isNotBlank(ftp)) {
|
||||||
|
paramMap.put("fishPageFtp", "%" + ftp.trim() + "%");
|
||||||
|
sql.append("AND r.ftp LIKE #{map.fishPageFtp} ");
|
||||||
|
}
|
||||||
|
sql.append(buildWeFishPageOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
|
||||||
|
|
||||||
|
Page<?> page = loadOptions == null ? null
|
||||||
|
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||||
|
List<WeFishPageQgcVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
|
||||||
|
page,
|
||||||
|
sql.toString(),
|
||||||
|
paramMap,
|
||||||
|
WeFishPageQgcVo.class
|
||||||
|
);
|
||||||
|
long total = page != null ? page.getTotal() : list.size();
|
||||||
|
|
||||||
|
WeFishPageTableVo tableVo = new WeFishPageTableVo()
|
||||||
|
.setColumns(buildWeFishPageColumns(startYear, endYear))
|
||||||
|
.setDataSource(list)
|
||||||
|
.setTotal(total);
|
||||||
|
|
||||||
|
DataSourceResult<WeFishPageTableVo> result = new DataSourceResult<>();
|
||||||
|
result.setData(Collections.singletonList(tableVo));
|
||||||
|
result.setTotal(total);
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataSourceResult<WeEnvmAutoMonitorVo> getEnvmAutoMonitorList(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult<WeEnvmAutoMonitorVo> getEnvmAutoMonitorList(DataSourceRequest dataSourceRequest) {
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||||
@ -1655,6 +1787,17 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
return columns;
|
return columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<WeCompareBarHeadColumnVo> buildWeFishPageColumns(String startYear, String endYear) {
|
||||||
|
List<WeCompareBarHeadColumnVo> columns = new ArrayList<>();
|
||||||
|
columns.add(new WeCompareBarHeadColumnVo("genus", "科属", true, "genus", true, new ArrayList<>()));
|
||||||
|
columns.add(new WeCompareBarHeadColumnVo("ftp", "鱼类名称", true, "ftp", false, new ArrayList<>()));
|
||||||
|
columns.add(new WeCompareBarHeadColumnVo("startFtpCnt", startYear + "鱼类总量(尾)", true, "startFtpCnt", false, new ArrayList<>()));
|
||||||
|
columns.add(new WeCompareBarHeadColumnVo("startYear", startYear + "占比(%)", true, "startYear", false, new ArrayList<>()));
|
||||||
|
columns.add(new WeCompareBarHeadColumnVo("endFtpCnt", endYear + "鱼类总量(尾)", true, "endFtpCnt", false, new ArrayList<>()));
|
||||||
|
columns.add(new WeCompareBarHeadColumnVo("endYear", endYear + "占比(%)", true, "endYear", false, new ArrayList<>()));
|
||||||
|
return columns;
|
||||||
|
}
|
||||||
|
|
||||||
private String firstNonBlankWeFishFilter(DataSourceRequest.FilterDescriptor filter, String... fields) {
|
private String firstNonBlankWeFishFilter(DataSourceRequest.FilterDescriptor filter, String... fields) {
|
||||||
if (fields == null) {
|
if (fields == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -3328,6 +3471,38 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
return " ORDER BY " + String.join(", ", orderByParts);
|
return " ORDER BY " + String.join(", ", orderByParts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildWeFishPageOrderBySql(List<DataSourceRequest.SortDescriptor> sorts) {
|
||||||
|
if (CollUtil.isEmpty(sorts)) {
|
||||||
|
return " ORDER BY r.ftp ASC";
|
||||||
|
}
|
||||||
|
Map<String, String> columnMap = new LinkedHashMap<>();
|
||||||
|
columnMap.put("ftp", "r.ftp");
|
||||||
|
columnMap.put("genus", "r.genus");
|
||||||
|
columnMap.put("startFtpCnt", "r.startFtpCnt");
|
||||||
|
columnMap.put("startCnt", "r.startCnt");
|
||||||
|
columnMap.put("startYear", "r.startYear");
|
||||||
|
columnMap.put("endFtpCnt", "r.endFtpCnt");
|
||||||
|
columnMap.put("endCnt", "r.endCnt");
|
||||||
|
columnMap.put("endYear", "r.endYear");
|
||||||
|
|
||||||
|
List<String> orderByParts = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.SortDescriptor sort : sorts) {
|
||||||
|
if (sort == null || StrUtil.isBlank(sort.getField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = columnMap.get(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 " ORDER BY r.ftp ASC";
|
||||||
|
}
|
||||||
|
return " ORDER BY " + String.join(", ", orderByParts);
|
||||||
|
}
|
||||||
|
|
||||||
private String buildWeStaticsSecondSelectSql(List<String> selectFields) {
|
private String buildWeStaticsSecondSelectSql(List<String> selectFields) {
|
||||||
Map<String, String> columns = new LinkedHashMap<>();
|
Map<String, String> columns = new LinkedHashMap<>();
|
||||||
columns.put("stcd", "r.stcd AS stcd");
|
columns.put("stcd", "r.stcd AS stcd");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user