diff --git a/.gitignore b/.gitignore index f1e66539..28a7b2d1 100644 --- a/.gitignore +++ b/.gitignore @@ -203,3 +203,6 @@ rebel.xml /mvnw.cmd /.gemini.zip /CLAUDE.md + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java b/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java index e6792d0c..fe8a32c2 100644 --- a/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java +++ b/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java @@ -3,6 +3,8 @@ package itn.let.mjo.mjocommon; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -16,10 +18,8 @@ import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; - -import com.mysql.jdbc.StringUtils; +import org.springframework.transaction.annotation.Transactional; import egovframework.com.idgen.CustomIdGnrService; import egovframework.rte.fdl.cmmn.exception.FdlException; @@ -33,11 +33,15 @@ import itn.let.mail.service.StatusResponse; import itn.let.mjo.event.service.MjonEventService; import itn.let.mjo.event.service.MjonEventVO; import itn.let.mjo.msg.service.MjonMsgVO; +import itn.let.mjo.msg.service.impl.MjonMsgDAO; +import itn.let.mjo.msgdata.service.MjonMsgDataService; +import itn.let.mjo.msgdata.service.MjonMsgReturnVO; import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; import itn.let.mjo.msgholiday.service.MsgHolidayService; import itn.let.mjo.msgholiday.service.MsgHolidayVO; import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.JoinSettingVO; +import itn.let.uat.uia.web.SendLogVO; import itn.let.uss.umt.service.EgovUserManageService; import itn.let.uss.umt.service.UserManageVO; import lombok.extern.slf4j.Slf4j; @@ -70,6 +74,12 @@ public class MjonCommon { @Resource(name = "egovMjonMsgIdCGnrService") private CustomIdGnrService idgenMsgCId; + + @Resource(name = "mjonMsgDAO") + private MjonMsgDAO mjonMsgDAO; + + @Resource(name = "MjonMsgDataService") + private MjonMsgDataService mjonMsgDataService; @@ -784,7 +794,114 @@ private int parseIntOrDefault(String value, int defaultValue) { return result; } + public void sendMessagesIfOverFifty(int cnt, String callTo) throws Exception { + //대량문자 발송 안내 = 01 + + //50건 이상일 경우만 발송 + if(cnt >= 50) { + // 금일 1회 이상 보낸 이력없을 경우만 발송 + if(!sysMsgTodaySendYn(callTo)) { + String sendMsgType = "01"; + String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String contents = "[인터넷 대량문자발송안내] 문자온에서 "+ callTo + " 번호로 " + today + "에 인터넷 대량 문자(50통 이상)가 발송되었습니다." + + "\n※ 번호도용이 의심되는 경우, 이용 중인 이동통신사의 휴대전화 번호도용 문자차단 부가서비스(무료)에 가입하여 피해를 예방할 수 있습니다."; + this.sendSysMsg( + "15518011" + , callTo + , contents + , sendMsgType + ); + } + } + } + /** + * Method Name : sendSysMsg + * Description : 관리자 안내 문자 공통 + * + * @param callFrom : 발신번호 + * @param callTo : 수신번호 + * @param contents : 내용 + * @param sendMsgType : 발신내용 타입 - 01: 대량문자발송안내 + * @return + * @throws Exception + * @return MjonMsgReturnVO 설명 + */ + @Transactional(rollbackFor = Exception.class) + public MjonMsgReturnVO sendSysMsg( + String callFrom + , String callTo + , String contents + , String sendMsgType + ) throws Exception { + + //결과 vo + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); + + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setSmsTxt(contents); + mjonMsgVO.setReserveYn("N"); + // 시스템 문자발송 번호 +// mjonMsgVO.setCallFrom("15518011"); + mjonMsgVO.setCallFrom(callFrom); + mjonMsgVO.setCallTo(callTo); + + mjonMsgVO.setUserId("system"); + + /* + * 본문길이에 따른 단문/장문 구분 + * 단문 4 + * 장문 6 + * 2000자 이상 invalid + */ + String msgType = MsgSendUtils.getMsgTypeWithByteValidation(new MjonMsgSendVO(), contents);// + mjonMsgVO.setMsgType(msgType); + + // MsgDiv - S: 단문, L: 장문, P: 그림 + if("4".equalsIgnoreCase(msgType)) { + mjonMsgVO.setMsgDiv("S"); + }else if("6".equalsIgnoreCase(msgType)) { + mjonMsgVO.setMsgDiv("L"); + } + else { // invalid + returnVO.setMsgGroupId(""); + returnVO.setSendMsgCnt("0"); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt("0"); // 수신차단 건수 저장 + return returnVO; + } + + // 문자타입별 대표전송사 정보 + MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); + mjonMsgVO2 = mjonMsgDAO.selectRepMsgAgetnInfo(mjonMsgVO); + // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 + mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 + // 전송금액 + mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 + mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 + + returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO); + + // 시스템 발송 로그 + SendLogVO sendLogVO = new SendLogVO(); + // SendType 1:문자로 발송 2:이메일로 발송 + sendLogVO.setSendId(returnVO.getMsgGroupId()); + sendLogVO.setSendType("1"); + sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom()); + sendLogVO.setReceive(mjonMsgVO.getCallTo()); + sendLogVO.setContents(contents); + sendLogVO.setSendMsgType(sendMsgType); + + mjonMsgDataService.insertSysMsgLog(sendLogVO); + + return returnVO; + } + + private Boolean sysMsgTodaySendYn(String callTo) throws Exception { + SendLogVO sendLogVO = new SendLogVO(); + sendLogVO.setReceive(callTo); + + return mjonMsgDataService.selectSysMsgTodaySendYn(sendLogVO); + } diff --git a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java index d5e4c1a5..8ef8d3ef 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java +++ b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java @@ -190,7 +190,7 @@ public interface MjonMsgDataService { public MjonMsgReturnVO sendSysMsgData(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception; - + public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception; } diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java index b28a2b52..a3100f2f 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java @@ -403,6 +403,10 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { return result; } + public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{ + return (Boolean) select("mjonMsgDataDAO.selectSysMsgTodaySendYn",sendLogVO); + } + /** * 다량 데이터를 Batch 처리로 MJ_MSG_DATA 테이블에 INSERT diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java index bde8f50c..95861b0d 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java @@ -4187,6 +4187,12 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M // 총 발송 건수 returnMap.put("resultSts", instTotalCnt); + try { + mjonCommon.sendMessagesIfOverFifty(instTotalCnt, mjonMsgVO.getCallFrom()); + } catch (Exception e) { + System.out.println("sendMessagesIfOverFifty method exception."); + } + // TEST발송 시 발송 후 캐시가 있어야함. returnMap.put("afterCash", priceAndPoint.getBefCash(userId)); // @@ -5148,4 +5154,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return returnVO; } + @Override + public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{ + return mjonMsgDataDAO.selectSysMsgTodaySendYn(sendLogVO); + } + } diff --git a/src/main/java/itn/let/uat/uia/web/SendLogVO.java b/src/main/java/itn/let/uat/uia/web/SendLogVO.java index a26fd6e2..43a77053 100644 --- a/src/main/java/itn/let/uat/uia/web/SendLogVO.java +++ b/src/main/java/itn/let/uat/uia/web/SendLogVO.java @@ -19,6 +19,8 @@ public class SendLogVO { /*내용*/ private String contents; + private String sendMsgType; + public String getSendId() { return sendId; @@ -62,5 +64,13 @@ public class SendLogVO { public void setContents(String contents) { this.contents = contents; } + public String getSendMsgType() { + return sendMsgType; + } + public void setSendMsgType(String sendMsgType) { + this.sendMsgType = sendMsgType; + } + + } diff --git a/src/main/resources/egovframework/spring/com/context-security.xml b/src/main/resources/egovframework/spring/com/context-security.xml index 069661d3..a255a542 100644 --- a/src/main/resources/egovframework/spring/com/context-security.xml +++ b/src/main/resources/egovframework/spring/com/context-security.xml @@ -4,7 +4,7 @@ xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd - http://www.egovframe.go.kr/schema/egov-security http://www.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd"> + http://www.egovframe.go.kr/schema/egov-security http://maven.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd"> diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index 08ef7a37..c50b6b93 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -3733,7 +3733,8 @@ RECEIVE, FRST_SEND_PNTTM, CHECK_NO, - CONTENTS + CONTENTS, + SEND_MSG_TYPE ) @@ -3746,7 +3747,8 @@ #receive#, now(), #checkNo#, - #contents# + #contents#, + #sendMsgType# ) @@ -8294,5 +8296,19 @@ + +