fix: 全过程过鱼统计总数优化

This commit is contained in:
tangwei 2026-08-10 17:45:18 +08:00
parent 9add0769b9
commit b8e8fc5eaf
5 changed files with 80 additions and 50 deletions

View File

@ -65,26 +65,26 @@ public class SecurityConfig {
.requestMatchers("/system/user/auditUser").permitAll() .requestMatchers("/system/user/auditUser").permitAll()
.requestMatchers("/register/accessToken").permitAll() .requestMatchers("/register/accessToken").permitAll()
.requestMatchers("/api/oauth2/oauth/token").permitAll() .requestMatchers("/api/oauth2/oauth/token").permitAll()
.requestMatchers("/dict/cache/**").permitAll() // .requestMatchers("/dict/cache/**").permitAll()
.requestMatchers("/sys/psbmodulelbb/**").permitAll() // .requestMatchers("/sys/psbmodulelbb/**").permitAll()
.requestMatchers("/base/operationLog/**").permitAll() // .requestMatchers("/base/operationLog/**").permitAll()
// .requestMatchers("/system/**").permitAll() // .requestMatchers("/system/**").permitAll()
.requestMatchers("/qgcExport/**").permitAll() // .requestMatchers("/qgcExport/**").permitAll()
.requestMatchers("/eng/**").permitAll() .requestMatchers("/eng/**").permitAll()
.requestMatchers("/eq/**").permitAll() // .requestMatchers("/eq/**").permitAll()
// .requestMatchers("/env/**").permitAll() // .requestMatchers("/env/**").permitAll()
// .requestMatchers("/warn/**").permitAll() // .requestMatchers("/warn/**").permitAll()
// .requestMatchers("/threedroamb/**").permitAll() // .requestMatchers("/threedroamb/**").permitAll()
// .requestMatchers("/overview/**").permitAll() // .requestMatchers("/overview/**").permitAll()
// .requestMatchers("/wt/**").permitAll() .requestMatchers("/wt/**").permitAll()
// .requestMatchers("/fb/**").permitAll() .requestMatchers("/fb/**").permitAll()
.requestMatchers("/base/**").permitAll() // .requestMatchers("/base/**").permitAll()
// .requestMatchers("/zq/**").permitAll() // .requestMatchers("/zq/**").permitAll()
// .requestMatchers("/wq/**").permitAll() .requestMatchers("/wq/**").permitAll()
// .requestMatchers("/wte/**").permitAll() // .requestMatchers("/wte/**").permitAll()
// .requestMatchers("/vd/**").permitAll() // .requestMatchers("/vd/**").permitAll()
// .requestMatchers("/vap/**").permitAll() // .requestMatchers("/vap/**").permitAll()
// .requestMatchers("/fp/**").permitAll() .requestMatchers("/fp/**").permitAll()
// .requestMatchers("/fpr/**").permitAll() // .requestMatchers("/fpr/**").permitAll()
// .requestMatchers("/fh/**").permitAll() // .requestMatchers("/fh/**").permitAll()
// .requestMatchers("/data/**").permitAll() // .requestMatchers("/data/**").permitAll()

View File

@ -230,4 +230,19 @@ public class EngVmsstbprptVo implements Serializable {
/** 叠梁门式进水口的最大淹没水深 */ /** 叠梁门式进水口的最大淹没水深 */
private BigDecimal dlmmxwdp; private BigDecimal dlmmxwdp;
/** 保护范围 */
private String qxdbhfw;
/** 保护对象 */
private String protobjName;
/** 保护外围长度 */
private BigDecimal qxdbhwwcd;
/** 保护长度 */
private BigDecimal qxdbhcd;
/** 保护河段 */
private String bhhd;
/** 保护河流 */
private String bhhl;
/** 保护核心长度 */
private BigDecimal qxdbhhxcd;
} }

View File

@ -127,7 +127,7 @@ public class FishPassageController {
@GetMapping("/run/qgc/year/GetYearFpStatistics") @GetMapping("/run/qgc/year/GetYearFpStatistics")
@Operation(summary = "全过程过鱼统计总数,根据基地分组") @Operation(summary = "全过程过鱼统计总数,根据基地分组")
public ResponseResult getYearFpStatic(@RequestParam("year") String year) { public ResponseResult getYearFpStatic(@RequestParam("year") String year,@RequestParam(value = "stcd",required = false) String stcd) {
return ResponseResult.successData(fpRunService.getYearFpStatic(year)); return ResponseResult.successData(fpRunService.getYearFpStatic(year,stcd));
} }
} }

View File

