package itn.let.mjo.addr.web;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
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.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.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.xssf.streaming.SXSSFWorkbook;
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.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
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.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.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.JsonResult;
import itn.com.cmm.LoginVO;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
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.AddrTransHistVO;
import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.msgdata.service.PhoneVO;
/**
* 주소록 관한 controller 클래스를 정의한다.
* @author ITN
* @since 2021.04.08
* @version 1.0
* @see
*
*
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2021.04.08 ITN 최초 생성
*
*
*/
@Controller
public class AddrController {
@Resource (name = "AddrService")
private AddrService addrService;
@Resource (name = "AddrGroupService")
private AddrGroupService addrGroupService;
/** EgovMessageSource */
@Resource(name="egovMessageSource")
EgovMessageSource egovMessageSource;
/**
* 주소록 리스트
* @param addrVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/selectAddrList.do")
public String selectAddrList(@ModelAttribute("searchVO") AddrVO addrVO
,ModelMap model) throws Exception {
if(addrVO.getPageUnit() != 10) {
addrVO.setPageUnit(addrVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(addrVO.getPageIndex());
paginationInfo.setRecordCountPerPage(addrVO.getPageUnit());
paginationInfo.setPageSize(addrVO.getPageSize());
addrVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
addrVO.setLastIndex(paginationInfo.getLastRecordIndex());
addrVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrVO.setSearchSortCnd("addrId");
addrVO.setSearchSortOrd("desc");
}
List addrList = addrService.selectAddrNewList(addrVO);
int totCnt = 0;
if(addrList.size() > 0) {
totCnt = addrList.get(0).getTotcnt();
}
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("addrList", addrList);
model.addAttribute("paginationInfo", paginationInfo);
return "/uss/ion/addr/AddrList";
}
/**
* 주소록 등록 페이지 이동
* @param addrVO
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/registAddr.do")
public String registAddr(ModelMap model) throws Exception {
return "/uss/ion/addr/AddrRegist";
}
/**
* 주소록 추가 로직
* @param addrVO
* @param redirectAttributes
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/insertAddr.do")
public String insertAddr(AddrVO addrVO
,RedirectAttributes redirectAttributes
,HttpServletRequest request) throws Exception {
try {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
if( addrVO.getMberId() == null || "".equals(addrVO.getMberId()) ) {
addrVO.setMberId(user.getId());
}
// 자주 보내는 번호
if("bookmark".equals(addrVO.getAddrGrpId())) {
addrVO.setBookmark("Y");
addrVO.setAddrGrpId("0");
}
// 주소록 그룹 내 휴대폰번호 중복체크
int usedCnt = addrService.selectDuplAddrCnt(addrVO);
if (usedCnt > 0) {
redirectAttributes.addFlashAttribute("message", "해당 그룹내 중복된 휴대폰 번호가 있습니다.");
}
else {
addrService.insertAddr(addrVO);
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
}
}catch (Exception e) {
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.insert"));
}
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/addr/selectAddrList.do");
return redirectUrlMaker.getRedirectUrl();
}
/**
* 주소록 수정 로직
*
* @param addrVO
* @param redirectAttributes
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/updateAddrByAdminAjax.do")
public ModelAndView updateAddrByAdminAjax(AddrVO addrVO
,RedirectAttributes redirectAttributes
,HttpServletRequest request
) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
try {
addrService.updateAddrByAdmin(addrVO);
}
catch(Exception e) {
System.out.println("");
isSuccess = false;
msg = "에러메시지 : " + e.getMessage();
e.printStackTrace();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
/**
* 주소록 수정 페이지 이동
*
* @param addrVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/editAddr.do")
public String editAddr(AddrVO addrVO
, ModelMap model ) throws Exception {
AddrVO addrInfo = addrService.selectAddrDetail(addrVO);
model.addAttribute("addrInfo", addrInfo);
return "/uss/ion/addr/AddrEdit";
}
/**
* 주소록 삭제 로직
*
* @param request
* @param addrVO
* @param redirectAttributes
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/deleteAddr.do")
public String deleteAddr (HttpServletRequest request, @ModelAttribute("searchVO") AddrVO addrVO
,RedirectAttributes redirectAttributes
,ModelMap model) throws Exception {
int result = addrService.deleteAddrByAdminAll(addrVO);
if (result > 0) {
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
} else {
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
}
redirectAttributes.addAttribute("pageIndex", addrVO.getPageIndex());
redirectAttributes.addAttribute("searchCondition", addrVO.getSearchCondition());
redirectAttributes.addAttribute("searchKeyword", addrVO.getSearchKeyword());
return "redirect:/uss/ion/addr/selectAddrList.do";
}
/**
* 주소록 타 회원으로 이전(복사) 처리
* @param addrVO
* @param addrGroupVO
* @param addrTransHistVO
* @return
* @throws Exception
*/
@RequestMapping("/web/mjon/addr/transAddrGroupAjax.do")
public ModelAndView transAddrGroupAjax(AddrVO addrVO, AddrGroupVO addrGroupVO, AddrTransHistVO addrTransHistVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
String successCd = addrService.updateAddrAnotherMember(addrVO, addrGroupVO, addrTransHistVO);
modelAndView.addObject("status", "success");
modelAndView.addObject("result", successCd);
}catch(Exception e) {
e.printStackTrace();
modelAndView.addObject("status", "fail");
return modelAndView;
}
return modelAndView;
}
/**
* 주소록 사용자 화면 껍데기
* @param addrVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/web/mjon/addr/selectAddrList.do")
public String selectAddrWebList(@ModelAttribute("searchVO") AddrVO addrVO
,AddrGroupVO addrGroupVO, ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == "") {
/*redirectAttributes.addFlashAttribute("fail", true);*/
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
return "/web/addr/AddrList";
}
/**
* 사용자 주소록 리스트 Ajax
* @param request
* @param model
* @param addrVO
* @param redirectAttributes
* @return
* @throws Exception
*/
@RequestMapping("/web/mjon/addr/selectAddrAjax.do")
public String selectAddrAjax(HttpServletRequest request, ModelMap model,
@ModelAttribute("searchVO") AddrVO addrVO) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrVO.setMberId(userId);
}
if(addrVO.getPageUnit() != 10) {
addrVO.setPageUnit(addrVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(addrVO.getPageIndex());
paginationInfo.setRecordCountPerPage(addrVO.getPageUnit());
paginationInfo.setPageSize(addrVO.getPageSize());
addrVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
addrVO.setLastIndex(paginationInfo.getLastRecordIndex());
addrVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrVO.setSearchSortCnd("addrId");
addrVO.setSearchSortOrd("desc");
}
List addrList = addrService.selectAddrList(addrVO);
int totCnt = 0;
if(addrList.size() > 0) {
totCnt = addrList.get(0).getTotcnt();
}
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("addrList", addrList);
model.addAttribute("startKeyword",addrVO.getStartKeyword());
model.addAttribute("userId", userId);
return "/web/addr/AddrListAjax";
}
/**
* 사용자 주소록 중복 리스트 Ajax
* @param request
* @param model
* @param addrVO
* @param redirectAttributes
* @return
* @throws Exception
*/
@RequestMapping("/web/mjon/addr/selectAddrDupliAjax.do")
public String selectAddrDupliAjax(HttpServletRequest request, ModelMap model,
@ModelAttribute("searchVO") AddrVO addrVO) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrVO.setMberId(userId);
}
if(addrVO.getPageUnit() != 10) {
addrVO.setPageUnit(addrVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(addrVO.getPageIndex());
paginationInfo.setRecordCountPerPage(addrVO.getPageUnit());
paginationInfo.setPageSize(addrVO.getPageSize());
addrVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
addrVO.setLastIndex(paginationInfo.getLastRecordIndex());
addrVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrVO.setSearchSortCnd("addrId");
addrVO.setSearchSortOrd("desc");
}
List addrDupliList = addrService.selectAddrDupliListByAll(addrVO);
int totCnt = 0;
if(addrDupliList.size() > 0) {
totCnt = addrDupliList.get(0).getTotcnt();
}
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("paginationInfo2", paginationInfo);
model.addAttribute("addrDupliList", addrDupliList);
return "/web/addr/AddrListDupliAjax";
}
@RequestMapping("/web/mjon/addr/selectAddrPrint.do")
public String selectAddrPrint(@RequestParam("cellCheck2") String[] cellCheck,
AddrVO addrVO,
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 != "") {
addrVO.setMberId(userId);
}
addrVO.setRecordCountPerPage(100000);
addrVO.setFirstIndex(0);
List addrList = addrService.selectAddrList(addrVO);
String chk = "";
for(int i=0; i 0) {
mv.addObject("result","dupl");
}else {
if(userId != "") {
try {
addrService.insertAddr(addrVO);
mv.addObject("result","success");
} catch (Exception e) {
e.printStackTrace();
mv.addObject("result","fail");
}
} else {
mv.addObject("result","fail");
}
}
return mv;
}
/**
* 주소록 다중수정 ajax
* @param addrCheck
* @param request
* @param addrVO
* @param model
* @param redirectAttributes
* @return
* @throws Exception
*/
@RequestMapping("/web/mjon/addr/updateAddrListAjax.do")
public ModelAndView updateAddrListAjax(HttpServletRequest request,
AddrVO addrVO, Model model
,RedirectAttributes redirectAttributes
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrVO.setLastUpdusrId(user.getId());
addrVO.setMberId(user.getId());
int listSize = addrVO.getAddrIds().length;
for(int i=0; i 주소록그룹 수정 추가
if (addrVO.getAddrGrpIds()[i].equals("bookmark")) {
// 자주보내는 번호
addrVO.setAddrGrpId("0");
addrVO.setBookmark("Y");
}
else {
addrVO.setAddrGrpId(addrVO.getAddrGrpIds()[i]);
addrVO.setBookmark("N");
}
addrVO.setAddrId(addrVO.getAddrIds()[i]);
if(addrVO.getAddrPhones().length > 0) {
addrVO.setAddrPhoneNo(addrVO.getAddrPhones()[i]);
}
else {
addrVO.setAddrPhoneNo(null);
}
if(addrVO.getAddrNms().length > 0) {
addrVO.setAddrNm(addrVO.getAddrNms()[i]);
}
else {
addrVO.setAddrNm(null);
}
if(!addrVO.getAddrInfo1s()[i].equals(null) || !"".equals(addrVO.getAddrInfo1s()[i])) {
addrVO.setAddrInfo1(addrVO.getAddrInfo1s()[i]);
}else {
addrVO.setAddrInfo1("");
}
if(!addrVO.getAddrInfo2s()[i].equals(null) || !"".equals(addrVO.getAddrInfo2s()[i])) {
addrVO.setAddrInfo2(addrVO.getAddrInfo2s()[i]);
}else {
addrVO.setAddrInfo2("");
}
if(!addrVO.getAddrInfo3s()[i].equals(null) || !"".equals(addrVO.getAddrInfo3s()[i])) {
addrVO.setAddrInfo3(addrVO.getAddrInfo3s()[i]);
}else {
addrVO.setAddrInfo3("");
}
if(!addrVO.getAddrInfo4s()[i].equals(null) || !"".equals(addrVO.getAddrInfo4s()[i])) {
addrVO.setAddrInfo4(addrVO.getAddrInfo4s()[i]);
}else {
addrVO.setAddrInfo4("");
}
addrService.updateAddr(addrVO);
modelAndView.addObject("result", "success");
} catch (Exception e) {
e.printStackTrace();
modelAndView.addObject("result", "fail");
return modelAndView;
}
}
return modelAndView;
}
/**
* 주소록 다중수정 ajax
* @param addrCheck
* @param request
* @param addrVO
* @param model
* @param redirectAttributes
* @return
* @throws Exception
*/
@RequestMapping("/web/mjon/addr/updateAddrAjax.do")
public ModelAndView updateAddrAjax(@RequestParam("addrCheck") String[] addrCheck, HttpServletRequest request,
AddrVO addrVO, Model model
,RedirectAttributes redirectAttributes
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrVO.setLastUpdusrId(user.getId());
addrVO.setMberId(user.getId());
for(String id:addrCheck) {
try {
if("0".equals (addrVO.getAddrGrpId())) {
addrVO.setBookmark("Y");
} else if(addrVO.getAddrGrpId() != null && !"".equals(addrVO.getAddrGrpId())) {
addrVO.setBookmark("N");
}
addrVO.setAddrId(id);
addrService.updateMemoAddr(addrVO);
modelAndView.addObject("result", "success");
} catch (Exception e) {
e.printStackTrace();
modelAndView.addObject("result", "fail");
return modelAndView;
}
}
return modelAndView;
}
/**
* 주소록 그룹이동 ajax
* @param addrCheck
* @param request
* @param addrVO
* @param model
* @param redirectAttributes
* @return
* @throws Exception
*/
@RequestMapping("/web/mjon/addr/updateAddrMoveGrpAjax.do")
public ModelAndView updateAddrMoveGrpAjax(@RequestParam("addrCheck") String[] addrCheck,
@RequestParam("addrPhoneNos") String[] addrPhoneNos,
HttpServletRequest request,
AddrVO addrVO, Model model,
RedirectAttributes redirectAttributes
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrVO.setLastUpdusrId(user.getId());
addrVO.setMberId(user.getId());
// 그룹미지정, 자주보내는 번호 구분처리
if("0".equals (addrVO.getAddrGrpId())) {
// 그룹미지정
addrVO.setBookmark("N");
}
else if("bookmark".equals (addrVO.getAddrGrpId())) {
// 자주보내는 번호
addrVO.setBookmark("Y");
addrVO.setAddrGrpId("0");
}
else if(addrVO.getAddrGrpId() != null && !"".equals(addrVO.getAddrGrpId())) {
addrVO.setBookmark("N");
}
/**
* 보내려는 그룹에 등록되어있는 전화번호를 변수에 담아둠
*/
List> addrPhoneList = addrService.selectPhoneNumInAddrGroup(addrVO);
String phoneNos = "";
for(int i=0; i addrPhoneList = addrService.selectPhoneNumInAddrGroup(addrVO);
String phoneNos = "";
for(int i=0; i addrIdList = addrVO.getAddrIdList();
List tempList = new ArrayList();
for(String seqStr : addrIdList) {
String seqId = seqStr.replace("[", "");
seqId = seqId.replace("]", "");
tempList.add(seqId);
}
addrVO.setAddrIdList(tempList);
List resultList = addrService.selectAddrDataList(addrVO);
if(resultList == null) {
modelAndView.addObject("status", "emptyList");
modelAndView.addObject("message", "가져온 주소록 목록이 없습니다.");
}else {
modelAndView.addObject("status", "success");
modelAndView.addObject("resultList", resultList);
modelAndView.addObject("resultListCnt", resultList.size());
}
return modelAndView;
}
//주소록 엑셀 다운로드
@RequestMapping("/web/mjon/addr/addrExcelDownload.do")
public void addrExcelDownload(@RequestParam("cellCheck") String[] cellCheck,
AddrVO addrVO,
HttpServletRequest request,
HttpServletResponse response ,
ModelMap model) throws Exception {
addrVO.setRecordCountPerPage(100000);
addrVO.setFirstIndex(0);
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrVO.setSearchSortCnd("addrId");
addrVO.setSearchSortOrd("desc");
}
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
// 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다.
SXSSFWorkbook wb = new SXSSFWorkbook(100);
CellStyle styleHeader = wb.createCellStyle();
styleHeader.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게
styleHeader.setBorderLeft(CellStyle.BORDER_THIN);
styleHeader.setBorderRight(CellStyle.BORDER_THIN);
styleHeader.setBorderTop(CellStyle.BORDER_THIN);
CellStyle styleList = wb.createCellStyle();
Font font = wb.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold
Cell cell = null;
Row row = null;
String fileName ="주소록";
String sheetTitle = "";
try{
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrVO.setSearchSortOrd("desc");
}
addrVO.setMberId(loginVO.getId());
List addrList = addrService.selectAddrList(addrVO);
{
// row, cell 개수 순서대로 증가용 필드
int rowNumber = 0;
int celNumber = 0;
//화면 리스트
sheetTitle = "주소록" ; //제목
Sheet sheet = wb.createSheet(sheetTitle);
row = sheet.createRow(rowNumber++);
row = sheet.createRow(rowNumber++); //줄추가
//cell = row.createCell(celNumber++);
//cell.setCellValue("번호");
//cell.setCellStyle(style);
int y = 0;
for(String field : cellCheck) {
//셀 칼럼 크기 설정
sheet.setColumnWidth(y, 4000);
cell = row.createCell(celNumber++);
cell.setCellValue(addrVO.getHeaderName(field));
cell.setCellStyle(styleHeader);
y++;
}
for(int i=0; i < addrList.size(); i++){
row = sheet.createRow(rowNumber++); //줄추가
celNumber = 0;
//cell = row.createCell(celNumber++);
//cell.setCellStyle(style);
//cell.setCellValue(i+1); //번호
for(String field : cellCheck) {
cell = row.createCell(celNumber++);
cell.setCellStyle(styleList);
cell.setCellValue(((AddrVO)addrList.get(i)).getFieldValue(field));
}
}
}
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", 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) {}
}
}
/**
* 주소록 대량등록 - 엑셀파일 불러오기
* @param body
* @param uploadFile
* @param search
* @param result
* @param model
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/web/mjon/addr/sendExelFilePhoneNumAjax.do")
@ResponseBody
public Object sendExelFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception {
JsonResult jr = new JsonResult();
jr.setSuccess(false);
jr.setMessage("엑셀 파일만 업로드할 수 있습니다.");
//final Map files = multiRequest.getFileMap();
List files = (List) multiRequest.getFiles("file0");
// 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx
int fileNameSplitCnt = 0;
if(!files.isEmpty()) {
fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length;
//System.out.println("fileNameSplitCnt : " + fileNameSplitCnt);
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;
int errMemoCnt = 0;
//엑셀 확장자에 따른 처리 로직 분리
if(Ext.equals("xls")) {
HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream());
HSSFSheet sheet = workbook.getSheetAt(0);
if(sheet.getLastRowNum() > 20000) { //
errMessage = "2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
jr.setSuccess(false);
jr.setMessage(errMessage);
return jr;
}
List> json = new ArrayList>();
PhoneVO pVO = new PhoneVO();
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
HSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap jm = new HashMap<>();
// 행의 두번째 열(이름부터 받아오기)
HSSFCell cell = null;
boolean errSts = true;
for(int j = 0 ; j < 7; j++){ //행읽기(6행까지나 2행까지만 필요)
cellValue = "";
cell = row.getCell(j); //이름/핸드폰/info1/info2/info3/info4/메모
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
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) {
// 문자열에서 숫자만 추출
cellValue = getOnlyNumber(cellValue);
//전화번호
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("info1", cellValue);
}else {
errRep1Cnt++;
errSts = false;
break;
}
}
if(j == 3) {
//치환2
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("info2", cellValue);
}else {
errRep2Cnt++;
errSts = false;
break;
}
}
if(j == 4) {
//치환3
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("info3", cellValue);
}else {
errRep3Cnt++;
errSts = false;
break;
}
}
if(j == 5) {
//치환4
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("info4", cellValue);
}else {
errRep4Cnt++;
errSts = false;
break;
}
}
if(j == 6) {
//메모
boolean repChk = getNameRepLenChk("memo", cellValue);
if(repChk && errSts) {
jm.put("memo", cellValue);
}else {
errMemoCnt++;
errSts = false;
break;
}
}
}
if(null != jm.get("phone")) {
json.add(jm);
}
}
int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt + errMemoCnt;
jr.setData(json);
jr.setSuccess(true);
if(resultErrCnt > 0) {
jr.setMessage("올바르지 않은 휴대폰 번호가 "+ resultErrCnt +" 건 있습니다.");
}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();
int totRowDataCnt = 0;
for(int r=1; r 20000) { //
if(totRowDataCnt > 20001) {
System.out.println("totRowDataCnt : " + totRowDataCnt);
errMessage = "2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
jr.setSuccess(false);
jr.setMessage(errMessage);
return jr;
}
List> json = new ArrayList>();
PhoneVO pVO = new PhoneVO();
System.out.println("sheet.getLastRowNum() : " + sheet.getLastRowNum());
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
XSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap jm = new HashMap<>();
// 행의 두번째 열(핸드폰부터 받아오기)
XSSFCell cell = null;
boolean errSts = true;
for(int j = 0 ; j < 7; j++){ //행읽기(6행까지나 2행까지만 필요)
cellValue = "";
cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5/메모
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
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) {
// 문자열에서 숫자만 추출
cellValue = getOnlyNumber(cellValue);
//전화번호
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("info1", cellValue);
}else {
errRep1Cnt++;
errSts = false;
break;
}
}
if(j == 3) {
//치환2
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("info2", cellValue);
}else {
errRep2Cnt++;
errSts = false;
break;
}
}
if(j == 4) {
//치환3
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("info3", cellValue);
}else {
errRep3Cnt++;
errSts = false;
break;
}
}
if(j == 5) {
//치환4
boolean repChk = getNameRepLenChk("rep", cellValue);
if(repChk && errSts) {
jm.put("info4", cellValue);
}else {
errRep4Cnt++;
errSts = false;
break;
}
}
if(j == 6) {
//메모
boolean repChk = getNameRepLenChk("memo", cellValue);
if(repChk && errSts) {
jm.put("memo", cellValue);
}else {
errMemoCnt++;
errSts = false;
break;
}
}
}
if(null != jm.get("phone") && errSts) {
json.add(jm);
}
}
int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt;
jr.setData(json);
jr.setSuccess(true);
if(resultErrCnt > 0) {
jr.setMessage("올바르지 않은 휴대폰 번호가 "+ resultErrCnt +" 건 있습니다.");
}else {
jr.setMessage("");
}
} //xlsx 처리 끝
}
else {
String ttt = files.get(0).getSize() + "_" +
files.get(0).getContentType() + "_" +
files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1];
jr.setSuccess(false);
jr.setMessage("엑셀파일 인식오류.");
//jr.setMessage("엑셀파일 인식오류" + ttt);
}
}
else {
jr.setSuccess(false);
jr.setMessage("엑셀파일 인식오류.");
}
return jr;
}
/**
* 주소록 대량등록 - TXT파일 불러오기
* @param body
* @param uploadFile
* @param search
* @param result
* @param model
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/web/mjon/addr/sendTxtFilePhoneNumAjax.do")
@ResponseBody
public Object sendTxtFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception {
JsonResult jr = new JsonResult();
jr.setSuccess(false);
jr.setMessage("TXT 파일만 업로드할 수 있습니다.");
List files = (List) 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;
int totRowNum = 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> json = new ArrayList>();
//파일 읽어서 탭으로 구분해주기
while ((line = reader.readLine()) != null) {
HashMap jm = new HashMap<>();
splitedStr = null;
tempStr = null;
//txt 파일의 데이터가 탭 혹은 콤마로 구분되어 있는지 구분처리
tempStr = line.split("\\,");
if(tempStr.length > 1) {
splitedStr = line.split("\\,");
}else {
splitedStr = line.split("\t");;
}
for (int i = 0; i < splitedStr.length; i++) {
splitedStr[i] = splitedStr[i].trim();
if(i == 0) {
//이름
jm.put("name", splitedStr[i]);
}
if(i == 1) {
// 문자열에서 숫자만 추출
splitedStr[i] = getOnlyNumber(splitedStr[i]);
if(splitedStr[i].matches(phoneRegExp)) {
//휴대폰 번호
jm.put("phone", splitedStr[i]);
}else {
errPhoneCnt++;
}
}
if(i == 2) {
//info1
jm.put("info1", splitedStr[i]);
}
if(i == 3) {
//info2
jm.put("info2", splitedStr[i]);
}
if(i == 4) {
//info3
jm.put("info3", splitedStr[i]);
}
if(i == 5) {
//info4
jm.put("info4", splitedStr[i]);
}
if(i == 6) {
//메모
jm.put("memo", splitedStr[i]);
}
}
if(jm.get("phone") != null) {
json.add(jm);
}
totRowNum++;
} // end while
jr.setData(json);
jr.setSuccess(true);
if (totRowNum > 20000) {
jr.setMessage("20000");
}
else {
if(errPhoneCnt > 0) {
jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다.");
}else {
jr.setMessage("");
}
}
}
}
return jr;
}
/**
* 주소록 대량등록 저장
* @param searchVO
* @param model
* @return "/web/mjon/addr/addrMassInsertByTempAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/addr/addrMassInsertByTempAjax.do"})
public ModelAndView addrMassInsertByTempAjax(@ModelAttribute("searchVO") AddrVO addrVO,
RedirectAttributes redirectAttributes,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//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}$";
boolean isSuccess = true;
String msg = "";
int resultCnt = 0;
int dupliCnt = 0; // 중복 데이터 수
int errPhoneCnt = 0;
List addrMassDupliList = new ArrayList(); // 중복 휴대폰번호
try {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId.equals("")) {
isSuccess = false;
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", "로그인 후 이용이 가능합니다.");
return modelAndView;
}
else {
addrVO.setMberId(userId);
}
//회원별 주소록 전체 갯수 조회
int addrBefAfterCnt = 0;
int addrBefCnt = addrService.selectAddrTotalCount(addrVO);
int addrNewCnt = addrVO.getPhoneList().length; //신규 추가할 주소록 갯수
int sumAddrCnt = addrBefCnt + addrNewCnt; //기존 + 신규 주소록 합산
// 신규 주소록 여부 체크
if (addrVO.getAddrGrpId().equals("NEW")) {
AddrGroupVO addrGroupVO = new AddrGroupVO();
addrGroupVO.setMberId(userId);
addrGroupVO.setAddrGrpNm(addrVO.getAddrGrpNm());
// 정렬순서
int nextOrderNumber = addrGroupService.selectMaxOrderNumber(addrGroupVO);
addrGroupVO.setGrpOrder(nextOrderNumber);
addrGroupService.insertAddrGroup(addrGroupVO);
// 신규 추가한 그룹아이디
addrVO.setAddrGrpId(addrGroupVO.getAddrGrpId());
}
// 그룹미지정, 자주보내는 번호 구분처리
if("bookmark".equals (addrVO.getAddrGrpId())) {
// 자주보내는 번호
addrVO.setBookmark("Y");
addrVO.setAddrGrpId("0");
}
else {
addrVO.setBookmark("N");
}
List addrDataInfo = new ArrayList();
if(addrBefCnt < 100000) { // 기존 등록된 주소록이 10만건 미만이면
//받는사람 리스트 건수 체크해주기
if(sumAddrCnt > 100000) {
isSuccess = false;
msg = "주소록은 총 10만개까지만 등록이 가능합니다.";
}
else {
for(int i=0; i < addrNewCnt; i++) {
AddrVO tempAddrVO = new AddrVO();
if(addrVO.getNameList().length > 0) {
if(addrVO.getNameList()[i].equals("-")) {
tempAddrVO.setAddrNm(null);
}else {
String tmpNm = addrVO.getNameList()[i].trim().replaceAll("§", ",");
int nmLen = tmpNm.length();
if(nmLen > 12) {
//isSuccess = false;
//msg = "이름 항목의 내용(\" " + tmpNm + " \")이 길이를 초과하여 입력되었습니다. 12글자 이하로 입력해 주세요.";
//break;
tempAddrVO.setAddrNm(addrVO.getNameList()[i].trim().replaceAll("§", ",").substring(0, 12));
}else {
tempAddrVO.setAddrNm(addrVO.getNameList()[i].trim().replaceAll("§", ","));
}
}
}
else {
tempAddrVO.setAddrNm(null);
}
if(addrVO.getPhoneList().length > 0) {
if(addrVO.getPhoneList()[i].equals("-")) {
tempAddrVO.setAddrPhoneNo(null);
}else {
tempAddrVO.setAddrPhoneNo(addrVO.getPhoneList()[i].trim().replaceAll("§", ","));
}
}
else {
tempAddrVO.setAddrPhoneNo(null);
}
if(addrVO.getInfo1List().length > 0) {
if(addrVO.getInfo1List()[i].equals("-")) {
tempAddrVO.setAddrInfo1(null);
}else {
String tmpInfo1 = addrVO.getInfo1List()[i].replaceAll("§", ",");
int info1Len = tmpInfo1.length();
if(info1Len > 20) {
//isSuccess = false;
//msg = "[*1*] 항목의 내용(\" " + tmpInfo1 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요.";
//break;
tempAddrVO.setAddrInfo1(addrVO.getInfo1List()[i].replaceAll("§", ",").substring(0, 20));
}else {
tempAddrVO.setAddrInfo1(addrVO.getInfo1List()[i].replaceAll("§", ","));
}
}
}
else {
tempAddrVO.setAddrInfo1(null);
}
if(addrVO.getInfo2List().length > 0) {
if(addrVO.getInfo2List()[i].equals("-")) {
tempAddrVO.setAddrInfo2(null);
}else {
String tmpInfo2 = addrVO.getInfo2List()[i].replaceAll("§", ",");
int info2Len = tmpInfo2.length();
if(info2Len > 20) {
//isSuccess = false;
//msg = "[*2*] 항목의 내용(\" " + tmpInfo2 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요.";
//break;
tempAddrVO.setAddrInfo2(addrVO.getInfo2List()[i].replaceAll("§", ",").substring(0, 20));
}else {
tempAddrVO.setAddrInfo2(addrVO.getInfo2List()[i].replaceAll("§", ","));
}
}
}
else {
tempAddrVO.setAddrInfo2(null);
}
if(addrVO.getInfo3List().length > 0) {
if(addrVO.getInfo3List()[i].equals("-")) {
tempAddrVO.setAddrInfo3(null);
}else {
String tmpInfo3 = addrVO.getInfo3List()[i].replaceAll("§", ",");
int info3Len = tmpInfo3.length();
if(info3Len > 20) {
//isSuccess = false;
//msg = "[*3*] 항목의 내용(\" " + tmpInfo3 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요.";
//break;
tempAddrVO.setAddrInfo3(addrVO.getInfo3List()[i].replaceAll("§", ",").substring(0, 20));
}else {
tempAddrVO.setAddrInfo3(addrVO.getInfo3List()[i].replaceAll("§", ","));
}
}
}
else {
tempAddrVO.setAddrInfo3(null);
}
if(addrVO.getInfo4List().length > 0) {
if(addrVO.getInfo4List()[i].equals("-")) {
tempAddrVO.setAddrInfo4(null);
}else {
String tmpInfo4 = addrVO.getInfo4List()[i].replaceAll("§", ",");
int info4Len = tmpInfo4.length();
if(info4Len > 20) {
//isSuccess = false;
//msg = "[*4*] 항목의 내용(\" " + tmpInfo4 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요.";
//break;
tempAddrVO.setAddrInfo4(addrVO.getInfo4List()[i].replaceAll("§", ",").substring(0, 20));
}else {
tempAddrVO.setAddrInfo4(addrVO.getInfo4List()[i].replaceAll("§", ","));
}
}
}
else {
tempAddrVO.setAddrInfo4(null);
}
if(addrVO.getMemoList().length > 0) {
if(addrVO.getMemoList()[i].equals("-")) {
tempAddrVO.setAddrComment(null);
}else {
String tmpComment = addrVO.getMemoList()[i].replaceAll("§", ",");
int commLen = tmpComment.length();
if(commLen > 125) {
//isSuccess = false;
//msg = "메모 항목의 내용(\" " + tmpComment + " \")이 길이를 초과하여 입력되었습니다. 100글자 이하로 입력해 주세요.";
//break;
tempAddrVO.setAddrComment(addrVO.getMemoList()[i].replaceAll("§", ",").substring(0, 125));
}else {
tempAddrVO.setAddrComment(addrVO.getMemoList()[i].replaceAll("§", ","));
}
}
}
else {
tempAddrVO.setAddrComment(null);
}
tempAddrVO.setMberId(userId);
tempAddrVO.setFrstRegisterId(userId);
tempAddrVO.setAddrGrpId(addrVO.getAddrGrpId()); // 그룹 지정
// 그룹미지정, 자주보내는 번호 구분처리
if("Y".equals (addrVO.getBookmark())) {
// 자주보내는 번호
tempAddrVO.setBookmark("Y");
tempAddrVO.setAddrGrpId("0");
}
else {
tempAddrVO.setBookmark("N");
}
AddrVO addrVO2 = new AddrVO();
addrVO2.setMberId(userId);
addrVO2.setAddrGrpId(addrVO.getAddrGrpId()); // 그룹 지정
addrVO2.setAddrPhoneNo(addrVO.getPhoneList()[i]); // 연락처
// 휴대폰 유효성 검사
boolean isPhoneNoErr = true;
if(addrVO.getPhoneList()[i].matches(phoneRegExp)) {
isPhoneNoErr = false; // 유효성 통과
}else {
errPhoneCnt++;
}
//int usedCnt = addrService.selectDuplAddrCnt(addrVO2);
if(isPhoneNoErr == false) {
//주소록 리스트에 데이터 추가해 주기
addrDataInfo.add(tempAddrVO);
}
}
System.out.println("======================================================");
System.out.println("+++++++++++++++++++++++++ isSuccess ::: "+isSuccess);
System.out.println("======================================================");
//주소록에 데이터 추가해 주기
if (isSuccess == true && addrDataInfo.size() > 0) {
// 주소록 대량등록 By Temp 주소록 All
resultCnt = addrService.insertAddrByTempAddrAll(addrDataInfo, addrVO);
addrBefAfterCnt = addrService.selectAddrTotalCount(addrVO);
addrMassDupliList = addrService.selectTempAddrDupliList(addrVO);
resultCnt = addrBefAfterCnt - addrBefCnt;
dupliCnt = addrNewCnt - resultCnt;
}
}
}
else {
isSuccess = false;
msg = "주소록은 총 10만개까지만 등록이 가능합니다.";
}
}
catch(Exception e) {
isSuccess = false;
msg = "주소록 저장에 오류가 발생하였습니다. 시스템 관리자에게 문의 바랍니다.";
System.out.println("==============================================");
System.out.println("+++++++++++++++++++ addrMassInsertByTempAjax Error ::: "+e.getMessage());
System.out.println("==============================================");
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
modelAndView.addObject("resultCnt", resultCnt);
modelAndView.addObject("dupliCnt", dupliCnt);
modelAndView.addObject("errPhoneCnt", errPhoneCnt);
modelAndView.addObject("addrMassDupliList", addrMassDupliList);
return modelAndView;
}
/**
* 주소록 그룹 목록
* @param searchVO
* @param model
* @return "/web/mjon/addr/addrGroupListAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/addr/addrGroupListAjax.do"})
public ModelAndView addrGroupListAjax(@ModelAttribute("searchVO") AddrGroupVO addrGroupVO,
RedirectAttributes redirectAttributes,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
List addrGroupList = null;
try {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrGroupVO.setMberId(userId);
}
if(addrGroupVO.getPageUnit() != 10) {
addrGroupVO.setPageUnit(addrGroupVO.getPageUnit());
}
if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrGroupVO.setSearchSortCnd("grpOrder");
addrGroupVO.setSearchSortOrd("desc");
}
addrGroupVO.setSiteId("web");
addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
model.addAttribute("addrGroupList", addrGroupList);
return modelAndView;
}
/**
* 주소록 그룹별 중복 연락처 목록
* @param searchVO
* @param model
* @return "/web/mjon/addr/addrDupliListAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/addr/addrDupliListAjax.do"})
public ModelAndView addrDupliListAjax(@ModelAttribute("searchVO") AddrVO addrVO,
RedirectAttributes redirectAttributes,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
List addrDupliList = null;
try {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrVO.setMberId(userId);
// 주소록 그룹별 중복 연락처 목록
addrDupliList = addrService.selectAddrDupliList(addrVO);
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
model.addAttribute("addrDupliList", addrDupliList);
return modelAndView;
}
/**
* 주소록 그룹별 중복 연락처 삭제
* @param searchVO
* @param model
* @return "/web/mjon/addr/deleteAddrDupliList.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/addr/deleteAddrDupliListAjax.do"})
public ModelAndView deleteAddrDupliListAjax(@ModelAttribute("searchVO") AddrVO addrVO,
RedirectAttributes redirectAttributes,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
try {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrVO.setMberId(userId);
// 주소록 그룹별 중복 연락처 삭제
addrService.deleteAddrDupliList(addrVO);
}
else {
isSuccess = false;
msg = "로그인후 이용하세요.";
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
/**
* 주소록 그룹별 중복 연락처 삭제
* @param searchVO
* @param model
* @return "/web/mjon/addr/deleteAddrByAllDupliListAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/addr/deleteAddrByAllDupliListAjax.do"})
public ModelAndView deleteAddrByAllDupliListAjax(@ModelAttribute("searchVO") AddrVO addrVO,
RedirectAttributes redirectAttributes,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
try {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrVO.setMberId(userId);
// 주소록 그룹별 중복 연락처 삭제
addrService.deleteAddrDupliListByAll(addrVO);
}
else {
isSuccess = false;
msg = "로그인후 이용하세요.";
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
public boolean getNameRepLenChk(String type, String value) {
boolean rtnValue = true;
// JSPark 2023.02.17 : 글자길이체크 주석처리 => 저장시 절삭하기 때문
/*
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;
}
}else if(type.equals("memo")) {
String tmpRep = value;
int repLen = tmpRep.length();
if(repLen > 120) {
rtnValue = false;
}
}
*/
return rtnValue;
}
// 문자열에서 숫자만 추출
public String getOnlyNumber(String str) {
//String str = "aaa1234, ^&*2233pp";
String intStr = str.replaceAll("[^\\d]", "");
return intStr;
}
}