wyh 2023-12-26
Merge branch 'master' of http://dudgusw@vcs.iten.co.kr:9999/hylee/mjon_git
@b8fd7df1d2bdc354fb6da5fd84cbb06e246e825c
src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
--- src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
+++ src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
@@ -200,6 +200,11 @@
 	
 	private String searchDelayMsgYn;
 
+	private int succSendCnt;
+	private int failSendCnt;
+	private double succSendPrice;
+	private double failSendPrice;
+	
 	public String getSearchDelayMsgYn() {
 		return searchDelayMsgYn;
 	}
@@ -1595,4 +1600,28 @@
 	public void setFtSendCount(int ftSendCount) {
 		this.ftSendCount = ftSendCount;
 	}
+	public int getSuccSendCnt() {
+		return succSendCnt;
+	}
+	public void setSuccSendCnt(int succSendCnt) {
+		this.succSendCnt = succSendCnt;
+	}
+	public int getFailSendCnt() {
+		return failSendCnt;
+	}
+	public void setFailSendCnt(int failSendCnt) {
+		this.failSendCnt = failSendCnt;
+	}
+	public double getSuccSendPrice() {
+		return succSendPrice;
+	}
+	public void setSuccSendPrice(double succSendPrice) {
+		this.succSendPrice = succSendPrice;
+	}
+	public double getFailSendPrice() {
+		return failSendPrice;
+	}
+	public void setFailSendPrice(double failSendPrice) {
+		this.failSendPrice = failSendPrice;
+	}
 }
src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
--- src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
+++ src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
@@ -79,6 +79,8 @@
 	
 	public List<MjonMsgVO> selectPayUserList(MjonMsgVO mjonMsgVO) throws Exception; 
 	
+	public List<MjonMsgVO> selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception;
+	
 	public List<MjonMsgVO> selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception;
 	
 	// 중계사 시스템 발송 문자 내용 입력
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
@@ -152,6 +152,11 @@
 	}
 	
 	@SuppressWarnings("unchecked")
+	public List<MjonMsgVO> selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception{
+		return (List<MjonMsgVO>) list("mjonMsgDAO.selectPayUserSWList",mjonMsgVO);
+	}
+	
+	@SuppressWarnings("unchecked")
 	public List<MjonMsgVO> selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception{
 		return (List<MjonMsgVO>) list("mjonMsgDAO.selectPayUserSumList",mjonMsgVO);
 	}
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
@@ -1775,6 +1775,11 @@
 	}
 	
 	@Override
+	public List<MjonMsgVO> selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception {
+		return mjonMsgDataDAO.selectPayUserSWList(mjonMsgVO);
+	}
+	
+	@Override
 	public List<MjonMsgVO> selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception {
 		return mjonMsgDataDAO.selectPayUserSumList(mjonMsgVO);
 	}
src/main/java/itn/let/mjo/pay/web/MjonPayController.java
--- src/main/java/itn/let/mjo/pay/web/MjonPayController.java
+++ src/main/java/itn/let/mjo/pay/web/MjonPayController.java
@@ -2099,6 +2099,13 @@
     		return "/web/pay/PayListAllAjax";
 		}
     	
+    	//후불제 회원 여부 조회 
+		UserManageVO userManageVO = new UserManageVO();
+		userManageVO.setMberId(userId);
+		userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO);
+		
+		model.addAttribute("prePaymentYn", userManageVO.getPrePaymentYn());
+    	
 		return "/web/pay/PayList";
 	}
     
