JIWOO 2025-08-08
Merge branch '5175_마이페이지_및_결제'
@fd550ea58079e9aa42f0705dbe00c873489b1572
src/main/java/itn/let/mjo/event/service/MjonEventVO.java
--- src/main/java/itn/let/mjo/event/service/MjonEventVO.java
+++ src/main/java/itn/let/mjo/event/service/MjonEventVO.java
@@ -38,5 +38,5 @@
 	private String point;				//사용자 포인트 정보
 	private String userId;				//사용자 아이디
 	private String frstRegisterId;		//등록자 아이디
-
+	
 }
src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java
--- src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java
+++ src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java
@@ -278,6 +278,8 @@
    		try {
    			// 다음 결제시 결제수단 SELECT
    			nextPayMethod = userManageService.selectNextPayMethod(userId);
+   			// 실제 마지막 결제 방식 - 
+   			
    		}
    		catch(Exception e) {
    			isSuccess = false;
@@ -1640,6 +1642,45 @@
     	return "web/cop/kgmV2/bankOkUrl";
 	}      
     
+ 	/**
+   	 * 마지막 결제수단 SELECT
+   	 * @throws Exception
+   	 */
+   	@RequestMapping(value = "/web/member/pay/selectLastPayMethodAjax.do")
+   	public ModelAndView selectLastPayMethodAjax(MjonPayVO mjonPayVO, 
+   			HttpServletRequest request ) throws Exception {
+   		
+   		ModelAndView modelAndView = new ModelAndView();
+   		modelAndView.setViewName("jsonView");
+   		
+   		boolean isSuccess = true;
+   		String msg = "";
+   		String nextPayMethod = "";
+   		
+   		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+   		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+   		
+   		if(userId == null) {
+   			isSuccess = false;
+   			msg = "로그인이 필요합니다.";   			
+   		}
+   		
+   		try {
+   			// 다음 결제시 결제수단 SELECT
+   			nextPayMethod = userManageService.selectLastPayMethod(userId);
+   		}
+   		catch(Exception e) {
+   			isSuccess = false;
+   			msg = e.getMessage();
+   		}		
+   		
+   		modelAndView.addObject("isSuccess", isSuccess);
+   		modelAndView.addObject("msg", msg);
+   		modelAndView.addObject("nextPayMethod", nextPayMethod);
+   		
+   		return modelAndView;
+   	}
+   	
   	// Get Server Path
    	public static String getKgServerPath(HttpServletRequest request) {
 		String kgmPath = request.getScheme() + "://" + request.getServerName() +":" + request.getServerPort();
src/main/java/itn/let/uat/uia/service/impl/EgovMberManageServiceImpl.java
--- src/main/java/itn/let/uat/uia/service/impl/EgovMberManageServiceImpl.java
+++ src/main/java/itn/let/uat/uia/service/impl/EgovMberManageServiceImpl.java
@@ -1,5 +1,10 @@
 package itn.let.uat.uia.service.impl;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.List;
 
 import javax.annotation.Resource;
@@ -11,14 +16,16 @@
 
 import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
 import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import itn.com.cmm.util.StringUtil;
 import itn.com.uss.olh.hpc.service.HackIpService;
 import itn.com.uss.olh.hpc.service.HackIpVO;
 import itn.com.utl.fcc.service.EgovStringUtil;
-import itn.let.mjo.cert.service.CertVO;
+import itn.let.mjo.msgdata.service.MjonMsgDataService;
 import itn.let.mjo.msgsent.service.MjonMsgSentVO;
 import itn.let.mjo.pay.service.KmcVO;
 import itn.let.sec.rgm.service.AuthorGroup;
 import itn.let.sec.rgm.service.EgovAuthorGroupService;
+import itn.let.sym.site.service.JoinSettingVO;
 import itn.let.uat.uia.service.AuthCertVO;
 import itn.let.uss.umt.service.AdmProcHstryVO;
 import itn.let.uss.umt.service.EgovMberManageService;
@@ -81,6 +88,10 @@
 	/*아이피 차단*/
 	@Resource(name = "hackIpService")
 	private HackIpService hackIpService;
+	
+	/* MjonMsgDataService */
+	@Resource(name = "MjonMsgDataService")
+    private MjonMsgDataService mjonMsgDataService;
 	
 	
 	@Override
@@ -621,4 +632,71 @@
 		return mberManageDAO.findTopByregDateFromCertLog(authCertVO);
 	}
 	
