From 4480ad4c27122fcf15ee5541739c0b645c44719a Mon Sep 17 00:00:00 2001
From: JIWOO
Date: Wed, 30 Jul 2025 09:52:28 +0900
Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20=EC=82=AC?=
=?UTF-8?q?=EC=9A=A9=EC=9E=90=20=ED=97=A4=EB=8D=94=20=EC=98=81=EC=97=AD?=
=?UTF-8?q?=EC=97=90=20=EB=8B=A8=EA=B0=80=20=EB=B0=8F=20=EB=B0=9C=EC=86=A1?=
=?UTF-8?q?=EA=B0=80=EB=8A=A5=20=EA=B1=B4=EC=88=98=20=EB=82=B4=EC=9A=A9=20?=
=?UTF-8?q?=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../let/mjo/event/service/MjonEventVO.java | 2 +-
.../impl/EgovMberManageServiceImpl.java | 80 +++++++-
.../uat/uia/service/impl/MberManageDAO.java | 5 +-
.../umt/service/EgovMberManageService.java | 2 +
.../itn/let/uss/umt/service/MberManageVO.java | 177 ++++++++++++++++++
src/main/java/itn/web/MainController.java | 32 +---
.../let/uss/umt/EgovMberManage_SQL_Mysql.xml | 34 ++++
.../WEB-INF/jsp/web/com/webCommonHeader.jsp | 41 ++--
8 files changed, 323 insertions(+), 50 deletions(-)
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일 자동충전)
+ 후불제(매월 1일 자동충전)