이호영 이호영 2025-01-16
발송결과 페이지 및 속도개선 진행중 - 화면수정 중
@d34f626aa08e2f98f93cdfdab6c2028124bdfb85
 
src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java (added)
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java
@@ -0,0 +1,32 @@
+package itn.let.mjo.msgsent.service;
+
+import java.io.Serializable;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 
+ * @author 		: 이호영
+ * @fileName 	: MjonMsgSWFDTO.java 
+ * @date 		: 2025.01.16
+ * @description : 그룹ID로 성공 실패 대기 건수를 구해서 전달해주는 DTO 
+ * =========================================================== 
+ * DATE          AUTHOR   NOTE 
+ * ----------------------------------------------------------- *
+ * 2025.01.16    이호영          최초 생성
+ * 
+ * 
+ * 
+ */
+@Getter
+@Setter
+public class MjonMsgSWFDTO  implements Serializable {
+
+	private static final long serialVersionUID = 1L; // 선언
+	
+	private int resultSValue; // 성공건수
+	private int resultFValue; // 실패건수
+	private int resultWValue; // 대기건수
+	
+}
src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java
--- src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java
@@ -1,6 +1,7 @@
 package itn.let.mjo.msgsent.service;
 
 import java.util.List;
+import java.util.Map;
 
 import itn.let.fax.addr.service.FaxAddrGroupVO;
 import itn.let.mjo.addr.service.AddrGroupVO;
@@ -15,6 +16,8 @@
 	
 	//발송 관리 전체 발송 리스트 불러오기
 	public List<MjonMsgSentVO> selectAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) throws Exception;
+	
+	public Map<String, Object> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception;
 	
 	//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전
 	public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception;
@@ -54,5 +57,8 @@
 	
 	//첨부파일 정보 불러오기
 	public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception;
+
+	public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO);
+
 	
 }
src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java
--- src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java
@@ -4,7 +4,11 @@
 import java.util.List;
 
 import itn.let.uss.umt.service.UserDefaultVO;
+import lombok.Getter;
+import lombok.Setter;
 
+@Getter
+@Setter
 public class MjonMsgSentVO extends UserDefaultVO{
 
 	private static final long serialVersionUID = 1L;
@@ -86,399 +90,8 @@
 	private String successCount;
 	
 	private String resultSValue;
+	private String resultFValue;
+	private String resultWValue;
 	private String resultWFValue;
-	
-	public String getSuccessCount() {
-		return successCount;
-	}
-	public void setSuccessCount(String successCount) {
-		this.successCount = successCount;
-	}
-	public String getMsgSentType() {
-		return msgSentType;
-	}
-	public void setMsgSentType(String msgSentType) {
-		this.msgSentType = msgSentType;
-	}
-	public String getCallFromComma() {
-		return callFromComma;
-	}
-	public void setCallFromComma(String callFromComma) {
-		this.callFromComma = callFromComma;
-	}
-	public String getCallToComma() {
-		return callToComma;
-	}
-	public void setCallToComma(String callToComma) {
-		this.callToComma = callToComma;
-	}
-	
-	public String getAtchFiles() {
-		return atchFiles;
-	}
-	public void setAtchFiles(String atchFiles) {
-		this.atchFiles = atchFiles;
-	}	
-	
-	public String getMsgId() {
-		return msgId;
-	}
-	public void setMsgId(String msgId) {
-		this.msgId = msgId;
-	}
-	public int getSuccessCnt() {
-		return successCnt;
-	}
-	public void setSuccessCnt(int successCnt) {
-		this.successCnt = successCnt;
-	}
-	public String getMsgTypeName() {
-		return msgTypeName;
-	}
-	public void setMsgTypeName(String msgTypeName) {
-		this.msgTypeName = msgTypeName;
-	}
-	public int getOrderByCode() {
-		return orderByCode;
-	}
-	public void setOrderByCode(int orderByCode) {
-		this.orderByCode = orderByCode;
-	}
-	public String getAtchFileId() {
-		return atchFileId;
-	}
-	public void setAtchFileId(String atchFileId) {
-		this.atchFileId = atchFileId;
-	}
-	public String getFileSn() {
-		return fileSn;
-	}
-	public void setFileSn(String fileSn) {
-		this.fileSn = fileSn;
-	}
-	public String getUserId() {
-		return userId;
-	}
-	public void setUserId(String userId) {
-		this.userId = userId;
-	}
-	public String getAddrNm() {
-		return addrNm;
-	}
-	public void setAddrNm(String addrNm) {
-		this.addrNm = addrNm;
-	}
-	public String getMsgSeq() {
-		return msgSeq;
-	}
-	public void setMsgSeq(String msgSeq) {
-		this.msgSeq = msgSeq;
-	}
-	public String getMsgGroupId() {
-		return msgGroupId;
-	}
-	public void setMsgGroupId(String msgGroupId) {
-		this.msgGroupId = msgGroupId;
-	}
-	public List getMsgGroupIdList() {
-		return msgGroupIdList;
-	}
-	public void setMsgGroupIdList(List msgGroupIdList) {
-		this.msgGroupIdList = msgGroupIdList;
-	}
-	public String getSmsTxt() {
-		return smsTxt;
-	}
-	public void setSmsTxt(String smsTxt) {
-		this.smsTxt = smsTxt;
-	}
-	public String getSubject() {
-		return subject;
-	}
-	public void setSubject(String subject) {
-		this.subject = subject;
-	}
-	public Date getRegdate() {
-		return regdate;
-	}
-	public void setRegdate(Date regdate) {
-		this.regdate = regdate;
-	}
-	public Date getReqdate() {
-		return reqdate;
-	}
-	public void setReqdate(Date reqdate) {
-		this.reqdate = reqdate;
-	}
-	public String getCallFrom() {
-		return callFrom;
-	}
-	public void setCallFrom(String callFrom) {
-		this.callFrom = callFrom;
-	}
-	public String getCallTo() {
-		return callTo;
-	}
-	public void setCallTo(String callTo) {
-		this.callTo = callTo;
-	}
-	public List getCallToList() {
-		return callToList;
-	}
-	public void setCallToList(List callToList) {
-		this.callToList = callToList;
-	}
-	public String getTotPrice() {
-		return totPrice;
-	}
-	public void setTotPrice(String totPrice) {
-		this.totPrice = totPrice;
-	}
-	public String getEachPrice() {
-		return eachPrice;
-	}
-	public void setEachPrice(String eachPrice) {
-		this.eachPrice = eachPrice;
-	}
-	public String getDelFlag() {
-		return delFlag;
-	}
-	public void setDelFlag(String delFlag) {
-		this.delFlag = delFlag;
-	}
-	public String getTotMsgPrice() {
-		return totMsgPrice;
-	}
-	public void setTotMsgPrice(String totMsgPrice) {
-		this.totMsgPrice = totMsgPrice;
-	}
-	public String getRsltCode() {
-		return rsltCode;
-	}
-	public void setRsltCode(String rsltCode) {
-		this.rsltCode = rsltCode;
-	}
-	public String getRsltCode2() {
-		return rsltCode2;
-	}
-	public void setRsltCode2(String rsltCode2) {
-		this.rsltCode2 = rsltCode2;
-	}
-	public String getMsgType() {
-		return msgType;
-	}
-	public void setMsgType(String msgType) {
-		this.msgType = msgType;
-	}
-	public String getMsgGroupCnt() {
-		return msgGroupCnt;
-	}
-	public void setMsgGroupCnt(String msgGroupCnt) {
-		this.msgGroupCnt = msgGroupCnt;
-	}
-	public String getFileCnt() {
-		return fileCnt;
-	}
-	public void setFileCnt(String fileCnt) {
-		this.fileCnt = fileCnt;
-	}
-	public String getTotMsgCnt() {
-		return totMsgCnt;
-	}
-	public void setTotMsgCnt(String totMsgCnt) {
-		this.totMsgCnt = totMsgCnt;
-	}
-	public String getCurState() {
-		return curState;
-	}
-	public void setCurState(String curState) {
-		this.curState = curState;
-	}
-	public String getReserveYn() {
-		return reserveYn;
-	}
-	public void setReserveYn(String reserveYn) {
-		this.reserveYn = reserveYn;
-	}
-	public String getReserveCYn() {
-		return reserveCYn;
-	}
-	public void setReserveCYn(String reserveCYn) {
-		this.reserveCYn = reserveCYn;
-	}
-	public String getFilePath1() {
-		return filePath1;
-	}
-	public void setFilePath1(String filePath1) {
-		this.filePath1 = filePath1;
-	}
-	public String getFilePath2() {
-		return filePath2;
-	}
-	public void setFilePath2(String filePath2) {
-		this.filePath2 = filePath2;
-	}
-	public String getFilePath3() {
-		return filePath3;
-	}
-	public void setFilePath3(String filePath3) {
-		this.filePath3 = filePath3;
-	}
-	public Date getSentDate() {
-		return sentDate;
-	}
-	public void setSentDate(Date sentDate) {
-		this.sentDate = sentDate;
-	}
-	public String getAgentCode() {
-		return agentCode;
-	}
-	public void setAgentCode(String agentCode) {
-		this.agentCode = agentCode;
-	}
-	public String getUserData() {
-		return userData;
-	}
-	public void setUserData(String userData) {
-		this.userData = userData;
-	}
-	public List getUserDataList() {
-		return userDataList;
-	}
-	public void setUserDataList(List userDataList) {
-		this.userDataList = userDataList;
-	}
-	public Date getCancelDate() {
-		return cancelDate;
-	}
-	public void setCancelDate(Date cancelDate) {
-		this.cancelDate = cancelDate;
-	}
-	public String getStartDate() {
-		return startDate;
-	}
-	public void setStartDate(String startDate) {
-		this.startDate = startDate;
-	}
-	public String getEndDate() {
-		return endDate;
-	}
-	public void setEndDate(String endDate) {
-		this.endDate = endDate;
-	}
-	public String getSearchMsgType() {
-		return searchMsgType;
-	}
-	public void setSearchMsgType(String searchMsgType) {
-		this.searchMsgType = searchMsgType;
-	}
-	public String getTabType() {
-		return tabType;
-	}
-	public void setTabType(String tabType) {
-		this.tabType = tabType;
-	}
-	public String getStateType() {
-		return stateType;
-	}
-	public void setStateType(String stateType) {
-		this.stateType = stateType;
-	}
-	public String getListType() {
-		return listType;
-	}
-	public void setListType(String listType) {
-		this.listType = listType;
-	}
-	public String getResultType() {
-		return resultType;
-	}
-	public void setResultType(String resultType) {
-		this.resultType = resultType;
-	}
-	public String getMsgResultCnt() {
-		return msgResultCnt;
-	}
-	public void setMsgResultCnt(String msgResultCnt) {
-		this.msgResultCnt = msgResultCnt;
-	}
-	public String getMsgResultSts() {
-		return msgResultSts;
-	}
-	public void setMsgResultSts(String msgResultSts) {
-		this.msgResultSts = msgResultSts;
-	}
-	public String getAddrGrpNm() {
-		return addrGrpNm;
-	}
-	public void setAddrGrpNm(String addrGrpNm) {
-		this.addrGrpNm = addrGrpNm;
-	}
-	public int getOrderByrsltCode() {
-		return orderByrsltCode;
-	}
-	public void setOrderByrsltCode(int orderByrsltCode) {
-		this.orderByrsltCode = orderByrsltCode;
-	}
-	public String getMsgResult() {
-		return msgResult;
-	}
-	public void setMsgResult(String msgResult) {
-		this.msgResult = msgResult;
-	}
-	public String getNtceBgnde() {
-		return ntceBgnde;
-	}
-	public void setNtceBgnde(String ntceBgnde) {
-		this.ntceBgnde = ntceBgnde;
-	}
-	public String getNtceEndde() {
-		return ntceEndde;
-	}
-	public void setNtceEndde(String ntceEndde) {
-		this.ntceEndde = ntceEndde;
-	}
-	public String getMsgKind() {
-		return msgKind;
-	}
-	public void setMsgKind(String msgKind) {
-		this.msgKind = msgKind;
-	}
-	public String getDelayYn() {
-		return delayYn;
-	}
-	public void setDelayYn(String delayYn) {
-		this.delayYn = delayYn;
-	}
-	public String getDelayCompleteYn() {
-		return delayCompleteYn;
-	}
-	public void setDelayCompleteYn(String delayCompleteYn) {
-		this.delayCompleteYn = delayCompleteYn;
-	}
-	public String getSendKind() {
-		return sendKind;
-	}
-	public void setSendKind(String sendKind) {
-		this.sendKind = sendKind;
-	}
-	public String getResultSValue() {
-		return resultSValue;
-	}
-	public void setResultSValue(String resultSValue) {
-		this.resultSValue = resultSValue;
-	}
-	public String getResultWFValue() {
-		return resultWFValue;
-	}
-	public void setResultWFValue(String resultWFValue) {
-		this.resultWFValue = resultWFValue;
-	}
-	public Date getDelayOrgTime() {
-		return delayOrgTime;
-	}
-	public void setDelayOrgTime(Date delayOrgTime) {
-		this.delayOrgTime = delayOrgTime;
-	}
 	
 }
