File name
Commit message
Commit date
2023-07-03
File name
Commit message
Commit date
2023-07-03
File name
Commit message
Commit date
File name
Commit message
Commit date
2023-07-03
2023-07-03
File name
Commit message
Commit date
2023-07-03
File name
Commit message
Commit date
2023-07-03
2023-07-03
File name
Commit message
Commit date
File name
Commit message
Commit date
2023-07-03
package itn.let.mjo.msgcampain.web;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.ComDefaultCodeVO;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.JsonResult;
import itn.com.cmm.LoginVO;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.MJUtil;
import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.lett.service.HashConfVO;
import itn.let.lett.service.LetterService;
import itn.let.lett.service.LetterVO;
import itn.let.mjo.addr.service.AddrGroupService;
import itn.let.mjo.addr.service.AddrGroupVO;
import itn.let.mjo.addr.service.AddrService;
import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.event.service.MjonEventService;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgcampain.service.MjonCandidateService;
import itn.let.mjo.msgcampain.service.MjonCandidateVO;
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.msgdata.service.PhoneVO;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.spammsg.service.MjonSpamMsgService;
import itn.let.mjo.symbol.service.MjonSymbolService;
import itn.let.mjo.symbol.service.MjonSymbolVO;
import itn.let.sym.ccm.cde.service.CateCode;
import itn.let.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.fcc.service.EgovCryptoUtil;
@Controller
public class MjonMsgCampainDataController {
@Resource(name = "mjonMsgService")
private MjonMsgService mjonMsgService;
@Resource(name = "mjonPayService")
private MjonPayService mjonPayService;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
@Resource(name = "LetterService")
private LetterService letterService;
@Resource(name = "mjonSymbolService")
private MjonSymbolService mjonSymbolService;
/** mberManageService */
@Resource(name = "mberManageService")
private EgovMberManageService mberManageService;
@Resource (name = "AddrService")
private AddrService addrService;
@Resource (name = "AddrGroupService")
private AddrGroupService addrGroupService;
@Resource(name = "mjonCandidateService")
private MjonCandidateService mjonCandidateService;
@Resource(name = "EgovCmmUseService")
private EgovCmmUseService cmmUseService;
/** EgovMessageSource */
@Resource(name="egovMessageSource")
EgovMessageSource egovMessageSource;
@Resource(name="EgovFileMngUtil")
private EgovFileMngUtil fileUtil;
@Resource(name="EgovFileMngService")
private EgovFileMngService fileMngService;
/* 암복호화 */
@Resource(name = "egovCryptoUtil")
EgovCryptoUtil egovCryptoUtil;
@Resource(name = "egovMjonMsgGroupIdGnrService")
private EgovIdGnrService idgenMjonMsgGroupId;
@Resource(name = "egovMjonCashIdGnrService")
private EgovIdGnrService idgenMjonCashId;
@Resource(name = "CmmnDetailCodeManageService")
private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService;
/** 첨부파일 저장경로 */
@Value("#{globalSettings['Globals.file.saveDir']}")
private String fileSaveDir;
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
@Resource(name = "MjonEventService")
private MjonEventService mjonEventService;
@Resource(name = "mjonSpamMsgService")
private MjonSpamMsgService mjonSpamMsgService;
/** 사이트 설정 */
@Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService;
private static final Logger logger = LoggerFactory.getLogger(MjonMsgCampainDataController.class);
/**
* 선거 문자 발송 화면
* @param searchVO
* @param model
* @return "/web/mjon/msgcampain/selectMsgDataView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectMsgDataView.do"})
public String selectMsgDataView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO
, CateCode cateCode
, HttpServletRequest request
, ModelMap model) throws Exception{
String categoryType = cateCode.getCateType();
if(categoryType == null) {
categoryType = "N";
}
// 문자 카테고리 리스트 불러오기
List<CateCode> cateConfList = letterService.selectCateConfWithList(categoryType);
model.addAttribute("cateCodeList", cateConfList);
// 문자 해쉬태그 리스트 불러오기
String msgType = "M";
List<HashConfVO> hashTagList = letterService.selectHashTagWithList(msgType);
model.addAttribute("hashTagList", hashTagList);
// 문자 리스트 불러오기
LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
model.addAttribute("loginVO", loginVO);
for(int i=0 ; i < cateConfList.size(); i++) {
if("선거".equals(cateConfList.get(i).getCateNm())) {
letterVO.setCategoryCode(cateConfList.get(i).getCateCode());
}
}
//주소록에서 선택시 넘어오는 파라미터
if("Y".equals(searchVO.getMoveAddrFlag())) {
model.addAttribute("addrVO", searchVO);
}
//주소록에서 선택시 넘어오는 파라미터
if("Y".equals(searchVO.getMoveAddrAllFlag())) {
AddrVO addrVO = new AddrVO();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrVO.setMberId(userId);
}
addrVO.setRecordCountPerPage(100000);
addrVO.setFirstIndex(0);
addrVO.setSearchAddrGrpId(request.getParameter("searchAddrGrpId"));
addrVO.setSearchCondition(request.getParameter("searchCondition"));
addrVO.setSearchKeyword(request.getParameter("searchKeyword"));
addrVO.setStartKeyword(request.getParameter("startKeyword"));
List<AddrVO> addrList = addrService.selectAddrList(addrVO);
List<String> addrIdList = new ArrayList<String>();
for(AddrVO item : addrList) {
addrIdList.add(item.getAddrId());
}
searchVO.setAddrIdList(addrIdList);
searchVO.setMoveAddrFlag("Y");
model.addAttribute("addrVO", searchVO);
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<?> resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO);
model.addAttribute("resultPhoList", resultPhoList);
paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
//발송결과 문자 재전송에서 넘어오는 경우 파마리터 전달
List<String> temp = searchVO.getMsgSeqList();
if(temp != null) {
model.addAttribute("reSendMsgVO", searchVO);
}
model.addAttribute("letterVO", letterVO);
return "web/msgcampain/MsgDataView";
}
/**
* 선거 문자 발송 단문/장문/그림문자 전송 화면
* @param searchVO
* @param model
* @return "/web/mjon/msgcampain/selectMsgDataSMLViewAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectMsgDataSMLViewAjax.do"})
public String selectMsgDataSMLView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
String categoryType = cateCode.getCateType();
if(categoryType == null) {
categoryType = "N";
}
//문자 전송 개인 단가 불러오기
//0.이벤트 진행중이 회원 정보 불러오기.
//이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다.
MjonEventVO mjonEventVO = new MjonEventVO();
mjonEventVO.setMberId(userId);
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
long eventDiffDate = 0;
float eventRemainCash = 0;
boolean compareEndDate = false;
if(eventMberInfo != null) {
String eventEndDate = eventMberInfo.getEventEndDate();
/**
* MJUtil.getCompareDate()
* 현재 날짜와 파라미터 전달 날짜를 비교
* 전달날짜를 지난경우 False를 리턴함.
* 현재날짜 이전 혹은 같은 날짜면 True를 리턴함.
*
* */
if(eventEndDate != null) {
compareEndDate = MJUtil.getCompareDate(eventEndDate);
eventRemainCash = (float) eventMberInfo.getEventRemainCash();
//이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴
//이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴
if(!compareEndDate || eventRemainCash < 7.5) {
if(!eventMberInfo.getEventStatus().equals("E")) {
//이벤트 상태값을 종료로 변경한다.
mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId());
mjonEventVO.setEventStatus("E");
mjonEventVO.setEventMemo("이벤트 발송 최소 금액(7.5) 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴");
mjonEventVO.setEventRemainCash(eventRemainCash);
mjonEventService.updateEventEndStatus(mjonEventVO);
eventMberInfo.setEventStatus("E");
}
}else {//이벤트 진행중이면 남은 날짜 계산해서 전달.
/**
* MJUtil.getDiffDateDay()
* 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌.
*
* */
eventDiffDate = MJUtil.getDiffDateDay(eventEndDate);
}
}
}
//남은 날짜값을 절대값으로 변경(음수로 나오기 때문)
model.addAttribute("eventDiffDate", Math.abs(eventDiffDate));
model.addAttribute("compareEndDate", compareEndDate);
model.addAttribute("eventRemainCash", eventRemainCash);
model.addAttribute("eventMberInfo", eventMberInfo);
//1.시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
//2.사용자 개인 단가 정보 불러오기
MberManageVO mberManageVO = new MberManageVO();
if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
searchVO.setUserId(userId);
}
model.addAttribute("exceptSpamYn", mberManageVO.getExceptSpamYn());
//3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
Float shortPrice = mberManageVO.getShortPrice();
Float longPrice = mberManageVO.getLongPrice();
Float picturePrice = mberManageVO.getPicturePrice();
Float picture2Price = mberManageVO.getPicture2Price();
Float picture3Price = mberManageVO.getPicture3Price();
BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN);
//일반 단가정보 저장 변수 셋팅 - 이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가
Float norShortPrice = mberManageVO.getShortPrice();
Float norLongPrice = mberManageVO.getLongPrice();
Float norPicturePrice = mberManageVO.getPicturePrice();
Float norPicture2Price = mberManageVO.getPicture2Price();
Float norPicture3Price = mberManageVO.getPicture3Price();
//기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623
/*int shortPrice = (int) mberManageVO.getShortPrice();
int longPrice = (int) mberManageVO.getLongPrice();
int picturePrice = (int) mberManageVO.getPicturePrice();
int picture2Price = (int) mberManageVO.getPicture2Price();
int picture3Price = (int) mberManageVO.getPicture3Price();
int userMoney = (int) mberManageVO.getUserMoney();*/
String userPoint = mberManageVO.getUserPoint();
//이벤트 진행 회원의 발송 단가 처리해주기
if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) {
shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice());
longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice());
picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice());
picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price());
picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price());
//이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가
if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//이벤트 단가 적용시 일반단가도 필요하여 셋팅 해줌.
norShortPrice = (float) sysJoinSetVO.getShortPrice();
norLongPrice = (float) sysJoinSetVO.getLongPrice();
norPicturePrice = (float) sysJoinSetVO.getPicturePrice();
norPicture2Price = (float) sysJoinSetVO.getPicture2Price();
norPicture3Price = (float) sysJoinSetVO.getPicture3Price();
}
}else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {
shortPrice = (float) sysJoinSetVO.getShortPrice();
longPrice = (float) sysJoinSetVO.getLongPrice();
picturePrice = (float) sysJoinSetVO.getPicturePrice();
picture2Price = (float) sysJoinSetVO.getPicture2Price();
picture3Price = (float) sysJoinSetVO.getPicture3Price();
}
model.addAttribute("shortPrice", shortPrice);
model.addAttribute("longPrice", longPrice);
model.addAttribute("picturePrice", picturePrice);
model.addAttribute("picture2Price", picture2Price);
model.addAttribute("picture3Price", picture3Price);
model.addAttribute("userMoney", userMoney);
model.addAttribute("userPoint", userPoint);
//이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가
if(norShortPrice < 1 || norLongPrice < 1 || norPicturePrice < 1) {//협의 단가가 없는 경우 일반단가에 시스템 단가로 셋팅해줌
norShortPrice = (float) sysJoinSetVO.getShortPrice();
norLongPrice = (float) sysJoinSetVO.getLongPrice();
norPicturePrice = (float) sysJoinSetVO.getPicturePrice();
norPicture2Price = (float) sysJoinSetVO.getPicture2Price();
norPicture3Price = (float) sysJoinSetVO.getPicture3Price();
}
model.addAttribute("norShortPrice", norShortPrice);
model.addAttribute("norLongPrice", norLongPrice);
model.addAttribute("norPicturePrice", norPicturePrice);
model.addAttribute("norPicture2Price", norPicture2Price);
model.addAttribute("norPicture3Price", norPicture3Price);
//선거 후보자 정보 불러오기
MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
if(userId != ""){
mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId);
//String cryptText = egovCryptoUtil.encrypt(plainText);
if(mjonCandidateVO != null) {
// 주민번호 복호화 하기
String regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1());
String regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2());
mjonCandidateVO.setRegidentNo1(regidentNo1);
mjonCandidateVO.setRegidentNo2(regidentNo2);
}
}
model.addAttribute("mjonCandidateVO", mjonCandidateVO);
// 이메일 코드조회
ComDefaultCodeVO voComCode = new ComDefaultCodeVO();
voComCode.setCodeId("ITN031");
model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode));
if(!userId.equals("")) {//로그인 했을때만 발신번호 리스트 불러오기
//아이디 발신번호 리스트 불러오기.
List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId);
List<String> resultPhonList = new ArrayList<String>();
MJUtil mjUtil = new MJUtil();
for(String phone : resultSendPhonList) {
resultPhonList.add(mjUtil.addDash(phone));
}
model.addAttribute("resultPhonList", resultPhonList);
}
// 문자 카테고리 리스트 불러오기
List<CateCode> cateConfList = letterService.selectCateConfWithList(categoryType);
model.addAttribute("cateCodeList", cateConfList);
//그림 문자 리스트 불러오기
LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
MjonSymbolVO symbolVO = new MjonSymbolVO();
// 특수문자 리스트 불러오기
List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
model.addAttribute("symbolList", symbolList);
//최근 전송 내역
Calendar cal = Calendar.getInstance();
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
cal.setTime(now);
cal.add(Calendar.DATE, -3);
String chkDate = format.format(cal.getTime());
searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작
List<?> resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(searchVO);
model.addAttribute("resultLatestMsgList", resultLatestMsgList);
//자주보내는 번호
List<?> resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(searchVO);
model.addAttribute("resultBookMarkMsgList", resultBookMarkMsgList);
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<?> resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO);
model.addAttribute("resultPhoList", resultPhoList);
paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
return "web/msgcampain/MsgDataSMLView";
}
/**
* 선거 문자 후보자 등록 처리
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/insertCandidateDataInfoAjax.do"})
public ModelAndView insertCandidateDataInfoAjax(
MjonCandidateVO mjonCandidateVO,
HttpServletRequest req,
ModelMap model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId.equals("")) {
modelAndView.addObject("result", "loginFail");
modelAndView.addObject("message", "로그인이 필요합니다.");
return modelAndView;
}else {
mjonCandidateVO.setMberId(userId);
}
MjonVOParamXssValues XssParam = new MjonVOParamXssValues();
int XssCnt = XssParam.buildUri(mjonCandidateVO);
if(XssCnt > 0) {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "후보자 등록 정보에 잘못된 문자열이 있습니다.");
return modelAndView;
}
int resultCnt = 0;
String dataType = mjonCandidateVO.getDataType();
//주민번호 앞, 뒷 자리 암호화 처리하기
String regidentNo1 = egovCryptoUtil.encrypt(mjonCandidateVO.getRegidentNo1());
String regidentNo2 = egovCryptoUtil.encrypt(mjonCandidateVO.getRegidentNo2());
mjonCandidateVO.setRegidentNo1(regidentNo1);
mjonCandidateVO.setRegidentNo2(regidentNo2);
if(dataType.equals("Upt")) {
resultCnt = mjonCandidateService.updateCandidateDataInfo(mjonCandidateVO);
}else {
resultCnt = mjonCandidateService.insertCandidateDataInfo(mjonCandidateVO);
}
if(resultCnt > 0 && dataType.equals("Upt")) {
modelAndView.addObject("result", "success");
modelAndView.addObject("message", "후보자 정보의 수정이 완료되었습니다.");
}else if(resultCnt > 0 && dataType.equals("Reg")) {
modelAndView.addObject("result", "success");
modelAndView.addObject("message", "후보자 등록이 완료되었습니다.");
}else {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "후보자 등록에 오류가 발생하였습니다.");
}
return modelAndView;
}
/**
* 선거 문자 후보자 삭제 처리
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/deleteCandidateDataInfoAjax.do"})
public ModelAndView deleteCandidateDataInfoAjax(
MjonCandidateVO mjonCandidateVO,
HttpServletRequest req,
ModelMap model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId.equals("")) {
modelAndView.addObject("result", "loginFail");
modelAndView.addObject("message", "로그인이 필요합니다.");
return modelAndView;
}else {
mjonCandidateVO.setMberId(userId);
}
MjonVOParamXssValues XssParam = new MjonVOParamXssValues();
int XssCnt = XssParam.buildUri(mjonCandidateVO);
int resultCnt = 0;
resultCnt = mjonCandidateService.deleteCandidateDataInfo(mjonCandidateVO);
if(resultCnt > 0 ) {
modelAndView.addObject("result", "success");
modelAndView.addObject("message", "후보자 정보의 삭제 완료되었습니다.");
}else {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "후보자 삭제에 오류가 발생하였습니다.");
}
return modelAndView;
}
/**
* 선거 문자재전송 내용 처리
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectReSendMsgDataListAjax.do"})
public ModelAndView selectReSendMsgDataListAjax(
MjonMsgDataVO mjonMsgDataVO,
HttpServletRequest req,
ModelMap model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId.equals("")) {
modelAndView.addObject("status", "loginFail");
modelAndView.addObject("message", "로그인이 필요합니다.");
return modelAndView;
}else {
mjonMsgDataVO.setUserId(userId);
}
List<String> msgSeqList = mjonMsgDataVO.getMsgSeqList();
List<String> tempList = new ArrayList<String>();
for(String seqStr : msgSeqList) {
String seqId = seqStr.replace("[", "");
seqId = seqId.replace("]", "");
tempList.add(seqId);
}
mjonMsgDataVO.setMsgSeqList(tempList);
List<MjonMsgVO> resultList = mjonMsgDataService.selectReSendMsgDataList(mjonMsgDataVO);
int fileCnt = Integer.parseInt(resultList.get(0).getFileCnt());
MjonMsgDataVO resultMsgPhotoInfo = new MjonMsgDataVO();
if(fileCnt > 0) {
MjonMsgVO resultMsgInfo = new MjonMsgVO();
//재발송 리스트의 첫번째 이미지 정보만 받아온다.(여러 발송문자를 선택 할 경우 첫번째 리스트의 정보를 사용함)
resultMsgInfo.setFileType1(resultList.get(0).getFileType1());
resultMsgInfo.setFileType2(resultList.get(0).getFileType2());
resultMsgInfo.setFileType3(resultList.get(0).getFileType3());
//문자함 리스트의 첨부이미지 정보 불러오기
resultMsgPhotoInfo = mjonMsgDataService.selectMsgReSendPhotoInfo(resultMsgInfo);
}
if(resultList == null) {
modelAndView.addObject("status", "emptyList");
modelAndView.addObject("message", "재전송 문자 내용이 없습니다.");
}else {
modelAndView.addObject("status", "success");
modelAndView.addObject("resultList", resultList);
modelAndView.addObject("resultListCnt", resultList.size());
modelAndView.addObject("resultMsgPhotoInfo", resultMsgPhotoInfo);
}
return modelAndView;
}
/**
* 선거문자 대량 문자 발송 화면
* @param searchVO
* @param model
* @return "/web/mjon/msgcampain/excel/selectMsgExcelDataView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/excel/selectMsgExcelDataView.do"})
public String selectMsgExcelDataView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
model.addAttribute("loginVO", loginVO);
String categoryType = cateCode.getCateType();
if(categoryType == null) {
categoryType = "N";
}
// 문자 카테고리 리스트 불러오기
List<CateCode> cateConfList = letterService.selectCateConfWithList(categoryType);
model.addAttribute("cateCodeList", cateConfList);
// 문자 해쉬태그 리스트 불러오기
String msgType = "M";
List<HashConfVO> hashTagList = letterService.selectHashTagWithList(msgType);
model.addAttribute("hashTagList", hashTagList);
// 문자 리스트 불러오기
LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<?> resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO);
model.addAttribute("resultPhoList", resultPhoList);
paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
return "web/msgcampain/excel/MsgExcelDataView";
}
/**
* 선거 문자 발송 엑셀문자(대량전송) 화면
* @param searchVO
* @param model
* @return "/web/mjon/msgcampain/excel/selectMsgExcelDataViewAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/excel/selectMsgExcelDataViewAjax.do"})
public String selectMsgDataExcelViewAjax(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
String categoryType = cateCode.getCateType();
if(categoryType == null) {
categoryType = "N";
}
//문자 전송 개인 단가 불러오기
//0.이벤트 진행중이 회원 정보 불러오기.
//이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다.
MjonEventVO mjonEventVO = new MjonEventVO();
mjonEventVO.setMberId(userId);
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
long eventDiffDate = 0;
float eventRemainCash = 0;
boolean compareEndDate = false;
if(eventMberInfo != null) {
String eventEndDate = eventMberInfo.getEventEndDate();
/**
* MJUtil.getCompareDate()
* 현재 날짜와 파라미터 전달 날짜를 비교
* 전달날짜를 지난경우 False를 리턴함.
* 현재날짜 이전 혹은 같은 날짜면 True를 리턴함.
*
* */
if(eventEndDate != null) {
compareEndDate = MJUtil.getCompareDate(eventEndDate);
eventRemainCash = (float) eventMberInfo.getEventRemainCash();
//이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴
//이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴
if(!compareEndDate || eventRemainCash < 7.5) {
if(!eventMberInfo.getEventStatus().equals("E")) {
//이벤트 상태값을 종료로 변경한다.
mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId());
mjonEventVO.setEventStatus("E");
mjonEventVO.setEventMemo("이벤트 발송 최소 금액(7.5) 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴");
mjonEventVO.setEventRemainCash(eventRemainCash);
mjonEventService.updateEventEndStatus(mjonEventVO);
eventMberInfo.setEventStatus("E");
}
}else {//이벤트 진행중이면 남은 날짜 계산해서 전달.
/**
* MJUtil.getDiffDateDay()
* 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌.
*
* */
eventDiffDate = MJUtil.getDiffDateDay(eventEndDate);
}
}
}
//남은 날짜값을 절대값으로 변경(음수로 나오기 때문)
model.addAttribute("eventDiffDate", Math.abs(eventDiffDate));
model.addAttribute("compareEndDate", compareEndDate);
model.addAttribute("eventRemainCash", eventRemainCash);
model.addAttribute("eventMberInfo", eventMberInfo);
//1.시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
//2.사용자 개인 단가 정보 불러오기
MberManageVO mberManageVO = new MberManageVO();
if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
}
model.addAttribute("exceptSpamYn", mberManageVO.getExceptSpamYn());
//3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
Float shortPrice = mberManageVO.getShortPrice();
Float longPrice = mberManageVO.getLongPrice();
Float picturePrice = mberManageVO.getPicturePrice();
Float picture2Price = mberManageVO.getPicture2Price();
Float picture3Price = mberManageVO.getPicture3Price();
BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN);
//일반 단가정보 저장 변수 셋팅 - 이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가
Float norShortPrice = mberManageVO.getShortPrice();
Float norLongPrice = mberManageVO.getLongPrice();
Float norPicturePrice = mberManageVO.getPicturePrice();
Float norPicture2Price = mberManageVO.getPicture2Price();
Float norPicture3Price = mberManageVO.getPicture3Price();
//기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623
/*int shortPrice = (int) mberManageVO.getShortPrice();
int longPrice = (int) mberManageVO.getLongPrice();
int picturePrice = (int) mberManageVO.getPicturePrice();
int picture2Price = (int) mberManageVO.getPicture2Price();
int picture3Price = (int) mberManageVO.getPicture3Price();
int userMoney = (int) mberManageVO.getUserMoney();*/
String userPoint = mberManageVO.getUserPoint();
//이벤트 진행 회원의 발송 단가 처리해주기
if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) {
shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice());
longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice());
picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice());
picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price());
picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price());
//이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가
if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//이벤트 단가 적용시 일반단가도 필요하여 셋팅 해줌.
norShortPrice = (float) sysJoinSetVO.getShortPrice();
norLongPrice = (float) sysJoinSetVO.getLongPrice();
norPicturePrice = (float) sysJoinSetVO.getPicturePrice();
norPicture2Price = (float) sysJoinSetVO.getPicture2Price();
norPicture3Price = (float) sysJoinSetVO.getPicture3Price();
}
}else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {
shortPrice = (float) sysJoinSetVO.getShortPrice();
longPrice = (float) sysJoinSetVO.getLongPrice();
picturePrice = (float) sysJoinSetVO.getPicturePrice();
picture2Price = (float) sysJoinSetVO.getPicture2Price();
picture3Price = (float) sysJoinSetVO.getPicture3Price();
}
model.addAttribute("shortPrice", shortPrice);
model.addAttribute("longPrice", longPrice);
model.addAttribute("picturePrice", picturePrice);
model.addAttribute("picture2Price", picture2Price);
model.addAttribute("picture3Price", picture3Price);
model.addAttribute("userMoney", userMoney);
model.addAttribute("userPoint", userPoint);
//이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가
if(norShortPrice < 1 || norLongPrice < 1 || norPicturePrice < 1) {//협의 단가가 없는 경우 일반단가에 시스템 단가로 셋팅해줌
norShortPrice = (float) sysJoinSetVO.getShortPrice();
norLongPrice = (float) sysJoinSetVO.getLongPrice();
norPicturePrice = (float) sysJoinSetVO.getPicturePrice();
norPicture2Price = (float) sysJoinSetVO.getPicture2Price();
norPicture3Price = (float) sysJoinSetVO.getPicture3Price();
}
model.addAttribute("norShortPrice", norShortPrice);
model.addAttribute("norLongPrice", norLongPrice);
model.addAttribute("norPicturePrice", norPicturePrice);
model.addAttribute("norPicture2Price", norPicture2Price);
model.addAttribute("norPicture3Price", norPicture3Price);
//선거 후보자 정보 불러오기
MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
if(userId != ""){
mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId);
//String cryptText = egovCryptoUtil.encrypt(plainText);
if(mjonCandidateVO != null) {
// 주민번호 복호화 하기
String regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1());
String regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2());
mjonCandidateVO.setRegidentNo1(regidentNo1);
mjonCandidateVO.setRegidentNo2(regidentNo2);
}
}
model.addAttribute("mjonCandidateVO", mjonCandidateVO);
// 이메일 코드조회
ComDefaultCodeVO voComCode = new ComDefaultCodeVO();
voComCode.setCodeId("ITN031");
model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode));
//아이디 발신번호 리스트 불러오기.
List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId);
List<String> resultPhonList = new ArrayList<String>();
MJUtil mjUtil = new MJUtil();
for(String phone : resultSendPhonList) {
resultPhonList.add(mjUtil.addDash(phone));
}
model.addAttribute("resultPhonList", resultPhonList);
// 문자 카테고리 리스트 불러오기
List<CateCode> cateConfList = letterService.selectCateConfWithList(categoryType);
model.addAttribute("cateCodeList", cateConfList);
//그림 문자 리스트 불러오기
LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
MjonSymbolVO symbolVO = new MjonSymbolVO();
// 특수문자 리스트 불러오기
List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
model.addAttribute("symbolList", symbolList);
/*String categoryType = cateCode.getCateType();
if(categoryType == null) {
categoryType = "N";
}
// 문자 카테고리 리스트 불러오기
List<CateCode> cateConfList = letterService.selectCateConfWithList(categoryType);
model.addAttribute("cateCodeList", cateConfList);
//그림 문자 리스트 불러오기
LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}*/
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<?> resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO);
model.addAttribute("resultPhoList", resultPhoList);
paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
return "web/msgcampain/excel/MsgExcelDataSMLView";
}
/**
* 선거문자 하위 카테고리 리스트 화면 불러오기
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectCateConfThrDptListAjax.do"})
public String selectCateConfThreeDepthListAjax(
@ModelAttribute("searchVO") LetterVO letterVO,
BindingResult bindingResult,
ModelMap model,
SessionStatus status,
RedirectAttributes redirectAttributes) throws Exception {
CateCode cateCode = new CateCode();
cateCode.setCateNo(letterVO.getCategoryCode());
//하위카테고리에서 전체 클릭 시 상위카테고리로 하위카테고리 조회
if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) {
cateCode.setCateNo(letterVO.getUpperCateNo());
}
CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회
if(cateCodeInfoVO != null) { //전체 카테고리가 아닌 경우
if(cateCodeInfoVO.getCateDepth().equals("2")) { //선택한 카테고리가 2뎁스(중분류)일 시 중분류의 코드로 하위분류 조회
cateCode.setUpperCateNo(cateCodeInfoVO.getId());
}else if(cateCodeInfoVO.getCateDepth().equals("3")) { //선택한 카테고리가 3뎁스(하위분류)일 시 해당 부모코드로 형제카테고리 조회
cateCode.setUpperCateNo(cateCodeInfoVO.getParent());
}
}
cateCode.setCateType("N"); //일반 o 맞춤제작 x
String thrDptCateNo = ""; //클릭한 카테고리가 2뎁스(하위분류)일 시 하위 카테고리는 '전체' selected효과
if(cateCodeInfoVO != null && cateCodeInfoVO.getCateDepth().equals("3")) { //클릭한 카테고리가 3뎁스(하위분류)일 시 해당 카테고리 selected 효과
thrDptCateNo= letterVO.getCategoryCode();
}
//3뎁스(하위분류) 카테고리 조회
List<CateCode> cateThreeConfList = letterService.selectCateConfThreeDepthWithList(cateCode);
model.addAttribute("resultCateThreeConfList", cateThreeConfList);
model.addAttribute("thrDptCateNo", thrDptCateNo);
return "web/msgcampain/CateThrDptListAjax";
}
/**
* 선거 문자샘플 리스트 화면 불러오기
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectLetterDataListAjax.do"})
public String selectLetterDataListAjax(
@ModelAttribute("searchVO") LetterVO letterVO,
BindingResult bindingResult,
ModelMap model,
SessionStatus status,
RedirectAttributes redirectAttributes) throws Exception {
//검색 키워드 체크 기능 추가
String keyword = letterVO.getSearchKeyword();
boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword);
if(!searchKeyType) {//검색 결과 Null로 리턴함.
List<?> exceptionLetterList = new ArrayList<>();
model.addAttribute("resultLetterList", exceptionLetterList);
return "web/msgcampain/LetterListAjax";
}
CateCode cateCode = new CateCode();
cateCode.setCateNo(letterVO.getCategoryCode());
CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회
//1번. 문자 샘플 탭 or 단문문자 탭 or 상위카테고리에서 ALL 클릭 시 - 카테고리 관련 조건 없이 select
//2번. 상위 카테고리 BEST 클릭 시 - bestCategory = Y 조건 추가
//3번. 상위 카테고리(All or BEST가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 2으로 넘겨주고 해당 카테고리 번호와 해당 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회
//4번. 하위 카테고리 전체 클릭 시 - cateDepth를 2으로 넘겨주고 상위 카테고리와 상위 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회
//5번. 하위 카테고리(전체가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 3으로 넘겨주고 해당 카테고리를 조건절에 추가
if(cateCodeInfoVO != null) { //3번. 상위 카테고리 클릭 시
letterVO.setCateDepth(cateCodeInfoVO.getCateDepth());
}
if ("best".equals(letterVO.getCategoryCode())) { //2번. BEST 클릭 시 경우
letterVO.setBestCategory("Y");
letterVO.setCategoryCode("");
}else if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회
letterVO.setCateDepth("2");
letterVO.setCategoryCode(letterVO.getUpperCateNo());
}
//그림 문자 리스트 불러오기
//LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
String letterType = letterVO.getLetterType();
// 문자 종류 정보가 없으면 단문문자로 셋팅
if(letterType == null || letterType.equals("")) {
letterVO.setLetterType("S");
}
// 장/단문 문자 리스트
List<?> resultLetterList = mjonMsgDataService.selectLetterList(letterVO);
model.addAttribute("resultLetterList", resultLetterList);
paginationInfo.setTotalRecordCount( resultLetterList.size()> 0 ? ((Long)((EgovMap)resultLetterList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("letterVO", letterVO);
return "web/msgcampain/LetterListAjax";
}
/**
* 선거문자 문자샘플 리스트 화면 불러오기
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectMainLetterDataListAjax.do"})
public String selectMainLetterDataListAjax(
@ModelAttribute("searchVO") LetterVO letterVO,
BindingResult bindingResult,
ModelMap model,
SessionStatus status,
RedirectAttributes redirectAttributes) throws Exception {
String subStr = letterVO.getCategoryCode();
if(!subStr.equals("")) {
subStr = subStr.substring(0, 3);
letterVO.setCategoryCode(subStr);
}else {
letterVO.setCategoryCode("131");
}
//그림 문자 리스트 불러오기
//LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
String letterType = letterVO.getLetterType();
// 문자 종류 정보가 없으면 단문문자로 셋팅
if(letterType == null || letterType.equals("")) {
letterVO.setLetterType("S");
}
// 장/단문 문자 리스트
List<?> resultLetterList = mjonMsgDataService.selectLetterList(letterVO);
model.addAttribute("resultLetterList", resultLetterList);
paginationInfo.setTotalRecordCount( resultLetterList.size()> 0 ? ((Long)((EgovMap)resultLetterList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("letterVO", letterVO);
return "web/msgcampain/MainLetterListAjax";
}
/**
* 선거문자 그림 문자샘플 리스트 화면 불러오기
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectPhotoDataListAjax.do"})
public String selectPhotoDataListAjax(
@ModelAttribute("searchVO") LetterVO letterVO,
BindingResult bindingResult,
ModelMap model,
SessionStatus status,
RedirectAttributes redirectAttributes) throws Exception {
//검색 키워드 체크 기능 추가
String keyword = letterVO.getSearchKeyword();
boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword);
if(!searchKeyType) {//검색 결과 Null로 리턴함.
List<?> exceptionPhoList = new ArrayList<>();
model.addAttribute("resultPhoList", exceptionPhoList);
return "web/msgcampain/PhotoListAjax";
}
CateCode cateCode = new CateCode();
cateCode.setCateNo(letterVO.getCategoryCode());
CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회
//1번. 문자 샘플 탭 or 단문문자 탭 or 상위카테고리에서 ALL 클릭 시 - 카테고리 관련 조건 없이 select
//2번. 상위 카테고리 BEST 클릭 시 - bestCategory = Y 조건 추가
//3번. 상위 카테고리(All or BEST가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 2으로 넘겨주고 해당 카테고리 번호와 해당 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회
//4번. 하위 카테고리 전체 클릭 시 - cateDepth를 2으로 넘겨주고 상위 카테고리와 상위 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회
//5번. 하위 카테고리(전체가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 3으로 넘겨주고 해당 카테고리를 조건절에 추가
if(cateCodeInfoVO != null) { //3번. 상위 카테고리 클릭 시
letterVO.setCateDepth(cateCodeInfoVO.getCateDepth());
}
if ("best".equals(letterVO.getCategoryCode())) { //2번. BEST 클릭 시 경우
letterVO.setBestCategory("Y");
letterVO.setCategoryCode("");
}else if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회
letterVO.setCateDepth("2");
letterVO.setCategoryCode(letterVO.getUpperCateNo());
}
//그림 문자 리스트 불러오기
//LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
String letterType = letterVO.getLetterType();
// 문자 종류 정보가 없으면 그림문자로 셋팅
if(letterType == null || letterType.equals("")) {
letterVO.setLetterType("P"); //그림문자 셋팅
letterVO.setMemberType("P"); //개인 카테고리 셋팅
}
// 그림 문자 리스트
List<?> resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO);
model.addAttribute("resultPhoList", resultPhoList);
paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("letterVO", letterVO);
return "web/msgcampain/PhotoListAjax";
}
/**
* 선거문자 그림 문자샘플 리스트 화면 불러오기 2
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectPhotoDataList2Ajax.do"})
public ModelAndView selectPhotoDataList2Ajax(
@ModelAttribute("searchVO") LetterVO letterVO,
ModelMap model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
String subStr = letterVO.getCategoryCode();
if(!subStr.equals("")) {
subStr = subStr.substring(0, 3);
letterVO.setCategoryCode(subStr);
}
//그림 문자 리스트 불러오기
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
String letterType = letterVO.getLetterType();
// 문자 종류 정보가 없으면 단문문자로 셋팅
if(letterType == null || letterType.equals("")) {
letterVO.setLetterType("P");
}
try {
// 그림 문자 리스트
List<?> resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO);
model.addAttribute("resultPhoList", resultPhoList);
paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("letterVO", letterVO);
modelAndView.addObject("status", "success");
} catch (Exception e) {
modelAndView.addObject("status", "fail");
}
return modelAndView;
}
/**
* 선거문자 그림 문자샘플 리스트 화면 불러오기
*
* @param letterVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectMainPhotoDataListAjax.do"})
public String selectMainPhotoDataListAjax(
@ModelAttribute("searchVO") LetterVO letterVO,
BindingResult bindingResult,
ModelMap model,
SessionStatus status,
RedirectAttributes redirectAttributes) throws Exception {
String subStr = letterVO.getCategoryCode();
if(!subStr.equals("")) {
subStr = subStr.substring(0, 3);
letterVO.setCategoryCode(subStr);
}else if("C".equals(letterVO.getLetterType())) {
letterVO.setCategoryCode("111600");
}else {
letterVO.setCategoryCode("131");
}
//그림 문자 리스트 불러오기
//LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
String letterType = letterVO.getLetterType();
// 문자 종류 정보가 없으면 단문문자로 셋팅
if(letterType == null || letterType.equals("")) {
letterVO.setLetterType("P");
}
// 그림 문자 리스트
List<?> resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO);
model.addAttribute("resultPhoList", resultPhoList);
paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("letterVO", letterVO);
return "web/msgcampain/MainPhotoListAjax";
}
/**
* 선거문자 내문자함 리스트 화면 불러오기
*
* @param MjonMsgDataVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectMyMsgDataListAjax.do"})
public String selectMyMsgDataListAjax(
@ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO,
BindingResult bindingResult,
ModelMap model,
SessionStatus status,
RedirectAttributes redirectAttributes) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
mjonMsgDataVO.setUserId(userId);
//검색 키워드 체크 기능 추가
String keyword = mjonMsgDataVO.getSearchKeyword();
boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword);
if(!searchKeyType) {//검색 결과 Null로 리턴함.
List<?> exceptionMyMsgList = new ArrayList<>();
model.addAttribute("resultMyMsgList", exceptionMyMsgList);
return "web/msgcampain/MyMsgListAjax";
}
//그림 문자 리스트 불러오기
//LetterVO letterVO = new LetterVO();
if(mjonMsgDataVO.getPageUnit() != 10) {
mjonMsgDataVO.setPageUnit(mjonMsgDataVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mjonMsgDataVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mjonMsgDataVO.getPageUnit());
paginationInfo.setPageSize(mjonMsgDataVO.getPageSize());
mjonMsgDataVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mjonMsgDataVO.setLastIndex(paginationInfo.getLastRecordIndex());
mjonMsgDataVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
// 내 문자함 문자 리스트
List<?> resultMyMsgList = mjonMsgDataService.selectMyMsgDataListAjax(mjonMsgDataVO);
model.addAttribute("resultMyMsgList", resultMyMsgList);
paginationInfo.setTotalRecordCount( resultMyMsgList.size()> 0 ? ((Long)((EgovMap)resultMyMsgList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("mjonMsgDataVO", mjonMsgDataVO);
//문자함 리스트의 첨부이미지 정보 불러오기
List<?> resultMyMsgPhotoList = mjonMsgDataService.selectMyMsgPhotoListInfo(resultMyMsgList);
model.addAttribute("resultMyMsgPhotoList", resultMyMsgPhotoList);
return "web/msgcampain/MyMsgListAjax";
}
/**
* 선거문자 추천인 아이디 확인
*
* @param String
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectRecommIdCheckAjax.do"})
public ModelAndView selectRecommIdCheckAjax(
MjonMsgVO mjonMsgVO,
ModelMap model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
List<String> checkId = new ArrayList<String>();
checkId = mberManageService.selectIdCheck(mjonMsgVO.getRecommId());
int checkIdCnt = checkId.size();
String resultSts = "fail";
if(checkIdCnt > 0) {
resultSts = "success";
}
modelAndView.addObject("status", resultSts);
return modelAndView;
}
/**
* 선거문자 주소록 그룹 리스트 화면 불러오기
*
* @param MjonMsgDataVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectAddrGroupListAjax.do"})
public String selectAddrGroupListAjax(
@ModelAttribute("searchVO") AddrGroupVO addrGroupVO,
AddrVO addrVO,
ModelMap model,
RedirectAttributes redirectAttributes) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(loginVO == null) {
return "redirect:/web/main/mainPage.do";
}
if(userId != "") {
addrGroupVO.setMberId(userId);
addrVO.setMberId(userId);
}
if(addrGroupVO.getPageUnit() != 10) {
addrGroupVO.setPageUnit(addrGroupVO.getPageUnit());
}
if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrGroupVO.setSearchSortCnd("addrGrpId");
addrGroupVO.setSearchSortOrd("desc");
}
addrGroupVO.setSiteId("web");
List<AddrGroupVO> addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
//회원별 주소록 전체 갯수 조회
int addrTotalCount = addrService.selectAddrTotalCount(addrVO);
addrVO.setType("bookmark");
List<AddrVO> addrBookmarkList = addrService.selectAddrBasicGrpList(addrVO);
addrVO.setType("noGrp");
List<AddrVO> addrNoGrpList = addrService.selectAddrBasicGrpList(addrVO);
model.addAttribute("addrTotalCount", addrTotalCount);
model.addAttribute("addrGroupList", addrGroupList);
model.addAttribute("addrBookmarkList", addrBookmarkList);
model.addAttribute("addrNoGrpList", addrNoGrpList);
return "web/msgcampain/addr/MsgAddrGroupListAjax";
}
/**
* 선거문자 주소록 그룹 선택시 우측 주소록 리스트 화면 불러오기
*
* @param AddrGroupVO
* @param AddrVO
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectMsgAddrListAjax.do"})
public ModelAndView selectMsgAddrListAjax(
@ModelAttribute("searchVO") AddrVO addrVO,
ModelMap model,
RedirectAttributes redirectAttributes) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrVO.setMberId(userId);
}else {
modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
modelAndView.addObject("result", "loginFail");
return modelAndView;
}
List<AddrVO> resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO);
modelAndView.addObject("resultAddrList", resultAddrList);
modelAndView.addObject("result", "success");
return modelAndView;
}
/**
* 선거문자 최근 전송내역 리스트 화면 불러오기
*
* @param MjonMsgDataVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectLatestMsgListAjax.do"})
public String selectLatestMsgListAjax(
@ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO,
ModelMap model,
RedirectAttributes redirectAttributes) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
Calendar cal = Calendar.getInstance();
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
cal.setTime(now);
cal.add(Calendar.DATE, -3);
String chkDate = format.format(cal.getTime());
mjonMsgDataVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작
mjonMsgDataVO.setUserId(userId);
List<?> resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(mjonMsgDataVO);
model.addAttribute("resultLatestMsgList", resultLatestMsgList);
return "web/msgcampain/MsgLatestListAjax";
}
/**
* 선거문자 자주 보내는 번호 리스트 화면 불러오기
*
* @param MjonMsgDataVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/selectBookMarkMsgListAjax.do"})
public String selectBookMarkMsgListAjax(
@ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO,
ModelMap model,
RedirectAttributes redirectAttributes) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
List<?> resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(mjonMsgDataVO);
model.addAttribute("resultBookMarkMsgList", resultBookMarkMsgList);
return "web/msgcampain/MsgBookMarkListAjax";
}
/**
* 선거문자 내문자함 리스트 삭제 처리
*
* @param MjonMsgDataVO
* @param
* @param sessionVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/deleteMyMsgDataListAjax.do"})
public String deleteMyMsgDataListAjax(
@ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO,
BindingResult bindingResult,
ModelMap model,
SessionStatus status,
RedirectAttributes redirectAttributes) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
mjonMsgDataVO.setUserId(userId);
//내문자함 문자 삭제 처리하기
mjonMsgDataService.deleteMyMsgDataListAjax(mjonMsgDataVO);
//그림 문자 리스트 불러오기
//LetterVO letterVO = new LetterVO();
if(mjonMsgDataVO.getPageUnit() != 10) {
mjonMsgDataVO.setPageUnit(mjonMsgDataVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mjonMsgDataVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mjonMsgDataVO.getPageUnit());
paginationInfo.setPageSize(mjonMsgDataVO.getPageSize());
mjonMsgDataVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mjonMsgDataVO.setLastIndex(paginationInfo.getLastRecordIndex());
mjonMsgDataVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
// 내 문자함 문자 리스트
List<?> resultMyMsgList = mjonMsgDataService.selectMyMsgDataListAjax(mjonMsgDataVO);
model.addAttribute("resultMyMsgList", resultMyMsgList);
paginationInfo.setTotalRecordCount( resultMyMsgList.size()> 0 ? ((Long)((EgovMap)resultMyMsgList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("mjonMsgDataVO", mjonMsgDataVO);
//문자함 리스트의 첨부이미지 정보 불러오기
List<?> resultMyMsgPhotoList = mjonMsgDataService.selectMyMsgPhotoListInfo(resultMyMsgList);
model.addAttribute("resultMyMsgPhotoList", resultMyMsgPhotoList);
return "web/msgcampain/MyMsgListAjax";
}
/**
* 선거문자 문자 발송 화면
* @param searchVO
* @param model
* @return "/web/mjon/msgcampain/sendMsgDataAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/sendMsgDataAjax.do"})
public ModelAndView sendMsgData(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
RedirectAttributes redirectAttributes,
HttpServletRequest request,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//String resultSts = "0";
//String resultBlockSts = "0";
int resultSts = 0; //발송결과 건수
int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수
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");
modelAndView.addObject("resultSts", resultSts);
return modelAndView;
}else {
mjonMsgVO.setUserId(userId);
/**
* 회원 정지된 상태이면 문자 발송이 안되도록 처리함
* 현재 로그인 세션도 만료 처리함
* */
boolean mberSttus = userManageService.selectUserStatusInfo(userId);
if(!mberSttus) {
modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
modelAndView.addObject("result", "statusFail");
modelAndView.addObject("resultSts", resultSts);
request.getSession().invalidate();
return modelAndView;
}
}
//회원정보에서 스미싱 회원 여부 정보 조회
UserManageVO userManageVO = new UserManageVO();
userManageVO.setMberId(userId);
UserManageVO resultUserVO = userManageService.selectSmishingYnUserInfo(userManageVO);
String smishingYn = resultUserVO.getSmishingYn();
mjonMsgVO.setSmishingYn(smishingYn);
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n");
int FrBytes = smsCont.getBytes(charset).length;
if(FrBytes > 2000) {
modelAndView.addObject("message", "문자 내용은 2000Byte를 넘을 수 없습니다.");
modelAndView.addObject("result", "smsLengFail");
return modelAndView;
}
System.out.println("mjonMsgVO.getMsgType1() ::: "+mjonMsgVO.getMsgType());
String msgType = mjonMsgVO.getMsgType();
//내문자저장함에 저장후 문자를 발송하는경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함- 20220520 우영두
if(msgType.equals("P") || msgType.equals("L")) {
msgType = "6";
}else if(msgType.equals("S")) {
msgType = "4";
}
//메세지 타입이 단문이면 진짜 단문인지 한번더 확인해 준다.
if(msgType.equals("4")) {
//메세지 길이가 90Byte를초과 하거나, 그림 이미지가 있는경우 메세지 타입을 6으로 변경해준다.
if(FrBytes > 90 || mjonMsgVO.getImgFilePath().length > 0) {
msgType = "6";
}
}
mjonMsgVO.setMsgType(msgType);
//장문 메세지일 경우
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.setFileName1(imgFilePath);
}else if(i == 1) {
mjonMsgVO.setFileName2(imgFilePath);
}else {
mjonMsgVO.setFileName3(imgFilePath);
}
fileCount ++;
}
//첨부파일 갯수 셋팅해주기
mjonMsgVO.setFileCnt(Integer.toString(fileCount));
}
}
//파일 갯수는 있는데 파일 경로가 없는 경우 문자발송이 안되도록 튕겨내도록 함 - 20220520 우영두
if(fileCount > 0) {
if(mjonMsgVO.getFileName1() == null && mjonMsgVO.getFileName2() == null && mjonMsgVO.getFileName3() == null) {
modelAndView.addObject("message", "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다.");
modelAndView.addObject("result", "imgSourceFail");
modelAndView.addObject("resultSts", "0");
modelAndView.addObject("resultBlockSts", "0");
return modelAndView;
}
}
/*
* 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기
* 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회
* 조회 단가를 이용하여 총 결제 캐시 금액 계산
* 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌.
*/
MjonEventVO mjonEventVO = new MjonEventVO();
mjonEventVO.setMberId(userId);
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
//1.시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
//2.사용자 개인 단가 정보 불러오기
MberManageVO mberManageVO = new MberManageVO();
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
//3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
Float shortPrice = mberManageVO.getShortPrice();
Float longPrice = mberManageVO.getLongPrice();
Float picturePrice = mberManageVO.getPicturePrice();
Float picture2Price = mberManageVO.getPicture2Price();
Float picture3Price = mberManageVO.getPicture3Price();
//기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623
boolean compareEndDate = false;
float eventRemainCash = 0;
float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice());
if(eventMberInfo != null) {
String eventEndDate = eventMberInfo.getEventEndDate();
if(eventEndDate != null) {
compareEndDate = MJUtil.getCompareDate(eventEndDate);
eventRemainCash = (float) eventMberInfo.getEventRemainCash();
//이벤트 금액 및 기간 체크
if(!compareEndDate || eventRemainCash < paramEachPrice) {
if(!eventMberInfo.getEventStatus().equals("E")) {
//이벤트 상태값을 종료로 변경한다.
mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId());
mjonEventVO.setEventStatus("E");
mjonEventVO.setEventMemo("발송 최소 금액("+ paramEachPrice +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴");
mjonEventVO.setEventRemainCash(eventRemainCash);
mjonEventService.updateEventEndStatus(mjonEventVO);
eventMberInfo.setEventStatus("E");
}
}
}
}
//이벤트 진행 회원의 발송 단가 처리해주기
if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) {
shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice());
longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice());
picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice());
picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price());
picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price());
}else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//협의 단가가 없는 경우 시스템 단가 적용해 주기
shortPrice = (float) sysJoinSetVO.getShortPrice();
longPrice = (float) sysJoinSetVO.getLongPrice();
picturePrice = (float) sysJoinSetVO.getPicturePrice();
picture2Price = (float) sysJoinSetVO.getPicture2Price();
picture3Price = (float) sysJoinSetVO.getPicture3Price();
}
// 토탈금액 "," 리플레이스 처리
mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", ""));
float tmpOrgEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice());
float tmpOrgTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice());
System.out.println("mjonMsgVO.getMsgType2() ::: "+mjonMsgVO.getMsgType());
//각 문자 종류별 단가 셋팅해주기
float tmpEachPrice = 0;
if(mjonMsgVO.getMsgType().equals("4")) {
mjonMsgVO.setEachPrice(shortPrice.toString());
tmpEachPrice = shortPrice;
}else if(mjonMsgVO.getMsgType().equals("6")) {
if(mjonMsgVO.getFileName3() != null) {
mjonMsgVO.setEachPrice(picture3Price.toString());
tmpEachPrice = picture3Price;
}else if(mjonMsgVO.getFileName2() != null) {
mjonMsgVO.setEachPrice(picture2Price.toString());
tmpEachPrice = picture2Price;
}else if(mjonMsgVO.getFileName1() != null) {
mjonMsgVO.setEachPrice(picturePrice.toString());
tmpEachPrice = picturePrice;
}else {
mjonMsgVO.setEachPrice(longPrice.toString());
tmpEachPrice = longPrice;
}
}
//수신자 총 수 * 단가 를 통해 총 결제 금액 계산
int tmpTotCallCnt = mjonMsgVO.getCallToList().length;
float tmpTotPrice = tmpTotCallCnt * tmpEachPrice;
//화면에서 넘어온 파라미터 개별 단가와 컨트롤러에서 계산한 단가를 비교하여 맞지 않으면 컨트롤러 계산 단가 입력
if(tmpOrgEachPrice != tmpEachPrice) {
mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice));
System.out.println("화면 : tmpOrgEachPrice ::: "+tmpOrgEachPrice);
System.out.println("컨트롤러 : tmpEachPrice ::: "+tmpEachPrice);
}else {
System.out.println("tmpOrgEachPrice ::: "+tmpOrgEachPrice);
}
if(tmpOrgTotPrice != tmpTotPrice ) {
mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice));
System.out.println("화면 : tmpOrgTotPrice ::: "+tmpOrgTotPrice);
System.out.println("컨트롤러 : tmpTotPrice ::: "+tmpTotPrice);
}else {
System.out.println("tmpOrgTotPrice ::: "+tmpOrgTotPrice);
}
/*
* 개별단가 및 총결제 캐시 금액 체크 로직 종료
*
* */
//치환문자 체크 처리
String txtReplYn = mjonMsgVO.getTxtReplYn();
if(txtReplYn.equals("Y")) {
int totListCnt = mjonMsgVO.getCallToList().length;
String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트
String[] phone = mjonMsgVO.getCallToList(); //수신자 휴대폰 번호
String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트
String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트
String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트
String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트
//이름, 휴대폰, 치환문자 데이터가 없으면 취소 처리
if((nameList.length == 0 || nameList == null)
&& (rep1.length == 0 || rep1 == null)
&& (rep2.length == 0 || rep2 == null)
&& (rep3.length == 0 || rep3 == null)
&& (rep4.length == 0 || rep4 == null)) {
modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
// 치환문자 전체 필수체크 Start
boolean isRepCountOk = true;
if (mjonMsgVO.getSmsTxt().indexOf("[*이름*]") > -1) {
if(nameList.length != phone.length) {
isRepCountOk = false;
}
}
if (mjonMsgVO.getSmsTxt().indexOf("[*1*]") > -1) {
if(rep1.length != phone.length) {
isRepCountOk = false;
}
}
if (mjonMsgVO.getSmsTxt().indexOf("[*2*]") > -1) {
if(rep2.length != phone.length) {
isRepCountOk = false;
}
}
if (mjonMsgVO.getSmsTxt().indexOf("[*3*]") > -1) {
if(rep3.length != phone.length) {
isRepCountOk = false;
}
}
if (mjonMsgVO.getSmsTxt().indexOf("[*4*]") > -1) {
if(rep4.length != phone.length) {
isRepCountOk = false;
}
}
if (isRepCountOk == false) {
modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다");
modelAndView.addObject("result", "fail");
return modelAndView;
}
// End
//---------------------------------------------------------------------------------------------------------------
int msgLeng = 90; //단문 문자열 길이
if(msgType.equals("6")) {
msgLeng = 2000; //장문 문자열 길이
}
for(int i=0; i < totListCnt; i ++) {
String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용
/**
* 본문 내용 - 치환 처리 후 문자 길이 초과 여부만 체크
* 치환 리스트 중 데이터가 없는 경우 데이터 밀림방지를 위하여 공백 하나를 추가해줌
* 공백처리를 안하는 경우 데이터가 밀려서 치환되는 오류가 있어서 처리해줌
*
* */
int repCnt = 0;
smsTxt = smsTxt.replaceAll(String.valueOf((char)13), "");
if (smsTxt.indexOf("[*이름*]") > -1) {
if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ",")));
}else {
smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", "");
nameList[i] = " ";
}
repCnt++;
}
if (smsTxt.indexOf("[*1*]") > -1) {
if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) {
smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ",")));
}else {
smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", "");
rep1[i] = " ";
}
repCnt++;
}
if (smsTxt.indexOf("[*2*]") > -1) {
if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) {
smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ",")));
}else {
smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", "");
rep2[i] = " ";
}
repCnt++;
}
if (smsTxt.indexOf("[*3*]") > -1) {
if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) {
smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ",")));
}else {
smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", "");
rep3[i] = " ";
}
repCnt++;
}
if (smsTxt.indexOf("[*4*]") > -1) {
if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) {
smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ",")));
}else {
smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", "");
rep4[i] = " ";
}
repCnt++;
}
//문자열 바이트 수 구하기(한글 2Byte로 계산)
// 한글 3Byte로 하기 위해서는 StandardCharsets.UTF_8 로 변경하면 된다.
int bytes = smsTxt.getBytes(charset).length;
if(repCnt > 0) {
if(bytes > msgLeng) { //전송 문자 길이를 초과한 경우 전송 취소 - 단문 작성 후 치환했을 때 장문으로 길이가 초과되는 경우 체크
modelAndView.addObject("message", "문자 치환 후 전송 문자 길이를 초과하였습니다.");
modelAndView.addObject("result", "fail");
modelAndView.addObject("resultSts", "0");
modelAndView.addObject("resultBlockSts", "0");
return modelAndView;
}
}
}
mjonMsgVO.setNameList(nameList);
mjonMsgVO.setRep1List(rep1);
mjonMsgVO.setRep2List(rep2);
mjonMsgVO.setRep3List(rep3);
mjonMsgVO.setRep4List(rep4);
}
//현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크
String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO);
mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장
String totPrice = mjonMsgVO.getTotPrice();
String eachPrice = mjonMsgVO.getEachPrice();
if(msgType.equals("6")) {//문자 mms, lms 단가 설정하기
if(fileCount > 2) {//그림 이미지가 3개
eachPrice = mjonMsgVO.getP3Price();
}else if(fileCount > 1) {//그림 이미지가 2개
eachPrice = mjonMsgVO.getP2Price();
}else if(fileCount == 1) {//그림 이미지가 1개
eachPrice = mjonMsgVO.getpPrice();
}else {//장문 문자인 경우
eachPrice = mjonMsgVO.getmPrice();
}
}
BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN);
//현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송
//BigDecimal 비교 연산
// befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송
if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice,
mjonMsgVO.setBefCash(befCash.toString());
//문자 전송 그룹아이디 생성
mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId());
String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열
String[] tempNameList = new String[200]; //임시 이름 리스트 저장용 배열
String[] tempRep1List = new String[200]; //임시 치환문자1 리스트 저장용 배열
String[] tempRep2List = new String[200]; //임시 치환문자1 리스트 저장용 배열
String[] tempRep3List = new String[200]; //임시 치환문자1 리스트 저장용 배열
String[] tempRep4List = new String[200]; //임시 치환문자1 리스트 저장용 배열
String[] phoneList = mjonMsgVO.getCallToList();
String[] nameList = mjonMsgVO.getNameList();
String[] rep1List = mjonMsgVO.getRep1List();
String[] rep2List = mjonMsgVO.getRep2List();
String[] rep3List = mjonMsgVO.getRep3List();
String[] rep4List = mjonMsgVO.getRep4List();
int callToListCnt = mjonMsgVO.getCallToList().length;
mjonMsgVO.setTotalCallCnt(callToListCnt);
/**
* 예약 문자인 경우 시간 및 분할 시간 셋팅 해주기
*
*
* */
//분할문자 시간에 간격시간 더해주기
String dividDay = null;
Calendar cal = Calendar.getInstance();
//예약시간 변환
SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
int turmMin = 0;
int totalCallCnt = 0;
int divideCnt = 0;
int count = 1; //분할 카운트
if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅
Date toDate = transFormat.parse(mjonMsgVO.getReqDate());
cal.setTime(toDate); //예약 시간 캘린터 변수에 입력
//String 타입 시간 Int로 변환
turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격
dividDay = transFormat.format(cal.getTime());
totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수
divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수
}
//분할 예약 시간 저장 리스트 생성
List<String> dividDayList = new ArrayList<String>();
//서비스 단으로 특정 문자 건수 이상으로 한번에 보내지 않기 위해서 처리함
//200건이 넘으면 200개씩 서비스로 넘기고
if(callToListCnt > 200) {
int sendCnt = 0;
for(int i=0; i< callToListCnt; i++) {
//분할 발송을 체크 한 경우
if(mjonMsgVO.getDivideChk() != null) {
if(count > divideCnt) {
count = 1;
//분할 시간 간격을 증가시켜 준다.
cal.add(Calendar.MINUTE, turmMin);
dividDay = transFormat.format(cal.getTime());
dividDayList.add(dividDay);
//tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기
count++;
}else {
dividDayList.add(dividDay);
//tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기
count++;
}
}
if((i < callToListCnt -1) && sendCnt == 199) {
//sendCnt 200번째 값을 추가해준다.
tempPhoneList[sendCnt] = phoneList[i];
if(nameList.length > 0) {
tempNameList[sendCnt] = nameList[i];
}
if(rep1List.length > 0) {
tempRep1List[sendCnt] = rep1List[i];
}
if(rep2List.length > 0) {
tempRep2List[sendCnt] = rep2List[i];
}
if(rep3List.length > 0) {
tempRep3List[sendCnt] = rep3List[i];
}
if(rep4List.length > 0) {
tempRep4List[sendCnt] = rep4List[i];
}
List<String> arrPhoneList = new ArrayList<String>();
List<String> arrNameList = new ArrayList<String>();
List<String> arrRep1List = new ArrayList<String>();
List<String> arrRep2List = new ArrayList<String>();
List<String> arrRep3List = new ArrayList<String>();
List<String> arrRep4List = new ArrayList<String>();
for(String temp : tempPhoneList) {
if(temp != null) {
arrPhoneList.add(temp);
}
}
if(tempNameList.length > 0) {
for(String tmpName : tempNameList) {
if(tmpName != null) {
arrNameList.add(tmpName);
}
}
}
if(tempRep1List.length > 0) {
for(String tmpRep1 : tempRep1List) {
if(tmpRep1 != null) {
arrRep1List.add(tmpRep1);
}
}
}
if(tempRep2List.length > 0) {
for(String tmpRep2 : tempRep2List) {
if(tmpRep2 != null) {
arrRep2List.add(tmpRep2);
}
}
}
if(tempRep3List.length > 0) {
for(String tmpRep3 : tempRep3List) {
if(tmpRep3 != null) {
arrRep3List.add(tmpRep3);
}
}
}
if(tempRep4List.length > 0) {
for(String tmpRep4 : tempRep4List) {
if(tmpRep4 != null) {
arrRep4List.add(tmpRep4);
}
}
}
//리스트에 추가된 내용 만큼 임시 수신목록 배열에 넣어준다.
String[] sendPhoneList = new String[arrPhoneList.size()];
String[] sendNameList = new String[arrNameList.size()];
String[] sendRep1List = new String[arrRep1List.size()];
String[] sendRep2List = new String[arrRep2List.size()];
String[] sendRep3List = new String[arrRep3List.size()];
String[] sendRep4List = new String[arrRep4List.size()];
for(int j=0; j< arrPhoneList.size(); j++) {
sendPhoneList[j] = arrPhoneList.get(j);
}
for(int k=0; k< arrNameList.size(); k++) {
sendNameList[k] = arrNameList.get(k);
}
for(int k=0; k< arrRep1List.size(); k++) {
sendRep1List[k] = arrRep1List.get(k);
}
for(int k=0; k< arrRep2List.size(); k++) {
sendRep2List[k] = arrRep2List.get(k);
}
for(int k=0; k< arrRep3List.size(); k++) {
sendRep3List[k] = arrRep3List.get(k);
}
for(int k=0; k< arrRep4List.size(); k++) {
sendRep4List[k] = arrRep4List.get(k);
}
mjonMsgVO.setCallToList(sendPhoneList);
if(sendNameList.length > 0) {
mjonMsgVO.setNameList(sendNameList);
}
if(sendRep1List.length > 0) {
mjonMsgVO.setRep1List(sendRep1List);
}
if(sendRep2List.length > 0) {
mjonMsgVO.setRep2List(sendRep2List);
}
if(sendRep3List.length > 0) {
mjonMsgVO.setRep3List(sendRep3List);
}
if(sendRep4List.length > 0) {
mjonMsgVO.setRep4List(sendRep4List);
}
sendCnt = 0;
mjonMsgVO.setDividDay(dividDayList);
MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO);
mjonMsgVO.setAgentCode(returnVO.getAgentCode());
resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt());
resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt());
//발송 처리후 배열 초기화
Arrays.fill(tempPhoneList, null);
dividDayList.clear();
System.out.println("=========================================================================");
System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 199 resultSts ::: " + resultSts);
System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 199 resultBlockSts ::: " + resultBlockSts);
System.out.println("=========================================================================");
}else if((i == callToListCnt -1) && sendCnt < 200){//수신목록 마지막이면서 200개 미만으로 남은 경우 발송 처리해준다.
//마지막 리스트의 수신번호를 추가해 준다.
tempPhoneList[sendCnt] = phoneList[i];
if(nameList.length > 0) {
tempNameList[sendCnt] = nameList[i];
}
if(rep1List.length > 0) {
tempRep1List[sendCnt] = rep1List[i];
}
if(rep2List.length > 0) {
tempRep2List[sendCnt] = rep2List[i];
}
if(rep3List.length > 0) {
tempRep3List[sendCnt] = rep3List[i];
}
if(rep4List.length > 0) {
tempRep4List[sendCnt] = rep4List[i];
}
List<String> arrPhoneList2 = new ArrayList<String>();
List<String> arrNameList2 = new ArrayList<String>();
List<String> arrRep1List2 = new ArrayList<String>();
List<String> arrRep2List2 = new ArrayList<String>();
List<String> arrRep3List2 = new ArrayList<String>();
List<String> arrRep4List2 = new ArrayList<String>();
for(String temp : tempPhoneList) {
if(temp != null) {
arrPhoneList2.add(temp);
}
}
if(tempNameList.length > 0) {
for(String tmpName : tempNameList) {
if(tmpName != null) {
arrNameList2.add(tmpName);
}
}
}
if(tempRep1List.length > 0) {
for(String tmpRep1 : tempRep1List) {
if(tmpRep1 != null) {
arrRep1List2.add(tmpRep1);
}
}
}
if(tempRep2List.length > 0) {
for(String tmpRep2 : tempRep2List) {
if(tmpRep2 != null) {
arrRep2List2.add(tmpRep2);
}
}
}
if(tempRep3List.length > 0) {
for(String tmpRep3 : tempRep3List) {
if(tmpRep3 != null) {
arrRep3List2.add(tmpRep3);
}
}
}
if(tempRep4List.length > 0) {
for(String tmpRep4 : tempRep4List) {
if(tmpRep4 != null) {
arrRep4List2.add(tmpRep4);
}
}
}
String[] sendPhoneList2 = new String[arrPhoneList2.size()];
String[] sendNameList2 = new String[arrNameList2.size()];
String[] sendRep1List2 = new String[arrRep1List2.size()];
String[] sendRep2List2 = new String[arrRep2List2.size()];
String[] sendRep3List2 = new String[arrRep3List2.size()];
String[] sendRep4List2 = new String[arrRep4List2.size()];
for(int j=0; j< arrPhoneList2.size(); j++) {
sendPhoneList2[j] = arrPhoneList2.get(j);
}
for(int j=0; j< arrNameList2.size(); j++) {
sendNameList2[j] = arrNameList2.get(j);
}
for(int k=0; k< arrRep1List2.size(); k++) {
sendRep1List2[k] = arrRep1List2.get(k);
}
for(int k=0; k< arrRep2List2.size(); k++) {
sendRep2List2[k] = arrRep2List2.get(k);
}
for(int k=0; k< arrRep3List2.size(); k++) {
sendRep3List2[k] = arrRep3List2.get(k);
}
for(int k=0; k< arrRep4List2.size(); k++) {
sendRep4List2[k] = arrRep4List2.get(k);
}
mjonMsgVO.setCallToList(sendPhoneList2);
if(sendNameList2.length > 0) {
mjonMsgVO.setNameList(sendNameList2);
}
if(sendRep1List2.length > 0) {
mjonMsgVO.setRep1List(sendRep1List2);
}
if(sendRep2List2.length > 0) {
mjonMsgVO.setRep2List(sendRep2List2);
}
if(sendRep3List2.length > 0) {
mjonMsgVO.setRep3List(sendRep3List2);
}
if(sendRep4List2.length > 0) {
mjonMsgVO.setRep4List(sendRep4List2);
}
sendCnt = 0;
mjonMsgVO.setDividDay(dividDayList);
MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO);
mjonMsgVO.setAgentCode(returnVO.getAgentCode());
resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt());
resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt());
System.out.println("=========================================================================");
System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 200 resultSts ::: " + resultSts);
System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 200 resultBlockSts ::: " + resultBlockSts);
System.out.println("=========================================================================");
}else {
tempPhoneList[sendCnt] = phoneList[i];
if(nameList.length > 0) {//이름 치환문자가 있는 경우
tempNameList[sendCnt] = nameList[i];
}
if(rep1List.length > 0) {//치환1 문자가 있는 경우
tempRep1List[sendCnt] = rep1List[i];
}
if(rep2List.length > 0) {//치환2 문자가 있는 경우
tempRep2List[sendCnt] = rep2List[i];
}
if(rep3List.length > 0) {//치환3 문자가 있는 경우
tempRep3List[sendCnt] = rep3List[i];
}
if(rep4List.length > 0) {//치환4 문자가 있는 경우
tempRep4List[sendCnt] = rep4List[i];
}
sendCnt++;
}
}
}else {//200건 미만일 경우 한번에 발송 처리
//분할 발송을 체크 한 경우
if(mjonMsgVO.getDivideChk() != null) {
for(int i=0; i< callToListCnt; i++) {
if(count > divideCnt) {
count = 1;
//분할 시간 간격을 증가시켜 준다.
cal.add(Calendar.MINUTE, turmMin);
dividDay = transFormat.format(cal.getTime());
dividDayList.add(dividDay);
//tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기
count++;
}else {
dividDayList.add(dividDay);
//tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기
count++;
}
}
}
mjonMsgVO.setDividDay(dividDayList);
MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO);
mjonMsgVO.setAgentCode(returnVO.getAgentCode());
resultSts = Integer.parseInt(returnVO.getSendMsgCnt());
resultBlockSts = Integer.parseInt(returnVO.getSendMsgBlockCnt());
System.out.println("=========================================================================");
System.out.println("+++++++++++++++++++++++++++++++++++++++++++200건 미만 건수 선거문자 ==> resultSts ::: " + resultSts);
System.out.println("+++++++++++++++++++++++++++++++++++++++++++200건 미만 건수 선거문자 ==> resultBlockSts ::: " + resultBlockSts);
System.out.println("=========================================================================");
}
System.out.println("=========================================================================");
System.out.println("+++++++++++++++++++++++++++++++++++++++++++최종 건수 선거문자 ==> resultSts ::: " + resultSts);
System.out.println("+++++++++++++++++++++++++++++++++++++++++++최종 건수 선거문자 ==> resultBlockSts ::: " + resultBlockSts);
System.out.println("=========================================================================");
try {
//문자 발송 캐시 차감 해주기
/*MjonPayVO mjonPayVO = new MjonPayVO();
if(resultSts > 0 && resultBlockSts > 0) {
Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * resultBlockSts;
Float resultTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice());
Float endPrice = resultTotPrice - blockPrice;
mjonMsgVO.setTotPrice(Float.toString(endPrice));
//수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다.
int groupCnt = resultSts;
mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt));
//mjonMsgDAO.updateGroupMsgData(mjonMsgVO);
}
//1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다.
if(resultSts > 0) {
mjonPayVO.setCashId(idgenMjonCashId.getNextStringId());
mjonPayVO.setUserId(mjonMsgVO.getUserId());
mjonPayVO.setCash(-Float.parseFloat(mjonMsgVO.getTotPrice()));
mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId());
mjonPayVO.setMemo("SMS 문자 " + resultSts + "건 발송");
mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId());
mjonPayService.insertCash(mjonPayVO); //캐시차감
mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트
}
//문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다.
if(resultSts > 0) {
// 문자 전송 그룹 테이블에 정보 입력
int groupCnt = resultSts;
mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt));
mjonMsgService.insertGroupMsgData(mjonMsgVO);
//이벤트 회원 남은 캐시 업데이트
fnUpdateEventRemainCash(mjonPayVO);
}*/
//스팸문구 포함된 문자 발송의 경우 스팸 문구 내용도 별도 저장함.
String spamStatus = mjonMsgVO.getSpamStatus();
if(spamStatus == null) {
spamStatus = "N";
mjonMsgVO.setSpamStatus("N");
}
if(spamStatus.equals("Y")) {
int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO);
System.out.println("+++++++++++++스팸문구 발송 내용 등록 +++++++++++++++++++++ "+resultCnt);
}
} catch (Exception e) {
System.out.println("=========================================================================");
System.out.println("+++++++++++++++++++++++++++++ 선거문자 ==> MJ_MSG_GROUP && CASH INSER ERROR !!! : " + e.getMessage());
System.out.println("=========================================================================");
}
/*//문자 발송 처리
//resultSts = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO);
MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO);
resultSts = returnVO.getSendMsgCnt();
resultBlockSts = returnVO.getSendMsgBlockCnt();*/
}else {
modelAndView.addObject("message", "문자 발송에 필요한 보유 잔액이 부족 합니다.");
modelAndView.addObject("result", "fail");
modelAndView.addObject("resultSts", "0");
modelAndView.addObject("resultBlockSts", "0");
return modelAndView;
}
//문자 발송 후 남은 보유 캐시 정보 불러오기
String afterCash = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
modelAndView.addObject("afterCash", afterCash);
}catch(Exception e) {
System.out.println("=========================================================================");
System.out.println("+++++++++++++++++++++++++++++ 선거문자 ==> 기타 시스템 오류 !!! : " + e.getMessage());
System.out.println("=========================================================================");
logger.error(e.getMessage(), e);
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage());
}
//if(!resultSts.equals("0")) {
modelAndView.addObject("message", "문자 전송이 완료되었습니다.");
modelAndView.addObject("result", "success");
modelAndView.addObject("resultSts", resultSts);
modelAndView.addObject("resultBlockSts", resultBlockSts);
/*}else {
modelAndView.addObject("message", "문자 전송에 오류가 발생하였습니다.");
modelAndView.addObject("result", "fail");
modelAndView.addObject("resultSts", "0");
modelAndView.addObject("resultBlockSts", "0");
}*/
/**
* 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작
*
* */
try {
if(resultSts > 0) {//전송 결과가 한건 이상인 경우
String adminSmsNoticeYn = "Y";
String smishingYn = "N";
String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보
UserManageVO userManageVO = new UserManageVO();
userManageVO.setMberId(userId);
if(!userId.equals("")) {
userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO);
adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn();
smishingYn = userManageVO.getSmishingYn();
}
//법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송
if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y") || smishingYn.equals("Y")) {
if(spamStatus.equals("Y")) {
mjonMsgVO.setDelayYn("Y");
}else if(smishingYn.equals("Y")) {
mjonMsgVO.setSmishingYn("Y");
}
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
getAdminPhoneSendMsgData(mjonMsgVO);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
//Slack으로 메세지 전송 처리
MjonCommon comm = new MjonCommon();
comm.getAdminSandSlack(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());//그림 이미지 갯수
//예약문자를 발송하는 경우 문자 내용 앞에 "[예약]" 표시되도록 처리 - 법인폰으로 발송되는 문자내용 수정함.20221123 추가
//스팸/스미싱 대상자 문자를 발송하는 경우 문자 내용 앞에 "[발송지연문자]" 표시되도록 처리 - 법인폰으로 발송되는 문자내용 수정함.20221202 추가
String reserveYn = mjonMsgVO.getReserveYn();
String delayYn = mjonMsgVO.getDelayYn();
String smishingYn = mjonMsgVO.getSmishingYn();
String smsTxt = mjonMsgVO.getSmsTxt();
String transSmsTxt = smsTxt;
if(reserveYn.equals("Y")) {
if(smishingYn.equals("Y") || delayYn.equals("Y")) {
transSmsTxt = "[스미싱의심][예약]" + smsTxt;
}else {
transSmsTxt = "[예약]" + smsTxt;
}
}else if(delayYn.equals("Y")) {
transSmsTxt = "[스미싱의심]" + smsTxt;
}
//[예약], [발송지연문자] 문구 추가시 문자열 길이 및 문자 종류 재계산 하기
String charset = "euc-kr";
int bytes = transSmsTxt.getBytes(charset).length; //발송 문자 길이
if(bytes > 2000) {//문자열 길이가 2000을 넘어가면 [예약], [발송지연문자] 문구를 제외한 원래 문구를 넣어준다. 안그러면 문자전송이 실패하게 됨.
mjonMsgVO.setSmsTxt(smsTxt);
}else {
//[예약], [발송지연문자] 문구를 추가한 내용으로 메세지 내용을 셋팅해 준다.
mjonMsgVO.setSmsTxt(transSmsTxt);
if(bytes > 90) {//장문일 경우 문자타입을 변경해준다.
msgType = "6";
mjonMsgVO.setMsgType(msgType);
}
}
// 문자타입 구분
if (msgType.equals("4")) {
mjonMsgVO.setMsgDiv("S"); // 단문
}
else if (msgType.equals("6")) {
if (fileCount > 0) {
mjonMsgVO.setMsgDiv("P"); // 그림
mjonMsgVO.setNeoType("4");
}
else {
mjonMsgVO.setMsgDiv("L"); // 장문
}
}
// 문자타입별 대표전송사 정보
MjonMsgVO mjonMsgVO2 = new MjonMsgVO();
mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO);
// 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술
mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택
// 전송금액
mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액
mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액
//수신번호가 배열로 되어있어서 배열에 담아준다.
String[] phone = new String[1];
String callTo = "01084329333";
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");
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;
}
//이벤트 회원 캐시 변경 함수
public void fnUpdateEventRemainCash(MjonPayVO mjonPayVO) throws Exception{
//이벤트 회원인 경우 이벤트 캐시도 함께 차감.
MjonEventVO mjonEventVO = new MjonEventVO();
mjonEventVO.setMberId(mjonPayVO.getUserId());
mjonEventVO.setEventStatus("Y");
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
if(eventMberInfo != null) {
float evntRemainCash = (float) eventMberInfo.getEventRemainCash();
float totPrice = (float) Math.abs(mjonPayVO.getCash());
float totRemainCash = evntRemainCash - totPrice;
mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId());
if(totRemainCash <= 0.0) {//차감액이 남아있지 않으면 이벤트를 종료
//이벤트 상태값을 종료로 변경한다.
mjonEventVO.setEventStatus("E");
mjonEventVO.setEventRemainCash(0.0);
mjonEventService.updateEventEndStatus(mjonEventVO);
}else {//이벤트 회원 캐시 차감시킴
mjonEventVO.setEventRemainCash(totRemainCash);
mjonEventService.updateEventRemainCash(mjonEventVO);
}
}
}
/**
* 선거문자 내 문자함 저장 화면
* @param searchVO
* @param model
* @return "/web/mjon/msgcampain/insertMyMsgDataAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/insertMyMsgDataAjax.do"})
public ModelAndView insertMyMsgDataAjax(MjonMsgDataVO mjonMsgDataVO,
RedirectAttributes redirectAttributes,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(user != null) {
mjonMsgDataVO.setUserId(user.getId());
}else {
modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
//문자에 첨부된 이미지 파일 아이디를 셋팅해준다.
int i = 0;
for(String fileId : mjonMsgDataVO.getImgFileId()) {
if(i == 0) {
mjonMsgDataVO.setAtchFileId1(fileId);
}else if(i == 1) {
mjonMsgDataVO.setAtchFileId2(fileId);
}else if(i == 2) {
mjonMsgDataVO.setAtchFileId3(fileId);
}
i++;
}
// 디비에 문자 내용을 저장해 준다.
int resultSts = mjonMsgDataService.insertMyMsgDataAjax(mjonMsgDataVO);
if(resultSts > 0) {
modelAndView.addObject("message", "문자가 저장되었습니다.");
modelAndView.addObject("result", "success");
}else {
modelAndView.addObject("message", "문자가 저장이 실패 되었습니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 선거문자 이미지에디터 팝업
* @param searchVO
* @param model
* @return "/web/mjon/msgcampain/openImageEditorPopup.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/openImageEditorPopup.do"})
public String openImageEditorPopup(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{
// 그림문자 카테고리 리스트 불러오기
List<CateCode> cateConfList = letterService.selectCateConfWithList("N");
model.addAttribute("cateCodeList", cateConfList);
//그림 문자 리스트 불러오기
LetterVO letterVO = new LetterVO();
if(letterVO.getPageUnit() != 10) {
letterVO.setPageUnit(letterVO.getPageUnit());
}
/** paging */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(letterVO.getPageIndex());
paginationInfo.setRecordCountPerPage(letterVO.getPageUnit());
paginationInfo.setPageSize(letterVO.getPageSize());
letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
letterVO.setLastIndex(paginationInfo.getLastRecordIndex());
letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<?> resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO);
model.addAttribute("resultPhoList", resultPhoList);
paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
model.addAttribute("paginationInfo", paginationInfo);
return "web/msgdata/imageEditorPopup";
}
/**
* 선거문자 에디터에서 수정한 이미지 등록 Ajax
* @param mjonMsgDataVO
* @param model
* @return modelAndView
* @throws Exception
*/
@RequestMapping(value = {"/web/mjon/msgcampain/insertEditImageAjax.do"})
public ModelAndView insertEditImageAjax(final MultipartHttpServletRequest multiRequest
, MjonMsgDataVO mjonMsgDataVO
, RedirectAttributes redirectAttributes
, HttpServletRequest request) throws Exception {
//LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
String atchFileId = "";
String isThumbFile = "";
String imagePath = "";
final Map<String, MultipartFile> files = multiRequest.getFileMap();
String KeyStr = "CANVASIMG_";
Date now = new Date();
SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMdd");
String fdlDate = formatDate.format(now);
//로컬 과 개발서버의 이미지 저장 경로 분기처리
if(request.getServerName().equals("localhost")) {
imagePath = fileSaveDir+"src/main/webapp" + "/MMS/" + fdlDate;
}else {
/*imagePath = "C:/eGovFrameDev-3.9.0-64bit_ncms/workspace/mjon/src/main/webapp/MMS/" + fdlDate;*/
/*imagePath = "/usr/local/tomcat_mjon/webapps/mjon/MMS/" + fdlDate;*/
imagePath = fileSaveDir+"/file/MMS/" + fdlDate;
}
if (!files.isEmpty()) {
List<FileVO> result = fileUtil.parseImageFileInf(files, KeyStr, 0, atchFileId, imagePath, isThumbFile);
atchFileId = fileMngService.insertFileInfs(result);
FileVO tmpVO = new FileVO();
tmpVO.setAtchFileId(atchFileId); //insert 한 파일의 정보를 가지고 옴
FileVO fileVO = new FileVO();
fileVO = fileMngService.selectFileInf(tmpVO);
//저장한 파일의 경로 + 파일명
String filefullPath = fileVO.getFileStreCours() +"/"+ fileVO.getStreFileNm() + "." + fileVO.getFileExtsn();
modelAndView.addObject("atchFileId", atchFileId);
modelAndView.addObject("filefullPath", filefullPath);
modelAndView.addObject("result", "success");
//modelAndView.addObject("message", "이미지 업로드가 완료되었습니다.");
}
}catch(Exception e) {
logger.error(e.getMessage(), e);
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage());
}
return modelAndView;
}
/**
* 선거문자 내문자함 문자내용 선택시 정보 불러오기
* @param String msgId, String pageType
* @param model
* @return modelAndView
* @throws Exception
*/
@RequestMapping(value = {"/web/mjon/msgcampain/selectMsgAddInfoAjax.do"})
public ModelAndView selectMsgAddInfoAjax(@RequestParam Map<?, ?> commandMap
, MjonMsgDataVO mjonMsgDataVO
, HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
/*LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());*/
try {
//MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO();
//mjonMsgDataVO.setMsgId(commandMap.get("msgId").toString());
//mjonMsgDataVO.setPageType(commandMap.get("pageType").toString());
//내 문자함 내용 및 첨부파일 정보 불러오기
MjonMsgDataVO resultMsgInfo = mjonMsgDataService.selectMsgAddInfoAjax(mjonMsgDataVO);
//문자함 리스트의 첨부이미지 정보 불러오기
List<?> resultMsgAddPhotoInfo = mjonMsgDataService.selectMsgAddPhotoInfo(resultMsgInfo);
modelAndView.addObject("resultMsgInfo", resultMsgInfo);
modelAndView.addObject("resultMsgAddPhotoInfo", resultMsgAddPhotoInfo);
modelAndView.addObject("result", "success");
//modelAndView.addObject("message", "이미지 업로드가 완료되었습니다.");
}catch(Exception e) {
logger.error(e.getMessage(), e);
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage());
}
return modelAndView;
}
/**
* 선거문자 발송 - 엑셀파일 불러오기
* @param body
* @param uploadFile
* @param search
* @param result
* @param model
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/web/mjon/msgcampain/sendExelFilePhoneNumAjax.do")
@ResponseBody
public Object sendExelFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception {
JsonResult jr = new JsonResult();
jr.setSuccess(false);
jr.setMessage("엑셀 파일만 업로드할 수 있습니다.");
//final Map<String, MultipartFile> files = multiRequest.getFileMap();
List<MultipartFile> files = (List<MultipartFile>) multiRequest.getFiles("file0");
// 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx
int fileNameSplitCnt = 0;
if(!files.isEmpty()) {
fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length;
if (files.get(0).getSize() > 0
&& (files.get(0).getContentType().indexOf("spreadsheetml") > -1)
|| files.get(0).getContentType().indexOf("ms-excel") > -1
|| files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1
|| files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) {
// 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생
long fileSize = multiRequest.getFile("file0").getSize();
if(fileSize > 3374653) {
jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다.");
return jr;
}
String Ext = files.get(0).getOriginalFilename().split("[.]")[1];
String errMessage = "";
String cellValue = "";
//String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$";
String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$";
int errPhoneCnt = 0;
int errNameCnt = 0;
int errRep1Cnt = 0;
int errRep2Cnt = 0;
int errRep3Cnt = 0;
int errRep4Cnt = 0;
//엑셀 확장자에 따른 처리 로직 분리
if(Ext.equals("xls")) {
HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream());
HSSFSheet sheet = workbook.getSheetAt(0);
if(sheet.getLastRowNum() > 20000) { //
errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
jr.setSuccess(false);
jr.setMessage(errMessage);
return jr;
}
List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
PhoneVO pVO = new PhoneVO();
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
HSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> jm = new HashMap<>();
// 행의 두번째 열(이름부터 받아오기)
HSSFCell cell = null;
boolean errSts = true; //셀 값에 오류 여부 체크
for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요)
cellValue = "";
cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
//System.out.println("Cell 데이터가 없습니다.");
if(j == 1) {
if (sheet.getLastRowNum() == i) {
continue;
}
//errPhoneCnt++;
//errSts = false;
break;
}
}
if(null != cell){
switch(cell.getCellType()){ //숫자타임을 문자로 변환
case Cell.CELL_TYPE_NUMERIC:
cell.setCellType(Cell.CELL_TYPE_STRING);
}
cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ;
}
if(j == 0) {
//이름
boolean nmChk = getNameRepLenChk("name", cellValue);
if(nmChk && errSts) {
jm.put("name", cellValue);
}else {
errNameCnt++;
errSts = false;
break;
}
}
if(j == 1) {
//전화번호
if(cellValue.matches(phoneRegExp) && errSts) {
jm.put("phone", cellValue);
}else {
errPhoneCnt++;
errSts = false;
break;
}
}
if(j == 2) {
//치환1
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("replace1", cellValue);
}else {
errRep1Cnt++;
errSts = false;
break;
}
}
if(j == 3) {
//치환2
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("replace2", cellValue);
}else {
errRep2Cnt++;
errSts = false;
break;
}
}
if(j == 4) {
//치환3
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("replace3", cellValue);
}else {
errRep3Cnt++;
errSts = false;
break;
}
}
if(j == 5) {
//치환4
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("replace4", cellValue);
}else {
errRep4Cnt++;
errSts = false;
break;
}
}
}
if(null != jm.get("phone") && errSts) {
json.add(jm);
}
}
int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt;
int resultErrCntExceptPhone = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt;
jr.setData(json);
jr.setSuccess(true);
if(resultErrCnt > 0) {
jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건,\n이름 : 20byte, [*1*] [*2*] : 40byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건 있습니다.\n해당 건을 제외하고 문자 발송됩니다.");
}else {
jr.setMessage("");
}
}else { //확장자가 xlsx
OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream());
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기
opcPackage.close();
if(sheet.getLastRowNum() > 20000) { //
errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
jr.setSuccess(false);
jr.setMessage(errMessage);
return jr;
}
List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
PhoneVO pVO = new PhoneVO();
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
XSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> jm = new HashMap<>();
// 행의 두번째 열(이름부터 받아오기)
XSSFCell cell = null;
boolean errSts = true;
for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요)
cellValue = "";
cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
//System.out.println("Cell 데이터가 없습니다.");
if(j == 1) {
if (sheet.getLastRowNum() == i) {
continue;
}
//errPhoneCnt++;
//errSts = false;
break;
}
}
if(null != cell){
switch(cell.getCellType()){ //숫자타임을 문자로 변환
case Cell.CELL_TYPE_NUMERIC:
cell.setCellType(Cell.CELL_TYPE_STRING);
}
cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ;
}
if(j == 0) {
//이름
boolean nmChk = getNameRepLenChk("name", cellValue);
if(nmChk && errSts) {
jm.put("name", cellValue);
}else {
errNameCnt++;
errSts = false;
break;
}
}
if(j == 1) {
//전화번호
if(cellValue.matches(phoneRegExp) && errSts) {
jm.put("phone", cellValue);
}else {
errPhoneCnt++;
errSts = false;
break;
}
}
if(j == 2) {
//치환1
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("replace1", cellValue);
}else {
errRep1Cnt++;
errSts = false;
break;
}
}
if(j == 3) {
//치환2
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("replace2", cellValue);
}else {
errRep2Cnt++;
errSts = false;
break;
}
}
if(j == 4) {
//치환3
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("replace3", cellValue);
}else {
errRep3Cnt++;
errSts = false;
break;
}
}
if(j == 5) {
//치환4
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("replace4", cellValue);
}else {
errRep4Cnt++;
errSts = false;
break;
}
}
}
if(null != jm.get("phone") && errSts) {
json.add(jm);
}
}
int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt;
int resultErrCntExceptPhone = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt;
jr.setData(json);
jr.setSuccess(true);
if(resultErrCnt > 0) {
jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건,\n이름 : 20byte, [*1*] [*2*] : 40byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건 있습니다.\n해당 건을 제외하고 문자 발송됩니다.");
}else {
jr.setMessage("");
}
} //xlsx 처리 끝
}
}
return jr;
}
/**
*선거문자 발송 - TXT파일 불러오기
* @param body
* @param uploadFile
* @param search
* @param result
* @param model
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/web/mjon/msgcampain/sendTxtFilePhoneNumAjax.do")
@ResponseBody
public Object sendTxtFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception {
JsonResult jr = new JsonResult();
jr.setSuccess(false);
jr.setMessage("TXT 파일만 업로드할 수 있습니다.");
List<MultipartFile> files = (List<MultipartFile>) multiRequest.getFiles("file0");
if(!files.isEmpty()) {
if (files.get(0).getSize() > 0
|| files.get(0).getOriginalFilename().split("[.]")[1].indexOf("txt") > -1) {
// txt 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생
long fileSize = multiRequest.getFile("file0").getSize();
if(fileSize > 3374653) {
jr.setMessage("txt 파일은 3MB를 넘을수 없습니다.");
return jr;
}
//Multi file to file 변환해주기
File file = new File(files.get(0).getOriginalFilename());
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
fos.write(files.get(0).getBytes());
fos.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line = null;
String[] splitedStr = null;
String[] tempStr = null;
int errPhoneCnt = 0;
//String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$";
String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$";
List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
//파일 읽어서 탭으로 구분해주기
while ((line = reader.readLine()) != null) {
HashMap<String, String> jm = new HashMap<>();
splitedStr = null;
tempStr = null;
//txt 파일의 데이터가 탭 혹은 콤마로 구분되어 있는지 구분처리
tempStr = line.split("\t");
if(tempStr.length > 0) {
splitedStr = tempStr;
}else {
splitedStr = line.split(",");
}
for (int i = 0; i < splitedStr.length; i++) {
splitedStr[i] = splitedStr[i].trim();
if(i == 0) {
//이름
jm.put("name", splitedStr[i]);
}
if(i == 1) {
if(splitedStr[i].matches(phoneRegExp)) {
//휴대폰 번호
jm.put("phone", splitedStr[i]);
}else {
errPhoneCnt++;
}
}
if(i == 2) {
//치환1
jm.put("replace1", splitedStr[i]);
}
if(i == 3) {
//치환2
jm.put("replace2", splitedStr[i]);
}
if(i == 4) {
//치환3
jm.put("replace3", splitedStr[i]);
}
if(i == 5) {
//치환4
jm.put("replace4", splitedStr[i]);
}
}
if(jm.get("phone") != null) {
json.add(jm);
}
} // end while
jr.setData(json);
jr.setSuccess(true);
if(errPhoneCnt > 0) {
jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다.");
}else {
jr.setMessage("");
}
}
}
return jr;
}
/**
* 선거문자 엑셀 불러오기 레이어 팝업 화면
* @param searchVO
* @param model
* @return "/web/mjon/msgcampain/excelCallAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgcampain/excelCallAjax.do"})
public String excelCallAjax(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{
return "web/msgcampain/ExcelCallAjax";
}
/**
* 선거문자 발송 - 엑셀파일 불러오기
* @param body
* @param uploadFile
* @param search
* @param result
* @param model
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/web/mjon/msgcampain/excelCallProc.do")
@ResponseBody
public Object excelProc(@RequestBody(required = false) String body,
List<MultipartFile> uploadFile,
BindingResult result, Model model,
MultipartHttpServletRequest request) throws Exception {
JsonResult jr = new JsonResult();
jr.setSuccess(false);
jr.setMessage("엑셀 파일만 업로드할 수 있습니다.");
//String sReturn = super.checkReferer(model, request, "", "", "/sms/mms.do", "/sms/sms.do");
String sReturn = "";
if (!StringUtil.isEmpty(sReturn)) {
jr.setMessage("올바르지 않은 요청입니다.");
return jr;
}
//mime : application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
// application/vnd.ms-excel
if (uploadFile.get(0).getSize() > 0
&& (uploadFile.get(0).getContentType().indexOf("spreadsheetml") > -1)
|| uploadFile.get(0).getContentType().indexOf("ms-excel") > -1
|| uploadFile.get(0).getOriginalFilename().split("[.]")[1].indexOf("xlsx") > -1
|| uploadFile.get(0).getOriginalFilename().split("[.]")[1].indexOf("xls") > -1) {
String col = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
String[] cols = col.split(",");
//List<HashMap<String, String>> excel = ExcelUploadUtil.readExcel(request, super.getConfig().getUploadPathTemp(), cols, 2);
//List<HashMap<String, String>> excel = null;
String UploadPathTemp = "/temp";
//List<HashMap<String, String>> excel = ExcelUploadUtil.readExcel(request, super.getConfig().getUploadPathTemp(), cols, 2);
//List<HashMap<String, String>> excel = ExcelUploadUtil.readExcel(request, UploadPathTemp, cols, 2);
OPCPackage opcPackage = OPCPackage.open(uploadFile.get(0).getInputStream());
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기
String errMessage = "";
String cellValue = "";
if(sheet.getLastRowNum() > 5000) { //
errMessage = "5000줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
jr.setMessage(errMessage);
return jr;
}
//String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$";
String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$";
List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
PhoneVO pVO = new PhoneVO();
for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략)
XSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> jm = new HashMap<>();
jm.put("group", ""); //그룹 빈칸세팅
// 행의 두번째 열(이름부터 받아오기)
XSSFCell cell = null;
for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요)
cellValue = "";
cell = row.getCell(j); //이름/핸드폰/집사무실/메모1/메모2/메모3
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
}
if(null != cell){
switch(cell.getCellType()){ //숫자타임을 문자로 변환
case Cell.CELL_TYPE_NUMERIC:
cell.setCellType(Cell.CELL_TYPE_STRING);
}
cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ;
}
if(j == 0) {
//이름
jm.put("name", cellValue);
}
if(j == 1) {
//전화번호
if(cellValue.matches(phoneRegExp)) {
jm.put("receive", cellValue);
}
}
if(j == 2) {
//집사무실
jm.put("item2", cellValue);
}
if(j == 3) {
//메모1
jm.put("item3", cellValue);
}
if(j == 4) {
//메모2
jm.put("item4", cellValue);
}
if(j == 5) {
//메모3
jm.put("item5", cellValue);
}
}
if(null != jm.get("receive")) {
json.add(jm);
}
}
//json 형식에 맞게 변환
//[{phone: '전화번호', name: '주소록이름', group: '주소록 그룹 이름', item2: '집/사무실', item3: '메모1', item4: '메모2', item5: '메모3'}, {...}]
/*List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
PhoneVO pVO = new PhoneVO();*/
//TODO : 데이터 유효성 판단?
/*for (HashMap<String, String> map : excel) {
HashMap<String, String> jm = new HashMap<>();
//핸드폰
pVO.setNo(StringUtil.getString(map.get(cols[1])).trim());
if (StringUtil.isEmpty(pVO.getNo()))
continue;
jm.put("receive", pVO.getNo());
//이름
jm.put("name", StringUtil.getString(map.get(cols[0])).trim());
//그룹
jm.put("group", "");
//항목2(집/사무실) - 주의 : 옵션 항목이므로 전화번호가 없어도 스킵하면 안됨
pVO.setNo(StringUtil.getString(map.get(cols[2])).trim());
jm.put("item2", pVO.getNo());
//항목3
jm.put("item3", StringUtil.getString(map.get(cols[3])).trim());
//항목4
jm.put("item4", StringUtil.getString(map.get(cols[4])).trim());
//항목5
jm.put("item5", StringUtil.getString(map.get(cols[5])).trim());
json.add(jm);
}*/
jr.setData(json);
jr.setSuccess(true);
jr.setMessage("");
}
return jr;
}
public boolean getNameRepLenChk(String type, String value) {
boolean rtnValue = true;
if(type.equals("name")) {
String tmpNm = value;
int nmLen = tmpNm.length();
if(nmLen > 12) {
rtnValue = false;
}
}else if(type.equals("rep")) {
String tmpRep = value;
int repLen = tmpRep.length();
if(repLen > 20) {
rtnValue = false;
}
}
return rtnValue;
}
}