+	public MberManageVO selectMberHeaderInfo(String mberId) throws Exception {
+		//회원 단가, 이벤트 단가, 이벤트 종료일 등 조회
+		MberManageVO headerInfo = mberManageDAO.selectMberHeaderInfo(mberId);
+		//기본 단가 조회
+		JoinSettingVO sysPrice = mjonMsgDataService.selectJoinSettingInfo();
+	
+		//이벤트 종료까지 남은 일 수 계산
+		long  eventLeftDay = calculateEventLeftDay(headerInfo.getEventEndDate());
+		headerInfo.setEventLeftDay(String.valueOf(eventLeftDay));
+	
+		//이벤트 유무에 따라 이벤트 잔액 or 잔액 사용
+		boolean isEventActive = eventLeftDay > 0;
+		double money = isEventActive ? headerInfo.getEventRemainCash() : headerInfo.getUserMoney();
+	
+		//이벤트, 회원 단가가 0일 시 기본 단가 사용
+		setPrices(headerInfo, sysPrice, isEventActive);
+	
+		//발송가능 건수 조회
+		calculateAvailableCounts(headerInfo, money);
+	
+		return headerInfo;
+	}
+	
+	private long calculateEventLeftDay(String eventEndDateStr) {
+		if (StringUtil.isEmpty(eventEndDateStr)) return 0;
+		LocalDate today = LocalDate.now();
+		LocalDate eventEndDate = LocalDate.parse(eventEndDateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+		return ChronoUnit.DAYS.between(today, eventEndDate);
+	}
+	
+	private void setPrices(MberManageVO headerInfo, JoinSettingVO sysPrice, boolean isEventActive) {
+		if (isEventActive) {
+			headerInfo.setHeaderShortPrice(priceChk(headerInfo.getEventShortPrice(), sysPrice.getShortPrice()));
+			headerInfo.setHeaderLongPrice(priceChk(headerInfo.getEventLongPrice(), sysPrice.getLongPrice()));
+			headerInfo.setHeaderPicturePrice(priceChk(headerInfo.getEventPicturePrice(), sysPrice.getPicturePrice()));
+			headerInfo.setHeaderPicture2Price(priceChk(headerInfo.getEventPicture2Price(), sysPrice.getPicture2Price()));
+			headerInfo.setHeaderPicture3Price(priceChk(headerInfo.getEventPicture3Price(), sysPrice.getPicture3Price()));
+		} else {
+			headerInfo.setHeaderShortPrice(priceChk(headerInfo.getShortPrice(), sysPrice.getShortPrice()));
+			headerInfo.setHeaderLongPrice(priceChk(headerInfo.getLongPrice(), sysPrice.getLongPrice()));
+			headerInfo.setHeaderPicturePrice(priceChk(headerInfo.getPicturePrice(), sysPrice.getPicturePrice()));
+			headerInfo.setHeaderPicture2Price(priceChk(headerInfo.getPicture2Price(), sysPrice.getPicture2Price()));
+			headerInfo.setHeaderPicture3Price(priceChk(headerInfo.getPicture3Price(), sysPrice.getPicture3Price()));
+		}
+		// 카카오, 팩스 단가는 기본 단가 고정
+		headerInfo.setHeaderKakaoAtPrice(sysPrice.getKakaoAtPrice());
+		headerInfo.setHeaderFaxPrice(sysPrice.getFaxPrice());
+	}
+	
+	private float priceChk(float price, float sysPrice) {
+		return price > 0 ? price : sysPrice;
+	}
+	
+	private void calculateAvailableCounts(MberManageVO headerInfo, double money) {
+		headerInfo.setHeaderShortCnt(calcCount(money, headerInfo.getHeaderShortPrice()));
+		headerInfo.setHeaderLongCnt(calcCount(money, headerInfo.getHeaderLongPrice()));
+		headerInfo.setHeaderPictureCnt(calcCount(money, headerInfo.getHeaderPicturePrice()));
+		headerInfo.setHeaderPicture2Cnt(calcCount(money, headerInfo.getHeaderPicture2Price()));
+		headerInfo.setHeaderPicture3Cnt(calcCount(money, headerInfo.getHeaderPicture3Price()));
+		headerInfo.setHeaderKakaoAtCnt(calcCount(money, headerInfo.getHeaderKakaoAtPrice()));
+		headerInfo.setHeaderFaxCnt(calcCount(money, headerInfo.getHeaderFaxPrice()));
+	}
+	
+	private int calcCount(double money, double price) {
+		if (price <= 0) return 0;
+		return (int) Math.floor(money / price);
+	}
 }
(No newline at end of file)
src/main/java/itn/let/uat/uia/service/impl/MberManageDAO.java
--- src/main/java/itn/let/uat/uia/service/impl/MberManageDAO.java
+++ src/main/java/itn/let/uat/uia/service/impl/MberManageDAO.java
@@ -345,5 +345,8 @@
 	public String findTopByregDateFromCertLog(AuthCertVO authCertVO) {
 		return (String)select("mberManageDAO.findTopByregDateFromCertLog", authCertVO);
 	}
-	
+
+	public MberManageVO selectMberHeaderInfo(String mberId) {
+		return (MberManageVO) select("mberManageDAO.selectMberHeaderInfo", mberId);
+	}
 }