src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java
--- src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java
+++ src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java
@@ -9,6 +9,7 @@
 import itn.let.fax.addr.service.FaxAddrGroupVO;
 import itn.let.mjo.addr.service.AddrGroupVO;
 import itn.let.mjo.block.service.MjonBlockVO;
+import itn.let.mjo.msgsent.service.MjonMsgSWFDTO;
 import itn.let.mjo.msgsent.service.MjonMsgSentVO;
 
 @Repository("MjonMsgSentDAO")
@@ -54,6 +55,13 @@
 	public List<MjonMsgSentVO> selectAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) throws Exception{
 		
 		return (List<MjonMsgSentVO>) list("MjonMsgSentDAO.selectAllMsgSentList",mjonMsgSentVO);
+	}
+	
+	//발송 관리 전체 발송 리스트 불러오기
+	@SuppressWarnings("unchecked")
+	public List<MjonMsgSentVO> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{
+		
+		return (List<MjonMsgSentVO>) list("MjonMsgSentDAO.selectAllMsgSentList_advc",mjonMsgSentVO);
 	}
 	
 	//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전
@@ -158,5 +166,14 @@
 	public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception{
 		return (MjonMsgSentVO) select("MjonMsgSentDAO.selectFileInfo", streFileId);
 	}
+
+	public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) {
+        return (Integer)select("MjonMsgSentDAO.countAllMsgSentList", mjonMsgSentVO);
+	}
+
+	public MjonMsgSWFDTO findBySWF(String msgGroupId) {
+		
+		return (MjonMsgSWFDTO) select("MjonMsgSentDAO.findBySWF", msgGroupId);
+	}
 	
 }
src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java
--- src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java
+++ src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java
@@ -1,7 +1,12 @@
 package itn.let.mjo.msgsent.service.impl;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
@@ -12,9 +17,12 @@
 import itn.let.fax.addr.service.FaxAddrGroupVO;
 import itn.let.mjo.addr.service.AddrGroupVO;
 import itn.let.mjo.block.service.MjonBlockVO;
+import itn.let.mjo.msgsent.service.MjonMsgSWFDTO;
 import itn.let.mjo.msgsent.service.MjonMsgSentService;
 import itn.let.mjo.msgsent.service.MjonMsgSentVO;
+import lombok.extern.slf4j.Slf4j;
 
+@Slf4j
 @Service("MjonMsgSentService")
 public class MjonMsgSentServiceImpl  extends EgovAbstractServiceImpl implements MjonMsgSentService{
 
@@ -84,6 +92,54 @@
 		return resultList;
 	}
 	