@ -31,5 +31,5 @@ public interface FpRunService {
DataSourceResult<FpFishSelectVo> getFishSelect(DataSourceRequest dataSourceRequest); DataSourceResult<FpFishSelectVo> getFishSelect(DataSourceRequest dataSourceRequest);
List<YearFpStatisticsVo> getYearFpStatic(String year); List<YearFpStatisticsVo> getYearFpStatic(String year,String stcd);
} }

View File

@ -309,7 +309,7 @@ public class FpRunServiceImpl implements FpRunService {
String sql = buildQgcFpRunAnalysisDataSql(dataSourceRequest == null ? null : dataSourceRequest.getSort()); String sql = buildQgcFpRunAnalysisDataSql(dataSourceRequest == null ? null : dataSourceRequest.getSort());
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions); Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions);
List<FpRunAnalysisVo> rows = microservicDynamicSQLMapper.pageAllListWithResultType( List<FpRunAnalysisVo> rows = microservicDynamicSQLMapper.pageAllListWithResultType(
page,sql, page, sql,
paramMap, paramMap,
FpRunAnalysisVo.class FpRunAnalysisVo.class
); );
@ -359,11 +359,14 @@ public class FpRunServiceImpl implements FpRunService {
} }
@Override @Override
public List<YearFpStatisticsVo> getYearFpStatic(String year) { public List<YearFpStatisticsVo> getYearFpStatic(String year, String stcd) {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
paramMap.put("year", StrUtil.trim(year)); paramMap.put("year", StrUtil.trim(year));
if (StrUtil.isNotBlank(stcd)) {
paramMap.put("stcd", StrUtil.trim(stcd));
}
List<FpFtpStatisticsVo> rows = microservicDynamicSQLMapper.getAllListWithResultType( List<FpFtpStatisticsVo> rows = microservicDynamicSQLMapper.getAllListWithResultType(
buildYearFpStatisticsSql(), buildYearFpStatisticsSql(null,stcd),
paramMap, paramMap,
FpFtpStatisticsVo.class FpFtpStatisticsVo.class
); );
@ -1134,11 +1137,11 @@ public class FpRunServiceImpl implements FpRunService {
String key = "fbFishRunP" + indexHolder[0]++; String key = "fbFishRunP" + indexHolder[0]++;
paramMap.put(key, text); paramMap.put(key, text);
return switch (operator) { return switch (operator) {
case "eq" -> "t.FLYR = TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')"; case "eq" -> "t.FLYR = TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')";
case "neq" -> "t.FLYR <> TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')"; case "neq" -> "t.FLYR <> TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')";
case "gt" -> "t.FLYR > TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')"; case "gt" -> "t.FLYR > TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')";
case "gte" -> "t.FLYR >= TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')"; case "gte" -> "t.FLYR >= TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')";
case "lt" -> "t.FLYR < TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')"; case "lt" -> "t.FLYR < TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')";
case "lte" -> "t.FLYR <= TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')"; case "lte" -> "t.FLYR <= TO_CHAR(TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')";
default -> ""; default -> "";
}; };
@ -1221,7 +1224,7 @@ public class FpRunServiceImpl implements FpRunService {
} }
private DataSourceResult<FpFpssrlQueryVo> queryQgcFpssrlAiRDetailList(DataSourceRequest dataSourceRequest, private DataSourceResult<FpFpssrlQueryVo> queryQgcFpssrlAiRDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) { DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append("SELECT ") sql.append("SELECT ")
.append(buildQgcFpssrlDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) .append(buildQgcFpssrlDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
@ -1321,7 +1324,7 @@ public class FpRunServiceImpl implements FpRunService {
} }
private DataSourceResult<FpFpssrlQueryVo> queryQgcFpssrlAiRGroupList(DataSourceRequest dataSourceRequest, private DataSourceResult<FpFpssrlQueryVo> queryQgcFpssrlAiRGroupList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) { DataSourceLoadOptionsBase loadOptions) {
List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup(); List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup();
GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup();
@ -2644,36 +2647,48 @@ public class FpRunServiceImpl implements FpRunService {
"WHERE t.STCD = #{map.stcd}"; "WHERE t.STCD = #{map.stcd}";
} }
private String buildYearFpStatisticsSql() { private String buildYearFpStatisticsSql(String year, String stcd) {
return "SELECT eng.BASE_ID AS baseId, " + StringBuilder sql = new StringBuilder();
" hb.BASENAME AS baseName, " +
" a.FTP AS ftp, " +
" COALESCE(fishRv.NAME, relRv.FISH_NAME, fishZy.NAME, relZy.FISH_NAME, a.FTP) AS fishName, " +
" SUM(a.FCNT) AS fcnt " +
"FROM SD_FPSS_R a " +
"INNER JOIN ( " +
" SELECT STCD, MAX(RSTCD) AS RSTCD " +
" FROM SD_FPSS_B_H " +
" GROUP BY STCD " +
") fpss ON fpss.STCD = a.STCD " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fpss.RSTCD " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID " +
"LEFT JOIN SD_FISHDICTORY_RLTN_B relRv ON relRv.FISH_ID = a.FTP " +
" AND relRv.RVCD = eng.HBRVCD " +
" AND relRv.IS_DELETED = 0 " +
"LEFT JOIN SD_FISHDICTORY_B fishRv ON fishRv.ID = NVL(relRv.ZY_FISH_ID, relRv.FISH_ID) " +
" AND fishRv.IS_DELETED = 0 " +
"LEFT JOIN SD_FISHDICTORY_RLTN_B relZy ON relZy.FISH_ID = a.FTP " +
" AND relZy.RVCD = 'ZY' " +
" AND relZy.IS_DELETED = 0 " +
"LEFT JOIN SD_FISHDICTORY_B fishZy ON fishZy.ID = NVL(relZy.ZY_FISH_ID, relZy.FISH_ID) " +
" AND fishZy.IS_DELETED = 0 " +
"WHERE NVL(a.IS_DELETED, 0) = 0 " +
" AND (#{map.year} IS NULL OR #{map.year} = '' OR TO_CHAR(a.STRDT, 'YYYY') = #{map.year}) " +
"GROUP BY eng.BASE_ID, hb.BASENAME, a.FTP, COALESCE(fishRv.NAME, relRv.FISH_NAME, fishZy.NAME, relZy.FISH_NAME, a.FTP) " +
"ORDER BY eng.BASE_ID, a.FTP";
}
sql.append("SELECT eng.BASE_ID AS baseId, ")
.append("hb.BASENAME AS baseName, ")
.append("a.FTP AS ftp, ")
.append("COALESCE(fishRv.NAME, relRv.FISH_NAME, fishZy.NAME, relZy.FISH_NAME, a.FTP) AS fishName, ")
.append("SUM(a.FCNT) AS fcnt ")
.append("FROM SD_FPSS_R a ")
.append("INNER JOIN ( ")
.append(" SELECT STCD, MAX(RSTCD) AS RSTCD ")
.append(" FROM SD_FPSS_B_H ")
.append(" GROUP BY STCD ")
.append(") fpss ON fpss.STCD = a.STCD ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fpss.RSTCD ")
.append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID ")
.append("LEFT JOIN SD_FISHDICTORY_RLTN_B relRv ON relRv.FISH_ID = a.FTP ")
.append(" AND relRv.RVCD = eng.HBRVCD ")
.append(" AND relRv.IS_DELETED = 0 ")
.append("LEFT JOIN SD_FISHDICTORY_B fishRv ON fishRv.ID = NVL(relRv.ZY_FISH_ID, relRv.FISH_ID) ")
.append(" AND fishRv.IS_DELETED = 0 ")
.append("LEFT JOIN SD_FISHDICTORY_RLTN_B relZy ON relZy.FISH_ID = a.FTP ")
.append(" AND relZy.RVCD = 'ZY' ")
.append(" AND relZy.IS_DELETED = 0 ")
.append("LEFT JOIN SD_FISHDICTORY_B fishZy ON fishZy.ID = NVL(relZy.ZY_FISH_ID, relZy.FISH_ID) ")
.append(" AND fishZy.IS_DELETED = 0 ")
.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
// 年份条件用占位符
sql.append("AND (#{map.year} IS NULL OR #{map.year} = '' OR TO_CHAR(a.STRDT, 'YYYY') = #{map.year}) ");
// 动态拼接 STCD 条件
if (stcd != null && !stcd.isEmpty()) {
sql.append("AND a.STCD = #{map.stcd} ");
}
sql.append("GROUP BY eng.BASE_ID, hb.BASENAME, a.FTP, ")
.append("COALESCE(fishRv.NAME, relRv.FISH_NAME, fishZy.NAME, relZy.FISH_NAME, a.FTP) ")
.append("ORDER BY eng.BASE_ID, a.FTP");
return sql.toString();
}
private String buildFpFishSelectSql() { private String buildFpFishSelectSql() {
return "SELECT DISTINCT t.ID AS id, t.NAME AS name " + return "SELECT DISTINCT t.ID AS id, t.NAME AS name " +
"FROM ( " + "FROM ( " +