@@ -2514,7 +2521,7 @@
 		return "/web/pay/PayUserWithKakaoList";
 	}    
     /**
-	 * 요금사용내역
+	 * 요금사용내역 하단 리스트 영역
 	 * @param mjonMsgVO
 	 * @param model
 	 * @return	"/web/member/pay/PayUserListAjax.do"
@@ -2557,6 +2564,393 @@
 		return "/web/pay/PayUserListAjax";
 	}
     
+    
+    
+    
+	/**
+	 * 요금사용내역 신규 화면
+	 * 2023.12.22 우영두 
+	 * @param mjonMsgVO
+	 * @param model
+	 * @return	"/web/member/pay/PayUserSWList.do"
+	 * @throws Exception
+	 */
+    @RequestMapping(value= {"/web/member/pay/PayUserSWList.do"})
+	public String PayUserSWList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO,
+			MjonPayVO mjonPayVO,
+			MberManageVO mberManageVO, RedirectAttributes redirectAttributes,
+			HttpServletRequest request,
+			ModelMap model) throws Exception{
+		
+		/*LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		
+		if(loginVO == null) {
+			//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
+			return "redirect:/web/user/login/login.do";
+		}    	
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		mjonMsgVO.setUserId(userId);
+		
+		{ // 충전캐시
+			String sumPayMoney = mjonPayService.selectAgentSumPayMoney(userId); 
+			model.addAttribute("sumPayMoney", sumPayMoney);
+		}
+		
+		{ // 충전포인트
+			String sumPoint = mjonPayService.selectSumPoint(userId); 
+			model.addAttribute("sumPoint", sumPoint);
+		}
+				
+		{ // 총 사용금액
+			mjonPayVO.setUserId(userId);
+			List<MjonPayVO>  usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO);	
+			model.addAttribute("usedCashTotList", usedCashTotList);
+		}
+		{ // 사용가능한 금액
+			mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
+			model.addAttribute("mberManageVO", mberManageVO);
+		}
+		
+		{ // 발송건수
+			mjonMsgVO.setReserveYn("N");
+			List<MjonMsgVO>  sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
+			model.addAttribute("sendTotList", sendTotList);
+		}
+		
+		{ // 예약건수
+			mjonMsgVO.setReserveYn("Y");
+			List<MjonMsgVO>  reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
+			model.addAttribute("reservToList", reservToList);
+		}
+		
+		{
+			MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
+			if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기
+				mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId);
+				if(mjonCandidateVO != null) {
+					mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()));
+					mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()));
+				}
+			}
+			model.addAttribute("mjonCandidateVO", mjonCandidateVO);
+		}
+		return "/web/pay/PayUserSWList";
+	}
+    
+    
+    /**
+	 * 요금사용내역 하단 리스트 영역 신규 화면
+	 * 2023.12.22 우영두
+	 * @param mjonMsgVO
+	 * @param model
+	 * @return	"/web/member/pay/PayUserSWListAjax.do"
+	 * @throws Exception
+	 */
+    @RequestMapping(value= {"/web/member/pay/PayUserSWListAjax.do"})
+	public String PayUserSWListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
+			HttpServletRequest request,
+			ModelMap model) throws Exception{
+		
+		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		mjonMsgVO.setUserId(userId);
+		
+		if(mjonMsgVO.getPageUnit() != 10) {
+			mjonMsgVO.setPageUnit(mjonMsgVO.getPageUnit());
+		}
+		
+		/** pageing */
+		PaginationInfo paginationInfo = new PaginationInfo();
+		paginationInfo.setCurrentPageNo(mjonMsgVO.getPageIndex());
+		paginationInfo.setRecordCountPerPage(mjonMsgVO.getPageUnit());
+		paginationInfo.setPageSize(mjonMsgVO.getPageSize());
+
+		mjonMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+		mjonMsgVO.setLastIndex(paginationInfo.getLastRecordIndex());
+		mjonMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); 
+		
+		if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
+			mjonMsgVO.setSearchSortCnd("regDate");
+			mjonMsgVO.setSearchSortOrd("desc");
+		}
+		
+		
+		List<MjonMsgVO> payUserSWList =  mjonMsgDataService.selectPayUserSWList(mjonMsgVO);
+		
+		paginationInfo.setTotalRecordCount(payUserSWList.size()> 0 ? payUserSWList.get(0).getTotCnt() : 0);
+		model.addAttribute("paginationInfo", paginationInfo);
+		model.addAttribute("payUserSWList", payUserSWList);
+		
+		return "/web/pay/PayUserSWListAjax";
+	}
+    
+	@RequestMapping(value= {"/web/member/pay/PayPdfSWListPopUpAjax.do"})
+	public String payPrintPdfSWDataAjax(
+			@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO
+			, RedirectAttributes redirectAttributes
+			, ModelMap model) throws Exception {
+		//로그인 권한정보 불러오기
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName());
+		
+		mjonMsgVO.setUserId(userId);
+		model.addAttribute("userNm", userNm);
+		
+		mjonMsgVO.setFirstIndex(0);
+		mjonMsgVO.setRecordCountPerPage(10000);
+		
+		//결제 리스트 정보 불러오기
+		List<MjonMsgVO> payUserList =  mjonMsgDataService.selectPayUserSWList(mjonMsgVO);
+		model.addAttribute("payUserList", payUserList);
+		
+		Calendar cal = Calendar.getInstance();
+
+		int year = cal.get(Calendar.YEAR);
+		int month = cal.get(Calendar.MONTH) + 1;
+		int day = cal.get(Calendar.DAY_OF_MONTH);
+		
+		model.addAttribute("year", year);
+		model.addAttribute("month", month);
+		model.addAttribute("day", day);
+
+		return "web/pay/PrintPayUserSWListPdfPopUp";
+	}
+	
+	
+    /**
+  	 * 요금 사용내역 엑셀 다운
+  	 * @param mjonMsgVO
+  	 * @param model
+  	 * @return	"/web/member/pay/PayUserListAjax.do"
+  	 * @throws Exception
+  	 */
+	@RequestMapping(value= {"/web/member/pay/PayUserSWListExcelDownload.do"})
+	public void PayUserSWListExcelDownload(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
+			HttpServletRequest request,
+			HttpServletResponse response ,
+			ModelMap model) throws Exception{
+		
+		// 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다.
+		SXSSFWorkbook wb = new SXSSFWorkbook(100);
+		String fileName ="사용내역 엑셀 리스트";		// 저장 파일명
+		String sheetTitle = "요금사용내역" ; 		// 셀 제목
+		Sheet sheet = wb.createSheet(sheetTitle);
+		Cell cell = null;
+		Row row = null;
+		
+		CellStyle style = wb.createCellStyle();
+		style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 
+		style.setBorderLeft(CellStyle.BORDER_THIN);
+		style.setBorderRight(CellStyle.BORDER_THIN);
+		style.setBorderTop(CellStyle.BORDER_THIN);
+		
+		// 정렬
+		style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
+		style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
+		
+		Font font = wb.createFont();
+		font.setBoldweight(Font.BOLDWEIGHT_BOLD);  //글씨 bold
+		
+		sheet.setColumnWidth(1, 5000); // 칼럼의 폭 조절
+		sheet.setColumnWidth(4, 10000); // 칼럼의 폭 조절
+
+		try{ 
+			
+			LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+			String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+			mjonMsgVO.setUserId(userId);
+			
+			mjonMsgVO.setRecordCountPerPage(100000);
+			mjonMsgVO.setFirstIndex(0);
+			
+			if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
+				mjonMsgVO.setSearchSortCnd("regDate");
+				mjonMsgVO.setSearchSortOrd("desc");
+			}
+			
+			List<MjonMsgVO> payUserList =  mjonMsgDataService.selectPayUserSWList(mjonMsgVO);
+			{//화면 리스트
+				
+  				row = sheet.createRow(0);
+  				
+  				sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //셀병합
+  				sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //셀병합
+  				sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //셀병합
+  				sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //셀병합
+  				
+  				
+  				cell = row.createCell(0);
+				cell.setCellValue("번호");
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(1);
+				cell.setCellValue("날짜");
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(2);
+				cell.setCellValue("문자유형");
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(3);
+				cell.setCellValue("발송건수");
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(4);
+				cell.setCellValue("내용");
+				cell.setCellStyle(style);
+				
+				/*cell = row.createCell(5);
+				cell.setCellValue("충전");
+				sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(6);
+				cell.setCellStyle(style);*/
+				
+				cell = row.createCell(5);
+				cell.setCellValue("사용");
+				sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(6);
+				cell.setCellStyle(style);
+				
+				
+				/*cell = row.createCell(9);
+				cell.setCellValue("잔액");
+				sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); //셀병합
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(10);
+				cell.setCellStyle(style);*/
+				
+				row = sheet.createRow(1);
+				
+				cell = row.createCell(0);
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(1);
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(2);
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(3);
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(4);
+				cell.setCellStyle(style);
+				
+				/*cell = row.createCell(5);
+				cell.setCellValue("충전금");
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(6);
+				cell.setCellValue("포인트");
+				cell.setCellStyle(style);*/
+				
+				cell = row.createCell(5);
+				cell.setCellValue("충전금");
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(6);
+				cell.setCellValue("포인트");
+				cell.setCellStyle(style);
+				
+				/*cell = row.createCell(9);
+				cell.setCellValue("충전금");
+				cell.setCellStyle(style);
+				
+				cell = row.createCell(10);
+				cell.setCellValue("포인트");
+				cell.setCellStyle(style);*/
+				
+				DecimalFormat formatter = new DecimalFormat("###,###.##");
+				String befCash = "";
+				String befPoint = "";
+				String totPrice = "";
+				String thisPoint = "";
+				
+				for(int i=0; i < payUserList.size(); i++) {
+					
+					befCash = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getBefCash()));
+					befPoint = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getBefPoint()));
+					totPrice = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getTotPrice()));
+					thisPoint = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getThisPoint()));
+					
+					String msgType = "단문";
+					if(payUserList.get(i).getMsgTypeTxt().equals("6") && payUserList.get(i).getFileCnt().equals("0")) {
+						msgType = "장문";
+					}else if(payUserList.get(i).getMsgTypeTxt().equals("6") && !payUserList.get(i).getFileCnt().equals("0")) {
+						msgType = "그림";
+					}else if(payUserList.get(i).getMsgTypeTxt().equals("8")) {
+						msgType = "알림톡";
+					}else if(payUserList.get(i).getMsgTypeTxt().equals("9")) {
+						msgType = "친구톡";
+					}else if(payUserList.get(i).getMsgTypeTxt().equals("fax")) {
+						msgType = "팩스";
+					}
+					
+					int sendCount = ((MjonMsgVO)payUserList.get(i)).getSendCount();
+					
+					
+					String sendSum = Integer.toString(sendCount);
+					
+					if(payUserList.get(i).getMsgTypeTxt().equals("fax")) {
+						sendSum = sendSum+"("+payUserList.get(i).getFileCnt()+")";
+					}
+					
+					row = sheet.createRow(i+2);
+					for(int j=0 ; j < 7 ; j++) {
+						cell = row.createCell(j);
+						cell.setCellStyle(style);
+						if(j==0) cell.setCellValue(i+1); //번호
+						if(j==1) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getRegDate()); 		//결제일시
+						if(j==2) cell.setCellValue(msgType); 											//문자유형
+						if(j==3) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendCnt()); 	//발송건수
+						if(j==4) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSmsTxt()); 		//내용
+						if(j==5) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendPrice()); 		//충전 - 충전금
+						if(j==6) cell.setCellValue(0); 		//충전 - 포인트
+						/*if(j==7) cell.setCellValue(totPrice); 		//사용 - 충전금
+						if(j==8) cell.setCellValue(0);													//사용 - 포인트
+						if(j==9) cell.setCellValue(thisPoint); 	//잔액 - 충전금
+						if(j==10) cell.setCellValue(befPoint); 	//잔액 - 포인트
+*/  					}
+				}
+			}
+			response.setHeader("Set-Cookie", "fileDownload=true; path=/");
+			SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA );
+			Date currentTime = new Date ();
+			String mTime = mSimpleDateFormat.format ( currentTime );
+			fileName = fileName+"("+mTime+")";
+			
+			response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx"));
+			wb.write(response.getOutputStream());
+		}catch(Exception e) {
+  			response.setHeader("Set-Cookie", "fileDownload=false; path=/");
+  			response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
+  			response.setHeader("Content-Type","text/html; charset=utf-8");
+  			OutputStream out = null;
+  			try {
+  				out = response.getOutputStream();
+  				byte[] data = new String("fail..").getBytes();
+  				out.write(data, 0, data.length);
+  			} catch(Exception ignore) {
+  				ignore.printStackTrace();
+  			} finally {
+  				if(out != null) try { out.close(); } catch(Exception ignore) {}
+  			}
+  		}finally {
+  			// 디스크 적었던 임시파일을 제거합니다.
+  			wb.dispose();
+  			try { wb.close(); } catch(Exception ignore) {}
+  		}
+	}
+    
+    
+    
     /**
      * 요금사용내역 - 카카오 테스트용
      * @param mjonMsgVO
src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
--- src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
+++ src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
@@ -1518,6 +1518,8 @@
 			
 		}
 		
+		System.out.println("+++++++++++++++++++++++ prePaymentYn ::: "+mberManageVO.getPrePaymentYn());
+		
 		return "cmm/uss/umt/EgovGnrlUserSelectUpdt";
 	}
 	
src/main/resources/egovframework/egovProps/globals_local.properties
--- src/main/resources/egovframework/egovProps/globals_local.properties
+++ src/main/resources/egovframework/egovProps/globals_local.properties
@@ -87,7 +87,7 @@
 #\uba54\uc77c \ubb38\uc758\ud558\uae30 \ud15c\ud50c\ub9bf URL
 Globals.itn.contact.us.template.url=http://localhost:8080/publish/email_form_itn_contact_us.html
 #\uba54\uc77c \uc218\uc2e0\uc790 \uc8fc\uc18c #TODO : \ucd94\ud6c4\uc5d0 \ubcc0\uacbd\ud574\uc57c\ud568 
-Globals.itn.mail.to.address=leehoyoung250@daum.net
+Globals.itn.mail.to.address=rlaqhal6613@duam.net
 
 
 #\ube44\uc988\ubfcc\ub9ac\uc624 \uc124\uc815 
src/main/resources/egovframework/egovProps/globals_prod.properties
--- src/main/resources/egovframework/egovProps/globals_prod.properties
+++ src/main/resources/egovframework/egovProps/globals_prod.properties
@@ -76,7 +76,7 @@
 #\uba54\uc77c \ubb38\uc758\ud558\uae30 \ud15c\ud50c\ub9bf URL
 Globals.itn.contact.us.template.url=https://www.munjaon.co.kr/publish/email_form_itn_contact_us.html
 #\uba54\uc77c \uc218\uc2e0\uc790 \uc8fc\uc18c
-Globals.itn.mail.to.address=phs1704@daum.net
+Globals.itn.mail.to.address=rlaqhal6613@duam.net
 #Globals.itn.mail.to.address=leehoyoung250@daum.net
 
 #\ube44\uc988\ubfcc\ub9ac\uc624 \uc124\uc815 
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
@@ -3135,6 +3135,194 @@
 		LIMIT #recordCountPerPage# OFFSET #firstIndex#
 	</select>
 	
+		<!-- 사용자 요금 사용내역 리스트 -->
+	<select id="mjonMsgDAO.selectPayUserSWList" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
+		SELECT
+		COUNT(pay.totCnt) OVER()    AS totCnt
+		, pay.regDate                                                   AS regDate 
+		, pay.sendCount                                                 AS sendCount 
+		, pay.succSendCnt          										AS succSendCnt
+        , pay.failSendCnt          										AS failSendCnt
+        , pay.succSendPrice        										AS succSendPrice
+        , pay.failSendPrice        										AS failSendPrice
+		, pay.smsTxt                                                    AS smsTxt 
+		, pay.subject                                                   AS subject 
+		, pay.msgTypeTxt                                                AS msgTypeTxt 
+		, pay.fileCnt                                                   AS fileCnt 
+		, pay.befCash                                                   AS befCash 
+		, pay.befPoint                                                  AS befPoint 
+		, pay.totPrice                     			 					AS totPrice 
+		, pay.thisPoint													AS thisPoint 
+		, pay.msgGroupId                                                AS msgGroupId 
+		, pay.totalPrice                                                AS totalPrice 
+		, pay.eachPrice                                                 AS eachPrice 
+		, pay.sentDate                                                  AS sentDate 
+		, pay.fileName1                                                 AS fileName1 
+		, pay.fileName2                                                 AS fileName2
+		, pay.fileName3                                                 AS fileName3
+		, pay.orderByCode                                               AS orderByCode
+		, pay.msgId                                                     AS msgId
+	FROM
+	(
+		SELECT
+			COUNT(M.regDate) OVER()		AS totCnt
+			, M.regDate			AS regDate
+			, M.sendCount		AS sendCount
+			, SUM(IF(RESULT = 'W' OR RESULT = 'S', 1, 0 ))                AS succSendCnt
+            , SUM(IF(RESULT = 'F', 1, 0 ))                                AS failSendCnt
+            , SUM(IF(RESULT = 'W' OR RESULT = 'S', 1, 0 )) * M.eachPrice  AS succSendPrice
+            , SUM(IF(RESULT = 'F', 1, 0 ))                 * M.eachPrice  AS failSendPrice
+			, M.smsTxt			AS smsTxt
+			, M.subject			AS subject
+			, M.msgTypeTxt		AS msgTypeTxt
+			, M.msgKind			AS msgKind
+			, M.fileCnt			AS fileCnt
+			, M.befCash			AS befCash
+			, M.befPoint		AS befPoint  
+			, ROUND((M.eachPrice * M.sendCount), 2)	AS totPrice
+			, (M.befCash - ROUND((M.eachPrice * M.sendCount), 2))	AS thisPoint
+			, M.msgGroupId		AS msgGroupId
+			, M.totalPrice		AS totalPrice
+			, M.eachPrice		AS eachPrice 
+			, M.sentDate		AS sentDate  
+			, M.fileName1		AS fileName1 
+			, M.fileName2		AS fileName2 
+			, M.fileName3		AS fileName3 
+			, M.orderByCode		AS orderByCode
+			, M.msgId			AS msgId
+		FROM
+			(SELECT
+				 DATE_FORMAT(B.REGDATE, '%Y-%m-%d %H:%i' )	AS regDate
+				, B.MSG_GROUP_CNT						AS sendCount
+				, B.SMS_TXT								AS smsTxt
+				, B.SUBJECT								AS subject
+				, B.MSG_TYPE							AS msgTypeTxt
+				, B.MSG_KIND							AS msgKind
+				, B.FILE_CNT							AS fileCnt
+				, B.BEF_CASH							AS befCash
+				, B.BEF_POINT							AS befPoint
+				, B.TOT_PRICE							AS totPrice
+				, B.MSG_GROUP_ID						AS msgGroupId
+				, B.TOT_PRICE							AS totalPrice
+				, B.EACH_PRICE							AS eachPrice
+				, A.SENT_DATE							AS sentDate
+				, A.FILE_PATH1							AS fileName1
+				, A.FILE_PATH2							AS fileName2
+				, A.FILE_PATH3							AS fileName3
+				, A.MSG_ID								AS msgId
+				, A.REQ_DATE 							AS reqDate
+				, CASE
+					WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0
+					THEN '3'
+					WHEN B.MSG_TYPE = '6' AND B.FILE_CNT = 0
+					THEN '2'
+					ELSE '1'
+				END orderByCode
+				, (
+					<include refid="MjonMsgSentDAO.selectAgentWithKakaoResultQuery_A"/>
+				) AS RESULT
+			<include refid="MjonMsgSentDAO.selectJoinQuery"/>
+				AND A.USER_ID	= #userId#
+				AND B.USER_ID	= #userId#
+				AND B.RESERVE_C_YN = 'N'
+			ORDER BY 1=1
+				, msgGroupId DESC
+				, sentDate DESC
+				, msg_id DESC
+			)M
+		WHERE 1=1 
+			AND RESULT IN ('W', 'S', 'F')
+		GROUP BY M.msgGroupId
+		
+		UNION
+		
+		SELECT
+			COUNT(1) OVER ()                                AS totCnt 
+			, DATE_FORMAT(pf.ReqDate, '%Y-%m-%d %H:%i' )	AS regDate
+			, mjf.FAX_GROUP_CNT                             AS sendCount
+			, SentEA                                        AS succSendCnt
+            , SentEA  * mjf.EACH_PRICE                      AS succSendPrice
+            , ErrorEA                                       AS failSendCnt
+            , ErrorEA * mjf.EACH_PRICE                      AS failSendPrice
+			, ""					                        AS smsTxt 
+			, mjf.SUBJECT                                   AS subject 
+			, "fax"                                         AS msgTypeTxt
+			, ""											AS msgKind 
+			, mjf.FAX_PAGE_CNT                              AS fileCnt 
+			, mjf.BEF_CASH									AS befCash 
+			, mjf.BEF_POINT									AS befPoint 
+			, ROUND((mjf.EACH_PRICE * mjf.FAX_PAGE_CNT * mjf.FAX_GROUP_CNT), 2)                  AS totPrice 
+			, (mjf.BEF_CASH - ROUND((mjf.EACH_PRICE * mjf.FAX_PAGE_CNT * mjf.FAX_GROUP_CNT), 2))		  AS thisPoint
+			, mjf.FAX_GROUP_ID                                                AS msgGroupId
+			, mjf.TOT_PRICE                                                   AS totalPrice
+			, mjf.EACH_PRICE                                                  AS eachPrice
+			, pf.SendDate                                                     AS sentDate
+			, ""                                                              AS fileName1
+			, ""                                                              AS fileName2
+			, ""                                                              AS fileName3
+			, ""                                            				  AS orderByCode
+			, pf.SEQ                                                          AS msgId
+		FROM
+			pgi_faxtran pf
+			LEFT JOIN mj_fax_group_data mjf
+			ON pf.seq = mjf.PGI_FAXTRAN_SEQ
+			LEFT JOIN mj_fax_convert_mng mjc
+			ON mjf.CONVERT_MNG_SEQ         = mjc.CONVERT_MNG_SEQ
+		WHERE 1 = 1
+			AND pf.SentEA > 0
+			AND mjf.USER_ID = #userId#
+			
+	) AS pay
+	WHERE 1=1
+		
+		<isNotEmpty property="pageType">
+			<isEqual property="pageType" compareValue="sms">
+				AND		pay.msgTypeTxt  = '4' 
+			</isEqual>
+			<isEqual property="pageType" compareValue="lms">
+				AND		pay.msgTypeTxt  = '6' 
+				AND		pay.fileCnt = 0
+			</isEqual>
+			<isEqual property="pageType" compareValue="mms">
+				AND		pay.msgTypeTxt  = '6'
+				AND		pay.fileCnt != 0
+			</isEqual>
+			<isEqual property="pageType" compareValue="cam">
+				AND		pay.msgKind  = 'C' 
+			</isEqual>
+			<isEqual property="pageType" compareValue="at">
+				AND		pay.msgTypeTxt  = '8' 
+			</isEqual>
+			<isEqual property="pageType" compareValue="ft">
+				AND		pay.msgTypeTxt  = '9'
+			</isEqual>
+			<isEqual property="pageType" compareValue="fax">
+				AND		pay.msgTypeTxt  = 'fax'
+			</isEqual>
+		</isNotEmpty>
+		<isNotEmpty property="startDate">
+			<![CDATA[ 
+				AND DATE_FORMAT(pay.regDate, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
+			]]>
+		</isNotEmpty>
+		<isNotEmpty property="endDate">
+			<![CDATA[
+				AND	DATE_FORMAT(pay.regDate, '%Y-%m-%d')  <=  DATE_FORMAT(#endDate#, '%Y-%m-%d')
+			]]>
+		</isNotEmpty>
+		
+		
+		ORDER BY 1=1
+			<isNotEmpty property="searchSortCnd">
+				,$searchSortCnd$
+			</isNotEmpty>
+			<isNotEmpty property="searchSortOrd">
+				$searchSortOrd$
+			</isNotEmpty>
+		LIMIT #recordCountPerPage# OFFSET #firstIndex#
+	</select>
+	
+	
 	<!-- 사용자 요금 사용내역 Sum 리스트 -->
 	<select id="mjonMsgDAO.selectPayUserSumList_bak" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">	
 		SELECT 
src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
--- src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
+++ src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
@@ -1304,7 +1304,7 @@
                 	<c:forEach var="resultListOne" items="${menuResultList}" varStatus="status">
 		           		<c:if test="${resultListOne.depth eq '1' }">
 						<c:choose>
-							<c:when test="${fn:contains(resultListOne.url, '/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do')}">
+							<c:when test="${fn:contains(resultListOne.url, '/web/mjon/msgcampain/selectMsgDataView.do')}">
 								<li class="new">
 							</c:when>																												
 							<c:otherwise>
src/main/webapp/WEB-INF/jsp/web/main/mainPage.jsp
--- src/main/webapp/WEB-INF/jsp/web/main/mainPage.jsp
+++ src/main/webapp/WEB-INF/jsp/web/main/mainPage.jsp
@@ -1160,7 +1160,7 @@
 				<button type="button" class="popup_close evntPayPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
 			</div>
 		</div>
-		<!-- 
+		<%-- 
 		<div class="layer_popup pointPop">
 			<div class="layer_popup_cont">
 				<a href="/web/mjon/custom/selectMsgCustomView.do" title="맞춤제작 링크 이동">
@@ -1172,8 +1172,8 @@
 				<button type="button" class="popup_close pointPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
 			</div>
 		</div>
-		 -->
-		<div class="layer_popup pointPop">
+		 --%>
+		<%-- <div class="layer_popup pointPop">
 			<div class="layer_popup_cont">
 				<a href="/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do" title="알림톡 링크 이동">
 					<img src="/publish/images/main/popup_allimtalk_230712.jpg" alt="문자 ON 문자온 알림톡, 대한민국 최저가 선언! 조건없이 무조건 6.9원! 기업전용 / 1,000자 이하 텍스트&이미지 / 문자 대비 65% 저렴 카카오 '알림톡' 서비스 오픈! 알림톡 바로가기">
@@ -1183,7 +1183,7 @@
 				<input type="checkbox" id="pointPop"  name="pointPop"  onclick="javascript:fnPopupChk('pointPop' , 'layer')"><label for="pointPop">3일간 열지 않음</label>
 				<button type="button" class="popup_close pointPopClose"><img src="/publish/images/main/btn_popup_close01.png" alt="팝업닫기"></button>
 			</div>
-		</div>
+		</div> --%>
 	</div>
 </div>
 
src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataView.jsp
@@ -619,6 +619,12 @@
 	
 }
 
+function fnMsgTWDataView(){
+	
+	location.href="/web/mjon/msgcampain/selectMsgTWDataView.do";
+	
+}
+
 function fn_saveMyMsg(){ // 내 문자 보관함 저장
 	
 	var form = document.msgForm;
@@ -2005,10 +2011,14 @@
         <div class="send_top">
             <!-- tab button -->
             <ul class="tabType1">
-                <li class="tab active"><button type="button" onclick="TabType1(this,'1');">단문 · 장문 · 그림 문자</button></li>
+                <li class="tab active">
+                	<%-- <button type="button" onclick="TabType1(this,'1');">단문 · 장문 · 그림 문자</button> --%>
+                	<button type="button" onclick="TabType1(this,'1');">단체문자(자동동보문자)</button>
+                </li>
                 <li class="tab">
-                	<!-- <button type="button" onclick="TabType1(this,'2');">대량 문자(엑셀·TXT)</button> -->
-                	<button type="button" onclick="javascript:fnMsgExcelDataView(); return false;">단체문자(엑셀·TXT)</button>
+                	<%-- <button type="button" onclick="TabType1(this,'2');">대량 문자(엑셀·TXT)</button> --%>
+                	<%-- <button type="button" onclick="javascript:fnMsgExcelDataView(); return false;">단체문자(엑셀·TXT)</button> --%>
+                	<button type="button" onclick="javascript:fnMsgTWDataView(); return false;">20건 문자(수동문자)</button>
                 </li>
             </ul><!--// tab button -->
 			<!-- tab content1 -->
src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataCallToListView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataCallToListView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataCallToListView.jsp
@@ -24,8 +24,6 @@
 		$("#sendReady").text(0);
 		$("#callSeq").val(0);
 		
-		//docuReload();
-		
 	}
 	
 	
src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp
@@ -11,6 +11,13 @@
 <!--  -->
 <script type="text/javascript" src="<c:url value='/publish/js/publish.js'/>"></script>
 
+<style>
+/* .send_top .send_right .phone_bottom{display:flex;align-items:center;} */
+.send_top .send_right .send_rev{margin:0 !important;}
+.send_top .send_right .phone_bottom{bottom:130px;}
+.send_top .send_right .send_rev .send_content{padding:0 !important;;} 
+</style>
+
 <% pageContext.setAttribute("newLineChar", "\r\n"); %>
 <script type="text/javascript">
 var tableErrorData = [];