(No newline at end of file)
src/main/java/itn/let/uss/umt/service/EgovMberManageService.java
--- src/main/java/itn/let/uss/umt/service/EgovMberManageService.java
+++ src/main/java/itn/let/uss/umt/service/EgovMberManageService.java
@@ -251,4 +251,6 @@
 
 	public String findTopByregDateFromCertLog(AuthCertVO authCertVO);
 
+	//사용자 헤더 정보(단가, 이벤트 활성화 기간)
+	public MberManageVO selectMberHeaderInfo(String mberId) throws Exception;
 }
(No newline at end of file)
src/main/java/itn/let/uss/umt/service/EgovUserManageService.java
--- src/main/java/itn/let/uss/umt/service/EgovUserManageService.java
+++ src/main/java/itn/let/uss/umt/service/EgovUserManageService.java
@@ -220,4 +220,6 @@
 
 	public Map<String, Object> selectFaxSendList(FaxGroupDataVO faxGroupDataVO);	
     
+	// 마지막 결제수단 조회
+	public String selectLastPayMethod(String mberId) throws Exception;
 }
(No newline at end of file)
src/main/java/itn/let/uss/umt/service/MberManageVO.java
--- src/main/java/itn/let/uss/umt/service/MberManageVO.java
+++ src/main/java/itn/let/uss/umt/service/MberManageVO.java
@@ -512,6 +512,39 @@
 	 */
 	private String secuLoginFlag;
 	
+	
+	/**
+	 * 회원 이벤트 정보
+	 */
+	private String eventEndDate;		//회원 이벤트 종료일자
+	private double eventRemainCash;		//이벤트 차감 후 남은 Cash
+	private float eventShortPrice;		//이벤트 단문 가격
+	private float eventLongPrice;		//이벤트 장문 가격
+	private float eventPicturePrice;	//이벤트 그림 1장 가격
+	private float eventPicture2Price;	//이벤트 그림 2장 가격
+	private float eventPicture3Price;	//이벤트 그림 3장 가격
+	private String eventLeftDay;		//이벤트 남은 기간
+	
+	/**
+	 * 헤더 영역 정보(단가, 발송가능 건수)
+	 */
+	private float headerShortPrice;	
+	private float headerLongPrice;		
+	private float headerPicturePrice;	
+	private float headerPicture2Price;	
+	private float headerPicture3Price;
+	private float headerKakaoAtPrice;
+	private float headerKakaoFtPrice;
+	private float headerFaxPrice;
+	private int headerShortCnt;	
+	private int headerLongCnt;		
+	private int headerPictureCnt;	
+	private int headerPicture2Cnt;	
+	private int headerPicture3Cnt;	
+	private int headerKakaoAtCnt;	
+	private int headerKakaoFtCnt;	
+	private int headerFaxCnt;	
+	
 	public String getSmsCode() {
 		return smsCode;
 	}
@@ -1804,6 +1837,150 @@
 	public void setSecuLoginFlag(String secuLoginFlag) {
 		this.secuLoginFlag = secuLoginFlag;
 	}
