From 29dac0538f3c448d165028a3c9303325aadd84b6 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 13:56:20 +0900 Subject: [PATCH] =?UTF-8?q?####=20feat:=20=EA=B7=B8=EB=A6=AC=EB=93=9C=20?= =?UTF-8?q?=EA=B3=A0=EC=A0=95=EC=BB=AC=EB=9F=BC=20=EC=98=B5=EC=85=98=20?= =?UTF-8?q?=EB=B0=8F=20=EC=97=91=EC=85=80=20=EB=8B=A4=EC=9A=B4=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20-=20?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EB=93=9C=20=EC=BB=AC=EB=9F=BC=20=EA=B3=A0?= =?UTF-8?q?=EC=A0=95(frozen=20column)=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80:=20=EA=B3=A0=EC=A0=95=20=EA=B0=AF=EC=88=98,=20?= =?UTF-8?q?=EB=B3=B4=EB=8D=94=20=EB=91=90=EA=BB=98=20=EB=B0=8F=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=20=EC=A1=B0=EC=A0=95=20=EA=B0=80=EB=8A=A5=20-=20"?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EB=93=9C=20=EC=97=91=EC=85=80=20=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=EB=A1=9C=EB=93=9C"=20=EB=B2=84=ED=8A=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EA=B8=B0=EC=A1=B4=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=88=98=EC=A0=95("=ED=96=89?= =?UTF-8?q?=EC=9C=84=EB=B3=84=20=EC=97=91=EC=85=80=20=EB=8B=A4=EC=9A=B4?= =?UTF-8?q?=EB=A1=9C=EB=93=9C")?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### feat: 데이터 조회 필드 확장 - 지목 코드 및 상세주소 관련 필드 추가: VO, MyBatis Mapper 수정 - 구조 지수 및 면적 필드 추가로 데이터 조회 및 출력 가능 #### refactor: 그리드 컬럼 구성 재정비 - 가독성을 위해 컬럼 순서 및 크기 조정 - 사용되지 않거나 중복되는 위치 관련 컬럼 주석 처리 #### fix: 일부 컬럼 출력 로직 변경 - 번호 컬럼 및 날자 계산 코드 개선 - 지번 및 행위 타입 표현 형식 정정 #### style: UI 및 네이밍 정리 - JSP 파일 버튼 및 컬럼명 텍스트 수정 - 코드 내 주석 및 포매팅 개선 --- .../main/model/CrdnRegistAndViewVO.java | 24 +++ .../main/CrdnRegistAndViewMapper_maria.xml | 12 +- .../crdn/crndRegistAndView/main/list.jsp | 199 +++++++++++------- 3 files changed, 159 insertions(+), 76 deletions(-) diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnRegistAndViewVO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnRegistAndViewVO.java index 11aa2f8..ce62c16 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnRegistAndViewVO.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnRegistAndViewVO.java @@ -178,6 +178,30 @@ public class CrdnRegistAndViewVO extends PagingVO { /** 우편번호 */ private String zip; + + /** 지번 본번 */ + private String lotnoMno; + + /** 지번 부번 */ + private String lotnoSno; + + /** 상세주소 */ + private String dtlAddr; + + /** 지목 코드 */ + private String ldcgCd; + + /** 지목 코드명 */ + private String ldcgCdNm; + + /** 면적 */ + private String area; + + /** 구조 지수 코드 */ + private String strctIdxCd; + + /** 구조 지수 코드명 */ + private String strctIdxCdNm; /** 조치처리상태 실제코드없음, join 된 row별 ACTN_PRCS_STTS_CD로 확인 [행위정보없음 0: , 미조치 : 1, 조치완료 : 3] */ private String actCmpltCd; 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 677fb46..29e21d8 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 @@ -47,6 +47,11 @@ p.STDG_EMD_CD, /* 법정동 읍면동 코드 */ emd.CD_NM AS STDG_EMD_CD_NM, p.ZIP, + p.LOTNO_MNO, /* 지번 본번 */ + p.LOTNO_SNO, /* 지번 부번 */ + 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' @@ -72,7 +77,10 @@ else '-' end as ACT_CMPLT_CD, /* [행위정보없음 0: , 미조치 : 1, 조치완료 : 2] */ a.USG_IDX_CD, /* 용도 지수 코드 */ - usg.USG_NM AS USG_IDX_CD_NM + 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 @@ -81,6 +89,7 @@ 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, @@ -94,6 +103,7 @@ 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} diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/list.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/list.jsp index f9619b5..eca4c67 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/list.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/list.jsp @@ -12,8 +12,11 @@
+ @@ -261,6 +264,11 @@ useClient: false, // 클라이언트 페이징 여부(false: 서버 페이징) perPage: perPage // 페이지당 표시 건수 }); + gridConfig.setOptColumnOptions({ //컬럼고정 옵션 + frozenCount: 9 //고정컬럼 갯수 + , frozenBorderWidth: 2 //고정컬럼 보더(border) 두께 + , resizable: true //최소 사이즈 + }); gridConfig.setOptColumns(this.getGridColumns()); return gridConfig; @@ -277,7 +285,7 @@ header: '번호', name: '_rowNum', align: 'center', - width: 60, + width: 40, sortable: false, formatter: function(e) { // 서버사이드 페이징에서 역순 번호 계산 @@ -289,148 +297,189 @@ return totalCount - (page - 1) * perPage - rowIndex; } }, - { header: '단속년도', name: 'crdnYr', align: 'center', width: 80, sortingType: 'desc' }, - { header: '단속번호', name: 'crdnNo', align: 'center', width: 90 }, - { header: '법정동', name: 'stdgEmdCdNm', align: 'center', width: 90 }, - { header: '지역구분', name: 'rgnSeCdNm', align: 'center', width: 100 }, - { header: '적발방법', name: 'dsclMthdCdNm', align: 'center', width: 120 }, - { - header: '조사일자', - name: 'dsclYmd', - align: 'center', - width: 100, - formatter: function (e) { - return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; - } - }, - { header: '조사원', name: 'exmnr', align: 'left', width: 130 }, + { header: '단속년도', name: 'crdnYr', align: 'center', width: 60, sortingType: 'desc' }, + { header: '단속번호', name: 'crdnNo', align: 'center', width: 60 }, { - header: '재부과여부', + header: '재부과', name: 'relevyYn', align: 'center', - width: 80, + width: 60, formatter: function(e) { return e.value === 'Y' ? '재부과' : '일반'; } }, { - header: '가중부과대상', - name: 'agrvtnLevyTrgtYn', - align: 'center', - width: 100, + header: '소유자', + name: 'ownrNams', + align: 'left', + width: 80, formatter: function(e) { - return e.value === 'Y' ? '대상' : '비대상'; + return e.value; } }, - { header: '진행단계', name: 'crdnPrcsSttsCdNm', align: 'center', width: 100 }, { - header: '조치처리상태', - name: 'actCmpltCd', - align: 'center', - width: 100, + header: '행위자', + name: 'actrNams', + align: 'left', + width: 80, formatter: function(e) { - /* 행위정보없음 0, 미조치 1, 조치완료 3 */ - if (e.value === '0') return '행위정보없음'; - else if (e.value === '1') return '미조치'; - else if (e.value === '3') return '조치완료'; - else return e.value || ''; + return e.value; } }, + { header: '법정동', name: 'stdgEmdCdNm', align: 'center', width: 60 }, { - header: '위치', - name: 'lotnoWholAddr', - align: 'left', - minWidth: 300, + header: '지번', + name: 'lotnoMno', + align: 'center', + width: 60, formatter: function(e) { - return e.value; + /* 지번 본번-부번 형식 */ + if (e.row.lotnoMno && e.row.lotnoSno) { + return e.row.lotnoMno + '-' + e.row.lotnoSno; + } else if (e.row.lotnoMno) { + return e.row.lotnoMno; + } + return ''; } }, + { header: '상세주소', name: 'dtlAddr', align: 'left', width: 100 }, { - header: '행위유형', + header: '행위내용', name: 'actTypeCdNm', align: 'left', - width: 130, + width: 85, formatter: function(e) { return e.value; } }, + { header: '지목', name: 'ldcgCdNm', align: 'center', width: 80 }, { header: '용도', name: 'usgIdxCdNm', align: 'left', - width: 130, + width: 80, formatter: function(e) { return e.value; } }, + { header: '면적', name: 'area', align: 'right', width: 60 }, + { header: '구조', name: 'strctIdxCdNm', align: 'center', width: 60 }, { - header: '소유자', - name: 'ownrNams', - align: 'left', - width: 130, + header: '가중부과', + name: 'agrvtnLevyTrgtYn', + align: 'center', + width: 60, formatter: function(e) { - return e.value; + return e.value === 'Y' ? '대상' : '비대상'; } }, { - header: '행위자', - name: 'actrNams', - align: 'left', - width: 130, - formatter: function(e) { - return e.value; + header: '조사일자', + name: 'dsclYmd', + align: 'center', + width: 80, + formatter: function (e) { + return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, { - header: '이행정보 이력', - name: 'impltTaskHistoryBtn', - width: 120, + header: '처분사전', + name: 'dspsBfhdBgngYmd', align: 'center', - formatter: function(value) { - return '이행 이력'; + width: 80, + formatter: function (e) { + return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, { - header: '재부과 이력', - name: 'relevyHistoryBtn', - width: 120, + header: '시정명령', + name: 'crcCmdBgngYmd', align: 'center', - formatter: function(value) { - return '재부과 이력'; - } - }, - { header: '처분사전 일자', name: 'dspsBfhdBgngYmd', align: 'center', width: 120, + width: 80, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, - { header: '시정명령 일자', name: 'crcCmdBgngYmd', align: 'center', width: 120, + { + header: '시정촉구', + name: 'crcUrgBgngYmd', + align: 'center', + width: 80, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, - { header: '시정촉구 일자', name: 'crcUrgBgngYmd', align: 'center', width: 120, + { + header: '부과예고', + name: 'levyPrvntcBgngYmd', + align: 'center', + width: 80, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, - { header: '부과예고 일자', name: 'levyPrvntcBgngYmd', align: 'center', width: 120, + { + header: '부과', + name: 'levyBgngYmd', + align: 'center', + width: 80, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, - { header: '부과 일자', name: 'levyBgngYmd', align: 'center', width: 120, + { + header: '납부촉구', + name: 'payUrgBgngYmd', + align: 'center', + width: 80, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; } }, - { header: '납부촉구 일자', name: 'payUrgBgngYmd', align: 'center', width: 120, - formatter: function (e) { - return e.value ? moment(e.value).format('YYYY-MM-DD') : ''; + { header: '진행단계', name: 'crdnPrcsSttsCdNm', align: 'center', width: 80 }, + { + header: '조치처리상태', + name: 'actCmpltCd', + align: 'center', + width: 80, + formatter: function(e) { + /* 행위정보없음 0, 미조치 1, 조치완료 3 */ + if (e.value === '0') return '행위정보없음'; + else if (e.value === '1') return '미조치'; + else if (e.value === '3') return '조치완료'; + else return e.value || ''; + } + }, + /*{ + header: '위치', + name: 'lotnoWholAddr', + align: 'left', + minWidth: 300, + formatter: function(e) { + return e.value; + } + },*/ + { + header: '이행정보 이력', + name: 'impltTaskHistoryBtn', + width: 100, + align: 'center', + formatter: function(value) { + return '이행 이력'; + } + }, + { + header: '재부과 이력', + name: 'relevyHistoryBtn', + width: 100, + align: 'center', + formatter: function(value) { + return '재부과 이력'; } }, - { header: '등록일시', name: 'regDt', align: 'center', width: 150 }, - { header: '등록자', name: 'rgtrNm', align: 'center', width: 100 }, + { header: '적발방법', name: 'dsclMthdCdNm', align: 'center', width: 100 }, + { header: '등록일시', name: 'regDt', align: 'center', width: 120 }, + { header: '등록자', name: 'rgtrNm', align: 'center', width: 80 }, ]; },