+	//발송 관리 전체 발송 리스트 불러오기
+	public Map<String, Object> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{
+
+
+		Map<String, Object> resultMap = new HashMap<String, Object>();
+		
+		// 목록
+		List<MjonMsgSentVO> resultList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO);
+
+		// MsgGroupId만 추출하여 리스트 생성
+//		List<String> msgGroupIdList = resultList.stream()
+//			.map(MjonMsgSentVO::getMsgGroupId) // MsgGroupId 추출
+//			.collect(Collectors.toList());    // 리스트로 수집
+		
+		
+		resultList.stream().forEach(t->{
+			MjonMsgSWFDTO mjonMsgSWFDTO =	mjonMsgSentDAO.findBySWF(t.getMsgGroupId());
+			t.setResultSValue(String.valueOf(mjonMsgSWFDTO.getResultSValue()));
+			t.setResultFValue(String.valueOf(mjonMsgSWFDTO.getResultFValue()));
+			t.setResultWValue(String.valueOf(mjonMsgSWFDTO.getResultWValue()));
+			
+			BigDecimal eachPrice = new BigDecimal(t.getEachPrice());
+			BigDecimal resultSValue = new BigDecimal(mjonMsgSWFDTO.getResultSValue());
+			BigDecimal totalPrice = eachPrice.multiply(resultSValue);
+			// 소수점 한 자리로 설정 (반올림)
+			BigDecimal roundedTotalPrice = totalPrice.setScale(1, RoundingMode.HALF_UP);
+			t.setTotPrice(roundedTotalPrice.toPlainString()); // 결과를 String으로 설정
+		});
+
+
+		
+		
+		// 총 카운트
+		int totalCnt = mjonMsgSentDAO.countAllMsgSentList(mjonMsgSentVO);
+//		int totalCnt = 0;
+		resultMap.put("resultList", resultList);
+		resultMap.put("totalCnt", totalCnt);
+			
+			
+		return resultMap;
+	}
+
+
+	@Override
+	public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) {
+		return mjonMsgSentDAO.countAllMsgSentList(mjonMsgSentVO);
+	}
+	
 	//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전
 	public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception{
 		List<MjonMsgSentVO> resultList = new ArrayList<MjonMsgSentVO>();
src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java
--- src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java
+++ src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java
@@ -5,14 +5,17 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.Font;
@@ -47,7 +50,9 @@
 import itn.let.mjo.msgsent.service.MjonMsgSentCntVO;
 import itn.let.mjo.msgsent.service.MjonMsgSentService;
 import itn.let.mjo.msgsent.service.MjonMsgSentVO;
+import lombok.extern.slf4j.Slf4j;
 
+@Slf4j
 @Controller
 public class MjonMsgSentController {
 
@@ -234,22 +239,9 @@
     	String startDate = mjonMsgSentVO.getStartDate();
     	String endDate = mjonMsgSentVO.getEndDate();
     	
-    	if(startDate == null && endDate == null ) {
-    		
-    		
-//    		
-//    		Calendar cal = Calendar.getInstance();
-//        	Date now = new Date();
-//        	
-//        	SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
-//
-//        	//종료일은 오늘날짜
-//        	cal.setTime(now);
-//        	endDate = format.format(cal.getTime());
-//
-//        	//시작일은 전날로 셋팅
-//        	cal.add(Calendar.DATE, -1);
-//        	startDate = format.format(cal.getTime());
+    	if(StringUtils.isEmpty(startDate) 
+    			&& StringUtils.isEmpty(endDate)) 
+    	{
     		
         	mjonMsgSentVO.setStartDate(DateUtils.getDateMonthsAgo(3));
         	mjonMsgSentVO.setEndDate(DateUtils.getCurrentDate());
@@ -285,6 +277,7 @@
     	
     	//전체 발송 건수 통계 불러오기
     	mjonMsgSentVO.setMsgType("");
+    	log.info(" ::  mjonMsgSentService.selectDetailMsgSentCntMix :: ");
     	List<MjonMsgSentVO> totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO);
     	
     	System.out.println("start");
@@ -302,8 +295,6 @@
     	List<MjonMsgSentVO> A_lmsMsgCnt = new ArrayList<MjonMsgSentVO>();
     	List<MjonMsgSentVO> A_mmsMsgCnt = new ArrayList<MjonMsgSentVO>();
 
-    	System.out.println(" ::H_totalMsgCnt :: "+ H_totalMsgCnt.size());
-    	System.out.println(" ::A_totalMsgCnt :: "+ A_totalMsgCnt.size());
 
     	H_totalMsgCnt.forEach(t->{
     		if (Integer.parseInt(t.getFilePath1())>0) {
@@ -325,8 +316,6 @@
     		}
     	});
     	
-    	
- 
     	 //* 홈페이지에서 보낸 데이터 LIST
     	 //* SEND_KIND = "H"
 
@@ -365,7 +354,6 @@
     	ApiKeyVO apiKeyVO = new ApiKeyVO();
     	apiKeyVO.setMberId(userId);
 		model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false);
-		
 		
 		System.out.println("MsgSentView_HA_allSentAjax_end");
     	
@@ -421,89 +409,191 @@
 	@RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax.do"})
 	public String selectMsgSentListViewAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{
 		
+		String pageUrl = "";
+		try {
+			
+				
+				
+				
+			//로그인 권한정보 불러오기
+	    	LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+	    	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+	    	
+	    	mjonMsgSentVO.setUserId(userId);
+	    	
+	    	// 검색 리스트 불러오기
+//			if(mjonMsgSentVO.getPageUnit() != 10) {
+//				mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit());
+//			}
+			
+	    	//기본 내림차순 정렬
+	    	if(mjonMsgSentVO.getSearchSortOrd().equals("")) {
+	    		
+	    		mjonMsgSentVO.setSearchSortOrd("desc");
+	    		mjonMsgSentVO.setSearchSortCnd("regdate");
+	    	}
+	    	
+	    	if(mjonMsgSentVO.getListType().equals("")) {
+	    		
+	    		mjonMsgSentVO.setListType("groupList");
+	    		
+	    	}
+	    	
+	    	//선택 탭 정보 저장
+	    	//mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType());
+	    	
+			/** pageing */
+			PaginationInfo paginationInfo = new PaginationInfo();
+			paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex());
+			paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit());
+			paginationInfo.setPageSize(mjonMsgSentVO.getPageSize());
+	
+			mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+			mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex());
+			mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+			
+			if(!DateUtils.dateChkAndValueChk(mjonMsgSentVO.getStartDate(),mjonMsgSentVO.getEndDate(), 3 )) {
+				mjonMsgSentVO.setStartDate(DateUtils.getDateMonthsAgo(3));
+				mjonMsgSentVO.setEndDate(DateUtils.getCurrentDate());
+			};
+	
+			model.addAttribute("startDate", mjonMsgSentVO.getStartDate());
+			model.addAttribute("endDate", mjonMsgSentVO.getEndDate());
+			
+			//전체 발송 리스트 불러오기
+			Map<String, Object> resultMap = mjonMsgSentService.selectAllMsgSentList_advc(mjonMsgSentVO);
+			
+			
+			model.addAttribute("resultAllSentList", resultMap.get("resultList"));
+			
+			
+			paginationInfo.setTotalRecordCount((Integer)resultMap.get("totalCnt"));
+			model.addAttribute("paginationInfo", paginationInfo);
+			model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount());
+	
+			model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
+			
+			String stateType = mjonMsgSentVO.getStateType();
+			// String pageUrl = "web/msgsent/MsgSentAllListAjax";
+			/*
+			pageUrl = "web/msgsent/MsgSentAllListAjax";
+			if(stateType.equals("ready")) {
+				
+				pageUrl = "web/msgsent/MsgSentReadyListAjax";
+				
+			}else if(stateType.equals("complete")) {
+				
+				pageUrl = "web/msgsent/MsgSentCompleteListAjax";
+				
+			}else if(stateType.equals("fail")) {
+				
+				pageUrl = "web/msgsent/MsgSentFailListAjax";
+				
+			}*/	
+		} catch (Exception e) {
+			e.printStackTrace();
+			// TODO: handle exception
+		}
+    	
+		return "web/msgsent/MsgSentAllListAjax";
+	}
+	
+	@RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax_backup.do"})
+	public String selectMsgSentListViewAjax_backup(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{
+		
+			
+			
+		
 		//로그인 권한정보 불러오기
-    	LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
-    	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
-    	
-    	mjonMsgSentVO.setUserId(userId);
-    	
-    	// 검색 리스트 불러오기
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		
+		mjonMsgSentVO.setUserId(userId);
+		
+		// 검색 리스트 불러오기
 		if(mjonMsgSentVO.getPageUnit() != 10) {
 			mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit());
 		}
 		
-    	//기본 내림차순 정렬
-    	if(mjonMsgSentVO.getSearchSortOrd().equals("")) {
-    		
-    		mjonMsgSentVO.setSearchSortOrd("desc");
-    		mjonMsgSentVO.setSearchSortCnd("regdate");
-    	}
-    	
-    	if(mjonMsgSentVO.getListType().equals("")) {
-    		
-    		mjonMsgSentVO.setListType("groupList");
-    		
-    	}
-    	
-    	//선택 탭 정보 저장
-    	//mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType());
-    	
+		//기본 내림차순 정렬
+		if(mjonMsgSentVO.getSearchSortOrd().equals("")) {
+			
+			mjonMsgSentVO.setSearchSortOrd("desc");
+			mjonMsgSentVO.setSearchSortCnd("regdate");
+		}
+		
+		if(mjonMsgSentVO.getListType().equals("")) {
+			
+			mjonMsgSentVO.setListType("groupList");
+			
+		}
+		
+		//선택 탭 정보 저장
+		//mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType());
+		
 		/** pageing */
 		PaginationInfo paginationInfo = new PaginationInfo();
 		paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex());
 		paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit());
 		paginationInfo.setPageSize(mjonMsgSentVO.getPageSize());