+	public String getEventEndDate() {
+		return eventEndDate;
+	}
+	public void setEventEndDate(String eventEndDate) {
+		this.eventEndDate = eventEndDate;
+	}
+	public double getEventRemainCash() {
+		return eventRemainCash;
+	}
+	public void setEventRemainCash(double eventRemainCash) {
+		this.eventRemainCash = eventRemainCash;
+	}
+	public float getEventShortPrice() {
+		return eventShortPrice;
+	}
+	public void setEventShortPrice(float eventShortPrice) {
+		this.eventShortPrice = eventShortPrice;
+	}
+	public float getEventLongPrice() {
+		return eventLongPrice;
+	}
+	public void setEventLongPrice(float eventLongPrice) {
+		this.eventLongPrice = eventLongPrice;
+	}
+	public float getEventPicturePrice() {
+		return eventPicturePrice;
+	}
+	public void setEventPicturePrice(float eventPicturePrice) {
+		this.eventPicturePrice = eventPicturePrice;
+	}
+	public float getEventPicture2Price() {
+		return eventPicture2Price;
+	}
+	public void setEventPicture2Price(float eventPicture2Price) {
+		this.eventPicture2Price = eventPicture2Price;
+	}
+	public float getEventPicture3Price() {
+		return eventPicture3Price;
+	}
+	public void setEventPicture3Price(float eventPicture3Price) {
+		this.eventPicture3Price = eventPicture3Price;
+	}
+	public String getEventLeftDay() {
+		return eventLeftDay;
+	}
+	public void setEventLeftDay(String eventLeftDay) {
+		this.eventLeftDay = eventLeftDay;
+	}
+	public float getHeaderShortPrice() {
+		return headerShortPrice;
+	}
+	public void setHeaderShortPrice(float headerShortPrice) {
+		this.headerShortPrice = headerShortPrice;
+	}
+	public float getHeaderLongPrice() {
+		return headerLongPrice;
+	}
+	public void setHeaderLongPrice(float headerLongPrice) {
+		this.headerLongPrice = headerLongPrice;
+	}
+	public float getHeaderPicturePrice() {
+		return headerPicturePrice;
+	}
+	public void setHeaderPicturePrice(float headerPicturePrice) {
+		this.headerPicturePrice = headerPicturePrice;
+	}
+	public float getHeaderPicture2Price() {
+		return headerPicture2Price;
+	}
+	public void setHeaderPicture2Price(float headerPicture2Price) {
+		this.headerPicture2Price = headerPicture2Price;
+	}
+	public float getHeaderPicture3Price() {
+		return headerPicture3Price;
+	}
+	public void setHeaderPicture3Price(float headerPicture3Price) {
+		this.headerPicture3Price = headerPicture3Price;
+	}
+	public int getHeaderShortCnt() {
+		return headerShortCnt;
+	}
+	public void setHeaderShortCnt(int headerShortCnt) {
+		this.headerShortCnt = headerShortCnt;
+	}
+	public int getHeaderLongCnt() {
+		return headerLongCnt;
+	}
+	public void setHeaderLongCnt(int headerLongCnt) {
+		this.headerLongCnt = headerLongCnt;
+	}
+	public int getHeaderPictureCnt() {
+		return headerPictureCnt;
+	}
+	public void setHeaderPictureCnt(int headerPictureCnt) {
+		this.headerPictureCnt = headerPictureCnt;
+	}
+	public int getHeaderPicture2Cnt() {
+		return headerPicture2Cnt;
+	}
+	public void setHeaderPicture2Cnt(int headerPicture2Cnt) {
+		this.headerPicture2Cnt = headerPicture2Cnt;
+	}
+	public int getHeaderPicture3Cnt() {
+		return headerPicture3Cnt;
+	}
+	public void setHeaderPicture3Cnt(int headerPicture3Cnt) {
+		this.headerPicture3Cnt = headerPicture3Cnt;
+	}
+	public float getHeaderKakaoAtPrice() {
+		return headerKakaoAtPrice;
+	}
+	public void setHeaderKakaoAtPrice(float headerKakaoAtPrice) {
+		this.headerKakaoAtPrice = headerKakaoAtPrice;
+	}
+	public float getHeaderKakaoFtPrice() {
+		return headerKakaoFtPrice;
+	}
+	public void setHeaderKakaoFtPrice(float headerKakaoFtPrice) {
+		this.headerKakaoFtPrice = headerKakaoFtPrice;
+	}
+	public float getHeaderFaxPrice() {
+		return headerFaxPrice;
+	}
+	public void setHeaderFaxPrice(float headerFaxPrice) {
+		this.headerFaxPrice = headerFaxPrice;
+	}
+	public int getHeaderKakaoAtCnt() {
+		return headerKakaoAtCnt;
+	}
+	public void setHeaderKakaoAtCnt(int headerKakaoAtCnt) {
+		this.headerKakaoAtCnt = headerKakaoAtCnt;
+	}
+	public int getHeaderKakaoFtCnt() {
+		return headerKakaoFtCnt;
+	}
+	public void setHeaderKakaoFtCnt(int headerKakaoFtCnt) {
+		this.headerKakaoFtCnt = headerKakaoFtCnt;
+	}
+	public int getHeaderFaxCnt() {
+		return headerFaxCnt;
+	}
+	public void setHeaderFaxCnt(int headerFaxCnt) {
+		this.headerFaxCnt = headerFaxCnt;
+	}
 	
 	
 }
(No newline at end of file)
src/main/java/itn/let/uss/umt/service/impl/EgovUserManageServiceImpl.java
--- src/main/java/itn/let/uss/umt/service/impl/EgovUserManageServiceImpl.java
+++ src/main/java/itn/let/uss/umt/service/impl/EgovUserManageServiceImpl.java
@@ -882,5 +882,11 @@
 
 		return resultMap;
 	}
+	
+	// 마지막 결제수단 SELECT
+	@Override
+	public String selectLastPayMethod(String mberId) throws Exception {
+		return userManageDAO.selectLastPayMethod(mberId);
+	}
 
 }
(No newline at end of file)
src/main/java/itn/let/uss/umt/service/impl/UserManageDAO.java
--- src/main/java/itn/let/uss/umt/service/impl/UserManageDAO.java
+++ src/main/java/itn/let/uss/umt/service/impl/UserManageDAO.java
@@ -320,5 +320,9 @@
     public int selectUserPrePaymentPGdataCount(String userId) throws Exception{
     	return (int) select("userManageDAO.selectUserPrePaymentPGdataCount", userId);
     }
-    
+ 
+	// 마지막 결제수단 SELECT
+	public String selectLastPayMethod(String mberId) throws Exception{
+		return (String) select("userManageDAO.selectLastPayMethod", mberId);
+	}
 }
