From ed714918067be7db09a6f1f35ab0dedffe13687e Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 7 Sep 2026 08:22:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BF=87=E9=B1=BC=E8=AE=BE=E6=96=BD?= =?UTF-8?q?=E7=BB=BC=E5=90=88=E5=88=86=E6=9E=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fp/service/impl/FpRunServiceImpl.java | 144 ++++++++++-------- 1 file changed, 82 insertions(+), 62 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java index dcdc553d..7f0d68ad 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java @@ -278,14 +278,24 @@ public class FpRunServiceImpl implements FpRunService { stationParamMap ); 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); + // 按旧平台逻辑:根据 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 wqStcd = null; - if (StrUtil.isNotBlank(rstcd) && StrUtil.isNotBlank(rvcd)) { + if (StrUtil.isNotBlank(rstcd) && StrUtil.isNotBlank(hbrvcd)) { Map alongParamMap = new HashMap<>(); alongParamMap.put("rstcd", rstcd); - alongParamMap.put("rvcd", rvcd); + alongParamMap.put("rvcd", hbrvcd); List> alongRows = microservicDynamicSQLMapper.pageAllList( null, buildQgcFpRunAnalysisAlongSql(), @@ -308,20 +318,24 @@ public class FpRunServiceImpl implements FpRunService { paramMap.put("startTime", StrUtil.trim(tmArr[0])); paramMap.put("endTime", StrUtil.trim(tmArr[1])); paramMap.put("rstcd", rstcd); - paramMap.put("hbrvcd", rvcd); + paramMap.put("hbrvcd", hbrvcd); paramMap.put("wtrvStcd", wtrvStcd); 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); List rows = microservicDynamicSQLMapper.pageAllListWithResultType( page, sql, paramMap, FpRunAnalysisVo.class ); - 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() - .setColumns(buildQgcFpRunAnalysisColumns(StrUtil.trim(ftp))) + .setColumns(buildQgcFpRunAnalysisColumns(StrUtil.trim(ftpName))) .setDataSource(rows) .setTotal(total); result.setData(Collections.singletonList(tableVo)); @@ -2532,10 +2546,10 @@ public class FpRunServiceImpl implements FpRunService { } private String buildQgcFpRunAnalysisStationSql() { - return "SELECT fp.RSTCD AS \"rstcd\",eng.RVCD AS \"rvcd\", eng.HBRVCD AS \"hbrvcd\" " + - "FROM SD_FPSS_B_H fp " + - "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + - "WHERE fp.STCD = #{map.stcd} " + + return "SELECT RSTCD AS \"rstcd\", HBRVCD AS \"hbrvcd\", RVCD AS \"rvcd\", MWAY AS \"mway\" " + + "FROM V_MS_STBPRP_T " + + "WHERE STCD = #{map.stcd} " + + "AND NVL(IS_DELETED, 0) = 0 " + "AND ROWNUM = 1"; } @@ -2552,7 +2566,7 @@ public class FpRunServiceImpl implements FpRunService { "ORDER BY NVL(t2.SORT, 999999), t2.STCD"; } - private String buildQgcFpRunAnalysisDataSql(List sortList) { + private String buildQgcFpRunAnalysisDataSql(List sortList, String tableName) { return "SELECT t.DT AS dt, " + " t.FTP AS ftp, " + " t.FCNT AS fcnt, " + @@ -2576,15 +2590,15 @@ public class FpRunServiceImpl implements FpRunService { " t4.TN AS TN, " + " t5.DZ AS DZ, " + " t5.RZ AS RZ, " + - " t5.QI AS QI, " + - " t5.QO AS QO " + + " t6.QI AS QI, " + + " t6.QO AS QO " + " FROM ( " + " SELECT TO_CHAR(TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') + LEVEL - 1, 'YYYY-MM-DD') AS DT " + " 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 " + " ) t1 " + " LEFT JOIN ( " + - buildQgcFpRunAnalysisFishSql() + + buildQgcFpRunAnalysisFishSql(tableName) + " ) t2 ON t1.DT = t2.DT " + " LEFT JOIN ( " + buildQgcFpRunAnalysisWtSql() + @@ -2593,19 +2607,22 @@ public class FpRunServiceImpl implements FpRunService { buildQgcFpRunAnalysisWqSql() + " ) t4 ON t1.DT = t4.DT " + " LEFT JOIN ( " + - buildQgcFpRunAnalysisEngSql() + + buildQgcFpRunAnalysisDzRzSql() + " ) t5 ON t1.DT = t5.DT " + + " LEFT JOIN ( " + + buildQgcFpRunAnalysisQiQoSql() + + " ) t6 ON t1.DT = t6.DT " + ") 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) " + buildQgcFpRunAnalysisOrderBySql(sortList); } - private String buildQgcFpRunAnalysisFishSql() { - return "SELECT t.DT AS DT, t.FTP AS FTP, t.FCNT AS FCNT FROM ( " + - buildQgcFpRunAnalysisManualFishSql() + - " UNION ALL " + - buildQgcFpRunAnalysisAutoFishSql() + - " ) t"; + private String buildQgcFpRunAnalysisFishSql(String tableName) { + //按旧平台逻辑:根据 MWAY 选定的表决定人工/自动过鱼查询 + if ("SD_FPSSRL_R".equals(tableName)) { + return buildQgcFpRunAnalysisAutoFishSql(); + } + return buildQgcFpRunAnalysisManualFishSql(); } private String buildQgcFpRunAnalysisManualFishSql() { @@ -2613,42 +2630,34 @@ public class FpRunServiceImpl implements FpRunService { " src.FTP AS FTP, " + " SUM(src.FCNT) AS FCNT " + "FROM ( " + - " SELECT t.STRDT AS STRDT, " + - " t.FCNT AS FCNT, " + - " COALESCE(fishRv.NAME, relRv.FISH_NAME, fishZy.NAME, relZy.FISH_NAME, fishDirect.NAME, t.FTP) AS FTP " + - " FROM SD_FPSS_R t " + - " INNER JOIN SD_FPSS_B_H fp ON fp.STCD = t.STCD " + - " LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + - " LEFT JOIN SD_FISHDICTORY_RLTN_B relRv ON relRv.FISH_ID = t.FTP " + - " AND relRv.RVCD = eng.HBRVCD " + - " 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 " + + " SELECT a.STRDT AS STRDT, a.FCNT AS FCNT, b.NAME AS FTP " + + " FROM SD_FPSS_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.ZY_FISH_ID = #{map.ftp} " + + " AND a.STRDT >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') " + + " AND a.STRDT <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') " + + " AND NVL(a.IS_DELETED, 0) = 0 " + ") src " + - "WHERE src.FTP = #{map.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() { - return "SELECT CAST(NULL AS VARCHAR2(10)) AS DT, " + - " CAST(NULL AS VARCHAR2(255)) AS FTP, " + - " CAST(NULL AS NUMBER(18, 2)) AS FCNT " + - "FROM DUAL WHERE 1 = 0"; + return "SELECT TO_CHAR(src.TM, 'YYYY-MM-DD') AS DT, " + + " src.FTP AS FTP, " + + " SUM(src.FCNT) AS FCNT " + + "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() { @@ -2676,18 +2685,29 @@ public class FpRunServiceImpl implements FpRunService { "GROUP BY TO_CHAR(t.DT, 'YYYY-MM-DD')"; } - private String buildQgcFpRunAnalysisEngSql() { - return "SELECT TO_CHAR(TRUNC(t.TM), 'YYYY-MM-DD') AS DT, " + - " ROUND(AVG(t.DZ), 2) AS DZ, " + - " ROUND(AVG(t.RZ), 2) AS RZ, " + - " ROUND(AVG(t.QI), 2) AS QI, " + - " ROUND(AVG(t.QO), 2) AS QO " + - "FROM SD_HYDROPW_R t " + + // 坝上/坝下水位(DZ/RZ):旧逻辑来自按天表 SD_HYDROPWDAY_S + private String buildQgcFpRunAnalysisDzRzSql() { + return "SELECT TO_CHAR(t.DT, 'YYYY-MM-DD') AS DT, " + + " t.DZ AS DZ, " + + " t.RZ AS RZ " + + "FROM SD_HYDROPWDAY_S t " + "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.endTime}, 'YYYY-MM-DD HH24:MI:SS') " + - " AND NVL(t.IS_DELETED, 0) = 0 " + - "GROUP BY TRUNC(t.TM)"; + " AND NVL(t.IS_DELETED, 0) = 0"; } private String buildQgcFpRunAnalysisOrderBySql(List sortList) {