-
+		
 		mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
 		mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex());
 		mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
-    	
+		
 		
 		
 		if(!DateUtils.dateChkAndValueChk(mjonMsgSentVO.getStartDate(),mjonMsgSentVO.getEndDate(), 3 )) {
 			mjonMsgSentVO.setStartDate(DateUtils.getDateMonthsAgo(3));
 			mjonMsgSentVO.setEndDate(DateUtils.getCurrentDate());
 		};
-
-    	model.addAttribute("startDate", mjonMsgSentVO.getStartDate());
-    	model.addAttribute("endDate", mjonMsgSentVO.getEndDate());
 		
-    	//전체 발송 리스트 불러오기
-    	List<MjonMsgSentVO> resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO);
-    	model.addAttribute("resultAllSentList", resultAllSentList);
-    	model.addAttribute("resultAllSentCnt", resultAllSentList.size());
-    	
-    	model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword());
-    	paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0);
-    	model.addAttribute("paginationInfo", paginationInfo);
-    	model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount());
-    	
-    	//발송 결과 성공 실패 건수 리스트 불러오기
-    	List<MjonMsgSentVO> resultMsgSucFailList = new ArrayList<MjonMsgSentVO>(); 
-    	
-    	if(resultAllSentList.size() > 0) {
-    		resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO);
-    	}
-    	model.addAttribute("resultMsgSucFailList", resultMsgSucFailList);
-    	
-    	model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
-    	
-    	String stateType = mjonMsgSentVO.getStateType();
-    	String pageUrl = "web/msgsent/MsgSentAllListAjax";
-    	
-    	if(stateType.equals("ready")) {
-    		
-    		pageUrl = "web/msgsent/MsgSentReadyListAjax";
-    		
-    	}else if(stateType.equals("complete")) {
-    		
-    		pageUrl = "web/msgsent/MsgSentCompleteListAjax";
-    		
-    	}else if(stateType.equals("fail")) {
-    		
-    		pageUrl = "web/msgsent/MsgSentFailListAjax";
-    		
-    	}
+		model.addAttribute("startDate", mjonMsgSentVO.getStartDate());
+		model.addAttribute("endDate", mjonMsgSentVO.getEndDate());
+		
+		//전체 발송 리스트 불러오기
+		List<MjonMsgSentVO> resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO);
+		
+		
+		model.addAttribute("resultAllSentList", resultAllSentList);
+		model.addAttribute("resultAllSentCnt", resultAllSentList.size());
+		
+		model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword());
+		paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0);
+		model.addAttribute("paginationInfo", paginationInfo);
+		model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount());
+		
+		//발송 결과 성공 실패 건수 리스트 불러오기
+		List<MjonMsgSentVO> resultMsgSucFailList = new ArrayList<MjonMsgSentVO>(); 
+		
+		if(resultAllSentList.size() > 0) {
+			System.out.println("=====resultMsgSucFailList=====");
+			resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO);
+			System.out.println("//=====resultMsgSucFailList=====");
+		}
+		model.addAttribute("resultMsgSucFailList", resultMsgSucFailList);
+		
+		model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
+		
+		String stateType = mjonMsgSentVO.getStateType();
+		//    	String pageUrl = "web/msgsent/MsgSentAllListAjax";
+		String pageUrl = "web/msgsent/MsgSentAllListAjax";
+		
+		if(stateType.equals("ready")) {
+			
+			pageUrl = "web/msgsent/MsgSentReadyListAjax";
+			
+		}else if(stateType.equals("complete")) {
+			
+			pageUrl = "web/msgsent/MsgSentCompleteListAjax";
+			
+		}else if(stateType.equals("fail")) {
+			
+			pageUrl = "web/msgsent/MsgSentFailListAjax";
+			
+		}	
+		
+		log.info(" :: pageUrl   [{}]", pageUrl);
 		return pageUrl;
 	}
 	
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
@@ -3,8 +3,9 @@
   =========     =======    =================================================
   2021.06.21    우영두 	
 -->
-<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
+<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
 <sqlMap namespace="Msg">
+	<typeAlias  alias="mjonMsgSWFDTO" type="itn.let.mjo.msgsent.service.MjonMsgSWFDTO"/>
 	<typeAlias  alias="mjonMsgSentVO" type="itn.let.mjo.msgsent.service.MjonMsgSentVO"/>
 	<typeAlias  alias="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/>
 	<typeAlias  alias="addrGroupVO" type="itn.let.mjo.addr.service.AddrGroupVO"/>
@@ -222,6 +223,220 @@
 		
 	</select>
 	