(No newline at end of file)
src/main/java/itn/web/MainController.java
--- src/main/java/itn/web/MainController.java
+++ src/main/java/itn/web/MainController.java
@@ -12,6 +12,9 @@
 import java.security.PublicKey;
 import java.security.spec.RSAPublicKeySpec;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -106,6 +109,7 @@
 import itn.let.mjo.addr.service.AddrTransHistService;
 import itn.let.mjo.addr.service.AddrTransHistVO;
 import itn.let.mjo.event.service.MjonEventService;
+import itn.let.mjo.event.service.MjonEventVO;
 import itn.let.mjo.kisa.service.KisaService;
 import itn.let.mjo.kisa.service.KisaVO;
 import itn.let.mjo.mjocommon.MjonForienIpChk;
@@ -130,6 +134,7 @@
 import itn.let.sym.prm.service.EgovProgrmManageService;
 import itn.let.sym.prm.service.ProgrmManageVO;
 import itn.let.sym.site.service.EgovSiteManagerService;
+import itn.let.sym.site.service.JoinSettingVO;
 import itn.let.sym.site.service.MetaTagVO;
 import itn.let.sym.site.service.SiteManagerVO;
 import itn.let.uss.umt.service.EgovMberManageService;
@@ -1256,6 +1261,16 @@
 			model.addAttribute("mberManageVO", userManageService.selectUserInfo(mberManageVO));
 		}
 		
+		/*
+		 * 회원별 단가, 기본 단가, 이벤트 정보 조회
+		 * 2025.07.25 이지우 추가
+		 * */
+			MberManageVO mberHeaderInfoVO = new MberManageVO();
+			if(loginVO != null) {
+				mberHeaderInfoVO = mberManageService.selectMberHeaderInfo(loginVO.getId());
+			}
+			model.addAttribute("mberHeaderInfoVO", mberHeaderInfoVO);
+			
 		return "web/com/webCommonHeader";
     }
     
src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
@@ -2142,4 +2142,38 @@
     
     </update>
 
+	<select id="mberManageDAO.selectMberHeaderInfo" resultClass="itn.let.uss.umt.service.MberManageVO" parameterClass="String">
+		SELECT
+			  L.SHORT_PRICE					AS shortPrice
+			, L.LONG_PRICE					AS longPrice
+			, L.PICTURE_PRICE				AS picturePrice
+			, L.PICTURE2_PRICE				AS picture2Price
+			, L.PICTURE3_PRICE				AS picture3Price
+			, L.PRE_PAYMENT_YN				AS prePaymentYn
+			, L.USER_MONEY					AS userMoney	
+			, IFNULL(MEMI.EVENT_SHORT_PRICE, 0)		AS eventShortPrice
+			, IFNULL(MEMI.EVENT_LONG_PRICE, 0)			AS eventLongPrice
+			, IFNULL(MEMI.EVENT_PICTURE_PRICE, 0)		AS eventPicturePrice
+			, IFNULL(MEMI.EVENT_PICTURE2_PRICE, 0)		AS eventPicture2Price
+			, IFNULL(MEMI.EVENT_PICTURE3_PRICE, 0)		AS eventPicture3Price
+			, IFNULL(MEMI.EVENT_REMAIN_CASH, 0)		AS eventRemainCash
+			, DATE_FORMAT(MEMI.EVENT_END_DATE, '%Y-%m-%d')	AS eventEndDate
+		FROM
+			LETTNGNRLMBER L
+		LEFT JOIN
+			MJ_EVENT_MBER_INFO MEMI
+		ON L.MBER_ID = MEMI.MBER_ID
+		AND MEMI.EVENT_INFO_ID = (
+				SELECT
+					MAX(EVENT_INFO_ID)
+				FROM
+					MJ_EVENT_MBER_INFO
+				WHERE
+					MBER_ID = #mberID#
+					AND EVENT_STATUS = 'Y'
+					
+			)
+		WHERE L.MBER_ID = #mberId#
+		
+	</select>
 </sqlMap>
src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml
@@ -1458,5 +1458,15 @@
 		AND    MONTH(REG_DATE) = MONTH(CURRENT_DATE)
 	
 	</select>
-		
+
+	<!-- 마지막 결제수단 SELECT -->
+	<select id="userManageDAO.selectLastPayMethod" parameterClass="String" resultClass="String">
+		SELECT 
+			IFNULL(PAY_METHOD, '') AS nextPayMethod
+		FROM MJ_PG 
+		WHERE
+			USER_ID = #userId#
+		ORDER BY REG_DATE DESC LIMIT 1
+	</select>
+			
 </sqlMap>
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
@@ -1398,14 +1398,14 @@
             <div class="inner">
                 <ul class="menu_left">
                     <li><a href="#" id="favorite" ><i class="hdTop_fav"></i>즐겨찾기추가</a></li>
