fix: 过鱼设施综合分析优化
This commit is contained in:
parent
77d92b18d2
commit
ed71491806
@ -278,14 +278,24 @@ public class FpRunServiceImpl implements FpRunService {
|
|||||||
stationParamMap
|
stationParamMap
|
||||||
);
|
);
|
||||||
String rstcd = stationContext == null ? null : Convert.toStr(stationContext.get("rstcd"), null);
|
String rstcd = stationContext == null ? null : Convert.toStr(stationContext.get("rstcd"), null);
|
||||||
// String hbrvcd = stationContext == null ? null : Convert.toStr(stationContext.get("hbrvcd"), null);
|
String hbrvcd = stationContext == null ? null : Convert.toStr(stationContext.get("hbrvcd"), null);
|
||||||
String rvcd = stationContext == null ? null : Convert.toStr(stationContext.get("rvcd"), null);
|
String rvcd = stationContext == null ? null : Convert.toStr(stationContext.get("rvcd"), null);
|
||||||
|
// 按旧平台逻辑:根据 MWAY(1=人工SD_FPSS_R,2=自动SD_FPSSRL_R)选择过鱼数据表
|
||||||
|
Integer mway = stationContext == null ? null : Convert.toInt(stationContext.get("mway"), null);
|
||||||
|
String tableName;
|
||||||
|
if (mway != null && mway == 1) {
|
||||||
|
tableName = "SD_FPSS_R";
|
||||||
|
} else if (mway != null && mway == 2) {
|
||||||
|
tableName = "SD_FPSSRL_R";
|
||||||
|
} else {
|
||||||
|
throw new BizException("未知的过鱼设施监测方式(1=人工,2=自动).");
|
||||||
|
}
|
||||||
String wtrvStcd = null;
|
String wtrvStcd = null;
|
||||||
String wqStcd = null;
|
String wqStcd = null;
|
||||||
if (StrUtil.isNotBlank(rstcd) && StrUtil.isNotBlank(rvcd)) {
|
if (StrUtil.isNotBlank(rstcd) && StrUtil.isNotBlank(hbrvcd)) {
|
||||||
Map<String, Object> alongParamMap = new HashMap<>();
|
Map<String, Object> alongParamMap = new HashMap<>();
|
||||||
alongParamMap.put("rstcd", rstcd);
|
alongParamMap.put("rstcd", rstcd);
|
||||||
alongParamMap.put("rvcd", rvcd);
|
alongParamMap.put("rvcd", hbrvcd);
|
||||||
List<Map<String, Object>> alongRows = microservicDynamicSQLMapper.pageAllList(
|
List<Map<String, Object>> alongRows = microservicDynamicSQLMapper.pageAllList(
|
||||||
null,
|
null,
|
||||||
buildQgcFpRunAnalysisAlongSql(),
|
buildQgcFpRunAnalysisAlongSql(),
|
||||||
@ -308,20 +318,24 @@ public class FpRunServiceImpl implements FpRunService {
|
|||||||
paramMap.put("startTime", StrUtil.trim(tmArr[0]));
|
paramMap.put("startTime", StrUtil.trim(tmArr[0]));
|
||||||
paramMap.put("endTime", StrUtil.trim(tmArr[1]));
|
paramMap.put("endTime", StrUtil.trim(tmArr[1]));
|
||||||
paramMap.put("rstcd", rstcd);
|
paramMap.put("rstcd", rstcd);
|
||||||
paramMap.put("hbrvcd", rvcd);
|
paramMap.put("hbrvcd", hbrvcd);
|
||||||
paramMap.put("wtrvStcd", wtrvStcd);
|
paramMap.put("wtrvStcd", wtrvStcd);
|
||||||
paramMap.put("wqStcd", wqStcd);
|
paramMap.put("wqStcd", wqStcd);
|
||||||
String sql = buildQgcFpRunAnalysisDataSql(dataSourceRequest == null ? null : dataSourceRequest.getSort());
|
String sql = buildQgcFpRunAnalysisDataSql(
|
||||||
|
dataSourceRequest == null ? null : dataSourceRequest.getSort(), tableName);
|
||||||
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
|
||||||
);
|
);
|
||||||
|
|
||||||
long total = page != null ? page.getTotal() : rows.size();
|
long total = page != null ? page.getTotal() : rows.size();
|
||||||
|
String ftpName =null;
|
||||||
|
if(rows!=null&&!rows.isEmpty()){
|
||||||
|
ftpName = rows.stream().filter(r->StrUtil.isNotBlank(r.getFtp())).findFirst().get().getFtp();
|
||||||
|
}
|
||||||
FpRunAnalysisTableVo tableVo = new FpRunAnalysisTableVo()
|
FpRunAnalysisTableVo tableVo = new FpRunAnalysisTableVo()
|
||||||
.setColumns(buildQgcFpRunAnalysisColumns(StrUtil.trim(ftp)))
|
.setColumns(buildQgcFpRunAnalysisColumns(StrUtil.trim(ftpName)))
|
||||||
.setDataSource(rows)
|
.setDataSource(rows)
|
||||||
.setTotal(total);
|
.setTotal(total);
|
||||||
result.setData(Collections.singletonList(tableVo));
|
result.setData(Collections.singletonList(tableVo));
|
||||||
@ -2532,10 +2546,10 @@ public class FpRunServiceImpl implements FpRunService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String buildQgcFpRunAnalysisStationSql() {
|
private String buildQgcFpRunAnalysisStationSql() {
|
||||||
return "SELECT fp.RSTCD AS \"rstcd\",eng.RVCD AS \"rvcd\", eng.HBRVCD AS \"hbrvcd\" " +
|
return "SELECT RSTCD AS \"rstcd\", HBRVCD AS \"hbrvcd\", RVCD AS \"rvcd\", MWAY AS \"mway\" " +
|
||||||
"FROM SD_FPSS_B_H fp " +
|
"FROM V_MS_STBPRP_T " +
|
||||||
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
"WHERE STCD = #{map.stcd} " +
|
||||||
"WHERE fp.STCD = #{map.stcd} " +
|
"AND NVL(IS_DELETED, 0) = 0 " +
|
||||||
"AND ROWNUM = 1";
|
"AND ROWNUM = 1";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2552,7 +2566,7 @@ public class FpRunServiceImpl implements FpRunService {
|
|||||||
"ORDER BY NVL(t2.SORT, 999999), t2.STCD";
|
"ORDER BY NVL(t2.SORT, 999999), t2.STCD";
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildQgcFpRunAnalysisDataSql(List<DataSourceRequest.SortDescriptor> sortList) {
|
private String buildQgcFpRunAnalysisDataSql(List<DataSourceRequest.SortDescriptor> sortList, String tableName) {
|
||||||
return "SELECT t.DT AS dt, " +
|
return "SELECT t.DT AS dt, " +
|
||||||
" t.FTP AS ftp, " +
|
" t.FTP AS ftp, " +
|
||||||
" t.FCNT AS fcnt, " +
|
" t.FCNT AS fcnt, " +
|
||||||
@ -2576,15 +2590,15 @@ public class FpRunServiceImpl implements FpRunService {
|
|||||||
" t4.TN AS TN, " +
|
" t4.TN AS TN, " +
|
||||||
" t5.DZ AS DZ, " +
|
" t5.DZ AS DZ, " +
|
||||||
" t5.RZ AS RZ, " +
|
" t5.RZ AS RZ, " +
|
||||||
" t5.QI AS QI, " +
|
" t6.QI AS QI, " +
|
||||||
" t5.QO AS QO " +
|
" t6.QO AS QO " +
|
||||||
" FROM ( " +
|
" FROM ( " +
|
||||||
" SELECT TO_CHAR(TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') + LEVEL - 1, 'YYYY-MM-DD') AS DT " +
|
" SELECT TO_CHAR(TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') + LEVEL - 1, 'YYYY-MM-DD') AS DT " +
|
||||||
" FROM DUAL " +
|
" FROM DUAL " +
|
||||||
" CONNECT BY LEVEL <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') - TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') + 1 " +
|
" CONNECT BY LEVEL <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') - TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') + 1 " +
|
||||||
" ) t1 " +
|
" ) t1 " +
|
||||||
" LEFT JOIN ( " +
|
" LEFT JOIN ( " +
|
||||||
buildQgcFpRunAnalysisFishSql() +
|
buildQgcFpRunAnalysisFishSql(tableName) +
|
||||||
" ) t2 ON t1.DT = t2.DT " +
|
" ) t2 ON t1.DT = t2.DT " +
|
||||||
" LEFT JOIN ( " +
|
" LEFT JOIN ( " +
|
||||||
buildQgcFpRunAnalysisWtSql() +
|
buildQgcFpRunAnalysisWtSql() +
|
||||||
@ -2593,19 +2607,22 @@ public class FpRunServiceImpl implements FpRunService {
|
|||||||
buildQgcFpRunAnalysisWqSql() +
|
buildQgcFpRunAnalysisWqSql() +
|
||||||
" ) t4 ON t1.DT = t4.DT " +
|
" ) t4 ON t1.DT = t4.DT " +
|
||||||
" LEFT JOIN ( " +
|
" LEFT JOIN ( " +
|
||||||
buildQgcFpRunAnalysisEngSql() +
|
buildQgcFpRunAnalysisDzRzSql() +
|
||||||
" ) t5 ON t1.DT = t5.DT " +
|
" ) t5 ON t1.DT = t5.DT " +
|
||||||
|
" LEFT JOIN ( " +
|
||||||
|
buildQgcFpRunAnalysisQiQoSql() +
|
||||||
|
" ) t6 ON t1.DT = t6.DT " +
|
||||||
") t " +
|
") t " +
|
||||||
"WHERE (t.FTP IS NOT NULL OR t.FCNT IS NOT NULL OR t.WT IS NOT NULL OR t.CODCR IS NOT NULL OR t.NH3N IS NOT NULL OR t.TP IS NOT NULL OR t.TN IS NOT NULL OR t.DZ IS NOT NULL OR t.RZ IS NOT NULL OR t.QI IS NOT NULL OR t.QO IS NOT NULL) " +
|
"WHERE (t.FTP IS NOT NULL OR t.FCNT IS NOT NULL OR t.WT IS NOT NULL OR t.CODCR IS NOT NULL OR t.NH3N IS NOT NULL OR t.TP IS NOT NULL OR t.TN IS NOT NULL OR t.DZ IS NOT NULL OR t.RZ IS NOT NULL OR t.QI IS NOT NULL OR t.QO IS NOT NULL) " +
|
||||||
buildQgcFpRunAnalysisOrderBySql(sortList);
|
buildQgcFpRunAnalysisOrderBySql(sortList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildQgcFpRunAnalysisFishSql() {
|
private String buildQgcFpRunAnalysisFishSql(String tableName) {
|
||||||
return "SELECT t.DT AS DT, t.FTP AS FTP, t.FCNT AS FCNT FROM ( " +
|
//按旧平台逻辑:根据 MWAY 选定的表决定人工/自动过鱼查询
|
||||||
buildQgcFpRunAnalysisManualFishSql() +
|
if ("SD_FPSSRL_R".equals(tableName)) {
|
||||||
" UNION ALL " +
|
return buildQgcFpRunAnalysisAutoFishSql();
|
||||||
buildQgcFpRunAnalysisAutoFishSql() +
|
}
|
||||||
" ) t";
|
return buildQgcFpRunAnalysisManualFishSql();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildQgcFpRunAnalysisManualFishSql() {
|
private String buildQgcFpRunAnalysisManualFishSql() {
|
||||||
@ -2613,42 +2630,34 @@ public class FpRunServiceImpl implements FpRunService {
|
|||||||
" src.FTP AS FTP, " +
|
" src.FTP AS FTP, " +
|
||||||
" SUM(src.FCNT) AS FCNT " +
|
" SUM(src.FCNT) AS FCNT " +
|
||||||
"FROM ( " +
|
"FROM ( " +
|
||||||
" SELECT t.STRDT AS STRDT, " +
|
" SELECT a.STRDT AS STRDT, a.FCNT AS FCNT, b.NAME AS FTP " +
|
||||||
" t.FCNT AS FCNT, " +
|
" FROM SD_FPSS_R a " +
|
||||||
" COALESCE(fishRv.NAME, relRv.FISH_NAME, fishZy.NAME, relZy.FISH_NAME, fishDirect.NAME, t.FTP) AS FTP " +
|
" LEFT JOIN V_SD_FISHDICTORY_B b ON a.FTP = b.FISH_ID AND (b.RVCD = #{map.hbrvcd} OR b.RVCD = 'ZY') " +
|
||||||
" FROM SD_FPSS_R t " +
|
" WHERE a.STCD = #{map.stcd} " +
|
||||||
" INNER JOIN SD_FPSS_B_H fp ON fp.STCD = t.STCD " +
|
" AND b.ZY_FISH_ID = #{map.ftp} " +
|
||||||
" LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
" AND a.STRDT >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
||||||
" LEFT JOIN SD_FISHDICTORY_RLTN_B relRv ON relRv.FISH_ID = t.FTP " +
|
" AND a.STRDT <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
||||||
" AND relRv.RVCD = eng.HBRVCD " +
|
" AND NVL(a.IS_DELETED, 0) = 0 " +
|
||||||
" AND NVL(relRv.IS_DELETED, 0) = 0 " +
|
|
||||||
" LEFT JOIN SD_FISHDICTORY_B fishRv ON fishRv.ID = relRv.ZY_FISH_ID " +
|
|
||||||
" AND NVL(fishRv.IS_DELETED, 0) = 0 " +
|
|
||||||
" AND NVL(fishRv.ENABLE, 1) = 1 " +
|
|
||||||
" LEFT JOIN SD_FISHDICTORY_RLTN_B relZy ON relZy.FISH_ID = t.FTP " +
|
|
||||||
" AND relZy.RVCD = 'ZY' " +
|
|
||||||
" AND NVL(relZy.IS_DELETED, 0) = 0 " +
|
|
||||||
" LEFT JOIN SD_FISHDICTORY_B fishZy ON fishZy.ID = relZy.ZY_FISH_ID " +
|
|
||||||
" AND NVL(fishZy.IS_DELETED, 0) = 0 " +
|
|
||||||
" AND NVL(fishZy.ENABLE, 1) = 1 " +
|
|
||||||
" LEFT JOIN SD_FISHDICTORY_B fishDirect ON fishDirect.ID = t.FTP " +
|
|
||||||
" AND NVL(fishDirect.IS_DELETED, 0) = 0 " +
|
|
||||||
" AND NVL(fishDirect.ENABLE, 1) = 1 " +
|
|
||||||
" WHERE t.STCD = #{map.stcd} " +
|
|
||||||
" AND t.STRDT >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
|
||||||
" AND t.STRDT <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
|
||||||
" AND NVL(t.IS_DELETED, 0) = 0 " +
|
|
||||||
") src " +
|
") src " +
|
||||||
"WHERE src.FTP = #{map.ftp} " +
|
|
||||||
"GROUP BY TO_CHAR(src.STRDT, 'YYYY-MM-DD'), src.FTP";
|
"GROUP BY TO_CHAR(src.STRDT, 'YYYY-MM-DD'), src.FTP";
|
||||||
}
|
}
|
||||||
|
|
||||||
// The automatic branch is reserved intentionally until the new equivalent table is provided.
|
// 自动过鱼(SD_FPSSRL_R):新表无 TASK_STATUS 列,按旧逻辑聚合 TM/FTP/FCNT
|
||||||
private String buildQgcFpRunAnalysisAutoFishSql() {
|
private String buildQgcFpRunAnalysisAutoFishSql() {
|
||||||
return "SELECT CAST(NULL AS VARCHAR2(10)) AS DT, " +
|
return "SELECT TO_CHAR(src.TM, 'YYYY-MM-DD') AS DT, " +
|
||||||
" CAST(NULL AS VARCHAR2(255)) AS FTP, " +
|
" src.FTP AS FTP, " +
|
||||||
" CAST(NULL AS NUMBER(18, 2)) AS FCNT " +
|
" SUM(src.FCNT) AS FCNT " +
|
||||||
"FROM DUAL WHERE 1 = 0";
|
"FROM ( " +
|
||||||
|
" SELECT a.TM AS TM, a.FCNT AS FCNT, b.NAME AS FTP " +
|
||||||
|
" FROM SD_FPSSRL_R a " +
|
||||||
|
" LEFT JOIN V_SD_FISHDICTORY_B b ON a.FTP = b.FISH_ID AND (b.RVCD = #{map.hbrvcd} OR b.RVCD = 'ZY') " +
|
||||||
|
" WHERE a.STCD = #{map.stcd} " +
|
||||||
|
" AND b.NAME = N'#{map.ftp}' " +
|
||||||
|
" AND a.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
||||||
|
" AND a.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
||||||
|
" AND NVL(a.IS_DELETED, 0) = 0 " +
|
||||||
|
") src " +
|
||||||
|
"GROUP BY TO_CHAR(src.TM, 'YYYY-MM-DD'), src.FTP";
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildQgcFpRunAnalysisWtSql() {
|
private String buildQgcFpRunAnalysisWtSql() {
|
||||||
@ -2676,18 +2685,29 @@ public class FpRunServiceImpl implements FpRunService {
|
|||||||
"GROUP BY TO_CHAR(t.DT, 'YYYY-MM-DD')";
|
"GROUP BY TO_CHAR(t.DT, 'YYYY-MM-DD')";
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildQgcFpRunAnalysisEngSql() {
|
// 坝上/坝下水位(DZ/RZ):旧逻辑来自按天表 SD_HYDROPWDAY_S
|
||||||
return "SELECT TO_CHAR(TRUNC(t.TM), 'YYYY-MM-DD') AS DT, " +
|
private String buildQgcFpRunAnalysisDzRzSql() {
|
||||||
" ROUND(AVG(t.DZ), 2) AS DZ, " +
|
return "SELECT TO_CHAR(t.DT, 'YYYY-MM-DD') AS DT, " +
|
||||||
" ROUND(AVG(t.RZ), 2) AS RZ, " +
|
" t.DZ AS DZ, " +
|
||||||
" ROUND(AVG(t.QI), 2) AS QI, " +
|
" t.RZ AS RZ " +
|
||||||
" ROUND(AVG(t.QO), 2) AS QO " +
|
"FROM SD_HYDROPWDAY_S t " +
|
||||||
"FROM SD_HYDROPW_R t " +
|
|
||||||
"WHERE t.STCD = #{map.rstcd} " +
|
"WHERE t.STCD = #{map.rstcd} " +
|
||||||
|
" AND t.DT >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
||||||
|
" AND t.DT <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
||||||
|
" AND NVL(t.IS_DELETED, 0) = 0";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 入库/出库流量(QI/QO):旧逻辑来自 MS_ENG_T(TYPE='DAY')
|
||||||
|
private String buildQgcFpRunAnalysisQiQoSql() {
|
||||||
|
return "SELECT TO_CHAR(t.TM, 'YYYY-MM-DD') AS DT, " +
|
||||||
|
" t.QI AS QI, " +
|
||||||
|
" t.QO AS QO " +
|
||||||
|
"FROM MS_ENG_T t " +
|
||||||
|
"WHERE t.STCD = #{map.rstcd} " +
|
||||||
|
" AND t.TYPE = 'DAY' " +
|
||||||
" AND t.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
" AND t.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
||||||
" AND t.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
" AND t.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " +
|
||||||
" AND NVL(t.IS_DELETED, 0) = 0 " +
|
" AND NVL(t.IS_DELETED, 0) = 0";
|
||||||
"GROUP BY TRUNC(t.TM)";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildQgcFpRunAnalysisOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
|
private String buildQgcFpRunAnalysisOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user