+	<!-- 전체 발송결과 조회  (전송사별) 카운트-->
+	<select id="MjonMsgSentDAO.countAllMsgSentList" parameterClass="mjonMsgSentVO" resultClass="int">
+
+			select 
+				COUNT(DISTINCT B.MSG_GROUP_ID) as totalGroupCount
+			from
+				MJ_MSG_DATA A
+			join MJ_MSG_GROUP_DATA B on
+				A.MSG_GROUP_ID = B.MSG_GROUP_ID
+			WHERE (B.DEL_FLAG = 'N' OR B.DEL_FLAG IS NULL)
+				AND A.DEL_FLAG = 'N'
+				AND B.USER_ID = #userId#
+				AND B.RESERVE_C_YN = 'N'
+				<![CDATA[
+					AND B.REQ_DATE <= DATE_ADD(NOW(), INTERVAL 60 MINUTE)
+				]]>
+				<isNotEmpty property="searchMsgType">
+					<isEqual property="searchMsgType" compareValue="S">
+						AND B.MSG_TYPE = '4'
+					</isEqual>
+					<isEqual property="searchMsgType" compareValue="L">
+						AND B.MSG_TYPE = '6'
+						AND B.FILE_CNT = '0'
+					</isEqual>
+					<isEqual property="searchMsgType" compareValue="M">
+					<![CDATA[
+						AND B.MSG_TYPE = '6'
+						AND B.FILE_CNT > '0'
+					]]>
+					</isEqual>
+				</isNotEmpty>
+				<isNotEmpty property="searchKeyword">
+					<isEqual property="searchCondition" compareValue="1" >
+						AND B.SUBJECT LIKE CONCAT('%', #searchKeyword#, '%')
+					</isEqual>
+					<isEqual property="searchCondition" compareValue="2" >
+						AND B.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
+					</isEqual>
+					<isEqual property="searchCondition" compareValue="3" >
+						AND CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
+					</isEqual>
+				</isNotEmpty>
+				<isNotEmpty property="searchCondition_01">
+					AND sendKind = #searchCondition_01#
+				</isNotEmpty>
+			<isNotEmpty property="startDate">
+				<![CDATA[
+					AND DATE_FORMAT(REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
+				]]>
+			</isNotEmpty>
+			<isNotEmpty property="endDate">
+				<![CDATA[
+					AND 	DATE_FORMAT(REGDATE, '%Y-%m-%d')  <=  DATE_FORMAT(#endDate#, '%Y-%m-%d')
+				]]>
+			</isNotEmpty>
+	</select>	
+	
+	
+	<!-- 전체 발송결과 조회  (전송사별) 카운트-->
+	<select id="MjonMsgSentDAO.findBySWF" parameterClass="String" resultClass="mjonMsgSWFDTO">
+	select 
+		SUM(IF(aa.result = 'S', 1, 0)) AS resultSValue,
+		SUM(IF(aa.result = 'W', 1, 0)) AS resultWValue,
+		SUM(IF(aa.result = 'F', 1, 0)) AS resultFValue
+	from
+		(
+		select 
+			case
+				when A.AGENT_CODE = '01'
+				and ( A.RSLT_CODE = '100'
+				and (A.RSLT_CODE2 = '0')) then 'S'
+				when A.AGENT_CODE = '02'
+				and (A.RSLT_CODE = '0') then 'S'
+				when A.AGENT_CODE = '03'
+				and (A.RSLT_CODE = '100'
+				or A.RSLT_CODE = '101'
+				or A.RSLT_CODE = '110'
+				or A.RSLT_CODE = '800') then 'S'
+				when 
+					A.AGENT_CODE = '04'
+					and (A.RSLT_CODE = '4100'
+					or A.RSLT_CODE = '6600'
+					or A.RSLT_CODE = '7000') then 'S'
+				when 
+					A.AGENT_CODE = '05'
+					and (A.RSLT_CODE = '1000'
+					or A.RSLT_CODE = '1001') then 'S'
+				when 
+					A.AGENT_CODE = '07'
+					and (A.RSLT_CODE = '6'
+					or A.RSLT_CODE = '1000') then 'S'
+				when 
+					A.AGENT_CODE = '08'
+					and (A.RSLT_CODE = '1000'
+					or A.RSLT_CODE = '1001') then 'S'
+				when 
+					A.AGENT_CODE = '09'
+					and (A.RSLT_CODE = '1000'
+					or A.RSLT_CODE = '1001') then 'S'
+				when ( 
+					A.RSLT_CODE is null
+					and A.RSLT_CODE2 is null
+					and A.SENT_DATE is null
+					and A.RSLT_DATE is null ) then 'W'
+				else 'F'
+			end as result /* common query */
+		from
+			MJ_MSG_DATA A
+		where
+			A.MSG_GROUP_ID = #msgGroupId# 
+	) aa
+	</select>
+	
+	
+	
+	
+	
+	<!-- 전체 발송결과 조회  (전송사별)-->
+	<select id="MjonMsgSentDAO.selectAllMsgSentList_advc" parameterClass="mjonMsgSentVO" resultClass="mjonMsgSentVO">
+	
+SELECT
+			B.USER_ID as userId
+			, B.MSG_GROUP_ID as msgGroupId
+			, B.MSG_GROUP_CNT as msgGroupCnt
+			, B.SMS_TXT as smsTxt
+			, B.SUBJECT as subject
+			, DATE_FORMAT(B.REGDATE, '%Y-%m-%d %T') AS regdate
+			, DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %T') AS reqDate
+			, (
+				CASE
+					WHEN B.DELAY_YN = 'Y' AND B.DELAY_COMPLETE_YN = 'N' THEN DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE)
+					ELSE B.REQ_DATE
+					END
+				) AS delayOrgTime
+			, B.CALL_FROM as callFrom
+			, B.TOT_PRICE as totPrice
+			, B.EACH_PRICE as eachPrice
+			, B.MSG_TYPE as msgType
+			, B.FILE_CNT as fileCnt
+			, B.AGENT_CODE as agentCode
+			, B.RESERVE_C_YN as reserveCYn
+			, B.CANCELDATE as canceldate
+			, B.DEL_FLAG as delFlag
+			, B.SEND_KIND as sendKind
+			, B.MSG_KIND as msgKind
+			, B.DELAY_YN as delayYn
+			, B.DELAY_COMPLETE_YN as delayCompleteYn
+		FROM MJ_MSG_DATA A
+				 JOIN MJ_MSG_GROUP_DATA B ON A.MSG_GROUP_ID = B.MSG_GROUP_ID
+		WHERE (B.DEL_FLAG = 'N' OR B.DEL_FLAG IS NULL)
+			AND A.DEL_FLAG = 'N'
+			AND B.RESERVE_C_YN = 'N'
+			AND B.USER_ID = #userId#
+			<![CDATA[
+				AND B.REQ_DATE <= DATE_ADD(NOW(), INTERVAL 60 MINUTE)
+			]]>
+				<isNotEmpty property="searchMsgType">
+					<isEqual property="searchMsgType" compareValue="S">
+						AND B.MSG_TYPE = '4'
+					</isEqual>
+					<isEqual property="searchMsgType" compareValue="L">
+						AND B.MSG_TYPE = '6'
+						AND B.FILE_CNT = '0'
+					</isEqual>
+					<isEqual property="searchMsgType" compareValue="M">
+					<![CDATA[
+						AND B.MSG_TYPE = '6'
+						AND B.FILE_CNT > '0'
+					]]>
+					</isEqual>
+				</isNotEmpty>
+				<isNotEmpty property="searchKeyword">
+					<isEqual property="searchCondition" compareValue="1" >
+						AND B.SUBJECT LIKE CONCAT('%', #searchKeyword#, '%')
+					</isEqual>
+					<isEqual property="searchCondition" compareValue="2" >
+						AND B.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
+					</isEqual>
+					<isEqual property="searchCondition" compareValue="3" >
+						AND CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
+					</isEqual>
+				</isNotEmpty>
+				<isNotEmpty property="searchCondition_01">
+					AND sendKind = #searchCondition_01#
+				</isNotEmpty>
+			<isNotEmpty property="startDate">
+				<![CDATA[
+					AND DATE_FORMAT(REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
+				]]>
+			</isNotEmpty>
+			<isNotEmpty property="endDate">
+				<![CDATA[
+					AND 	DATE_FORMAT(REGDATE, '%Y-%m-%d')  <=  DATE_FORMAT(#endDate#, '%Y-%m-%d')
+				]]>
+			</isNotEmpty>
+		GROUP BY B.MSG_GROUP_ID
+		ORDER BY 1=1
+			<isNotEmpty property="searchSortCnd">
+				<isEqual property="searchSortCnd" compareValue="curState">
+					, curState  $searchSortOrd$
+					, orderByrsltCode
+				</isEqual>
+				<isNotEqual  property="searchSortCnd" compareValue="curState">
+					,$searchSortCnd$
+				</isNotEqual>
+			</isNotEmpty>
+			<isNotEmpty property="searchSortOrd">
+				$searchSortOrd$
+			</isNotEmpty>
+		LIMIT  #recordCountPerPage# OFFSET #firstIndex#
+	
+		
+	</select>
+	
 	<!-- 전체 발송결과 조회  (전송사별)-->
 	<select id="MjonMsgSentDAO.selectAllMsgSentList" parameterClass="mjonMsgSentVO" resultClass="mjonMsgSentVO">
 		SELECT
src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp
@@ -58,18 +58,11 @@
 		}
 	});
 	
-	if($("#tdType").val() == "groupList"){
-		$('td[name="listTd"]').attr("rowspan", "2")
-	}else{
-		$('tr[name="listTr"]').remove();
-		$('td[name="listSucc"]').remove();
-	}
 });
 
 </script>
     <div class="list_info">
-    	<input type="hidden"  id="tdType" value="${mjonMsgSentVO.listType}">
-        <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
+        <p>총 <span class="c_e40000" id="testId"><c:out value="${totalRecordCount}"/></span>건</p>
         <div>
             <label for="pageUnit" class="label">줄보기 선택</label>
             <select id="pageUnit" name="pageUnit" class="selType2">
@@ -84,104 +77,86 @@
 	<div class="tb_wrap">
 		<table class="tType4">
 			<colgroup>
-				<col style="width: 40px;">
+				<col style="width: 45px;">
 				<col style="width: 12%;">
 				<col style="width: 8%;">
-				<col style="width: 90px;">
-				<col style="width: 10%;">
-				<col style="width: 15%;">
-				<col style="width: 12%;">
+				<col style="width: auto;">
 				<col style="width: 8%;">
-			<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
-				<col style="width: 8%;">
-				<col style="width: 8%;">
-			</c:if>
+				<col style="width: 6%;">
+				<col style="width: 6%;">
+				<col style="width: 6%;">
+				<col style="width: 6%;">
+				<col style="width: 6%;">
+				<col style="width: 11%;">
 			</colgroup>
 			<thead>
 				<tr>
-					<th>
+					<th rowspan="2">
 						<label for="allCheck" class="label">전체 선택</label>
 						<input type="checkbox" id="allCheck" name="allCheck">
 					</th>
-					<th>발송일시
+					<th rowspan="2">발송일시
 						<div class="sort_wrap">
 							<input type="button" class="sort sortBtn" id="sort_reqdate">
 						</div>
 					</th>
-					<th>형태
+					<th rowspan="2">형태
 						<div class="sort_wrap">
 							<input type="button" class="sort sortBtn" id="sort_orderByCode">
 						</div>
 					</th>
-					<th>발송방식
+					<!-- <th>발송방식
 						<div class="sort_wrap">
 							<input type="button" class="sort sortBtn" id="sort_sendKind">
 						</div>
-					</th>
-					<th>내용</th>
-					<th>받는사람
+					</th> -->
+					<th rowspan="2">내용</th>
+					<!-- <th>받는사람
 						<div class="sort_wrap">
 							<input type="button" class="sort sortBtn" id="sort_callTo">
 						</div>
-					</th>
-					<th>발신번호
+					</th> -->
+					<!-- <th>발신번호
 						<div class="sort_wrap">
 							<input type="button" class="sort sortBtn" id="sort_callFrom">
 						</div>
-					</th>
-					<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
-					<th>
+					</th> -->
+					<th rowspan="2">
 						발송건수
 						<div class="sort_wrap">
 							<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
 						</div>
 					</th>
-					</c:if>
-					<th>결과</th>
-					<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
-					<th>건수</th>
-					</c:if>
-					<th>금액</th>
+					<th colspan="4">결과</th>
+					<th rowspan="2">금액</th>
+					<th rowspan="2">예약관리</th>
+<!-- 					<th>금액</th> -->
+				</tr>
+				<tr>
+					<th>대기</th>
+					<th>성공</th>
+					<th>실패</th>
+					<th>예약</th>
 				</tr>
 			</thead>
 			<tbody>
 				<c:choose>
 					<c:when test="${not empty resultAllSentList}">
 					<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