-                    <li><a href="<c:out value='/web/user/mberInfoIndex.do'/>" ><i class="hdTop_mypage"></i>마이페이지</a></li>
-                    <li><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" ><i class="hdTop_center"></i>고객센터</a></li>
+                    <li><a href="<c:out value='/web/user/mberInfoChange.do'/>" ><i class="hdTop_mypage"></i>마이페이지</a></li>
+                    <li><a href="<c:out value='/web/cop/bbs/QnaList.do'/>" ><i class="hdTop_center"></i>1:1 문의</a></li>
                 </ul>
                 <ul class="menu_right">
                     <li><a href="#" onclick="location.href='/web/member/pay/PayView.do'" >충전하기</a></li>
                     <li class="SortLine"><a href="/web/pay/PayGuide.do" >요금안내</a></li>
                     <li class="SortLine"><a href="/web/cop/bbs/FaqList.do" >이용안내</a></li>
-                    <li class="SortLine"><a href="/web/cop/bbs/QnaList.do" >1:1 문의</a></li>
+                    <li class="SortLine"><a href="/web/cop/bbs/NoticeList.do" >고객센터</a></li>
                     <li class="SortLine"><a href="/web/cop/bbs/SuggestList.do" >불편신고</a></li>
                 </ul>
             </div>
@@ -1627,7 +1627,9 @@
 	            		</li>
 	            		<li>
 	            			<dl>
-	            				<dt><a href="<c:out value='/web/user/mberInfoIndex.do'/>" >마이페이지</a></dt>
+	            				<%-- 250724 마이페이지 대시보드 삭제 --%>
+	            				<%-- <dt><a href="<c:out value='/web/user/mberInfoIndex.do'/>" >마이페이지</a></dt> --%>
+	            				<dt><a href="<c:out value='/web/user/mberInfoChange.do'/>" >마이페이지</a></dt>
 	            				<dd>
 	            					<ul>
 	            						<li><a href="<c:out value='/web/user/mberInfoChange.do'/>" >회원정보 변경</a></li>
@@ -1637,7 +1639,7 @@
 	            						</c:if>
 	            						<li><a href="<c:out value='/web/user/passwordChange.do'/>" >비밀번호 변경</a></li>
 	            						<li><a href="<c:out value='/web/user/sendNumberManage.do'/>" >발신번호 관리</a></li>
-	            						<li><a href="<c:out value='/web/user/notifyManage.do'/>" >알림설정</a></li>
+	            						<%-- <li><a href="<c:out value='/web/user/notifyManage.do'/>" >알림설정</a></li> --%>
 	            						<%-- <li><a href="<c:out value='/web/user/mberSecession.do'/>" >회원탈퇴</a></li> --%>
 	            						<%-- <li><a href="<c:out value='/web/user/kisaReport.do'/>" >KISA 신고</a></li> --%>
 	            					</ul>
@@ -1744,8 +1746,9 @@
 		                <div class="login_left">
 		                    <div class="login_info">
 		                    	<input type="hidden" id="loginId" name="loginId" value="${LoginVO.id}">
-								<i><img src="/publish/images/mypageIcon2.png" id="commonHeaderGradeIcon" /></i>
+								<!-- <i><img src="/publish/images/mypageIcon2.png" id="commonHeaderGradeIcon" /></i> -->
 								<div class="login2_name" onclick="location.href='/web/user/mberInfoChange.do'" style="cursor:pointer;">
+									<i class="icon_user"></i>
 		                        	<p><c:out value="${LoginVO.name}"/></p>
 		                        	<c:choose>
 		                        		<c:when test="${LoginVO.dept == 'p'}">
@@ -1765,8 +1768,8 @@
 										<img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘">
 									</a>	 -->
 		                        </div>
-		                        <button type="button" class="btnType btnType3" onclick="location.href='/web/user/mberInfoIndex.do'">마이페이지</button>
-		                        <button type="button" class="btnType btnType2" onclick="location.href='/web/uat/uia/actionLogout.do'">로그아웃</button>
+		                        <!-- <button type="button" class="btnType btnType3" onclick="location.href='/web/user/mberInfoIndex.do'">마이페이지</button> -->
+		                        <button type="button" class="btnType btn_36 fill_gray" onclick="location.href='/web/uat/uia/actionLogout.do'">로그아웃</button>
 		                        
 								
 								<div class="security_box">
@@ -1778,33 +1781,88 @@
 		                    </div>
 		                    <div class="login_pay">
 			                    <div class="check_money">
-			                    	<div class="holdingsum_box">
+									<div class="holdingsum_box">
 										<i></i>
