법정동 및 주소 검색 조건 추가, 관련 VO/Mapper/뷰 수정

dev
박성영 2 months ago
parent 3d471b2002
commit a7ab9809da

@ -63,6 +63,14 @@ public class LevyController {
.sortAscending(true)
.build();
model.addAttribute("impltTaskSeCdList", commonCodeService.selectCodeDetailList(impltTaskSeCdSearchVO));
//법정동 읍면동 코드 조회(법정동 검색용)
CmmnCodeSearchVO stdgEmdCdSearchVO = CmmnCodeSearchVO.builder()
.searchCdGroupId("STDG_EMD_CD")
.sortColumn("SORT_ORDR")
.sortAscending(true)
.build();
model.addAttribute("stdgEmdCdList", commonCodeService.selectCodeDetailList(stdgEmdCdSearchVO));
return "levy/levy/list"+ TilesConstants.BASE;
}

@ -115,19 +115,37 @@ public class LevyNotiImpltInfoVO extends PagingVO {
private String rgtrNm;
private String mdrfNm;
// ==================== 검색 조건 ====================
// ==================== 검색 조건 ====================
/** 검색 조건 - 단속 연도 */
private String schCrdnYr;
/** 검색 조건 - 단속 연도 */
private String schCrdnYr;
/** 검색 조건 - 진행 단계 코드 */
private String schImpltTaskSeCd;
/** 검색 조건 - 진행 단계 코드 */
private String schImpltTaskSeCd;
/** 검색 조건 - 행정처분시작일 */
private String schImpltBgngYmd1;
private String schImpltBgngYmd2;
// ==================== 이행 대상자 정보, 등록용도 ====================
/** 검색 조건 - 행정처분시작일 */
private String schImpltBgngYmd1;
private String schImpltBgngYmd2;
/** 이행 대상자 정보 리스트 */
private List<NotiImpltTrprInfoVO> impltTrprInfoList;
/** 검색 조건 - 법정동 읍면동 코드 */
private String schStdgEmdCd;
/** 검색 조건 - 우편번호 */
private String schZip;
/** 검색 조건 - 지번 주소 */
private String schLotnoAddr;
/** 검색 조건 - 상세 주소 */
private String schDtlAddr;
/** 검색 조건 - 지번 본번 */
private String schLotnoMno;
/** 검색 조건 - 지번 부번 */
private String schLotnoSno;
// ==================== 이행 대상자 정보, 등록용도 ====================
/** 이행 대상자 정보 리스트 */
private List<NotiImpltTrprInfoVO> impltTrprInfoList;
}

@ -61,6 +61,14 @@ public class NotiController {
.sortAscending(true)
.build();
model.addAttribute("impltTaskSeCdList", commonCodeService.selectCodeDetailList(impltTaskSeCdSearchVO));
// 법정동 읍면동 코드 조회(법정동 검색용)
CmmnCodeSearchVO stdgEmdCdSearchVO = CmmnCodeSearchVO.builder()
.searchCdGroupId("STDG_EMD_CD")
.sortColumn("SORT_ORDR")
.sortAscending(true)
.build();
model.addAttribute("stdgEmdCdList", commonCodeService.selectCodeDetailList(stdgEmdCdSearchVO));
return "noti/list"+ TilesConstants.BASE;
}

