diff --git a/src/main/java/itn/let/mjo/event/service/MjonEventVO.java b/src/main/java/itn/let/mjo/event/service/MjonEventVO.java index 0a1d3ae5..6731d38b 100644 --- a/src/main/java/itn/let/mjo/event/service/MjonEventVO.java +++ b/src/main/java/itn/let/mjo/event/service/MjonEventVO.java @@ -38,5 +38,5 @@ public class MjonEventVO { private String point; //사용자 포인트 정보 private String userId; //사용자 아이디 private String frstRegisterId; //등록자 아이디 - + } diff --git a/src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java b/src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java index 7907a32d..7dfff842 100644 --- a/src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java +++ b/src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java @@ -278,6 +278,8 @@ public class MjonPayV2Controller { try { // 다음 결제시 결제수단 SELECT nextPayMethod = userManageService.selectNextPayMethod(userId); + // 실제 마지막 결제 방식 - + } catch(Exception e) { isSuccess = false; @@ -1640,6 +1642,45 @@ public class MjonPayV2Controller { 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(); diff --git a/src/main/java/itn/let/uat/uia/service/impl/EgovMberManageServiceImpl.java b/src/main/java/itn/let/uat/uia/service/impl/EgovMberManageServiceImpl.java index 52caee34..20f997f3 100644 --- a/src/main/java/itn/let/uat/uia/service/impl/EgovMberManageServiceImpl.java +++ b/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 org.springframework.web.context.request.ServletRequestAttributes; 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; @@ -82,6 +89,10 @@ public class EgovMberManageServiceImpl extends EgovAbstractServiceImpl implement @Resource(name = "hackIpService") private HackIpService hackIpService; + /* MjonMsgDataService */ + @Resource(name = "MjonMsgDataService") + private MjonMsgDataService mjonMsgDataService; + @Override public int insertMber(MberManageVO mberManageVO) throws Exception { @@ -621,4 +632,71 @@ public class EgovMberManageServiceImpl extends EgovAbstractServiceImpl implement 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 diff --git a/src/main/java/itn/let/uat/uia/service/impl/MberManageDAO.java b/src/main/java/itn/let/uat/uia/service/impl/MberManageDAO.java index 2418dce9..54338300 100644 --- a/src/main/java/itn/let/uat/uia/service/impl/MberManageDAO.java +++ b/src/main/java/itn/let/uat/uia/service/impl/MberManageDAO.java @@ -345,5 +345,8 @@ public class MberManageDAO extends EgovComAbstractDAO{ 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 diff --git a/src/main/java/itn/let/uss/umt/service/EgovMberManageService.java b/src/main/java/itn/let/uss/umt/service/EgovMberManageService.java index 1bc0877c..a9c224b7 100644 --- a/src/main/java/itn/let/uss/umt/service/EgovMberManageService.java +++ b/src/main/java/itn/let/uss/umt/service/EgovMberManageService.java @@ -251,4 +251,6 @@ public interface EgovMberManageService { public String findTopByregDateFromCertLog(AuthCertVO authCertVO); + //사용자 헤더 정보(단가, 이벤트 활성화 기간) + public MberManageVO selectMberHeaderInfo(String mberId) throws Exception; } \ No newline at end of file diff --git a/src/main/java/itn/let/uss/umt/service/EgovUserManageService.java b/src/main/java/itn/let/uss/umt/service/EgovUserManageService.java index 8cf39d58..41888bb0 100644 --- a/src/main/java/itn/let/uss/umt/service/EgovUserManageService.java +++ b/src/main/java/itn/let/uss/umt/service/EgovUserManageService.java @@ -220,4 +220,6 @@ public interface EgovUserManageService { public Map selectFaxSendList(FaxGroupDataVO faxGroupDataVO); + // 마지막 결제수단 조회 + public String selectLastPayMethod(String mberId) throws Exception; } \ No newline at end of file diff --git a/src/main/java/itn/let/uss/umt/service/MberManageVO.java b/src/main/java/itn/let/uss/umt/service/MberManageVO.java index 42194719..955fa1c3 100644 --- a/src/main/java/itn/let/uss/umt/service/MberManageVO.java +++ b/src/main/java/itn/let/uss/umt/service/MberManageVO.java @@ -512,6 +512,39 @@ public class MberManageVO extends UserDefaultVO{ */ 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 class MberManageVO extends UserDefaultVO{ 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 diff --git a/src/main/java/itn/let/uss/umt/service/impl/EgovUserManageServiceImpl.java b/src/main/java/itn/let/uss/umt/service/impl/EgovUserManageServiceImpl.java index aa136dad..94786594 100644 --- a/src/main/java/itn/let/uss/umt/service/impl/EgovUserManageServiceImpl.java +++ b/src/main/java/itn/let/uss/umt/service/impl/EgovUserManageServiceImpl.java @@ -882,5 +882,11 @@ public class EgovUserManageServiceImpl extends EgovAbstractServiceImpl implement return resultMap; } + + // 마지막 결제수단 SELECT + @Override + public String selectLastPayMethod(String mberId) throws Exception { + return userManageDAO.selectLastPayMethod(mberId); + } } \ No newline at end of file diff --git a/src/main/java/itn/let/uss/umt/service/impl/UserManageDAO.java b/src/main/java/itn/let/uss/umt/service/impl/UserManageDAO.java index 8e5285f0..4b836fe3 100644 --- a/src/main/java/itn/let/uss/umt/service/impl/UserManageDAO.java +++ b/src/main/java/itn/let/uss/umt/service/impl/UserManageDAO.java @@ -320,5 +320,9 @@ public class UserManageDAO extends EgovAbstractDAO{ 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 diff --git a/src/main/java/itn/web/MainController.java b/src/main/java/itn/web/MainController.java index cfaf8028..359b8c28 100644 --- a/src/main/java/itn/web/MainController.java +++ b/src/main/java/itn/web/MainController.java @@ -12,6 +12,9 @@ import java.security.PrivateKey; 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.lett.service.LetterVO; 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.mnu.mpm.service.MenuManageVO; 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 @@ public class MainController { 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"; } diff --git a/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml index aedf797a..11fd56b9 100644 --- a/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml @@ -2142,4 +2142,38 @@ + diff --git a/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml index eb97a567..75e0c297 100644 --- a/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml @@ -1458,5 +1458,15 @@ AND MONTH(REG_DATE) = MONTH(CURRENT_DATE) - + + + + diff --git a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp index c1f46fbf..9cf41d7a 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp @@ -1398,14 +1398,14 @@ function actionLogin_end(){
@@ -1627,7 +1627,9 @@ function actionLogin_end(){
  • -
    마이페이지
    + <%-- 250724 마이페이지 대시보드 삭제 --%> + <%--
    마이페이지
    --%> +
    마이페이지
    @@ -1744,8 +1746,9 @@ function actionLogin_end(){