+										<div class="user_money_wrap">
+											보유잔액
+											<div class="hover_content_wrap">
+												<i class="qmMark">?</i>
+												<div class="hover_content">
+													<p class="hover_content_title">
+														<img src="/publish/images/content/icon_mypage_message.png" alt=""> 나의단가 <span>(발송가능 건수)</span>
+													</p>
+													<ul class="send_available_number">
+														<li>
+															<p class="title">· 단문</p>
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerShortPrice}" var="shortPrice" />
+															<p class="number"><span class="c_002c9a fwBold"><c:out value="${shortPrice}"/></span>원
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerShortCnt}" var="shortCnt" />
+															(<c:out value="${shortCnt}"/>건)</p>
+														</li>
+														<li>
+															<p class="title">· 장문</p>
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerLongPrice}" var="LongPrice" />
+															<p class="number"><span class="c_002c9a fwBold"><c:out value="${LongPrice}"/></span>원
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerLongCnt}" var="LongCnt" />
+															(<c:out value="${LongCnt}"/>건)</p>
+														</li>
+														<li>
+															<p class="title">· 그림(1장)</p>
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicturePrice}" var="picturePrice" />
+															<p class="number"><span class="c_002c9a fwBold"><c:out value="${picturePrice}"/></span>원
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPictureCnt}" var="pictureCnt" />
+															(<c:out value="${pictureCnt}"/>건)</p>
+														</li>
+														<li>
+															<p class="title">· 그림(2장)</p>
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicture2Price}" var="picture2Price" />
+															<p class="number"><span class="c_002c9a fwBold"><c:out value="${picture2Price}"/></span>원
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicture2Cnt}" var="picture2Cnt" />
+															(<c:out value="${picture2Cnt}"/>건)</p>
+														</li>
+														<li>
+															<p class="title">· 그림(3장)</p>
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicture3Price}" var="picture3Price" />
+															<p class="number"><span class="c_002c9a fwBold"><c:out value="${picture3Price}"/></span>원
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicture3Cnt}" var="picture3Cnt" />
+															(<c:out value="${picture3Cnt}"/>건)</p>
+														</li>
+														<li>
+															<p class="title">· 알림톡</p>
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerKakaoAtPrice}" var="kakaoAtPrice" />
+															<p class="number"><span class="c_002c9a fwBold"><c:out value="${kakaoAtPrice}"/></span>원
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerKakaoAtCnt}" var="kakaoAtCnt" />
+															(<c:out value="${kakaoAtCnt}"/>건)</p>
+														</li>
+														<li>
+															<p class="title">· 팩스</p>
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerFaxPrice}" var="faxPrice" />
+															<p class="number"><span class="c_002c9a fwBold"><c:out value="${faxPrice}"/></span>원
+															<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerFaxCnt}" var="faxCnt" />
+															(<c:out value="${faxCnt}"/>건)</p>
+														</li>
+													</ul>
+													<c:if test="${prePaymentYn eq 'Y' and mberHeaderInfoVO.eventLeftDay > 0}">
+														<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.eventRemainCash}" var="eventRemainCash" />
+														<div class="event_term"><p>이벤트<span class="fwBold">(D-${mberHeaderInfoVO.eventLeftDay})</span></p><p><span class="fwBold price">${eventRemainCash}</span>원</p></div>
+													</c:if>
+													<c:if test="${prePaymentYn eq 'N'}">
+														<div class="event_term" style="display:block">후불제(매월 1일 자동충전)</div>
+													</c:if>
+												</div>
+											</div>
 										<fmt:formatNumber type="number" maxFractionDigits="3" value="${userMoney}" var="commaPrice" />
-			                        	<p>보유잔액<!-- <em>(캐시)</em> --> <span class="fwMd" id="hdUserMoney"><c:out value="${commaPrice}"/></span>원</p>
-			                        	<c:if test="${prePaymentYn eq 'N'}">
-				                        	<dl>
-								              <dd>후불제 고객의 보유잔액(캐시)은 당월 발송 가능<br>금액을 말하며 <span>매월 1일 자동으로 충전</span>됩니다.</dd>
-								            </dl>
-			                        	</c:if>
-			                        </div>
+										<span class="fwMd" id="hdUserMoney"><c:out value="${commaPrice}"/></span>원
+									</	>
+									</div>
 			                        <button type="button" class="btnType btnType3" onclick="location.href='/web/member/pay/PayView.do'">충전</button>
-			                        <div class="account_box">
-			                        	<button type="button" class="btnType btnType3" onclick="location.href='/web/member/pay/PayView.do?tabType=2'">전용계좌</button>
-			                        	<c:if test="${not empty myBankList}">
-				                        	<dl>
-				                        		<dt>전용계좌</dt>
-				                        		<dd><c:out value="${myBankList[0].codeNm}"/> <c:out value="${myBankList[0].acctNo}"/></dd>
-				                        	</dl>
-			                        	</c:if>
-			                        </div>
 			                    </div>
