From bff4091e919a6a90f3b2020708474cf6e3999e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Thu, 13 Nov 2025 15:51:26 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BF=BC=EB=A6=AC=20=EA=B0=84=EC=86=8C?= =?UTF-8?q?=ED=99=94=20=EB=B0=8F=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/CrdnRegistAndViewMapper_maria.xml | 744 ++++++------------ 1 file changed, 259 insertions(+), 485 deletions(-) diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnRegistAndViewMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnRegistAndViewMapper_maria.xml index 8eeaa9d..3441aff 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnRegistAndViewMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnRegistAndViewMapper_maria.xml @@ -3,6 +3,127 @@ + + + + AND c.CRDN_YR = #{schCrdnYr} + + + AND c.CRDN_NO LIKE CONCAT('%', #{schCrdnNo}, '%') + + + AND p.STDG_EMD_CD IN + + #{emdCd} + + + + AND c.RGN_SE_CD = #{schRgnSeCd} + + + AND c.DSCL_MTHD_CD = #{schDsclMthdCd} + + + AND c.EXMNR LIKE CONCAT('%', #{schExmnr}, '%') + + + AND c.CRDN_PRCS_STTS_CD = #{schCrdnPrcsSttsCd} + + + AND c.AGRVTN_LEVY_TRGT_YN = #{schAgrvtnLevyTrgtYn} + + + AND p.ZIP LIKE CONCAT('%', #{schZip}, '%') + + + AND p.LOTNO_ADDR LIKE CONCAT('%', #{schLotnoAddr}, '%') + + + AND p.DTL_ADDR LIKE CONCAT('%', #{schDtlAddr}, '%') + + + AND p.LOTNO_MNO = #{schLotnoMno} + + + AND p.LOTNO_SNO = #{schLotnoSno} + + + + + + + + + + AND ( + c.DSPS_BFHD_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + OR c.CRC_CMD_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + OR c.CRC_URG_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + OR c.LEVY_PRVNTC_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + OR c.LEVY_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + OR c.PAY_URG_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + ) + + + AND c.DSPS_BFHD_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + + + AND c.CRC_CMD_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + + + AND c.CRC_URG_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + + + AND c.LEVY_PRVNTC_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + + + AND c.LEVY_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + + + AND c.PAY_URG_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') + + + + + + + AND ( + c.DSPS_BFHD_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + OR c.CRC_CMD_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + OR c.CRC_URG_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + OR c.LEVY_PRVNTC_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + OR c.LEVY_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + OR c.PAY_URG_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + ) + + + AND c.DSPS_BFHD_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + + + AND c.CRC_CMD_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + + + AND c.CRC_URG_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + + + AND c.LEVY_PRVNTC_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + + + AND c.LEVY_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + + + AND c.PAY_URG_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') + + + + + + + + + + + - /* CrdnRegistAndViewMapper.selectList : 단속 목록 조회 */ + /* CrdnRegistAndViewMapper.selectListExcelGrid : 단속 목록 조회 - 그리드형태 그대로 다운로드 */ SELECT m.*, - m.ACT_CMPLT_CD, - case when m.ACT_CMPLT_CD = '0' then '행위정보없음' - when m.ACT_CMPLT_CD = '1' then '미조치' - when m.ACT_CMPLT_CD = '2' then '조치완료' - end as ACT_CMPLT_CD_NM + m.ACT_CMPLT_CD, + case when m.ACT_CMPLT_CD = '0' then '행위정보없음' + when m.ACT_CMPLT_CD = '1' then '미조치' + when m.ACT_CMPLT_CD = '3' then '조치완료' + end as ACT_CMPLT_CD_NM FROM ( - SELECT - c.CRDN_YR, /* 단속 연도 */ - c.CRDN_NO, /* 단속 번호 */ - c.SGG_CD, /* 시군구 코드 */ - sgg.CD_NM AS SGG_CD_NM, - c.RGN_SE_CD, /* 지역 구분 코드 */ - rgn.CD_NM AS RGN_SE_CD_NM, - c.DSCL_MTHD_CD, /* 단속 방법 코드 */ - dscl.CD_NM AS DSCL_MTHD_CD_NM, - DATE_FORMAT(STR_TO_DATE(c.DSCL_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSCL_YMD, /* 적발 일자 */ - c.EXMNR, /* 조사원 */ - c.RMRK, /* 비고 */ - DATE_FORMAT(STR_TO_DATE(c.DSPS_BFHD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSPS_BFHD_BGNG_YMD, /* 사전처분 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.DSPS_BFHD_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSPS_BFHD_END_YMD, /* 사전처분 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.CRC_CMD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_CMD_BGNG_YMD, /* 시정명령 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.CRC_CMD_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_CMD_END_YMD, /* 시정명령 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.CRC_URG_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_URG_BGNG_YMD, /* 시정촉구 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.CRC_URG_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_URG_END_YMD, /* 시정촉구 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.LEVY_PRVNTC_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_PRVNTC_BGNG_YMD, /* 부과예고 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.LEVY_PRVNTC_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_PRVNTC_END_YMD, /* 부과예고 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.LEVY_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_BGNG_YMD, /* 부과 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.LEVY_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_END_YMD, /* 부과 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.PAY_URG_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS PAY_URG_BGNG_YMD, /* 납부촉구 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.PAY_URG_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS PAY_URG_END_YMD, /* 납부촉구 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.FRST_CRDN_YR, '%Y%m%d'), '%Y-%m-%d') AS FRST_CRDN_YR, /* 최초 단속 연도 */ - DATE_FORMAT(STR_TO_DATE(c.FRST_CRDN_NO, '%Y%m%d'), '%Y-%m-%d') AS FRST_CRDN_NO, /* 최초 */ - case when c.RELEVY_YN = 'Y' then '재부과' - else '신규' - end as RELEVY_YN, /* 재과 여부 */ - case when c.AGRVTN_LEVY_TRGT_YN = 'Y' then '대상' - else '비대상' - end as AGRVTN_LEVY_TRGT_YN, /* 가중 부과 대상 여부 */ - c.CRDN_PRCS_STTS_CD, /* 단속 처리 상태 코드 */ - stts.CD_NM AS CRDN_PRCS_STTS_CD_NM, - DATE_FORMAT(STR_TO_DATE(c.CRDN_PRCS_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRDN_PRCS_YMD, /* 단속 처리 일자 */ - c.REG_DT, - c.RGTR, - u.USER_ACNT AS RGTR_ACNT, - u.USER_NM AS RGTR_NM, - p.LOTNO_WHOL_ADDR, /* 지번 전체 주소 */ - p.STDG_EMD_CD, /* 법정동 읍면동 코드 */ - emd.CD_NM AS STDG_EMD_CD_NM, - p.ZIP, - p.LOTNO_MNO, /* 지번 본번 */ - p.LOTNO_SNO, /* 지번 부번 */ - CASE WHEN (p.LOTNO_SNO IS NOT NULL AND p.LOTNO_SNO != '') - THEN CONCAT(p.LOTNO_MNO, '-', p.LOTNO_SNO) - ELSE CONCAT(p.LOTNO_MNO, '') - end AS LOTNO_NO, - p.DTL_ADDR, /* 상세주소 */ - p.LDCG_CD, /* 지목 코드 */ - ldcg.CD_NM AS LDCG_CD_NM, /* 지목 코드명 */ - (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_NAMS, - (SELECT GROUP_CONCAT(DISTINCT o2.FLNM SEPARATOR ', ') - FROM tb_actr_info ai - LEFT JOIN tb_ownr o2 ON o2.OWNR_ID = ai.OWNR_ID AND o2.DEL_YN = 'N' - WHERE ai.CRDN_YR = c.CRDN_YR - AND ai.CRDN_NO = c.CRDN_NO - AND ai.DEL_YN = 'N') AS ACTR_NAMS, - a.ACT_TYPE_CD, /* 행위 유형 코드 */ - CASE WHEN IFNULL(act_cnt.ACT_ALL_CNT, 0) > 1 THEN - CONCAT(act.VLTN_BDST, ' 등 ', act_cnt.ACT_ALL_CNT, '건') - ELSE act.VLTN_BDST END ACT_TYPE_CD_NM, - IFNULL(act_cnt.ACT_ALL_CNT, 0) as ACT_ALL_CNT, - IFNULL(act_cnt.ACT_COMPLT_CNT, 0) as ACT_COMPLT_CNT, - /* 중요로직: ACT_CMPLT_CD를 메인 SELECT에서 직접 계산 - 외부 SELECT에서 재계산 불필요 */ - case when IFNULL(act_cnt.ACT_ALL_CNT, 0) = 0 then '0' - when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0) - then '1' - when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) = IFNULL(act_cnt.ACT_COMPLT_CNT, 0) - then '3' - else '-' - end as ACT_CMPLT_CD, /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 2] */ - a.USG_IDX_CD, /* 용도 지수 코드 */ - usg.USG_NM AS USG_IDX_CD_NM, - a.AREA, /* 면적 */ - a.STRCT_IDX_CD, /* 구조 지수 코드 */ - strct.STRCT_NM AS STRCT_IDX_CD_NM /* 구조 지수 코드명 */ - FROM tb_crdn c - LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = c.SGG_CD - LEFT JOIN tb_cd_detail rgn ON rgn.CD_GROUP_ID = 'RGN_SE_CD' AND rgn.CD_ID = c.RGN_SE_CD - LEFT JOIN tb_cd_detail dscl ON dscl.CD_GROUP_ID = 'DSCL_MTHD_CD' AND dscl.CD_ID = c.DSCL_MTHD_CD - LEFT JOIN tb_cd_detail stts ON stts.CD_GROUP_ID = 'CRDN_PRCS_STTS_CD' AND stts.CD_ID = c.CRDN_PRCS_STTS_CD - LEFT JOIN tb_user u ON u.USER_ID = c.RGTR AND u.USE_YN = 'Y' - 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 tb_cd_detail emd ON emd.CD_GROUP_ID = 'STDG_EMD_CD' AND emd.CD_ID = p.STDG_EMD_CD - LEFT JOIN tb_cd_detail ldcg ON ldcg.CD_GROUP_ID = 'LDCG_CD' AND ldcg.CD_ID = p.LDCG_CD - 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_act_info a ON a.CRDN_YR = c.CRDN_YR and a.CRDN_NO = c.CRDN_NO AND a.DEL_YN = 'N' AND a.ACT_NO = - (SELECT MIN(a1.ACT_NO) FROM tb_act_info a1 WHERE a1.CRDN_YR = a.CRDN_YR AND a1.CRDN_NO = a.CRDN_NO AND - a1.DEL_YN='N') - LEFT JOIN tb_act_type act ON act.ACT_TYPE_CD = a.ACT_TYPE_CD - LEFT JOIN tb_usg_idx usg ON usg.USG_IDX_CD = a.USG_IDX_CD - LEFT JOIN tb_strct_idx strct ON strct.STRCT_IDX_CD = a.STRCT_IDX_CD - WHERE c.DEL_YN = 'N' - - AND c.CRDN_YR = #{schCrdnYr} - - - AND c.CRDN_NO LIKE CONCAT('%', #{schCrdnNo}, '%') - - - AND p.STDG_EMD_CD IN - - #{emdCd} - - - - AND c.RGN_SE_CD = #{schRgnSeCd} - - - AND c.DSCL_MTHD_CD = #{schDsclMthdCd} - - - AND c.EXMNR LIKE CONCAT('%', #{schExmnr}, '%') - - - AND c.CRDN_PRCS_STTS_CD = #{schCrdnPrcsSttsCd} - - - - - - AND ( - c.DSPS_BFHD_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - OR c.CRC_CMD_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - OR c.CRC_URG_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - OR c.LEVY_PRVNTC_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - OR c.LEVY_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - OR c.PAY_URG_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - ) - - - AND c.DSPS_BFHD_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - - - AND c.CRC_CMD_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - - - AND c.CRC_URG_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - - - AND c.LEVY_PRVNTC_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - - - AND c.LEVY_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - - - AND c.PAY_URG_BGNG_YMD =]]> REPLACE(#{schPrcsSttsStartDt}, '-', '') - - - - - - - AND ( - c.DSPS_BFHD_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - OR c.CRC_CMD_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - OR c.CRC_URG_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - OR c.LEVY_PRVNTC_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - OR c.LEVY_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - OR c.PAY_URG_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - ) - - - AND c.DSPS_BFHD_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - - - AND c.CRC_CMD_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - - - AND c.CRC_URG_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - - - AND c.LEVY_PRVNTC_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - - - AND c.LEVY_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - - - AND c.PAY_URG_END_YMD REPLACE(#{schPrcsSttsEndDt}, '-', '') - - - - - AND c.AGRVTN_LEVY_TRGT_YN = #{schAgrvtnLevyTrgtYn} - - - AND p.ZIP LIKE CONCAT('%', #{schZip}, '%') - - - AND p.LOTNO_ADDR LIKE CONCAT('%', #{schLotnoAddr}, '%') - - - AND p.DTL_ADDR LIKE CONCAT('%', #{schDtlAddr}, '%') - - - AND p.LOTNO_MNO = #{schLotnoMno} - - - AND p.LOTNO_SNO = #{schLotnoSno} - + SELECT + c.CRDN_YR, /* 단속 연도 */ + c.CRDN_NO, /* 단속 번호 */ + c.SGG_CD, /* 시군구 코드 */ + sgg.CD_NM AS SGG_CD_NM, + c.RGN_SE_CD, /* 지역 구분 코드 */ + rgn.CD_NM AS RGN_SE_CD_NM, + c.DSCL_MTHD_CD, /* 단속 방법 코드 */ + dscl.CD_NM AS DSCL_MTHD_CD_NM, + DATE_FORMAT(STR_TO_DATE(c.DSCL_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSCL_YMD, /* 적발 일자 */ + c.EXMNR, /* 조사원 */ + c.RMRK, /* 비고 */ + DATE_FORMAT(STR_TO_DATE(c.DSPS_BFHD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSPS_BFHD_BGNG_YMD, /* 사전처분 시작일 */ + DATE_FORMAT(STR_TO_DATE(c.DSPS_BFHD_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSPS_BFHD_END_YMD, /* 사전처분 종료일 */ + DATE_FORMAT(STR_TO_DATE(c.CRC_CMD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_CMD_BGNG_YMD, /* 시정명령 시작일 */ + DATE_FORMAT(STR_TO_DATE(c.CRC_CMD_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_CMD_END_YMD, /* 시정명령 종료일 */ + DATE_FORMAT(STR_TO_DATE(c.CRC_URG_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_URG_BGNG_YMD, /* 시정촉구 시작일 */ + DATE_FORMAT(STR_TO_DATE(c.CRC_URG_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_URG_END_YMD, /* 시정촉구 종료일 */ + DATE_FORMAT(STR_TO_DATE(c.LEVY_PRVNTC_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_PRVNTC_BGNG_YMD, /* 부과예고 시작일 */ + DATE_FORMAT(STR_TO_DATE(c.LEVY_PRVNTC_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_PRVNTC_END_YMD, /* 부과예고 종료일 */ + DATE_FORMAT(STR_TO_DATE(c.LEVY_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_BGNG_YMD, /* 부과 시작일 */ + DATE_FORMAT(STR_TO_DATE(c.LEVY_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_END_YMD, /* 부과 종료일 */ + DATE_FORMAT(STR_TO_DATE(c.PAY_URG_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS PAY_URG_BGNG_YMD, /* 납부촉구 시작일 */ + DATE_FORMAT(STR_TO_DATE(c.PAY_URG_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS PAY_URG_END_YMD, /* 납부촉구 종료일 */ + DATE_FORMAT(STR_TO_DATE(c.FRST_CRDN_YR, '%Y%m%d'), '%Y-%m-%d') AS FRST_CRDN_YR, /* 최초 단속 연도 */ + DATE_FORMAT(STR_TO_DATE(c.FRST_CRDN_NO, '%Y%m%d'), '%Y-%m-%d') AS FRST_CRDN_NO, /* 최초 단속 번호 */ + case when c.RELEVY_YN = 'Y' then '재부과' + else '신규' + end as RELEVY_YN, /* 재과 여부 */ + case when c.AGRVTN_LEVY_TRGT_YN = 'Y' then '대상' + else '비대상' + end as AGRVTN_LEVY_TRGT_YN, /* 가중 부과 대상 여부 */ + c.CRDN_PRCS_STTS_CD, /* 단속 처리 상태 코드 */ + stts.CD_NM AS CRDN_PRCS_STTS_CD_NM, + DATE_FORMAT(STR_TO_DATE(c.CRDN_PRCS_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRDN_PRCS_YMD, /* 단속 처리 일자 */ + c.REG_DT, + c.RGTR, + u.USER_ACNT AS RGTR_ACNT, + u.USER_NM AS RGTR_NM, + p.LOTNO_WHOL_ADDR, /* 지번 전체 주소 */ + p.STDG_EMD_CD, /* 법정동 읍면동 코드 */ + emd.CD_NM AS STDG_EMD_CD_NM, + p.ZIP, + p.LOTNO_MNO, /* 지번 본번 */ + p.LOTNO_SNO, /* 지번 부번 */ + CASE WHEN (p.LOTNO_SNO IS NOT NULL AND p.LOTNO_SNO != '') + THEN CONCAT(p.LOTNO_MNO, '-', p.LOTNO_SNO) + ELSE CONCAT(p.LOTNO_MNO, '') + end AS LOTNO_NO, + p.DTL_ADDR, /* 상세주소 */ + p.LDCG_CD, /* 지목 코드 */ + ldcg.CD_NM AS LDCG_CD_NM, /* 지목 코드명 */ + (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_NAMS, + (SELECT GROUP_CONCAT(DISTINCT o2.FLNM SEPARATOR ', ') + FROM tb_actr_info ai + LEFT JOIN tb_ownr o2 ON o2.OWNR_ID = ai.OWNR_ID AND o2.DEL_YN = 'N' + WHERE ai.CRDN_YR = c.CRDN_YR + AND ai.CRDN_NO = c.CRDN_NO + AND ai.DEL_YN = 'N') AS ACTR_NAMS, + a.ACT_TYPE_CD, /* 행위 유형 코드 */ + CASE WHEN IFNULL(act_cnt.ACT_ALL_CNT, 0) > 1 THEN + CONCAT(act.VLTN_BDST, ' 등 ', act_cnt.ACT_ALL_CNT, '건') + ELSE act.VLTN_BDST END ACT_TYPE_CD_NM, + IFNULL(act_cnt.ACT_ALL_CNT, 0) as ACT_ALL_CNT, + IFNULL(act_cnt.ACT_COMPLT_CNT, 0) as ACT_COMPLT_CNT, + /* 중요로직: ACT_CMPLT_CD를 메인 SELECT에서 직접 계산 - 외부 SELECT에서 재계산 불필요 */ + case when IFNULL(act_cnt.ACT_ALL_CNT, 0) = 0 then '0' + when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '1' + when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) = IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '3' + else '-' + end as ACT_CMPLT_CD, /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 3] */ + a.USG_IDX_CD, /* 용도 지수 코드 */ + usg.USG_NM AS USG_IDX_CD_NM, + a.AREA, /* 면적 */ + a.STRCT_IDX_CD, /* 구조 지수 코드 */ + strct.STRCT_NM AS STRCT_IDX_CD_NM /* 구조 지수 코드명 */ + FROM tb_crdn c + LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = c.SGG_CD + LEFT JOIN tb_cd_detail rgn ON rgn.CD_GROUP_ID = 'RGN_SE_CD' AND rgn.CD_ID = c.RGN_SE_CD + LEFT JOIN tb_cd_detail dscl ON dscl.CD_GROUP_ID = 'DSCL_MTHD_CD' AND dscl.CD_ID = c.DSCL_MTHD_CD + LEFT JOIN tb_cd_detail stts ON stts.CD_GROUP_ID = 'CRDN_PRCS_STTS_CD' AND stts.CD_ID = c.CRDN_PRCS_STTS_CD + LEFT JOIN tb_user u ON u.USER_ID = c.RGTR AND u.USE_YN = 'Y' + 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 tb_cd_detail emd ON emd.CD_GROUP_ID = 'STDG_EMD_CD' AND emd.CD_ID = p.STDG_EMD_CD + LEFT JOIN tb_cd_detail ldcg ON ldcg.CD_GROUP_ID = 'LDCG_CD' AND ldcg.CD_ID = p.LDCG_CD + 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_act_info a ON a.CRDN_YR = c.CRDN_YR and a.CRDN_NO = c.CRDN_NO AND a.DEL_YN = 'N' AND a.ACT_NO = (SELECT MIN(a1.ACT_NO) FROM tb_act_info a1 WHERE a1.CRDN_YR = a.CRDN_YR AND a1.CRDN_NO = a.CRDN_NO AND a1.DEL_YN='N') + LEFT JOIN tb_act_type act ON act.ACT_TYPE_CD = a.ACT_TYPE_CD + LEFT JOIN tb_usg_idx usg ON usg.USG_IDX_CD = a.USG_IDX_CD + LEFT JOIN tb_strct_idx strct ON strct.STRCT_IDX_CD = a.STRCT_IDX_CD + WHERE c.DEL_YN = 'N' + ) m WHERE 1=1 @@ -727,7 +526,15 @@ p.ZIP, ai.ACT_TYPE_CD, /* 행위 유형 코드 */ ai.USG_IDX_CD, /* 용도 지수 코드 */ - ai.ACT_INFO_ID + ai.ACT_INFO_ID, + IFNULL(act_cnt.ACT_ALL_CNT, 0) as ACT_ALL_CNT, + IFNULL(act_cnt.ACT_COMPLT_CNT, 0) as ACT_COMPLT_CNT, + /* 중요로직: ACT_CMPLT_CD를 메인 SELECT에서 직접 계산 - 외부 SELECT에서 재계산 불필요 */ + case when IFNULL(act_cnt.ACT_ALL_CNT, 0) = 0 then '0' + when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) != IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '1' + when IFNULL(act_cnt.ACT_ALL_CNT, 0) != 0 and IFNULL(act_cnt.ACT_ALL_CNT, 0) = IFNULL(act_cnt.ACT_COMPLT_CNT, 0) then '3' + else '-' + end as ACT_CMPLT_CD /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 3] */ FROM tb_crdn c inner join tb_act_info ai on ai.CRDN_NO = c.CRDN_NO and ai.CRDN_YR = c.CRDN_YR and ai.ACTN_PRCS_STTS_CD != '3' and ai.DEL_YN = 'N' LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = c.SGG_CD @@ -737,60 +544,27 @@ LEFT JOIN tb_user u ON u.USER_ID = c.RGTR AND u.USE_YN = 'Y' 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 tb_cd_detail emd ON emd.CD_GROUP_ID = 'STDG_EMD_CD' AND emd.CD_ID = p.STDG_EMD_CD + 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_act_type act ON act.ACT_TYPE_CD = ai.ACT_TYPE_CD LEFT JOIN tb_usg_idx usg ON usg.USG_IDX_CD = ai.USG_IDX_CD LEFT JOIN tb_strct_idx strct_ai ON strct_ai.STRCT_IDX_CD = ai.STRCT_IDX_CD WHERE c.DEL_YN = 'N' - - AND c.CRDN_YR = #{schCrdnYr} - - - AND c.CRDN_NO LIKE CONCAT('%', #{schCrdnNo}, '%') - - - AND p.STDG_EMD_CD IN - - #{emdCd} - - - - AND c.RGN_SE_CD = #{schRgnSeCd} - - - AND c.DSCL_MTHD_CD = #{schDsclMthdCd} - - - AND c.EXMNR LIKE CONCAT('%', #{schExmnr}, '%') - - - AND c.CRDN_PRCS_STTS_CD = #{schCrdnPrcsSttsCd} - - - AND c.CRDN_PRCS_YMD >= #{schPrcsSttsStartDt} - - - AND c.CRDN_PRCS_YMD <= #{schPrcsSttsEndDt} - - - AND c.AGRVTN_LEVY_TRGT_YN = #{schAgrvtnLevyTrgtYn} - - - AND p.ZIP LIKE CONCAT('%', #{schZip}, '%') - - - AND p.LOTNO_ADDR LIKE CONCAT('%', #{schLotnoAddr}, '%') - - - AND p.DTL_ADDR LIKE CONCAT('%', #{schDtlAddr}, '%') - - - AND p.LOTNO_MNO = #{schLotnoMno} - - - AND p.LOTNO_SNO = #{schLotnoSno} - + ) m WHERE 1=1 + + /* 중요로직: ACT_CMPLT_CD가 메인 SELECT에서 이미 계산되어 단순 비교만 수행 */ + AND m.ACT_CMPLT_CD = #{schActCmpltCd} /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 2] */ + ORDER BY m.CRDN_YR DESC, m.CRDN_NO DESC, m.ACT_INFO_ID