fix: 优化过鱼到数统计逻辑

This commit is contained in:
tangwei 2026-06-05 13:16:25 +08:00
parent de8409bde4
commit abb685258c

View File

@ -21,25 +21,64 @@
<sql id="statisticsQuery">
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 (
<include refid="statisticsQuery"/>
) 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}
</select>
<select id="countStatistics" resultType="int">
@ -192,4 +234,4 @@
)
</select>
</mapper>
</mapper>