문자전송 > 주소록 불러오기 건수 테스트
This commit is contained in:
parent
c72fd172ed
commit
156700aa4c
@ -412,5 +412,39 @@ public class AddrVO extends ComDefaultVO{
|
||||
}
|
||||
|
||||
|
||||
|
||||
private int page = 1; // 기본 값 설정
|
||||
private int size = 10; // 기본 값 설정
|
||||
private int offset; // 기본 값 설정
|
||||
|
||||
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPage(int page) {
|
||||
if(page > 0) {
|
||||
this.page = page;
|
||||
}
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public void setSize(int size) {
|
||||
if(size > 0) {
|
||||
this.size = size;
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET 계산 메서드 추가
|
||||
public int getOffset() {
|
||||
return (page - 1) * size;
|
||||
}
|
||||
public void setOffset(int offset) {
|
||||
this.offset = offset;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -174,5 +174,7 @@ public interface MjonMsgDataService {
|
||||
public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception;
|
||||
|
||||
public List<AddrVO> selectMsgAddrListAjax_advc(AddrVO addrVO) throws Exception;
|
||||
|
||||
public int countByMsgAddrListAjax_advc(AddrVO addrVO) throws Exception;
|
||||
|
||||
}
|
||||
|
||||
@ -355,5 +355,10 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
|
||||
public List<AddrVO> selectMsgAddrListAjax_advc(AddrVO addrVO) {
|
||||
return (List<AddrVO>) list("mjonMsgDAO.selectMsgAddrListAjax_advc", addrVO);
|
||||
}
|
||||
|
||||
|
||||
public int countByMsgAddrListAjax_advc(AddrVO addrVO) {
|
||||
return (int) select("mjonMsgDAO.countByMsgAddrListAjax_advc", addrVO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3057,5 +3057,11 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
return mjonMsgDataDAO.selectMsgAddrListAjax_advc(addrVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countByMsgAddrListAjax_advc(AddrVO addrVO) throws Exception {
|
||||
|
||||
return mjonMsgDataDAO.countByMsgAddrListAjax_advc(addrVO);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -40,6 +40,8 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.ui.ModelMap;
|
||||
@ -1759,8 +1761,7 @@ public class MjonMsgDataController {
|
||||
|
||||
long startTime = System.currentTimeMillis(); // 시작 시간 측정
|
||||
|
||||
// List<AddrVO> resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO);
|
||||
List<AddrVO> resultAddrList = mjonMsgDataService.selectMsgAddrListAjax_advc(addrVO);
|
||||
List<AddrVO> resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO);
|
||||
|
||||
long endTime = System.currentTimeMillis(); // 종료 시간 측정
|
||||
|
||||
@ -1775,6 +1776,56 @@ public class MjonMsgDataController {
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
/**
|
||||
* 주소록 그룹 선택시 우측 주소록 리스트 화면 불러오기
|
||||
*
|
||||
* @param AddrGroupVO
|
||||
* @param AddrVO
|
||||
* @param sessionVO
|
||||
* @param model
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/msgdata/selectMsgAddrListAjax_advc.do"})
|
||||
public ResponseEntity<?> selectMsgAddrListAjax_advc(@ModelAttribute("searchVO") AddrVO addrVO) {
|
||||
|
||||
Map<String, Object> response = new HashMap<>();
|
||||
|
||||
try {
|
||||
// 로그인 권한 정보 확인
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() : null;
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
|
||||
if (userId.isEmpty()) {
|
||||
response.put("result", "loginFail");
|
||||
response.put("message", "로그인 후 이용이 가능합니다.");
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(response);
|
||||
}
|
||||
|
||||
addrVO.setMberId(userId);
|
||||
|
||||
// OFFSET 계산
|
||||
int offset = (addrVO.getPage()) * addrVO.getSize();
|
||||
addrVO.setOffset(offset);
|
||||
// 데이터 조회
|
||||
List<AddrVO> resultAddrList = mjonMsgDataService.selectMsgAddrListAjax_advc(addrVO);
|
||||
int totalCount = mjonMsgDataService.countByMsgAddrListAjax_advc(addrVO); // 필터에 맞는 총 레코드 수 가져오기
|
||||
|
||||
// 페이지네이션 계산
|
||||
int lastPage = (int) Math.ceil((double) totalCount / addrVO.getSize());
|
||||
|
||||
// 응답 데이터 구성
|
||||
response.put("data", resultAddrList);
|
||||
response.put("last_page", lastPage); // 클라이언트가 사용할 수 있도록 last_page 포함
|
||||
response.put("total_count", totalCount); // 필요 시, 총 레코드 수 포함
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
|
||||
}
|
||||
return ResponseEntity.ok(response); // resultAddrList만 반환
|
||||
}
|
||||
|
||||
/**
|
||||
* 최근 전송내역 리스트 화면 불러오기
|
||||
*
|
||||
|
||||
@ -3710,6 +3710,7 @@
|
||||
|
||||
<!-- 등록 주소록 그룹 선택시 리스트 불러오기 -->
|
||||
<select id="mjonMsgDAO.selectMsgAddrListAjax_advc" parameterClass="addrVO" resultClass="addrVO">
|
||||
/* mjonMsgDAO.selectMsgAddrListAjax_advc */
|
||||
|
||||
SELECT A.ADDR_ID AS addrId,
|
||||
A.ADDR_GRP_ID AS addrGrpId,
|
||||
@ -3763,6 +3764,54 @@
|
||||
</isEqual>
|
||||
</isNotEmpty>
|
||||
ORDER BY A.ADDR_NM ASC, A.LAST_UPDT_PNTTM DESC
|
||||
LIMIT #size# OFFSET #offset#
|
||||
|
||||
</select>
|
||||
|
||||
<!-- 등록 주소록 그룹 선택시 리스트 불러오기 -->
|
||||
<select id="mjonMsgDAO.countByMsgAddrListAjax_advc" parameterClass="addrVO" resultClass="int">
|
||||
|
||||
SELECT
|
||||
COUNT(A.ADDR_ID)
|
||||
FROM MJ_ADDR A
|
||||
LEFT OUTER JOIN
|
||||
MJ_ADDR_GRP B
|
||||
ON
|
||||
A.ADDR_GRP_ID = B.ADDR_GRP_ID
|
||||
WHERE A.MBER_ID = #mberId#
|
||||
AND (A.RECV_STATUS = 'Y' OR A.RECV_STATUS = 'S' OR A.RECV_STATUS IS NULL)
|
||||
AND A.DELETE_YN = 'N'
|
||||
<isNotEmpty property="type">
|
||||
<isEqual property="type" compareValue="none">
|
||||
AND A.ADDR_GRP_ID = '0'
|
||||
AND A.BOOKMARK = 'N'
|
||||
</isEqual>
|
||||
<isEqual property="type" compareValue="book">
|
||||
AND A.BOOKMARK = 'Y'
|
||||
</isEqual>
|
||||
<isEqual property="type" compareValue="grp">
|
||||
AND A.ADDR_GRP_ID = #searchAddrGrpId#
|
||||
</isEqual>
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="searchCondition">
|
||||
<isEqual property="searchCondition" compareValue="0">
|
||||
AND
|
||||
(
|
||||
A.ADDR_NM LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
OR A.ADDR_PHONE_NO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
OR B.ADDR_GRP_NM LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
)
|
||||
</isEqual>
|
||||
<isEqual property="searchCondition" compareValue="1">
|
||||
AND B.ADDR_GRP_NM LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
</isEqual>
|
||||
<isEqual property="searchCondition" compareValue="2">
|
||||
AND A.ADDR_NM LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
</isEqual>
|
||||
<isEqual property="searchCondition" compareValue="3">
|
||||
AND A.ADDR_PHONE_NO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
</isEqual>
|
||||
</isNotEmpty>
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -87,50 +87,58 @@ $(document).ready(function(){
|
||||
|
||||
});
|
||||
|
||||
|
||||
//주소록 불러오기 팝업 내용
|
||||
//Tabulator AJAX Data Loading
|
||||
// Tabulator 초기화
|
||||
tableAddr = new Tabulator(".callAddr_box", {
|
||||
height:"255px",
|
||||
layout:"fitColumns",
|
||||
headerHozAlign:"center",
|
||||
validationMode:"highlight",
|
||||
placeholder:"주소록 그룹을 선택해 주세요.", //fit columns to width of table (optional)
|
||||
resizableColumns:false,
|
||||
columns:[ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}
|
||||
},
|
||||
{title:"그룹명", hozAlign:"center", field:"addrGroupNm", editor:"input", width:100, validator:["required","minLength:2", "maxLength:40"]},
|
||||
{title:"이름", hozAlign:"center", field:"addrName", editor:"input", width:100, validator:["maxLength:12"]},
|
||||
{title:"휴대폰번호", hozAlign:"center", field:"addrPhone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:11"]},
|
||||
{title:"[*1*]", hozAlign:"center", field:"addrRep1", editor:"input", width:84, validator:["maxLength:40"]},
|
||||
{title:"[*2*]", hozAlign:"center", field:"addrRep2", editor:"input", width:84, validator:["maxLength:40"]},
|
||||
{title:"[*3*]", hozAlign:"center", field:"addrRep3", editor:"input", width:84, validator:["maxLength:40"]},
|
||||
{title:"[*4*]", hozAlign:"center", field:"addrRep4", editor:"input", width:84, validator:["maxLength:40"]},
|
||||
|
||||
],
|
||||
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 - 아직 잘 모르겠음
|
||||
var valid = cell.isValid();
|
||||
var fieldNm = cell.getField();
|
||||
if(!valid){
|
||||
if(fieldNm == "addrName"){
|
||||
alert("받는사람 이름은 최대 12글자까지만 입력 가능합니다.");
|
||||
}else if(fieldNm == "addrPhone"){
|
||||
alert("휴대폰번호는 하이픈(-)을 제외한 숫자만 정확히 입력해 주세요.");
|
||||
}else if(fieldNm == "addrGroupNm"){
|
||||
alert("그룹명을 정확히 입력해 주세요. 2 ~ 40글자 이내로 입력 가능합니다.");
|
||||
}else{
|
||||
alert("치환문자를 정확히 입력해 주세요. 100글자 이내로 입력 가능합니다.");
|
||||
}
|
||||
|
||||
//해당 셀 데이터 삭제
|
||||
cell.setValue("");
|
||||
}
|
||||
return value % parameters.addrPhone;
|
||||
height: "255px",
|
||||
layout: "fitColumns",
|
||||
headerHozAlign: "center",
|
||||
validationMode: "highlight",
|
||||
placeholder: "주소록 그룹을 선택해 주세요.",
|
||||
resizableColumns: false,
|
||||
progressiveLoad:"scroll",
|
||||
// progressiveLoadScrollMargin:300, //trigger next ajax load when scroll bar is 300px or less from the bottom of the table.
|
||||
ajaxURL: "/web/mjon/msgdata/selectMsgAddrListAjax_advc.do", // 데이터 URL 설정
|
||||
ajaxConfig: {
|
||||
method: "GET",
|
||||
},
|
||||
ajaxParams: { // Initial AJAX parameters
|
||||
size: 400000, // Set initial page size
|
||||
type: "", // Default value, can be updated later
|
||||
searchAddrGrpId: "", // Default value, can be updated later
|
||||
searchKeyword: "", // Default value, can be updated later
|
||||
searchCondition: "" // Default value, can be updated later
|
||||
},
|
||||
columns: [
|
||||
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
||||
cell.getRow().toggleSelect();
|
||||
}
|
||||
},
|
||||
{formatter: "rownum", align: "center", title: "No", hozAlign: "center", headerHozAlign: "center", width: 60},
|
||||
{title: "그룹명", hozAlign: "center", field: "addrGroupNm", editor: "input", width: 100, validator: ["required", "minLength:2", "maxLength:40"]},
|
||||
{title: "이름", hozAlign: "center", field: "addrName", editor: "input", width: 100, validator: ["maxLength:12"]},
|
||||
{title: "휴대폰번호", hozAlign: "center", field: "addrPhone", editor: "input", width: 100, validator: ["required", "minLength:10", "maxLength:11"]},
|
||||
{title: "[*1*]", hozAlign: "center", field: "addrRep1", editor: "input", width: 84, validator: ["maxLength:40"]},
|
||||
{title: "[*2*]", hozAlign: "center", field: "addrRep2", editor: "input", width: 84, validator: ["maxLength:40"]},
|
||||
{title: "[*3*]", hozAlign: "center", field: "addrRep3", editor: "input", width: 84, validator: ["maxLength:40"]},
|
||||
{title: "[*4*]", hozAlign: "center", field: "addrRep4", editor: "input", width: 84, validator: ["maxLength:40"]},
|
||||
],
|
||||
validationFailed: function(cell, value, parameters) {
|
||||
var valid = cell.isValid();
|
||||
var fieldNm = cell.getField();
|
||||
if (!valid) {
|
||||
if (fieldNm == "addrName") {
|
||||
alert("받는사람 이름은 최대 12글자까지만 입력 가능합니다.");
|
||||
} else if (fieldNm == "addrPhone") {
|
||||
alert("휴대폰번호는 하이픈(-)을 제외한 숫자만 정확히 입력해 주세요.");
|
||||
} else if (fieldNm == "addrGroupNm") {
|
||||
alert("그룹명을 정확히 입력해 주세요. 2 ~ 40글자 이내로 입력 가능합니다.");
|
||||
} else {
|
||||
alert("치환문자를 정확히 입력해 주세요. 100글자 이내로 입력 가능합니다.");
|
||||
}
|
||||
cell.setValue("");
|
||||
}
|
||||
return value % parameters.addrPhone;
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
@ -2850,43 +2858,39 @@ function fnAddrGrpSearch(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
//주소록 불러오기 팝업의 그룹 선택시 우측에 주소록 불러오기
|
||||
function fnSelectAddrList(type,addrGrpId,item){
|
||||
|
||||
// 주소록 그룹 열림, 닫힘 폴더이미지 초기화
|
||||
function fnSelectAddrList(type, addrGrpId, item) {
|
||||
// 폴더 이미지 초기화 및 설정
|
||||
$(".adr_pop_list div p").each(function (index, item) {
|
||||
$(item).find("img").attr("src", "/publish/images/content/close_folder2.png");
|
||||
$(item).find("img").attr("alt", "폴더 닫힘");
|
||||
});
|
||||
|
||||
var form = document.searchAddrGrpForm;
|
||||
form.type.value = type;
|
||||
form.searchAddrGrpId.value = addrGrpId;
|
||||
form.searchKeyword.value = "";
|
||||
form.searchCondition.value = form.searchAddrCondition.value;
|
||||
|
||||
//왼쪽 그룹리스트의 그룸명을 선택시 검색어를 초기화해준다.
|
||||
form.searchAddrKeyword.value="";
|
||||
|
||||
/*
|
||||
$(item).toggleClass("open");
|
||||
if ($(item).hasClass("open") === true) {
|
||||
$(item).find("img").attr("src", "/publish/images/content/open_folder2.png");
|
||||
$(item).find("img").attr("alt", "폴더 열림");
|
||||
}
|
||||
else {
|
||||
$(item).find("img").attr("src", "/publish/images/content/close_folder2.png");
|
||||
$(item).find("img").attr("alt", "폴더 닫힘");
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// var form = document.searchAddrGrpForm;
|
||||
// form.type.value = type;
|
||||
// form.searchAddrGrpId.value = addrGrpId;
|
||||
// form.searchKeyword.value = "";
|
||||
// form.searchCondition.value = form.searchAddrCondition.value;
|
||||
|
||||
// 왼쪽 그룹리스트의 그룹명을 선택 시 검색어를 초기화해준다.
|
||||
// form.searchAddrKeyword.value = "";
|
||||
|
||||
$(item).find("img").attr("src", "/publish/images/content/open_folder2.png");
|
||||
$(item).find("img").attr("alt", "폴더 열림");
|
||||
|
||||
loadAddrList();
|
||||
|
||||
|
||||
// Tabulator의 ajaxParams 설정
|
||||
tableAddr.setData("/web/mjon/msgdata/selectMsgAddrListAjax_advc.do", {
|
||||
searchAddrGrpId: addrGrpId,
|
||||
type: type,
|
||||
// searchKeyword: form.searchAddrKeyword.value,
|
||||
// searchCondition: form.searchCondition.value,
|
||||
size: 400000, // 페이지당 로드할 데이터 수
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function fnAddrSearch(){
|
||||
|
||||
var form = document.searchAddrGrpForm;
|
||||
@ -2900,11 +2904,11 @@ function fnAddrSearch(){
|
||||
function loadAddrList(){
|
||||
|
||||
/*
|
||||
serialize 를 사용할때는 processData, contentType 옵션 제가할것
|
||||
serialize 를 사용할때는 processDa ta, contentType 옵션 제가할것
|
||||
*/
|
||||
var data = $("#searchAddrGrpForm").serialize();
|
||||
|
||||
var url = "/web/mjon/msgdata/selectMsgAddrListAjax.do";
|
||||
var url = "/web/mjon/msgdata/selectMsgAddrListAjax_advc.do";
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
@ -2920,12 +2924,11 @@ function loadAddrList(){
|
||||
if(returnData.result == "success"){
|
||||
|
||||
var addrList = returnData.resultAddrList;
|
||||
var tableData = [];
|
||||
|
||||
if(addrList.length == 0){
|
||||
|
||||
alert("주소록 정보가 없습니다.");
|
||||
tableAddr.setData(tableData);
|
||||
// tableAddr.setData([]);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -2956,7 +2959,8 @@ function loadAddrList(){
|
||||
|
||||
//우측 주소록 리스트 Tabulator에 입력해주기
|
||||
// tableAddr.setData(tableData);
|
||||
tableAddr.setData(addrList);
|
||||
// tableAddr.setData(addrList);
|
||||
tableAddr.updateOrAddData(addrList); // 무한 스크롤을 위해 데이터를 업데이트
|
||||
|
||||
}else{
|
||||
|
||||
@ -2969,8 +2973,10 @@ function loadAddrList(){
|
||||
alert("주소록 불러오기에 실패하였습니다. !!");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
alert("주소록 불러오기에 실패하였습니다."); console.log("ERROR : ", e);
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
alert("주소록 불러오기에 실패하였습니다.");
|
||||
console.log("ERROR : ", jqXHR.status, textStatus, errorThrown); // 상태 코드, 상태 텍스트, 에러 메시지 출력
|
||||
console.log("Response Text: ", jqXHR.responseText); // 서버 응답 텍스트 출력
|
||||
},
|
||||
beforeSend : function(xmlHttpRequest) {
|
||||
//로딩창 show
|
||||
|
||||
Loading…
Reference in New Issue
Block a user