@@ -276,9 +283,7 @@
 function addTWCallToInfo(){
 	
 	var callSeq = $("#callSeq").val();
-	
 	var sendData =  $(document.callToForm).serializeArray();
-	
 	$("#twCallToList").load("/web/mjon/msgcampain/selectMsgTWCallToListAjax.do", sendData ,function(response, status, xhr){
 		
 		$(document).ready(function () {
@@ -1831,14 +1836,16 @@
 	//즉시 발송 라디오 버튼 선택시 숨김처리
 	$("#reserYnN").on('click', function(){
 		$('.rev_selected').hide();
-		$('.send_rev .send_content').css('padding-bottom','108px');
+		//$('.send_rev .send_content').css('padding-bottom','108px');
+		$(".send_top .send_right .phone_bottom").css("bottom","130px");
 		$('.send_btn .btnType:first-child').html('발송하기');
 	});
 	
 	//예약 발송 라디오 버튼 선택시 숨김 해제처리
 	$("#reserYnY").on('click', function(){
 		$('.rev_selected').show();
-		$('.send_rev .send_content').css('padding-bottom','0');
+		/* $('.send_rev .send_content').css('padding-bottom','0'); */
+		$(".send_top .send_right .phone_bottom").css("bottom","64px");
 		$('.send_btn .btnType:first-child').html('예약하기');
 	});
 	
@@ -4065,7 +4072,7 @@
 	        <h2>20건 문자(수동문자) 전송</h2>
 	        <div class="election_btnWrap">
 	        	<button type="button" class="button2 info" onclick="infoPop('selectMsgDataView2');">발송규정</button>
-	        	<button type="button" class="button2 info" data-tooltip="candidate_popup03">사용안내</button>
+	        	<!-- <button type="button" class="button2 info" data-tooltip="candidate_popup03">사용안내</button> -->
 	        	<c:choose>
 	        		<c:when test="${empty LoginVO}">
 						<button type="button" class="btnType" onclick="javascript:fn_candidateLoginChk(); return false;"><i class="election_btn1"></i>후보자 등록</button>	        		
src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataView.jsp
@@ -1685,6 +1685,7 @@
 						$("#totalPriceTxt").text("0");
 						
 						//받는사람 리스트 새로 갱신해주기
+						document.callToForm.pageIndex.value = 1;
 						addTWCallToInfo();
 						
 					}
src/main/webapp/WEB-INF/jsp/web/pay/PayList.jsp
--- src/main/webapp/WEB-INF/jsp/web/pay/PayList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayList.jsp
@@ -184,16 +184,28 @@
 			</div>
 			<div class="pay_tab_wrap">
 				<!-- tab button -->
-				<ul class="tabType1">
-					<li class="tab active"><button type="button" onclick="TabType5(this,'1');listLoad('/web/member/pay/PayListAllAjax.do'); return false;" >전체</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'2');listLoad('/web/member/pay/PayListSPayAjax.do'); return false;">간편결제 결제내역</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'2');listLoad('/web/member/pay/PayListVBankAjax.do'); return false;">전용계좌 결제내역</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'3');listLoad('/web/member/pay/PayListCardAjax.do'); return false;">신용카드 결제내역</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'4');listLoad('/web/member/pay/PayListMobileAjax.do'); return false;">휴대폰  결제내역</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'5');listLoad('/web/member/pay/PayListBankAjax.do'); return false;">즉시이체 결제내역</button></li>					
-					<li class="tab"><button type="button" onclick="TabType5(this,'6');listLoad('/web/member/pay/PayListPointAjax.do'); return false;">포인트 교환내역</button></li>					
-					<li class="tab"><button type="button" id="tab6" onclick="TabType5(this,'7');listLoad('/web/member/pay/PayListRefundAjax.do'); return false;">환불신청</button></li> 
-				</ul>
+				<c:choose>
+					<c:when test="${prePaymentYn eq 'Y'}">
+						<ul class="tabType1">
+							<li class="tab active"><button type="button" onclick="TabType5(this,'1');listLoad('/web/member/pay/PayListAllAjax.do'); return false;" >전체</button></li>
+							<li class="tab"><button type="button" onclick="TabType5(this,'2');listLoad('/web/member/pay/PayListSPayAjax.do'); return false;">간편결제 결제내역</button></li>
+							<li class="tab"><button type="button" onclick="TabType5(this,'2');listLoad('/web/member/pay/PayListVBankAjax.do'); return false;">전용계좌 결제내역</button></li>
+							<li class="tab"><button type="button" onclick="TabType5(this,'3');listLoad('/web/member/pay/PayListCardAjax.do'); return false;">신용카드 결제내역</button></li>
+							<li class="tab"><button type="button" onclick="TabType5(this,'4');listLoad('/web/member/pay/PayListMobileAjax.do'); return false;">휴대폰  결제내역</button></li>
+							<li class="tab"><button type="button" onclick="TabType5(this,'5');listLoad('/web/member/pay/PayListBankAjax.do'); return false;">즉시이체 결제내역</button></li>					
+							<li class="tab"><button type="button" onclick="TabType5(this,'6');listLoad('/web/member/pay/PayListPointAjax.do'); return false;">포인트 교환내역</button></li>					
+							<li class="tab"><button type="button" id="tab6" onclick="TabType5(this,'7');listLoad('/web/member/pay/PayListRefundAjax.do'); return false;">환불신청</button></li> 
+						</ul>
+					</c:when>
+					<c:otherwise>
+						<ul class="tabType1">
+							<li class="tab active"><button type="button" onclick="TabType5(this,'1');listLoad('/web/member/pay/PayListAllAjax.do'); return false;" >전체</button></li>
+							<li class="tab"><button type="button" onclick="TabType5(this,'6');listLoad('/web/member/pay/PayListPointAjax.do'); return false;">포인트 교환내역</button></li>					
+						</ul>
+					</c:otherwise>
+				</c:choose>
+				
+				
 				<!--// tab button -->
 			</div>
 			<div id="payLoad"></div>
src/main/webapp/WEB-INF/jsp/web/pay/PayUserListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/pay/PayUserListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayUserListAjax.jsp
@@ -289,7 +289,7 @@
 											<p>친구톡</p>
 										</c:when>
 										<c:when test="${payUserInfo.msgTypeTxt eq 'fax'}">
-											<p>펙스</p>
+											<p>팩스</p>
 										</c:when>
 										<c:otherwise>
 											<p>단문</p>
 
src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp
@@ -0,0 +1,399 @@
+<%--
+  Class Name : SendNumberList.jsp
+  Description : 발신번호 리스트 조회 페이지
+  Modification Information
+
+      수정일         수정자                   수정내용
+    -------    --------    ---------------------------
+    2021.03.31    신명섭          최초 생성
+
+    Copyright (C) 2009 by ITN  All right reserved.
+--%>
+<%@ page contentType="text/html; charset=utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+
+<script>
+var thisYearStart = "";
+var thisYearEnd = "";
+var lastfulstday = "";
+var lastfuledday = "";
+var thisfulstlday = "";
+var thisfuledtlday = "";
+$(document).ready(function(){
+	payUserListAjax(1);
+	var date = new Date() ;
+	//이전달 첫날/마지막날 조회
+	if(date.getMonth()+1 == 1){
+		lastfulstday = date.getFullYear()-1 +  "/12" + "/01";
+		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
+	}else{
+		lastfulstday = date.getFullYear() + "/" ; 
+		lastfulstday += date.getMonth() < 10  ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
+		lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ;
+		lastfulstday += "/01" ;
+	}
+	
+	//당월 첫날/마지막날 조회
+	thisfulstlday = date.getFullYear() + "/" ;
+	thisfulstlday += date.getMonth()+1 < 10  ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ;
+	thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+"";
+	thisfulstlday += "/01" ;
+	
+	thisYearStart = date.getFullYear() + "/01/01" ;
+	thisYearEnd = date.getFullYear() + "/12/31" ;
+	
+});
+
+// 기간 요일 지정
+function setCalVal(val,targetObj){
+	$('input[name='+targetObj+']').val(val) ;
+}
+
+// 요금사용내역 리스트
+function payUserListAjax(pageNo){
+	document.listForm.pageIndex.value = pageNo;
+	var sendData= $(document.listForm).serializeArray();
+	$("#payUserListLoad").load("/web/member/pay/PayUserSWListAjax.do", sendData ,function(response, status, xhr){
+	});
+}
+
+function payUserTab(obj, pageType){
+	
+	var $tab = $(obj).closest("li");
+	$tab.addClass("active");
+	$tab.find("button").attr("title", "선택됨");
+	$tab.siblings("li.tab").removeClass("active");
+	$tab.siblings("li.tab").find("button").removeAttr("title");
+	
+	$("#pageType").val(pageType);
+	payUserListAjax(1);
+}
+
+/* 윈도우팝업 열기 */
+function infoPop(pageUrl){
+	document.infoPopForm.pageType.value = pageUrl;
+	document.infoPopForm.action = "/web/pop/infoPop.do";
+	document.infoPopForm.method = "post"; 
+	window.open("about:blank", 'infoPop', 'width=790, height=250, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
+	document.infoPopForm.target = "infoPop";
+	document.infoPopForm.submit();
+}
+
+//상세보기 버튼 실행
+function fnRevDetailPop(msgGroupId, fileCnt){
+	
+	document.resPopForm.msgGroupId.value = msgGroupId;
+	var sendData =  $(document.resPopForm).serializeArray();
+	
+	$("#resvMsgDetailPopLoad").load("/web/member/pay/selectPayUserMsgDetailDataAjax.do", sendData ,function(response, status, xhr){
+	});
+	
+}
+
+//상세보기 버튼 실행
+function fnRevDetailPop02(msgGroupId){
+	document.resPopForm.msgGroupId.value = msgGroupId;
+	var sendData =  $(document.resPopForm).serializeArray();
+	
+		// 전송건별
+	$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
+		// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
+		popupTab($('#atBtn'),'1');
+		$('#kakaoClick').trigger('click');
+	});		
+	
+}
+
+//상세보기 버튼 실행
+function fnRevDetailPop03(msgGroupId){
+	document.faxPopForm.faxGroupId.value = msgGroupId;
+	var sendData =  $(document.faxPopForm).serializeArray();
+		// 전송건별
+	$("#faxSentDetailPopLoad").load("/web/mjon/fax/faxSendListAjax.do", sendData ,function(response, status, xhr){
+		// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
+//		popupTab($('#atBtn'),'1');
+		$('#faxClick').trigger('click');
+	});
+}
+</script>
+<!-- 문자내용 팝업 -->
+<div class="tooltip-wrap">
+	<div class="popup-com adr_layer rev_popup01" tabindex="0" data-tooltip-con="rev_popup01" 
+		data-focus="rev_popup01" data-focus-prev="rev_popup01-close" style="width: 440px;">
+		<div class="popup_heading">
+			<p>문자내용</p>
+			<button type="button" class="tooltip-close" data-focus="rev_popup01-close">
+				<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기">
+			</button>
+		</div>
+		<div class="layer_in" id="resvMsgDetailPopLoad">
+			<div class="popup_btn_wrap2" style="justify-content: center;">
+			    <button type="button" class="tooltip-close" data-focus="rev_popup01-close" data-focus-next="rev_popup01">닫기</button>                      
+			</div>
+		</div>
+	</div>
+</div>
+<!--// 문자내용 팝업 -->
+
+<!-- 카카오 알림톡 팝업 -->
+<div class="tooltip-wrap">
+	<div class="popup-com adr_layer kakao_rev_popup rev_popup02" tabindex="0" data-tooltip-con="rev_popup02"
+		data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 440px;">
+		<div class="popup_heading">
+			<p>카카오 내용</p>
+			<button type="button" class="tooltip-close" data-focus="rev_popup02-close">
+				<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기">
+			</button>
+		</div>
+		<div class="layer_in">
+			
+			<!-- 팝업 상세내용 노출  -->
+			<div id="msgSentDetailPopLoad" >
+			</div>
+			<div class="popup_btn_wrap2" style="justify-content: center;">
+				<button type="button" class="tooltip-close" data-focus="rev_popup02-close"
+					data-focus-next="rev_popup02">닫기</button>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //카카오 알림톡 팝업 -->
+
+<!-- 펙스 팝업 -->
+<div class="tooltip-wrap">
+	<div class="popup-com adr_layer fax_rev_popup rev_popup03" tabindex="0" data-tooltip-con="rev_popup03"
+		data-focus="rev_popup03" data-focus-prev="rev_popup03-close" style="width: 800px;">
+		<div class="popup_heading">
+			<p>펙스 내용</p>
+			<button type="button" class="tooltip-close" data-focus="rev_popup03-close">
+				<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기">
+			</button>
+		</div>
+		<div class="layer_in">
+			
+			<!-- 팝업 상세내용 노출  -->
+			<div id="faxSentDetailPopLoad" >
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //펙스 팝업 -->
+
+<div class="inner">
+	<!-- send top -->
+	<div class="send_top">
+		<!-- tab button -->
+		<ul class="tabType4">
+			<li class="tab"><button type="button" onclick="location.href='/web/pay/PayGuide.do'">요금안내/견적내기</button></li>
+			<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayView.do'">결제하기</button></li>
+			<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayList.do'">요금 결제내역</button></li>
+			<li class="tab active"><button type="button">요금 사용내역</button></li>
+			<!-- 현금영수증 자동발행 주석 -->
+			<!-- <li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">계산서/현금영수증 발행 등록</button></li> -->
+			<li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">세금계산서 발행 등록</button></li>
+		</ul>
+		<!-- 결제관리 - 요금 사용내역 -->
+		<div class="serv_content current" id="tab5_4">
+			<div class="heading">
+				<h2>요금 사용내역</h2>
+				<button type="button" class="button info" onclick="infoPop('PayUserList');">사용안내</button>
+			</div>
+			<div class="hisroy_price">
+				<div class="hisroy_price_in">
+					<p>
+						<i></i>충전금액
+					</p>
+					
+					<div class="clearfix">
+						<p>캐시</p>
+						<p>
+							<span>
+								<c:choose>
+									<c:when test="${not empty sumPayMoney}">
+										<fmt:formatNumber value="${sumPayMoney}" pattern="#,###.#"/>
+									</c:when>
+									<c:otherwise>
+										<fmt:formatNumber value="0" pattern="#,###.#"/>
+									</c:otherwise>
+								</c:choose>
+							</span>원
+						</p>
+					</div>
+					<div class="clearfix">
+						<p>포인트</p>
+						<p>
+							<span>
+								<c:choose>
+									<c:when test="${not empty sumPoint}">
+										<fmt:formatNumber value="${sumPoint}" pattern="#,###.#"/>
+									</c:when>
+									<c:otherwise>
+										<fmt:formatNumber value="0" pattern="#,###.#"/>
+									</c:otherwise>
+								</c:choose>
+							</span>원
+						</p>
+					</div>
+				</div>
+				<div class="hisroy_price_in">
+					<p>
+						<i></i>사용금액
+					</p>
+					<c:forEach var="result" items="${usedCashTotList}" varStatus="status">
+						<div class="clearfix">
+							<p>
+								<c:if test="${result.divFlag eq 'CASH' }">
+									캐시
+								</c:if>
+								<c:if test="${result.divFlag eq 'POINT' }">
+									포인트
+								</c:if>
+							</p>
+							<p>
+								<span>
+									<fmt:formatNumber value="${result.totalPrice}" pattern="#,###.#"/>
+								</span>원
+							</p>
+						</div>
+					</c:forEach>
+				</div>
+				<div class="hisroy_price_in">
+					<p>
+						<i></i>잔액
+					</p>
+					<div class="clearfix">
+						<p>캐시</p>
+						<p>
+							<span>
+								<fmt:formatNumber value="${mberManageVO.userMoney}" pattern="" />
+							</span>원
+						</p>
+					</div>
+					<div class="clearfix">
+						<p>포인트</p>
+						<p>
+							<span>
+								<fmt:formatNumber value="${mberManageVO.userPoint}" pattern="" />
+							</span>원
+						</p>
+					</div>
+				</div>
+			</div>
+			<div class="history_details">
+				<p class="tType1_title"><img src="/publish/images/content/history_details_title.png" alt=""> 발송내역</p>
+				<div class="details_wrap">
+					<table>
+						<colgroup>
+							<col style="width: calc(100% / 5);">
+							<col style="width: calc(100% / 5);">
+							<col style="width: calc(100% / 5);">
+							<col style="width: calc(100% / 5);">
+							<col style="width: calc(100% / 5);">
+						</colgroup>
+						<thead>
+							<tr>
+								<th>구분</th>
+								<th>문자</th>
+								<th>알림톡</th>
+								<th>팩스</th>
+								<th>계</th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr>
+								<td>발송건(매)수</td>
+								<c:set var="sandSum" value="0"/>
+								<c:forEach var="sendToInfo" items="${sendTotList}" varStatus="status">
+								<td>
+									<fmt:formatNumber value="${sendToInfo.totCnt}" pattern="" />
+									<c:if test="${sendToInfo.msgType eq 'fax' && sendToInfo.fileCnt ne '0'}">
+										(<c:out value="${sendToInfo.fileCnt }"/>)
+									</c:if>
+								</td>
+								<c:set var="sandSum" value="${sandSum + sendToInfo.totCnt}"/>
+								</c:forEach>
+								<td>
+									<fmt:formatNumber value="${sandSum}" pattern="" />
+								</td>
+							</tr>
+							<tr>
+								<td>예약건수</td>
+								<c:set var="reservSum" value="0"/>
+								<c:forEach var="reservToInfo" items="${reservToList}" varStatus="status">
+								<td>
+									<fmt:formatNumber value="${reservToInfo.totCnt}" pattern="" />
+									<c:if test="${reservToInfo.msgType eq 'fax' && reservToInfo.fileCnt ne '0'}">
+										(<c:out value="${reservToInfo.fileCnt }"/>)
+									</c:if>
+								</td>
+								<c:set var="reservSum" value="${reservSum + reservToInfo.totCnt}"/>
+								</c:forEach>
+								<td>
+									<fmt:formatNumber value="${reservSum}" pattern="" />
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<form id="listForm" name="listForm" method="post">
+				<input type="hidden" id="pageType" name="pageType"  value="<c:out value='${searchVO.pageType}'/>"/>
+				<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>"/>
+				<div class="excel_middle">
+					<div class="select_btnWrap clearfix">
+						<div class="btn_left">
+							<span class="cal_label">기간선택</span>
+							<div class="calendar_wrap">
+								<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="startDate" value="" data-datecontrol="true">
+								<span class="dateEtc">~</span>
+								<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="endDate" value="" data-datecontrol="true">
+							</div>
+							<button type="button" onclick="setCalVal(thisYearStart,'startDate');setCalVal( thisYearEnd,'endDate'); return false;"  class="btnType btnType19">이번년도</button>
+							<button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;"  class="btnType btnType19">전월</button>
+							<button type="button" onclick="setCalVal(thisfulstlday,'startDate');setCalVal( thisfuledtlday,'endDate'); return false;"  class="btnType btnType19">당월</button>
+							<button type="button" class="btnType6" onclick="payUserListAjax(1); return false;">조회</button>
+							<span class="reqTxt4">
+								<span class="vMiddle">*</span> 조회기간의 사용내역만 보여집니다.
+							</span>
+						</div>
+						<div></div>
+					</div>
+				</div>
+				<div class="list_tab_wrap2 type2">
+					<!-- tab button -->
+					<ul class="list_tab">
+						<li class="tab active"><button type="button" onclick="payUserTab(this,'');">전체</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'sms');">단문</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'lms');">장문</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'mms');">그림</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'cam');">선거</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'at');">알림톡</button></li>
+<!-- 						<li class="tab"><button type="button" onclick="payUserTab(this,'ft');">친구톡</button></li> -->
+						<li class="tab"><button type="button" onclick="payUserTab(this,'fax');">팩스</button></li>
+					</ul>
+					<!--// tab button -->
+				</div>
+				<div id="payUserListLoad">
+				
+				</div>
+			</form>
+			<!-- 결제관리 - 요금 사용내역 -->
+		</div>
+	</div>
+	<!--// send top -->
+</div>
+<form name="infoPopForm" id="infoPopForm" method="post">
+	<input type="hidden" name="pageType" id="pageType" value=""/> 
+</form>
+<form id="resPopForm" name="resPopForm" method="post">
+	<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
+	<input type="hidden" id="fileCnt" name="fileCnt" value=""/>
+</form>
+<form id="faxPopForm" name="faxPopForm" method="post">
+	<input type="hidden" id="faxGroupId" name="faxGroupId" value=""/>
+</form>
 