-						<c:set var="replaceCnt" value="0" />
-						<c:set var="electionCnt" value="0" />
-						<c:set var="advertisementCnt" value="0" />		
-
-						<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'[*이름*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*1*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*2*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*3*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*4*]') != -1}">
-							<c:set var="replaceCnt" value="1" />
-						</c:if>
-						<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(선거운동정보)') == 0}">
-							<c:set var="electionCnt" value="1" />
-						</c:if>					
-						<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(광고)') == 0}">
-							<c:set var="advertisementCnt" value="1" />
-						</c:if>											
 						<tr>
-							<td name="listTd">
+							<td>
 								<label for="msgSentDel${status.count}" class="label">선택</label>
 								<c:choose>
 									<c:when test="${resultAllSentList.curState == '0'}">
 										<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" disabled> 
 									</c:when>
-									<c:otherwise>
-										<c:choose>
-											<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
-												<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}">	
-											</c:when>
-											<c:otherwise>
-												<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgSeq}">
-											</c:otherwise>
-										</c:choose>
-									</c:otherwise>
+									<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
+										<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}">	
+									</c:when>
 								</c:choose>
 								
 							</td>
-							<td name="listTd">
+							<td>
 								<c:choose>
 									<c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}">
 									
@@ -205,7 +180,7 @@
 									</c:otherwise>
 								</c:choose>
 							</td>
-							<td name="listTd">
+							<td>
 								<p>
 									<c:choose>
 										<c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt eq 0 }">
@@ -220,239 +195,40 @@
 									</c:choose>
 								</p>
 							</td>
-							<td name="listTd">
-								<p>
-									<c:choose>
-										<c:when test="${resultAllSentList.sendKind eq 'H' }">
-											WEB
-										</c:when>
-										<c:when test="${resultAllSentList.sendKind eq 'A'}">
-											API
-										</c:when>
-										<c:otherwise>
-											-
-										</c:otherwise>
-									</c:choose>
-								</p>
+							<td class="result_cont" title="${resultAllSentList.smsTxt}">
+								<a href="#none" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">
+<%-- 								<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
+									<c:out value="${fn:substring(resultAllSentList.smsTxt, 0, 20)}" />
+									<c:if test="${fn:length(resultAllSentList.smsTxt) > 20}">...</c:if>
+								</a>
 							</td>
-							<td name="listTd">
-								<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button>
-								<button class="btnType btnType20" onClick="javascript:fnMjMsgReSendAll('${resultAllSentList.msgGroupId}','${replaceCnt}','${electionCnt}','${advertisementCnt}'); return false;">재전송</button>
+							<td>
+								<p><c:out value="${resultAllSentList.msgGroupCnt}"/> </p>
 							</td>
-							<td name="listTd">
-								<c:choose>
-									<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
-										<c:choose>
-											<c:when test="${resultAllSentList.msgGroupCnt > 1}">
-												<p>
-													<c:choose>
-														<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
-															<c:out value="${resultAllSentList.addrNm}"/>
-														</c:when>
-														<c:otherwise>
-															<c:out value="${resultAllSentList.callToComma}"/>
-														</c:otherwise>
-													</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
-												</p>	
-											</c:when>
-											<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
-												<p><c:out value="${resultAllSentList.addrNm}"/></p>
-											</c:when>
-											<c:otherwise>
-												<p><c:out value="${resultAllSentList.callToComma}"/></p>
-											</c:otherwise>
-										</c:choose>
-									</c:when>
-									<c:otherwise>
-										<c:choose>
-											<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
-												<p><c:out value="${resultAllSentList.addrNm}"/></p>
-											</c:when>
-											<c:otherwise>
-												<p><c:out value="${resultAllSentList.callToComma}"/></p>
-											</c:otherwise>
-										</c:choose>
-									</c:otherwise>
-								</c:choose>
+							<td>
+								<p><c:out value="${resultAllSentList.resultWValue}"/> </p>
 							</td>
-							<td name="listTd">
-								<p><c:out value="${resultAllSentList.callFromComma}"/></p>
+							<td>
+								<p><c:out value="${resultAllSentList.resultSValue}"/> </p>
 							</td>
-						<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
-							<td name="listTd">
-								<p><c:out value="${resultAllSentList.msgGroupCnt}"/></p>
+							<td>
+								<p><c:out value="${resultAllSentList.resultFValue}"/> </p>
 							</td>
-						</c:if>
-							<!-- 발송 성공/실패 listType에 따른 전송건별(groupList), 개인별 리스트 처리-->
-							<c:set var="succ" value="0"/> <!-- 정상수신-->
-							<c:set var="fail" value="0"/> <!-- 수신실패-->
-							<c:set var="wait" value="0"/> <!-- 결과대기-->
-							<c:set var="succPrice" value="0"/> <!-- 정상수신 가격-->
-							<c:set var="failPrice" value="0"/> <!-- 수신실패 가격-->
-							<c:set var="waitPrice" value="0"/> <!-- 결과대기 가격-->
-							<c:set var="msgResultSts" value=""/><!-- 결과상태 확인 -->
-							<c:forEach var="resultMsgSFList" items="${resultMsgSucFailList}" varStatus="status">
-								<c:choose>
-									<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
-										<c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId}">
-											<c:if test="${resultMsgSFList.msgResultSts == 'S'}">
-												<c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
-												<c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
-											</c:if>
-											<c:if test="${resultMsgSFList.msgResultSts == 'F'}">
-												<c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
-												<c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
-											</c:if>
-											<c:if test="${resultMsgSFList.msgResultSts == 'W'}">
-												<c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
-												<c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
-											</c:if>
-										</c:if>
-									</c:when>
-									<c:otherwise>
-										<c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId && resultAllSentList.msgSeq == resultMsgSFList.msgSeq}">
-											<c:set var="msgResultSts" value="${resultMsgSFList.msgResultSts}"/>
-											<c:if test="${resultMsgSFList.msgResultSts == 'S'}">
-												<c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
-												<c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
-											</c:if>
-											<c:if test="${resultMsgSFList.msgResultSts == 'F'}">
-												<c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
-												<c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
-											</c:if>
-											<c:if test="${resultMsgSFList.msgResultSts == 'W'}">
-												<c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
-												<c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
-											</c:if>
-										</c:if>
-									</c:otherwise>
-								</c:choose>
-							</c:forEach>
-							<td name="listSucc">
-								<p class="fwRg c_002c9a">정상수신</p>
+							<td>
+								<p class="c_222">0</p>
 							</td>
-							<td name="listSucc">
-								<c:choose>
-									<c:when test="${mjonMsgSentVO.listType == 'groupList' && succ > 0}">
-										<p class="fwRg c_002c9a" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>	
-									</c:when>
-									<c:otherwise>
-										<p class="fwRg c_002c9a"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>
-									</c:otherwise>
-								</c:choose>
+							<td>
+								<c:out value="${resultAllSentList.totPrice}"/>원
 							</td>
-							<!-- 과금/비과금 -->
-							<td name="listSucc">
-								<p class="fwRg c_002c9a">
-									<c:choose>
-										<c:when test="${succPrice > 0}">
-											<fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
-										</c:when>
-										<c:otherwise>
-											0
-										</c:otherwise>
-									</c:choose>
-								</p>
-							</td>
+							<td>-</td>
 							
