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회원 이용정지 처리 되었습니다.
자세한 사항은 문자온 고객센터를 통해 문의주시기 바랍니다.");
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;
}
}