src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp
@@ -0,0 +1,433 @@
+<%--
+  Class Name : SendNumberList.jsp
+  Description : 발신번호 리스트 조회 페이지
+  Modification Information
+
+      수정일         수정자                   수정내용
+    -------    --------    ---------------------------
+    2021.03.31    신명섭          최초 생성
+
+    Copyright (C) 2009 by ITN  All right reserved.
+--%>
+<%@ page contentType="text/html; charset=utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+
+<script src="/publish/js/content.js"></script>
+<script>
+$(document).ready(function(){
+	/* 목록 정렬 항목 아이콘 표시 */ 
+	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);
+	};
+	
+	// 정렬 항목 이벤트
+	$(".sort").click(function(e) {
+		listSortOrd(this);
+	});
+	
+	//목록 정렬 항목 클릭
+	function listSortOrd(obj){
+		var sortOrd = $(obj).attr("sortOrd");
+		var sortCnd = $(obj).attr("id");
+		 
+		$("[name='searchSortCnd']").val(sortCnd.substring(5)); // 구분자 제거
+		if (sortOrd == "desc") $("[name='searchSortOrd']").val("asc");
+		else $("[name='searchSortOrd']").val("desc");
+		payUserListAjax('1');  //각 JSP마다 다를때 메소드 정의해 줘야됨
+	};
+	
+	//프린트 워커 마크
+	/* $('.print_btn').click(function(e){
+		if(!confirm("프린트 하시겠습니까?")){
+			return false;
+		}
+		var printPopup ; 
+		printPopup= window.open("/tempPayPrint.html","print_open","width=760,height=750,top=0,left=0,noresizable,toolbar=no,status=no,scrollbars=yes,directory=n");
+	}); */
+	
+	// PDF 다운버튼
+	$('.pdf_btn').click(function(e){
+		if(!confirm("PDF저장 하시겠습니까?")){
+			return false;
+		}
+	});
+	
+	//엑셀 다운버튼
+	$('.excel_btn').click(function(e){
+		if(!confirm("엑셀 다운로드를 하시겠습니까?")){
+			return false;
+		}
+		
+		var frm = document.listForm;
+		frm.method = "post"; 
+		frm.action = "/web/member/pay/PayUserSWListExcelDownload.do";
+		frm.submit(); 
+	});
+});
+
+
+/* 사용내역서 클릭 시 내역서 새창 팝업 오픈  */
+function fnShowPrintPopup() {
+    //만들려는 팝업의 크기
+    var url = "";
+    var popup_wid = '830';
+    var popup_ht = '800';
+    var popup_left = (window.screen.width/2)-(popup_wid/2);
+    var popup_top =(window.screen.height/2)-(popup_ht/2);
+    
+    if($('input[name=publish]').is(':checked')){
+    	if($('input[name=publish]:checked').val() == 'statement'){
+    		url = "printMsgStatementAjax.do";
+    	}else{
+    		url = "printMsgUsageDetailsAjax.do";
+    	}
+    }else{
+    	alert('거래명세서, 사용내역서중\n발급 받으시려는 항목을 체크 후 눌러주세요.');
+    	return;
+    }
+    
+	//날자 체크
+	if(($('#startDate').val() != '' && $('#endDate').val() == '') || ($('#startDate').val() == '' && $('#endDate').val() != '')){
+		alert("기간설정을 정상적으로 선택해 주세요.");
+		return;
+	}
+	
+	if( $('#startDate').val() != '' && $('#endDate').val() != '' ){
+		var iChkBeginDe = Number($('#startDate').val().replaceAll("/", ""));
+		var iChkEndDe =  Number($('#endDate').val().replaceAll("/", ""));
+		if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
+			alert("기간설정의 시작일자는 종료일자 보다 클수 없습니다.");
+			return;
+		}
+	}
+  
+	document.listForm.action = url;
+	document.listForm.method = "post"; 
+	window.open("about:blank", 'printPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top + ', fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
+	document.listForm.target = "printPop";
+	document.listForm.submit();
+}
+
+/* 사용내역서 클릭 시 내역서 새창 팝업 오픈  */
+function fnShowPrintPopup_OLD() { 
+    //만들려는 팝업의 크기
+    var popup_wid = '830';
+    var popup_ht = '800';
+
+    var popup_left = (window.screen.width/2)-(popup_wid/2);
+    var popup_top =(window.screen.height/2)-(popup_ht/2);
+    
+    if($('input[name=publish]').is(':checked')){
+    	if($('input[name=publish]:checked').val() == 'statement'){
+    		window.open('printMsgStatementAjax.do', 'reservMsgPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
+    	}else{
+    		window.open('printMsgUsageDetailsAjax.do', 'reservMsgPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
+    	}
+    }else{
+    	alert('거래명세서, 사용내역서중\n발급 받으시려는 항목을 체크 후 눌러주세요.');
+    }
+}
+
+function fnPayUserPrintPopup(){
+	
+	//날자 체크
+	if( $('#startDate').val() != '' && $('#endDate').val() != '' ){
+		var iChkBeginDe = Number($('#startDate').val().replaceAll("/", ""));
+		var iChkEndDe =  Number($('#endDate').val().replaceAll("/", ""));
+		if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
+			alert("기간설정의 시작일자는 종료일자 보다 클수 없습니다.");
+			return;
+		}
+	}
+	
+	//만들려는 팝업의 크기
+	var popup_wid = '840';
+	var popup_ht = '900';
+
+	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
+	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
+
+	$("#listForm").attr("target","msgSentPrint");
+	window.open('', 'msgSentPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
+	$("#listForm").attr({"action":"/web/member/pay/PrintPayUserListAjax.do", "method":"post"}).submit();
+}
+
+//환불요청 내역 프린트 출력 팝업
+function fnShowPdfPrintPopup(){
+	
+	//날자 체크
+	if( $('#startDate').val() != '' && $('#endDate').val() != '' ){
+		var iChkBeginDe = Number($('#startDate').val().replaceAll("/", ""));
+		var iChkEndDe =  Number($('#endDate').val().replaceAll("/", ""));
+		if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
+			alert("기간설정의 시작일자는 종료일자 보다 클수 없습니다.");
+			return;
+		}
+	}
+	
+	//만들려는 팝업의 크기
+	var popup_wid = '840';
+	var popup_ht = '900';
+
+	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
+	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
+
+	$("#listForm").attr("target","msgSentPdfPrint");
+	window.open('', 'msgSentPdfPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top +',scrollbars=1');
+	$("#listForm").attr({"action":"/web/member/pay/PayPdfSWListPopUpAjax.do", "method":"post"}).submit();
+}
+
+//체크박스 전체선택/해제
+/* $(document).on("click", "#chkAll", function(e) {
+    var isChecked = $(this).is(":checked");
+    $("input[name=eachChk]:checkbox").prop("checked", isChecked);
+}); */
+
+</script>
+<input type="button" id="faxClick" data-tooltip="rev_popup03" style="display:none;"/>
+<input type="button" id="kakaoClick" data-tooltip="rev_popup02" style="display:none;"/>
+<div class="pay_cont current" id="listTab2_1">
+	<input type="hidden" id="searchSortCnd" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
+	<input type="hidden" id="searchSortOrd" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
+	<div class="list_info">
+		<p>총 <span>${paginationInfo.totalRecordCount}</span>건</p>
+		<div>
+			<button type="button" class="print_btn" onclick="javascript:fnPayUserPrintPopup();">
+				<i class="print_img"></i>인쇄하기
+			</button>
+			<button type="button" class="pdf_btn" onclick="javascript:fnShowPdfPrintPopup();">
+				<i class="pdf_img"></i>PDF저장
+			</button>
+			<button type="button" class="excel_btn">
+				<i class="downroad"></i>엑셀 다운로드
+			</button>
+		</div>
+	</div>
+	<div class="tb_wrap">
+		<table class="tType4">
+			<colgroup>
+				<%-- <col style="width: 5%;"> --%>
+				<col style="width: *%;">
+				<col style="width: 15%;">
+				<col style="width: 15%;">
+				<col style="width: 15%;">
+				<col style="width: 20%;">
+				<col style="width: 20%;">
+				<%-- <col style="width: 10%;">
+				<col style="width: 10%;">
+				<col style="width: 10%;">
+				<col style="width: 10%;"> --%>
+			</colgroup>
+			<thead>
+				<tr>
+					<%-- <th rowspan="2">
+						<label for="" class="label">전체 선택</label>
+						<input type="checkbox" id="chkAll">
+					</th> --%>
+					<th rowspan="2">
+						발송일시
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_regDate">
+						</div>
+					</th>
+					<th rowspan="2">
+						문자유형
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_orderByCode">
+						</div>
+					</th>
+					<th rowspan="2">내용</th>
+					<th rowspan="2">발송건수</th>
+					<!-- <th colspan="2">충전</th>
+					<th colspan="2">사용</th>
+					<th colspan="2">잔액</th> -->
+					<th colspan="2">사용</th>
+					<!-- <th>반환(실패)</th> -->
+					<!-- <th colspan="2">잔액</th> -->
+				</tr>
+				<tr>
+					<th>캐시</th>
+					<th>포인트</th>
+					<!-- <th>캐시</th> -->
+					<!-- <th>포인트</th> -->
+					<!-- <th>충전금</th>
+					<th>포인트</th> -->
+				</tr>
+			</thead>
+			<tbody>
+				<c:choose>
+					<c:when test="${not empty payUserSWList}">
+						<c:forEach var="payUserInfo" items="${payUserSWList}" varStatus="status">
+							<tr>
+								<%-- <td>
+									<label for="" class="label">선택</label>
+									<input type="checkbox" name="eachChk">
+								</td> --%>
+								<td>
+									<p><c:out value="${payUserInfo.regDate}"/></p>
+								</td>
+								<td>
+									<c:choose>
+										<c:when test="${payUserInfo.msgTypeTxt eq '6' && payUserInfo.fileCnt eq 0 }">
+											<p>장문</p>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq '6' && payUserInfo.fileCnt ne 0 }">
+											<p>그림</p>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq '8'}">
+											<p>알림톡</p>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq '9'}">
+											<p>친구톡</p>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq 'fax'}">
+											<p>팩스</p>
+										</c:when>
+										<c:otherwise>
+											<p>단문</p>
+										</c:otherwise>
+									</c:choose>
+								</td>
+								<td>
+									<p>
+										<c:choose>
+										<c:when test="${payUserInfo.msgTypeTxt eq '8'}">
+											<button class="btnType btnType20" onClick="javascript:fnRevDetailPop02('${payUserInfo.msgGroupId}'); return false;">상세보기</button>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq '9'}">
+											<button class="btnType btnType20" onClick="javascript:fnRevDetailPop02('${payUserInfo.msgGroupId}'); return false;">상세보기</button>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq 'fax'}">
+											<button class="btnType btnType20" onClick="javascript:fnRevDetailPop03('${payUserInfo.msgGroupId}'); return false;">상세보기</button>
+										</c:when>
+										<c:otherwise>
+											<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${payUserInfo.msgGroupId}','${payUserInfo.fileCnt}'); return false;">상세보기</button>
+										</c:otherwise>
+									</c:choose>
+									</p>
+								</td>
+								<td>
+									<p class="fwRg c_002c9a">
+										
+										<c:out value="${payUserInfo.succSendCnt}"/>
+										<c:if test="${payUserInfo.msgTypeTxt eq 'fax'}">
+											(<c:out value="${payUserInfo.fileCnt}"/>매)
+										</c:if>
+										/ <c:out value="${payUserInfo.failSendCnt}"/>
+										<%-- <c:out value="${payUserInfo.sendCount}"/>
+										<c:if test="${payUserInfo.msgTypeTxt eq 'fax'}">
+										(<c:out value="${payUserInfo.fileCnt}"/>)
+										</c:if> --%>
+									</p>
+								</td>
+								<td>
+									<p>
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.succSendPrice}" var="succCash" />
+										<c:out value="${succCash}"/>
+									</p>
+								</td>
+								<td>
+									<p>
+										<%-- <fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befPoint}" var="befPoint" />
+										<c:out value="${befPoint}"/> --%>
+										0																											
+									</p>
+								</td>
+								<%-- <td>
+									<p class="fwRg c_002c9a">
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.failSendPrice}" var="failPrice" />
+										<c:out value="${failPrice}"/>
+									</p>
+								</td> --%>
+								<!-- <td>
+									<p class="fwRg c_002c9a">
+										0
+									</p>
+								</td> -->
+								<%-- <td>
+									<p>
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befCash}" var="befCash" />
+										<c:out value="${befCash}"/>
+									</p>
+								</td>
+								<td>
+									<p>
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befPoint}" var="befPoint" />
+										<c:out value="${befPoint}"/>																											
+									</p>
+								</td>
+								<td>
+									<p class="fwRg c_002c9a">
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.totPrice}" var="totPrice" />
+										<c:out value="${totPrice}"/>
+									</p>
+								</td>
+								<td>
+									<p class="fwRg c_002c9a">
+										0
+									</p>
+								</td> --%>
+								<%-- <td>
+									<p class="fwRg c_222">
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.thisPoint}" var="thisPoint" />
+										<c:out value="${thisPoint}"/>
+									</p>
+								</td>
+								<td>
+									<p class="fwRg c_222">
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befPoint}" var="befPoint" />
+										<c:out value="${befPoint}"/>																		
+									</p>
+								</td> --%>
+							</tr>
+						</c:forEach>
+					</c:when>
+					<c:otherwise>
+						<tr>
+							<td colspan="8">
+								검색 결과가 없습니다.
+							</td>
+						</tr>
+					</c:otherwise>
+				</c:choose>
+			</tbody>
+		</table>
+	</div>
+	<div class="publish_btn clearfix">
+		<div>
+			<input type="radio" name="publish" id="publish1" value="statement">
+			<label for="publish1">거래명세서</label>
+			<input type="radio" name="publish" id="publish2" value="details">
+			<label for="publish2">사용내역서</label>
+		</div>
+		<div>
+			<c:choose>		
+				<c:when test="${not empty payUserSWList}">
+					<button type="button" class="btnType" onclick="fnShowPrintPopup(); return false;">발행하기</button>
+				</c:when>
+				<c:otherwise>
+					<button type="button" class="btnType" onclick="alert('거래명세서, 사용내역서 발행할 요금사용내역이 없습니다.');">발행하기</button>
+				</c:otherwise>
+			</c:choose>		
+		</div>
+	</div>
+	
+	<!-- pagination -->
+	<c:if test="${!empty payUserSWList}">
+		<ul class="pagination">
+			<ui:pagination paginationInfo = "${paginationInfo}"  type="imageWeb" jsFunction="payUserListAjax" />
+		</ul>
+	</c:if>
+	<!-- pagination -->
+</div><!-- 결제관리 - 요금 사용내역 -->
 