-							<c:if test="${mjonMsgSentVO.listType != 'groupList'}">
-								<c:if test="${msgResultSts == 'S'}">
-									<td>
-										<p class="fwRg c_002c9a">정상수신</p>
-									</td>
-									<!-- 과금/비과금 -->
-									<td>
-										<p class="fwRg c_002c9a">
-											<c:choose>
-												<c:when test="${succPrice > 0}">
-													<fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
-												</c:when>
-												<c:otherwise>
-													0
-												</c:otherwise>
-											</c:choose>
-										</p>
-									</td>
-								</c:if>
-								<c:if test="${msgResultSts == 'F'}">
-									<td>
-										<p class="fwRg c_e40000">수신오류</p>
-									</td>
-									<!-- 과금/비과금 -->
-									<td>
-										<p class="fwRg c_e40000">
-											<c:choose>
-												<c:when test="${failPrice > 0}">
-													<fmt:formatNumber value="${failPrice}" pattern="#,###.#"/>
-												</c:when>
-												<c:otherwise>
-													0
-												</c:otherwise>
-											</c:choose>
-										</p>
-									</td>
-								</c:if>
-								<c:if test="${msgResultSts == 'W'}">
-									<td>
-										<p class="fwRg c_e40000">결과대기</p>
-									</td>
-									<!-- 과금/비과금 -->
-									<td>
-										<p class="fwRg c_e40000">
-											<c:choose>
-												<c:when test="${waitPrice > 0}">
-													<fmt:formatNumber value="${waitPrice}" pattern="#,###.#"/>
-												</c:when>
-												<c:otherwise>
-													0
-												</c:otherwise>
-											</c:choose>
-										</p>
-									</td>
-								</c:if>
-							</c:if>
-						</tr>
-						<tr name="listTr">
-							<td>
-								<p class="c_222">실패/대기</p>
-							</td>
-							<td>
-								<c:choose>
-									<c:when test="${mjonMsgSentVO.listType == 'groupList' && (fail+wait) > 0}">
-										<p class="c_222" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;">
-											<fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
-										</p>
-									</c:when>
-									<c:otherwise>
-										<p class="c_222">
-											<fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
-										</p>
-									</c:otherwise>
-								</c:choose>
-							</td>
-							<td>
-								<p class="c_222">
-									<c:choose>
-										<c:when test="${(failPrice+waitPrice) > 0}">
-											<fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/>
-										</c:when>
-										<c:otherwise>
-											0
-										</c:otherwise>
-									</c:choose>
-								</p>
-							</td>
+							
 						</tr>
 					</c:forEach>
 					</c:when>
 					<c:otherwise>
 					<tr>
-						<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
-							<td colspan="11">발송 내역이 없습니다.</td>
-						</c:if>
-						<c:if test="${mjonMsgSentVO.listType ne 'groupList'}">
-							<td colspan="9">발송 내역이 없습니다.</td>
-						</c:if>
+						<td colspan="11">발송 내역이 없습니다.</td>
 					</tr>
 					</c:otherwise>
 				</c:choose>
 
