package itn.let.mjo.addr.web;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.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.util.RedirectUrlMaker;
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.AddrVO;
import itn.let.mjo.msgsent.service.MjonMsgSentService;
import itn.let.mjo.msgsent.service.MjonMsgSentVO;
import itn.let.mjo.pay.service.KmcVO;
import itn.let.uat.uia.service.AuthCertVO;
import itn.let.uat.uia.web.KmcCertChecker;
import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.MberManageVO;
/**
* 주소록 그룹에 관한 controller 클래스를 정의한다.
* @author ITN
* @since 2021.05.21
* @version 1.0
* @see
*
*
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2021.04.08 ITN 최초 생성
*
*
*/
@Controller
public class AddrGroupController {
@Resource(name = "MjonMsgSentService")
private MjonMsgSentService mjonMsgSentService;
@Resource (name = "AddrGroupService")
private AddrGroupService addrGroupService;
@Resource (name = "AddrService")
private AddrService addrService;
/** EgovMessageSource */
@Resource(name="egovMessageSource")
EgovMessageSource egovMessageSource;
/** mberManageService */
@Resource(name = "mberManageService")
private EgovMberManageService mberManageService;
/**
* 주소록 그룹 리스트
* @param addrGroupVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/selectAddrGroupList.do")
public String selectAddrGroupList(@ModelAttribute("searchVO") AddrGroupVO addrGroupVO
,ModelMap model) throws Exception {
if(addrGroupVO.getPageUnit() != 10) {
addrGroupVO.setPageUnit(addrGroupVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(addrGroupVO.getPageIndex());
paginationInfo.setRecordCountPerPage(addrGroupVO.getPageUnit());
paginationInfo.setPageSize(addrGroupVO.getPageSize());
addrGroupVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
addrGroupVO.setLastIndex(paginationInfo.getLastRecordIndex());
addrGroupVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrGroupVO.setSearchSortCnd("addrGrpId");
addrGroupVO.setSearchSortOrd("desc");
}
addrGroupVO.setSiteId("admin");
List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
int totCnt = 0;
if(addrGroupList.size() > 0) {
totCnt = addrGroupList.get(0).getTotcnt();
}
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("addrGroupList", addrGroupList);
model.addAttribute("paginationInfo", paginationInfo);
return "/uss/ion/addr/AddrGroupList";
}
/**
* 주소록 그룹 리스트
* @param addrGroupVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/selectAddrGroupListAjax.do")
public ModelAndView selectAddrGroupListAdminAjax(@ModelAttribute("searchVO") AddrGroupVO addrGroupVO, AddrVO addrVO
,ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrGroupVO.setSearchSortCnd("grpOrder");
addrGroupVO.setSearchSortOrd("desc");
}
List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
modelAndView.addObject("addrGroupList", addrGroupList);
modelAndView.addObject("addrGroupListCnt", addrGroupList.size());
return modelAndView;
}
/**
* 주소록 그룹 리스트
* @param addrGroupVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/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(userId != "") {
addrGroupVO.setMberId(userId);
addrVO.setMberId(userId);
} else {
redirectAttributes.addFlashAttribute("fail", true);
return "redirect:/web/user/login/login.do";
}
if(addrGroupVO.getPageUnit() != 10) {
addrGroupVO.setPageUnit(addrGroupVO.getPageUnit());
}
if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
addrGroupVO.setSearchSortCnd("grpOrder");
addrGroupVO.setSearchSortOrd("desc");
}
addrGroupVO.setSiteId("web");
List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
// * JSPark 2023.08.30 => Ajax 로 변경
//회원별 주소록 전체 갯수 조회
// int addrTotalCount = addrService.selectAddrTotalCount(addrVO);
addrVO.setType("bookmark");
List addrBookmarkList = addrService.selectAddrBasicGrpList(addrVO);
addrVO.setType("noGrp");
List addrNoGrpList = addrService.selectAddrBasicGrpList(addrVO);
int totalGrpCount = addrGroupList.stream()
.mapToInt(group -> {
String grpCountStr = group.getGrpCount();
if (grpCountStr != null && !grpCountStr.isEmpty()) {
try {
return Integer.parseInt(grpCountStr);
} catch (NumberFormatException e) {
// 파싱에 실패한 경우 0을 반환하거나 예외 처리를 합니다.
return 0;
}
} else {
return 0;
}
})
.sum();
// 결과 출력
System.out.println("totalGrpCount :: "+ totalGrpCount);
int addrTotalCount = (addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0)
+ (addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0)
+ totalGrpCount
;
model.addAttribute("addrTotalCount", addrTotalCount);
model.addAttribute("addrBookmarkCnt", addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0);
model.addAttribute("addrNoGrpCnt", addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0);
model.addAttribute("addrGroupList", addrGroupList);
model.addAttribute("userId", userId);
return "/web/addr/AddrGroupListAjax";
}
/**
* 주소록 합치기 팝업 리스트
* @param addrGroupVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/selectAddrGroupMergetAjax.do")
public ModelAndView selectAddrGroupMergetAjax(@ModelAttribute("searchVO") AddrGroupVO addrGroupVO, AddrVO addrVO
, 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 != "") {
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 addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
model.addAttribute("addrGroupList", addrGroupList);
modelAndView.addObject("status", "success");
return modelAndView;
}
/**
* 주소록 그룹 등록 페이지 이동
* @param addrGroupVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/registAddrGroup.do")
public String registAddrGroup(AddrGroupVO addrGroupVO, ModelMap model) throws Exception {
model.addAttribute("addrGroupVO", addrGroupVO);
return "/uss/ion/addr/AddrGroupRegist";
}
/**
* 주소록 그룹 등록 로직
* @param addrGroupVO
* @param redirectAttributes
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/insertAddrGroup.do")
public String insertAddrGroup(AddrGroupVO addrGroupVO
,RedirectAttributes redirectAttributes
,HttpServletRequest request) throws Exception {
try {
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
if( addrGroupVO.getMberId() == null || "".equals(addrGroupVO.getMberId()) ) {
addrGroupVO.setMberId(user.getId());
}
//주소록 그룹 이름 불러오기(중복체크 용)
MjonMsgSentVO mjonMsgSentVO = new MjonMsgSentVO();
mjonMsgSentVO.setUserId(addrGroupVO.getMberId());
mjonMsgSentVO.setAddrGrpNm(addrGroupVO.getAddrGrpNm());
List resultAddrGrpList = mjonMsgSentService.selectAddrGrpNmList(mjonMsgSentVO);
if(resultAddrGrpList.size() > 0) { //기존 같은 이름의 그룹이 있으면 해당 그룹에 연락처를 추가해줌
redirectAttributes.addFlashAttribute("message", "같은 이름의 그룹명이 있습니다.");
}
else {
addrGroupService.insertAddrGroup(addrGroupVO);
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/selectAddrGroupList.do");
return redirectUrlMaker.getRedirectUrl();
}
/**
* 주소록 그룹 등록 로직 (ajax)
* @param addrGroupVO
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/insertAddrGroupAjax.do")
public ModelAndView insertAddrGroup(HttpServletRequest request, ModelMap model,
AddrGroupVO addrGroupVO
) throws Exception {
ModelAndView mv = new ModelAndView();
mv.setViewName("jsonView");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
addrGroupVO.setMberId(userId);
int usedCnt = addrGroupService.selectDuplAddrGroupCnt(addrGroupVO);
if(usedCnt > 0) {
mv.addObject("result","dupl");
}else {
if(userId != "") {
try {
addrGroupService.insertAddrGroup(addrGroupVO);
mv.addObject("result","success");
} catch (Exception e) {
e.printStackTrace();
mv.addObject("result","fail");
}
} else {
mv.addObject("result","fail");
}
}
return mv;
}
/**
* 주소록 그룹 중복체크 로직 (ajax)
* @param addrGroupVO
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/getAddrGroupDuplCheckAjax.do")
public ModelAndView getAddrGroupDuplCheckAjax(HttpServletRequest request, ModelMap model,
AddrGroupVO addrGroupVO
) throws Exception {
System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: ");
System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: ");
System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: ");
System.out.println(" :: addrGrpNm :: "+ addrGroupVO.getAddrGrpNm());
ModelAndView mv = new ModelAndView();
mv.setViewName("jsonView");
boolean isSuccess = true;
boolean isDupl = false;
String msg = "";
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
try {
addrGroupVO.setMberId(userId);
int usedCnt = addrGroupService.selectDuplAddrGroupCnt(addrGroupVO);
if(usedCnt > 0) {
isDupl = true;
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
mv.addObject("isSuccess", isSuccess);
mv.addObject("isDupl", isDupl);
mv.addObject("msg", msg);
return mv;
}
/**
* 주소록 등록 페이지(ajax)
* @param addrGroupVO
* @param redirectAttributes
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/selectAddrGroupAjax.do")
public String selectAddrGroupAjax(HttpServletRequest request, ModelMap model,
AddrGroupVO addrGroupVO, AddrVO addrVO, RedirectAttributes redirectAttributes
) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId != "") {
addrGroupVO.setMberId(userId);
addrVO.setMberId(userId);
} else {
redirectAttributes.addFlashAttribute("fail", true);
return "redirect:/web/user/login/login.do";
}
if(addrGroupVO.getPageUnit() != 10) {
addrGroupVO.setPageUnit(addrGroupVO.getPageUnit());
}
addrGroupVO.setSiteId("web");
List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO);
model.addAttribute("addrGroupList", addrGroupList);
return "/web/addr/AddrGroupSelectAjax";
}
// 주소록 그룹 카운트 조회(전체) Ajax
@RequestMapping("/web/addr/selectAddrGroupTotCntAjax.do")
public ModelAndView selectAddrGroupTotCntAjax(HttpServletRequest request,
@ModelAttribute("searchVO") AddrGroupVO addrGroupVO
, Model model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
int addrTotCnt = 0;
try{
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrGroupVO.setMberId(user.getId());
addrGroupVO = addrGroupService.selectAddrGroupTotCnt(addrGroupVO);
if (addrGroupVO != null) {
addrTotCnt = addrGroupVO.getAddrTotCnt();
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
System.out.println("addrTotCnt : "+ addrTotCnt);
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
modelAndView.addObject("addrTotCnt", addrTotCnt);
return modelAndView;
}
// 주소록 그룹 카운트 조회(전체) Ajax
@RequestMapping("/web/addr/selectAddrGroupNogrpCntAjax.do")
public ModelAndView selectAddrGroupNogrpCntAjax(HttpServletRequest request,
@ModelAttribute("searchVO") AddrGroupVO addrGroupVO
, Model model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
int nogrpCnt = 0;
try{
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrGroupVO.setMberId(user.getId());
addrGroupVO = addrGroupService.selectAddrGroupNogrpCnt(addrGroupVO);
if (addrGroupVO != null) {
nogrpCnt = addrGroupVO.getNogrpCnt();
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
modelAndView.addObject("nogrpCnt", nogrpCnt);
return modelAndView;
}
// 주소록 그룹 카운트 조회(전체) Ajax
@RequestMapping("/web/addr/selectAddrGroupBookmarkCntAjax.do")
public ModelAndView selectAddrGroupBookmarkCntAjax(HttpServletRequest request,
@ModelAttribute("searchVO") AddrGroupVO addrGroupVO
, Model model) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
int bookmarkCnt = 0;
try{
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrGroupVO.setMberId(user.getId());
addrGroupVO = addrGroupService.selectAddrGroupBookmarkCnt(addrGroupVO);
if (addrGroupVO != null) {
bookmarkCnt = addrGroupVO.getBookmarkCnt();
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
modelAndView.addObject("bookmarkCnt", bookmarkCnt);
return modelAndView;
}
/**
* 주소록 그룹 수정 로직
*
* @param addrGroupVO
* @param redirectAttributes
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/uss/ion/addr/updateAddrGroupAjax.do")
public ModelAndView updateAddrGroupAjax(AddrGroupVO addrGroupVO
,RedirectAttributes redirectAttributes
,HttpServletRequest request
,HttpServletResponse response
) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
try {
//주소록 그룹 이름 불러오기(중복체크 용)
MjonMsgSentVO mjonMsgSentVO = new MjonMsgSentVO();
mjonMsgSentVO.setUserId(addrGroupVO.getMberId());
mjonMsgSentVO.setAddrGrpNm(addrGroupVO.getAddrGrpNm());
List resultAddrGrpList = mjonMsgSentService.selectAddrGrpNmList(mjonMsgSentVO);
if(resultAddrGrpList.size() > 0) { //기존 같은 이름의 그룹이 있으면 해당 그룹에 연락처를 추가해줌
isSuccess = false;
msg = "같은 이름의 그룹명이 있습니다.";
}
else {
addrGroupService.updateAddrGroup(addrGroupVO);
}
}
catch(Exception e) {
isSuccess = false;
msg = "에러메시지 : " + e.getMessage();
e.printStackTrace();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
/**
* 주소록 그룹 수정 로직 Ajax
*
* @param request
* @param addrGroupVO
* @param redirectAttributes
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/updateAddrGroupAjax.do")
public ModelAndView updateAddrGroupAjax(@RequestParam("addrGrpNms") String[] addrGrpNms,
@RequestParam("addrGrpIds") String[] addrGrpIds,
HttpServletRequest request,
@ModelAttribute("searchVO") AddrGroupVO addrGroupVO, Model model
,RedirectAttributes redirectAttributes
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrGroupVO.setLastUpdusrId(user.getId());
addrGroupVO.setMberId(user.getId());
boolean dupl = false;
for (int i=0; i 0) {
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
} else {
redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
}
redirectAttributes.addAttribute("pageIndex", addrGroupVO.getPageIndex());
redirectAttributes.addAttribute("searchCondition", addrGroupVO.getSearchCondition());
redirectAttributes.addAttribute("searchKeyword", addrGroupVO.getSearchKeyword());
return "redirect:/uss/ion/addr/selectAddrGroupList.do";
}
/**
* 주소록 그룹 삭제 로직 Ajax
*
* @param request
* @param addrGroupVO
* @param redirectAttributes
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/deleteAddrGroupAjax.do")
public ModelAndView deleteAddrGroupAjax(@RequestParam("grpCheck") String[] grpCheck, HttpServletRequest request,
@ModelAttribute("searchVO") AddrGroupVO addrGroupVO, Model model
,RedirectAttributes redirectAttributes
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrGroupVO.setLastUpdusrId(user.getId());
addrGroupVO.setMberId(user.getId());
for(String id:grpCheck) {
try {
addrGroupVO.setAddrGrpId(id);
addrGroupVO.setMberId(user.getId());
addrGroupVO.setLastUpdusrId(user.getId());
// int tot = addrService.getAddrCount(addrGroupVO);
// addrGroupVO.setTotCnt(tot);
addrService.deleteAddr_advc(addrGroupVO);
/* addrGroupVO.setAddrGrpId(id);
addrGroupService.deleteAddrGroup(addrGroupVO);
addrVO.setAddrGrpId(id);
addrVO.setGrpDelete("Y");
addrVO.setMberId(user.getId());
addrVO.setLastUpdusrId(user.getId());
addrService.deleteAddr(addrVO);
*/
modelAndView.addObject("result", "success");
} catch (Exception e) {
e.printStackTrace();
modelAndView.addObject("result", "fail");
return modelAndView;
}
}
return modelAndView;
}
/**
* 주소록 그룹명 중복체크
*
* @param addrGroupVO
* @return
* @throws Exception
*/
@RequestMapping(value= {"/uss/ion/addr/duplAddrGroupAjax.do","/web/addr/selectDuplAddrGroupNameAjax.do"})
@ResponseBody
public ModelAndView selectDuplAddrGroupAjax(AddrGroupVO addrGroupVO
,HttpServletRequest request
,ModelMap model
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
int usedCnt = addrGroupService.selectDuplAddrGroupCnt(addrGroupVO);
if(usedCnt > 0) {
modelAndView.addObject("result1", "dupl");
} else {
modelAndView.addObject("result1", "success");
}
modelAndView.addObject("status1", "success");
return modelAndView;
}
/**
* 주소록 합치기
* @param addrGrpNewNm
* @param request
* @param addrGroupVO
* @param addrVO
* @param model
* @param redirectAttributes
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/mergeAddrGroupAjax.do")
public ModelAndView mergeAddrGroupAjax(@RequestParam("addrGrpNewNm") String addrGrpNewNm
,HttpServletRequest request
,@ModelAttribute("searchVO") AddrGroupVO addrGroupVO
,AddrVO addrVO
,Model model
,RedirectAttributes redirectAttributes
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrGroupVO.setLastUpdusrId(user.getId());
addrGroupVO.setMberId(user.getId());
addrGroupVO.setFrstRegisterId(user.getId());
addrGroupVO.setAddrGrpNm(addrGrpNewNm);
int usedCnt = addrGroupService.selectDuplAddrGroupCnt(addrGroupVO);
if(usedCnt > 0) {
modelAndView.addObject("result", "dupl");
}else {
addrVO.setMberId(user.getId());
addrVO.setLastUpdusrId(user.getId());
try {
addrGroupService.mergeAddrGroupAjax(addrGroupVO, addrVO);
modelAndView.addObject("result", "success");
} catch (Exception e) {
e.printStackTrace();
modelAndView.addObject("result", "fail");
return modelAndView;
}
}
return modelAndView;
}
/**
* 주소록 그룹 복사하기
* @param addrGrpNewNm
* @param request
* @param addrGroupVO
* @param addrVO
* @param model
* @param redirectAttributes
* @return
* @throws Exception
*/
@RequestMapping("/web/addr/copyAddrGroupAjax.do")
public ModelAndView copyAddrGroupAjax(@RequestParam("addrGrpNewNm") String addrGrpNewNm
,HttpServletRequest request
,@ModelAttribute("searchVO") AddrGroupVO addrGroupVO
,AddrVO addrVO
,Model model
,RedirectAttributes redirectAttributes
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
addrGroupVO.setLastUpdusrId(user.getId());
addrGroupVO.setMberId(user.getId());
addrGroupVO.setFrstRegisterId(user.getId());
addrGroupVO.setAddrGrpNm(addrGrpNewNm);
int usedCnt = addrGroupService.selectDuplAddrGroupCnt(addrGroupVO);
if(usedCnt > 0) {
modelAndView.addObject("result", "dupl");
}else {
addrVO.setMberId(user.getId());
addrVO.setLastUpdusrId(user.getId());
try {
addrGroupService.copyAddrGroupAjax(addrGroupVO, addrVO);
modelAndView.addObject("result", "success");
} catch (Exception e) {
e.printStackTrace();
modelAndView.addObject("result", "fail");
return modelAndView;
}
}
return modelAndView;
}
// 주소록 내보내기 kmc본인인증
@RequestMapping(value = "/web/addr/kmcPopupAddrSubmitPramAjax.do")
public ModelAndView kmcPopupIdPwPramAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO,
HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
KmcCertChecker kmcCertCheck = new KmcCertChecker();
// mberId null일경우 ""로
mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId()));
// kmc 본인인증 실/개발 서버 구분
String serverNm = "";
if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) {
serverNm = request.getScheme() + "://219.240.88.15:8095";
} else {
serverNm = request.getScheme() + "://www.munjaon.co.kr";
}
AuthCertVO certVO = kmcCertCheck.authCertCheckEight(serverNm + "/web/cop/kmc/authRequestAddrSubmitAjax.do",
mberManageVO.getMberId());
modelAndView.addObject("tr_cert", certVO.getTr_cert());
modelAndView.addObject("tr_url", certVO.getTr_url());
modelAndView.addObject("tr_add", certVO.getTr_add());
modelAndView.addObject("result", "success");
} catch (Exception e) {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage());
}
return modelAndView;
}
/**
* 아이디 비밀번호 찾기 kmc 본인인증(PG사 전송화면)
*
* @param
* @return
* @throws Exception
*/
@RequestMapping("/web/cop/kmc/authRequestAddrSubmitAjax.do")
public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model,
@RequestParam Map commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
RedirectAttributes redirectAttributes) throws Exception {
String errMessage = ""; // 에러메세지
String rec_cert = ""; // 결과값(암호화)
String certNum = ""; // certNum
rec_cert = request.getParameter("rec_cert").trim();
certNum = request.getParameter("certNum").trim();
kmcVO.setRecCert(rec_cert);
kmcVO.setCertNum(certNum);
// 파라미터 유효성 검증
if (rec_cert.length() == 0 || certNum.length() == 0) {
errMessage = "비정상";
return returnPage(model, errMessage, kmcVO);
}
// 변수선언
// --------------------------------------------------------------------------------------------------------
String k_certNum = ""; // 파라미터로 수신한 요청번호
k_certNum = certNum;
String date = ""; // 요청일시
String CI = ""; // 연계정보(CI)
String DI = ""; // 중복가입확인정보(DI)
String phoneNo = ""; // 휴대폰번호
String phoneCorp = ""; // 이동통신사
String birthDay = ""; // 생년월일
String gender = ""; // 성별
String nation = ""; // 내국인
String name = ""; // 성명
String M_name = ""; // 미성년자 성명
String M_birthDay = ""; // 미성년자 생년월일
String M_Gender = ""; // 미성년자 성별
String M_nation = ""; // 미성년자 내외국인
String result = ""; // 결과값
String certMet = ""; // 인증방법
String ip = ""; // ip주소
String plusInfo = "";
String encPara = "";
String encMsg1 = "";
String encMsg2 = "";
String msgChk = "";
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
// 02. 1차 복호화
// 수신된 certNum를 이용하여 복호화
rec_cert = seed.getDec(rec_cert, k_certNum);
// 03. 1차 파싱
int inf1 = rec_cert.indexOf("/", 0);
int inf2 = rec_cert.indexOf("/", inf1 + 1);
encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
// 04. 위변조 검증
encMsg2 = seed.getMsg(encPara);
kmcVO.setEncMsg2(encMsg2);
if (encMsg2.equals(encMsg1)) {
msgChk = "Y";
}
if (!"Y".equals(msgChk)) {
errMessage = "비정상접근입니다.";
return returnPage(model, errMessage, kmcVO);
}
// 05. 2차 복호화
rec_cert = seed.getDec(encPara, k_certNum);
kmcVO.setRecCert(rec_cert);
// 06. 2차 파싱
int info1 = rec_cert.indexOf("/", 0);
int info2 = rec_cert.indexOf("/", info1 + 1);
int info3 = rec_cert.indexOf("/", info2 + 1);
int info4 = rec_cert.indexOf("/", info3 + 1);
int info5 = rec_cert.indexOf("/", info4 + 1);
int info6 = rec_cert.indexOf("/", info5 + 1);
int info7 = rec_cert.indexOf("/", info6 + 1);
int info8 = rec_cert.indexOf("/", info7 + 1);
int info9 = rec_cert.indexOf("/", info8 + 1);
int info10 = rec_cert.indexOf("/", info9 + 1);
int info11 = rec_cert.indexOf("/", info10 + 1);
int info12 = rec_cert.indexOf("/", info11 + 1);
int info13 = rec_cert.indexOf("/", info12 + 1);
int info14 = rec_cert.indexOf("/", info13 + 1);
int info15 = rec_cert.indexOf("/", info14 + 1);
int info16 = rec_cert.indexOf("/", info15 + 1);
int info17 = rec_cert.indexOf("/", info16 + 1);
int info18 = rec_cert.indexOf("/", info17 + 1);
certNum = rec_cert.substring(0, info1);
kmcVO.setCertNum(certNum);
date = rec_cert.substring(info1 + 1, info2);
kmcVO.setDate(date);
CI = rec_cert.substring(info2 + 1, info3);
kmcVO.setCI(CI);
phoneNo = rec_cert.substring(info3 + 1, info4);
kmcVO.setPhoneNo(phoneNo);
phoneCorp = rec_cert.substring(info4 + 1, info5);
kmcVO.setPhoneCorp(phoneCorp);
birthDay = rec_cert.substring(info5 + 1, info6);
kmcVO.setBirthDay(birthDay);
gender = rec_cert.substring(info6 + 1, info7);
kmcVO.setGender(gender);
nation = rec_cert.substring(info7 + 1, info8);
kmcVO.setNation(nation);
name = rec_cert.substring(info8 + 1, info9);
kmcVO.setName(name);
result = rec_cert.substring(info9 + 1, info10);
kmcVO.setResult(result);
certMet = rec_cert.substring(info10 + 1, info11);
kmcVO.setCertMet(certMet);
ip = rec_cert.substring(info11 + 1, info12);
kmcVO.setIp(ip);
M_name = rec_cert.substring(info12 + 1, info13);
kmcVO.setMName(M_name);
M_birthDay = rec_cert.substring(info13 + 1, info14);
kmcVO.setMBirthDay(M_birthDay);
M_Gender = rec_cert.substring(info14 + 1, info15);
kmcVO.setMGender(M_Gender);
M_nation = rec_cert.substring(info15 + 1, info16);
kmcVO.setMNation(M_nation);
plusInfo = rec_cert.substring(info16 + 1, info17);
kmcVO.setPlusInfo(plusInfo);
DI = rec_cert.substring(info17 + 1, info18);
kmcVO.setDI(DI);
// 07. CI, DI 복호화
CI = seed.getDec(CI, k_certNum);
kmcVO.setCI(CI);
DI = seed.getDec(DI, k_certNum);
kmcVO.setDI(DI);
if ("Y".equals(result)) {
}
// --------------------------------------------------------------
String regex = "";
if (certNum.length() == 0 || certNum.length() > 40) {
errMessage = "요청번호 비정상.";
return returnPage(model, errMessage, kmcVO);
}
regex = "[0-9]*";
if (date.length() != 14 || !paramChk(regex, date)) {
errMessage = "요청일시";
return returnPage(model, errMessage, kmcVO);
}
regex = "[A-Z]*";
if (certMet.length() != 1 || !paramChk(regex, certMet)) {
errMessage = "본인인증방법 비정상" + certMet;
return returnPage(model, errMessage, kmcVO);
}
regex = "[0-9]*";
if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) {
errMessage = "휴대폰번호 비정상";
return returnPage(model, errMessage, kmcVO);
}
regex = "[A-Z]*";
if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) {
errMessage = "이동통신사 비정상";
return returnPage(model, errMessage, kmcVO);
}
regex = "[0-9]*";
if (birthDay.length() != 8 || !paramChk(regex, birthDay)) {
errMessage = "생년월일 비정상";
return returnPage(model, errMessage, kmcVO);
}
regex = "[0-9]*";
if (gender.length() != 1 || !paramChk(regex, gender)) {
errMessage = "성별 비정상";
return returnPage(model, errMessage, kmcVO);
}
regex = "[0-9]*";
if (nation.length() != 1 || !paramChk(regex, nation)) {
errMessage = "내/외국인 비정상";
return returnPage(model, errMessage, kmcVO);
}
regex = "[\\sA-Za-z가-�R.,-]*";
if (name.length() > 60 || !paramChk(regex, name)) {
errMessage = "성명 비정상";
return returnPage(model, errMessage, kmcVO);
}
regex = "[A-Z]*";
if (result.length() != 1 || !paramChk(regex, result)) {
errMessage = "결과값 비정상";
return returnPage(model, errMessage, kmcVO);
}
regex = "[\\sA-Za-z가-?.,-]*";
if (M_name.length() != 0) {
if (M_name.length() > 60 || !paramChk(regex, M_name)) {
errMessage = "미성년자 성명 비정상";
return returnPage(model, errMessage, kmcVO);
}
}
regex = "[0-9]*";
if (M_birthDay.length() != 0) {
if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) {
errMessage = "미성년자 생년월일 비정상";
return returnPage(model, errMessage, kmcVO);
}
}
regex = "[0-9]*";
if (M_Gender.length() != 0) {
if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
errMessage = "미성년자 성별 비정상";
return returnPage(model, errMessage, kmcVO);
}
}
regex = "[0-9]*";
if (M_nation.length() != 0) {
if (M_nation.length() != 1 || !paramChk(regex, M_nation)) {
errMessage = "미성년자 내/외국인 비정상";
return returnPage(model, errMessage, kmcVO);
}
}
// KMC 본인인증 로그
AuthCertVO certVO = new AuthCertVO();
certVO.setMberId(kmcVO.getPlusInfo());
certVO.setCertNum(kmcVO.getCertNum());
certVO.setCertDate(kmcVO.getDate());
certVO.setCertDi(kmcVO.getDI());
certVO.setCertPhone(kmcVO.getPhoneNo());
certVO.setCertNation(kmcVO.getNation());
certVO.setCertName(kmcVO.getName());
certVO.setCertResult(kmcVO.getResult());
certVO.setCertType("KMC_주소록내보내기");
certVO.setCertIpaddr(kmcVO.getIp());
certVO.setBirthDay(kmcVO.getBirthDay());
certVO.setSexdstnCode(kmcVO.getGender());
// 디비 테이블에 저장하기
mberManageService.insertCertInfoLog(certVO);
model.addAttribute("kmcVO", kmcVO);
return "web/addr/AddrSubmitKmcReqPage";
}
// 파라미터 유효성 검증 --------------------------------------------
public Boolean paramChk(String patn, String param) {
Pattern pattern = Pattern.compile(patn);
Matcher matcher = pattern.matcher(param);
boolean b = matcher.matches();
return b;
}
// 파라미터 유효성 검증 --------------------------------------------
public String returnPage(ModelMap model, String errMessage, KmcVO kmcVO) {
kmcVO.setErrMessage(errMessage);
model.addAttribute("kmcVO", kmcVO);
return "web/cop/nicepay/payRequestAjax";
}
}