src/main/webapp/WEB-INF/jsp/web/pay/PrintPayUserSWListPdfPopUp.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/pay/PrintPayUserSWListPdfPopUp.jsp
@@ -0,0 +1,270 @@
+<%@ 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" %>
+<!DOCTYPE html>
+<html lang="ko">
+	<head>
+		<meta charset="UTF-8">
+		<meta http-equiv="X-UA-Compatible" content="IE=edge">
+		<title>요금 사용내역</title>
+		<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
+		<link rel="stylesheet" href="/publish/css/reset.css">
+		<link rel="stylesheet" href="/publish/css/common.css">
+		<link rel="stylesheet" href="/publish/css/estimate.css">
+		<link rel="stylesheet" href="/publish/css/font.css">
+		<link rel="stylesheet" href="/publish/css/button.css">
+		<script type="text/javascript" src="/publish/js/jquery-3.5.0.js"></script>
+		<script type="text/javascript" src="/js/jsPdf/bluebird.min.js"></script>
+		<script type="text/javascript" src="/js/jsPdf/html2canvas.js"></script>
+		<script type="text/javascript" src="/js/jsPdf/jspdf.min.js"></script>
+		
+	</head>
+	<script type="text/javascript">
+		
+	$(document).ready(function() {
+		$('.savePdf').click(function() { // pdf저장 button id
+	
+			var HTML_Width = $(".pdfPage").width();
+			var HTML_Height = $(".pdfPage").height();
+			var top_left_margin = 15;
+			var PDF_Width = HTML_Width+(top_left_margin*2);
+			var PDF_Height = (PDF_Width*1.5)+(top_left_margin*2);
+			var canvas_image_width = HTML_Width;
+			var canvas_image_height = HTML_Height;
+			
+			var totalPDFPages = Math.ceil(HTML_Height/PDF_Height)-1;
+
+			//이미지 생성시 스크롤이 있는경우 스크롤을 상단으로 이동 시킨 후 캡쳐를 진행하도록 한다.
+			html2canvas($(".pdfPage")[0],{allowTaint:true, 
+				  scrollX: 0,
+				  scrollY: -window.scrollY,
+				  windowWidth: document.documentElement.offsetWidth,
+				  windowHeight: document.documentElement.offsetHeight}).then(function(canvas) {
+				canvas.getContext('2d');
+				
+				var imgData = canvas.toDataURL("image/jpeg", 1.0);
+				var pdf = new jsPDF('p', 'pt',  [PDF_Width, PDF_Height]);
+			    pdf.addImage(imgData, 'JPG', top_left_margin, top_left_margin,canvas_image_width,canvas_image_height);
+				
+				//1페이지 이상인 경우 추가 페이지 처리
+				if(totalPDFPages >= 1){
+					for (var i = 1; i <= totalPDFPages; i++) { 
+						pdf.addPage(PDF_Width, PDF_Height);
+						pdf.addImage(imgData, 'JPG', top_left_margin, -(PDF_Height*i)+(top_left_margin*4),canvas_image_width,canvas_image_height);
+					}
+				}
+				
+				var strDate = nowDate();
+				pdf.save('요금 사용내역_' + strDate + '.pdf');
+	        });
+			
+		});
+	});
+	
+	//현재 날짜를 반환해주는 함수
+	function nowDate(){
+		var today = new Date();
+		var year = today.getFullYear();
+		var month = today.getMonth() + 1; //월은 0부터 시작하므로 1을 더해준다.
+		var day = today.getDate();
+		var nowDate = year + "" + month+ "" + day;
+		return nowDate;
+	}
+		
+	</script>
+	<body>
+		<!-- 견적서 -->
+		<div class="estimate_wrap pdfPage" id="pdfPage">
+			<div class="estimate">
+				<div class="est_head clearfix">
+					<img src="/publish/images/CI.png" alt="문자온 CI">
+					<div class="clearfix">
+						<p>(12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스)</p>
+						<p>TEL  010-8432-9333</p>
+					</div>
+				</div>
+				<div class="est_body">
+					<h2>요금 사용내역</h2>
+					<div class="cont1 tb_ver2">
+						<div>
+							<table class="est_table">
+								<caption>발신자 정보</caption>
+								<colgroup>
+									<col style="width: 50px;">
+									<col style="width: auto;">
+								</colgroup>
+								<tbody>
+									<tr>
+										<th></th>
+										<td colspan="2" class="colspan">
+											<span><c:out value="${userNm}"/></span> &nbsp;님의 사용내역을 아래와 같이 확인합니다.
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+					</div>
+					<div class="cont3">
+						<div class="est_table2_wrap">
+							<table class="est_table2">
+								<caption>사용날짜, 문자유형, 문자내용, 충전 충전금, 충전 포인트, 사용 충전금, 사용 포인트, 잔액 충전금, 잔액 포인트를 제공하는 표</caption>
+								<colgroup>
+									<col style="width: 15%;">
+									<col style="width: 10%;">
+									<col style="width: 15%;">
+									<col style="width: 15%;">
+									<col style="width: 10%;">
+									<%-- <col style="width: 10%;"> --%>
+									<%-- <col style="width: 15%;">
+									<col style="width: 10%;"> --%>
+								</colgroup>
+								<thead>
+									<tr>
+										<th><span style="position:relative;display:block;top:17px;background:#f2f2f2;">날짜</span></th>
+										<th><span style="position:relative;display:block;top:17px;background:#f2f2f2;">문자유형</span></th>
+										<th><span style="position:relative;display:block;top:17px;background:#f2f2f2;">발송건수</span></th>
+										<!-- <th colspan="2">충전</th> -->
+										<th colspan="2">사용</th>
+										<!-- <th colspan="2">잔액</th> -->
+									</tr>
+									<tr>
+										<th></th>
+										<th></th>
+										<th></th>
+										<th>충전금</th>
+										<th>포인트</th>
+										<!-- <th>충전금</th>
+										<th>포인트</th>
+										<th>충전금</th>
+										<th>포인트</th> -->
+									</tr>
+								</thead>
+								<tbody>
+								<c:choose>
+									<c:when test="${not empty payUserList}">
+										<c:forEach var="payUserInfo" items="${payUserList}" varStatus="status">
+											<tr>
+												<td>
+													<c:out value="${payUserInfo.regDate}"/>
+												</td>
+												<td>
+													<p style="text-align:center;">
+														<c:choose>
+															<c:when test="${payUserInfo.msgTypeTxt eq '6' && payUserInfo.fileCnt eq 0 }">
+																장문
+															</c:when>
+															<c:when test="${payUserInfo.msgTypeTxt eq '6' && payUserInfo.fileCnt ne 0 }">
+																그림
+															</c:when>
+															<c:when test="${payUserInfo.msgTypeTxt eq '8'}">
+																알림톡
+															</c:when>
+															<c:when test="${payUserInfo.msgTypeTxt eq '9'}">
+																친구톡
+															</c:when>
+															<c:when test="${payUserInfo.msgTypeTxt eq 'fax'}">
+																팩스
+															</c:when>
+															<c:otherwise>
+																단문
+															</c:otherwise>
+														</c:choose>
+													</p>
+												</td>
+												<td>
+													<c:out value="${payUserInfo.succSendCnt}"/>
+													<c:if test="${payUserInfo.msgTypeTxt eq 'fax'}">
+													(<c:out value="${payUserInfo.fileCnt}"/>)
+													</c:if>
+													<%-- <c:out value="${payUserInfo.sendCount}"/>
+													<c:if test="${payUserInfo.msgTypeTxt eq 'fax'}">
+													(<c:out value="${payUserInfo.fileCnt}"/>)
+													</c:if> --%>
+												</td>
+												<%-- <td>
+													<p>
+														<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befCash}" var="befCash" />
+														<c:out value="${befCash}"/>
+													</p>
+												</td>
+												<td>
+													<p>
+														<c:out value="${payUserInfo.befPoint}"/>
+													</p>
+												</td> --%>
+												<td>
+													<p class="fwRg c_002c9a" style="text-align:center;">
+														<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.succSendPrice}" var="succCash" />
+														<c:out value="${succCash}"/>
+													</p>
+												</td>
+												<td>
+													<p class="fwRg c_002c9a" style="text-align:center;">
+														0
+													</p>
+												</td>
+												<%-- <td>
+													<p class="fwRg c_222">
+														<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.thisPoint}" var="thisPoint" />
+														<c:out value="${thisPoint}"/>
+													</p>
+												</td>
+												<td>
+													<p class="fwRg c_222">
+														<c:out value="${payUserInfo.befPoint}"/>
+													</p>
+												</td> --%>
+											</tr>
+										</c:forEach>
+									</c:when>
+									<c:otherwise>
+										<tr>
+											<td colspan="5">
+												사용내역이 없습니다.
+											</td>
+										</tr>
+									</c:otherwise>
+								</c:choose>
+								</tbody>
+							</table>
+						</div>
+					</div>
+					<div class="cont4">
+						<table class="est_table">
+							<caption>공급가액, 부가세, 총 결제금액에 대한 표</caption>
+							<colgroup>
+								<col style="width: 64px;">
+								<col style="width: auto;">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>대표번호</th>
+									<td>010-8432-9333</td>
+								</tr>
+								<tr>
+									<th>이메일</th>
+									<td>help@iten.co.kr</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<div class="cont5">
+						<p><span><c:out value="${year}"/></span> 년&nbsp;&nbsp;<span><c:out value="${month}"/></span> 월&nbsp;&nbsp;<span><c:out value="${day}"/></span> 일</p>
+						<div>
+							<span>주식회사 아이티앤 대표이사</span>
+							<span>유&nbsp;인&nbsp;식</span>
+                        <span class="big_stamp"><img src="/publish/images/content/big_stamp.png"></span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div class="est_btn_wrap" id="est_btn_wrap">
+			<button type="button" class="btnType savePdf" ><i class="print_img"></i>pdf저장</button>
+		</div>
+		<!--// 견적서 -->
+	</body>
+</html>
src/main/webapp/index.jsp
--- src/main/webapp/index.jsp
+++ src/main/webapp/index.jsp
@@ -11,7 +11,7 @@
     <meta name="Keywords" content="문자사이트, 대량문자, 단체문자, 문자발송, 문자전송, 인터넷문자, 단체문자사이트, 대량문자발송, 문자보내기, 단체문자발송">
     <meta name="description" content="LMS문자,MMS문자,WEB발신,인터넷,컴퓨터로 문자메세지보내기,웹발신문자,문자서비스,대량문자전송,단체문자보내기">
     <meta property="og:type" content="website">