src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax_advc_backup_20250115.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax_advc_backup_20250115.jsp
@@ -0,0 +1,479 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ page import="itn.com.cmm.LoginVO" %>
+<script src="/publish/js/content.js"></script>
+<script src="/publish/js/popupLayer.js"></script>
+<script type="text/javascript">
+$(document).ready(function(){
+	var startDate = '${startDate}';
+	var endDate = '${endDate}';
+    
+	// DatePicker 값 수정
+    var startDatePicker = $('#startDate').pickadate('picker');
+    startDatePicker.set('select', startDate, { format: 'yyyy/mm/dd' });
+    startDatePicker = $('#endDate').pickadate('picker');
+    startDatePicker.set('select', endDate, { format: 'yyyy/mm/dd' });
+    
+	
+	/* 목록 정렬 항목 아이콘 표시 */ 
+	var searchSortCnd = $("[name='searchSortCnd']").val();
+	var searchSortOrd = $("[name='searchSortOrd']").val();
+	if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd  != undefined && searchSortOrd  != undefined) {
+		var $sort_div = $("#sort_"+ searchSortCnd);
+		var sortClass = 'sortBtn' ;
+		if (searchSortOrd == "desc") sortClass = "sortBtnDesc";
+		$sort_div.replaceClass('sortBtn' , sortClass) ;
+		$sort_div.attr("sortOrd", searchSortOrd);
+	}
+	
+	//체크박스 전체 선택 및 해제
+	var allChkSts = false;
+	$("#allCheck").click(function(){
+		
+		if(!allChkSts){// 전체선택이 해제되어 있을 경우
+			
+			$("input[name=msgSentDel]").prop("checked", true);
+			allChkSts = true;
+			
+			//발송 대기건은 선택 삭제가 안되도록 처리함
+			$("input:checkbox[name='msgSentDel']:checked").each(function(index){
+				
+				var disabledChk = $(this).prop('disabled');
+				if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+					
+					$(this).prop("checked", false);
+					
+				}
+				
+			});
+			
+		}else{
+			
+			$("input[name=msgSentDel]").prop("checked", false);
+			allChkSts = false;
+
+		}
+	});
+	
+	if($("#tdType").val() == "groupList"){
+		$('.listTd').attr("rowspan", "2")
+	}else{
+		$('.listTr').remove();
+		$('.listSucc').remove();
+	}
+});
+
+</script>
+    <div class="list_info">
+    	<input type="hidden"  id="tdType" value="${mjonMsgSentVO.listType}">
+        <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
+        <div>
+            <label for="pageUnit" class="label">줄보기 선택</label>
+            <select id="pageUnit" name="pageUnit" class="selType2">
+                <option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
+                <option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
+                <option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
+                <option value="100" <c:if test="${paginationInfo.recordCountPerPage == '100'}">selected</c:if> >100개보기</option>
+            </select>
+        </div>
+    </div>
+	<!-- 받는사람(전송건별) - 전체 -->
+	<div class="tb_wrap">
+		<table class="tType4">
+			<colgroup>
+				<col style="width: 40px;">
+				<col style="width: 12%;">
+				<col style="width: 8%;">
+				<col style="width: 90px;">
+				<col style="width: 10%;">
+				<col style="width: 15%;">
+				<col style="width: 12%;">
+				<col style="width: 8%;">
+			<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
+				<col style="width: 8%;">
+				<col style="width: 8%;">
+			</c:if>
+			</colgroup>
+			<thead>
+				<tr>
+					<th>
+						<label for="allCheck" class="label">전체 선택</label>
+						<input type="checkbox" id="allCheck" name="allCheck">
+					</th>
+					<th>발송일시
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_reqdate">
+						</div>
+					</th>
+					<th>형태
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_orderByCode">
+						</div>
+					</th>
+					<th>발송방식
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_sendKind">
+						</div>
+					</th>
+					<th>내용</th>
+					<th>받는사람
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_callTo">
+						</div>
+					</th>
+					<th>발신번호
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_callFrom">
+						</div>
+					</th>
+					<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
+					<th>
+						발송건수
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
+						</div>
+					</th>
+					</c:if>
+					<th>결과</th>
+					<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
+					<th>건수</th>
+					</c:if>
+					<th>금액</th>
+				</tr>
+			</thead>
+			<tbody>
+				<c:choose>
+					<c:when test="${not empty resultAllSentList}">
+					<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
+						<c:set var="replaceCnt" value="0" />
+						<c:set var="electionCnt" value="0" />
+						<c:set var="advertisementCnt" value="0" />		
+
+						<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'[*이름*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*1*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*2*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*3*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*4*]') != -1}">
+							<c:set var="replaceCnt" value="1" />
+						</c:if>
+						<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(선거운동정보)') == 0}">
+							<c:set var="electionCnt" value="1" />
+						</c:if>					
+						<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(광고)') == 0}">
+							<c:set var="advertisementCnt" value="1" />
+						</c:if>											
+						<tr>
+							<td class="listTd">
+								<label for="msgSentDel${status.count}" class="label">선택</label>
+								<c:choose>
+									<c:when test="${resultAllSentList.curState == '0'}">
+										<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" disabled> 
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
+												<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}">	
+											</c:when>
+											<c:otherwise>
+												<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgSeq}">
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								
+							</td>
+							<td class="listTd">
+								<c:choose>
+									<c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}">
+									
+										<c:choose>
+											<c:when test="${resultAllSentList.curState eq '0'}">
+												<%-- 
+													20240906 추가
+													발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
+													30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
+												 --%>
+												<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p>	
+											</c:when>
+											<c:otherwise>
+												<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
+											</c:otherwise>
+										</c:choose>
+										
+									</c:when>
+									<c:otherwise>
+										<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
+									</c:otherwise>
+								</c:choose>
+							</td>
+							<td class="listTd">
+								<p>
+									<c:choose>
+										<c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt eq 0 }">
+											장문
+										</c:when>
+										<c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt ne 0 }">
+											그림
+										</c:when>
+										<c:otherwise>
+											단문
+										</c:otherwise>
+									</c:choose>
+								</p>
+							</td>
+							<td class="listTd">
+								<p>
+									<c:choose>
+										<c:when test="${resultAllSentList.sendKind eq 'H' }">
+											WEB
+										</c:when>
+										<c:when test="${resultAllSentList.sendKind eq 'A'}">
+											API
+										</c:when>
+										<c:otherwise>
+											-
+										</c:otherwise>
+									</c:choose>
+								</p>
+							</td>
+							<td class="listTd">
+								<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button>
+								<button class="btnType btnType20" onClick="javascript:fnMjMsgReSendAll('${resultAllSentList.msgGroupId}','${replaceCnt}','${electionCnt}','${advertisementCnt}'); return false;">재전송</button>
+							</td>
+							<td class="listTd">
+								<c:choose>
+									<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
+										<c:choose>
+											<c:when test="${resultAllSentList.msgGroupCnt > 1}">
+												<p>
+													<c:choose>
+														<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
+															<c:out value="${resultAllSentList.addrNm}"/>
+														</c:when>
+														<c:otherwise>
+															<c:out value="${resultAllSentList.callToComma}"/>
+														</c:otherwise>
+													</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
+												</p>	
+											</c:when>
+											<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
+												<p><c:out value="${resultAllSentList.addrNm}"/></p>
+											</c:when>
+											<c:otherwise>
+												<p><c:out value="${resultAllSentList.callToComma}"/></p>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
+												<p><c:out value="${resultAllSentList.addrNm}"/></p>
+											</c:when>
+											<c:otherwise>
+												<p><c:out value="${resultAllSentList.callToComma}"/></p>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+							</td>
+							<td class="listTd">
+								<p><c:out value="${resultAllSentList.callFromComma}"/></p>
+							</td>
+						<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
+							<td class="listTd">
+								<p><c:out value="${resultAllSentList.msgGroupCnt}"/></p>
+							</td>
+						</c:if>
+							<!-- 발송 성공/실패 listType에 따른 전송건별(groupList), 개인별 리스트 처리-->
+							<c:set var="succ" value="0"/> <!-- 정상수신-->
+							<c:set var="fail" value="0"/> <!-- 수신실패-->
+							<c:set var="wait" value="0"/> <!-- 결과대기-->
+							<c:set var="succPrice" value="0"/> <!-- 정상수신 가격-->
+							<c:set var="failPrice" value="0"/> <!-- 수신실패 가격-->
+							<c:set var="waitPrice" value="0"/> <!-- 결과대기 가격-->
+							<c:set var="msgResultSts" value=""/><!-- 결과상태 확인 -->
+							<c:forEach var="resultMsgSFList" items="${resultMsgSucFailList}" varStatus="status">
+								<c:choose>
+									<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
+										<c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId}">
+											<c:if test="${resultMsgSFList.msgResultSts == 'S'}">
+												<c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
+												<c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
+											</c:if>
+											<c:if test="${resultMsgSFList.msgResultSts == 'F'}">
+												<c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
+												<c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
+											</c:if>
+											<c:if test="${resultMsgSFList.msgResultSts == 'W'}">
+												<c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
+												<c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
+											</c:if>
+										</c:if>
+									</c:when>
+									<c:otherwise>
+										<c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId && resultAllSentList.msgSeq == resultMsgSFList.msgSeq}">
+											<c:set var="msgResultSts" value="${resultMsgSFList.msgResultSts}"/>
+											<c:if test="${resultMsgSFList.msgResultSts == 'S'}">
+												<c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
+												<c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
+											</c:if>
+											<c:if test="${resultMsgSFList.msgResultSts == 'F'}">
+												<c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
+												<c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
+											</c:if>
+											<c:if test="${resultMsgSFList.msgResultSts == 'W'}">
+												<c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
+												<c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
+											</c:if>
+										</c:if>
+									</c:otherwise>
+								</c:choose>
+							</c:forEach>
+							<td class="listSucc">
+								<p class="fwRg c_002c9a">정상수신</p>
+							</td>
+							<td class="listSucc">
+								<c:choose>
+									<c:when test="${mjonMsgSentVO.listType == 'groupList' && succ > 0}">
+										<p class="fwRg c_002c9a" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>	
+									</c:when>
+									<c:otherwise>
+										<p class="fwRg c_002c9a"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>
+									</c:otherwise>
+								</c:choose>
+							</td>
+							<!-- 과금/비과금 -->
+							<td class="listSucc">
+								<p class="fwRg c_002c9a">
+									<c:choose>
+										<c:when test="${succPrice > 0}">
+											<fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
+										</c:when>
+										<c:otherwise>
+											0
+										</c:otherwise>
+									</c:choose>
+								</p>
+							</td>
+							
+							<c:if test="${mjonMsgSentVO.listType != 'groupList'}">
+								<c:if test="${msgResultSts == 'S'}">
+									<td>
+										<p class="fwRg c_002c9a">정상수신</p>
+									</td>
+									<!-- 과금/비과금 -->
+									<td>
+										<p class="fwRg c_002c9a">
+											<c:choose>
+												<c:when test="${succPrice > 0}">
+													<fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
+												</c:when>
+												<c:otherwise>
+													0
+												</c:otherwise>
+											</c:choose>
+										</p>
+									</td>
+								</c:if>
+								<c:if test="${msgResultSts == 'F'}">
+									<td>
+										<p class="fwRg c_e40000">수신오류</p>
+									</td>
+									<!-- 과금/비과금 -->
+									<td>
+										<p class="fwRg c_e40000">
+											<c:choose>
+												<c:when test="${failPrice > 0}">
+													<fmt:formatNumber value="${failPrice}" pattern="#,###.#"/>
+												</c:when>
+												<c:otherwise>
+													0
+												</c:otherwise>
+											</c:choose>
+										</p>
+									</td>
+								</c:if>
+								<c:if test="${msgResultSts == 'W'}">
+									<td>
+										<p class="fwRg c_e40000">결과대기</p>
+									</td>
+									<!-- 과금/비과금 -->
+									<td>
+										<p class="fwRg c_e40000">
+											<c:choose>
+												<c:when test="${waitPrice > 0}">
+													<fmt:formatNumber value="${waitPrice}" pattern="#,###.#"/>
+												</c:when>
+												<c:otherwise>
+													0
+												</c:otherwise>
+											</c:choose>
+										</p>
+									</td>
+								</c:if>
+							</c:if>
+						</tr>
+						<tr class="listTr">
+							<td>
+								<p class="c_222">실패/대기</p>
+							</td>
+							<td>
+								<c:choose>
+									<c:when test="${mjonMsgSentVO.listType == 'groupList' && (fail+wait) > 0}">
+										<p class="c_222" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;">
+											<fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
+										</p>
+									</c:when>
+									<c:otherwise>
+										<p class="c_222">
+											<fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
+										</p>
+									</c:otherwise>
+								</c:choose>
+							</td>
+							<td>
+								<p class="c_222">
+									<c:choose>
+										<c:when test="${(failPrice+waitPrice) > 0}">
+											<fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/>
+										</c:when>
+										<c:otherwise>
+											0
+										</c:otherwise>
+									</c:choose>
+								</p>
+							</td>
+						</tr>
+					</c:forEach>
+					</c:when>
+					<c:otherwise>
+					<tr>
+						<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
+							<td colspan="11">발송 내역이 없습니다.</td>
+						</c:if>
+						<c:if test="${mjonMsgSentVO.listType ne 'groupList'}">
+							<td colspan="9">발송 내역이 없습니다.</td>
+						</c:if>
+					</tr>
+					</c:otherwise>
+				</c:choose>
+			</tbody>
+		</table>
+	</div>
+	<div class="table_btn clearfix">
+		<div class="table_btn_left">
+		<!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) -->
+<!-- 			<button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> -->
+			<button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button>
+			<button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${mjonMsgSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button>
+            <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${mjonMsgSentVO.listType}'); return false;"></i>수신거부번호 등록</button>
+		</div>
+		<div class="table_btn_right">
+			<button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${mjonMsgSentVO.tabType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button>
+			<button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${mjonMsgSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button>
+		</div>
+	</div>
+	<c:if test="${!empty resultAllSentList}">
+	   <ul class="pagination">
+	       <ui:pagination paginationInfo = "${paginationInfo}"  type="imageWeb" jsFunction="linkPage" />
+	   </ul>
+	</c:if>
src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
@@ -744,10 +744,10 @@
 }
 
 //발송결과 - 대기/성공/실패
-function subContent(p_content_no){	
+function subContent(){
 	
 	var sendData =  $(document.listForm).serializeArray();
-	var v_html_pre	=	'<table>'
+	/* var v_html_pre	=	'<table>'
 			+	'<caption>구분, 충전금액, 사용금액, 잔액 등 정보를 제공하는 표</caption>'
 			+	'<colgroup>'
 			+	'<col style="width: 115px;">'
@@ -766,8 +766,8 @@
 			+	'<tbody>'
 			+	'<tr><td colspan="4">LOADING...</td></tr>'
 			+	'</tbody>'
-			+	'</table>';
-
+			+	'</table>'; 
+		*/
 	var v_html_pre	=	''
 		+	'<div class="rev_admin_in">'
 		+	'<div class="rev_admin_top clearfix">'
Add a comment
List