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/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/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/web/MainController.java b/src/main/java/itn/web/MainController.java index aba9ff3b..359b8c28 100644 --- a/src/main/java/itn/web/MainController.java +++ b/src/main/java/itn/web/MainController.java @@ -1262,37 +1262,15 @@ public class MainController { } /* - * 회원별 정보(단가), 기본 단가, 남은 이벤트 기간 조회 + * 회원별 단가, 기본 단가, 이벤트 정보 조회 * 2025.07.25 이지우 추가 * */ - MberManageVO mberPriceVO = new MberManageVO(); - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - MjonEventVO mjonEventVO = new MjonEventVO(); + MberManageVO mberHeaderInfoVO = new MberManageVO(); if(loginVO != null) { - mberPriceVO = mberManageService.selectMber(loginVO.getId()); - if(!(mberPriceVO.getShortPrice() > 0)) mberPriceVO.setShortPrice(sysJoinSetVO.getShortPrice()); - if(!(mberPriceVO.getLongPrice() > 0)) mberPriceVO.setLongPrice(sysJoinSetVO.getLongPrice()); - if(!(mberPriceVO.getPicturePrice() > 0)) mberPriceVO.setPicturePrice(sysJoinSetVO.getPicturePrice()); - if(!(mberPriceVO.getPicture2Price() > 0)) mberPriceVO.setPicture2Price(sysJoinSetVO.getPicture2Price()); - if(!(mberPriceVO.getPicture3Price() > 0)) mberPriceVO.setPicture3Price(sysJoinSetVO.getPicture3Price()); - //카카오, 팩스는 기본단가 고정 - mberPriceVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice()); - mberPriceVO.setFaxPrice(sysJoinSetVO.getFaxPrice()); - - mjonEventVO.setMberId(loginVO.getId()); - mjonEventVO = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - String eventEndDateStr = ""; - if(StringUtil.isNotEmpty(mjonEventVO.getEventEndDate())) { - eventEndDateStr = mjonEventVO.getEventEndDate(); - LocalDate today = LocalDate.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate eventEndDate = LocalDate.parse(eventEndDateStr, formatter); - long eventLeftDay = ChronoUnit.DAYS.between(today, eventEndDate); - model.addAttribute("eventLeftDay", eventLeftDay); - } - + mberHeaderInfoVO = mberManageService.selectMberHeaderInfo(loginVO.getId()); } - model.addAttribute("mberPriceVO", mberPriceVO); + 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/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp index a1c73c4c..fe9447a7 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp @@ -1794,59 +1794,60 @@ function actionLogin_end(){
· 단문
-· 장문
-· 그림(1장)
-· 그림(2장)
-· 그림(3장)
-· 알림톡
-· 팩스
-이벤트 적용중 D-${eventLeftDay}
+이벤트(D-${mberHeaderInfoVO.eventLeftDay})
${eventRemainCash}원
후불제(매월 1일 자동충전)
+