-    <meta property="og:title" content="문자온">
+    <meta property="og:title" content="문자온 인터넷 웹문자 단체문자 대량문자발송 사이트">
     <meta property="og:description" content="LMS문자,MMS문자,WEB발신,인터넷,컴퓨터로 문자메세지보내기,웹발신문자,문자서비스,대량문자전송,단체문자보내기">    
 	<meta property="og:image" content="https://www.munjaon.co.kr/publish/images/favicon/ms-icon-144x144.png">
 	<meta property="og:url" content="https://www.munjaon.co.kr/web/main/mainPage.do">
 
src/main/webapp/publish/publish_m/css/reset.css (added)
+++ src/main/webapp/publish/publish_m/css/reset.css
@@ -0,0 +1,66 @@
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	font-size: 100%;
+	vertical-align: baseline;
+	background: transparent;
+}
+body {
+	line-height: 1;
+	font-family: 'Noto Sans KR', sans-serif;
+	color: #222222;
+	font-size: 20px;
+	box-sizing: border-box;
+}
+ol, ul {
+	list-style: none;
+}
+blockquote, q {
+	quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+	content: '';
+	content: none;
+}
+
+/* remember to define focus styles! */
+:focus {
+	outline: 0;
+}
+
+/* remember to highlight inserts somehow! */
+ins {
+	text-decoration: none;
+}
+del {
+	text-decoration: line-through;
+}
+
+/* tables still need 'cellspacing="0"' in the markup */
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+}
+
+/* 여기어때 잘난체 */
+@font-face {
+    font-family: 'yg-jalnan';
+    src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_four@1.2/JalnanOTF00.woff') format('woff');
+    font-weight: normal;
+    font-style: normal;
+}
+
+/* Noto Sans KR */
+@import url('https://fonts.googleapis.com/css2?family=Dancing+Script&family=Lora&family=Noto+Sans+KR:wght@100;400;700&display=swap');
+/*font-family: 'Noto Sans KR', sans-serif;*/(No newline at end of file)
 