@ -136,6 +136,24 @@ public class NotiImpltInfoVO extends PagingVO {
/** 검색 조건 - 행정처분시작일 */
private String schImpltBgngYmd1;
private String schImpltBgngYmd2;
/** 검색 조건 - 법정동 읍면동 코드 */
private String schStdgEmdCd;
/** 검색 조건 - 우편번호 */
private String schZip;
/** 검색 조건 - 지번 주소 */
private String schLotnoAddr;
/** 검색 조건 - 상세 주소 */
private String schDtlAddr;
/** 검색 조건 - 지번 본번 */
private String schLotnoMno;
/** 검색 조건 - 지번 부번 */
private String schLotnoSno;
// ==================== 이행 대상자 정보, 등록용도 ====================
/** 이행 대상자 정보 리스트 */

@ -31,6 +31,7 @@
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 /* 수정자 명 */
@ -52,6 +53,24 @@
<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>
ORDER BY CRDN_NO DESC
<if test='pagingYn != null and pagingYn == "Y"'>
LIMIT #{startIndex}, #{perPage}
@ -73,6 +92,24 @@
<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>
</select>

@ -61,6 +61,24 @@
<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>
ORDER BY ii.CRDN_NO DESC, a.ACT_NO ASC
<if test='pagingYn != null and pagingYn == "Y"'>
LIMIT #{startIndex}, #{perPage}

@ -43,6 +43,26 @@
style="width: 120px;" maxlength="10" validation-check="required"
value="${dateUtil:getCurrentDateTime('yyyy-MM-dd')}" />
</li>
<li class="th">법정동</li>
<li>
<select id="schStdgEmdCd" name="schStdgEmdCd" class="input" style="width: 120px;">
<option value="">전체</option>
<c:forEach var="code" items="${stdgEmdCdList}">
<option value="${code.cdId}" <c:if test="${param.schStdgEmdCd eq code.cdId}">selected</c:if>>${code.cdNm}</option>
</c:forEach>
</select>
</li>
</ul>
<ul class="lef2">
<li class="th">주소 검색</li>
<li>
<input type="text" id="schZip" name="schZip" class="input" style="width: 80px;" maxlength="6" autocomplete="off" placeholder="우편번호"/>
<input type="text" id="schLotnoAddr" name="schLotnoAddr" class="input" style="width: 200px;" maxlength="400" autocomplete="off" placeholder="지번주소"/>
<input type="text" id="schDtlAddr" name="schDtlAddr" class="input" style="width: 150px;" maxlength="380" autocomplete="off" placeholder="상세주소"/>
<input type="text" id="schLotnoMno" name="schLotnoMno" class="input" style="width: 60px;" maxlength="4" autocomplete="off" placeholder="본번"/>
<input type="text" id="schLotnoSno" name="schLotnoSno" class="input" style="width: 60px;" maxlength="4" autocomplete="off" placeholder="부번"/>
<button class="newbtnss bg1" type="button" id="btnAddrSearch">주소 찾기</button>
</li>
</ul>
<ul class="rig2">
<li><button type="button" id="search_btn" class="newbtnss bg1">검색</button></li>
@ -133,11 +153,23 @@
var schImpltTaskSeCd = $.trim(nvl($("#schImpltTaskSeCd").val(), ""));
var schImpltBgngYmd1 = $.trim(nvl($("#schImpltBgngYmd1").val(), "")).replace(/-/g, "");
var schImpltBgngYmd2 = $.trim(nvl($("#schImpltBgngYmd2").val(), "")).replace(/-/g, "");
var schStdgEmdCd = $.trim(nvl($("#schStdgEmdCd").val(), ""));
var schZip = $.trim(nvl($("#schZip").val(), ""));
var schLotnoAddr = $.trim(nvl($("#schLotnoAddr").val(), ""));
var schDtlAddr = $.trim(nvl($("#schDtlAddr").val(), ""));
var schLotnoMno = $.trim(nvl($("#schLotnoMno").val(), ""));
var schLotnoSno = $.trim(nvl($("#schLotnoSno").val(), ""));
SEARCH_MASTER_COND.schCrdnYr = schCrdnYr;
SEARCH_MASTER_COND.schImpltTaskSeCd = schImpltTaskSeCd;
SEARCH_MASTER_COND.schImpltBgngYmd1 = schImpltBgngYmd1;
SEARCH_MASTER_COND.schImpltBgngYmd2 = schImpltBgngYmd2;
SEARCH_MASTER_COND.schStdgEmdCd = schStdgEmdCd;
SEARCH_MASTER_COND.schZip = schZip;
SEARCH_MASTER_COND.schLotnoAddr = schLotnoAddr;
SEARCH_MASTER_COND.schDtlAddr = schDtlAddr;
SEARCH_MASTER_COND.schLotnoMno = schLotnoMno;
SEARCH_MASTER_COND.schLotnoSno = schLotnoSno;
//console.log(SEARCH_MASTER_COND.schImpltBgngYmd2);
};
@ -234,7 +266,7 @@
header: '행정처분시작일',
name: 'impltBgngYmd',
align: 'center',
width: 110,
width: 120,
formatter: function (e) {
return e.value ? moment(e.value).format('YYYY-MM-DD') : '';
}
@ -243,22 +275,23 @@
header: '행정처분종료일',
name: 'impltEndYmd',
align: 'center',
width: 110,
width: 120,
formatter: function (e) {
return e.value ? moment(e.value).format('YYYY-MM-DD') : '';
}
},
{ header: '위치', name: 'lotnoWholAddr', align: 'left', minWidth: 300 },
{
header: '등록일시',
name: 'regDt',
align: 'center',
width: 130
width: 140
},
{
header: '등록자',
name: 'rgtrNm',
align: 'center',
width: 100
width: 120
}
];
},
@ -557,6 +590,14 @@
$("#schImpltBgngYmd1").val(INITIAL_SEARCH_VALUES.schImpltBgngYmd1);
$("#schImpltBgngYmd2").val(INITIAL_SEARCH_VALUES.schImpltBgngYmd2);
// 추가 검색 조건 초기화(법정동/주소)
$("#schStdgEmdCd").val("");
$("#schZip").val("");
$("#schLotnoAddr").val("");
$("#schDtlAddr").val("");
$("#schLotnoMno").val("");
$("#schLotnoSno").val("");
// 마스터 그리드만 1페이지부터 재조회 (상세는 마스터 성공 시 초기화)
self.masterGrid.instance.readData(1);
});
@ -583,6 +624,26 @@
$("#openReviBtn").on('click', function() {
self.openReviReport();
});
// 주소 찾기 버튼 클릭 이벤트
$("#btnAddrSearch").on('click', function() {
var popUrl = '<c:url value="/common/address/search.do"/>';
var params = '?callback=searchAddrCallback';
// 중요로직: 법정동이 선택된 경우 동 이름을 검색어로 전달(시군구명 + 읍면동명)
var selectedEmd = $('#schStdgEmdCd').val();
if (selectedEmd) {
var selectedEmdText = $('#schStdgEmdCd option:selected').text();
if (selectedEmdText && selectedEmdText !== '전체') {
params += '&keyword=' + encodeURIComponent( '${sessionScope.sessionVO.user.orgCdNm} ' + selectedEmdText + ' ');
}
} else {
params += '&keyword=' + encodeURIComponent( '${sessionScope.sessionVO.user.orgCdNm} ');
}
popUrl += params;
openPopup(popUrl, 570, 530, '주소 찾기');
});
},
/**
@ -606,6 +667,21 @@
LevyList.refreshList();
};
/**
* 주소 검색 콜백 함수
* - 주소 검색 팝업의 검색결과를 전달 받아 해당 필드에 설정
* @param {Object} obj - 주소 검색 결과 객체
*/
window.searchAddrCallback = function(obj) {
// 중요로직: 주소 검색 결과를 각 필드에 설정
$("#schZip").val(obj.zipNo || "");
$("#schLotnoAddr").val(obj.jibunAddr || "");
$("#schLotnoMno").val(obj.lnbrMnnm || "");
$("#schLotnoSno").val(obj.lnbrSlno || "");
// 상세주소는 사용자가 직접 입력
$("#schDtlAddr").focus();
};
// DOM 준비 완료 시 초기화
$(document).ready(function() {
LevyList.init();

@ -42,6 +42,26 @@
style="width: 120px;" maxlength="10" validation-check="required"
value="${dateUtil:getCurrentDateTime('yyyy-MM-dd')}" />
</li>
<li class="th">법정동</li>
<li>
<select id="schStdgEmdCd" name="schStdgEmdCd" class="input" style="width: 120px;">
<option value="">전체</option>
<c:forEach var="code" items="${stdgEmdCdList}">
<option value="${code.cdId}" <c:if test="${param.schStdgEmdCd eq code.cdId}">selected</c:if>>${code.cdNm}</option>
</c:forEach>
</select>
</li>
</ul>
<ul class="lef2">
<li class="th">주소 검색</li>
<li>
<input type="text" id="schZip" name="schZip" class="input" style="width: 80px;" maxlength="6" autocomplete="off" placeholder="우편번호"/>
<input type="text" id="schLotnoAddr" name="schLotnoAddr" class="input" style="width: 200px;" maxlength="400" autocomplete="off" placeholder="지번주소"/>
<input type="text" id="schDtlAddr" name="schDtlAddr" class="input" style="width: 150px;" maxlength="380" autocomplete="off" placeholder="상세주소"/>
<input type="text" id="schLotnoMno" name="schLotnoMno" class="input" style="width: 60px;" maxlength="4" autocomplete="off" placeholder="본번"/>
<input type="text" id="schLotnoSno" name="schLotnoSno" class="input" style="width: 60px;" maxlength="4" autocomplete="off" placeholder="부번"/>
<button class="newbtnss bg1" type="button" id="btnAddrSearch">주소 찾기</button>
</li>
</ul>
<ul class="rig2">
<li><button type="button" id="search_btn" class="newbtnss bg1">검색</button></li>
@ -119,11 +139,23 @@
var schImpltTaskSeCd = $.trim(nvl($("#schImpltTaskSeCd").val(), ""));
var schImpltBgngYmd1 = $.trim(nvl($("#schImpltBgngYmd1").val(), "")).replace(/-/g, "");
var schImpltBgngYmd2 = $.trim(nvl($("#schImpltBgngYmd2").val(), "")).replace(/-/g, "");
var schStdgEmdCd = $.trim(nvl($("#schStdgEmdCd").val(), ""));
var schZip = $.trim(nvl($("#schZip").val(), ""));
var schLotnoAddr = $.trim(nvl($("#schLotnoAddr").val(), ""));
var schDtlAddr = $.trim(nvl($("#schDtlAddr").val(), ""));
var schLotnoMno = $.trim(nvl($("#schLotnoMno").val(), ""));
var schLotnoSno = $.trim(nvl($("#schLotnoSno").val(), ""));
SEARCH_MASTER_COND.schCrdnYr = schCrdnYr;
SEARCH_MASTER_COND.schImpltTaskSeCd = schImpltTaskSeCd;
SEARCH_MASTER_COND.schImpltBgngYmd1 = schImpltBgngYmd1;
SEARCH_MASTER_COND.schImpltBgngYmd2 = schImpltBgngYmd2;
SEARCH_MASTER_COND.schStdgEmdCd = schStdgEmdCd;
SEARCH_MASTER_COND.schZip = schZip;
SEARCH_MASTER_COND.schLotnoAddr = schLotnoAddr;
SEARCH_MASTER_COND.schDtlAddr = schDtlAddr;
SEARCH_MASTER_COND.schLotnoMno = schLotnoMno;
SEARCH_MASTER_COND.schLotnoSno = schLotnoSno;
};
var NotiList = {
@ -378,6 +410,14 @@
$("#schImpltBgngYmd1").val(INITIAL_SEARCH_VALUES.schImpltBgngYmd1);
$("#schImpltBgngYmd2").val(INITIAL_SEARCH_VALUES.schImpltBgngYmd2);
// 추가 검색 조건 초기화(법정동/주소)
$("#schStdgEmdCd").val("");
$("#schZip").val("");
$("#schLotnoAddr").val("");
$("#schDtlAddr").val("");
$("#schLotnoMno").val("");
$("#schLotnoSno").val("");
self.masterGrid.instance.readData(1);
});
@ -392,6 +432,26 @@
var perPage = parseInt($(this).val(), 10);
self.masterGrid.instance.setPerPage(perPage);
});
// 주소 찾기 버튼 클릭 이벤트
$("#btnAddrSearch").on('click', function() {
var popUrl = '<c:url value="/common/address/search.do"/>';
var params = '?callback=searchAddrCallback';
// 중요로직: 법정동이 선택된 경우 동 이름을 검색어로 전달(시군구명 + 읍면동명)
var selectedEmd = $('#schStdgEmdCd').val();
if (selectedEmd) {
var selectedEmdText = $('#schStdgEmdCd option:selected').text();
if (selectedEmdText && selectedEmdText !== '전체') {
params += '&keyword=' + encodeURIComponent( '${sessionScope.sessionVO.user.orgCdNm} ' + selectedEmdText + ' ');
}
} else {
params += '&keyword=' + encodeURIComponent( '${sessionScope.sessionVO.user.orgCdNm} ');
}
popUrl += params;
openPopup(popUrl, 570, 530, '주소 찾기');
});
},
init: function() {
@ -408,6 +468,21 @@
NotiList.refreshList();
};
/**
* 주소 검색 콜백 함수
* - 주소 검색 팝업의 검색결과를 전달 받아 해당 필드에 설정
* @param {Object} obj - 주소 검색 결과 객체
*/
window.searchAddrCallback = function(obj) {
// 중요로직: 주소 검색 결과를 각 필드에 설정
$("#schZip").val(obj.zipNo || "");
$("#schLotnoAddr").val(obj.jibunAddr || "");
$("#schLotnoMno").val(obj.lnbrMnnm || "");
$("#schLotnoSno").val(obj.lnbrSlno || "");
// 상세주소는 사용자가 직접 입력
$("#schDtlAddr").focus();
};
$(document).ready(function() {
NotiList.init();
});

Loading…
Cancel
Save