통지, 부과 > 부과 메뉴 조회 쿼리 변경...

수정예정
dev
박성영 2 months ago
parent 1b6df6f304
commit 76e3670772

@ -4,81 +4,8 @@
<!-- ==================== 이행정보(TB_IMPLT_INFO) 관련 쿼리 ==================== -->
<select id="selectImpltInfoList" parameterType="LevyNotiImpltInfoVO" resultType="LevyNotiImpltInfoVO">
/* LevyMapper.selectImpltInfoList : 이행정보 목록 조회 */
SELECT
ii.IMPLT_INFO_ID,
ii.SGG_CD,
ii.CRDN_YR,
ii.CRDN_NO,
ii.IMPLT_TASK_SE_CD,
ii.IMPLT_BGNG_YMD,
ii.IMPLT_END_YMD,
ii.REG_DT,
ii.RGTR,
ii.MDFCN_DT,
ii.MDFR,
ii.DEL_YN,
ii.DEL_DT,
ii.DLTR,
-- 단속 정보 (조인)
c.DSCL_YMD,
c.EXMNR,
c.RGN_SE_CD,
rgnSeCd.CD_NM as RGN_SE_CD_NM,
p.STDG_EMD_CD,
stdgEmdCd.CD_NM as STDG_EMD_CD_NM,
p.LOTNO_ADDR,
p.LOTNO_MNO,
p.LOTNO_SNO,
p.LOTNO_WHOL_ADDR,
impltTaskSe.CD_NM as IMPLT_TASK_SE_CD_NM,
ru.USER_NM AS RGTR_NM, /* 등록자 명 */
mu.USER_NM AS MDFR_NM, /* 수정자 명 */
/* 중요로직: GROUP_CONCAT을 이용하여 단속건별 행위유형, 소유자 정보 집계 */
(SELECT GROUP_CONCAT(DISTINCT act2.VLTN_BDST SEPARATOR ', ')
FROM tb_act_info ai2
LEFT JOIN tb_act_type act2 ON act2.ACT_TYPE_CD = ai2.ACT_TYPE_CD
WHERE ai2.CRDN_YR = c.CRDN_YR
AND ai2.CRDN_NO = c.CRDN_NO
AND ai2.DEL_YN = 'N') AS ACT_TYPE_CD_NMS, /* 행위유형명 */
(SELECT GROUP_CONCAT(DISTINCT o2.OWNR_ID SEPARATOR ', ')
FROM tb_ownr_info oi2
LEFT JOIN tb_ownr o2 ON o2.OWNR_ID = oi2.OWNR_ID AND o2.DEL_YN = 'N'
WHERE oi2.CRDN_YR = c.CRDN_YR
AND oi2.CRDN_NO = c.CRDN_NO
AND oi2.DEL_YN = 'N') AS OWNR_IDS, /* 소유자ID */
(SELECT GROUP_CONCAT(DISTINCT o2.FLNM SEPARATOR ', ')
FROM tb_ownr_info oi2
LEFT JOIN tb_ownr o2 ON o2.OWNR_ID = oi2.OWNR_ID AND o2.DEL_YN = 'N'
WHERE oi2.CRDN_YR = c.CRDN_YR
AND oi2.CRDN_NO = c.CRDN_NO
AND oi2.DEL_YN = 'N') AS OWNR_FLNMS /* 소유자명 */
FROM TB_IMPLT_INFO ii
INNER JOIN tb_crdn c ON ii.CRDN_YR = c.CRDN_YR AND ii.CRDN_NO = c.CRDN_NO AND c.DEL_YN = 'N'
LEFT JOIN tb_pstn_info p ON p.CRDN_YR = c.CRDN_YR AND p.CRDN_NO = c.CRDN_NO AND p.DEL_YN = 'N'
/* 중요로직: 조치처리상태 확인을 위한 행위정보 조인 - 미조치 건만 조회 */
LEFT JOIN (
SELECT
CRDN_YR,
CRDN_NO,
COUNT(1) as ACT_ALL_CNT,
SUM(CASE WHEN ACTN_PRCS_STTS_CD = '3' THEN 1 ELSE 0 END) as ACT_COMPLT_CNT
FROM tb_act_info
WHERE DEL_YN = 'N'
GROUP BY CRDN_YR, CRDN_NO
) act_cnt ON act_cnt.CRDN_YR = c.CRDN_YR AND act_cnt.CRDN_NO = c.CRDN_NO
-- 코드성 데이터 조인
LEFT JOIN tb_cd_detail impltTaskSe ON impltTaskSe.CD_GROUP_ID = 'IMPLT_TASK_SE_CD' AND impltTaskSe.CD_ID = ii.IMPLT_TASK_SE_CD
LEFT JOIN tb_cd_detail stdgEmdCd ON stdgEmdCd.CD_GROUP_ID = 'STDG_EMD_CD' AND stdgEmdCd.CD_ID = p.STDG_EMD_CD
LEFT JOIN tb_cd_detail rgnSeCd ON rgnSeCd.CD_GROUP_ID = 'RGN_SE_CD' AND rgnSeCd.CD_ID = c.RGN_SE_CD
LEFT JOIN tb_user ru ON ii.RGTR = ru.USER_ID
LEFT JOIN tb_user mu ON ii.MDFR = mu.USER_ID
WHERE ii.CRDN_YR = #{schCrdnYr}
AND ii.DEL_YN = 'N'
AND ii.IMPLT_BGNG_YMD BETWEEN #{schImpltBgngYmd1} AND #{schImpltBgngYmd2}
/* 중요로직: 조치처리상태가 미조치(1)인 건만 조회 - 행위정보가 있고 조치완료되지 않은 경우 */
AND (IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 AND IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0))
<!-- 공통 검색 조건 -->
<sql id="impltInfoSearchConditions">
<if test='schImpltTaskSeCd != null and schImpltTaskSeCd != ""'>
AND ii.IMPLT_TASK_SE_CD = #{schImpltTaskSeCd}
</if>
@ -103,17 +30,116 @@
<if test='schLotnoSno != null and schLotnoSno != ""'>
AND p.LOTNO_SNO = #{schLotnoSno}
</if>
</sql>
<!-- 이행정보 조회 -->
<select id="selectImpltInfoList" parameterType="LevyNotiImpltInfoVO" resultType="LevyNotiImpltInfoVO">
/* LevyMapper.selectImpltInfoList : 이행정보 목록 조회 (단속년도/번호별 최대 순번만) */
SELECT
IMPLT_INFO_ID,
SGG_CD,
CRDN_YR,
CRDN_NO,
IMPLT_TASK_SE_CD,
IMPLT_BGNG_YMD,
IMPLT_END_YMD,
REG_DT,
RGTR,
MDFCN_DT,
MDFR,
DEL_YN,
DEL_DT,
DLTR,
DSCL_YMD,
EXMNR,
RGN_SE_CD,
RGN_SE_CD_NM,
STDG_EMD_CD,
STDG_EMD_CD_NM,
LOTNO_ADDR,
LOTNO_MNO,
LOTNO_SNO,
LOTNO_WHOL_ADDR,
IMPLT_TASK_SE_CD_NM,
RGTR_NM,
MDFR_NM,
ACT_TYPE_CD_NMS,
OWNR_IDS,
OWNR_FLNMS
FROM (
SELECT
ii.IMPLT_INFO_ID,
ii.SGG_CD,
ii.CRDN_YR,
ii.CRDN_NO,
ii.IMPLT_TASK_SE_CD,
ii.IMPLT_BGNG_YMD,
ii.IMPLT_END_YMD,
ii.REG_DT,
ii.RGTR,
ii.MDFCN_DT,
ii.MDFR,
ii.DEL_YN,
ii.DEL_DT,
ii.DLTR,
c.DSCL_YMD,
c.EXMNR,
c.RGN_SE_CD,
rgnSeCd.CD_NM as RGN_SE_CD_NM,
p.STDG_EMD_CD,
stdgEmdCd.CD_NM as STDG_EMD_CD_NM,
p.LOTNO_ADDR,
p.LOTNO_MNO,
p.LOTNO_SNO,
p.LOTNO_WHOL_ADDR,
impltTaskSe.CD_NM as IMPLT_TASK_SE_CD_NM,
ru.USER_NM AS RGTR_NM,
mu.USER_NM AS MDFR_NM,
(SELECT GROUP_CONCAT(DISTINCT act2.VLTN_BDST SEPARATOR ', ')
FROM tb_act_info ai2
LEFT JOIN tb_act_type act2 ON act2.ACT_TYPE_CD = ai2.ACT_TYPE_CD
WHERE ai2.CRDN_YR = c.CRDN_YR AND ai2.CRDN_NO = c.CRDN_NO AND ai2.DEL_YN = 'N') AS ACT_TYPE_CD_NMS,
(SELECT GROUP_CONCAT(DISTINCT o2.OWNR_ID SEPARATOR ', ')
FROM tb_ownr_info oi2
LEFT JOIN tb_ownr o2 ON o2.OWNR_ID = oi2.OWNR_ID AND o2.DEL_YN = 'N'
WHERE oi2.CRDN_YR = c.CRDN_YR AND oi2.CRDN_NO = c.CRDN_NO AND oi2.DEL_YN = 'N') AS OWNR_IDS,
(SELECT GROUP_CONCAT(DISTINCT o2.FLNM SEPARATOR ', ')
FROM tb_ownr_info oi2
LEFT JOIN tb_ownr o2 ON o2.OWNR_ID = oi2.OWNR_ID AND o2.DEL_YN = 'N'
WHERE oi2.CRDN_YR = c.CRDN_YR AND oi2.CRDN_NO = c.CRDN_NO AND oi2.DEL_YN = 'N') AS OWNR_FLNMS,
/* 중요로직: 단속년도/번호별로 순번이 큰 순서대로 번호 부여 (1이 최대 순번) */
ROW_NUMBER() OVER (PARTITION BY ii.CRDN_YR, ii.CRDN_NO ORDER BY IFNULL(impltTaskSe.SORT_ORDR, 0) DESC) as rn
FROM TB_IMPLT_INFO ii
INNER JOIN tb_crdn c ON ii.CRDN_YR = c.CRDN_YR AND ii.CRDN_NO = c.CRDN_NO AND c.DEL_YN = 'N'
INNER JOIN tb_pstn_info p ON p.CRDN_YR = c.CRDN_YR AND p.CRDN_NO = c.CRDN_NO AND p.DEL_YN = 'N'
INNER JOIN (
SELECT CRDN_YR, CRDN_NO, COUNT(1) as ACT_ALL_CNT,
SUM(CASE WHEN ACTN_PRCS_STTS_CD = '3' THEN 1 ELSE 0 END) as ACT_COMPLT_CNT
FROM tb_act_info
WHERE DEL_YN = 'N'
GROUP BY CRDN_YR, CRDN_NO
) act_cnt ON act_cnt.CRDN_YR = c.CRDN_YR AND act_cnt.CRDN_NO = c.CRDN_NO
LEFT JOIN tb_cd_detail impltTaskSe ON impltTaskSe.CD_GROUP_ID = 'IMPLT_TASK_SE_CD' AND impltTaskSe.CD_ID = ii.IMPLT_TASK_SE_CD
LEFT JOIN tb_cd_detail stdgEmdCd ON stdgEmdCd.CD_GROUP_ID = 'STDG_EMD_CD' AND stdgEmdCd.CD_ID = p.STDG_EMD_CD
LEFT JOIN tb_cd_detail rgnSeCd ON rgnSeCd.CD_GROUP_ID = 'RGN_SE_CD' AND rgnSeCd.CD_ID = c.RGN_SE_CD
LEFT JOIN tb_user ru ON ii.RGTR = ru.USER_ID
LEFT JOIN tb_user mu ON ii.MDFR = mu.USER_ID
WHERE ii.CRDN_YR = #{schCrdnYr}
AND ii.DEL_YN = 'N'
AND ii.IMPLT_BGNG_YMD BETWEEN #{schImpltBgngYmd1} AND #{schImpltBgngYmd2}
AND (IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 AND IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0))
<include refid="impltInfoSearchConditions"/>
) ranked
WHERE rn = 1
<choose>
<!-- system 메뉴 패턴 준수: sortAscending(Boolean) 사용 -->
<!-- 중요로직: 화면 sortColumn은 컬럼 name 기준(crdnNo)으로 전달되므로 화이트리스트 매핑 적용 -->
<when test="sortColumn != null and (sortColumn == 'crdnNo' or sortColumn == 'CRDN_NO') and sortAscending != null and sortAscending == true">
ORDER BY ii.CRDN_NO ASC
ORDER BY CRDN_NO ASC
</when>
<when test="sortColumn != null and (sortColumn == 'crdnNo' or sortColumn == 'CRDN_NO') and sortAscending != null and sortAscending == false">
ORDER BY ii.CRDN_NO DESC
ORDER BY CRDN_NO DESC
</when>
<otherwise>
ORDER BY ii.CRDN_NO DESC
ORDER BY CRDN_NO DESC
</otherwise>
</choose>
<if test='pagingYn != null and pagingYn == "Y"'>
@ -121,52 +147,31 @@
</if>
</select>
<!-- 이행정보 조회 총 개수 -->
<select id="selectImpltInfoListTotalCount" parameterType="LevyNotiImpltInfoVO" resultType="int">
/* LevyMapper.selectImpltInfoListTotalCount : 이행정보 목록 총 개수 조회 */
SELECT Count(*)
FROM TB_IMPLT_INFO ii
INNER JOIN tb_crdn c ON ii.CRDN_YR = c.CRDN_YR AND ii.CRDN_NO = c.CRDN_NO AND c.DEL_YN = 'N'
LEFT JOIN tb_pstn_info p ON p.CRDN_YR = c.CRDN_YR AND p.CRDN_NO = c.CRDN_NO AND p.DEL_YN = 'N'
/* 중요로직: 조치처리상태 확인을 위한 행위정보 조인 - 미조치 건만 조회 */
LEFT JOIN (
SELECT
CRDN_YR,
CRDN_NO,
COUNT(1) as ACT_ALL_CNT,
SUM(CASE WHEN ACTN_PRCS_STTS_CD = '3' THEN 1 ELSE 0 END) as ACT_COMPLT_CNT
FROM tb_act_info
WHERE DEL_YN = 'N'
GROUP BY CRDN_YR, CRDN_NO
) act_cnt ON act_cnt.CRDN_YR = c.CRDN_YR AND act_cnt.CRDN_NO = c.CRDN_NO
WHERE ii.CRDN_YR = #{schCrdnYr}
AND ii.DEL_YN = 'N'
AND ii.IMPLT_BGNG_YMD BETWEEN #{schImpltBgngYmd1} AND #{schImpltBgngYmd2}
/* 중요로직: 조치처리상태가 미조치(1)인 건만 조회 - 행위정보가 있고 조치완료되지 않은 경우 */
AND (IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 AND IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0))
<if test='schImpltTaskSeCd != null and schImpltTaskSeCd != ""'>
AND ii.IMPLT_TASK_SE_CD = #{schImpltTaskSeCd}
</if>
<if test='schImpltTaskSeCd == null or schImpltTaskSeCd == ""'>
AND ii.IMPLT_TASK_SE_CD IN ('4', '5', '6')
</if>
<if test='schStdgEmdCd != null and schStdgEmdCd != ""'>
AND p.STDG_EMD_CD = #{schStdgEmdCd}
</if>
<if test='schZip != null and schZip != ""'>
AND p.ZIP LIKE CONCAT('%', #{schZip}, '%')
</if>
<if test='schLotnoAddr != null and schLotnoAddr != ""'>
AND p.LOTNO_ADDR LIKE CONCAT('%', #{schLotnoAddr}, '%')
</if>
<if test='schDtlAddr != null and schDtlAddr != ""'>
AND p.DTL_ADDR LIKE CONCAT('%', #{schDtlAddr}, '%')
</if>
<if test='schLotnoMno != null and schLotnoMno != ""'>
AND p.LOTNO_MNO = #{schLotnoMno}
</if>
<if test='schLotnoSno != null and schLotnoSno != ""'>
AND p.LOTNO_SNO = #{schLotnoSno}
</if>
/* LevyMapper.selectImpltInfoListTotalCount : 이행정보 목록 총 개수 조회 (단속년도/번호별 최대 순번만) */
SELECT COUNT(*)
FROM (
SELECT ii.IMPLT_INFO_ID,
ROW_NUMBER() OVER (PARTITION BY ii.CRDN_YR, ii.CRDN_NO ORDER BY IFNULL(impltTaskSe.SORT_ORDR, 0) DESC) as rn
FROM TB_IMPLT_INFO ii
INNER JOIN tb_crdn c ON ii.CRDN_YR = c.CRDN_YR AND ii.CRDN_NO = c.CRDN_NO AND c.DEL_YN = 'N'
INNER JOIN tb_pstn_info p ON p.CRDN_YR = c.CRDN_YR AND p.CRDN_NO = c.CRDN_NO AND p.DEL_YN = 'N'
INNER JOIN (
SELECT CRDN_YR, CRDN_NO, COUNT(1) as ACT_ALL_CNT,
SUM(CASE WHEN ACTN_PRCS_STTS_CD = '3' THEN 1 ELSE 0 END) as ACT_COMPLT_CNT
FROM tb_act_info
WHERE DEL_YN = 'N'
GROUP BY CRDN_YR, CRDN_NO
) act_cnt ON act_cnt.CRDN_YR = c.CRDN_YR AND act_cnt.CRDN_NO = c.CRDN_NO
LEFT JOIN tb_cd_detail impltTaskSe ON impltTaskSe.CD_GROUP_ID = 'IMPLT_TASK_SE_CD' AND impltTaskSe.CD_ID = ii.IMPLT_TASK_SE_CD
WHERE ii.CRDN_YR = #{schCrdnYr}
AND ii.DEL_YN = 'N'
AND ii.IMPLT_BGNG_YMD BETWEEN #{schImpltBgngYmd1} AND #{schImpltBgngYmd2}
AND (IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 AND IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0))
<include refid="impltInfoSearchConditions"/>
) ranked
WHERE rn = 1
</select>

@ -4,6 +4,34 @@
<!-- ==================== 이행정보(TB_IMPLT_INFO) 관련 쿼리 ==================== -->
<!-- 공통 검색 조건 -->
<sql id="impltInfoSearchConditions">
<if test='schImpltTaskSeCd != null and schImpltTaskSeCd != ""'>
AND ii.IMPLT_TASK_SE_CD = #{schImpltTaskSeCd}
</if>
<if test='schImpltTaskSeCd == null or schImpltTaskSeCd == ""'>
AND ii.IMPLT_TASK_SE_CD IN ('1', '2', '3')
</if>
<if test='schStdgEmdCd != null and schStdgEmdCd != ""'>
AND p.STDG_EMD_CD = #{schStdgEmdCd}
</if>
<if test='schZip != null and schZip != ""'>
AND p.ZIP LIKE CONCAT('%', #{schZip}, '%')
</if>
<if test='schLotnoAddr != null and schLotnoAddr != ""'>
AND p.LOTNO_ADDR LIKE CONCAT('%', #{schLotnoAddr}, '%')
</if>
<if test='schDtlAddr != null and schDtlAddr != ""'>
AND p.DTL_ADDR LIKE CONCAT('%', #{schDtlAddr}, '%')
</if>
<if test='schLotnoMno != null and schLotnoMno != ""'>
AND p.LOTNO_MNO = #{schLotnoMno}
</if>
<if test='schLotnoSno != null and schLotnoSno != ""'>
AND p.LOTNO_SNO = #{schLotnoSno}
</if>
</sql>
<!-- 이행정보 조회 -->
<select id="selectImpltInfoList" parameterType="NotiImpltInfoVO" resultType="NotiImpltInfoVO">
/* NotiMapper.selectImpltInfoList : 이행정보 목록 조회 (단속년도/번호별 최대 순번만) */
@ -100,30 +128,7 @@
AND ii.DEL_YN = 'N'
AND ii.IMPLT_BGNG_YMD BETWEEN #{schImpltBgngYmd1} AND #{schImpltBgngYmd2}
AND (IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 AND IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0))
<if test='schImpltTaskSeCd != null and schImpltTaskSeCd != ""'>
AND ii.IMPLT_TASK_SE_CD = #{schImpltTaskSeCd}
</if>
<if test='schImpltTaskSeCd == null or schImpltTaskSeCd == ""'>
AND ii.IMPLT_TASK_SE_CD IN ('1', '2', '3')
</if>
<if test='schStdgEmdCd != null and schStdgEmdCd != ""'>
AND p.STDG_EMD_CD = #{schStdgEmdCd}
</if>
<if test='schZip != null and schZip != ""'>
AND p.ZIP LIKE CONCAT('%', #{schZip}, '%')
</if>
<if test='schLotnoAddr != null and schLotnoAddr != ""'>
AND p.LOTNO_ADDR LIKE CONCAT('%', #{schLotnoAddr}, '%')
</if>
<if test='schDtlAddr != null and schDtlAddr != ""'>
AND p.DTL_ADDR LIKE CONCAT('%', #{schDtlAddr}, '%')
</if>
<if test='schLotnoMno != null and schLotnoMno != ""'>
AND p.LOTNO_MNO = #{schLotnoMno}
</if>
<if test='schLotnoSno != null and schLotnoSno != ""'>
AND p.LOTNO_SNO = #{schLotnoSno}
</if>
<include refid="impltInfoSearchConditions"/>
) ranked
WHERE rn = 1
<choose>
@ -164,30 +169,7 @@
AND ii.DEL_YN = 'N'
AND ii.IMPLT_BGNG_YMD BETWEEN #{schImpltBgngYmd1} AND #{schImpltBgngYmd2}
AND (IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 AND IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0))
<if test='schImpltTaskSeCd != null and schImpltTaskSeCd != ""'>
AND ii.IMPLT_TASK_SE_CD = #{schImpltTaskSeCd}
</if>
<if test='schImpltTaskSeCd == null or schImpltTaskSeCd == ""'>
AND ii.IMPLT_TASK_SE_CD IN ('1', '2', '3')
</if>
<if test='schStdgEmdCd != null and schStdgEmdCd != ""'>
AND p.STDG_EMD_CD = #{schStdgEmdCd}
</if>
<if test='schZip != null and schZip != ""'>
AND p.ZIP LIKE CONCAT('%', #{schZip}, '%')
</if>
<if test='schLotnoAddr != null and schLotnoAddr != ""'>
AND p.LOTNO_ADDR LIKE CONCAT('%', #{schLotnoAddr}, '%')
</if>
<if test='schDtlAddr != null and schDtlAddr != ""'>
AND p.DTL_ADDR LIKE CONCAT('%', #{schDtlAddr}, '%')
</if>
<if test='schLotnoMno != null and schLotnoMno != ""'>
AND p.LOTNO_MNO = #{schLotnoMno}
</if>
<if test='schLotnoSno != null and schLotnoSno != ""'>
AND p.LOTNO_SNO = #{schLotnoSno}
</if>
<include refid="impltInfoSearchConditions"/>
) ranked
WHERE rn = 1
</select>

Loading…
Cancel
Save