src/main/webapp/publish/publish_m/css/style.css (added)
+++ src/main/webapp/publish/publish_m/css/style.css
@@ -0,0 +1,116 @@
+@charset "utf-8";
+html{scroll-behavior: smooth; min-width: 280px; margin: 0 auto;}
+
+*{margin: 0; padding: 0;  word-break: keep-all; max-width: 1024px;}
+a{text-decoration: none;color: #222222;}
+
+
+.con_wrap{background-color: #f0f3f7; letter-spacing: -0.5px;}
+/*header*/
+header .inner{position: absolute; padding: 7px 20px; background-color: #fff; border-radius: 0 0 30px 0;}
+header .inner a{display: flex; align-items: center;}
+header .inner a p{font-size: 26px; font-weight: 300; padding: 0 0 0 20px;}
+
+/*메인비주얼*/
+.visual{background-image: url(/publish/publish_m/img/main_bg_big.png); background-repeat: no-repeat; /*background-position: calc(100% - 30px) 0;*/ background-color: #0b4aa7; width: 100%; border-radius: 0 0 35px 0; text-align: center;}
+.visual .inner h2{padding: 110px 0 25px 0; font-family: 'yg-jalnan'; font-size: 60px; color: #fff; line-height: 74px;}
+.visual .inner h2 span{color: #ffe329;}
+.visual .inner .button{display: inline-block;}
+.visual .inner .button a p{margin: 0 auto; width: 340px; height: 74px;border: 2px solid #cec442; border-radius: 50px; font-size: 30px; font-family: 'yg-jalnan'; color: #ffe329; line-height: 74px;}
+.visual .inner .button a p span{font-family: 'Noto Sans KR', sans-serif; font-weight: 500;}
+
+/*메인비주얼 > 요금표*/
+.visual .price .text{font-size: 18px; color: #fff; font-weight: 300;}
+.visual .price .text01{padding: 38px 20px 10px 0; text-align: right; opacity: 40%;}
+.visual .price .text02{padding: 10px 0 25px 20px; text-align: left; opacity: 50%;}
+.visual .price ul{display: flex; justify-content: space-between; padding: 0 20px;}
+.visual .price ul li{width: calc((100% - 20px)/3);}
+.visual .price ul .wrap{border: 3px solid #ffcd05; border-radius: 10px; background-color: #eaedf1; color: #082550; font-weight: 400;}
+.visual .price ul .wrap .title{padding: 9px 0; border-radius: 6px 6px 0 0; background-color: #ffcd05; text-align: center; font-size: 20px;}
+.visual .price ul .wrap .title p img{margin: 0 0 4px 0;}
+.visual .price ul .wrap .inner_text{padding: 7px 7px 10px 7px; border-radius: 0 0 8px 8px; background-color: #fff; font-size: 26px;}
+.visual .price ul .wrap .inner_text span{font-size: 18px;}
+
+/*con*/
+.con{margin: 80px 20px 0 20px;}
+.con .title{font-family: 'yg-jalnan'; display: flex; align-items: center;}
+.con .title p{font-size: 36px; margin: 1px 0 0 0;}
+.con .title .num{padding: 2px 0 0 0; display: flex; align-items: center; justify-content: center; width: 50px; height: 50px; margin: 0 20px 0 0; border-radius: 13px; background-color: #ffcd05; font-size: 32px;}
+.con .text_wrap{background-color: #fff; box-shadow: 0 0 9px rgba(0,0,0,0.1 ); padding: 44px 44px 44px 74px; margin: 30px 0 0 0; border-radius: 20px;}
+.con .text{position: relative; margin: 0 0 35px 0;}
+.con .text:last-child{margin: 0;}
+.con .text p{font-size: 32px; font-weight: 400; line-height: 1.5;}
+.con .text .te::after{content: ""; position: absolute; top: 24px; left: -22px; transform: translateY(-50%); border-radius: 50%; width: 10px; height: 10px; background-color: #ffcd05;} 
+.con .text .text_sub p{font-size: 28px; font-weight: 300; color: #666; line-height: 1.5; word-break: break-all; text-indent: -17px; margin: 0 0 0 21px;}
+
+/*footer*/
+footer{ margin: 80px 0 0 0; text-align: center; background-color: #393939; color: #fff;}
+footer .title{padding: 40px 0 18px 0; display: flex; align-items: center; justify-content: center; font-size: 30px; font-weight: 500;}
+footer .title p{margin: 0 0 0 16px;}
+footer ul li{width: 380px; /*display: flex; align-items: center; justify-content: center;*/ margin: 0 auto 16px auto; padding: 8px 0 12PX 0; border-radius: 10px; border: 1px solid #888; font-size: 40px; font-weight: 700;}
+footer ul li a{color: #fff;}
+footer ul li:last-child{margin: 0 auto;}
+footer .iten{padding: 22px 0 40px 0; font-size: 26px; font-weight: 300; opacity: 40%;}
+
+/*미디어쿼리_640x*/
+@media screen and (max-width:640px){
+    .visual{background-image: url(/publish/publish_m/img/main_bg.png);}
+}
+
+/*미디어쿼리_500x*/
+@media screen and (max-width:500px){
+    /*header*/
+    header .inner{border-radius: 0 0 20px 0; padding: 3px 20px;}
+    header .inner a img{width: 64%;}
+    header .inner a p{font-size: 14px; padding: 0; margin: 0 0 0 -20px;}
+    /*메인비주얼*/
+    .visual{border-radius: 0 0 25px 0;}
+    .visual .inner h2{padding: 70px 0 15px 0; font-size: 32px; line-height: 1.3;}
+    .visual .inner .button a p{width: 180px; height: 40px; font-size: 16px; line-height: 42px;}
+    .visual .inner .button a p img{width: 5%;}
+    /*요금*/
+    .visual .price .text{font-size: 12px;}
+    .visual .price ul .wrap{border: 2px solid #ffcd05; border-radius: 7px;}
+    .visual .price ul .wrap .title{font-size: 14px; border-radius: 5px 5px 0 0; padding: 6px 0;}
+    .visual .price ul .wrap .inner_text{font-size: 15px; border-radius: 0 0 6px 6px; padding: 5px 7px 6px 7px;}
+    .visual .price ul .wrap .inner_text span{font-size: 13px;}
+    .visual .price .text01{padding: 15px 20px 10px 0;}
+    /*con*/
+    .con{margin: 40px 20px 0 20px;}
+    .con .title p{font-size: 20px;}
+    .con .title .num{/*padding: 8px 12px 7px 12px; */width: 30px; height: 30px; margin: 0 10px 0 0; border-radius: 6px; font-size: 18px;}
+    .con .text_wrap{padding: 22px 22px 22px 37px; margin: 20px 0 0 0; border-radius: 15px;}
+    .con .text{margin: 0 0 14px 0;}
+    .con .text p{font-size: 17px;}
+    .con .text .te::after{top: 10px; left: -11px; width: 5px; height: 5px;}
+    .con .text .text_sub p{font-size: 15px; text-indent:-8px; margin: 0 0 0 9px;}
+    /*footer*/
+    footer{margin: 40px 0 0 0;}
+    footer .title{padding: 20px 0 10px 0; font-size: 16px;}
+    footer .title img{width: 8%;}
+    footer .title p{margin: 0 0 0 10px;}
+    footer ul li{width: 210px; margin: 0 auto 8px auto; border-radius: 8px; font-size: 22px; padding: 8px 0 5px 0;}
+    footer .iten{padding: 12px 0 20px 0; font-size: 13px;}
+}
+
+/*미디어쿼리_460pxx*/
+@media screen and (max-width:460px){
+    .visual{background-image: url(/publish//publish_m/img/main_bg_small_01.png);}
+}
+
+/*미디어쿼리_360x*/
+@media screen and (max-width:360px){
+    .visual{background-image: url(/publish/publish_m/img/main_bg_small_02.png);}
+}
+
+/*미디어쿼리_340x*/
+@media screen and (max-width:340px){
+    .visual .price ul .wrap .title{font-size: 13px;}
+    .visual .price ul{padding: 0 15px;}
+}
+
+/*미디어쿼리_310x*/
+@media screen and (max-width:310px){
+    .visual .price ul .wrap .title{font-size: 12px;}
+    .visual .price ul{padding: 0 9px;}
+}(No newline at end of file)
 
src/main/webapp/publish/publish_m/img/arrow.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/arrow.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/img/header_logo.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/header_logo.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/img/main_bg.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/main_bg.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/img/main_bg_big.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/main_bg_big.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/img/main_bg_small_01.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/main_bg_small_01.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/img/main_bg_small_02.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/main_bg_small_02.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/img/main_img.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/main_img.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/img/preview_logo.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/preview_logo.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/img/tel_icon.png (Binary) (added)
+++ src/main/webapp/publish/publish_m/img/tel_icon.png
Binary file is not shown
 
src/main/webapp/publish/publish_m/munjaon_intro_01.html (added)
+++ src/main/webapp/publish/publish_m/munjaon_intro_01.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>프리미엄 문자 발송 서비스 문자온</title>
+	<meta property="og:title" content="프리미엄 문자 발송 서비스 문자온">
+	<meta property="og:image" content="https://www.munjaon.co.kr/publish/publish_m/img/preview_logo.png">
+
+    <link rel="apple-touch-icon" sizes="57x57" href="/publish/images/favicon/apple-icon-57x57.png">
+	<link rel="apple-touch-icon" sizes="60x60" href="/publish/images/favicon/apple-icon-60x60.png">
+	<link rel="apple-touch-icon" sizes="72x72" href="/publish/images/favicon/apple-icon-72x72.png">
+	<link rel="apple-touch-icon" sizes="76x76" href="/publish/images/favicon/apple-icon-76x76.png">
+	<link rel="apple-touch-icon" sizes="114x114" href="/publish/images/favicon/apple-icon-114x114.png">
+	<link rel="apple-touch-icon" sizes="120x120" href="/publish/images/favicon/apple-icon-120x120.png">
+	<link rel="apple-touch-icon" sizes="144x144" href="/publish/images/favicon/apple-icon-144x144.png">
+	<link rel="apple-touch-icon" sizes="152x152" href="/publish/images/favicon/apple-icon-152x152.png">
+	<link rel="apple-touch-icon" sizes="180x180" href="/publish/images/favicon/apple-icon-180x180.png">
+	<link rel="icon" type="image/png" sizes="192x192" href="/publish/images/favicon/android-icon-192x192.png">
+	<link rel="icon" type="image/png" sizes="32x32" href="/publish/images/favicon/favicon-32x32.png">
+	<link rel="icon" type="image/png" sizes="96x96" href="/publish/images/favicon/favicon-96x96.png">
+	<link rel="icon" type="image/png" sizes="16x16" href="/publish/images/favicon/favicon-16x16.png">
+	<link rel="manifest" href="/publish/images/favicon/manifest.json">
+
+    <link rel="stylesheet" href="/publish/publish_m/css/reset.css">
+    <link rel="stylesheet" href="/publish/publish_m/css/style.css">
+</head>
+
+<body>
+	<div class="con_wrap">
+		<header>
+			<div class="inner">
+			  <a href="https://www.munjaon.co.kr">
+				<h1><img src="/publish/publish_m/img/header_logo.png" alt="문자온 로고"></h1>
+				<p>munjaon.co.kr</p>
+			  </a>
+			</div>
+		</header>
+		<div class="visual">
+			<div class="inner">
+				<h2><span>프리미엄</span>&nbsp;문자<br>발송 서비스</h2>
+				<div class="button">
+					<a href="https://www.munjaon.co.kr">
+						<p>문자온 바로가기&nbsp;<span>(클릭)</span></p>
+					</a>
+				</div>
+				<div class="price">
+					<p class="text text01">(부가세 별도)</p>
+					<ul>
+						<li>
+							<div class="wrap">
+								<p class="title">단문(SMS)</p>
+								<p class="inner_text">7.5<span>원</span></p>
+							</div>
+						</li>
+						<li>
+							<div class="wrap">
+								<p class="title">장문(LMS)</p>
+								<p class="inner_text">24<span>원</span></p>
+							</div>
+						</li>
+						<li>
+							<div class="wrap">
+								<p class="title">그림단문(MMS)</p>
+								<p class="inner_text">55<span>원</span></p>
+							</div>
+						</li>
+					</ul>
+					<p class="text text02">※ 발송량에 따른 단가 조정 가능 </p>
+				</div>
+			</div>
+		</div>
+		<section>
+			<div class="con">
+				<div class="title">
+					<p class="num">1</p>
+					<p>특장점</p>
+				</div>
+				<div class="text_wrap">
+					<div class="text">
+						<p class="te">단문(SMS), 장문(LMS), 그림문자(MMS), 카카오 알림톡, 팩스 발송 기능 제공</p>
+					</div>
+					<div class="text">
+						<p class="te">업계 최저가 요금</p>
+					</div>
+					<div class="text">
+						<p class="te">최신 트렌드 반영 서비스 제공</p>
+						<div class="text_sub">
+							<p>- 주소록 입력 대행(무료)</p>
+							<p>- 예약발송 기능 제공(분 단위)</p>
+							<p>- 문자메시지 지도‧약도 자동 첨부 가능</p>
+							<p>- 그림문자 주문제작 서비스 제공</p>
+							<p>- 다양한 결제수단 제공(신용카드, 휴대폰 결제, 전용계좌, 즉시이체, 간편결제 등)</p>
+							<p>- 무제한 발송량 제공</p>
+							<p>- 특정 공통문구(이름, 일시, 비용 등) 일괄 변경 기능 제공</p>
+						</div>
+					</div>
+					<div class="text">
+						<p class="te">다양한 방식의 20건 선거문자 발송기능 제공</p>
+					</div>
+					<div class="text">
+						<p class="te">기업‧단체‧공공기관 B2B 전용라인 제공</p>
+					</div>
+				</div>
+			</div>
+		</section>
+		<section>
+			<div class="con">
+				<div class="title">
+					<p class="num">2</p>
+					<p>이용고객</p>
+				</div>
+				<div class="text_wrap">
+					<div class="text">
+						<p class="te">개인(사업자)</p>
+						<div class="text_sub">
+							<p>- 동호회, 동문회, 향우회, 병원, 부동산, 음식점, 마트, 대리점, 숙박업, 전문직 사무실, 소셜커머스 사업자, 교육시설(학원, 학교, 유치원, 어린이집), 스포츠시설(골프장, 피트니스) 등</p>
+						</div>
+					</div>
+					<div class="text">
+						<p class="te">기업‧협회‧단체</p>
+						<div class="text_sub">
+							<p>- 기업(대‧중‧소기업), 협회, 조합, 비영리단체, 종교단체(교회, 사찰), 은행, 카드사, 쇼핑몰, 택배사, 보험사, 리서치사 등</p>
+						</div>
+					</div>
+					<div class="text">
+						<p class="te">공공</p>
+						<div class="text_sub">
+							<p>- 정부, 지방자치단체, 국회, 지방의회, 법원, 공공기관, 공직유관단체, 도서관, 미술관, 전시관, 공연시설, 영화관 등</p>
+						</div>
+					</div>
+				</div>
+			</div>
+		</section>
+		<footer>
+			<div class="title">
+				<img src="/publish/publish_m/img/tel_icon.png" alt="고객센터 아이콘">
+				<p>고객센터</p>
+			</div>
+			<ul>
+				<li>
+					<a href="tel:010-8432-9333">010-8432-9333</a>
+				</li>
+				<li>
+					<a href="tel:010-2290-4789">010-2290-4789</a>
+				</li>
+			</ul>
+			<p class="iten">주식회사 아이티앤</p>
+		</footer>
+	</div>
+
+</body>
+</html>(No newline at end of file)
 
src/main/webapp/publish/publish_m/munjaon_intro_02.html (added)
+++ src/main/webapp/publish/publish_m/munjaon_intro_02.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>프리미엄 문자 발송 서비스 문자온</title>
+	<meta property="og:title" content="프리미엄 문자 발송 서비스 문자온">
+	<meta property="og:image" content="https://www.munjaon.co.kr/publish/publish_m/img/preview_logo.png">
+
+    <link rel="apple-touch-icon" sizes="57x57" href="/publish/images/favicon/apple-icon-57x57.png">
+	<link rel="apple-touch-icon" sizes="60x60" href="/publish/images/favicon/apple-icon-60x60.png">
+	<link rel="apple-touch-icon" sizes="72x72" href="/publish/images/favicon/apple-icon-72x72.png">
+	<link rel="apple-touch-icon" sizes="76x76" href="/publish/images/favicon/apple-icon-76x76.png">
+	<link rel="apple-touch-icon" sizes="114x114" href="/publish/images/favicon/apple-icon-114x114.png">
+	<link rel="apple-touch-icon" sizes="120x120" href="/publish/images/favicon/apple-icon-120x120.png">
+	<link rel="apple-touch-icon" sizes="144x144" href="/publish/images/favicon/apple-icon-144x144.png">
+	<link rel="apple-touch-icon" sizes="152x152" href="/publish/images/favicon/apple-icon-152x152.png">
+	<link rel="apple-touch-icon" sizes="180x180" href="/publish/images/favicon/apple-icon-180x180.png">
+	<link rel="icon" type="image/png" sizes="192x192" href="/publish/images/favicon/android-icon-192x192.png">
+	<link rel="icon" type="image/png" sizes="32x32" href="/publish/images/favicon/favicon-32x32.png">
+	<link rel="icon" type="image/png" sizes="96x96" href="/publish/images/favicon/favicon-96x96.png">
+	<link rel="icon" type="image/png" sizes="16x16" href="/publish/images/favicon/favicon-16x16.png">
+	<link rel="manifest" href="/publish/images/favicon/manifest.json">
+
+    <link rel="stylesheet" href="/publish/publish_m/css/reset.css">
+    <link rel="stylesheet" href="/publish/publish_m/css/style.css">
+</head>
+
+<body>
+	<div class="con_wrap">
+		<header>
+			<div class="inner">
+			  <a href="https://www.munjaon.co.kr">
+				<h1><img src="/publish/publish_m/img/header_logo.png" alt="문자온 로고"></h1>
+				<p>munjaon.co.kr</p>
+			  </a>
+			</div>
+		</header>
+		<div class="visual">
+			<div class="inner">
+				<h2><span>프리미엄</span>&nbsp;문자<br>발송 서비스</h2>
+				<div class="button">
+					<a href="https://www.munjaon.co.kr">
+						<p>문자온 바로가기&nbsp;<span>(클릭)</span></p>
+					</a>
+				</div>
+				<div class="price">
+					<p class="text text01">(부가세 별도)</p>
+					<ul>
+						<li>
+							<div class="wrap">
+								<p class="title">단문(SMS)</p>
+								<p class="inner_text">8<span>원</span></p>
+							</div>
+						</li>
+						<li>
+							<div class="wrap">
+								<p class="title">장문(LMS)</p>
+								<p class="inner_text">26<span>원</span></p>
+							</div>
+						</li>
+						<li>
+							<div class="wrap">
+								<p class="title">그림단문(MMS)</p>
+								<p class="inner_text">60<span>원</span></p>
+							</div>
+						</li>
+					</ul>
+					<p class="text text02">※ 발송량에 따른 단가 조정 가능 </p>
+				</div>
+			</div>
+		</div>
+		<section>
+			<div class="con">
+				<div class="title">
+					<p class="num">1</p>
+					<p>특장점</p>
+				</div>
+				<div class="text_wrap">
+					<div class="text">
+						<p class="te">단문(SMS), 장문(LMS), 그림문자(MMS), 카카오 알림톡, 팩스 발송 기능 제공</p>
+					</div>
+					<div class="text">
+						<p class="te">업계 최저가 요금</p>
+					</div>
+					<div class="text">
+						<p class="te">최신 트렌드 반영 서비스 제공</p>
+						<div class="text_sub">
+							<p>- 주소록 입력 대행(무료)</p>
+							<p>- 예약발송 기능 제공(분 단위)</p>
+							<p>- 문자메시지 지도‧약도 자동 첨부 가능</p>
+							<p>- 그림문자 주문제작 서비스 제공</p>
+							<p>- 다양한 결제수단 제공(신용카드, 휴대폰 결제, 전용계좌, 즉시이체, 간편결제 등)</p>
+							<p>- 무제한 발송량 제공</p>
+							<p>- 특정 공통문구(이름, 일시, 비용 등) 일괄 변경 기능 제공</p>
+						</div>
+					</div>
+					<div class="text">
+						<p class="te">다양한 방식의 20건 선거문자 발송기능 제공</p>
+					</div>
+					<div class="text">
+						<p class="te">기업‧단체‧공공기관 B2B 전용라인 제공</p>
+					</div>
+				</div>
+			</div>
+		</section>
+		<section>
+			<div class="con">
+				<div class="title">
+					<p class="num">2</p>
+					<p>이용고객</p>
+				</div>
+				<div class="text_wrap">
+					<div class="text">
+						<p class="te">개인(사업자)</p>
+						<div class="text_sub">
+							<p>- 동호회, 동문회, 향우회, 병원, 부동산, 음식점, 마트, 대리점, 숙박업, 전문직 사무실, 소셜커머스 사업자, 교육시설(학원, 학교, 유치원, 어린이집), 스포츠시설(골프장, 피트니스) 등</p>
+						</div>
+					</div>
+					<div class="text">
+						<p class="te">기업‧협회‧단체</p>
+						<div class="text_sub">
+							<p>- 기업(대‧중‧소기업), 협회, 조합, 비영리단체, 종교단체(교회, 사찰), 은행, 카드사, 쇼핑몰, 택배사, 보험사, 리서치사 등</p>
+						</div>
+					</div>
+					<div class="text">
+						<p class="te">공공</p>
+						<div class="text_sub">
+							<p>- 정부, 지방자치단체, 국회, 지방의회, 법원, 공공기관, 공직유관단체, 도서관, 미술관, 전시관, 공연시설, 영화관 등</p>
+						</div>
+					</div>
+				</div>
+			</div>
+		</section>
+		<footer>
+			<div class="title">
+				<img src="/publish/publish_m/img/tel_icon.png" alt="고객센터 아이콘">
+				<p>고객센터</p>
+			</div>
+			<ul>
+				<li>
+					<a href="tel:010-8432-9333">010-8432-9333</a>
+				</li>
+				<li>
+					<a href="tel:010-2290-4789">010-2290-4789</a>
+				</li>
+			</ul>
+			<p class="iten">주식회사 아이티앤</p>
+		</footer>
+	</div>
+
+</body>
+</html>(No newline at end of file)
Add a comment
List