package itn.let.mjo.msgsent.web; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.service.EgovFileMngService; import itn.com.cmm.service.EgovFileMngUtil; import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.kakao.user.sent.service.KakaoSentService; 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.msgsent.service.MjonMsgSentService; import itn.let.mjo.msgsent.service.MjonMsgSentVO; @Controller public class MjonMsgSentController { @Resource(name = "MjonMsgSentService") private MjonMsgSentService mjonMsgSentService; @Resource (name = "AddrGroupService") private AddrGroupService addrGroupService; @Resource (name = "AddrService") private AddrService addrService; /** EgovMessageSource */ @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; @Resource(name="EgovFileMngUtil") private EgovFileMngUtil fileUtil; @Resource(name="EgovFileMngService") private EgovFileMngService fileMngService; @Resource(name = "KakaoSentService") private KakaoSentService kakaoSentService; private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentController.class); /** * 발송관리 화면 * @param searchVO * @param model * @return "/web/mjon/msgtxt/selectMsgTxtView.do" * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentView.do"}) public String selectMsgSentView(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); if(loginVO == null) { //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); return "redirect:/web/user/login/login.do"; } mjonMsgSentVO.setUserId(userId); /* //전체 발송 건수 통계 불러오기 mjonMsgSentVO.setMsgType(""); List totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); model.addAttribute("totalMsgCnt", totalMsgCnt); //단문 성공건, 실패건 불러오기 mjonMsgSentVO.setMsgType("4"); List smsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); model.addAttribute("smsMsgCnt", smsMsgCnt); //장문 성공건, 실패건 불러오기 mjonMsgSentVO.setMsgType("6"); mjonMsgSentVO.setFileCnt("0"); List lmsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); model.addAttribute("lmsMsgCnt", lmsMsgCnt); //그림문자 성공건, 실패건 불러오기 mjonMsgSentVO.setMsgType("6"); mjonMsgSentVO.setFileCnt("1"); List mmsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); model.addAttribute("mmsMsgCnt", mmsMsgCnt); */ //전체 발송 건수 통계 불러오기 mjonMsgSentVO.setMsgType(""); List totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO); model.addAttribute("totalMsgCnt", totalMsgCnt); List smsMsgCnt = new ArrayList(); List lmsMsgCnt = new ArrayList(); List mmsMsgCnt = new ArrayList(); totalMsgCnt.forEach(t->{ if (Integer.parseInt(t.getFilePath1())>0) { smsMsgCnt.add(t); } else if (Integer.parseInt(t.getFilePath2())>0) { lmsMsgCnt.add(t); } else if (Integer.parseInt(t.getFilePath3())>0) { mmsMsgCnt.add(t); } }); //단문 성공건, 실패건 불러오기 model.addAttribute("smsMsgCnt", smsMsgCnt); //장문 성공건, 실패건 불러오기 model.addAttribute("lmsMsgCnt", lmsMsgCnt); //그림문자 성공건, 실패건 불러오기 model.addAttribute("mmsMsgCnt", mmsMsgCnt); // 검색 리스트 불러오기 if(mjonMsgSentVO.getPageUnit() != 10) { mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); } //기본 내림차순 정렬 if(mjonMsgSentVO.getSearchSortOrd().equals("")) { mjonMsgSentVO.setSearchSortOrd("desc"); } //기본 등록일자 정렬 if(mjonMsgSentVO.getSearchSortCnd().equals("")) { mjonMsgSentVO.setSearchSortCnd("regdate"); } model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); model.addAttribute("siteId", mjonMsgSentVO.getSiteId()); return "web/msgsent/MsgSentView"; } /** * 발송관리 탭 리스트 화면 * @param searchVO * @param model * @return "/web/mjon/reservmsg/selectReservMsgListViewAjax.do" * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax.do"}) public String selectMsgSentListViewAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); mjonMsgSentVO.setUserId(userId); // 검색 리스트 불러오기 if(mjonMsgSentVO.getPageUnit() != 10) { mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); } //기본 내림차순 정렬 if(mjonMsgSentVO.getSearchSortOrd().equals("")) { mjonMsgSentVO.setSearchSortOrd("desc"); mjonMsgSentVO.setSearchSortCnd("regdate"); } if(mjonMsgSentVO.getListType().equals("")) { mjonMsgSentVO.setListType("groupList"); } //선택 탭 정보 저장 //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); /** pageing */ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); //전체 발송 리스트 불러오기 List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); model.addAttribute("resultAllSentList", resultAllSentList); model.addAttribute("resultAllSentCnt", resultAllSentList.size()); model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); model.addAttribute("paginationInfo", paginationInfo); model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); //발송 결과 성공 실패 건수 리스트 불러오기 List resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO); model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); String stateType = mjonMsgSentVO.getStateType(); String pageUrl = "web/msgsent/MsgSentAllListAjax"; if(stateType.equals("ready")) { pageUrl = "web/msgsent/MsgSentReadyListAjax"; }else if(stateType.equals("complete")) { pageUrl = "web/msgsent/MsgSentCompleteListAjax"; }else if(stateType.equals("fail")) { pageUrl = "web/msgsent/MsgSentFailListAjax"; } return pageUrl; } /** * 발송관리 건수별 상세 리스트 조회(전송건별) * @param searchVO * @param model * @return "/web/mjon/msgsent/selectMsgSFDetailListAjax.do" * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSFDetailListAjax.do"}) public String selectMsgSFDetailListAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); mjonMsgSentVO.setUserId(userId); // 검색 리스트 불러오기 if(mjonMsgSentVO.getPageUnit() != 10) { mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); } //기본 내림차순 정렬 if(mjonMsgSentVO.getSearchSortOrd().equals("")) { mjonMsgSentVO.setSearchSortOrd("desc"); mjonMsgSentVO.setSearchSortCnd("regdate"); } mjonMsgSentVO.setListType("privateList"); /** pageing */ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); //전체 발송 리스트 불러오기 List resultAllSentList = mjonMsgSentService.selectAllMsgSentDetailList(mjonMsgSentVO); model.addAttribute("resultAllSentList", resultAllSentList); model.addAttribute("resultAllSentCnt", resultAllSentList.size()); model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); model.addAttribute("paginationInfo", paginationInfo); model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); // JSPark 2023.02.28 => 위 쿼리에 문자결과 항목추가로 아래 데이터 불필요 //발송 결과 성공 실패 건수 리스트 불러오기 //List resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSFDetailList(mjonMsgSentVO); //model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); return "web/msgsent/MsgSentSFDetailListAjax"; } /** * 발송관리 문자 상세보기 내용 * @param searchVO * @param model * @return "/web/mjon/msgsent/selectMsgSentDetailDataAjax.do" * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentDetailDataAjax.do"}) public String selectMsgSentDetailDataAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); mjonMsgSentVO.setUserId(userId); //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) MjonMsgSentVO resultMsgDetail = mjonMsgSentService.selectMsgSentDetailDataAjax(mjonMsgSentVO); if(resultMsgDetail.getFileCnt() != "0") { if(resultMsgDetail.getFilePath1() != null) { String filePathId1 = resultMsgDetail.getFilePath1().substring(resultMsgDetail.getFilePath1().lastIndexOf("/")+1); int idx = filePathId1.lastIndexOf("."); String fileId = filePathId1.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId1", info.getAtchFileId()); model.addAttribute("fileSn1", info.getFileSn()); } if(resultMsgDetail.getFilePath2() != null) { String filePathId2 = resultMsgDetail.getFilePath2().substring(resultMsgDetail.getFilePath2().lastIndexOf("/")+1); int idx = filePathId2.lastIndexOf("."); String fileId = filePathId2.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId2", info.getAtchFileId()); model.addAttribute("fileSn2", info.getFileSn()); } if(resultMsgDetail.getFilePath3() != null) { String filePathId3 = resultMsgDetail.getFilePath3().substring(resultMsgDetail.getFilePath3().lastIndexOf("/")+1); int idx = filePathId3.lastIndexOf("."); String fileId = filePathId3.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId3", info.getAtchFileId()); model.addAttribute("fileSn3", info.getFileSn()); } } model.addAttribute("resultMsgDetail", resultMsgDetail); return "web/msgsent/MsgSentDetailPopAjax"; } /** * 발송관리 문자 상세보기 내용 * @param searchVO * @param model * @return "/web/mjon/msgsent/selectMsgSentDetailDataAjax.do" * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentDetailData2Ajax.do"}) public String selectMsgSentDetailData2Ajax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); mjonMsgSentVO.setUserId(userId); //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) MjonMsgSentVO resultMsgDetail = mjonMsgSentService.selectMsgSentDetailDataAjax2(mjonMsgSentVO); if(resultMsgDetail.getFileCnt() != "0") { if(resultMsgDetail.getFilePath1() != null) { String filePathId1 = resultMsgDetail.getFilePath1().substring(resultMsgDetail.getFilePath1().lastIndexOf("/")+1); int idx = filePathId1.lastIndexOf("."); String fileId = filePathId1.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId1", info.getAtchFileId()); model.addAttribute("fileSn1", info.getFileSn()); } if(resultMsgDetail.getFilePath2() != null) { String filePathId2 = resultMsgDetail.getFilePath2().substring(resultMsgDetail.getFilePath2().lastIndexOf("/")+1); int idx = filePathId2.lastIndexOf("."); String fileId = filePathId2.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId2", info.getAtchFileId()); model.addAttribute("fileSn2", info.getFileSn()); } if(resultMsgDetail.getFilePath3() != null) { String filePathId3 = resultMsgDetail.getFilePath3().substring(resultMsgDetail.getFilePath3().lastIndexOf("/")+1); int idx = filePathId3.lastIndexOf("."); String fileId = filePathId3.substring(0, idx); MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); model.addAttribute("atchFileId3", info.getAtchFileId()); model.addAttribute("fileSn3", info.getFileSn()); } } model.addAttribute("resultMsgDetail", resultMsgDetail); return "web/msgsent/MsgSentDetailPop2Ajax"; } /** * 발송 관리 문자 선택 삭제 기능 * @param searchVO * @param model * @return "web/mjon/msgsent/deleteMsgSentDataAjax.do" * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/deleteMsgSentDataAjax.do"}) public String deleteMsgSentDataAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); mjonMsgSentVO.setUserId(userId); //선택 문자 삭제 처리 int resultCnt = mjonMsgSentService.deleteMsgSentDataAjax(mjonMsgSentVO); /* * * 리스트 화면 불러오기 * * */ // 검색 리스트 불러오기 if(mjonMsgSentVO.getPageUnit() != 10) { mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); } //기본 내림차순 정렬 if(mjonMsgSentVO.getSearchSortOrd().equals("")) { mjonMsgSentVO.setSearchSortOrd("desc"); } //기본 등록일자 정렬 if(mjonMsgSentVO.getSearchSortCnd().equals("")) { mjonMsgSentVO.setSearchSortCnd("regdate"); } /** pageing */ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); //전체 발송 리스트 불러오기 List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); model.addAttribute("resultAllSentList", resultAllSentList); model.addAttribute("resultAllSentCnt", resultAllSentList.size()); model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); model.addAttribute("paginationInfo", paginationInfo); model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); String stateType = mjonMsgSentVO.getStateType(); String pageUrl = "web/msgsent/MsgSentAllListAjax"; if(stateType.equals("ready")) { pageUrl = "web/msgsent/MsgSentReadyListAjax"; }else if(stateType.equals("complete")) { pageUrl = "web/msgsent/MsgSentCompleteListAjax"; }else if(stateType.equals("fail")) { pageUrl = "web/msgsent/MsgSentFailListAjax"; } return pageUrl; } /** * 발송문자 수신번호 주소록에서 삭제 하기 * * @param MjonMsgSentVO * @param * @param sessionVO * @param model * @return * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/deleteAddrNoDataAjax.do"}) public ModelAndView deleteAddrNoDataAjax( @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, 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 { mjonMsgSentVO.setUserId(userId); } String listType = mjonMsgSentVO.getListType(); if(listType.equals("")) { mjonMsgSentVO.setListType("groupList"); } try { //문자 발송 테이블에서 수신자 목록 리스트 불러오기 List resultCallToList = mjonMsgSentService.selectCallToListData(mjonMsgSentVO); MjonMsgSentVO mjonMsgCallListVO = new MjonMsgSentVO(); //디비에서 불러온 수신자 번호 리스트 저장 mjonMsgCallListVO.setCallToList(resultCallToList); //아이디 저장 mjonMsgCallListVO.setUserId(userId); //주소록 디비에서 연락처 정보를 delete 시킴 int resultCnt = mjonMsgSentService.deleteAddrPhoneNo(mjonMsgCallListVO); modelAndView.addObject("status", "success"); modelAndView.addObject("message", "총 " + resultCnt + "건의 주소록을 삭제하였습니다."); modelAndView.addObject("resultCnt", resultCnt); } catch (Exception e) { modelAndView.addObject("status", "fail"); modelAndView.addObject("message", "주소록 삭제 중 오류가 발생하였습니다."); } return modelAndView; } /** * 발송문자 수신거부번호 등록 하기 * * @param MjonMsgSentVO * @param * @param sessionVO * @param model * @return * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/insertAddBlockNoDataAjax.do"}) public ModelAndView insertAddBlockNoDataAjax( @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, 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 { mjonMsgSentVO.setUserId(userId); } String listType = mjonMsgSentVO.getListType(); if(listType.equals("")) { mjonMsgSentVO.setListType("groupList"); } try { if("fail".equals(mjonMsgSentVO.getStateType())) { mjonMsgSentVO.setListType("privateList"); } //문자 발송 테이블에서 수신자 목록 리스트 불러오기 List resultCallToList = mjonMsgSentService.selectCallToListData(mjonMsgSentVO); MjonMsgSentVO mjonMsgCallListVO = new MjonMsgSentVO(); //디비에서 불러온 수신자 번호 리스트 저장 mjonMsgCallListVO.setCallToList(resultCallToList); //아이디 저장 mjonMsgCallListVO.setUserId(userId); //주소록 디비에서 연락처 정보를 delete 시킴 int resultCnt = mjonMsgSentService.insertAddBlockNoDataAjax(mjonMsgCallListVO); modelAndView.addObject("status", "success"); modelAndView.addObject("message", "총 " + resultCnt + "건의 수신거부번호를 등록하였습니다."); modelAndView.addObject("resultCnt", resultCnt); } catch (Exception e) { modelAndView.addObject("status", "fail"); modelAndView.addObject("message", "수신거부번호 등록 중 오류가 발생하였습니다."); } return modelAndView; } /** * 발송문자 주소록 그룹 등록 하기 * * @param MjonMsgSentVO * @param * @param sessionVO * @param model * @return * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/insertAddAddrGrpDataAjax.do"}) public ModelAndView insertAddAddrGrpDataAjax( @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, 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 { mjonMsgSentVO.setUserId(userId); } String listType = mjonMsgSentVO.getListType(); if(listType.equals("")) { mjonMsgSentVO.setListType("groupList"); } try { //문자 발송 테이블에서 수신자 목록 리스트 불러오기 List resultCallToList = mjonMsgSentService.selectCallToListData(mjonMsgSentVO); MjonMsgSentVO mjonMsgCallListVO = new MjonMsgSentVO(); //디비에서 불러온 수신자 번호 리스트 저장 mjonMsgCallListVO.setCallToList(resultCallToList); //아이디 저장 mjonMsgCallListVO.setUserId(userId); int resultCnt = 0; AddrGroupVO addrGroupVO = new AddrGroupVO(); //신규 그룹 등록 addrGroupVO.setAddrGrpNm(mjonMsgSentVO.getAddrGrpNm()); addrGroupVO.setMberId(userId); addrGroupVO.setFrstRegisterId(userId); String addrGrpId = addrGroupService.insertAddrGroup(addrGroupVO); if(addrGrpId != null) { List addrDataInfo = new ArrayList(); for(String phone : resultCallToList) { AddrVO addrVO = new AddrVO(); addrVO.setAddrPhoneNo(phone); addrVO.setAddrGrpId(addrGrpId); addrVO.setBookmark("N"); //북마크 : N addrVO.setFrstRegisterId(userId); addrVO.setMberId(userId); addrDataInfo.add(addrVO); } resultCnt = addrService.insertAddrList(addrDataInfo); } //주소록 디비에서 연락처 정보를 delete 시킴 //int resultCnt = mjonMsgSentService.insertAddBlockNoDataAjax(mjonMsgCallListVO); modelAndView.addObject("status", "success"); modelAndView.addObject("message", "총 " + resultCnt + "건의 수신번호를 등록하였습니다."); modelAndView.addObject("resultCnt", resultCnt); } catch (Exception e) { modelAndView.addObject("status", "fail"); modelAndView.addObject("message", "주소록 등록 중 오류가 발생하였습니다."); } return modelAndView; } /** * 발송관리 출력하기 팝업화면 * * @param MjonMsgSentVO * @param * @param sessionVO * @param model * @return * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/printMsgSentDataAjax.do"}) public String printMsgSentDataAjax( @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception { //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); if(userId.equals("")) { /*modelAndView.addObject("status", "loginFail"); modelAndView.addObject("message", "로그인이 필요합니다."); return modelAndView;*/ }else { mjonMsgSentVO.setUserId(userId); } // 검색 리스트 불러오기 if(mjonMsgSentVO.getPageUnit() != 10) { mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); } //기본 내림차순 정렬 if(mjonMsgSentVO.getSearchSortOrd().equals("")) { mjonMsgSentVO.setSearchSortOrd("desc"); mjonMsgSentVO.setSearchSortCnd("regdate"); } if(mjonMsgSentVO.getListType().equals("")) { mjonMsgSentVO.setListType("groupList"); } //선택 탭 정보 저장 //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); /** pageing */ PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); //전체 발송 리스트 불러오기 List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); model.addAttribute("resultAllSentList", resultAllSentList); model.addAttribute("resultAllSentCnt", resultAllSentList.size()); model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); model.addAttribute("paginationInfo", paginationInfo); model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); //발송 결과 성공 실패 건수 리스트 불러오기 List resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO); model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); model.addAttribute("userNm", userNm); Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; int day = cal.get(Calendar.DAY_OF_MONTH); model.addAttribute("year", year); model.addAttribute("month", month); model.addAttribute("day", day); return "web/msgsent/MsgSentPrintListPopUp"; } /** * 발송관리 엑셀다운로드 기능 * @param searchVO * @param model * @return "/web/mjon/msgsent/msgSentExcelDownLoadAjax.do" * @throws Exception */ @RequestMapping(value= {"/web/mjon/msgsent/msgSentExcelDownLoadAjax.do"}) public void msgSentExcelDownLoadAjax(MjonMsgSentVO mjonMsgSentVO, RedirectAttributes redirectAttributes, HttpServletRequest request, HttpServletResponse response , ModelMap model) throws Exception{ //로그인 권한정보 불러오기 LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); if(!userId.equals("")) { mjonMsgSentVO.setUserId(userId); }else { /*modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); modelAndView.addObject("result", "fail"); return modelAndView;*/ } String stateType = mjonMsgSentVO.getStateType(); String tabType = mjonMsgSentVO.getTabType(); // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. SXSSFWorkbook wb = new SXSSFWorkbook(100); String fileName ="발송관리 엑셀 리스트"; // 저장 파일명 String sheetTitle = "문자 발송 내역" ; // 셀 제목 Sheet sheet = wb.createSheet(sheetTitle); Cell cell = null; Row row = null; CellStyle style = wb.createCellStyle(); style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 style.setBorderLeft(CellStyle.BORDER_THIN); style.setBorderRight(CellStyle.BORDER_THIN); style.setBorderTop(CellStyle.BORDER_THIN); // 정렬 style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 Font font = wb.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold String type = ""; String fCnt = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try{ mjonMsgSentVO.setRecordCountPerPage(100000); mjonMsgSentVO.setFirstIndex(0); if("".equals(mjonMsgSentVO.getSearchSortCnd())){ //최초조회시 최신것 조회List mjonMsgSentVO.setSearchSortCnd("regdate"); mjonMsgSentVO.setSearchSortOrd("desc"); } //예약 관리 리스트 불러오기 List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); {//화면 리스트 row = sheet.createRow(0); sheet.setColumnWidth(1, 5000); // 발송일시 칼럼의 폭 조절 sheet.setColumnWidth(3, 10000); // 내용 칼럼의 폭 조절 sheet.setColumnWidth(4, 5000); // 받는사람 이름 칼럼의 폭 조절 sheet.setColumnWidth(5, 5000); // 받는사람 연락처 칼럼의 폭 조절 sheet.setColumnWidth(6, 5000); // 발신번호 칼럼의 폭 조절 sheet.setColumnWidth(7, 5000); // 발송상태 칼럼의 폭 조절 sheet.setColumnWidth(8, 5000); // 발송건수 칼럼의 폭 조절 //셀병합 처리 sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송일시 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //형태 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //내용 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //받는사람 이름 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); //받는사람 연락처 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //발신번호 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,7,7)); //발송상태 세로 셀병합 sheet.addMergedRegion(new CellRangeAddress(0,1,8,8)); //발송건수 세로 셀병합 cell = row.createCell(0); cell.setCellValue("번호"); cell.setCellStyle(style); cell = row.createCell(1); cell.setCellValue("발송일시"); cell.setCellStyle(style); cell = row.createCell(2); cell.setCellValue("형태"); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellValue("내용"); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellValue("수신자"); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue("수신번호"); cell.setCellStyle(style); cell = row.createCell(6); cell.setCellValue("발신번호"); cell.setCellStyle(style); cell = row.createCell(7); cell.setCellValue("발송상태"); cell.setCellStyle(style); cell = row.createCell(8); cell.setCellValue("발송건수"); cell.setCellStyle(style); cell = row.createCell(9); cell.setCellValue("발송결과"); sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); // 발송결과 건수 가로 셀병합 cell.setCellStyle(style); cell = row.createCell(10); cell.setCellStyle(style); cell = row.createCell(11); cell.setCellValue("금액"); sheet.addMergedRegion(new CellRangeAddress(0,0,11,12)); // 발송결과 건수 가로 셀병합 cell.setCellStyle(style); cell = row.createCell(12); cell.setCellValue("예약취소"); cell.setCellStyle(style); row = sheet.createRow(1); cell = row.createCell(0); cell.setCellStyle(style); cell = row.createCell(1); cell.setCellStyle(style); cell = row.createCell(2); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellStyle(style); cell = row.createCell(6); cell.setCellStyle(style); cell = row.createCell(7); cell.setCellStyle(style); cell = row.createCell(8); cell.setCellStyle(style); cell = row.createCell(9); cell.setCellValue("성공"); cell.setCellStyle(style); cell = row.createCell(10); cell.setCellValue("실패"); cell.setCellStyle(style); cell = row.createCell(11); cell.setCellValue("과금"); cell.setCellStyle(style); cell = row.createCell(12); cell.setCellValue("비과금"); cell.setCellStyle(style); } for(int i=0; i < resultAllSentList.size(); i++) { String msgType = "단문"; if(resultAllSentList.get(i).getMsgType().equals("6") && resultAllSentList.get(i).getFileCnt().equals("0")) { msgType = "장문"; }else if(resultAllSentList.get(i).getMsgType().equals("6") && !resultAllSentList.get(i).getFileCnt().equals("0")) { msgType = "그림"; } int excelLen = 0; row = sheet.createRow(i+2); excelLen = 12; for(int j=0 ; j <= excelLen ; j++) { cell = row.createCell(j); cell.setCellStyle(style); if(j==0) cell.setCellValue(i+1); //번호 if(j==1) cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); //발송일자 if(j==2) { type = resultAllSentList.get(i).getMsgType(); fCnt = resultAllSentList.get(i).getFileCnt(); if(type.equals("4")) { cell.setCellValue("단문"); //형태 }else { if(fCnt.equals("0")) { cell.setCellValue("장문"); //형태 }else { cell.setCellValue("그림"); //형태 } } } if(j==3) cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); //내용 if(j==4) cell.setCellValue((resultAllSentList.get(i)).getAddrNm()); if(j==5) cell.setCellValue((resultAllSentList.get(i)).getCallTo()); if(j==6) cell.setCellValue((resultAllSentList.get(i)).getCallFrom()); //발신번호 if(j==7) { //발송상태 처리해주기 String resvCYn = resultAllSentList.get(i).getReserveCYn(); String curState = resultAllSentList.get(i).getCurState(); if(resvCYn.equals("Y")) { cell.setCellValue("예약 취소"); //발송상태 }else { if(curState.equals("0")) { cell.setCellValue("발송 대기"); //발송상태 }else if(curState.equals("1")) { cell.setCellValue("발송중"); //발송상태 }else if(curState.equals("2")) { cell.setCellValue("결과 대기"); //발송상태 }else if(curState.equals("3")) { cell.setCellValue("발송 완료"); //발송상태 } } } if(j==8) cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); //발송건수 //발송결과 성공, 실패 처리 int resSucCnt = 0; int resFailCnt = 0; double resSucPrice = 0; double resFailPirce = 0; double eachPrice = Float.parseFloat(resultAllSentList.get(i).getEachPrice()); if("S".equals(resultAllSentList.get(i).getMsgResult())) { resSucCnt = 1; } else { resFailCnt = 1; } resSucPrice = eachPrice * resSucCnt; resFailPirce = eachPrice * resFailCnt; if(j==9) cell.setCellValue(resSucCnt); //발송결과 성공 if(j==10) cell.setCellValue(resFailCnt); //발송결과 실패 if(j==11) cell.setCellValue(resSucPrice); // 과금 금액 if(j==12) cell.setCellValue(resFailPirce); //비과금 금액 } } response.setHeader("Set-Cookie", "fileDownload=true; path=/"); SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA ); Date currentTime = new Date (); String mTime = mSimpleDateFormat.format ( currentTime ); fileName = fileName+"("+mTime+")"; response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); wb.write(response.getOutputStream()); }catch(Exception e) { response.setHeader("Set-Cookie", "fileDownload=false; path=/"); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Content-Type","text/html; charset=utf-8"); OutputStream out = null; try { out = response.getOutputStream(); byte[] data = new String("fail..").getBytes(); out.write(data, 0, data.length); } catch(Exception ignore) { ignore.printStackTrace(); } finally { if(out != null) try { out.close(); } catch(Exception ignore) {} } }finally { // 디스크 적었던 임시파일을 제거합니다. wb.dispose(); try { wb.close(); } catch(Exception ignore) {} } } }