From abb685258cc61f1bb05ef92a069a45d8572a1512 Mon Sep 17 00:00:00 2001 From: tangwei Date: Fri, 5 Jun 2026 13:16:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E8=BF=87=E9=B1=BC?= =?UTF-8?q?=E5=88=B0=E6=95=B0=E7=BB=9F=E8=AE=A1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/data/FishStatisticsMapper.xml | 102 ++++++++++++------ 1 file changed, 72 insertions(+), 30 deletions(-) diff --git a/backend/src/main/resources/mapper/data/FishStatisticsMapper.xml b/backend/src/main/resources/mapper/data/FishStatisticsMapper.xml index 8fa08150..64fd0a73 100644 --- a/backend/src/main/resources/mapper/data/FishStatisticsMapper.xml +++ b/backend/src/main/resources/mapper/data/FishStatisticsMapper.xml @@ -21,25 +21,64 @@ WITH + active_rivers AS ( + SELECT + RVCD, + RVNM, + PRVCD, + GRD, + PATH, + ORDER_INDEX + FROM SD_RVCD_DIC + WHERE NVL(ENABLED, 1) = 1 + AND NVL(IS_DELETED, 0) = 0 + ), + + river_display AS ( + SELECT + d.RVCD, + d.RVNM, + d.PRVCD, + d.GRD, + d.PATH, + d.ORDER_INDEX, + LTRIM(SYS_CONNECT_BY_PATH(d.RVNM, '-'), '-') AS BASIN_NAME, + SYS_CONNECT_BY_PATH(LPAD(NVL(d.ORDER_INDEX, 999999999), 10, '0'), '/') AS BASIN_ORDER_PATH + FROM active_rivers d + START WITH d.PRVCD IS NULL OR d.PRVCD = '' OR d.PRVCD = '0' + CONNECT BY PRIOR d.RVCD = d.PRVCD + ORDER SIBLINGS BY d.ORDER_INDEX ASC, d.RVCD ASC + ), + + river_relation AS ( + SELECT + CONNECT_BY_ROOT d.RVCD AS ROOT_RVCD, + d.RVCD AS DESC_RVCD + FROM active_rivers d + START WITH d.PRVCD IS NULL OR d.PRVCD = '' OR d.PRVCD = '0' + CONNECT BY PRIOR d.RVCD = d.PRVCD + ), + user_scope_detail AS ( SELECT DISTINCT su.ID AS USER_ID, e.STCD AS STATION_CODE, - h.HBRVCD AS BASIN_CODE, - h.HBRVNM AS BASIN_NAME, - e.ENNM AS STATION_NAME - FROM QGC_REFA.SYS_USER su - JOIN QGC_REFA.SYS_USER_DATA_SCOPE sud + r.RVCD AS BASIN_CODE, + r.BASIN_NAME AS BASIN_NAME, + e.ENNM AS STATION_NAME, + r.BASIN_ORDER_PATH AS BASIN_ORDER_PATH + FROM SYS_USER su + JOIN SYS_USER_DATA_SCOPE sud ON su.ID = sud.USER_ID AND sud.STATUS = 1 - AND sud.ORG_TYPE = 'HBRVCD' - JOIN QGC_REFA.SD_HBRV_DIC h - ON sud.ORG_ID = h.HBRVCD - AND h.ENABLED = 1 - AND h.IS_DELETED = 0 - JOIN QGC_REFA.SD_ENGINFO_B_H e - ON e.HBRVCD = h.HBRVCD + AND sud.ORG_TYPE IN ('RVCD', 'HBRVCD') + JOIN river_relation rr + ON sud.ORG_ID = rr.ROOT_RVCD + JOIN SD_ENGINFO_B_H e + ON e.REACHCD = rr.DESC_RVCD AND e.USFL = 1 + JOIN river_display r + ON e.REACHCD = r.RVCD WHERE su.STATUS = 1 AND su.REG_STATUS IN ('PENDING', 'APPROVED', 'REJECTED') @@ -48,21 +87,20 @@ SELECT DISTINCT su.ID AS USER_ID, e.STCD AS STATION_CODE, - h.HBRVCD AS BASIN_CODE, - h.HBRVNM AS BASIN_NAME, - e.ENNM AS STATION_NAME - FROM QGC_REFA.SYS_USER su - JOIN QGC_REFA.SYS_USER_DATA_SCOPE sud + r.RVCD AS BASIN_CODE, + r.BASIN_NAME AS BASIN_NAME, + e.ENNM AS STATION_NAME, + r.BASIN_ORDER_PATH AS BASIN_ORDER_PATH + FROM SYS_USER su + JOIN SYS_USER_DATA_SCOPE sud ON su.ID = sud.USER_ID AND sud.STATUS = 1 AND sud.ORG_TYPE = 'STATION' - JOIN QGC_REFA.SD_ENGINFO_B_H e + JOIN SD_ENGINFO_B_H e ON sud.ORG_ID = e.STCD AND e.USFL = 1 - JOIN QGC_REFA.SD_HBRV_DIC h - ON e.HBRVCD = h.HBRVCD - AND h.ENABLED = 1 - AND h.IS_DELETED = 0 + JOIN river_display r + ON e.REACHCD = r.RVCD WHERE su.STATUS = 1 AND su.REG_STATUS IN ('PENDING', 'APPROVED', 'REJECTED') ), @@ -81,7 +119,7 @@ ), distinct_basins AS ( - SELECT DISTINCT USER_ID,BASIN_CODE, BASIN_NAME + SELECT DISTINCT USER_ID, BASIN_CODE, BASIN_NAME, BASIN_ORDER_PATH FROM user_scope_detail WHERE USER_ID IN (SELECT USER_ID FROM filtered_users) ), @@ -96,11 +134,12 @@ SELECT USER_ID, RTRIM( - XMLAGG(XMLELEMENT(E, BASIN_NAME || ',') ORDER BY BASIN_NAME) + XMLAGG(XMLELEMENT(E, BASIN_NAME || ',') ORDER BY BASIN_ORDER_PATH, BASIN_CODE) .EXTRACT('//text()').GETCLOBVAL(), ',' ) AS BASIN_NAMES, - MIN(BASIN_CODE) AS MIN_BASIN_CODE -- 辅助排序字段(VARCHAR2) + MIN(BASIN_CODE) AS MIN_BASIN_CODE, + MIN(BASIN_ORDER_PATH) AS MIN_BASIN_ORDER_PATH FROM distinct_basins GROUP BY USER_ID ), @@ -125,7 +164,7 @@ MIN(STRDT) AS MIN_STRDT, MAX(STRDT) AS MAX_ENDDT, SUM(FCNT) AS TOTAL_FCNT - FROM QGC_REFA.FISH_DRAFT_DATA + FROM FISH_DRAFT_DATA WHERE DELETED_FLAG = 0 AND STATUS IN ('PENDING','APPROVED') GROUP BY CREATED_BY, TO_CHAR(STRDT, 'YYYY-MM') @@ -140,7 +179,10 @@ su.REAL_NAME, su.PHONE, su.NICKNAME || '/' || su.PHONE AS CONTACT, + ba.MIN_BASIN_CODE AS BASIN_CODE, + sa.MIN_STATION_CODE AS STATION_CODE, ba.MIN_BASIN_CODE, + ba.MIN_BASIN_ORDER_PATH, sa.MIN_STATION_CODE, ba.BASIN_NAMES, sa.STATION_NAMES, @@ -150,7 +192,7 @@ fm.TOTAL_FCNT, CASE WHEN fm.CREATED_BY IS NOT NULL THEN 1 ELSE 0 END AS HAS_DATA FROM all_users u - JOIN QGC_REFA.SYS_USER su + JOIN SYS_USER su ON u.USER_ID = su.ID LEFT JOIN basin_agg ba ON u.USER_ID = ba.USER_ID @@ -180,10 +222,10 @@ SELECT * FROM ( SELECT t.*, - ROW_NUMBER() OVER (ORDER BY t.MIN_BASIN_CODE,t.MIN_STATION_CODE,t.REPORT_MONTH,t.MIN_STRDT) AS rn + ROW_NUMBER() OVER (ORDER BY t.MIN_BASIN_ORDER_PATH,t.MIN_STATION_CODE,t.REPORT_MONTH,t.MIN_STRDT) AS rn FROM ( - ) t ORDER BY t.MIN_BASIN_CODE,t.MIN_STATION_CODE,t.REPORT_MONTH,t.MIN_STRDT + ) t ORDER BY t.MIN_BASIN_ORDER_PATH,t.MIN_STATION_CODE,t.REPORT_MONTH,t.MIN_STRDT ) WHERE rn BETWEEN #{startRow}+1 AND #{endRow} - \ No newline at end of file +