slack 개발 운영 분기

This commit is contained in:
hehihoho3@gmail.com 2024-12-04 15:07:15 +09:00
parent 9e50e999b2
commit 77c8a48ff2
11 changed files with 460 additions and 643 deletions

View File

@ -338,6 +338,19 @@ public final class MsgSendUtils {
setImagePathsForMsgSendVO(mjonMsgVO, sendVO);
// 지연 여부 처리
if ("Y".equalsIgnoreCase(mjonMsgVO.getDelayYn())) {
calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸
}
// 예약 여부 확인
if ("Y".equalsIgnoreCase(mjonMsgVO.getReserveYn())) {
// 분할 발송일 경우
@ -356,6 +369,20 @@ public final class MsgSendUtils {
}
// 전송사 코드 셋팅
String agentCode = "00".equals(mjonMsgVO.getAgentCode())
? MsgSendUtils.assignAgentBasedOnCount(agentSendCounts, sendRateList)
@ -367,10 +394,13 @@ public final class MsgSendUtils {
}
// Group TB에 넣어줄 제목
// 치환안된 sms 데이터로 넣어야함
mjonMsgVO.setMmsSubject(getMmsgSubject(smsTxtTemp, msgKind));
log.info(" mjonMsgSendListVO size :: [{}]", mjonMsgSendListVO.size());
if (LONG_MSG_TYPE.equals(mjonMsgSendListVO.get(0).getMsgType())){
mjonMsgVO.setMmsSubject(getMmsgSubject(smsTxtTemp, msgKind));
}
return true;
}
/**
@ -402,17 +432,29 @@ public final class MsgSendUtils {
private static void checkSpamAndSetStatus(MjonMsgVO mjonMsgVO, String personalizedSmsTxt, List<String> resultSpamTxt) throws Exception {
String resultParser = ComGetSpamStringParser.getSpamTextParse(personalizedSmsTxt).trim();
int spmCnt = 0;
String spmFilterTxt = "";
for (String spmTxt : resultSpamTxt) {
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
if (resultParser.contains(parserStr)) {
spmCnt++;
spmFilterTxt += spmTxt + ",";
}
}
if (spmCnt > 0) { // 스팸 문자가 포함된 경우
System.out.println("++++++++++++++ spam smsTxt ::: " + resultParser);
if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
// 처음부터 idx 만큼 잘라낸 나머지 글자
spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1);
}
log.info(" + spmFilterTxt :: [{}]", spmFilterTxt);
log.info(" + resultParser :: [{}]", resultParser);
// mjonMsgVO.setSpamKeyword(spmFilterTxt);
mjonMsgVO.setSpamStatus("Y");
mjonMsgVO.setDelayYn("Y");
}else {mjonMsgVO.setSpamStatus("N");}
}
@ -487,7 +529,7 @@ public final class MsgSendUtils {
private static void statusResponseSet (StatusResponse statusResponse, HttpStatus httpStatus, String msg ) {
public static void statusResponseSet (StatusResponse statusResponse, HttpStatus httpStatus, String msg ) {
statusResponse.setStatus(httpStatus);
statusResponse.setMessage(msg);

View File

@ -2,24 +2,112 @@ package itn.let.mjo.mjocommon;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.httpclient.HttpClient;
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.Service;
import com.mysql.jdbc.StringUtils;
import itn.com.cmm.MjonMsgSendVO;
import itn.com.cmm.OptimalMsgResultDTO;
import itn.com.cmm.util.MsgSendUtils;
import itn.let.kakao.kakaoComm.KakaoVO;
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.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.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.UserManageVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service("MjonCommon")
public class MjonCommon {
//Slack Web Hook URL
private String url = "https://hooks.slack.com/services/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";
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
/** 사이트 설정 */
@Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService;
@Resource(name = "MjonEventService")
private MjonEventService mjonEventService;
@Resource(name = "MsgHolidayService")
private MsgHolidayService msgHolidayService;
@Value("#{globalSettings['Globals.slack.hooks.url']}")
private String SLACK_URL;
/** xpedite 솔루션 ID*/
@Value("#{globalSettings['Globals.slack.channel.name']}")
private String SLACK_CHANNEL;
/**
* @methodName : getAdminSandSlack
* @author : 이호영
* @date : 2024.12.04
* @description : 기존 메소드 리펙토링
* @param mjonMsgVO
*/
public void getAdminSandSlack(MjonMsgVO mjonMsgVO) {
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(SLACK_URL);
try {
// 메시지 내용 설정
String smsTxt = formatSmsText(mjonMsgVO);
String sandName = formatSandName(mjonMsgVO);
// Slack 메시지 생성
JSONObject json = new JSONObject();
json.put("channel", SLACK_CHANNEL);
json.put("text", smsTxt);
json.put("username", sandName);
// Slack 요청
post.addParameter("payload", json.toString());
post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
// Slack 응답 처리
int responseCode = client.executeMethod(post);
if (responseCode != HttpStatus.SC_OK) {
log.warn("Slack 메시지 전송 실패. Response: {}", post.getResponseBodyAsString());
}
} catch (IllegalArgumentException e) {
log.error("Slack 메시지 전송 중 IllegalArgumentException 발생", e);
} catch (IOException e) {
log.error("Slack 메시지 전송 중 IOException 발생", e);
} catch (Exception e) {
log.error("Slack 메시지 전송 중 Exception 발생", e);
} finally {
post.releaseConnection();
}
}
/**
* @throws Exception
@ -28,8 +116,7 @@ public class MjonCommon {
* @작성자 : WYH
* @Method 설명 : slack 메시지 전송
*/
@SuppressWarnings("unchecked")
public void getAdminSandSlack(MjonMsgVO mjonMsgVO) {
/*public void getAdminSandSlack(MjonMsgVO mjonMsgVO) {
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);
@ -43,6 +130,7 @@ public class MjonCommon {
String reservSmsTxt = "";
String smisingSmsTxt = "";
//예약문자를 발송하는 경우 문자 내용 앞에 "[예약]" 표시되도록 처리
if(reserveYn.equals("Y")) {
if(smishingYn.equals("Y") || delayYn.equals("Y")) {
@ -52,6 +140,8 @@ public class MjonCommon {
}
smsTxt = reservSmsTxt;
System.out.println("smishingYn : "+ smishingYn);
System.out.println("delayYn : "+ delayYn);
}else if(smishingYn.equals("Y") || delayYn.equals("Y")) {
smisingSmsTxt = "[스미싱의심]" + smsTxt;
@ -75,7 +165,8 @@ public class MjonCommon {
}
}
}
sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType;
// sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType;
sandName = "[개발테스트]"+"[" + userId + "]" + "[" + sandName + "]" + msgType;
json.put("channel", "mjon메시지");
json.put("text", smsTxt);
@ -92,15 +183,18 @@ public class MjonCommon {
}
} catch (IllegalArgumentException e) {
System.out.println("IllegalArgumentException posting to Slack " + e);
} catch (IOException e) {
}
catch (IOException e) {
System.out.println("IOException posting to Slack " + e);
} catch (Exception e) {
}
catch (Exception e) {
System.out.println("Exception posting to Slack " + e);
e.printStackTrace();
} finally {
post.releaseConnection();
}
}
}*/
/**
@ -113,11 +207,11 @@ public class MjonCommon {
public void sendSimpleSlackMsg(String msg) {
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);
PostMethod post = new PostMethod(SLACK_URL);
JSONObject json = new JSONObject();
try {
json.put("channel", "mjon메시지");
json.put("channel", SLACK_CHANNEL);
//json.put("channel", "C04DNV4FYP6"); //개발 서버용
json.put("text", msg);
@ -254,7 +348,7 @@ public class MjonCommon {
public void getAdminKakaoAtSandSlack(KakaoVO kakaoVO) {
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);
PostMethod post = new PostMethod(SLACK_URL);
JSONObject json = new JSONObject();
try {
@ -289,7 +383,7 @@ public class MjonCommon {
}
sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType;
json.put("channel", "mjon메시지");
json.put("channel", SLACK_CHANNEL);
json.put("text", smsTxt);
json.put("username", sandName);
@ -347,5 +441,179 @@ public class MjonCommon {
return returnId;
}
private String formatSmsText(MjonMsgVO mjonMsgVO) {
String smsTxt = mjonMsgVO.getSmsTxt();
String reserveYn = safeGetString(mjonMsgVO.getReserveYn());
String delayYn = safeGetString(mjonMsgVO.getDelayYn());
String smishingYn = safeGetString(mjonMsgVO.getSmishingYn());
// 예약 문자와 스미싱 의심 처리
if ("Y".equals(reserveYn)) {
smsTxt = ("Y".equals(smishingYn) || "Y".equals(delayYn)) ? "[스미싱의심][예약]" + smsTxt : "[예약]" + smsTxt;
} else if ("Y".equals(smishingYn) || "Y".equals(delayYn)) {
smsTxt = "[스미싱의심]" + smsTxt;
}
// 그림 문자 처리
int fileCount = parseIntOrDefault(mjonMsgVO.getFileCnt(), 0);
if ("6".equals(mjonMsgVO.getMsgType()) && fileCount > 0 && StringUtils.isNullOrEmpty(smsTxt)) {
smsTxt = "그림문자 " + smsTxt;
}
return smsTxt;
}
private String formatSandName(MjonMsgVO mjonMsgVO) {
String userId = mjonMsgVO.getUserId();
String callFrom = mjonMsgVO.getCallFrom();
String msgType = getMessageTypeLabel(mjonMsgVO);
return String.format("[%s][%s]%s", userId, callFrom, msgType);
}
private String getMessageTypeLabel(MjonMsgVO mjonMsgVO) {
String msgType = mjonMsgVO.getMsgType();
int fileCount = parseIntOrDefault(mjonMsgVO.getFileCnt(), 0);
switch (msgType) {
case "4":
return "[단문]";
case "6":
return fileCount == 0 ? "[장문]" : "[그림]";
default:
return "";
}
}
private int parseIntOrDefault(String value, int defaultValue) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
return defaultValue;
}
}
// 전체 로직 처리 ( 번에 모든 필요한 정보 반환)
public boolean processUserAndCheckSms(MjonMsgVO mjonMsgVO, String userId) throws Exception {
UserManageVO userManageVO = getUserManageInfo(userId);
// 기본값 처리된 사용자 정보와 문자 상태
String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn();
String smishingYn = userManageVO.getSmishingYn();
String spamStatus = safeGetString(mjonMsgVO.getSpamStatus());
// 조건 체크
if ("Y".equals(adminSmsNoticeYn) || "Y".equals(spamStatus) || "Y".equals(smishingYn)) {
mjonMsgVO.setSmishingYn(smishingYn); // MjonMsgVO에 스미싱 정보 설정
// 스미싱 알림 처리
return handleSmishingAlert(mjonMsgVO); // 알림 처리 결과 반환
}
return false; // 알림 처리되지 않음
}
// 사용자 정보 조회 기본값 처리
private UserManageVO getUserManageInfo(String userId) throws Exception {
// UserManageVO userManageVO = new UserManageVO();
// userManageVO.setAdminSmsNoticeYn("Y"); // 기본값
// userManageVO.setSmishingYn("N"); // 기본값
//
return userManageService.selectAdminSmsNoticeYn(new UserManageVO(userId));
}
// 스미싱 알림 처리
private boolean handleSmishingAlert(MjonMsgVO mjonMsgVO) throws Exception {
JoinSettingVO joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
if (joinSettingVO == null || !"Y".equals(joinSettingVO.getHoliSmishingNoti()) ||
!"Y".equals(joinSettingVO.getSlackNoti())) {
return false; // 알림 조건 미충족
}
// 알림 조건 충족 추가 작업
List<MsgAlarmSetVO> alarmList = getAlarmSettings();
List<MsgHolidayVO> holidayList = getHolidayList();
boolean isNotificationAllowed = new MjonHolidayApi().getHolidaySmishingPassStatus(alarmList, holidayList);
// 알림 발송
if (!isNotificationAllowed) {
getAdminSandSlack(mjonMsgVO);
return true; // 알림 발송 성공
}
return false; // 알림 발송 조건 미충족
}
// 안전하게 문자열 가져오기
private String safeGetString(String value) {
return value == null ? "" : value;
}
// 알림 설정 조회
private List<MsgAlarmSetVO> getAlarmSettings() throws Exception {
MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO();
msgAlarmSetVO.setUseYn("Y");
msgAlarmSetVO.setFirstIndex(0);
return msgHolidayService.selectAlarmSettingList(msgAlarmSetVO);
}
// 공휴일 정보 조회
private List<MsgHolidayVO> getHolidayList() throws Exception {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
MsgHolidayVO msgHolidayVO = new MsgHolidayVO();
msgHolidayVO.setFirstIndex(0);
msgHolidayVO.setRecordCountPerPage(100);
msgHolidayVO.setSearchHoliYear(Integer.toString(year));
return msgHolidayService.selectMsgHolidayList(msgHolidayVO);
}
// 이벤트 메시지 처리
public StatusResponse processEventMessages(String userId, MjonMsgVO mjonMsgVO,
List<MjonMsgSendVO> mjonMsgSendVOList) throws Exception {
StatusResponse statusResponse = new StatusResponse();
try {
// 이벤트 정보 가져오기
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo_advc(userId);
if (eventMberInfo == null || "E".equals(eventMberInfo.getEventStatus())) {
return statusResponse; // 이벤트 상태가 종료인 경우 처리하지 않음
}
// 최적화된 메시지 리스트 이벤트 정보 가져오기
OptimalMsgResultDTO result = MsgSendUtils.getOptimalMsgList(eventMberInfo, mjonMsgSendVOList);
List<MjonMsgSendVO> optimalMsgList = result.getOptimalMsgList();
MjonEventVO returnEventMberInfo = result.getEventInfo();
// 이벤트 발송 내역이 있으면
if (CollectionUtils.isNotEmpty(optimalMsgList)) {
mjonMsgVO.setEventYn("Y"); // 그룹에 이벤트 발송 여부 설정
mjonMsgSendVOList.addAll(optimalMsgList); // 기존 리스트와 병합
}
// 이벤트 상태 종료 업데이트
if (returnEventMberInfo != null && "E".equals(returnEventMberInfo.getEventStatus())) {
returnEventMberInfo.setMberId(userId);
mjonEventService.updateEventEndStatus(returnEventMberInfo);
}
} catch (IllegalArgumentException e) {
// 메시지 타입 에러 처리
MsgSendUtils.statusResponseSet(statusResponse, org.springframework.http.HttpStatus.BAD_REQUEST, "이벤트 데이터 처리 중 오류가 발생하였습니다.\n관리자에게 문의해 주세요.");
}
return statusResponse;
}
}

View File

@ -145,7 +145,7 @@ public class MjonMsgVO extends ComDefaultVO{
private String spamKeyword; //스팸 키워드
private String spamMsgGroupId; //스팸문자 문자전송 아이디
private String spamStatus; //스팸문자 유무 (Y/N)
private String spamStatus="N"; //스팸문자 유무 (Y/N)
private String vipYn; //VIP 유무 (Y/N)
private String approvalPnttm; // 승인일자
private String atchFiles; // 그림문자 파일정보

View File

@ -53,6 +53,7 @@ import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgdata.service.MjonMsgDataVO;
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.mjo.msgholiday.service.impl.MsgHolidayDAO;
import itn.let.mjo.pay.service.MjonPayService;
@ -60,11 +61,13 @@ import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.pay.service.impl.MjonPayDAO;
import itn.let.mjo.spammsg.service.MjonSpamMsgService;
import itn.let.module.base.PriceAndPoint;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.sym.site.service.impl.SiteManagerDAO;
import itn.let.uat.uia.web.SendLogVO;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@ -130,9 +133,20 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
@Resource(name = "mjonSpamMsgService")
private MjonSpamMsgService mjonSpamMsgService;
/** 사이트 설정 */
@Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService;
@Resource(name = "MsgHolidayService")
private MsgHolidayService msgHolidayService;
@Autowired
private PriceAndPoint priceAndPoint;
@Autowired
private MjonCommon mjonCommon;
public List<MjonMsgDataVO> selectCcmCmmCodeList() throws Exception {
@ -3988,6 +4002,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
@Override
public StatusResponse sendMsgData_advc(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception {
log.info("mjonMsgVO [{}]" , mjonMsgVO.getMjonMsgSendVOList().get(0).getPhone());
log.info(" :: sendMsgData_advc :: ");
Map<String, Object> returnMap = new HashMap<>();
@ -4004,7 +4019,6 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
//발신번호가 등록된 유효한 번호인지 확인
int sendCallFromCnt = mjonMsgDAO.selectCallFromNumberChk(mjonMsgVO);
System.out.println("sendCallFromCnt : "+ sendCallFromCnt);
if(sendCallFromCnt < 1) {
return new StatusResponse(HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다.");
}
@ -4056,6 +4070,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
// 수신거부 목록
returnMap.put("resultBlockSts", deletedCount);
if(mjonMsgSendVOList.size() < 1) {
return new StatusResponse(HttpStatus.BAD_REQUEST, "수신거부와 매칭되는 번호 제거 후 \n발송 가능한 수신목록이 존재하지 않습니다.");
}
@ -4087,7 +4105,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
mjonMsgVO.setAgentCode(hotlineAgentCode);
// smstxt 치환 스팸체크 mjonMsgSendVOList add()
// 스팸관련 키워드 select
List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList();
// msgGroupId 생성
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
@ -4141,38 +4159,12 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
* => optimalMsgList로 데이터 이동
* 이동하면서 이벤트 금액으로 설정
*/
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo_advc(userId);
OptimalMsgResultDTO result = null;
List<MjonMsgSendVO> optimalMsgList = new ArrayList<>();
if (eventMberInfo != null && !"E".equals(eventMberInfo.getEventStatus())) {
try {
result = MsgSendUtils.getOptimalMsgList(eventMberInfo, mjonMsgSendVOList);
optimalMsgList = result.getOptimalMsgList();
MjonEventVO returnEventMberInfo = result.getEventInfo();
// mjonCommon 호출
statusResponse = mjonCommon.processEventMessages(userId, mjonMsgVO, mjonMsgSendVOList);
// 이벤트 list에 내역에 있으면
if(CollectionUtils.isNotEmpty(optimalMsgList))
{
// group tb에 이벤트 발송인지 Y 입력해야함
mjonMsgVO.setEventYn("Y");
// 기존 리스트로 병합
// 따로 분기 병합 하는 이유는 유지보수 기능 분리르 위함
mjonMsgSendVOList.addAll(optimalMsgList);
}
// 이벤트 금액이 끝났거나 종료상태로 전환되면 update해야함
if (returnEventMberInfo != null && "E".equals(returnEventMberInfo.getEventStatus())) {
returnEventMberInfo.setMberId(userId);
mjonEventService.updateEventEndStatus(returnEventMberInfo);
}
} catch (IllegalArgumentException e) {
// 메시지 타입 에러에 대한 응답 처리
statusResponse.setStatus(HttpStatus.BAD_REQUEST);
statusResponse.setMessage("이벤트 데이터 처리 중 오류가 발생하였습니다.\n관리자에게 문의해 주세요.");
return statusResponse;
}
if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) {
log.error("이벤트 처리 중 오류 발생: {}", statusResponse.getMessage());
return statusResponse;
}
@ -4192,6 +4184,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
// Batch 시작 시간 측정
long insetStartTime = System.currentTimeMillis();
// 발송 건수 = DB insert
// int instCnt = 0;
int instCnt = this.insertMsgData_advc(mjonMsgSendVOList);
// Batch 종료 시간 측정 실행 시간 계산
@ -4217,12 +4210,25 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
, "SMS 문자 총 " + mjonMsgVO.getMjonMsgSendVOList().size() + "건 중 " + instCnt + "건 발송"
, mjonMsgVO.getMsgGroupId()
);
// 스팸 데이터가 있으면 MJ_SPAM_MSG_GROUP_DATA 테이블에 insert
handleSpamMsg_advc(mjonMsgVO, mjonMsgSendVOList.get(0));
}
//TODO : group tb insert 처리
// handleSpamMsg_advc(mjonMsgVO, mjonMsgSendVOList.get(0));
// 호출
boolean isNotified = mjonCommon.processUserAndCheckSms(mjonMsgVO, userId);
if (isNotified) {
System.out.println("스미싱 알림이 처리되었습니다.");
} else {
System.out.println("알림 조건을 충족하지 않았습니다.");
}
@ -4551,28 +4557,21 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
}
}
private void handleSpamMsg_advc(MjonMsgVO mjonMsgVO, MjonMsgSendVO mjonMsgSendVO) {
try {
private void handleSpamMsg_advc(MjonMsgVO mjonMsgVO, MjonMsgSendVO mjonMsgSendVO) throws Exception{
if ("Y".equals(mjonMsgVO.getSpamStatus()))
{
MjonMsgVO mjonSpamMsgVO = mjonMsgVO;
mjonSpamMsgVO.setCallFrom(mjonMsgSendVO.getCallFrom());
mjonSpamMsgVO.setMsgGroupCnt(mjonMsgSendVO.getMsgGroupId());
mjonSpamMsgVO.setSubject(null);
mjonSpamMsgVO.setReqDate(null);
mjonSpamMsgVO.setMsgType(null);
mjonSpamMsgVO.setMsgType(null);
mjonSpamMsgVO.setEachPrice(null);
mjonSpamMsgVO.setSubject(mjonSpamMsgVO.getMmsSubject());
mjonSpamMsgVO.setEachPrice(mjonMsgSendVO.getEachPrice());
mjonSpamMsgVO.setFilePath1(mjonMsgSendVO.getFilePath1());
mjonSpamMsgVO.setFilePath2(mjonMsgSendVO.getFilePath2());
mjonSpamMsgVO.setFilePath3(mjonMsgSendVO.getFilePath3());
int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO);
System.out.println("스팸 문구 발송 내용 등록: " + resultCnt);
}
} catch (Exception e) {
System.err.println("스팸 문구 처리 중 오류 발생: " + e.getMessage());
}
}
// 예약 문자인 경우 처리하는 메서드

View File

@ -1,5 +1,10 @@
package itn.let.uss.umt.service;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* 업무사용자VO클래스로서 업무사용자관리 비지니스로직 처리용 항목을 구성한다.
* @author 공통서비스 개발팀 조재영
@ -17,6 +22,10 @@ package itn.let.uss.umt.service;
*
* </pre>
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class UserManageVO extends UserDefaultVO{
/**
@ -209,538 +218,14 @@ public class UserManageVO extends UserDefaultVO{
private String nextPayMethod;
private float paymentCash; //이전달에 실제 사용한 캐시 정보
public String getNextPayMethod() {
return nextPayMethod;
}
public void setNextPayMethod(String nextPayMethod) {
this.nextPayMethod = nextPayMethod;
}
public String getSpamYn() {
return spamYn;
}
public void setSpamYn(String spamYn) {
this.spamYn = spamYn;
}
public String getAtSmishingYn() {
return atSmishingYn;
}
public void setAtSmishingYn(String atSmishingYn) {
this.atSmishingYn = atSmishingYn;
}
public String getBlineCode() {
return blineCode;
}
public void setBlineCode(String blineCode) {
this.blineCode = blineCode;
}
public String getRecommendId() {
return recommendId;
}
public void setRecommendId(String recommendId) {
this.recommendId = recommendId;
}
public float getCash() {
return cash;
}
public void setCash(float cash) {
this.cash = cash;
}
public String getMberNm() {
return mberNm;
}
public void setMberNm(String mberNm) {
this.mberNm = mberNm;
}
public String getSmishingYn() {
return smishingYn;
}
public void setSmishingYn(String smishingYn) {
this.smishingYn = smishingYn;
}
public float getNowChargeCash() {
return nowChargeCash;
}
public void setNowChargeCash(float nowChargeCash) {
this.nowChargeCash = nowChargeCash;
}
public String getPrePaymentYn() {
return prePaymentYn;
}
public void setPrePaymentYn(String prePaymentYn) {
this.prePaymentYn = prePaymentYn;
}
public int getAutoCash() {
return autoCash;
}
public void setAutoCash(int autoCash) {
this.autoCash = autoCash;
}
public String getMberId() {
return mberId;
}
public void setMberId(String mberId) {
this.mberId = mberId;
}
public String getAdminSmsNoticeYn() {
return adminSmsNoticeYn;
}
public void setAdminSmsNoticeYn(String adminSmsNoticeYn) {
this.adminSmsNoticeYn = adminSmsNoticeYn;
}
public String getMobilePwsaveYn() {
return mobilePwsaveYn;
}
public void setMobilePwsaveYn(String mobilePwsaveYn) {
this.mobilePwsaveYn = mobilePwsaveYn;
}
public String getOldPassword() {
return oldPassword;
}
public void setOldPassword(String oldPassword) {
this.oldPassword = oldPassword;
}
public String getSbscrbDe() {
return sbscrbDe;
}
public void setSbscrbDe(String sbscrbDe) {
this.sbscrbDe = sbscrbDe;
}
public String getUniqId() {
return uniqId;
}
public void setUniqId(String uniqId) {
this.uniqId = uniqId;
}
public String getUserTy() {
return userTy;
}
public void setUserTy(String userTy) {
this.userTy = userTy;
}
public String getAreaNo() {
return areaNo;
}
public void setAreaNo(String areaNo) {
this.areaNo = areaNo;
}
public String getBrth() {
return brth;
}
public void setBrth(String brth) {
this.brth = brth;
}
public String getDetailAdres() {
return detailAdres;
}
public void setDetailAdres(String detailAdres) {
this.detailAdres = detailAdres;
}
public String getEmailAdres() {
return emailAdres;
}
public void setEmailAdres(String emailAdres) {
this.emailAdres = emailAdres;
}
public String getEmplNo() {
return emplNo;
}
public void setEmplNo(String emplNo) {
this.emplNo = emplNo;
}
public String getEmplyrId() {
return emplyrId;
}
public void setEmplyrId(String emplyrId) {
this.emplyrId = emplyrId;
}
public String getEmplyrIdDec() {
return emplyrIdDec;
}
public void setEmplyrIdDec(String emplyrIdDec) {
this.emplyrIdDec = emplyrIdDec;
}
public String getEmplyrNm() {
return emplyrNm;
}
public void setEmplyrNm(String emplyrNm) {
this.emplyrNm = emplyrNm;
}
public String getEmplyrSttusCode() {
return emplyrSttusCode;
}
public void setEmplyrSttusCode(String emplyrSttusCode) {
this.emplyrSttusCode = emplyrSttusCode;
}
public String getEmplyrSttusCodeTxt() {
return emplyrSttusCodeTxt;
}
public void setEmplyrSttusCodeTxt(String emplyrSttusCodeTxt) {
this.emplyrSttusCodeTxt = emplyrSttusCodeTxt;
}
public String getFxnum() {
return fxnum;
}
public void setFxnum(String fxnum) {
this.fxnum = fxnum;
}
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getHomeadres() {
return homeadres;
}
public void setHomeadres(String homeadres) {
this.homeadres = homeadres;
}
public String getHomeendTelno() {
return homeendTelno;
}
public void setHomeendTelno(String homeendTelno) {
this.homeendTelno = homeendTelno;
}
public String getHomemiddleTelno() {
return homemiddleTelno;
}
public void setHomemiddleTelno(String homemiddleTelno) {
this.homemiddleTelno = homemiddleTelno;
}
public String getIhidnum() {
return ihidnum;
}
public void setIhidnum(String ihidnum) {
this.ihidnum = ihidnum;
}
public String getInsttCode() {
return insttCode;
}
public void setInsttCode(String insttCode) {
this.insttCode = insttCode;
}
public String getMberTy() {
return mberTy;
}
public void setMberTy(String mberTy) {
this.mberTy = mberTy;
}
public String getMoblphonNo() {
return moblphonNo;
}
public void setMoblphonNo(String moblphonNo) {
this.moblphonNo = moblphonNo;
}
public String getOfcpsNm() {
return ofcpsNm;
}
public void setOfcpsNm(String ofcpsNm) {
this.ofcpsNm = ofcpsNm;
}
public String getOffmTelno() {
return offmTelno;
}
public void setOffmTelno(String offmTelno) {
this.offmTelno = offmTelno;
}
public String getOrgnztId() {
return orgnztId;
}
public void setOrgnztId(String orgnztId) {
this.orgnztId = orgnztId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPasswordCnsr() {
return passwordCnsr;
}
public void setPasswordCnsr(String passwordCnsr) {
this.passwordCnsr = passwordCnsr;
}
public String getPasswordHint() {
return passwordHint;
}
public void setPasswordHint(String passwordHint) {
this.passwordHint = passwordHint;
}
public String getSbscrbDeBegin() {
return sbscrbDeBegin;
}
public void setSbscrbDeBegin(String sbscrbDeBegin) {
this.sbscrbDeBegin = sbscrbDeBegin;
}
public String getSbscrbDeEnd() {
return sbscrbDeEnd;
}
public void setSbscrbDeEnd(String sbscrbDeEnd) {
this.sbscrbDeEnd = sbscrbDeEnd;
}
public String getSexdstnCode() {
return sexdstnCode;
}
public void setSexdstnCode(String sexdstnCode) {
this.sexdstnCode = sexdstnCode;
}
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
public String getSubDn() {
return subDn;
}
public void setSubDn(String subDn) {
this.subDn = subDn;
}
public String getPartIdx() {
return partIdx;
}
public void setPartIdx(String partIdx) {
this.partIdx = partIdx;
}
public String getPartIdxTxt() {
return partIdxTxt;
}
public void setPartIdxTxt(String partIdxTxt) {
this.partIdxTxt = partIdxTxt;
}
public String getAuthorCode() {
return authorCode;
}
public void setAuthorCode(String authorCode) {
this.authorCode = authorCode;
}
public String getAuthorNm() {
return authorNm;
}
public void setAuthorNm(String authorNm) {
this.authorNm = authorNm;
}
public String getRsaPasswd() {
return rsaPasswd;
}
public void setRsaPasswd(String rsaPasswd) {
this.rsaPasswd = rsaPasswd;
}
public String getEsntlId() {
return esntlId;
}
public void setEsntlId(String esntlId) {
this.esntlId = esntlId;
}
public String getSearchWord() {
return searchWord;
}
public void setSearchWord(String searchWord) {
this.searchWord = searchWord;
}
public String getUserNm() {
return userNm;
}
public void setUserNm(String userNm) {
this.userNm = userNm;
}
public String getUserWork() {
return userWork;
}
public void setUserWork(String userWork) {
this.userWork = userWork;
}
public String getLocInfoId() {
return locInfoId;
}
public void setLocInfoId(String locInfoId) {
this.locInfoId = locInfoId;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getCheckNo() {
return checkNo;
}
public void setCheckNo(String checkNo) {
this.checkNo = checkNo;
}
public String getFindType() {
return findType;
}
public void setFindType(String findType) {
this.findType = findType;
}
public String getEmailSendYN() {
return emailSendYN;
}
public void setEmailSendYN(String emailSendYN) {
this.emailSendYN = emailSendYN;
}
public String getMbtlSendYN() {
return mbtlSendYN;
}
public void setMbtlSendYN(String mbtlSendYN) {
this.mbtlSendYN = mbtlSendYN;
}
public String getPasswordOverlapCheck() {
return passwordOverlapCheck;
}
public void setPasswordOverlapCheck(String passwordOverlapCheck) {
this.passwordOverlapCheck = passwordOverlapCheck;
}
public String getUserSe() {
return userSe;
}
public void setUserSe(String userSe) {
this.userSe = userSe;
}
public String getCrtfcDnValue() {
return crtfcDnValue;
}
public void setCrtfcDnValue(String crtfcDnValue) {
this.crtfcDnValue = crtfcDnValue;
}
public String getOuterCertYn() {
return outerCertYn;
}
public void setOuterCertYn(String outerCertYn) {
this.outerCertYn = outerCertYn;
}
public String getVipYn() {
return vipYn;
}
public void setVipYn(String vipYn) {
this.vipYn = vipYn;
}
public float getPaymentCash() {
return paymentCash;
}
public void setPaymentCash(float paymentCash) {
this.paymentCash = paymentCash;
public UserManageVO(String userId) {
this.mberId = userId;
// TODO Auto-generated constructor stub
}
}

View File

@ -115,3 +115,7 @@ Globals.pay.kgm.bank.payMode=00
#MOBILE
Globals.pay.kgm.mobile.mcSvcid=170622040674
Globals.pay.kgm.mobile.payMode=00
#Slack
Globals.slack.hooks.url=https://hooks.slack.com/services/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
Globals.slack.channel.name=\ud14c\uc2a4\ud2b8_mjon\uba54\uc2dc\uc9c0

View File

@ -116,3 +116,12 @@ Globals.pay.kgm.bank.payMode=00
#MOBILE
Globals.pay.kgm.mobile.mcSvcid=170622040674
Globals.pay.kgm.mobile.payMode=00
#Slack
Globals.slack.hooks.url=https://hooks.slack.com/services/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
Globals.slack.channel.name=\ud14c\uc2a4\ud2b8_mjon\uba54\uc2dc\uc9c0

View File

@ -102,4 +102,8 @@ Globals.pay.kgm.bank.raSvcid=230510133362
Globals.pay.kgm.bank.payMode=10
#MOBILE
Globals.pay.kgm.mobile.mcSvcid=220613125202
Globals.pay.kgm.mobile.payMode=10
Globals.pay.kgm.mobile.payMode=10
#Slack
Globals.slack.hooks.url=https://hooks.slack.com/services/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
Globals.slack.channel.name=mjon\uba54\uc2dc\uc9c0

View File

@ -1016,7 +1016,7 @@ $(document).ready(function (){
const numbers = textarea.val().split('\n')
.map(num => num.trim())
.filter(num => num !== "");
console.log('입력된 번호들 : ', numbers);
// 현재 테이블에 있는 데이터 가져오기
@ -1028,13 +1028,19 @@ $(document).ready(function (){
// 각 번호를 테이블에 추가 (중복 검사 및 포맷팅 포함)
numbers.forEach(number => {
// const formattedNumber = formatPhoneNumber(number); // 번호 표준화
const formattedNumber = formatPhoneNumber(number); // 번호 표준화
console.log('formattedNumber : ', formattedNumber);
// console.log('number : ', number)
// console.log('formattedNumber : ', formattedNumber)
const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김
console.log('cleanedNumber : ', cleanedNumber);
console.log('cleanedNumber : ', cleanedNumber);
if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크
if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사
tableL.addRow({ phone: formattedNumber }); // 표준화된 번호로 추가
// tableL.addRow({ phone: formattedNumber }); // 표준화된 번호로 추가
tableL.addRow({ phone: cleanedNumber }); // 하이픈 제거된 번호로 추가
existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가
} else {
// alert(`유효하지 않은 번호 형식: ${number}`);

View File

@ -1081,6 +1081,7 @@ function fn_sendMsgData(){
}
}
if(!confirm("문자를 전송하시겠습니까?")){
return false;
@ -1236,6 +1237,23 @@ function fn_sendMsgData(){
}
// 선택된 데이터의 길이에 따라 예상 시간 계산 함수
function calculateEstimatedTime(selectedCount) {
//기준값
// const processTimePerBatch = 130; // 130초
const processTimePerBatch = 260; // 260초
const batchSize = 300000; // 30만 건
// 1건당 처리 시간
const timePerRecord = processTimePerBatch / batchSize;
// 예상 시간 계산
const estimatedTimeInSeconds = selectedCount * timePerRecord;
return estimatedTimeInSeconds.toFixed(2);
}
@ -1268,6 +1286,12 @@ function sendMsgAjax_advc(){
// 시작 시간
const startTime = new Date();
// 프로그래스파 시간을 위한 계산
var estimtedTime = calculateEstimatedTime($selectedData.length);
console.log('estimtedTime : ', estimtedTime);
$.ajax({
type: "POST",
url: url,
@ -1275,6 +1299,7 @@ function sendMsgAjax_advc(){
contentType: 'application/json',
dataType: 'json',
success: function (data) {
// 요청 종료 시간 및 경과 시간 계산
const endTime = new Date();
const elapsed = (endTime - startTime) / 1000; // 밀리초 -> 초로 변환
@ -1345,12 +1370,19 @@ function sendMsgAjax_advc(){
},
beforeSend : function(xmlHttpRequest) {
// 프로그래스 바 실행
// 프로그래스 바 실행
progressStart(estimtedTime);
//로딩창 show
$('.loading_layer').addClass('active');
// $('.loading_layer').addClass('active');
},
complete : function(xhr, textStatus) {
//로딩창 hide
$('.loading_layer').removeClass('active');
// 프로그래스 바 종료
// 프로그래스 바 종료
progressComplete();;
// 로딩창 hide
// $('.loading_layer').removeClass('active');
},
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
});
@ -1359,6 +1391,14 @@ function sendMsgAjax_advc(){
//폼 유효성 검사 함수
function validateForm(form) {
// 타블레이터 호출
var $selectedData = tableL.getData(); // 데이터 가져오기
if($selectedData.length < 1){
alert("받는사람 내역을 입력해주세요.");
return false;
}
if(form.callFromList.value == ""){
@ -1390,7 +1430,7 @@ function validateForm(form) {
}
if (imgFilePath.length === 0 && !form.smsTxtArea.value) {
alert("문자 내용을 입력해 주세요.");
alert("문자내용을 입력해 주세요.");
return false;
}
return true;

View File

@ -1587,7 +1587,7 @@ function fn_excelLoadRemoveActive(){
// 프로그레스바
var start, change;
let progressInterval = null; // 전역 변수로 타이머 ID 관리
var progressInterval = null; // 전역 변수로 타이머 ID 관리
function progressStart(time) {
// 기존 타이머 정지 및 초기화
@ -1644,52 +1644,12 @@ function resetProgressBar() {
/*
function progressStart(time) {
// 초기셋팅
$(".time_text").text("0%");
$(".change_bar").css("width", "0");
$(".time_text").removeClass("animation");
$(".progress_bar_wrap").css("display", "flex");
var timeText = document.querySelector(".time_text");
var bar = document.querySelector(".change_bar");
var width = 1;
var totalTime = time * 1000; // 시간
var cmpWid = totalTime / 100; // width 증가하는 시간
start = setInterval(changeWidth, cmpWid); // 프로그레스바 시작
function changeWidth() {
if (width >= 100) {
// width 100% 됐을 때
clearInterval(start); // 프로그래스바 멈춤
timeText.innerHTML = "100%";
setTimeout(function () {
// 100%되고 1초 후 잠시만 기다려주세요 변경 및 애니메이션 추가
timeText.innerHTML = "잠시만 기다려주세요...";
$(".time_text").addClass("animation");
}, 1000)
} else {
// width 증가 및 text 변경
width++;
bar.style.width = width + "%";
timeText.innerHTML = width + "%";
}
}
}*/
// 프로그레스바 완료
function progressComplete() {
// var width = parseInt($(".time_text").text().replace('%', '')) || 0; // 현재 width 가져오기
$(".progress_bar_wrap").hide();
/*
var widthText = $(".change_bar").attr("style");
var width = widthText.replace(/[width:%;overfloen]/ig, ""); // width 값 퍼센트로 가져오기
var currentText = $(".time_text").text().trim(); // 현재 텍스트 가져오기
@ -1725,7 +1685,7 @@ function progressComplete() {
$(".time_text").text(width + "%");
$(".change_bar").css("width", width + "%");
}
}, 10); // DOM 업데이트 간격 (10ms)
}, 10); // DOM 업데이트 간격 (10ms)*/
}
/*// 프로그레스바 완료