fix: 优化过鱼到数统计逻辑
This commit is contained in:
parent
de8409bde4
commit
abb685258c
@ -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">
|
||||
|
||||
Loading…
Reference in New Issue
Block a user