File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-11-14
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-11-14
2024-11-14
package itn.let.mjo.spammsg.web;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.lett.service.LetterService;
import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.spammsg.service.MjonSpamMsgService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.UserManageVO;
@Controller
public class MjonSpamMsgController {
@Resource(name = "mjonMsgService")
private MjonMsgService mjonMsgService;
@Resource(name = "mjonSpamMsgService")
private MjonSpamMsgService mjonSpamMsgService;
@Resource(name = "LetterService")
private LetterService letterService;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
@RequestMapping(value= {"/web/mjon/spammsgdata/insertSpamKeyWordMsgDataAjax.do"})
public ModelAndView insertSpamKeyWordMsgDataAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
String userId = "";
try {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId.equals("")) {
modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
modelAndView.addObject("result", "loginFail");
return modelAndView;
}
mjonMsgVO.setUserId(userId);
//문자 즉시 발송 일경우 시간 셋팅
String reserveYn = mjonMsgVO.getReserveYn();
if(reserveYn.equals("N")) {//즉시발송인 경우 현재 시간 셋팅해줌
Date now = new Date();
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
mjonMsgVO.setReqDate(sdFormat.format(now));
}
String msgType = mjonMsgVO.getMsgType();
int fileCount = 0;
if(msgType.equals("6")) {// 단문이 아닌경우 그림이미지가 있는지 체크
//그림 이미지가 첨부된 경우
if(mjonMsgVO.getImgFilePath() != null || mjonMsgVO.getImgFilePath().length > 0) {
String[] path = mjonMsgVO.getImgFilePath();
String[] fileId = mjonMsgVO.getImgFileId();
String[] templateYn = mjonMsgVO.getTemplateYn();
for(int i=0; i<path.length; i++) {
if("Y".equals(templateYn[i])) {
//템플릿 사용누계 증가
letterService.updateTemplateUseCount(fileId[i]);
}
String atchFileId = fileId[i];
String imgFilePath = mjonMsgService.selectPhotoImgFileRealPath(atchFileId);
// 아이하트, 현대퓨쳐넷 두 중계사는 이미지 경로는 풀패스 경로로 넘겨주면 됨
if(i == 0) {
mjonMsgVO.setFilePath1(imgFilePath);
mjonMsgVO.setFileName1(imgFilePath);
}else if(i == 1) {
mjonMsgVO.setFilePath2(imgFilePath);
mjonMsgVO.setFileName2(imgFilePath);
}else {
mjonMsgVO.setFilePath3(imgFilePath);
mjonMsgVO.setFileName3(imgFilePath);
}
fileCount ++;
}
//첨부파일 갯수 셋팅해주기
mjonMsgVO.setFileCnt(Integer.toString(fileCount));
}
}
//전체 발송 건수 계산 - 수신자 리스트 갯수 체크
String msgGroupCnt = Integer.toString(mjonMsgVO.getCallToList().length);
mjonMsgVO.setMsgGroupCnt(msgGroupCnt);
//현재 고객의 보유 캐시 및 포인트 정보 체크
String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO);
//String totPrice = mjonMsgVO.getTotPrice();
BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
//BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN);
mjonMsgVO.setBefCash(befCash.toString());//차감 이전의 보유 캐시 저장
mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장
//스팸문자 발송 관리 테이블에 데이터 저장 - 문자는 발송 하지 않음. 이후 회원 이용정치 저리 함.
int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO);
modelAndView.addObject("message", "전송 문자내용 중 스팸문구로 의심되는 단어가 포함된 문자를 발송하여 <br/>회원 이용정지 처리 되었습니다.<br/>자세한 사항은 문자온 고객센터를 통해 문의주시기 바랍니다.");
modelAndView.addObject("result", "spamKeyWordFail");
} catch (Exception e) {
System.out.println("++++++++++++++++++ insertSpamKeyWordMsgDataAjax Controller Error !!!" + e);
modelAndView.addObject("message", "오류가 발생하였습니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
/**
* 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작
*
* */
try {
String adminSmsNoticeYn = "Y";
UserManageVO userManageVO = new UserManageVO();
userManageVO.setMberId(userId);
if(!userId.equals("")) {
userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO);
adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn();
}
if(adminSmsNoticeYn.equals("Y")) {
getAdminPhoneSendMsgData(mjonMsgVO);
}
} catch (Exception e) {
throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e);
}
return modelAndView;
}
/**
* 관리자로 문자 발송해주기
* 사용자가 보낸 문자를 문자온 법인폰으로 발송해주는 기능 함수.
* 일반문자 와 대량 문자 모두 적용하고 있음
* 2022.09.19 우영두 추가
*
* */
public boolean getAdminPhoneSendMsgData(MjonMsgVO mjonMsgVO) throws Exception{
try {
mjonMsgVO.setUserId("system");//시스템 발송 문자로 처리
//전송사 선택
String msgType = mjonMsgVO.getMsgType();
int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());//그림 이미지 갯수
//예약문자를 발송하는 경우 문자 내용 앞에 "[자동이용정지]" 표시되도록 처리 - 법인폰으로 발송되는 문자내용 수정함.20221125 추가
//String reserveYn = mjonMsgVO.getReserveYn();
String smsTxt = mjonMsgVO.getSmsTxt();
String reservSmsTxt = "[자동이용정지]" + smsTxt;
//[예약] 문구 추가시 문자열 길이 및 문자 종류 재계산 하기
String charset = "euc-kr";
int bytes = reservSmsTxt.getBytes(charset).length; //발송 문자 길이
if(bytes > 2000) {//문자열 길이가 2000을 넘어가면 [예약] 문구를 제외한 원래 문구를 넣어준다. 안그러면 문자전송이 실패하게 됨.
mjonMsgVO.setSmsTxt(smsTxt);
}else {
//[예약] 문구를 추가한 내용으로 메세지 내용을 셋팅해 준다.
mjonMsgVO.setSmsTxt(reservSmsTxt);
if(bytes > 90) {//장문일 경우 문자타입을 변경해준다.
msgType = "6";
mjonMsgVO.setMsgType(msgType);
}
}
/**
* 문자 종류 별 가장 저렴한 단가(아이하트를 제외)
* sms : 다우(7.3), 현대퓨처넷(7.5)
* Lms : 현대퓨처넷(23.5)
* MMS : 아이엠오(49)
*
* */
if(msgType.equals("4")) {//단문인 경우
mjonMsgVO.setAgentCode("02");//현대퓨처넷
}else if(msgType.equals("6")) {//장문 혹은 그림문자인 경우
if(fileCount > 0) {//그림문자인 경우 아이엠오로 전송
mjonMsgVO.setAgentCode("03");//아이엠오
mjonMsgVO.setNeoType("4");
}else {//장문인 경우
mjonMsgVO.setAgentCode("02");//현대퓨처넷
}
}
//mjonMsgVO.setAgentCode("01");
//수신번호가 배열로 되어있어서 배열에 담아준다.
String[] phone = new String[1];
String callTo = "15518011";
phone[0] = callTo;
mjonMsgVO.setCallToList(phone);//수신번호 리스트
//시스템 로그용 수신 정보
mjonMsgVO.setCallTo("help@iten.co.kr");
//현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크
//String userMoney = "0.0";
String userPoint = "0.0";
mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장
mjonMsgVO.setBefCash("0.0"); //관리자가 발송하는 것이라서 0원으로 입력
mjonMsgVO.setMsgGroupCnt("1");
//문자종류 관리자가 발송하는 것은 msgKind : S 로 셋팅
mjonMsgVO.setMsgKind("S");
//문자발송 금액 계산하기
//문자 전송 개인 단가 불러오기
//1.시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
//3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
Float shortPrice = sysJoinSetVO.getShortPrice();
Float longPrice = sysJoinSetVO.getLongPrice();
Float photo1Price = sysJoinSetVO.getPicturePrice();
Float photo2Price = sysJoinSetVO.getPicture2Price();
Float photo3Price = sysJoinSetVO.getPicture3Price();
if(mjonMsgVO.getMsgType().equals("4")) { //단문 금액
mjonMsgVO.setTotPrice(shortPrice.toString()); //총금액
mjonMsgVO.setEachPrice(shortPrice.toString()); //한건 금액
}else if(mjonMsgVO.getMsgType().equals("6")){
if(fileCount == 0) {//장문 금액
mjonMsgVO.setTotPrice(longPrice.toString());
mjonMsgVO.setEachPrice(longPrice.toString());
}else if(fileCount == 1) {//그림 1장 금액
mjonMsgVO.setTotPrice(photo1Price.toString());
mjonMsgVO.setEachPrice(photo1Price.toString());
}else if(fileCount == 2) {//그림 2장 금액
mjonMsgVO.setTotPrice(photo2Price.toString());
mjonMsgVO.setEachPrice(photo2Price.toString());
}else if(fileCount == 3) {//그림 3장 금액
mjonMsgVO.setTotPrice(photo3Price.toString());
mjonMsgVO.setEachPrice(photo3Price.toString());
}
}
//문자온 법인폰으로 전송하는 것이기에 현재시간으로 즉시 발송하도록 함.
Date now = new Date();
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
mjonMsgVO.setReqDate(sdFormat.format(now));
//문자 발송 처리
mjonMsgDataService.insertAdmToMberMsgDataInfo(mjonMsgVO);
} catch (Exception e) {
throw new Exception("+++++++++++++++++++++++++++++ getAdminPhoneSendMsgData Function Error !!!" + e);
}
return true;
}
}