-			                    <div class="point">
-									<i></i>
-									<fmt:formatNumber type="number" maxFractionDigits="3" value="${userPoint}" var="commaPoint" />
-			                        <p><!-- <em>적립</em> -->포인트 <span class="fwMd"><c:out value="${commaPoint}"/></span>원</p>
-			                        <button type="button" data-tooltip="popup04" class="btnType btnType3">교환</button>
-			                    </div>
+		                    </div>
+		                    <div class="point">
+								<i></i>
+								<fmt:formatNumber type="number" maxFractionDigits="3" value="${userPoint}" var="commaPoint" />
+		                        <p><!-- <em>적립</em> -->포인트 <span class="fwMd"><c:out value="${commaPoint}"/></span>원</p>
+		                        <button type="button" data-tooltip="popup04" class="btnType btnType3">교환</button>
 		                    </div>
 		                  <!--   <div class="event">
 		                	    <span><i></i>이달의 이벤트</span>
src/main/webapp/WEB-INF/jsp/web/pay/PayView.jsp
--- src/main/webapp/WEB-INF/jsp/web/pay/PayView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayView.jsp
@@ -41,7 +41,7 @@
 	var nextPayMethod = "";
 	$.ajax({
 	    type: "POST",
-	    url: "/web/member/pay/selectNextPayMethodAjax.do",
+	    url: "/web/member/pay/selectLastPayMethodAjax.do",
 	    data: {},
 	    dataType:'json',
 	    async: false,
src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp
@@ -242,25 +242,17 @@
 		$("#receivemail").val("N");
 	}
 
-	if($("#emailId").val() == ""){
-		alert("이메일을 입력해주세요.");
+	if($("#emailId").val().trim() == "" || $("#emailAdd").val().trim() == ""){
+		alert("이메일은 필수 입력 항목입니다.")
 		return false;
-	}
-
-	if($("#emailId").val() != ""|| $("#emailAdd").val() != ""){
-		if($("#emailAdd").val() != ""){
-			var email = $("#emailId").val() + "@" + $("#emailAdd").val();
-			var taxExptext =  /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
-			if(taxExptext.test(email)==false){
-				alert("이메일주소 형식이 올바르지 않습니다.");
-				return false;
-			}
-
-			$("#mberEmailAdres").val(email);
-		}else{
-			alert("이메일 주소를 확인해 주세요");
+	}else {
+		var email = $("#emailId").val() + "@" + $("#emailAdd").val();
+		var taxExptext =  /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
+		if(taxExptext.test(email)==false){
+			alert("이메일주소 형식이 올바르지 않습니다.");
 			return false;
 		}
+		$("#mberEmailAdres").val(email);
 	}
 
 	if("${cmpPhoneChangeManageVO.hstSttus}" == '03'){
@@ -678,7 +670,7 @@
 								</c:if>
 								<div class="input_list_item emailWrap">
 									<div>
-										<div class="input_left"><span class="essential">*</span>이메일</div>
+										<div class="input_left">이메일</div>
 										<div class="input_right">
 											<div class="email">
 												<label for="" class="label">이메일 주소 앞자리</label>
src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp
@@ -149,21 +149,17 @@
 		$("#receivemail").val("N");
 	}
 	
-	
-	if($("#emailId").val() != ""|| $("#emailAdd").val() != ""){
-		if($("#emailAdd").val() != ""){
-			var email = $("#emailId").val() + "@" + $("#emailAdd").val();
-			var taxExptext =  /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
-			if(taxExptext.test(email)==false){
-				alert("이메일주소 형식이 올바르지 않습니다.");
-				return false;
-			}
-			
-			$("#mberEmailAdres").val(email);
-		}else{
-			alert("이메일 주소를 확인해 주세요");
+	if($("#emailId").val().trim() == "" || $("#emailAdd").val().trim() == ""){
+		alert("이메일은 필수 입력 항목입니다.")
+		return false;
+	}else {
+		var email = $("#emailId").val() + "@" + $("#emailAdd").val();
+		var taxExptext =  /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
+		if(taxExptext.test(email)==false){
+			alert("이메일주소 형식이 올바르지 않습니다.");
 			return false;
 		}
+		$("#mberEmailAdres").val(email);
 	}
 	
 	if("${userInfo.moblphonNo}" != $("#moblphonNo").val()){
src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mypageHeader.jsp
@@ -30,9 +30,6 @@
 	<li class="tab" id="sendNumberManage">
 		<button type="button" onclick="TabType5(this,'4'); location.href='/web/user/sendNumberManage.do'">발신번호 관리</button>
 	</li>
-	<li class="tab" id="notifyManage">
-		<button type="button" onclick="TabType5(this,'5'); location.href='/web/user/notifyManage.do'">알림설정</button>
-	</li>
 	<li class="tab" id="mberSecession">
 		<button type="button" onclick="TabType5(this,'6'); location.href='/web/user/mberSecession.do'">회원탈퇴</button>
 	</li>
Add a comment
List