package itn.let.uss.umt.web;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.annotation.Resource;
import javax.crypto.Cipher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.support.RequestContextUtils;
import org.springmodules.validation.commons.DefaultBeanValidator;

import com.google.gson.Gson;
import com.penta.scpdb.ScpDbAgent;

import NiceID.Check.CPClient;
import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.ComDefaultCodeVO;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.util.EgovDoubleSubmitHelper;
import itn.com.cmm.util.MJUtil;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.cop.bbs.service.BoardVO;
import itn.let.fax.user.service.FaxGroupDataVO;
import itn.let.fax.user.service.FaxService;
import itn.let.kakao.admin.kakaoAt.service.ChannelIDVO;
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATSentVO;
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATService;
import itn.let.kakao.kakaoComm.KakaoReturnVO;
import itn.let.kakao.kakaoComm.KakaoVO;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
import itn.let.mjo.addr.service.AddrService;
import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.event.service.MjonEventService;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.kisa.service.KisaService;
import itn.let.mjo.kisa.service.KisaVO;
import itn.let.mjo.msg.service.MjPhoneMemberVO;
import itn.let.mjo.msg.service.MjonMsgResultCodeVO;
import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgCustom.service.MjonMsgCustomService;
import itn.let.mjo.msgCustom.service.MjonMsgCustomVO;
import itn.let.mjo.msgagent.service.MjonMsgAgentStsService;
import itn.let.mjo.msgagent.service.MjonMsgAgentStsVO;
import itn.let.mjo.msgcampain.service.MjonCandidateService;
import itn.let.mjo.msgcampain.service.MjonCandidateVO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgsent.service.MjonMsgSentService;
import itn.let.mjo.msgsent.service.MjonMsgSentVO;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.pay.service.RefundService;
import itn.let.mjo.pay.service.RefundVO;
import itn.let.mjo.payva.service.VacsVactService;
import itn.let.mjo.payva.service.VacsVactVO;
import itn.let.org.service.LocVO;
import itn.let.org.service.OrgChartManageService;
import itn.let.sec.ram.service.AuthorManageVO;
import itn.let.sec.ram.service.EgovAuthorManageService;
import itn.let.sec.rgm.service.AuthorGroup;
import itn.let.sec.rgm.service.EgovAuthorGroupService;
import itn.let.sym.ccm.cde.service.CateCode;
import itn.let.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService;
import itn.let.sym.log.user.service.UserLogService;
import itn.let.sym.log.user.service.UserLogVO;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.sym.site.service.SiteManagerVO;
import itn.let.uat.uia.service.EgovLoginService;
import itn.let.uat.uia.web.EmailVO;
import itn.let.uat.uia.web.SendLogVO;
import itn.let.uat.uia.web.SendMail;
import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageConfigVO;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserDefaultVO;
import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.fcc.service.EgovCryptoUtil;
import itn.let.utl.sim.service.EgovFileScrty;

/**
 * 업무사용자관련 요청을  비지니스 클래스로 전달하고 처리된결과를  해당   웹 화면으로 전달하는  Controller를 정의한다
 * @author 공통서비스 개발팀 조재영
 * @since 2009.04.10
 * @version 1.0
 * @see
 *
 * <pre>
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *   2009.04.10  조재영          최초 생성
 *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
 *
 * </pre>
 */
@Controller
public class EgovUserManageController {

	static String RSA_WEB_KEY = "_RSA_WEB_Key_1"; // 개인키 session key
    static String RSA_INSTANCE = "RSA"; // rsa transformation
    
	/** userManageService */
	@Resource(name = "userManageService")
	private EgovUserManageService userManageService;

	/** cmmUseService */
	@Resource(name = "EgovCmmUseService")
	private EgovCmmUseService cmmUseService;

	/** EgovMessageSource */
	@Resource(name = "egovMessageSource")
	EgovMessageSource egovMessageSource;

	/** EgovPropertyService */
	@Resource(name = "propertiesService")
	protected EgovPropertyService propertiesService;

	/** mberManageService */
	@Resource(name = "mberManageService")
	private EgovMberManageService mberManageService;
	
	/** DefaultBeanValidator beanValidator */
	@Autowired
	private DefaultBeanValidator beanValidator;

	@Resource(name = "EgovFileMngUtil")
    private EgovFileMngUtil fileUtil;
	
	@Resource(name = "EgovFileMngService")
    private EgovFileMngService fileMngService;
	
	@Resource(name = "egovAuthorManageService")
	private EgovAuthorManageService egovAuthorManageService;
	
	/*@Resource(name = "EgovOrgChartManageService")
	private EgovOrgChartManageService orgChartManageService;*/
	
	@Resource(name = "orgChartManageService")
	private OrgChartManageService orgChartManageService;
	
	
	@Resource(name = "egovAuthorGroupService")
    private EgovAuthorGroupService egovAuthorGroupService;
	 
	@Resource(name = "egovSiteManagerService")
	private EgovSiteManagerService egovSiteManagerService;
	
	@Resource(name = "loginService")
	private EgovLoginService loginService;
	
	@Resource(name = "CmmnDetailCodeManageService")
    private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService;
	
	@Resource(name = "UserLogService")
	private UserLogService userLogService;
	
	/* MjonMsgDataService */
	@Resource(name = "MjonMsgDataService")
    private MjonMsgDataService mjonMsgDataService;
	
	/*
	 * 결제 서비스 호출
	 * */
	@Resource(name = "mjonPayService")
    private MjonPayService mjonPayService;
	
	@Resource(name = "mjonMsgService")
	private MjonMsgService mjonMsgService;
	
	@Resource(name = "refundService")
    private RefundService refundService;
	
	@Resource(name = "KisaService")
    private KisaService kisaService;

	@Resource(name = "faxService")
	private FaxService faxService;
	
	@Resource(name = "mjonCandidateService")
    private MjonCandidateService mjonCandidateService;
	
	/* 암복호화 */
	@Resource(name = "egovCryptoUtil")
	EgovCryptoUtil egovCryptoUtil;
	
	@Resource (name = "AddrService")
	private AddrService addrService;
	
	@Resource(name = "MjonMsgSentService")
    private MjonMsgSentService mjonMsgSentService;
	
	//전용계좌 서비스
	@Resource(name = "vacsVactService")
	private VacsVactService vacsVactService;
	
	@Resource(name = "MjonEventService")
    private MjonEventService mjonEventService;
	
	@Resource(name = "mjonMsgCustomService")
	private MjonMsgCustomService mjonMsgCustomService;
	
	private String topLocNo = "1000000" ; //전역 최상위 매뉴번호 
	
	@Resource(name = "mjonMsgAgentStsService")
	private MjonMsgAgentStsService mjonMsgAgentStsService;	
		
	@Resource(name = "mjonKakaoATService")
	private MjonKakaoATService mjonKakaoATService;
	
	@Resource(name = "kakaoApiService")
	private KakaoApiService kakaoApiService;
	
	@Autowired
	KakaoApiTemplate kakaoApiTemplate;
	
	@Autowired
	KakaoApiProfile kakaoApiProfile;
	
	//배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"}
	private String[][] userExcelValue ={
	    {"0" ,"번호" , "1" , "" },
	    {"1", "사이트명" , "ITN" , "[코드]"}, 
	    {"2", "아이디" , "testId", ""}, 
	    {"3", "이름" , "홍길동", ""}, 
	    {"4", "권한" , "일반관리자", "[코드]"}, 
	    {"5", "전화번호(부서)" , "02-123-4567", ""}, 
	    {"6", "이메일" , "test@itn.co.kr", ""}, 
	    {"7", "등록일" ,"2019-10-31", ""}
	} ;
	/**
	 * 
	 * (관리자)관리자목록을 조회한다. (pageing)
	 * @param userSearchVO 검색조건정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovUserManage
	 * @throws Exception
	 */
	@RequestMapping(value = {"/uss/umt/user/EgovUserManage.do", "/uss/umt/user/EgovUserManageMenuAjax.do"})
	public String selectUserList(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, 
		ModelMap model, 
		HttpServletRequest request,
		HttpSession session) throws Exception {
		
		Map<String, ?> flashMap =RequestContextUtils.getInputFlashMap(request);
		
		if(flashMap!=null && flashMap.get("userSearchVO") != null) {
			userSearchVO = (UserDefaultVO)flashMap.get("userSearchVO");
		}
		
		
		{
			//일반관리자가 좌측의 매뉴의 관리자 관리 클릭시 리스트가 아닌 자신의 정보수정페이지로 리로딩.
			LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();//최고관리자의 경우 비밀번호 확인 없음.
			loginVO.setId(loginVO.getId());
			if(!"ROLE_ADMIN".equals(loginService.getUserAuth(loginVO).getAuthority())){//최고관리자 아닐경우
				return "redirect:/EgovTopPageLink.do?link=/uss/umt/user/EgovUserSelectUpdtView.do?selectedId="+loginVO.getUniqId()+"&baseMenuNo=3500000" ;
			}
		}
		
		if(userSearchVO.getPageUnit() != 10) {
			userSearchVO.setPageUnit(userSearchVO.getPageUnit());
		}

		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
		paginationInfo.setPageSize(userSearchVO.getPageSize());

		userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
		userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		//userSearchVO.setAdminYn("Y");
		if("".equals(userSearchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			userSearchVO.setSearchSortCnd("uniqId");
			userSearchVO.setSearchSortOrd("desc");
		}
		if("".equals(userSearchVO.getEmplyrSttusCode()) || userSearchVO.getEmplyrSttusCode() == null){ //최초조회시 사용중인 관리자만 조회
			userSearchVO.setEmplyrSttusCode("P");
		}
		List<?> resultList = userManageService.selectUserList(userSearchVO) ;
		model.addAttribute("resultList", resultList);
		paginationInfo.setTotalRecordCount( resultList.size()> 0 ? ((Long)((EgovMap)resultList.get(0)).get("totCnt")).intValue() : 0);
		model.addAttribute("paginationInfo", paginationInfo);

		//사용자상태코드를 코드정보로부터 조회
		ComDefaultCodeVO vo = new ComDefaultCodeVO();
		vo.setCodeId("COM038");
		model.addAttribute("emplyrSttusCode_result", cmmUseService.selectCmmCodeDetail(vo));//사용자상태코드목록
		
		//권한조회
		AuthorManageVO authorManageVO = new AuthorManageVO();
		authorManageVO.setFirstIndex(0);
  		authorManageVO.setLastIndex(10);
  		authorManageVO.setRecordCountPerPage(10);
  		authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO));
  		model.addAttribute("authorList", authorManageVO.getAuthorManageList());
  		
  		if("/uss/umt/user/EgovUserManageMenuAjax.do".equals(request.getServletPath())) {
			return "cmm/uss/umt/EgovUserManageMenuAjax";	
		}
  		
		return "cmm/uss/umt/EgovUserManage";
	}

	/**
	 * 
	 * (사용자) 사용자목록을 조회한다. (pageing)
	 * @param userSearchVO 검색조건정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovUserManage
	 * @throws Exception
	 */
	
	@RequestMapping(value = "/uss/umt/user/EgovGnrlUserManage.do")
	public String selectGnrlUserManage(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, 
			ModelMap model, HttpServletRequest request,
			HttpSession session) throws Exception {
		
		try {
			// 문자 단가
	    	JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
	    	double shortPrice = 0;			// 단문(SMS)		
	    	double longPrice = 0;			// 장문(LMS)
	    	double picturePrice = 0;			// 그림문자(MMS) 1장
	    	double picture2Price = 0;		// 그림문자(MMS) 2장
	    	double picture3Price = 0;		// 그림문자(MMS) 3장
	    	
	    	shortPrice = (double)sysJoinSetVO.getShortPrice();
	    	longPrice = (double)sysJoinSetVO.getLongPrice();
	    	picturePrice = (double)sysJoinSetVO.getPicturePrice();
	    	picture2Price = (double)sysJoinSetVO.getPicture2Price();
	    	picture3Price = (double)sysJoinSetVO.getPicture3Price();	
	    	
	    	model.addAttribute("shortPrice", shortPrice);
	    	model.addAttribute("longPrice", longPrice);
	    	model.addAttribute("picturePrice", picturePrice);
	    	model.addAttribute("picture2Price", picture2Price);
	    	model.addAttribute("picture3Price", picture3Price);
			
			if(userSearchVO.getPageUnit() != 10) {
				userSearchVO.setPageUnit(userSearchVO.getPageUnit());
			}
			
			/** pageing */
			PaginationInfo paginationInfo = new PaginationInfo();
			paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
			paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
			paginationInfo.setPageSize(userSearchVO.getPageSize());
			
			userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
			userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
			userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
			LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
			
			userSearchVO.setAdminYn("N");
			//System.out.println("userSearchVO.getSearchSortCnd() : " + userSearchVO.getSearchSortCnd());
			//System.out.println("userSearchVO.getMberSttus() : " + userSearchVO.getMberSttus());
			if("".equals(userSearchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
				if(userSearchVO.getMberSttus() != null) {
					if(userSearchVO.getMberSttus().equals("B")){
						userSearchVO.setSearchSortCnd("mberSttusUptPnttm");
						userSearchVO.setSearchSortOrd("desc");
					}
					else {
						userSearchVO.setSearchSortCnd("sbscrbDe");
						userSearchVO.setSearchSortOrd("desc");
					}			
				}
				else {
					userSearchVO.setSearchSortCnd("sbscrbDe");
					userSearchVO.setSearchSortOrd("desc");
				}
			}
			
			//후보자 검색 isNotEmpty 조건 candidateYn = 'Y'
			userSearchVO.setCandidateYn("Y");
			
			List<?> resultList = mberManageService.selectMberLoginAddList(userSearchVO);
			model.addAttribute("resultList", resultList);
			paginationInfo.setTotalRecordCount( resultList.size()> 0 ? ((Long)((EgovMap)resultList.get(0)).get("totCnt")).intValue() : 0);
			model.addAttribute("paginationInfo", paginationInfo);
			
			//사용자상태코드를 코드정보로부터 조회
			ComDefaultCodeVO vo = new ComDefaultCodeVO();
			vo.setCodeId("COM038");
			model.addAttribute("emplyrSttusCode_result", cmmUseService.selectCmmCodeDetail(vo));//사용자상태코드목록
			
			List<MjonMsgAgentStsVO> hotlineMsgAgentList = mjonMsgAgentStsService.selectMsgAgentListByHotline();
			model.addAttribute("hotlineMsgAgentList", hotlineMsgAgentList);
			
			//본인인증
			/*String referer = (String)request.getHeader("REFERER");
			
			URL newURL = new URL(referer);
			
			String protocol = newURL.getProtocol() + "://";
			String host = newURL.getHost();
			
			String succUrl = protocol + host + "/uss/umt/user/niceCheckAjax.do";
			String failUrl = protocol + host + "/uss/umt/user/EgovGnrlUserManage.do";

			userSearchVO.setNiceSuccUrl(succUrl);
			userSearchVO.setNiceFailUrl(failUrl);*/
			
			model.addAttribute("userSearchVO", userSearchVO);
			
			//권한조회
			AuthorManageVO authorManageVO = new AuthorManageVO();
			authorManageVO.setFirstIndex(0);
			authorManageVO.setLastIndex(10);
			authorManageVO.setRecordCountPerPage(10);
			authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO));
			model.addAttribute("authorList", authorManageVO.getAuthorManageList());			
		}catch(Exception ex) {
			ex.printStackTrace();
		}

		return "cmm/uss/umt/EgovGnrlUserManage";
	}
	
	/**
	 * 
	 * (관리자) 신규 사용자목록을 조회한다. (pageing)
	 * @param userSearchVO 검색조건정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovNewUserManage
	 * @throws Exception
	 */
	
	@RequestMapping(value = "/uss/umt/user/EgovNewUserManage.do")
	public String selectNewUserManage(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, 
			ModelMap model) throws Exception {
		
		if(userSearchVO.getPageUnit() != 10) {
			userSearchVO.setPageUnit(userSearchVO.getPageUnit());
		}
		
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
		paginationInfo.setPageSize(userSearchVO.getPageSize());
		
		userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
		userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		
		if("".equals(userSearchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			userSearchVO.setSearchSortCnd("sbscrbDe");
			userSearchVO.setSearchSortOrd("desc");
		}
		//userSearchVO.setFirstIndex(0);
		List<?> resultList = mberManageService.selectMberListNewUser(userSearchVO);
		
		paginationInfo.setTotalRecordCount( resultList.size()> 0 ? ((Long)((EgovMap)resultList.get(0)).get("totCnt")).intValue() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		
		model.addAttribute("resultList", resultList);
		
		return "cmm/uss/umt/EgovNewUserManage";
	}
	
	/**
	 * 
	 * (관리자) 탈퇴 사용자목록을 조회한다. (pageing)
	 * @param userSearchVO 검색조건정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovDelUserManage
	 * @throws Exception
	 */
	@RequestMapping(value = "/uss/umt/user/EgovDelUserManage.do")
	public String selectDelUserManage(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, 
			ModelMap model, HttpServletRequest request,
			HttpSession session) throws Exception {
		
		if(userSearchVO.getPageUnit() != 10) {
			userSearchVO.setPageUnit(userSearchVO.getPageUnit());
		}
		
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
		paginationInfo.setPageSize(userSearchVO.getPageSize());
		
		userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
		userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		
		userSearchVO.setMberSttus("N");
		userSearchVO.setAdminYn("N");
		if("".equals(userSearchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			userSearchVO.setSearchSortCnd("expirePnttm");
			userSearchVO.setSearchSortOrd("desc");
		}
		List<?> resultList = mberManageService.selectMberList(userSearchVO);
		model.addAttribute("userSearchVO", userSearchVO);
		model.addAttribute("resultList", resultList);
		paginationInfo.setTotalRecordCount( resultList.size()> 0 ? ((Long)((EgovMap)resultList.get(0)).get("totCnt")).intValue() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		
		
		return "cmm/uss/umt/EgovDelUserManage";
	}
	
	
	/**
	 * (관리자) 사용자등록화면으로 이동한다.
	 * @param userSearchVO 검색조건정보
	 * @param userManageVO 사용자초기화정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovUserInsert
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovUserInsertView.do")
	public String insertUserView(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, @ModelAttribute("userManageVO") UserManageVO userManageVO,Model model)
			throws Exception {

		ComDefaultCodeVO vo = new ComDefaultCodeVO();

		//패스워드힌트목록을 코드정보로부터 조회
		vo.setCodeId("COM022");
		model.addAttribute("passwordHint_result", cmmUseService.selectCmmCodeDetail(vo)); //패스워트힌트목록

		//성별구분코드를 코드정보로부터 조회
		vo.setCodeId("COM014");
		//List sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
		model.addAttribute("sexdstnCode_result", cmmUseService.selectCmmCodeDetail(vo));

		//사용자상태코드를 코드정보로부터 조회
		vo.setCodeId("COM013");
		model.addAttribute("emplyrSttusCode_result", cmmUseService.selectCmmCodeDetail(vo));

		//소속기관코드를 코드정보로부터 조회 - COM025
		vo.setCodeId("COM025");
		model.addAttribute("insttCode_result", cmmUseService.selectCmmCodeDetail(vo));

		//조직정보를 조회 - ORGNZT_ID정보
		vo.setTableNm("LETTNORGNZTINFO");
		model.addAttribute("orgnztId_result", cmmUseService.selectOgrnztIdDetail(vo));

		//그룹정보를 조회 - GROUP_ID정보
		vo.setTableNm("LETTNORGNZTINFO");
		model.addAttribute("groupId_result", cmmUseService.selectGroupIdDetail(vo));

		//조직도 정보조회
		/*PartInfVO partInfVO  = new PartInfVO();
		partInfVO.setDepth(1);
		List<PartInfVO> orgChartDepth1 = orgChartManageService.selectChartDepth(partInfVO);
		model.addAttribute("orgChartDepth1", orgChartDepth1);*/
		
		//권한조회
		AuthorManageVO authorManageVO = new AuthorManageVO();
		authorManageVO.setFirstIndex(0);
  		authorManageVO.setLastIndex(10);
  		authorManageVO.setRecordCountPerPage(10);
  		authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO));
  		model.addAttribute("authorList", authorManageVO.getAuthorManageList());	
  		
  		
  		//selectbox 미리 만들기
  		LocVO locVO = new LocVO();
  		locVO.setTopLocNo(topLocNo); //최상위 매뉴번호
		List<LocVO> orgHiddenList = orgChartManageService.selectOrgChartListAjax(locVO);
		String userOneDepth = "";
		String userTwoDepth = ""; 
				
		if(null != userManageVO.getPartIdx() && !"".equals(userManageVO.getPartIdx())) {
			for(LocVO tempLocVO : orgHiddenList) {
				if(userManageVO.getPartIdx().equals(tempLocVO.getId())){
					if(1==tempLocVO.getDepth()) { //1뎁스면 조회 안함
						userOneDepth = tempLocVO.getId();
					}else { //2뎁스면 
						userTwoDepth = tempLocVO.getId() ;
						userOneDepth = tempLocVO.getParent() ;
					}
				}
			}
		}
		model.addAttribute("userOneDepth", userOneDepth);
		model.addAttribute("userTwoDepth", userTwoDepth);	
		model.addAttribute("orgHiddenList", orgHiddenList);	
		
		return "cmm/uss/umt/EgovUserInsert";
	}

	/**
	 * (사용자) 사용자등록화면으로 이동한다.
	 * @param userSearchVO 검색조건정보
	 * @param userManageVO 사용자초기화정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovUserInsert
	 * @throws Exception
	 */
	@RequestMapping(value= {"/uss/umt/user/EgovGnrlUserInsertView.do", "/uss/umt/user/EgovGnrlUserInsertViewAjax.do"} )
	public String insertGnrlUserView(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, 
			@ModelAttribute("mberManageVO") MberManageVO mberManageVO,
			HttpSession session,
			HttpServletRequest request,
			Model model)
			throws Exception {
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();
		
		//패스워드힌트목록을 코드정보로부터 조회
		vo.setCodeId("COM022");
		model.addAttribute("passwordHint_result", cmmUseService.selectCmmCodeDetail(vo)); //패스워트힌트목록
		
		//성별구분코드를 코드정보로부터 조회
		vo.setCodeId("COM014");
		//List sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
		model.addAttribute("sexdstnCode_result", cmmUseService.selectCmmCodeDetail(vo));
		
		//사용자상태코드를 코드정보로부터 조회
		vo.setCodeId("COM013");
		model.addAttribute("emplyrSttusCode_result", cmmUseService.selectCmmCodeDetail(vo));
		
		//소속기관코드를 코드정보로부터 조회 - COM025
		vo.setCodeId("COM025");
		model.addAttribute("insttCode_result", cmmUseService.selectCmmCodeDetail(vo));
		
		//조직정보를 조회 - ORGNZT_ID정보
		vo.setTableNm("LETTNORGNZTINFO");
		model.addAttribute("orgnztId_result", cmmUseService.selectOgrnztIdDetail(vo));
		
		//그룹정보를 조회 - GROUP_ID정보
		vo.setTableNm("LETTNORGNZTINFO");
		model.addAttribute("groupId_result", cmmUseService.selectGroupIdDetail(vo));
		
		//사용목적/업종 - ITN024
		vo.setCodeId("ITN024");
		model.addAttribute("flowTypeCode", cmmUseService.selectCmmCodeDetail(vo));	
		
		//가입방법 - ITN025
		vo.setCodeId("ITN025");
		model.addAttribute("joinTypeCode", cmmUseService.selectCmmCodeDetail(vo));		
		//조직도 정보조회
		/*PartInfVO partInfVO  = new PartInfVO();
		partInfVO.setDepth(1);
		List<PartInfVO> orgChartDepth1 = orgChartManageService.selectChartDepth(partInfVO);
		model.addAttribute("orgChartDepth1", orgChartDepth1);*/
		
		//권한조회
		AuthorManageVO authorManageVO = new AuthorManageVO();
		authorManageVO.setFirstIndex(0);
		authorManageVO.setLastIndex(10);
		authorManageVO.setRecordCountPerPage(10);
		authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO));
		model.addAttribute("authorList", authorManageVO.getAuthorManageList());	
		
		//config 정보 가져오기
		MberManageConfigVO mberConfigVO = new MberManageConfigVO();
		mberConfigVO.setUseYn("Y"); //사용하는것만
		mberConfigVO.setIsSns("N");;
		List<MberManageConfigVO> mberManageCnfList = mberManageService.selectMberCnf(mberConfigVO);
		model.addAttribute("mberManageCnfList", mberManageCnfList);
		if("/uss/umt/user/EgovGnrlUserInsertViewAjax.do".equals(request.getServletPath())) {
			return "cmm/uss/umt/EgovGnrlUserInsertAjax";	
		}
		
		MberManageVO VO = new MberManageVO();
		if(null != request.getSession().getAttribute("userSearchVO")) { //세션체크
			VO = ((MberManageVO)request.getSession().getAttribute("userSearchVO")) ;
			mberManageVO.setNiceNm(VO.getNiceNm()); //이름
			mberManageVO.setSexdstnCode(VO.getSexdstnCode()); //성별
			mberManageVO.setMoblphonNo(VO.getMoblphonNo()); //핸드폰번호
			mberManageVO.setBirthDay(VO.getBirthDay()); //생년월일
			session.removeAttribute("userSearchVO");
			
		model.addAttribute("mberManageVO", mberManageVO);
		}
		return "cmm/uss/umt/EgovGnrlUserInsert";
	}
	
	/**
	 * 사용자등록처리후 목록화면으로 이동한다.
	 * @param userManageVO 사용자등록정보
	 * @param bindingResult 입력값검증용 bindingResult
	 * @param model 화면모델
	 * @return forward:/uss/umt/user/EgovUserManage.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovUserInsert.do")
	public String insertUser(@ModelAttribute("userManageVO") UserManageVO userManageVO, BindingResult bindingResult, Model model , RedirectAttributes redirectAttributes) throws Exception {
		if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey")) {  
			return "redirect:/uss/umt/user/EgovUserManage.do";
		}
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

		if(!validationPasswd(userManageVO.getPassword())){
			redirectAttributes.addFlashAttribute("message", "패스워드 규칙에 어긋납니다.");
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
			return redirectUrlMaker.getRedirectUrl();
		}
		
		beanValidator.validate(userManageVO, bindingResult);
		if (bindingResult.hasErrors()){
			ComDefaultCodeVO vo = new ComDefaultCodeVO();
			//패스워드힌트목록을 코드정보로부터 조회
			vo.setCodeId("COM022");
			model.addAttribute("passwordHint_result", cmmUseService.selectCmmCodeDetail(vo)); //패스워트힌트목록

			//성별구분코드를 코드정보로부터 조회
			vo.setCodeId("COM014");
			//List sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
			model.addAttribute("sexdstnCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//사용자상태코드를 코드정보로부터 조회
			vo.setCodeId("COM013");
			model.addAttribute("emplyrSttusCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//소속기관코드를 코드정보로부터 조회 - COM025
			vo.setCodeId("COM025");
			model.addAttribute("insttCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//조직정보를 조회 - ORGNZT_ID정보
			vo.setTableNm("LETTNORGNZTINFO");
			model.addAttribute("orgnztId_result", cmmUseService.selectOgrnztIdDetail(vo));

			//그룹정보를 조회 - GROUP_ID정보
			vo.setTableNm("LETTNORGNZTINFO");
			model.addAttribute("groupId_result", cmmUseService.selectGroupIdDetail(vo));
			//return "forward:/uss/umt/user/EgovUserInsertView.do";
			return "cmm/uss/umt/EgovUserInsert";
		}else{
			try{
				userManageService.insertUser(userManageVO);
				redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
			}catch(Exception e){
				redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.insert"));
			}
		}
		//관리자등록일 경우
		if(userManageVO.getGnrlUser().equals("N")) {
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
		return redirectUrlMaker.getRedirectUrl();
		}
		//사용자 등록일 경우
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do");
		return redirectUrlMaker.getRedirectUrl();
		//return "redirect:/uss/umt/user/EgovUserManage.do";
	}

	/**
	 * 사용자정보 수정을 위해 사용자정보를 상세조회한다.
	 * 최고관리자의 경우에는 비밀번호를 체크하지 않는다.
	 * @param uniqId 상세조회대상 사용자아이디
	 * @param userSearchVO 검색조건
	 * @return cmm/uss/umt/EgovUserSelectUpdt
	 * @param model 화면모델
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovUserSelectUpdtView.do")
	public String updateUserView(@RequestParam("selectedId") String uniqId, 
			@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO,
			CateCode cateCode,
			HttpServletRequest request,
			@RequestParam Map<String, Object> commandMap,
			Model model) throws Exception {
		ComDefaultCodeVO vo = new ComDefaultCodeVO();
		//패스워드힌트목록을 코드정보로부터 조회
		vo.setCodeId("COM022");
		model.addAttribute("passwordHint_result", cmmUseService.selectCmmCodeDetail(vo));
		//성별구분코드를 코드정보로부터 조회
		vo.setCodeId("COM014");
		model.addAttribute("sexdstnCode_result", cmmUseService.selectCmmCodeDetail(vo));
		//사용자상태코드를 코드정보로부터 조회
		vo.setCodeId("COM013");
		model.addAttribute("emplyrSttusCode_result", cmmUseService.selectCmmCodeDetail(vo));
		//소속기관코드를 코드정보로부터 조회 - COM025
		vo.setCodeId("COM025");
		model.addAttribute("insttCode_result", cmmUseService.selectCmmCodeDetail(vo));
		//조직정보를 조회 - ORGNZT_ID정보
		vo.setTableNm("LETTNORGNZTINFO");
		model.addAttribute("orgnztId_result", cmmUseService.selectOgrnztIdDetail(vo));
		//그룹정보를 조회 - GROUP_ID정보
		vo.setTableNm("LETTNORGNZTINFO");
		model.addAttribute("groupId_result", cmmUseService.selectGroupIdDetail(vo));

		UserManageVO userManageVO = new UserManageVO();
		userManageVO = userManageService.selectUser(uniqId);
		model.addAttribute("userManageVO", userManageVO);
		
		if(userManageVO == null){
			/*redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.select"));
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
			return redirectUrlMaker.getRedirectUrl();*/
		}
		
		//권한조회
		AuthorManageVO authorManageVO = new AuthorManageVO();
		authorManageVO.setFirstIndex(0);
  		authorManageVO.setLastIndex(10);
  		authorManageVO.setRecordCountPerPage(10);
  		//authorManageVO.setAuthorSet("01");
  		authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO));
  		model.addAttribute("authorList", authorManageVO.getAuthorManageList());	
  		initRsa(request);
  		
  		LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
  		if("ROLE_ADMIN".equals(loginVO.getAuthority())) {
  			model.addAttribute("isAdmin", "Y");
  		}
  		
  		if("ROLE_USER_MEMBER".equals(loginVO.getAuthority())) {
  			model.addAttribute("isMember", "Y");
  		}
  		
  		//selectbox 미리 만들기
  		LocVO locVO = new LocVO();
  		locVO.setTopLocNo(topLocNo); //최상위 매뉴번호
		List<LocVO> orgHiddenList = orgChartManageService.selectOrgChartListAjax(locVO);
		String userOneDepth = "";
		String userTwoDepth = ""; 
				
		if(null != userManageVO.getPartIdx() && !"".equals(userManageVO.getPartIdx())) {
			for(LocVO tempLocVO : orgHiddenList) {
				if(userManageVO.getPartIdx().equals(tempLocVO.getId())){
					if(1==tempLocVO.getDepth()) { //1뎁스면 조회 안함
						userOneDepth = tempLocVO.getId();
					}else { //2뎁스면 
						userTwoDepth = tempLocVO.getId() ;
						userOneDepth = tempLocVO.getParent() ;
					}
				}
			}
		}
		model.addAttribute("userOneDepth", userOneDepth);
		model.addAttribute("userTwoDepth", userTwoDepth);	
		model.addAttribute("orgHiddenList", orgHiddenList);	
		
		
		//카테고리 미리만들기 selectbox 미리 만들기
		List<CateCode> cateCodeList = cmmnDetailCodeManageService.selectCateCodeWithList(cateCode);
		model.addAttribute("cateCodeList", cateCodeList);	
		return "cmm/uss/umt/EgovUserSelectUpdt";
	}
	
	// 회원 조회
	@RequestMapping(value="/uss/umt/user/EgovGnrlselectedUserAjax.do")
	public ModelAndView addrRecvListAjax(@ModelAttribute MberManageVO reqMberManageVO
			, HttpServletRequest request) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");

		boolean isSuccess = true;
		boolean isExist = true;
		String msg = "";
		
		try {
			MberManageVO mberManageVO = new MberManageVO();
			
			//회원정보 불러오기
			mberManageVO = mberManageService.selectMber(reqMberManageVO.getMberId());
			if (null == mberManageVO) {
				isExist = false;	
			}
			
		}
		catch(Exception e) {
			isSuccess = false;
			msg = e.getMessage();
		}		

		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("isExist", isExist);
		modelAndView.addObject("msg", msg);
			
		return modelAndView;
	}			
	
	/**
	 * 사용자정보 수정을 위해 사용자정보를 상세조회한다.
	 * @param selectedUserId -> uniqId 상세조회대상 사용자아이디
	 * @param userSearchVO 검색조건
	 * @return cmm/uss/umt/EgovGnrlUserSelectUpdt
	 * @param model 화면모델
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovGnrlselectedUserView.do")
	public String selectedUserView(@ModelAttribute MberManageVO reqMberManageVO, 
			HttpServletRequest request, 
			Model model) throws Exception {
	/*public String selectedUserView(@RequestParam(value="selectedUserId", required =false, defaultValue="") String uniqId, 
		HttpServletRequest request,
		@ModelAttribute("searchVO") UserDefaultVO userSearchVO,
		RedirectAttributes redirectAttributes , 
		Model model,
		HttpSession session) throws Exception {*/
		
		MberManageVO mberManageVO = new MberManageVO();
		
		//회원정보 불러오기
		mberManageVO = mberManageService.selectMber(reqMberManageVO.getMberId());
		
		//스팸 필터링 예외처리 여부 값 - (온: Y, 오프 : N) 온 일때 스미싱의심 예외 되도록 적용
		String exceptSpamYn = mberManageVO.getExceptSpamYn();
		model.addAttribute("exceptSpamYn", exceptSpamYn);
		
		// 법인폰 알림여부
		UserManageVO userManageVO = new UserManageVO();
		userManageVO.setMberId(reqMberManageVO.getMberId());
		userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO);
		mberManageVO.setAdminSmsNoticeYn(userManageVO.getAdminSmsNoticeYn());
		mberManageVO.setPrePaymentYn(userManageVO.getPrePaymentYn());
		mberManageVO.setAutoCash(userManageVO.getAutoCash());
		
		String userId = mberManageVO.getMberId();
		UserLogVO userLogVO = new UserLogVO();
		userLogVO.setLoginId(userId);
		
		String mberSttus = mberManageVO.getMberSttus();
		
		if(mberSttus.equals("B")) {
			
			MberManageVO resultSpamMberInfo = mberManageService.selectSpamMemberInfo(mberManageVO);
			model.addAttribute("resultSpamMberInfo", resultSpamMberInfo);
			
		}
		
		UserManageVO smishingTmpVO = new UserManageVO();
		smishingTmpVO.setMberId(userId);
		UserManageVO smishingUserVO = userManageService.selectSmishingYnUserInfo(smishingTmpVO);
		model.addAttribute("smishingUserVO", smishingUserVO);
		
		//회원 로그인 로그 기록 조회하기
		userLogVO.setFirstIndex(0);
		List<UserLogVO> userLogList = userLogService.selectLoginLogId(userLogVO);
		model.addAttribute("userLogList",userLogList);
		
		//회원 메모 기록 조회하기
		List<MberManageVO> memoList = mberManageService.selectMberMemo(mberManageVO);
		model.addAttribute("memoList", memoList);
		
		//현월 총 발송건수
		String msgMonthSum = mjonMsgDataService.selectMsgSentSumData(userId);
		Calendar aCalendar = Calendar.getInstance();
		int nowMonth = aCalendar.get(Calendar.MONTH) + 1;
		model.addAttribute("month", Integer.toString(nowMonth));
		model.addAttribute("msgMonthSum", msgMonthSum);
		
		//총 결제 금액 조회하기
		String sumPayMoney = mjonPayService.selectSumPayMoney(userId); 
		model.addAttribute("sumPayMoney", sumPayMoney);
		
		//연간 결제 횟수
		String oneYearPayCnt = mjonPayService.selectOneYearPayCnt(userId);
		model.addAttribute("oneYearPayCnt", oneYearPayCnt);
		//회원 캐시 및 포인트 조회하기
		Double userMoney = 0.0;
  		String userPoint = "0";
  		String money = "0";
  		MjonMsgVO mjonMsgVO = new MjonMsgVO();
  		mjonMsgVO.setUserId(userId);
  		
  		//보유캐시 정보 조회하기
		money = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
		if(money != null) {
			userMoney = Double.parseDouble(money);
		}
		//보유 포인트 정보 불러오기
		userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO);
		
		model.addAttribute("userMoney", userMoney);
		model.addAttribute("userPoint", userPoint);
		
		//발신번호 리스트 조회하기
		MjPhoneMemberVO phoneMemberVO = new MjPhoneMemberVO();
		phoneMemberVO.setUserId(userId);
		phoneMemberVO.setFirstIndex(0);
		List<MjPhoneMemberVO> sendNumberList = mjonMsgService.selectSendNumberList(phoneMemberVO);
		MJUtil mjUtil = new MJUtil();
		
		for(int i=0; i < sendNumberList.size(); i++) {
			String phoneNumber = mjUtil.addDash(sendNumberList.get(i).getPhoneNumber());
			sendNumberList.get(i).setPhoneNumber(phoneNumber);
		}
		int countNum = sendNumberList.size() > 0 ? sendNumberList.get(0).getTotCnt() : 0;
		
		model.addAttribute("countNum", countNum);
		model.addAttribute("sendNumberList", sendNumberList);
		
		//문자발송 단가 조회하기
		//1.시스템 기본 단가 정보 조회하기
		JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
		
		//2.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
		Float shortPrice = mberManageVO.getShortPrice();
		Float longPrice = mberManageVO.getLongPrice();
		Float picturePrice = mberManageVO.getPicturePrice();
		Float picture2Price = mberManageVO.getPicture2Price();
		Float picture3Price = mberManageVO.getPicture3Price();
		Float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
		Float faxPrice = mberManageVO.getFaxPrice();
		System.out.println("mberManageVO.getFaxPrice() : " + mberManageVO.getFaxPrice());
		
		if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {
			
			shortPrice = sysJoinSetVO.getShortPrice();
			longPrice = sysJoinSetVO.getLongPrice();
			picturePrice = sysJoinSetVO.getPicturePrice();
			picture2Price = sysJoinSetVO.getPicture2Price();
			picture3Price = sysJoinSetVO.getPicture3Price();
		}

		if(kakaoAtPrice < 1) {
			kakaoAtPrice = sysJoinSetVO.getKakaoAtPrice();
		}
		if(faxPrice < 1) {
			faxPrice = sysJoinSetVO.getFaxPrice();
		}
		
		model.addAttribute("shortPrice", shortPrice);
		model.addAttribute("longPrice", longPrice);
		model.addAttribute("picturePrice", picturePrice);
		model.addAttribute("picture2Price", picture2Price);
		model.addAttribute("picture3Price", picture3Price);
		model.addAttribute("kakaoAtPrice", kakaoAtPrice);
		model.addAttribute("faxPrice", faxPrice);
		model.addAttribute("sysJoinSetVO", sysJoinSetVO);
		
		//포인트 교환 내역 조회하기
		MjonPayVO mjonPayVO = new MjonPayVO();
		mjonPayVO.setUserId(userId);
		
		//최근 5개만 불러오도록 페이징 처리함
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(mjonPayVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(mjonPayVO.getPageUnit());
		paginationInfo.setPageSize(mjonPayVO.getPageSize());
		
		mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex());
		mjonPayVO.setRecordCountPerPage(5);
		
		if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			mjonPayVO.setSearchSortCnd("pointUseId");
			mjonPayVO.setSearchSortOrd("desc");
		}
		//포인트 교환 내역 조회
        List<MjonPayVO> pointUseList = mjonPayService.selectPointUseList(mjonPayVO);
        model.addAttribute("pointUseList", pointUseList);
        
        //KISA 신고내역 조회하기
        KisaVO kisaVO = new KisaVO();
        kisaVO.setMberId(userId);
		
        List<KisaVO> kisaList = kisaService.selectKisaListMberId(kisaVO);
        model.addAttribute("kisaList", kisaList);
		
        //환불요청 내역 조회하기
        ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
		//환불요청 코드 조회
		comDefaultCodeVO.setCodeId("ITN041");
		List<?> codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
		model.addAttribute("refundStatuscode", codeResult);
		
		RefundVO refundVO = new RefundVO();
		refundVO.setMberId(userId);
		List<RefundVO> refundList = refundService.selectRefundListAllById(refundVO);
        model.addAttribute("refundList", refundList);
        
        //double 지수표현 제거를 위해 BigDecimal 사용
  		List<BigDecimal> cashList = new ArrayList<>();
  		for(int i = 0 ; i < refundList.size() ; i++) {
  			BigDecimal b2 = new BigDecimal(refundList.get(i).getRefundMoney()).setScale(2, RoundingMode.HALF_EVEN);
  			cashList.add(b2);
  		}
  		
  		model.addAttribute("cashList", cashList);
  		
        //사용목적/업종 코드조회- ITN024
		ComDefaultCodeVO vo = new ComDefaultCodeVO();
		vo.setCodeId("ITN024");
		model.addAttribute("flowTypeCode", cmmUseService.selectCmmCodeDetail(vo));
		
		//최근 발송 문자 내용 불러오기 - 최근 3개 내역만
		List<MjonMsgSentVO> mjonMsgSentList = mberManageService.selectMberMsgSentLatestList(userId);
		model.addAttribute("mjonMsgSentList", mjonMsgSentList);
		
		//최근 발송 문자 내용 불러오기 - 최근 3개 내역만(에약)
		List<MjonMsgSentVO> mjonMsgSentList2 = mberManageService.selectMberMsgSentLatestList2(userId);
		model.addAttribute("mjonMsgSentList2", mjonMsgSentList2);		
		
		
		//스팸 및 스미싱 문자 지연처리 문자 내용 불러오기(30분 지연처리된 문자 내역 불러오기)
		List<MjonMsgSentVO> mjonMsgDelaySentList = mberManageService.selectMberMsgDelaySentList(userId);
		model.addAttribute("mjonMsgDelaySentList", mjonMsgDelaySentList);
		
		model.addAttribute("mberManageVO", mberManageVO);
		
		{
			/**
			 * 최근 알리톡/친구톡 전송 내역
			 * */			
			//최근 발송 문자 내용 불러오기 - 최근 3개 내역만
			List<MjonKakaoATSentVO> mjonKakaoATSentList = mjonKakaoATService.selectMberKakaoATSentLatestList(userId);
			model.addAttribute("mjonKakaoATSentList", mjonKakaoATSentList);			
		}
		
		{
			/**
			 * 이벤트 회원 정보 불러오기
			 * 
			 * 
			 * */
			
			String mberId = reqMberManageVO.getMberId();
			MjonEventVO mjonEventVO = new MjonEventVO();
			mjonEventVO.setMberId(mberId);
			//mjonEventVO.setEventStatus("Y");
			MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
    		
			model.addAttribute("eventMberInfo", eventMberInfo);
			long eventDiffDate = 0;
			boolean compareEndDate = false;
			if(eventMberInfo != null) {
				
				String eventEndDate = eventMberInfo.getEventEndDate();
				
				/**
				 * MJUtil.getCompareDate()
				 * 현재 날짜와 파라미터 전달 날짜를 비교
				 * 전달날짜를 지난경우 False를 리턴함.
				 * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함.
				 * 
				 * */
				
				if(eventEndDate != null) {
					
					compareEndDate = MJUtil.getCompareDate(eventEndDate);
					
					if(!compareEndDate) {//이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴
						
						if(!eventMberInfo.getEventStatus().equals("E")) {
							
							//이벤트 상태값을 종료로 변경한다.
							mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId());
							mjonEventVO.setEventStatus("E");
							mjonEventService.updateEventEndStatus(mjonEventVO);
							
						}
						
					}else {//이벤트 진행중이면 남은 날짜 계산해서 전달.
						
						/**
						 * MJUtil.getDiffDateDay()
						 * 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌.
						 * 
						 * */
						eventDiffDate = MJUtil.getDiffDateDay(eventEndDate);
						
					}
					
				}
				
			}
			
			//남은 날짜값을 절대값으로 변경(음수로 나오기 때문)
			model.addAttribute("eventDiffDate", Math.abs(eventDiffDate));
			model.addAttribute("compareEndDate", compareEndDate);
		}
		
		
		{// 맞춤제작 리스트 조회
			
			//제작형태 코드 조회
			comDefaultCodeVO.setCodeId("ITN030");
			List<?> customCode = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
			model.addAttribute("customCode", customCode);
			
			//요청상태 코드 조회
			comDefaultCodeVO.setCodeId("ITN040");
			List<?> compleatCode = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
			model.addAttribute("compleatCode", compleatCode);
			
			MjonMsgCustomVO mjonMsgCustomVO = new MjonMsgCustomVO();
			mjonMsgCustomVO.setUserId(userId);
			List<MjonMsgCustomVO> customtList = mjonMsgCustomService.selectUserCustomtList(mjonMsgCustomVO);
			model.addAttribute("customtList", customtList);
		}
		
		{// 문자 타입별 최저/최고 단가
			double minPriceS;
			double maxPriceS;
			double minPriceL;
			double maxPriceL;
			double minPriceP;
			double maxPriceP;
			double avgPriceS = 0.00;
			double avgPriceL = 0.00;
			double avgPriceP = 0.00;
			
			double kakaoAtCost = 0.00;
			double kakaoAtMargin = 0.00;
			
			double faxCost = 0.00;
			double faxMargin = 0.00;
			
			MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO();
			mjonMsgAgentStsVO.setMsgType("S");
			mjonMsgAgentStsVO = mjonMsgAgentStsService.selectMjonMsgAgentMinMaxInfo(mjonMsgAgentStsVO);
			minPriceS = mjonMsgAgentStsVO.getMinPrice();
			maxPriceS = mjonMsgAgentStsVO.getMaxPrice();

			mjonMsgAgentStsVO.setMsgType("L");
			mjonMsgAgentStsVO = mjonMsgAgentStsService.selectMjonMsgAgentMinMaxInfo(mjonMsgAgentStsVO);			
			minPriceL = mjonMsgAgentStsVO.getMinPrice();
			maxPriceL = mjonMsgAgentStsVO.getMaxPrice();			
			
			mjonMsgAgentStsVO.setMsgType("P");
			mjonMsgAgentStsVO = mjonMsgAgentStsService.selectMjonMsgAgentMinMaxInfo(mjonMsgAgentStsVO);			
			minPriceP = mjonMsgAgentStsVO.getMinPrice();
			maxPriceP = mjonMsgAgentStsVO.getMaxPrice();
			
			List<MjonMsgAgentStsVO> msgAvgPriceList = new ArrayList<MjonMsgAgentStsVO>();
			msgAvgPriceList = mjonMsgAgentStsService.selectMsgAvgPriceList();
			for (MjonMsgAgentStsVO item : msgAvgPriceList) {
				if (item.getMsgType().equals("S")) {
					avgPriceS = Double.parseDouble(item.getAgentPrice()); 
				}
				else if (item.getMsgType().equals("L")) {
					avgPriceL = Double.parseDouble(item.getAgentPrice());
				}
				else if (item.getMsgType().equals("P")) {
					avgPriceP = Double.parseDouble(item.getAgentPrice());
				}
			}
			
			// kakao 원가
			kakaoAtCost = kakaoApiService.selectKakaoCost();
			kakaoAtMargin = (1-(kakaoAtCost / kakaoAtPrice))*100;
			
			// fax 원가 SELECT
			faxCost = faxService.getFaxCost();
			// fax 마직 계산 :: 1-원가/단가
			faxMargin = (1-(faxCost / faxPrice))*100;
			
			
			model.addAttribute("minPriceS", minPriceS);
			model.addAttribute("maxPriceS", maxPriceS);
			model.addAttribute("minPriceL", minPriceL);
			model.addAttribute("maxPriceL", maxPriceL);
			model.addAttribute("minPriceP", minPriceP);
			model.addAttribute("maxPriceP", maxPriceP);
			model.addAttribute("avgPriceS", avgPriceS);
			model.addAttribute("avgPriceL", avgPriceL);
			model.addAttribute("avgPriceP", avgPriceP);
			model.addAttribute("kakaoAtCost", kakaoAtCost);
			model.addAttribute("kakaoAtMargin", kakaoAtMargin);
			model.addAttribute("faxCost", faxCost);
			model.addAttribute("faxMargin", faxMargin);
		}		
		
		{//첫결제 내역 정보 불러오기
			
			MjonPayVO resultMjonFrstPayVO = mjonPayService.selectFrstPayInfoByUserId(userId);
			model.addAttribute("resultMjonFrstPayVO", resultMjonFrstPayVO);
			
			if(resultMjonFrstPayVO != null) {
			
				//첫결제 충전 포인트 정보 조회
				MjonPayVO resultMjonFrstPointVO = mjonPayService.selectFrstPointInfoByUserId(resultMjonFrstPayVO);
				model.addAttribute("mjonFrstPointVO", resultMjonFrstPointVO);
				
			}
			
		}
		
		
		{//카카오 채널 및 알림톡 관련 내역 처리
			//System.out.println("++++++++++++++++++++ serverName ::: "+request.getServerName());
			//String serverName = request.getServerName();
			
			//if(!serverName.equals("www.munjaon.co.kr")) {
				
			/*
			 * 카카오 채널ID 정보 불러오기(채널 갯수)
			 * */
			System.out.println(reqMberManageVO.getMberId());
			KakaoVO kakaoVO = new KakaoVO();
			kakaoVO.setUserId(reqMberManageVO.getMberId());
			
			List<KakaoVO> resultKakaoChannelIDList = kakaoApiService.selectKakaoProfileList(kakaoVO);
			
			int channelIdCnt = resultKakaoChannelIDList.size();
			
			model.addAttribute("channelIdCnt", channelIdCnt);
			model.addAttribute("resultKakaoChannelIDList", resultKakaoChannelIDList);
			
			/*
			 * 알림톡/친구톡 최근 발송내역 리스트 불러오기
			 * */
			
			KakaoVO sendKakaoVO = new KakaoVO();
			sendKakaoVO.setSearchCondition2("N");//예약건은 제외하기
			sendKakaoVO.setReserveCYn("N");//예약취소건은 제외하기
			sendKakaoVO.setUserId(reqMberManageVO.getMberId());
			// 문자발송 완료건은 모두 보이도록 처리
			//kakaoVO.setMsgType("8");
			sendKakaoVO.setSearchSortCnd("reqDate");
			sendKakaoVO.setSearchSortOrd("desc");
			sendKakaoVO.setFirstIndex(0);
			List<KakaoVO> kakaoResultList = new ArrayList<KakaoVO>();
			kakaoResultList = mjonKakaoATService.selectMjonKakaoATGroupCompleteList(sendKakaoVO);
			
	        model.addAttribute("kakaoResultList", kakaoResultList);
			
			/*
			 * 알림톡/친구톡 예약발송 리스트 불러오기
			 * */
	        
	        KakaoVO reserveKakaoVO = new KakaoVO();
	        reserveKakaoVO.setSearchCondition2("Y");//예약건만 불러오기
	        reserveKakaoVO.setReserveCYn("N");//예약취소건은 제외하기
	        reserveKakaoVO.setUserId(reqMberManageVO.getMberId());
			// 문자발송 완료건은 모두 보이도록 처리
			//kakaoVO.setMsgType("8");
	        reserveKakaoVO.setSearchSortCnd("reqDate");
	        reserveKakaoVO.setSearchSortOrd("desc");
	        reserveKakaoVO.setFirstIndex(0);
			List<KakaoVO> kakaoReserveList = new ArrayList<KakaoVO>();
			kakaoReserveList = mjonKakaoATService.selectReserveMjonKakaoATGroupList(reserveKakaoVO);
			
	        model.addAttribute("kakaoReserveList", kakaoReserveList);
			
			/*
			 * 팩스 발송 내역 리스트 불러오기
			 * */

			List<FaxGroupDataVO> faxSendListVO = faxService.selectFaxMainList(new FaxGroupDataVO(reqMberManageVO.getMberId()));
			model.addAttribute("faxSendListVO", faxSendListVO);
				
			//}
			
		}
		
		{//사용중인 전송사 정보 조회하기 - 사용자 전용 전송사 리스트 표시용
			
			List<MjonMsgAgentStsVO> hotlineMsgAgentList = mjonMsgAgentStsService.selectMsgAgentListByHotline();
			model.addAttribute("hotlineMsgAgentList", hotlineMsgAgentList);
			
		}
		
		return "cmm/uss/umt/EgovGnrlUserSelectUpdt";
	}
	
	/**
     * 회원정보 팝업 이벤트 강제 종료 기능
     * @param eventVO
     * @param model
     * @return modelAndView
     * @throws Exception
     * /kisaWeb/kisaWeb/updateKisaWarnMessageAjax.do
     */
	@RequestMapping(value = {"/uss/umt/user/updateEventEndAjax.do"})
	public ModelAndView updateEventEndAjax(MjonEventVO mjonEventVO) 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 == null) {
    		
    		modelAndView.addObject("message", "로그인이 필요합니다.");
			modelAndView.addObject("result", "loginFail");
			return modelAndView;
    		
    	}
		
		//이벤트 강제 종료 처리 
		mjonEventVO.setEventEndDate(MJUtil.getRealTime());
		mjonEventVO.setEventStatus("E");
		
		//이벤트 강제 처리에 따른 회원 메모 추가
		MberManageVO mberManageVO = new MberManageVO(); 
		mberManageVO.setMberId(mjonEventVO.getMberId());
		mberManageVO.setFrstRegisterId(userId);//관리자 아이디
		mberManageVO.setUniqId(mjonEventVO.getUniqId());//회원의 고유 아이디
		mberManageVO.setMemoCn("이벤트 강제 종료 처리 사유 : " + mjonEventVO.getEventMemo());
		
		//이벤트 강제종료 처리 및 회원 메모 입력
		int resultCnt = mjonEventService.updateEventAdmClosedStatus(mjonEventVO, mberManageVO);
		
		if(resultCnt > 0) {
			
			modelAndView.addObject("message", "이벤트가 정상적으로 종료 되었습니다.");
			modelAndView.addObject("result", "success");
			
		}else {
			
			modelAndView.addObject("message", "이벤트를 종료하는중 오류가 발생하였습니다.");
			modelAndView.addObject("result", "fail");
			
		}
		return modelAndView;
	}
	
	/**
     * 회원정보 팝업 이벤트 수정 기능
     * @param eventVO
     * @param model
     * @return modelAndView
     * @throws Exception
     * /kisaWeb/kisaWeb/updateKisaWarnMessageAjax.do
     */
	@RequestMapping(value = {"/uss/umt/user/updateEventEditAjax.do"})
	public ModelAndView updateEventEditAjax(MjonEventVO mjonEventVO) 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 == null) {
    		
    		modelAndView.addObject("message", "로그인이 필요합니다.");
			modelAndView.addObject("result", "loginFail");
			return modelAndView;
    		
    	}
		
		//이벤트 강제 종료 처리 - 이벤트 종료일자가 없으면 현재 시간 입력
    	//이벤트 수정시 시작일 및 종료일의 값을 넘겨주고 있음
    	if(mjonEventVO.getEventEndDate().equals("")) {
    		mjonEventVO.setEventEndDate(MJUtil.getRealTime());
    	}
		mjonEventVO.setEventStatus("Y");
		
		//이벤트 강제 처리에 따른 회원 메모 추가
		MberManageVO mberManageVO = new MberManageVO(); 
		mberManageVO.setMberId(mjonEventVO.getMberId());
		mberManageVO.setFrstRegisterId(userId);//관리자 아이디
		mberManageVO.setUniqId(mjonEventVO.getUniqId());//회원의 고유 아이디

		String memo = "";
		memo = "첫결제 충전캐시 수정 : " + mjonEventVO.getEventRemainOriginCash() + "원 => " + mjonEventVO.getEventRemainCash() + "원으로 변경";
		if (!mjonEventVO.getEventMemo().equals("")) {
			memo += ", 수정코멘트 : " + mjonEventVO.getEventMemo();
		}
		mberManageVO.setMemoCn(memo);
		
		//이벤트 강제종료 처리 및 회원 메모 입력
		int resultCnt = mjonEventService.updateEventAdmEdit(mjonEventVO, mberManageVO);
		
		if(resultCnt > 0) {
			
			modelAndView.addObject("message", "이벤트가 정상적으로 수정 되었습니다.");
			modelAndView.addObject("result", "success");
			
		}else {
			
			modelAndView.addObject("message", "이벤트 수정중 오류가 발생하였습니다.");
			modelAndView.addObject("result", "fail");
			
		}
		return modelAndView;
	}	
	
	/**
     * 회원정보 팝업 이벤트 정보 신규 추가  기능
     * @param eventVO
     * @param model
     * @return modelAndView
     * @throws Exception
     * 
     */
	@RequestMapping(value = {"/uss/umt/user/insertEventAddAjax.do"})
	public ModelAndView insertEventAddAjax(MjonEventVO mjonEventVO) 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 == null) {
    		
    		modelAndView.addObject("message", "로그인이 필요합니다.");
			modelAndView.addObject("result", "loginFail");
			return modelAndView;
    		
    	}
		
    	
    	try {
    		
    		/**
    		 * 이벤트 컨텐츠 정보 불러오기
    		 * 이벤트 게시글 제목 및 카테고리로 검색해서 불러온다.
    		 * 
    		 * */
    		float nttId = 0;
    		String bbsId = "BBSMSTR_000000000731";	//이벤트 게시판 번호
    		String nttSj = "[첫결제 이벤트] 첫 결제 시, 누구나 조건 없이 인생 최저가!";
    		BoardVO resultEvent = selectEventBoardInfo(bbsId, nttSj);
    		
    		//이벤트 현재 시간 및 2개월 뒤 시간 셋팅
    		String nowDate = MJUtil.getRealTime();
    		String eventEndDate = MJUtil.getAfterTimerMonth(2);
    		
    		mjonEventVO.setEventStartDate(nowDate);									//이벤트 시작일자 설정
    		mjonEventVO.setEventEndDate(eventEndDate);								//이벤트 종료일자 설정
    		mjonEventVO.setEventStatus("Y");										//이벤트 상태를 진행 중으로 변경
    		mjonEventVO.setEventPolicyYn("Y");										//정책 동의
    		mjonEventVO.setEventSmsYn("N");											//문자 수신 동의
    		mjonEventVO.setEventShortPrice("7.5");									//단문 단가
    		mjonEventVO.setEventLongPrice("32");									//장문 단가
    		mjonEventVO.setEventPicturePrice("59");									//그림1장 단가
    		mjonEventVO.setEventPicture2Price("67");								//그림2장 단가
    		mjonEventVO.setEventPicture3Price("70");								//그림3장 단가
    		mjonEventVO.setFrstRegisterId(userId);									//등록처리하는 관리자 아이디 셋팅
    		
    		if(resultEvent != null) {//이벤트 게시판의 이벤트 게시글 번호 셋팅
    			
    			mjonEventVO.setEventNttId(Float.toString(resultEvent.getNttId()));
    			mjonEventVO.setEventBbsId(resultEvent.getBbsId());
    			
    		}else {//이벤트 게시글 정보가 없으면 0으로 셋팅.
    			
    			modelAndView.addObject("resultSts", "eventEnded");
    			return modelAndView;
    			
    		}
    		
    		//이벤트 회원정보 존재여부 확인 및 회원 정보 불러오기
    		MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
    		
    		if(eventMberInfo != null) {
    			
    			modelAndView.addObject("message", "등록된 이벤트 정보가 있어 추가할 수 없습니다.");
    			modelAndView.addObject("result", "fail");
    			return modelAndView;
    			
    		}
    		
    		//이벤트 정보 신규 추가 처리
    		int resultCnt = mjonEventService.insertEventFrstInfoByAdm(mjonEventVO);
    		
    		if(resultCnt > 0) {
    			
    			modelAndView.addObject("message", "이벤트가 정상적으로 추가 되었습니다.");
    			modelAndView.addObject("result", "success");
    			
    		}else {
    			
    			modelAndView.addObject("message", "이벤트를 추가하는중 오류가 발생하였습니다.");
    			modelAndView.addObject("result", "fail");
    			
    		}
			
		} catch (Exception e) {
			
			System.out.println("++++++++++++++++ insertEventAddAjax Controller Error !!! " + e);
			modelAndView.addObject("message", "이벤트를 추가하는중 오류가 발생하였습니다.");
			modelAndView.addObject("result", "fail");
			return modelAndView;
			
		}
    	
		return modelAndView;
	}
	
    //이벤트 게시글 정보 불러오기 함수
    public BoardVO selectEventBoardInfo(String bbsId, String nttSj) throws Exception{
    	
		BoardVO boardVO = new BoardVO();
		boardVO.setBbsId(bbsId);
		boardVO.setNttSj(nttSj);
		BoardVO resultEvent = mjonEventService.selectEventInfoByNttSj(boardVO);
		
		return resultEvent;
    }
	
	/**
	 * 사용자정보 발송 문자내역 리스트 팝업 띄우기
	 * @param selectedUserId -> uniqId 상세조회대상 사용자아이디
	 * @param userSearchVO 검색조건
	 * @return cmm/uss/umt/EgovGnrlUserSelectUpdtPopup
	 * @param model 화면모델
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovGnrlselectedUserMsgDataListAjax.do")
	public String EgovGnrlselectedUserMsgDataListAjax(@ModelAttribute MberManageVO reqMberManageVO,
			@ModelAttribute("searchVO") MjonMsgVO searchVO,
			HttpServletRequest request, 
			Model model) throws Exception {

		
		searchVO.setUserId(reqMberManageVO.getMberId());
		
		//회원정보 불러오기
		MberManageVO mberManageVO = mberManageService.selectMber(reqMberManageVO.getMberId());
		
		String mberSttus = mberManageVO.getMberSttus(); //이용자 상태값 저장
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
		paginationInfo.setPageSize(searchVO.getPageSize());
		
		searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
		searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			searchVO.setSearchSortCnd("msgGroupId");
			searchVO.setSearchSortOrd("desc");
		}
		
		//3개월전 첫째날과 마지막 날짜 받아오기
		if(StringUtil.isEmpty(searchVO.getNtceBgnde())) {
			
			searchVO.setNtceBgnde(StringUtil.getDate3MonthAgoFirstDay());
			searchVO.setNtceEndde(StringUtil.getDateMonthLastDay());
			if (searchVO.getReserveType().equals("R")) {
				searchVO.setNtceEndde(StringUtil.getDateMonthLastDay1YearAfter());
			}
		}
		
		//searchVO 원본 문자 타입 및 파일 갯수 저장해 놓기
		String msgType = searchVO.getMsgType();
		String fileCnt = searchVO.getFileCnt();
		
		//전체 리스트 불러오기
		List<MjonMsgVO> resultList = new ArrayList<MjonMsgVO>();
		searchVO.setMsgType("");
		//resultList = mjonMsgService.selectUserMsgDataListByMbrId(searchVO);
		resultList = mjonMsgService.selectUserMsgDataListByMbrId2(searchVO);
        model.addAttribute("resultList", resultList);
        model.addAttribute("mberSttus", mberSttus); //이용자 상태값 전달

        //종합 리스트 정보 불러오기
        
        //단문  리스트 정보 불러오기
        List<MjonMsgVO> resultSmsList = new ArrayList<MjonMsgVO>();
        searchVO.setMsgType("4");
        searchVO.setFileCnt("");
        resultSmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
        model.addAttribute("resultSmsList", resultSmsList);
        
        //장문 리스트 정보 불러오기
        List<MjonMsgVO> resultLmsList = new ArrayList<MjonMsgVO>();
        searchVO.setMsgType("6");
        searchVO.setFileCnt("");
        resultLmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
        model.addAttribute("resultLmsList", resultLmsList);
        
        //그림 리스트 정보 불러오기
        List<MjonMsgVO> resultMmsList = new ArrayList<MjonMsgVO>();
        searchVO.setMsgType("6");
        searchVO.setFileCnt("0");
        resultMmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
        model.addAttribute("resultMmsList", resultMmsList);
        
        //searchVO 데이터 원복 시키기
        searchVO.setMsgType(msgType);
        searchVO.setFileCnt(fileCnt);
        
        //문자발송 실패 결과 코드정보 리스트 불러오기
        MjonMsgResultCodeVO mjonMsgResultCodeVO = new MjonMsgResultCodeVO();
        List<MjonMsgResultCodeVO> resultMsgCodeList = mjonMsgService.selectMsgResultCodeAllList(mjonMsgResultCodeVO);
        
        model.addAttribute("resultMsgCodeList", resultMsgCodeList);
        
        paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonMsgVO)resultList.get(0)).getTotCnt() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		
		String msgGroupSCntSum = "0";	//정상수신 총 건수 합계
		String totSPriceSum = "0";	//정상수신 총 금액 합계
		String msgGroupFWCntSum = "0";	//실패대기 총 건수 합계
		String totFWPriceSum = "0";	//실패대기 총 금액 합계
		
		if(resultList.size() > 0) {
			
			msgGroupSCntSum = ((MjonMsgVO)resultList.get(0)).getMsgGroupSCntSum();
			totSPriceSum = ((MjonMsgVO)resultList.get(0)).getTotSPriceSum();
			msgGroupFWCntSum = ((MjonMsgVO)resultList.get(0)).getMsgGroupFWCntSum();
			totFWPriceSum = ((MjonMsgVO)resultList.get(0)).getTotFWPriceSum();
			
		}
		
		model.addAttribute("msgGroupSCntSum", msgGroupSCntSum);
		model.addAttribute("totSPriceSum", totSPriceSum);
		model.addAttribute("msgGroupFWCntSum", msgGroupFWCntSum);
		model.addAttribute("totFWPriceSum", totFWPriceSum);
		
		
		//단문 건수 및 금액 변수 처리
		String msgSmsGroupSCntSum = "0";	//정상수신 총 건수 합계
		String totSmsSPriceSum = "0";	//정상수신 총 금액 합계
		String msgSmsGroupFWCntSum = "0";	//실패대기 총 건수 합계
		String totSmsFWPriceSum = "0";	//실패대기 총 금액 합계
		
		if(resultSmsList.size() > 0) {
			
			msgSmsGroupSCntSum = ((MjonMsgVO)resultSmsList.get(0)).getMsgGroupSCntSum();
			totSmsSPriceSum = ((MjonMsgVO)resultSmsList.get(0)).getTotSPriceSum();
			msgSmsGroupFWCntSum = ((MjonMsgVO)resultSmsList.get(0)).getMsgGroupFWCntSum();
			totSmsFWPriceSum = ((MjonMsgVO)resultSmsList.get(0)).getTotFWPriceSum();
			
		}
		
		model.addAttribute("msgSmsGroupSCntSum", msgSmsGroupSCntSum);
		model.addAttribute("totSmsSPriceSum", totSmsSPriceSum);
		model.addAttribute("msgSmsGroupFWCntSum", msgSmsGroupFWCntSum);
		model.addAttribute("totSmsFWPriceSum", totSmsFWPriceSum);
		
		
		//장문 건수 및 금액 변수 처리
		String msgLmsGroupSCntSum = "0";	//정상수신 총 건수 합계
		String totLmsSPriceSum = "0";	//정상수신 총 금액 합계
		String msgLmsGroupFWCntSum = "0";	//실패대기 총 건수 합계
		String totLmsFWPriceSum = "0";	//실패대기 총 금액 합계
		
		if(resultLmsList.size() > 0) {
			
			msgLmsGroupSCntSum = ((MjonMsgVO)resultLmsList.get(0)).getMsgGroupSCntSum();
			totLmsSPriceSum = ((MjonMsgVO)resultLmsList.get(0)).getTotSPriceSum();
			msgLmsGroupFWCntSum = ((MjonMsgVO)resultLmsList.get(0)).getMsgGroupFWCntSum();
			totLmsFWPriceSum = ((MjonMsgVO)resultLmsList.get(0)).getTotFWPriceSum();
			
		}
		
		model.addAttribute("msgLmsGroupSCntSum", msgLmsGroupSCntSum);
		model.addAttribute("totLmsSPriceSum", totLmsSPriceSum);
		model.addAttribute("msgLmsGroupFWCntSum", msgLmsGroupFWCntSum);
		model.addAttribute("totLmsFWPriceSum", totLmsFWPriceSum);
		
		
		//그림 건수 및 금액 변수 처리
		String msgMmsGroupSCntSum = "0";	//정상수신 총 건수 합계
		String totMmsSPriceSum = "0";	//정상수신 총 금액 합계
		String msgMmsGroupFWCntSum = "0";	//실패대기 총 건수 합계
		String totMmsFWPriceSum = "0";	//실패대기 총 금액 합계
		
		if(resultMmsList.size() > 0) {
			
			msgMmsGroupSCntSum = ((MjonMsgVO)resultMmsList.get(0)).getMsgGroupSCntSum();
			totMmsSPriceSum = ((MjonMsgVO)resultMmsList.get(0)).getTotSPriceSum();
			msgMmsGroupFWCntSum = ((MjonMsgVO)resultMmsList.get(0)).getMsgGroupFWCntSum();
			totMmsFWPriceSum = ((MjonMsgVO)resultMmsList.get(0)).getTotFWPriceSum();
			
		}
		
		model.addAttribute("msgMmsGroupSCntSum", msgMmsGroupSCntSum);
		model.addAttribute("totMmsSPriceSum", totMmsSPriceSum);
		model.addAttribute("msgMmsGroupFWCntSum", msgMmsGroupFWCntSum);
		model.addAttribute("totMmsFWPriceSum", totMmsFWPriceSum);
		
		
		return "cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop";
	}
	
	/**
	* @Method Name : EgovGnrlselectedUserKakaoDataListAjax
	* @작성일 : 2023. 3. 6.
	* @작성자 :  우영두
	* @Method 설명 : 카카오 알림톡 사용자 발송 내역 팝업 호출
	*/
	@RequestMapping("/uss/umt/user/kakaoat/EgovGnrlselectedUserKakaoDataListAjax.do")
	public String EgovGnrlselectedUserKakaoDataListAjax(
			@ModelAttribute("searchVO") KakaoVO searchVO
			, @ModelAttribute MberManageVO reqMberManageVO
			, HttpServletRequest request
			, Model model) throws Exception {
		
		
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		if(id == "") {
			return "redirect:/uat/uia/EgovLoginUsr.do";
		}
		
		try {
			
			String userId = reqMberManageVO.getMberId();
			String reserveType = searchVO.getReserveType();
			
			//회원정보 불러오기
			MberManageVO mberManageVO = mberManageService.selectMber(reqMberManageVO.getMberId());
			
			String mberSttus = mberManageVO.getMberSttus(); //이용자 상태값 저장
			
			/** pageing */
			PaginationInfo paginationInfo = new PaginationInfo();
			paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
			paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
			paginationInfo.setPageSize(searchVO.getPageSize());
			
			searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
			searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
			searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
			
			if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
				searchVO.setSearchSortCnd("msgGroupId");
				searchVO.setSearchSortOrd("desc");
			}
			
			/*
			 * 1년전 첫째날과 마지막 날짜 받아오기
			 * 예약 발송 내역의 경우 1년 후의 날짜로 종료일을 셋팅해준다.
			 * */
			if(StringUtil.isEmpty(searchVO.getNtceBgnde())) {
				
				searchVO.setNtceBgnde(StringUtil.getDate3MonthAgoFirstDay());
				searchVO.setNtceEndde(StringUtil.getDateMonthLastDay());
				if (searchVO.getReserveType().equals("R")) {
					searchVO.setNtceEndde(StringUtil.getDateMonthLastDay1YearAfter());
				}
			}
			
			//전송 완료 불러오기
			searchVO.setUserId(userId);
			searchVO.setSearchSortCnd("reqDate");
			searchVO.setSearchSortOrd("desc");
			//searchVO.setFirstIndex(0);
			
			List<KakaoVO> kakaoResultList = new ArrayList<KakaoVO>();
			KakaoVO kakoStatisticResult = new KakaoVO();
			if(reserveType.equals("D")) {
				
				//searchVO.setSearchCondition2("N");//예약건은 제외하기
				searchVO.setReserveCYn("N");//예약취소건은 제외하기
				//searchVO.setReserveYn("N");
				// 문자발송 완료건은 모두 보이도록 처리
				
				kakaoResultList = mjonKakaoATService.selectMjonKakaoATGroupCompleteList(searchVO);
		        model.addAttribute("kakaoResultList", kakaoResultList);
		        
		        //카카오톡 발송 통계 정보 불러오기
		        kakoStatisticResult = mjonKakaoATService.selectMjonKakaoStatisticATData(searchVO);
		        model.addAttribute("kakoStatisticResult", kakoStatisticResult);
				
			}else {
				searchVO.setReserveYn("Y");			//예약건만 조회
		        searchVO.setSearchCondition2("Y");	//예약건만 조회
				searchVO.setReserveCYn("N");//예약취소건은 제외하기
				// 문자발송 완료건은 모두 보이도록 처리
				kakaoResultList = mjonKakaoATService.selectReserveMjonKakaoATGroupList(searchVO);
		        model.addAttribute("kakaoResultList", kakaoResultList);
		        
		        //카카오톡 발송 통계 정보 불러오기
		        kakoStatisticResult = mjonKakaoATService.selectMjonKakaoStatisticATData(searchVO);
		        model.addAttribute("kakoStatisticResult", kakoStatisticResult);
				
			}
			
			paginationInfo.setTotalRecordCount(kakaoResultList.size() > 0 ? ((KakaoVO)kakaoResultList.get(0)).getTotCnt() : 0);
			model.addAttribute("paginationInfo", paginationInfo);
		} catch (Exception e) {
			System.out.println("EgovGnrlselectedUserKakaoDataListAjax Controller Error !!! " + e);
		}
		
		return "cmm/uss/umt/kakao/EgovGnrlUserSelectKakaoDataListPop";
	}
	
	/** 
	 * @methodName	: EgovGnrlselectedUserFaxDataListAjax 
	 * @author		: 이호영
	 * @date		: 2023.04.11 
	 * @description	: 관리자 팩스리스트팝업 데이터 불러오기 
	 * @param faxGroupDataVO
	 * @param model
	 * @return
	 * @throws Exception 
	 */
	@RequestMapping("/uss/umt/user/fax/EgovGnrlselectedUserFaxDataListAjax.do")
	public String EgovGnrlselectedUserFaxDataListAjax(
			@ModelAttribute("searchVO") FaxGroupDataVO faxGroupDataVO
			, Model model) throws Exception {
		
		
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
		if(id == "") {
			return "redirect:/uat/uia/EgovLoginUsr.do";
		}

		Map<String, Object> faxSendListMap = userManageService.selectFaxSendList(faxGroupDataVO);
//		Map<String, Object> faxSendListMap = faxService.selectFaxSendList(faxGroupDataVO);
    	// 전송내역
		model.addAttribute("faxGroupListVO", faxSendListMap.get("faxGroupListVO"));
    	model.addAttribute("searchKeyword", faxSendListMap.get("searchKeyword"));
    	model.addAttribute("paginationInfo", faxSendListMap.get("paginationInfo"));
    	model.addAttribute("faxPriceMap", faxSendListMap.get("faxPriceMap"));
    	
		
		return "cmm/uss/umt/fax/EgovGnrlUserSelectFaxDataListPop";
	}

	
	/** 
	 * @methodName	: getExcelForFaxSendList 
	 * @author		: 이호영
	 * @date		: 2023.04.11 
	 * @description	: 관리자 팩스리스트팝업에서 엑셀 다운로드
	 * @param faxGroupDataVO
	 * @throws Exception 
	 */
	@RequestMapping(value= {"/uss/umt/user/fax/getExcelForFaxSendList.do"})
	public void getExcelForFaxSendList( FaxGroupDataVO faxGroupDataVO) throws Exception{

		//로그인 권한정보 불러오기
		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());

		/* 목록을 가져 온다 */
		faxGroupDataVO.setUserId(userId);
		faxService.getExcelForFaxSendList(faxGroupDataVO);
	}
	
	/**
	* @Method Name : EgovGnrlSelectedUserCashDataListAjax
	* @작성일 : 2022. 12. 5.
	* @작성자 :  WYH
	* @Method 설명 : 보유 캐시 잔액 조회
	*/
	@RequestMapping("/uss/umt/user/EgovGnrlSelectedUserCashDataListAjax.do")
	public String EgovGnrlSelectedUserCashDataListAjax(
			@ModelAttribute("searchVO") MjonPayVO mjonPayVO
			, @ModelAttribute MberManageVO reqMberManageVO
			, MjonMsgVO mjonMsgVO
			, HttpServletRequest request
			, Model model) throws Exception {

		
		String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
    	
		mjonPayVO.setUserId(reqMberManageVO.getMberId());
		
		//검색 일자가 없는 경우 3개월전 1 ~ 마지막날짜로 셋팅
		if(StringUtil.isEmpty(mjonMsgVO.getNtceBgnde())) {
			mjonPayVO.setStartDate(StringUtil.getDate3MonthAgoFirstDay());
			mjonPayVO.setEndDate(StringUtil.getDateMonthLastDay());
			
		}else {
			mjonPayVO.setStartDate(mjonMsgVO.getNtceBgnde());
			mjonPayVO.setEndDate(mjonMsgVO.getNtceEndde());
		}
		
		
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(mjonPayVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(mjonPayVO.getPageUnit());
		paginationInfo.setPageSize(mjonPayVO.getPageSize());
		
		mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex());
		mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			mjonPayVO.setSearchSortCnd("moid");
			mjonPayVO.setSearchSortOrd("desc");
		}
		
		List<MjonPayVO> resultList = mjonPayService.selectMemberCashList(mjonPayVO);   
		model.addAttribute("resultList", resultList);
		paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonPayVO)resultList.get(0)).getTotCnt() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		
		return "cmm/uss/umt/EgovGnrlUserSelectCashDataListPop";
	}
	
	/**
	* @Method Name : EgovGnrlSelectedUserCashDataDetailAjax
	* @작성일 : 2022. 12. 5.
	* @작성자 :  WYH
	* @Method 설명 : 보유 케시 잔액 상세
	*/
	@RequestMapping(value = {"/uss/umt/user/EgovGnrlSelectedUserCashDataDetailAjax.do"})
	public String EgovGnrlSelectedUserCashDataDetailAjax(
			@ModelAttribute("searchVO") MjonPayVO searchVO
			, HttpServletRequest request
			, Model model) throws Exception {
		
		String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
		
		MjonPayVO mjonPayVO = mjonPayService.selectCashVO(searchVO);
		
		model.addAttribute("mjonPayVO", mjonPayVO);
		model.addAttribute("searchVO", searchVO);
		
		return "cmm/uss/umt/EgovGnrlUserSelectCashDataDetailPop";
	}
	
	
	
	/**
	 * 사용자정보 결제내역 리스트 팝업 띄우기
	 * @param selectedUserId -> uniqId 상세조회대상 사용자아이디
	 * @param userSearchVO 검색조건
	 * @return cmm/uss/umt/EgovGnrlUserSelectUpdtPopup
	 * @param model 화면모델
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovGnrlselectedUserPayDataListAjax.do")
	public String EgovGnrlselectedUserPayDataListAjax(@ModelAttribute("searchVO") MjonPayVO mjonPayVO,
			@ModelAttribute MberManageVO reqMberManageVO,
			MjonMsgVO mjonMsgVO,
			HttpServletRequest request, 
			Model model) throws Exception {

		
		String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
    	
		mjonPayVO.setUserId(reqMberManageVO.getMberId());
		
		//검색 일자가 없는 경우 3개월전 1 ~ 마지막날짜로 셋팅
		if(StringUtil.isEmpty(mjonMsgVO.getNtceBgnde())) {
			mjonPayVO.setStartDate(StringUtil.getDate3MonthAgoFirstDay());
			mjonPayVO.setEndDate(StringUtil.getDateMonthLastDay());
			
		}else {
			
			mjonPayVO.setStartDate(mjonMsgVO.getNtceBgnde());
			mjonPayVO.setEndDate(mjonMsgVO.getNtceEndde());
			
		}
		
		
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(mjonPayVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(mjonPayVO.getPageUnit());
		paginationInfo.setPageSize(mjonPayVO.getPageSize());
		
		mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex());
		mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			mjonPayVO.setSearchSortCnd("moid");
			mjonPayVO.setSearchSortOrd("desc");
		}
		
        List<MjonPayVO> resultList = mjonPayService.selectPayList(mjonPayVO);   
        
        model.addAttribute("resultList", resultList);
        paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonPayVO)resultList.get(0)).getTotCnt() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		
		{
			
			/**
			 * 이벤트 회원 정보 불러오기
			 * 
			 * */
			MjonEventVO mjonEventVO = new MjonEventVO();
			mjonEventVO.setMberId(reqMberManageVO.getMberId());
			//mjonEventVO.setEventStatus("Y");
			MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
			
			model.addAttribute("eventMberInfo", eventMberInfo);
			
			
		}
		
		return "cmm/uss/umt/EgovGnrlUserSelectPayDataListPop";
	}
	
    /**
     * 회원 결제 상세화면
     * @param searchVO
     * @param model
     * @return	"/uss/ion/pay/CashModify.do"
     * @throws Exception
     */
    @RequestMapping(value = {"/uss/umt/user/EgovGnrlselectedUserPayDataDetailAjax.do"})
    public String EgovGnrlselectedUserPayDataDetailAjax(
            @ModelAttribute("searchVO") MjonPayVO searchVO, 
            HttpServletRequest request ,
            Model model) throws Exception {
    	
    	String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
    	
    	MjonPayVO mjonPayVO = new MjonPayVO(); 
    	if(null != searchVO.getMoid() &&  !"".equals(searchVO.getMoid())) { //수정
    		mjonPayVO  = mjonPayService.selectPayVO(searchVO);
    	}
    	
		model.addAttribute("mjonPayVO", mjonPayVO);
		model.addAttribute("searchVO", searchVO);
		
		return "cmm/uss/umt/EgovGnrlUserSelectPayDataDetailPop";
    }
	
	
	/**
	 * 사용자정보 수정을 위해 팝업을 띄운다.
	 * @param selectedUserId -> uniqId 상세조회대상 사용자아이디
	 * @param userSearchVO 검색조건
	 * @return cmm/uss/umt/EgovGnrlUserSelectUpdtPopup
	 * @param model 화면모델
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovGnrlselectedUserViewPopup.do")
	public String EgovGnrlselectedUserViewPopup(@RequestParam(value="selectedUserId", required =false, defaultValue="") String uniqId, 
			@RequestParam(value="modiType", required =false, defaultValue="") String modiType,
			HttpServletRequest request,
			@ModelAttribute("searchVO") UserDefaultVO userSearchVO,
			@ModelAttribute("mberManageVO") MberManageVO mberManageVO, 
			RedirectAttributes redirectAttributes , 
			Model model,
			HttpSession session) throws Exception {

		mberManageVO.setUniqId(uniqId);
		String mberId = mberManageService.selectUniqIdToMberId(mberManageVO);
		mberManageVO = mberManageService.selectMber(mberId) ;
		
		model.addAttribute("userSearchVO", userSearchVO);
		model.addAttribute("mberManageVO", mberManageVO);
		
		if(mberManageVO == null){
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.select"));
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do");
			return redirectUrlMaker.getRedirectUrl();
		}
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();
		//사용목적/업종 코드조회- ITN024
		vo.setCodeId("ITN024");
		model.addAttribute("flowTypeCode", cmmUseService.selectCmmCodeDetail(vo));
		
  		
  		model.addAttribute("modiType",modiType);
		return "cmm/uss/umt/EgovGnrlUserSelectUpdtPopup";
	}
	
	/*
	 * 사용자 상태 변경하기
	 * 일반, 이용 정지, 탈퇴
	 * 
	 * */
	//ㅁ
	//사유를 넣어 사용자 상태를 변경하는 경우
	//step1.회원상태 변경
	//step1-1-1.이용정지시
	//step1-1-1-1.발신번호거부처리
	//step1-1-1-2.스팸회원정보등록
	//step1-1-1-3.이용정지IP등록
	
	//step1-1-2.이용정지해제시		
	//step1-1-2-1.이용정지IP삭제		
	
	//step1-2.관리자 처리 히스토리 남기기
	//step1-3.사용자 상태 변경
	
	
	//step2.가상계좌 처리
	
	
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserMsttusAjax.do")
	public ModelAndView EgovGnrlUpdateUserMsttusAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		modelAndView.addObject("message", "로그인이 필요합니다.");
			modelAndView.addObject("result", "loginFail");
    	}
    	
    	
    	
    	try {
    		
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
        	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
        	
        	//수정하는 관리자 아이디 셋팅
        	mberManageVO.setMberSttusUpdusrId(userId);
        	
        	//수정할 회원 아이디 정보
        	String mberId = mberManageVO.getMberId();

        	//회원 정보 조회
        	MberManageVO resultMberVO = mberManageService.selectMber(mberId);
        	
        	if(resultMberVO == null) {
        		
        		modelAndView.addObject("message", "이용자 정보를 찾을 수 없습니다.");
    			modelAndView.addObject("result", "fail");
        		
        	}
    		
        	//회원 상태 변경하기
        	int resultCnt = 0;
        	resultCnt = mberManageService.updateUserMsttus(mberManageVO);
    		
    		if(resultCnt > 0) {
    			
    			if(mberManageVO.getMberSttus().equals("B")) {	//회원 이용정지를 시키는 경우 가상계좌도 함께 해지 시킨다.
    				
    				//가상계좌 보유 여부 체크
    	        	//대상 리스트 가져오기    
    	    		VacsVactVO vacsVactVO = new VacsVactVO();
    	    		vacsVactVO.setMberId(mberId);
    	        	List<VacsVactVO> myBankList = vacsVactService.selectBankAccountByUserId(vacsVactVO);		//내가 할당받은 전용계좌 리스트 받아오기
    	        	
    	        	int vacsCnt = myBankList.size();
    	        	
    	        	//가상계좌 해지 처리
    	        	if(vacsCnt > 0) {
    	        		
    	        		for(int i=0; i < vacsCnt; i++) {
    	        			
    	        			String acctNo = myBankList.get(i).getAcctNo();
    	        			
    	        			VacsVactVO vacsVO = new VacsVactVO();
    	        			vacsVO.setMberId(mberId);	//회원 아이디
    	        			//계좌 해지일자 생성
    	           			Date now = new Date();
    	           			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    	           			String closeDate = sdf.format(now);
    	           			vacsVO.setCloseIl(closeDate);		//해지일자 
    	           			vacsVO.setAcctNo(acctNo);			//해지계좌번호
    	           			
    	           			//계좌 상태 셋팅  0: 미할당, 1:할당, 9: 해지
    	           			vacsVO.setAcctSt("9");
    	           			int blockCnt = vacsVactService.updateVacsAccountUsrBlock(vacsVO);
    	           			
    	        		}
    	        		
    	        	}
    				
    			}
    			
    			modelAndView.addObject("message", "이용자 상태를 수정하였습니다.");
    			modelAndView.addObject("result", "success");
    			
    		}else {
    			
    			modelAndView.addObject("message", "이용자 상태 수정에 오류가 발생하였습니다.");
    			modelAndView.addObject("result", "fail");
    			
    		}
		} catch (Exception e) {
			modelAndView.addObject("message", "이용자 상태 수정에 오류가 발생하였습니다.");
			modelAndView.addObject("status", "fail");
		}
		return modelAndView;
	}
	
	// 이용정지 사유 수정
	@RequestMapping(value="/uss/umt/user/EgovGnrlUpdateUserMemoAjax.do")
	public ModelAndView EgovGnrlUpdateUserMemoAjax(@ModelAttribute MberManageVO mberManageVO
			, HttpServletRequest request) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");

		boolean isSuccess = true;
		String msg = "";
		
		try {
        	// 이용정지 사유 수정
        	int resultCnt = 0;
        	resultCnt = mberManageService.updateSpamMemberMemo(mberManageVO);
			if (resultCnt == 0) {
				isSuccess = false;
				msg = "업데이트 실패";
			}
		}
		catch(Exception e) {
			isSuccess = false;
			msg = e.getMessage();
		}		

		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
			
		return modelAndView;
	}				
	
	
	
	// 법인폰 알림여부
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserAdminSmsAjax.do")
	public ModelAndView EgovGnrlUpdateUserAdminSmsAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");

    	Boolean isSuccess = true;
    	String msg = "";
    	
    	try {
    		// 미인증 사용자에 대한 보안처리
    		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
        	if(!isAuthenticated) {
    			isSuccess = false;
    			msg = "로그인이 필요합니다.";    		
        	}
        	else {
	        	userManageService.updateUserAdminSmsNoticeYn(userManageVO, "");
        	}
		} catch (Exception e) {
			isSuccess = false;
			msg = e.getMessage();
		}
    	
		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}	
	
	// 스미싱의심 여부 변경
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserSmishingAjax.do")
	public ModelAndView EgovGnrlUpdateUserSmishingAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		Boolean isSuccess = true;
		String msg = "";
		
		try {
			// 미인증 사용자에 대한 보안처리
			Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
			if(!isAuthenticated) {
				isSuccess = false;
				msg = "로그인이 필요합니다.";    		
			}
			else {
				userManageService.updateOneUserSmishingYn(userManageVO);
			}
		} catch (Exception e) {
			isSuccess = false;
			msg = e.getMessage();
		}
		
		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}	
	// VIP 여부 변경
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserVIPAjax.do")
	public ModelAndView EgovGnrlUpdateUserVIPAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		Boolean isSuccess = true;
		String msg = "";
		
		try {
			// 미인증 사용자에 대한 보안처리
			Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
			if(!isAuthenticated) {
				isSuccess = false;
				msg = "로그인이 필요합니다.";    		
			}
			else {
				userManageService.updateUserVIPYn(userManageVO, "");
			}
		} catch (Exception e) {
			isSuccess = false;
			msg = e.getMessage();
		}
		
		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}	
	
	// 전용 전송사 변경
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserHotlineAgentCodeAjax.do")
	public ModelAndView EgovGnrlUpdateUserHotlineAgentCodeAjax(@ModelAttribute("userManageVO") MberManageVO mberManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		Boolean isSuccess = true;
		String msg = "";
		
		try {
			// 미인증 사용자에 대한 보안처리
			Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
			if(!isAuthenticated) {
				isSuccess = false;
				msg = "로그인이 필요합니다.";    		
			}
			else {
				int result = mjonMsgAgentStsService.updateMberHotlineAgentCodeInfo(mberManageVO);
				
				if(result > 0) {
					isSuccess = true;
					msg = "전용 전송사 수정이 완료되었습니다.";
				}else {
					isSuccess = false;
					msg = "전용 전송사 수정에 오류가 발생하였습니다.";
					
				}
			}
		} catch (Exception e) {
			isSuccess = false;
			msg = e.getMessage();
		}
		
		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}	
	
	// 후불제 여부
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserPrePaymentYnAjax.do")
	public ModelAndView EgovGnrlUpdateUserPrePaymentYnAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");

    	Boolean isSuccess = true;
    	String msg = "";
    	
    	try {
    		// 미인증 사용자에 대한 보안처리
    		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
        	if(!isAuthenticated) {
    			isSuccess = false;
    			msg = "로그인이 필요합니다.";    		
        	}
        	else {
        		int payCnt = userManageService.selectPayCountByUser(userManageVO);
        		if (payCnt > 0) {
        			isSuccess = false;
        			msg = "이미 결제한 내역이 있어, 후불제 변경이 불가합니다.";
        		}
        		else {
        			userManageService.updateUserPrePaymentYn(userManageVO);
        		}
        	}
		} catch (Exception e) {
			isSuccess = false;
			msg = e.getMessage();
		}
    	
		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}	

	// 후불제 월한도충전금
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserAutoCashAjax.do")
	public ModelAndView EgovGnrlUpdateUserAutoCashAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");

    	Boolean isSuccess = true;
    	String msg = "";
    	
    	try {
    		// 미인증 사용자에 대한 보안처리
    		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
        	if(!isAuthenticated) {
    			isSuccess = false;
    			msg = "로그인이 필요합니다.";    		
        	}
        	else {
	        	userManageService.updateUserAutoCash(userManageVO);
        	}
		} catch (Exception e) {
			isSuccess = false;
			msg = e.getMessage();
		}
    	
		modelAndView.addObject("isSuccess", isSuccess);
		modelAndView.addObject("msg", msg);
		
		return modelAndView;
	}		
	
	/*
	 * 사용자 상태 변경하기
	 * 일반, 이용 정지, 탈퇴
	 * 
	 * */
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserSecessionMsttusAjax.do")
	public ModelAndView EgovGnrlUpdateUserSecessionMsttusAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		modelAndView.addObject("message", "로그인이 필요합니다.");
			modelAndView.addObject("result", "loginFail");
    	}
    	
    	
    	
    	try {
    		
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
        	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
        	
        	//수정하는 관리자 아이디 셋팅
        	mberManageVO.setMberSttusUpdusrId(userId);
        	
        	//수정할 회원 아이디 정보
        	String mberId = mberManageVO.getMberId();

        	//회원 정보 조회
        	MberManageVO resultMberVO = mberManageService.selectMber(mberId);
        	
        	if(resultMberVO == null) {
        		
        		modelAndView.addObject("message", "이용자 정보를 찾을 수 없습니다.");
    			modelAndView.addObject("result", "fail");
        		
        	}
    		
        	//회원 상태 변경하기
        	int resultCnt = 0;
        	mberManageVO.setDeleteType("07"); //탈퇴사유 중 직접입력으로 타입 지정
        	resultCnt = mberManageService.updateUserSecessionMsttus(mberManageVO);
    		
    		if(resultCnt > 0) {
    			
    			modelAndView.addObject("message", "이용자 탈퇴가 완료 되었습니다.");
    			modelAndView.addObject("result", "success");
    			
    		}else {
    			
    			modelAndView.addObject("message", "이용자 탈퇴에 오류가 발생하였습니다.");
    			modelAndView.addObject("result", "fail");
    			
    		}
		} catch (Exception e) {
			modelAndView.addObject("message", "이용자 탈퇴에 오류가 발생하였습니다.");
			modelAndView.addObject("status", "fail");
		}
		return modelAndView;
	}
	/*
	 * 사용자 문자 발송 금액 변경해주기
	 * 
	 * */
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserPriceAjax.do")
	public ModelAndView EgovGnrlUpdateUserPriceAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		modelAndView.addObject("message", "로그인이 필요합니다.");
			modelAndView.addObject("result", "loginFail");
    	}
    	
    	try {
    		
    		int resultCnt = mberManageService.updateUserPrice(mberManageVO);
    		
    		if(resultCnt > 0) {
    			
    			modelAndView.addObject("message", "전송 금액을 수정하였습니다.");
    			modelAndView.addObject("result", "success");
    			
    		}else {
    			
    			modelAndView.addObject("message", "전송 금액을 수정에 오류가 발생하였습니다.");
    			modelAndView.addObject("result", "fail");
    			
    		}
		} catch (Exception e) {
			modelAndView.addObject("message", "전송 금액을 수정에 오류가 발생하였습니다.");
			modelAndView.addObject("status", "fail");
		}
		return modelAndView;
	}
	
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserFaxPriceAjax.do")
	public ModelAndView EgovGnrlUpdateUserFaxPriceAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
		if(!isAuthenticated) {
			modelAndView.addObject("message", "로그인이 필요합니다.");
			modelAndView.addObject("result", "loginFail");
		}
		
		try {
			
			int resultCnt = mberManageService.updateUserFaxPrice(mberManageVO);
			
			if(resultCnt > 0) {
				
				modelAndView.addObject("message", "전송 금액을 수정하였습니다.");
				modelAndView.addObject("result", "success");
				
			}else {
				
				modelAndView.addObject("message", "전송 금액을 수정에 오류가 발생하였습니다.");
				modelAndView.addObject("result", "fail");
				
			}
		} catch (Exception e) {
			modelAndView.addObject("message", "전송 금액을 수정에 오류가 발생하였습니다.");
			modelAndView.addObject("status", "fail");
		}
		return modelAndView;
	}
	
	/*
	 * 사용자 문자 발송 금액 변경해주기
	 * 
	 * */
	@RequestMapping("/uss/umt/user/EgovGnrlUpdateUserPwdAjax.do")
	public ModelAndView EgovGnrlUpdateUserPwdAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		modelAndView.addObject("message", "로그인이 필요합니다.");
			modelAndView.addObject("result", "loginFail");
    	}
    	
    	try {
    		
    		UserManageVO userManageVO = new UserManageVO(); 
    		
    		userManageVO.setEmplyrId(mberManageVO.getMberId());
    		userManageVO.setEmplyrNm(mberManageVO.getMberNm());
    		userManageVO.setPassword(mberManageVO.getPassword());
    		
    		//해당 정보의 유저가 있으면
			UserManageVO checkUser = userManageService.selectUserPwByAdminAjax(userManageVO);
			
			if(checkUser != null) {
				//비밀번호 업데이트
				userManageService.updateUserPWAjax(userManageVO);
				
				//변경 비밀번호 이메일 발송
				EmailVO emailVO = new EmailVO();
				emailVO.setSend_from("noreply@munjaon.co.kr");
				emailVO.setSend_to(checkUser.getEmailAdres());
				emailVO.setTitle("대량문자 발송 사이트 문자온 임시비밀번호 안내 메일입니다.");
				emailVO.setContents(mberManageVO.getPassword());
				
				//변경 비밀번호 회원 이메일 주소로 발송해주기
				String resultStr = userUpdtPasswordSendEmail(emailVO);
				//String resultStr = "success";
				
				if(resultStr.equals("success")) {
					modelAndView.addObject("message", "비밀번호 변경 및 이메일 발송이 완료되었습니다.");
					modelAndView.addObject("result", "success");
				}else {
					modelAndView.addObject("message", "비밀번호 변경에 오류가 발생하였습니다.");
					modelAndView.addObject("result", "fail");
				}
				
			}else {
				modelAndView.addObject("message", "비밀번호 변경에 오류가 발생하였습니다.");
				modelAndView.addObject("result", "fail");
			}
    		
		} catch (Exception e) {
			System.out.println("관리자 회원 비밀번호 변경시 오류 발생 !");
			modelAndView.addObject("message", "문자전송 금액을 수정에 오류가 발생하였습니다.");
			modelAndView.addObject("status", "fail");
		}
		return modelAndView;
	}
	
	public String userUpdtPasswordSendEmail(EmailVO mailSender) throws Exception{
		
		String resultStr = "fail";
		
		try {
    		
    		// 이메일 발송 내용
			String contents = "";
			contents += "<!DOCTYPE html>";
			contents += "<html lang=\"ko\">";

			contents += "<head>";
			contents += "<meta charset=\"UTF-8\">";
			contents += "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">";
			contents += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">";
			contents += "<title>대량문자 발송 사이트 문자온 임시비밀번호 안내 메일 입니다.</title>";
			contents += "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">";
			contents += "<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>";
			contents += "<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap\" rel=\"stylesheet\">";
			contents += "</head>";
			contents += "";
			contents += "<body>";
			contents += "<div class=\"wrap\" style=\"width: 100%; height: 100%; background-color: #e3e8f0; padding: 70px 0;\">";
			contents += "<div class=\"box\" style=\"max-width: 700px; width: 98%; background-color: #fff; box-shadow: 0 0 5px rgba(0,0,0,0.2); border-radius: 20px; overflow: hidden; margin: 0 auto;\">";
			contents += "<div class=\"area_top\" style=\"background-color: #2e5ac8; width: 100%; height: 80px; padding: 0 40px; box-sizing: border-box;\">";
		    contents += "<p style=\"display:inline-block; color: #fff; font-size: 24px; margin: 0; font-family: 'Noto Sans KR', sans-serif; line-height: 80px;\">";
		    contents += "<span style=\"font-weight: 600;\">문자온 임시비밀번호</span> 안내 메일입니다.</p> <a href=\"http://www.munjaon.co.kr\" target='_blank' style='text-decoration:none'><img src=\"http://www.munjaon.co.kr/publish/images/emailForm/top_logo.png\" alt=\"\" style=\"width: 94px; height: 53px; float: right; margin-top: 12px; vertical-align:top;\"></a>";
		    contents += "</div>";
			contents += "<div class=\"area_content\" style=\"padding: 6%;\">";
			contents += "<p style=\"font-size: 18px; letter-spacing: -0.5px; line-height: 1.5; color: #222; margin: 0; font-weight: 400; font-family: 'Noto Sans KR', sans-serif;\">";
			contents += "안녕하세요. 대량문자 발송 사이트 문자온입니다.<br> 임시비밀번호는 아래와 같습니다.</p>";
			contents += "<p class=\"area_num\" style=\"background-color: #f3f4f5; width: 100%; font-family: 'Noto Sans KR', sans-serif; font-size: 21px; font-weight: 600; box-sizing: border-box; border-radius: 1px; letter-spacing: -0.5px; padding: 8px 30px; margin: 20px 0;\">%password%</p>";
			contents += "<p style=\"padding-top: 40px; font-size: 18px; font-family: 'Noto Sans KR', sans-serif; letter-spacing: -0.5px; line-height: 1.5; color: #222; margin: 0;\">문자온 서비스를 이용해 주셔서 감사합니다.</p>";
			contents += "<div class=\"info_mail\" style=\"width: 100%; border-top: 1px solid #d5d5d5; margin-top: 20px;\">";
			contents += "<p style=\"font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">본 메일은 <span style=\"font-weight: 500;\">발신전용</span>이며, 문의에 대한 회신은 처리되지 않습니다. 문자온 관련하여 궁금하신 점이나 불편한 사항은 <span style=\"font-weight: 500;\">고객센터</span>를 통해 문의하여 주시기 바랍니다.</p>";
			contents += "<p style=\"margin-top: 20px; font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">주소 : (12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스) <br> 사업자 번호 : 653-87-00858 ｜ 대표 : 유인식 ｜ 통신판매등록번호 : 제 2021-다산-0422 <br> 문의전화 : 010-8432-9333 ｜ E-mail : help@iten.co.kr</p>";
			contents += "<p style=\"margin-top: 20px; font-size: 15px; font-weight: 400; color: #999; line-height: 1.3; letter-spacing: -0.5px; font-family: 'Noto Sans KR', sans-serif;\">Copyright 2020 ⓒ MUNJAON co. Ltd, All rights reserved.</p>";
			contents += "</div>";
			contents += "</div>";
			contents += "</div>";
			contents += "</div>";
			contents += "</body>";
			contents += "";
			contents += "</html>";

			String repContents = contents;

			//이메일 내용에 비밀번호 치환해주기
			String password = mailSender.getContents();
			repContents = repContents.replace("%password%", password);

			// 이메일로 보내기
			SendMail sMail = new SendMail();

			// 사용자 이메일 주소
			mailSender.setSend_from(mailSender.getSend_from());

			// 발송자 이메일 주소
			mailSender.setSend_to(mailSender.getSend_to());

			// 메일 제목
			mailSender.setTitle(mailSender.getTitle());

			// 메일 내용
			mailSender.setContents(repContents);

			// 메일 발송하기
			sMail.sendMail2(mailSender);

			// 발송 이력 저장 SendType 1:문자로 발송 2:이메일로 발송
			SendLogVO sendLogVO = new SendLogVO();
			sendLogVO.setSendType("2");
			sendLogVO.setFrstSendInfo(mailSender.getSend_from());//이메일 발신자 정보
			sendLogVO.setReceive(mailSender.getSend_to());		//수신자 정보
			sendLogVO.setContents(repContents);

			mjonMsgDataService.insertSysMsgLog(sendLogVO);

			resultStr = "success";

		} catch (Exception e) {
			System.out.println("관리자 임시비밀번호 변경 저장 후 이메일 발송 오류 !");
		}
		
		return resultStr;
	}
	
	
	/* 사용자정보 업데이트 Ajax*/
	@RequestMapping("/uss/umt/user/EgovGnrlselectedUserUpdateUsrAjax.do")
	public ModelAndView EgovGnrlselectedUserUpdateUsrAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
    	
    	try {
    		mberManageVO.setLastUpdusrId(user.getId());
        	mberManageService.updateMberAdmin(mberManageVO);
    		
    		modelAndView.addObject("message", "개인정보를 수정하였습니다.");
    		modelAndView.addObject("result", "success");
		} catch (Exception e) {
			modelAndView.addObject("status", "fail");
		}
		return modelAndView;
	}
	
	/* 메모 insert Ajax*/
	@RequestMapping("/uss/umt/user/EgovGnrlUserSelectUpdtViewMemoAjax.do")
	public ModelAndView EgovGnrlUserSelectUpdtViewMemoAjax(@ModelAttribute("memoForm") MberManageVO mberManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
    	
    	try {
    		mberManageVO.setFrstRegisterId(user.getId());
        	mberManageService.insertMberMemo(mberManageVO);
        	
    		modelAndView.addObject("message", "메모가 저장되었습니다.");
    		modelAndView.addObject("result", "success");
		} catch (Exception e) {
			modelAndView.addObject("status", "fail");
		}
    	
		return modelAndView;
	}
	
	/* 메모 갱신 Ajax*/
	@RequestMapping("/uss/umt/user/EgovGnrlUserSelectUpdtViewMemoRefreshAjax.do")
	public ModelAndView EgovGnrlUserSelectUpdtViewMemoRefreshAjax(@ModelAttribute("memoForm") MberManageVO mberManageVO, ModelMap model) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	try {
    		//리스트에 메모 조회
    		List<MberManageVO> memoList = mberManageService.selectMberMemo(mberManageVO);
    		//메모 model.addAttribute
    		model.addAttribute("memoList", memoList);
    		modelAndView.addObject("message", "리스트가 갱신되었습니다.");
			modelAndView.addObject("status", "success");
		} catch (Exception e) {
			modelAndView.addObject("status", "fail");
		}
    	
		return modelAndView;
	}
	
	/* 메모 삭제 Ajax*/
	@RequestMapping("/uss/umt/user/EgovGnrlUserSelectUpdtViewMemoDeleteAjax.do")
	public ModelAndView EgovGnrlUserSelectUpdtViewMemoDeleteAjax(@ModelAttribute("memoForm") MberManageVO mberManageVO, ModelMap model) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
    	
    	mberManageVO.setLastMemoUpdusrId(user.getId());
    	
    	try {
    		//update MEMO_YN 'N'처리
    		mberManageService.deleteMberMemo(mberManageVO);
    		
    		modelAndView.addObject("message", "메모가 삭제되었습니다.");
			modelAndView.addObject("status", "success");
		} catch (Exception e) {
			modelAndView.addObject("status", "fail");
		}
    	
		return modelAndView;
	}
	
	
	/**
	 * 관리자 정보 수정후 목록조회 화면으로 이동한다.
	 * @param userManageVO 사용자수정정보
	 * @param bindingResult 입력값검증용 bindingResult
	 * @param model 화면모델
	 * @return forward:/uss/umt/user/EgovUserManage.do
	 * @throws Exception
	 */
	@RequestMapping(value= {"/uss/umt/user/EgovUserSelectUpdt.do", "/uss/umt/user/EgovUserSelectUpdtAjax.do"})
	public String updateUser(@ModelAttribute("userManageVO") UserManageVO userManageVO, 
			UserDefaultVO userSearchVO,
			HttpSession session,
			HttpServletRequest request , 
			BindingResult bindingResult, 
			RedirectAttributes redirectAttributes, 
			Model model) throws Exception {
		
		/*if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey")){  
			return "redirect:/uss/umt/user/EgovUserManage.do";
		}*/
		
		PrivateKey privateKey = (PrivateKey) session.getAttribute(EgovUserManageController.RSA_WEB_KEY);
	    if(privateKey == null) {
	    	 initRsa(request);
	    	 redirectAttributes.addFlashAttribute("message", "저장되지 않았습니다.");
	    	 if(userManageVO.getGnrlUser().equals("N")){
	    		 RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
				 return redirectUrlMaker.getRedirectUrl(); 	
	    	 }
    		 RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do");
			 return redirectUrlMaker.getRedirectUrl();
	    }
		
	    //최고 관리자의 경우 관리자정보 변경시 비번 체크안함.
	    LoginVO tempLoginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
	    /*
	    tempLoginVO.setId(tempLoginVO.getId());
	    if(!"ROLE_ADMIN".equals(tempLoginVO.getAuthority())){ //관리자 아닌경우 Ajax
		    String password = "";
	    	try{
	    		password = decryptRsa(privateKey, userManageVO.getRsaPasswd());
	    	}catch(Exception e) {
	    		redirectAttributes.addFlashAttribute("message", "저장되지 않았습니다.");
		    	if(userManageVO.getGnrlUser().equals("N")){
		    		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserSelectUpdtView.do?selectedId="+userManageVO.getUniqId());
		    		return redirectUrlMaker.getRedirectUrl(); 	
		    	}
		    	RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do");
				return redirectUrlMaker.getRedirectUrl();
	    	}
	    	LoginVO loginVO = new LoginVO();
		    loginVO.setId(userManageVO.getEmplyrId());
		    loginVO.setPassword(password);
		    loginVO.setUserSe("USR");
		    loginVO.setStatusAll("Y");  //상태정보에 관계없이 모든 사용자 검색
		   
		 	LoginVO resultVO = loginService.actionLogin(loginVO);  // 1. 일반 로그인 처리
		 	if(resultVO.getId() ==null){
		    	if(userManageVO.getGnrlUser().equals("N")){ //일반관리자가 자신의 정보수정시 수정페이지로딩
		    		return "forward:/uss/umt/user/EgovUserSelectUpdtView.do?selectedId="+userManageVO.getUniqId();
		    	}
		 	}
	    }*/
	    
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

    	if("".equals(userManageVO.getEmplyrSttusCode()) || userManageVO.getEmplyrSttusCode() == null ) {
    		userManageVO.setEmplyrSttusCode("P");
    	}
		//beanValidator.validate(userManageVO, bindingResult);
		/*if (bindingResult.hasErrors()) {
			ComDefaultCodeVO vo = new ComDefaultCodeVO();

			//패스워드힌트목록을 코드정보로부터 조회
			vo.setCodeId("COM022");
			model.addAttribute("passwordHint_result", cmmUseService.selectCmmCodeDetail(vo));

			//성별구분코드를 코드정보로부터 조회
			vo.setCodeId("COM014");
			model.addAttribute("sexdstnCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//사용자상태코드를 코드정보로부터 조회
			vo.setCodeId("COM013");
			model.addAttribute("emplyrSttusCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//소속기관코드를 코드정보로부터 조회 - COM025
			vo.setCodeId("COM025");
			model.addAttribute("insttCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//조직정보를 조회 - ORGNZT_ID정보
			vo.setTableNm("LETTNORGNZTINFO");
			model.addAttribute("orgnztId_result", cmmUseService.selectOgrnztIdDetail(vo));

			//그룹정보를 조회 - GROUP_ID정보
			vo.setTableNm("LETTNORGNZTINFO");
			model.addAttribute("groupId_result", cmmUseService.selectGroupIdDetail(vo));
			return "cmm/uss/umt/EgovUserSelectUpdt";
		} else {*/
			//업무사용자 수정시 히스토리 정보를 등록한다.
			AuthorGroup authorGroup  =  new AuthorGroup();
			if(null!=userManageVO.getSiteId()){
				authorGroup.setUniqId(userManageVO.getUniqId());
				authorGroup.setAuthorCode(userManageVO.getAuthorCode());
			}else{
				authorGroup.setUniqId(userManageVO.getUniqId());
				authorGroup.setAuthorCode(userManageVO.getAuthorCode());
			}
		
			userManageService.insertUserHistory(userManageVO);
			userManageService.updateUser(userManageVO);
			//권한업데이트
			egovAuthorGroupService.updateAuthorGroup(authorGroup);
			
			//최고관리자가 수정하고 리스트 화면으로 이동하면 최고관리자 권한만 리스트에 나오는 문제가 있어서 권한을 지우고 리턴해줌
			userSearchVO.setAuthorCode("");
			
			redirectAttributes.addFlashAttribute("userSearchVO", userSearchVO);
			
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); 
			if(userManageVO.getGnrlUser().equals("N")){
				if("ROLE_USER_MEMBER".equals(tempLoginVO.getAuthority())) {
					LoginVO tempUser = new LoginVO();
					tempUser.setId(userManageVO.getEmplyrId());
					//RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
					RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserSelectUpdtView.do?selectedId="+loginService.getUserAuth(tempUser).getId());
					return redirectUrlMaker.getRedirectUrl();
				}else {
					RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
					return redirectUrlMaker.getRedirectUrl();
				}
			}
			//사용자 수정 시
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do");
			return redirectUrlMaker.getRedirectUrl();
	}

	/**
	 * 사용자정보삭제후 목록조회 화면으로 이동한다.
	 * @param checkedIdForDel 삭제대상아이디 정보
	 * @param userSearchVO 검색조건
	 * @param model 화면모델
	 * @return forward:/uss/umt/user/EgovUserManage.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovUserDelete.do")
	public String deleteUser(@RequestParam("checkedIdForDel") String checkedIdForDel, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, RedirectAttributes redirectAttributes, Model model) throws Exception {
		if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey")) {  
			return "redirect:/uss/umt/user/EgovUserManage.do";
		}	
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

		userManageService.deleteUser(checkedIdForDel);
		
		
		//Exception 없이 진행시 등록성공메시지
		//model.addAttribute("message", "success.common.delete");
		//return "forward:/uss/umt/user/EgovUserManage.do";
		
		redirectAttributes.addFlashAttribute("userSearchVO", userSearchVO);
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
		if(userSearchVO.getGnrlUser().equals("N")) {
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
			return redirectUrlMaker.getRedirectUrl();
		}
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do");
		return redirectUrlMaker.getRedirectUrl();
	}
	
	
	/**
	 * 사용자의 법인폰알림 여부를 수정한 후 목록조회 화면으로 이동한다.
	 * @param checkedIdForDel update 아이디 정보
	 * @param userSearchVO 검색조건
	 * @param model 화면모델
	 * @return forward:/uss/umt/user/EgovUsersSmsNoticeUpdate.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovUsersSmsNoticeUpdate.do")
	public String updateUsersSmsNotice(@RequestParam("checkedIdForDel") String checkedIdForUpt, @ModelAttribute("userManageVO") UserManageVO userManageVO, RedirectAttributes redirectAttributes, Model model) throws Exception {
		if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey")) {  
			return "redirect:/uss/umt/user/EgovUserManage.do";
		}	
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
		if(!isAuthenticated) {
			model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
			return "uat/uia/EgovLoginUsr";
		}
		
		userManageService.updateUserAdminSmsNoticeYn(userManageVO, checkedIdForUpt);
		
		
		redirectAttributes.addFlashAttribute("message", "법인폰알림 여부가 정상적으로 수정되었습니다.");
		if(userManageVO.getGnrlUser().equals("N")) {
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do?pageIndex="+userManageVO.getPageIndex());
			return redirectUrlMaker.getRedirectUrl();
		}
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do?pageIndex="+userManageVO.getPageIndex());
		return redirectUrlMaker.getRedirectUrl();
	}
	
	/**
	 * 사용자의 법인폰알림 여부를 수정한 후 목록조회 화면으로 이동한다.
	 * @param checkedIdForDel update 아이디 정보
	 * @param userSearchVO 검색조건
	 * @param model 화면모델
	 * @return forward:/uss/umt/user/EgovUsersSmsNoticeUpdate2.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovUsersSmsNoticeUpdate2.do")
	public String updateUsersSmsNotice2(@RequestParam("checkedIdForDel") String checkedIdForUpt, @ModelAttribute("userManageVO") UserManageVO userManageVO, RedirectAttributes redirectAttributes, Model model) throws Exception {
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
		if(!isAuthenticated) {
			model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
			return "uat/uia/EgovLoginUsr";
		}
		
		userManageService.updateUserAdminSmsNoticeYn(userManageVO, checkedIdForUpt);
		
		redirectAttributes.addFlashAttribute("message", "법인폰알림 여부가 정상적으로 수정되었습니다.");
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/msg/SendMsgList.do?pageIndex="+userManageVO.getPageIndex());
		return redirectUrlMaker.getRedirectUrl();
	}	
	
	/**
	 * 사용자의 법인폰알림 여부를 수정한 후 목록조회 화면으로 이동한다.
	 * @param checkedIdForDel update 아이디 정보
	 * @param userSearchVO 검색조건
	 * @param model 화면모델
	 * @return forward:/uss/umt/user/EgovUsersSmsNoticeUpdate3.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovUsersSmsNoticeUpdate3.do")
	public String updateUsersSmsNotice3(@RequestParam("checkedIdForDel") String checkedIdForUpt, @ModelAttribute("userManageVO") UserManageVO userManageVO, RedirectAttributes redirectAttributes, Model model) throws Exception {
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
		if(!isAuthenticated) {
			model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
			return "uat/uia/EgovLoginUsr";
		}
		
		userManageService.updateUserAdminSmsNoticeYn(userManageVO, checkedIdForUpt);
		
		redirectAttributes.addFlashAttribute("message", "법인폰알림 여부가 정상적으로 수정되었습니다.");
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/msg/ReserveNumberList.do?pageIndex="+userManageVO.getPageIndex());
		return redirectUrlMaker.getRedirectUrl();
	}		
		
	/**
	 * 사용자의 스미싱의심 여부를 수정한 후 목록조회 화면으로 이동한다.
	 * @param checkedIdForDel update 아이디 정보
	 * @param userSearchVO 검색조건
	 * @param model 화면모델
	 * @return forward:/uss/umt/user/EgovUsersSmishingUpdate.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovUsersSmishingUpdate.do")
	public String updateUserSmishingYn(@RequestParam("checkedIdForDel") String checkedIdForUpt, @ModelAttribute("userManageVO") UserManageVO userManageVO, RedirectAttributes redirectAttributes, Model model) throws Exception {
		if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey")) {  
			return "redirect:/uss/umt/user/EgovUserManage.do";
		}	
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
		if(!isAuthenticated) {
			model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
			return "uat/uia/EgovLoginUsr";
		}
		
		userManageService.updateUserSmishingYn(userManageVO, checkedIdForUpt);
		
		
		redirectAttributes.addFlashAttribute("message", "스미싱의심 여부가 정상적으로 수정되었습니다.");
		if(userManageVO.getGnrlUser().equals("N")) {
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do?pageIndex=\"+userManageVO.getPageIndex()");
			return redirectUrlMaker.getRedirectUrl();
		}
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do?pageIndex="+userManageVO.getPageIndex());
		return redirectUrlMaker.getRedirectUrl();
	}	
	
	
	
	/**
	 * 입력한 사용자아이디의 중복확인화면 이동
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovIdDplctCnfirm
	 * @throws Exception
	 */
	@RequestMapping(value = "/uss/umt/cmm/EgovIdDplctCnfirmView.do")
	public String checkIdDplct(ModelMap model) throws Exception {

		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

		model.addAttribute("checkId", "");
		model.addAttribute("usedCnt", "-1");
		return "cmm/uss/umt/EgovIdDplctCnfirm";
	}

	/**
	 * 입력한 사용자아이디의 중복여부를 체크하여 사용가능여부를 확인
	 * @param commandMap 파라메터전달용 commandMap
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovIdDplctCnfirm
	 * @throws Exception
	 */
	@RequestMapping(value = "/uss/umt/cmm/EgovIdDplctCnfirm.do")
	public String checkIdDplct(@RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {

		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

		String checkId = (String) commandMap.get("checkId");
		checkId = new String(checkId.getBytes("ISO-8859-1"), "UTF-8");

		if (checkId == null || checkId.equals(""))
			return "forward:/uss/umt/EgovIdDplctCnfirmView.do";

		int usedCnt = userManageService.checkIdDplct(checkId);
		model.addAttribute("usedCnt", usedCnt);
		model.addAttribute("checkId", checkId);

		return "cmm/uss/umt/EgovIdDplctCnfirm";
	}

	/**
	 * 업무사용자 암호 수정처리 후 화면 이동
	 * @param model 화면모델
	 * @param commandMap 파라메터전달용 commandMap
	 * @param userSearchVO 검색조 건
	 * @param userManageVO 사용자수정정보(비밀번호)
	 * @return cmm/uss/umt/EgovUserPasswordUpdt
	 * @throws Exception
	 */
	@RequestMapping(value = "/uss/umt/user/EgovUserPasswordUpdt.do")
	public String updatePassword(ModelMap model, @RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") UserDefaultVO userSearchVO,
			@ModelAttribute("userManageVO") UserManageVO userManageVO, RedirectAttributes redirectAttributes) throws Exception {

		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}
    	List<String> authorities = EgovUserDetailsHelper.getAuthorities();
		boolean authFlag = false;
		
		for (String authority : authorities) {
			if (authority.equals("ROLE_ADMIN")) authFlag = true;
		}
    	
    	String newPassword = (String) commandMap.get("newPassword");
    	
		if(!validationPasswd(newPassword)){
    		model.addAttribute("userManageVO", userManageVO);
    		model.addAttribute("userSearchVO", userSearchVO);
    		model.addAttribute("adminYn", authFlag);
    		model.addAttribute("message", "비밀번호은(는) 문자+숫자+특수문자 포함, 8~20자 내에서 입력해야 합니다.");
			return "cmm/uss/umt/EgovUserPasswordUpdt";
		}

		String oldPassword = (String) commandMap.get("oldPassword");
//		String newPassword = (String) commandMap.get("newPassword");
		String newPassword2 = (String) commandMap.get("newPassword2");
		String uniqId = (String) commandMap.get("uniqId");

		boolean isCorrectPassword = false;
		UserManageVO resultVO = new UserManageVO();
		userManageVO.setPassword(newPassword);
		userManageVO.setOldPassword(oldPassword);
		userManageVO.setUniqId(uniqId);

		String resultMsg = "";
		resultVO = userManageService.selectPassword(userManageVO);
		//패스워드 암호화
		String encryptPass = EgovFileScrty.encryptPassword(oldPassword, userManageVO.getEmplyrId());
		
		for (String authority : authorities) { //일반사용자까지
			if (authority.equals("ROLE_ADMIN") || authority.equals("ROLE_USER_MEMBER")) authFlag = true;
		}
		
		authFlag = false; //GS인증으로 이전비밀번호 체크
		//관리자 이전 비밀번호 변경 시 이전비밀번호 입력 없애기_이준호_220602
		/*if (encryptPass.equals(resultVO.getPassword()) || authFlag) {
			if (newPassword.equals(newPassword2)) {
				isCorrectPassword = true;
			} else {
				isCorrectPassword = false;
				resultMsg = "fail.user.passwordUpdate2";
			}
		} else {
			isCorrectPassword = false;
			resultMsg = "fail.user.passwordUpdate1";
		}*/
		
		if (newPassword.equals(newPassword2)) {
			isCorrectPassword = true;
		} else {
			isCorrectPassword = false;
			resultMsg = "fail.user.passwordUpdate2";
		}

		if (isCorrectPassword) {
			userManageVO.setPassword(EgovFileScrty.encryptPassword(newPassword, userManageVO.getEmplyrId()));
			userManageService.updatePassword(userManageVO);
			model.addAttribute("userManageVO", userManageVO);
			resultMsg = "success.common.update";
		} else {
			model.addAttribute("userManageVO", userManageVO);
		}
		model.addAttribute("userSearchVO", userSearchVO);
		model.addAttribute("message", resultMsg);
	
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage(resultMsg));
		if(userSearchVO.getGnrlUser().equals("N")) { //관리자 비밀번호 변경시
			
			/*RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
			return redirectUrlMaker.getRedirectUrl();*/
			LoginVO tempLoginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
			if("ROLE_USER_MEMBER".equals(tempLoginVO.getAuthority())) {
				LoginVO tempUser = new LoginVO();
				tempUser.setId(userManageVO.getEmplyrId());
				RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserSelectUpdtView.do?selectedId="+loginService.getUserAuth(tempUser).getId());
				return redirectUrlMaker.getRedirectUrl();
			}else {
				redirectAttributes.addFlashAttribute("userSearchVO", userSearchVO);
				RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
				return redirectUrlMaker.getRedirectUrl();
			}
			//return "cmm/uss/umt/EgovUserPasswordUpdt";
		} //사용자 비밀번호 변경시
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do");
		return redirectUrlMaker.getRedirectUrl();
		
	}

	/**
	 * 업무사용자 암호 수정  화면 이동
	 * @param model 화면모델
	 * @param commandMap 파라메터전달용 commandMap
	 * @param userSearchVO 검색조건
	 * @param userManageVO 사용자수정정보(비밀번호)
	 * @return cmm/uss/umt/EgovUserPasswordUpdt
	 * @throws Exception
	 */
	@RequestMapping(value = "/uss/umt/user/EgovUserPasswordUpdtView.do")
	public String updatePasswordView(ModelMap model, @RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") UserDefaultVO userSearchVO,
			@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {

		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

    	if("".equals(userManageVO.getUniqId())){
    		String sLocationUrl = "uss/umt/user/EgovUserManage.do";
    		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker(sLocationUrl);
    		return redirectUrlMaker.getRedirectUrl();
    	}
    	
		String userTyForPassword = (String) commandMap.get("userTyForPassword");
		userManageVO.setUserTy(userTyForPassword);
		
		List<String> authorities = EgovUserDetailsHelper.getAuthorities();
		boolean authFlag = false;
		
		for (String authority : authorities) {
			if (authority.equals("ROLE_ADMIN")) authFlag = true;
		}

		model.addAttribute("userManageVO", userManageVO);
		model.addAttribute("userSearchVO", userSearchVO);
		model.addAttribute("adminYn", authFlag);
		return "cmm/uss/umt/EgovUserPasswordUpdt";
	}
	
	/**
	 * 회원가입설정관리
	 * @return uss/umt/user/EgovMberConfigInsert
	 * @throws Exception
	 */
	@RequestMapping(value = {"/uss/umt/mber/EgovMberConfigInsert.do" , "/uss/umt/mber/EgovMberConfigInsertAjax.do"})
	public String selectMberConfigInsert(
			@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, 
			@ModelAttribute("mberManageVO") MberManageVO mberManageVO,
			@RequestParam Map<String, Object> commandMap, 
			SiteManagerVO siteManagerVO,
			HttpServletRequest request,
			Model model , 
			HttpSession session) throws Exception {
		MberManageConfigVO mberConfigVO = new MberManageConfigVO();//config 정보 가져오기
		LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
		if("super".equals(loginVO.getSiteId()) && null==mberManageVO.getSiteId()){ //수퍼 관리자이고 사이트 아이디 없을경우  itn 으로 기본 세팅
			mberConfigVO.setSiteId("itn");
			siteManagerVO.setSiteId("itn");
		}else{
			if("".equals(mberManageVO.getSiteId()) || null==mberManageVO.getSiteId()){
				mberConfigVO.setSiteId(loginVO.getSiteId());
				siteManagerVO.setSiteId(loginVO.getSiteId());
			}else {
				mberConfigVO.setSiteId(mberManageVO.getSiteId());
				siteManagerVO.setSiteId(mberManageVO.getSiteId());
			}
		}
		model.addAttribute("mberConfigVO", mberConfigVO);
		List<MberManageConfigVO> mberManageCnfVO = mberManageService.selectMberCnf(mberConfigVO);
		model.addAttribute("mberManageCnfVO", mberManageCnfVO);
		mberManageVO.setMberSttus("DEFAULT");
		SiteManagerVO joinSiteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;//자동가입 여부 조회
		model.addAttribute("joinSiteManagerVO", joinSiteManagerVO);
		if("/uss/umt/mber/EgovMberConfigInsertAjax.do".equals(request.getServletPath())){
			return "cmm/uss/umt/EgovMberConfigInsertAjax";	
		}
		return "cmm/uss/umt/EgovMberConfigInsert";
	}
	
	/* 회원가입 설정 업데이트*/
	@RequestMapping("/uss/umt/EgovMberConfigUpdateAjax.do")
	public ModelAndView updateMberConfigUpdateAjax(@ModelAttribute("mberManageConfigVO") MberManageConfigVO mberManageConfigVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	mberManageService.updateMberCnf(mberManageConfigVO);
		return modelAndView;
	}
	
	/*자동가입 설정 업데이트*/
	@RequestMapping("/uss/umt/EgovMberJoinAutoUpdateAjax.do")
	public ModelAndView EgovMberJoinAutoUpdateAjax(SiteManagerVO siteManagerVO) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateJoinAutoAjax(siteManagerVO);
		return modelAndView;
	}
	
	/**
	 * 일반회원가입신청 등록화면으로 이동한다.
	 * @param userSearchVO 검색조건
	 * @param mberManageVO 일반회원가입신청정보
	 * @param commandMap 파라메터전달용 commandMap
	 * @param model 화면모델
	 * @return uss/umt/user/EgovUserRegister
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/mber/EgovMberRegister.do")
	public String EgovMberRegister(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, @ModelAttribute("mberManageVO") MberManageVO mberManageVO,
			@RequestParam Map<String, Object> commandMap, Model model) throws Exception {

		ComDefaultCodeVO vo = new ComDefaultCodeVO();

		//패스워드힌트목록을 코드정보로부터 조회
		vo.setCodeId("COM022");
		List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
		//성별구분코드를 코드정보로부터 조회
		vo.setCodeId("COM014");
		List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);

		model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
		model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
		if (!"".equals(commandMap.get("realname"))) {
			model.addAttribute("mberNm", commandMap.get("realname")); //실명인증된 이름 - 주민번호 인증
			model.addAttribute("ihidnum", commandMap.get("ihidnum")); //실명인증된 주민등록번호 - 주민번호 인증
		}
		if (!"".equals(commandMap.get("realName"))) {
			model.addAttribute("mberNm", commandMap.get("realName")); //실명인증된 이름 - ipin인증
		}

		//이메일 코드
		vo.setCodeId("COM103");
		List<?> emailCodeList = cmmUseService.selectCmmCodeDetail(vo);
		model.addAttribute("emailCodeList", emailCodeList); //이메일코드
		
		//회원가입 config 정보 가져오기
		MberManageConfigVO voTemp = new MberManageConfigVO();
		//List<?> mberManageCnfVO = mberManageService.selectMberCnf(voTemp);
		List<MberManageConfigVO> mberManageCnfVO =  mberManageService.selectMberCnf(voTemp);
		for (MberManageConfigVO configVO  : mberManageCnfVO) {
			model.addAttribute(configVO.getConfigId() , configVO); //컬럼 이름으로 jsp에 VO 전송
	    }
		
		model.addAttribute("mberManageCnfVO", mberManageCnfVO);
		mberManageVO.setMberSttus("DEFAULT");
		
		return "cmm/uss/umt/EgovMberRegister";
	}
	
	/**
	 * 모달조회
	 * @return String
	 * @exception Exception
	 */
    @RequestMapping(value="/EgovModal.do")
    public String EgovModal()  throws Exception {
        return "cmm/uss/umt/EgovModal";
    }
    
    /**
	 * 입력한 사용자아이디의 중복여부를 체크하여 사용가능여부를 확인
	 * @param commandMap 파라메터전달용 commandMap
	 * @param model 화면모델
	 * @return uss/umt/EgovIdDplctCnfirm
	 * @throws Exception
	 */
	@RequestMapping(value = "/uss/umt/user/EgovIdDplctCnfirmAjax.do")
	public ModelAndView EgovIdDplctCnfirmAjax(@RequestParam Map<String, Object> commandMap) throws Exception {

    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");

		String checkId = (String) commandMap.get("checkId");
		//checkId = new String(checkId.getBytes("ISO-8859-1"), "UTF-8");

		int usedCnt = userManageService.checkIdDplct(checkId);
		modelAndView.addObject("usedCnt", usedCnt);
		modelAndView.addObject("checkId", checkId);

		return modelAndView;
	}
	
	/**
	 * 일반회원가입신청등록처리후로그인화면으로 이동한다.
	 * @param mberManageVO 일반회원가입신청정보
	 * @return forward:/uss/umt/user/EgovUserExpInsert.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovMberInsert.do")
	public String EgovMberInsert( 
			@ModelAttribute("mberManageVO") MberManageVO mberManageVO,
			BindingResult bindingResult,
			Model model,
			RedirectAttributes redirectAttributes) throws Exception {
		if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey")) {  
			return "redirect:/uss/umt/user/EgovUserManage.do";
		}
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

		if(!validationPasswd(mberManageVO.getPassword())){
			redirectAttributes.addFlashAttribute("message", "패스워드 규칙에 어긋납니다.");
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
			return redirectUrlMaker.getRedirectUrl();
		}
		
		beanValidator.validate(mberManageVO, bindingResult);
		if (bindingResult.hasErrors()){
			ComDefaultCodeVO vo = new ComDefaultCodeVO();
			//패스워드힌트목록을 코드정보로부터 조회
			vo.setCodeId("COM022");
			model.addAttribute("passwordHint_result", cmmUseService.selectCmmCodeDetail(vo)); //패스워트힌트목록

			//성별구분코드를 코드정보로부터 조회
			vo.setCodeId("COM014");
			//List sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
			model.addAttribute("sexdstnCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//사용자상태코드를 코드정보로부터 조회
			vo.setCodeId("COM013");
			model.addAttribute("emplyrSttusCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//소속기관코드를 코드정보로부터 조회 - COM025
			vo.setCodeId("COM025");
			model.addAttribute("insttCode_result", cmmUseService.selectCmmCodeDetail(vo));

			//조직정보를 조회 - ORGNZT_ID정보
			vo.setTableNm("LETTNORGNZTINFO");
			model.addAttribute("orgnztId_result", cmmUseService.selectOgrnztIdDetail(vo));

			//그룹정보를 조회 - GROUP_ID정보
			vo.setTableNm("LETTNORGNZTINFO");
			model.addAttribute("groupId_result", cmmUseService.selectGroupIdDetail(vo));
			//return "forward:/uss/umt/user/EgovUserInsertView.do";
			return "cmm/uss/umt/EgovUserInsert";
		}else{
			try{
				//userManageService.insertUser(userManageVO);
				mberManageService.insertMber(mberManageVO); //일반사용자 등록
				redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
			}catch(Exception e){
				redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.insert"));
			}
		}
		//관리자등록일 경우
		if(mberManageVO.getGnrlUser().equals("N")) {
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovUserManage.do");
			return redirectUrlMaker.getRedirectUrl();
		}
		//사용자 등록일 경우
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/umt/user/EgovGnrlUserManage.do");
		return redirectUrlMaker.getRedirectUrl();
	}
	
	
	/**
	 * 일반회원목록을 조회한다. (pageing)
	 * @param userSearchVO 검색조건정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovMberManage
	 * @throws Exception
	 */
	@RequestMapping(value = "/uss/umt/mber/EgovMberList.do")
	public String EgovMberList(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, ModelMap model) throws Exception {

		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

    	if(userSearchVO.getPageUnit() != 10) {
			userSearchVO.setPageUnit(userSearchVO.getPageUnit());
		}
    	
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
		paginationInfo.setPageSize(userSearchVO.getPageSize());

		userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
		userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());

		model.addAttribute("resultList", mberManageService.selectMberList(userSearchVO));

		int totCnt = mberManageService.selectMberListTotCnt(userSearchVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);

		//일반회원 상태코드를 코드정보로부터 조회
		ComDefaultCodeVO vo = new ComDefaultCodeVO();
		vo.setCodeId("COM013");
		model.addAttribute("entrprsMberSttus_result", cmmUseService.selectCmmCodeDetail(vo));

		//권한조회
		AuthorManageVO authorManageVO = new AuthorManageVO();
		authorManageVO.setFirstIndex(0);
		authorManageVO.setLastIndex(10);
		authorManageVO.setRecordCountPerPage(10);
		authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO));
		model.addAttribute("authorList", authorManageVO.getAuthorManageList());
		SiteManagerVO siteManagerVO =new SiteManagerVO();
  		siteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;
  		model.addAttribute("siteManagerVO", siteManagerVO);
		//return "cmm/uss/umt/EgovMberList";
		return "cmm/uss/umt/EgovGnrlUserManage";
	}
	
	/**
	 * 일반회원정보 수정을 위해 일반회원정보를 상세조회한다.
	 * @param mberId 상세조회대상 일반회원아이디
	 * @param userSearchVO 검색조건
	 * @param model 화면모델
	 * @return uss/umt/EgovMberSelectUpdt
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/mber/EgovMberSelectUpdtView.do")
	public String EgovMberSelectUpdtView(@RequestParam("selectedId") String uniqId, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, Model model) throws Exception {

		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
		if (!isAuthenticated) {
			return "index";
		}

		ComDefaultCodeVO vo = new ComDefaultCodeVO();

		//패스워드힌트목록을 코드정보로부터 조회
		vo.setCodeId("COM022");
		List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);

		//성별구분코드를 코드정보로부터 조회
		vo.setCodeId("COM014");
		List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);

		//이메일 코드
		vo.setCodeId("COM103");
		List<?> emailCodeList = cmmUseService.selectCmmCodeDetail(vo);

		//사용자상태코드를 코드정보로부터 조회
		vo.setCodeId("COM013");
		List<?> mberSttus_result = cmmUseService.selectCmmCodeDetail(vo);

		//권한정보를 조회 - 
		//AuthorManageVO authorManageVO = new AuthorManageVO();
		//List<AuthorManageVO> authorManageList = egovAuthorManageService.selectAuthorUseAllList(authorManageVO);
		
		model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
		model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
		model.addAttribute("emailCodeList", emailCodeList); //이메일코드
		model.addAttribute("mberSttus_result", mberSttus_result); //사용자상태코드목록
		//model.addAttribute("authorManageList", authorManageList); //그룹정보 목록

		//config 정보 가져오기
		MberManageConfigVO voTemp = new MberManageConfigVO();
		List<MberManageConfigVO> mberManageCnfVO =  mberManageService.selectMberCnf(voTemp);
		for (MberManageConfigVO configVO  : mberManageCnfVO) {
			model.addAttribute(configVO.getConfigId() , configVO); //컬럼 이름으로 jsp에 VO 전송
	    }
		
		MberManageVO mberManageVO = new MberManageVO();
		mberManageVO.setUniqId(uniqId);
		String mberId = mberManageService.selectUniqIdToMberId(mberManageVO);		
		mberManageVO = mberManageService.selectMber(mberId);
		
		//생일/핸드폰번호/이메일 VO에서 자르기?
		String birth = mberManageVO.getBirth();
		
		if (!EgovStringUtil.isEmpty(birth)) {
			mberManageVO.setBirthYear(birth.substring(0, 4));
			mberManageVO.setBirthMonth(birth.substring(4, 6));
			mberManageVO.setBirthDay(birth.substring(6, 8));
		}
		
		String moblphonNo = mberManageVO.getMoblphonNo();
		if (!EgovStringUtil.isEmpty(moblphonNo)) {
			int subSize = 0;
			if (moblphonNo.length() > 10) subSize = 7;
			else subSize = 6;
			
			mberManageVO.setMoblphonNo1(moblphonNo.substring(0, 3));
			mberManageVO.setMoblphonNo2(moblphonNo.substring(3, subSize));
			mberManageVO.setMoblphonNo3(moblphonNo.substring(subSize, moblphonNo.length()));
		}

		String mberEmailAdres = mberManageVO.getMberEmailAdres();
		if (!EgovStringUtil.isEmpty(mberEmailAdres)) {
			String[] emailAdres = EgovStringUtil.split(mberEmailAdres, "@");
			mberManageVO.setEmail1(emailAdres[0]);
			mberManageVO.setEmail2(emailAdres[1]);
		}
		
	    // 사진파일ID
	    mberManageVO.setAtchFileId(mberManageVO.getPhotofileId());
	    //기존 권한 코드
	    mberManageVO.setOrignlAuthorCode(mberManageVO.getAuthorCode());
	    
		model.addAttribute("mberManageVO", mberManageVO);
		model.addAttribute("userSearchVO", userSearchVO);

		return "cmm/uss/umt/EgovMberSelectUpdtView";
	}
	
	/**
	 * 일반회원정보 수정후 목록조회 화면으로 이동한다.
	 * @param mberManageVO 일반회원수정정보
	 * @param bindingResult 입력값검증용 bindingResult
	 * @param model 화면모델
	 * @return forward:/uss/umt/EgovMberManage.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/mber/EgovMberSelectUpdt.do")
	public String EgovMberSelectUpdt(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, BindingResult bindingResult, Model model) throws Exception {
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
		if (!isAuthenticated) {
			return "forward:/uss/umt/mber/EgovMberList.do";
		}

		beanValidator.validate(mberManageVO, bindingResult);
		if (bindingResult.hasErrors()) {
			model.addAttribute("message", bindingResult.getAllErrors().get(0).getDefaultMessage());
			return "forward:/uss/umt/EgovMberManage.do";
		} else {
			if (EgovStringUtil.isEmpty(mberManageVO.getGroupId())) {
				mberManageVO.setGroupId(null);
			}
			
		    mberManageService.updateMber(mberManageVO);
			//Exception 없이 진행시 수정성공메시지
			model.addAttribute("message", egovMessageSource.getMessage("success.common.update"));
			return "forward:/uss/umt/mber/EgovMberList.do";
		}
	}
	
	/**
	 * 일반회원정보삭제후 목록조회 화면으로 이동한다.
	 * @param checkedIdForDel 삭제대상 아이디 정보
	 * @param userSearchVO 검색조건정보
	 * @param model 화면모델
	 * @return forward:/uss/umt/EgovMberManage.do
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/mber/EgovMberDelete.do")
	public String EgovMberDelete(final MultipartHttpServletRequest multiRequest, @RequestParam("checkedIdForDel") String checkedIdForDel, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, Model model) throws Exception {

		if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey" , multiRequest)) {  
			return "redirect:/uss/umt/mber/EgovMberList.do";
		}	
		
		// 미인증 사용자에 대한 보안처리
		Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
    	if(!isAuthenticated) {
    		model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
        	return "uat/uia/EgovLoginUsr";
    	}

		mberManageService.deleteMber(checkedIdForDel);
		//Exception 없이 진행시 삭제성공메시지
		model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
		return "forward:/uss/umt/mber/EgovMberList.do";
	}
	
	private boolean validationPasswd(String pw){
		String pattern = "(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^&*()-+=])(?=\\S+$).{8,}";
		if(pw.matches(pattern)){
			return true;	
		}
		return false;
	}
	
	@RequestMapping(value = "/uss/umt/user/PassMissResetAjax.do")
	public ModelAndView passMissResetAjax(@RequestParam Map<String, Object> commandMap,
			LoginVO loginVO
			) throws Exception {

    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
		loginService.updatePassMissReset(loginVO);
		return modelAndView;
	}
	
	//사용자 회원상태 변경
	@RequestMapping(value = "/uss/umt/user/updateEmplyrSttusCodeAjax.do")
	public ModelAndView updateEmplyrSttusCodeAjax(@RequestParam Map<String, Object> commandMap,
			LoginVO loginVO
			) throws Exception {

    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	loginService.updateEmplyrSttusCode(loginVO);
		return modelAndView;
	}
	
	/**
	 * 
	 * (사용자) 차단 사용자목록을 조회한다. (pageing)
	 * @param userSearchVO 검색조건정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovUserManage
	 * @throws Exception
	 */
	@RequestMapping(value = "/uss/umt/user/EgovBlockUserList.do")
	public String selectBlockUserList(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, 
			ModelMap model, 
			HttpSession session) throws Exception{
		
		if(userSearchVO.getPageUnit() != 10) {
			userSearchVO.setPageUnit(userSearchVO.getPageUnit());
		}
		
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
		paginationInfo.setPageSize(userSearchVO.getPageSize());
		
		userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
		userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		if(null != loginVO && !"super".equals(loginVO.getSiteId())){
			userSearchVO.setSiteId(loginVO.getSiteId());
		}
		
		userSearchVO.setAdminYn("N");
		if(null==userSearchVO.getSearchCondition_01()){ //최초 페이지 로딩시 차단목록 조회
			userSearchVO.setEmplyrSttusCode("B");
		}else{
			userSearchVO.setEmplyrSttusCode(userSearchVO.getSearchCondition_01());
		}
		
		if("".equals(userSearchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			userSearchVO.setSearchSortCnd("uniqId");
			userSearchVO.setSearchSortOrd("desc");
		}
		List<?> resultList = userManageService.selectUserList(userSearchVO);
		model.addAttribute("resultList", resultList);
		paginationInfo.setTotalRecordCount( resultList.size()> 0 ? ((Long)((EgovMap)resultList.get(0)).get("totCnt")).intValue() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		
		//사용자상태코드를 코드정보로부터 조회
		ComDefaultCodeVO vo = new ComDefaultCodeVO();
		vo.setCodeId("COM013");
		model.addAttribute("emplyrSttusCodeList", cmmUseService.selectCmmCodeDetail(vo));//사용자상태코드목록
		
		//권한조회
		AuthorManageVO authorManageVO = new AuthorManageVO();
		authorManageVO.setFirstIndex(0);
		authorManageVO.setLastIndex(10);
		authorManageVO.setRecordCountPerPage(10);
		authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO));
		model.addAttribute("authorList", authorManageVO.getAuthorManageList());	
		return "cmm/uss/umt/EgovBlockUserList";
	}
	
	
	/**
	 * rsa 공개키, 개인키 생성
	 * 
	 * @param request
	 */
	public void initRsa(HttpServletRequest request) {
	    HttpSession session = request.getSession();

	    KeyPairGenerator generator;
	    try {
	        generator = KeyPairGenerator.getInstance(EgovUserManageController.RSA_INSTANCE);
	        generator.initialize(1024);

	        KeyPair keyPair = generator.genKeyPair();
	        KeyFactory keyFactory = KeyFactory.getInstance(EgovUserManageController.RSA_INSTANCE);
	        PublicKey publicKey = keyPair.getPublic();
	        PrivateKey privateKey = keyPair.getPrivate();

	        session.setAttribute(EgovUserManageController.RSA_WEB_KEY, privateKey); // session에 RSA 개인키를 세션에 저장

	        RSAPublicKeySpec publicSpec = (RSAPublicKeySpec) keyFactory.getKeySpec(publicKey, RSAPublicKeySpec.class);
	        String publicKeyModulus = publicSpec.getModulus().toString(16);
	        String publicKeyExponent = publicSpec.getPublicExponent().toString(16);

	        request.setAttribute("RSAModulus", publicKeyModulus); // rsa modulus 를 request 에 추가
	        request.setAttribute("RSAExponent", publicKeyExponent); // rsa exponent 를 request 에 추가
	    } catch (Exception e) {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
	    }
	}
	
	/**
     * 복호화
     * 
     * @param privateKey
     * @param securedValue
     * @return
     * @throws Exception
     */
    private String decryptRsa(PrivateKey privateKey, String securedValue) throws Exception {
        Cipher cipher = Cipher.getInstance(EgovUserManageController.RSA_INSTANCE);
        byte[] encryptedBytes = hexToByteArray(securedValue);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        String decryptedValue = new String(decryptedBytes, "utf-8"); // 문자 인코딩 주의.
        return decryptedValue;
    }
    
    /**
     * 16진 문자열을 byte 배열로 변환한다.
     * 
     * @param hex
     * @return
     */
    public static byte[] hexToByteArray(String hex) {
        if (hex == null || hex.length() % 2 != 0) { return new byte[] {}; }
 
        byte[] bytes = new byte[hex.length() / 2];
        for (int i = 0; i < hex.length(); i += 2) {
            byte value = (byte) Integer.parseInt(hex.substring(i, i + 2), 16);
            bytes[(int) Math.floor(i / 2)] = value;
        }
        return bytes;
    }
    
    /* 회원가입 설정 업데이트*/
	@RequestMapping("/uss/umt/user/EgovBlockUserUpdateAjax.do")
	public ModelAndView selectBlockUserAjax(@ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	UserManageVO inertUserManageVO = new  UserManageVO();
    	//mberManageService.updateMberCnf(mberManageConfigVO);
    	try {
    		for(int i=0 ; i< userManageVO.getEsntlIdNsttusCode().length ; i++) {
    			inertUserManageVO.setEsntlId(userManageVO.getEsntlIdNsttusCode()[i].split(":")[0]);
    			inertUserManageVO.setEmplyrSttusCode(userManageVO.getEsntlIdNsttusCode()[i].split(":")[1]);
    			userManageService.updateUserSttusCode(inertUserManageVO);
    		}
    		
    		modelAndView.addObject("result", "success");
    	}catch (Exception e) {
			modelAndView.addObject("result", "fail");
		} 
		return modelAndView;
	}
	
	/**
	* 개인정보보호 비밀번호 체크
	* @param commandMap 파라메터전달용 commandMap
	* @param model 화면모델
	* @return uss/umt/EgovIdDplctCnfirm
	* @throws Exception
	*/
	@RequestMapping(value = "/uss/umt/user/CheckInfoProtectAjax.do")
	public ModelAndView CheckInfoProtectAjax(@RequestParam Map<String, Object> commandMap
			,UserManageVO userManageVO
			,HttpSession session
			) throws Exception {

    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");

		UserManageVO returnUserManageVO = new UserManageVO();
		userManageVO.setUniqId(userManageVO.getEsntlId());
		returnUserManageVO = userManageService.selectPassword(userManageVO) ;
		if(null==returnUserManageVO) { //UserManageVO
			modelAndView.addObject("usedCnt", 0);
		}else {
			String returnPassword = returnUserManageVO.getPassword() ;
			//패스워드 암호화
			String encryptPass = EgovFileScrty.encryptPassword(userManageVO.getPassword(), userManageVO.getEmplyrId());
			if(returnPassword.equals(encryptPass)) {
				modelAndView.addObject("usedCnt", 1);
				//세션으로 인증넣어줌
				session.setAttribute("info_pro_session", true);
			}else {
				modelAndView.addObject("usedCnt", 0);
			}
		}
		return modelAndView;
	}
		
	/**
	* 개인정보보호 하단 include
	* @param commandMap 파라메터전달용 commandMap
	* @param model 화면모델
	* @return uss/umt/EgovIdDplctCnfirm
	* @throws Exception
	*/
	@RequestMapping(value = "/uss/umt/IncInfoProtect.do")
	public String IncInfoProtect(ModelMap model,
			HttpSession session) throws Exception{
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		SiteManagerVO siteManagerVO =new SiteManagerVO();
  		siteManagerVO.setSiteId(loginVO.getSiteId()); //자신이 속한 사이트 아이디
  		siteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;
  		model.addAttribute("siteManagerVO", siteManagerVO);	
		return "cmm/uss/umt/IncInfoProtect";
	}
	
    //리스트 엑셀 다운로드
  	@RequestMapping(value="/uss/umt/user/userExcelDownload.do")
  	public void userExcelDownload(UserDefaultVO userSearchVO, 
  			HttpServletRequest request, 
  			HttpServletResponse response , 
  			ModelMap model) throws Exception {
  		
  		userSearchVO.setRecordCountPerPage(100000);
  		userSearchVO.setFirstIndex(0);
  		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		if(null != loginVO && !"super".equals(loginVO.getSiteId())){
			userSearchVO.setSiteId(loginVO.getSiteId());
		}
  		// 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다.
  		SXSSFWorkbook wb = new SXSSFWorkbook(100);
  		CellStyle style = wb.createCellStyle();
  		style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 
   		style.setBorderLeft(CellStyle.BORDER_THIN);
   		style.setBorderRight(CellStyle.BORDER_THIN);
   		style.setBorderTop(CellStyle.BORDER_THIN);
   		Font font = wb.createFont();
   		font.setBoldweight(Font.BOLDWEIGHT_BOLD);  //글씨 bold
   		
  		Cell cell = null;
  		Row row = null;
  		
  		String fileName ="관리자 리스트";
  		if("Y".equals(userSearchVO.getGnrlUser()))  fileName = "사용자 리스트" ;
  		
  		String sheetTitle = "";
  		try{
  			List<?> userSearchList  = userManageService.selectUserList(userSearchVO) ;
  			{ //화면 리스트
  				sheetTitle = "관리자 리스트(화면)" ; //제목
  				if("Y".equals(userSearchVO.getGnrlUser()))  sheetTitle = "사용자 리스트(화면)" ;
  				Sheet sheet = wb.createSheet(sheetTitle);
  				row = sheet.createRow(0);
  		        for(int i=0 ; i < userExcelValue.length ; i++) {
  	 		       cell = row.createCell(i);
  	 		       cell.setCellStyle(style);
  		 	       cell.setCellValue(userExcelValue[i][1]);
  	 		    }
  			        
  		        for(int i=0; i < userSearchList.size(); i++){
  			    	row = sheet.createRow(i+1);
  			    	for(int j=0 ; j < userExcelValue.length ; j++) {
  			        	cell = row.createCell(j);
  			        	cell.setCellStyle(style);
  			        	if(j==0) cell.setCellValue(i+1); //번호
  			        	if(j==1) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("siteIdTxt")); //사이트명
  			        	if(j==2) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("userId")); //아이디
  			        	if(j==3) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("userNm")); //관리자명
  			        	if(j==4) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("authorCodeTxt")); //권한
  			        	if(j==5) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("offmTelno")); //전화번호
  			        	if(j==6) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("emailAdres")); //이메일
  			        	if(j==7) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("sbscrbDe")); //등록일
  				 	}
  		        }
  			}
  			{ //DB리스트
  				sheetTitle = "관리자 리스트(DB)" ; //제목
  				if("Y".equals(userSearchVO.getGnrlUser()))  sheetTitle = "사용자 리스트(DB)" ;
  				Sheet sheet = wb.createSheet(sheetTitle);
  				row = sheet.createRow(0);
  				for(int i=0 ; i < userExcelValue.length-2 ; i++){ //아이디,등록일자 없어 -2
  					cell = row.createCell(i);
  	 		       	cell.setCellStyle(style);
  	 		       	if(i==0) {
  	 		       		cell.setCellValue( "Y".equals(userSearchVO.getGnrlUser()) ? "사용자 아이디" : "관리자 아이디"   ); 
  	 		       	}else if(i==1){
  	 		       		if(!"".equals(userExcelValue[i][3])){
  	 		       			cell.setCellValue(userExcelValue[i][1]+"\n"+userExcelValue[i][3]); 
	  		 	    	}else {
	  		 	    		cell.setCellValue(userExcelValue[i][1]);
	  		 	    	}
  	 		       	}else{ //3번제 컬럼 부터 하나씩 앞으로 세팅
	  	 		       	if(!"".equals(userExcelValue[i+1][3])){
		 		       			cell.setCellValue(userExcelValue[i+1][1]+"\n"+userExcelValue[i+1][3]); 
	  		 	    	}else {
	  		 	    		cell.setCellValue(userExcelValue[i+1][1]);
	  		 	    	}
  	 		       	}
  	 		    }
  			        
  		        for(int i=0; i < userSearchList.size(); i++){
  			    	row = sheet.createRow(i+1);
  			    	/*for(int j=0 ; j < userExcelValue.length-1 ; j++) {*/
  			    	for(int j=0 ; j < userExcelValue.length-2 ; j++) {//아이디 없어 -1
  			        	cell = row.createCell(j);
  			        	cell.setCellStyle(style);
  			        	if(j==0) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("userId")); //아이디
  			        	if(j==1) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("siteId")); //사이트명
  			        	if(j==2) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("userNm")); //관리자명
  			        	if(j==3) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("authorCode")); //권한
  			        	if(j==4) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("offmTelno")); //전화번호
  			        	if(j==5) cell.setCellValue((String)((EgovMap)userSearchList.get(i)).get("emailAdres")); //이메일
 			 		}
  		        }	
  					
  			}
  	    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) {}
  		}
  	}
  	
  	//자동완성 데이터 가져오기
  	@RequestMapping(value = "/uat/uia/RecentSearchShowAjax.do", method = RequestMethod.GET, produces="text/plain;charset=UTF-8")
  	@ResponseBody
  	public String recentSearchShowAjax(Locale locale, 
  			UserManageVO userManageVO,
  			Model model, 
  			HttpSession session) throws Exception {
  		//DB부하로 로그인시 session 의 최근 검색어를 가져옴.
  		Gson gson = new Gson();
  	    return gson.toJson(session.getAttribute("recentSearch"));
  	}
  	
  	/**
	 * 검색 버튼 클릭시 최근검색어 등록
	 */
	@RequestMapping("/uat/uia/RecentSearchUpdateAjax.do")
	public ModelAndView RecentSearchUpdateAjax(UserManageVO userManageVO,
			HttpSession session
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	if(null != session.getAttribute("loginId")) { //로그인시 
    		if(null != session.getAttribute("recentSearch")){ //세션이 없으면(로그인 안함) DB조회
    			List<String> arrRecentSearch  =  (List<String>)session.getAttribute("recentSearch") ;
    			arrRecentSearch.add(0 , userManageVO.getSearchWord()); //맨앞 추가;
    			
    			//사이트별 갯수 세팅
    			List<SiteManagerVO> siteManageList = (List<SiteManagerVO>)session.getAttribute("siteManageList") ;
    			for(SiteManagerVO siteManagerVO : siteManageList) {
    				if(siteManagerVO.getSiteId().equals((String)session.getAttribute("siteId"))){
    					//RECENT_SEARCH_CD` char(1) DEFAULT 'N' COMMENT '최근검색어 관리코드(N:사용안함,5:5개,9:10개)'
    					if("N".equals(siteManagerVO.getRecentSearchCd())){ //사용안함
    						arrRecentSearch = arrRecentSearch.subList(0 ,0) ;	
    					}else if("5".equals(siteManagerVO.getRecentSearchCd())){
    						if(arrRecentSearch.size() > 5) {
    							arrRecentSearch = arrRecentSearch.subList(0 ,5) ;	
    						}else {
    							arrRecentSearch = arrRecentSearch.subList(0, arrRecentSearch.size()) ;
    						}
    					}else{ //9면 10개까지
    						if(arrRecentSearch.size() > 10) {
    							arrRecentSearch = arrRecentSearch.subList(0 , 10) ;	
    						}else {
    							arrRecentSearch = arrRecentSearch.subList(0, arrRecentSearch.size()) ;
    						}
    					}
    					break;
    				}
    			}
    			
    			//중복값 제거
    			ArrayList arrList = new ArrayList();  
    			HashSet hs = new HashSet(arrRecentSearch); 
    			Iterator it = hs.iterator();
    			String tempStr = ""; 
    			while(it.hasNext()){
    				tempStr = (String)it.next();
    				if(!"".equals(tempStr)) {
    					arrList.add(tempStr) ;
    				}
    				tempStr = "";  
    			}
    			arrRecentSearch = arrList ;
    			
    			//추가된 값을 세션에 넣는다.
    			session.setAttribute("recentSearch", arrRecentSearch) ;
    			//String 변환 및 DB 업데이트
    			userManageVO.setEmplyrId((String)session.getAttribute("loginId"));
    			userManageVO.setSearchWord(String.join(",", arrRecentSearch));
    			userManageService.insertUpdateSearchWord(userManageVO);
    		}else{
    			
    		}
    	}
		
    	/*egovSiteManagerService.updateAdminLogKpCd(siteManagerVO);
    	modelAndView.addObject("siteManagerVO", siteManagerVO);*/
		return modelAndView;
	}
	
	
	
	@RequestMapping("/getUrlAjax.do") 
	public ModelAndView getUrlAjax(UserManageVO userManageVO) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
        StringBuffer sbuf = new StringBuffer();
        StringBuffer result = new StringBuffer();
        try {
            // URL 객체 생성
        	String strurlOri = "https://www.warmemo.or.kr/front/militaryInfo/searchView.do?idx=" ;
        	
        	String strurl = ""; 
        	for(int i = 2073 ; i <= 2430 ; i++) {
        		strurl = strurlOri+i;
        		URL url = new URL(strurl);
                // URLConnection 생성
                URLConnection urlConn = url.openConnection();
                InputStream is = urlConn.getInputStream();
                InputStreamReader isr = new InputStreamReader(is, "UTF-8");
                BufferedReader br = new BufferedReader(isr);
                String str ;
                int line = 0;
                while((str=br.readLine()) != null){
                     
                    sbuf.append(str + "\r\n") ;
                    if(line != 0) {
                    	line++;
                    }
                    if(str.contains("<div class=\"rightInfo\">")) {
                    	line ++;
                    }
                   
                    if(line == 3) {
                    	result.append(strurl +"," + str.trim()+"," );
                    }
                    
                    if(str.contains("유형 :")) {
                    	result.append(str.split(":")[1].trim()+"\n");
                    }
                }
                
        	}
            
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return modelAndView;
	}
	
	/*nice체크 오프너로 이용*/
	@RequestMapping("/uss/umt/user/niceCheckAjax.do")
	public String niceCheckWeb(HttpServletRequest request, 
			@RequestParam Map<String, Object> commandMap,
			@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO,  
			@ModelAttribute("mberManageVO") MberManageVO mberManageVO,
			ModelMap model , HttpSession session
			 ) throws Exception {
		
		String niceMessage = niceCheck(request, session, mberManageVO).getNiceMessage();
		
		System.out.println("niceMessage --- " + niceMessage) ;
		if("".equals(niceMessage)) { //정상의 경우 세션 생성 후 오프너 close
			/*UserVO tempVO = new UserVO();
//			tempVO.setMblDn(damoEnc(userSearchVO.getMblDn(), request)); //DI암호화 //테스트라 주석  
			tempVO.setName(userSearchVO.getNiceNm());*/
			
			MberManageVO tempVO = new MberManageVO();
			tempVO.setNiceNm(mberManageVO.getNiceNm());
			tempVO.setBirthDay(mberManageVO.getBirthDay());
			tempVO.setMoblphonNo(mberManageVO.getMoblphonNo());
			tempVO.setSexdstnCode(mberManageVO.getSexdstnCode());
			request.getSession().setAttribute("userSearchVO", tempVO);
		}
		
		if(null != (String)session.getAttribute("PAGE_TYPE") && "SEND_AUTH_NUMBER".equals((String)session.getAttribute("PAGE_TYPE"))) { //발신인증경우
			
			MberManageVO authSendMemberVO = new MberManageVO();
			authSendMemberVO.setMoblphonNo(mberManageVO.getMoblphonNo());
			model.addAttribute("authSendMemberVO", authSendMemberVO);
			return "web/cop/selfauth/niceCheckSendAuthAjax";
		}
		
		return "web/cop/selfauth/niceCheckAjax";
	}
	
	/**
	 * 사용자정보 후보자 상세를 위해 후보자정보를 상세조회한다.
	 * @param mberId 상세조회대상 사용자아이디
	 * @param 
	 * @return MjonCandidateVO
	 * @param model 화면모델
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovGnrlselectedUserCondidateDetailPop.do")
	public String EgovGnrlselectedUserCondidateDetailPop(@ModelAttribute MberManageVO reqMberManageVO, 
			HttpServletRequest request, 
			Model model) throws Exception {
		
		//선거 후보자 정보 불러오기
		MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
		
		if(reqMberManageVO.getMberId() != ""){
			
			mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(reqMberManageVO.getMberId());
			
			//String cryptText = egovCryptoUtil.encrypt(plainText);

			if(mjonCandidateVO != null) {
				
				// 주민번호 복호화 하기
				String regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1());
		    	String regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2());
		    	
		    	mjonCandidateVO.setRegidentNo1(regidentNo1);
		    	mjonCandidateVO.setRegidentNo2(regidentNo2);
				
			}
			
		}
		
		model.addAttribute("mjonCandidateVO", mjonCandidateVO);
		
		return "cmm/uss/umt/EgovGnrlUserSelectCondidateDetailPop";
	}
	
    /**
     * 회원 그림문자 이미지 경로 및 파일 아이디 조회하기
     * @param searchVO
     * @param model
     * @return	"/uss/umt/user/selectMberAtchFileInfoAjax.do"
     * @throws Exception
     */
    @RequestMapping(value = {"/uss/umt/user/selectMberMsgDetailAjax.do"})
    public String selectMberMsgDetailAjax(@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 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 "cmm/uss/umt/EgovGnrUserSelectMsgSentDetailPopAjax";
    }
    
    /**
     * 회원 이용정지 사유  조회하기
     * @param searchVO
     * @param model
     * @return	"/uss/umt/user/uss/umt/user/EgovGnrlselectedUserView.do.do"
     * @throws Exception
     */
    @RequestMapping(value = {"/uss/umt/user/selectMberSpamBlockMemoDetailAjax.do"})
public String selectMberSpamBlockMemoDetailAjax(MberManageVO mberManageVO, ModelMap model) throws Exception{
		
    	try {
    		
    		//로그인 권한정보 불러오기
    		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
    		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
    		
    		//스팸정지 회원 정보 조회하기
    		MberManageVO resultSpamMberInfo = mberManageService.selectSpamMemberInfo(mberManageVO);
    		
    		MjonMsgSentVO mjonMsgSentVO = new MjonMsgSentVO();
    		MjonMsgSentVO resultMsgDetail = new MjonMsgSentVO();
    		
    		//스팸정지를 문자내용 문제로 정지시킨경우 문자 내용 정보 불러오기
    		if(resultSpamMberInfo.getMsgGroupId() != null) {
    			
    			mjonMsgSentVO.setUserId(mberManageVO.getMberId());
    			mjonMsgSentVO.setMsgGroupId(resultSpamMberInfo.getMsgGroupId());
    			//문자 상세보기 처리
            	resultMsgDetail = mjonMsgSentService.selectMsgSentDetailDataAjax(mjonMsgSentVO);
            	
            	//그림 문자인 경우 그림 이미지 불러오기
            	if(resultMsgDetail != null && 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("resultSpamMberInfo", resultSpamMberInfo);
    		model.addAttribute("resultMsgDetail", resultMsgDetail);
			
		} catch (Exception e) {
			System.out.println("이용자 정지 사유 정보 불러오기 오류 : Controller");
		}
    	
		return "cmm/uss/umt/EgovGnrUserSelectSpamBlockDetailPopAjax";
    }
    
    /**
     * 회원 스팸회원 처리
     * @param searchVO
     * @param model
     * @return	"/uss/umt/user/updateMberSttusBlockAjax"
     * @throws Exception
     */
    //ㅁ
	//자동으로 사용자 상태를 변경하는 경우
	//step1.회원상태 변경
	//step1-1-1.이용정지시
	//step1-1-1-1.발신번호거부처리
	//step1-1-1-2.스팸회원정보등록
	//step1-1-1-3.이용정지IP등록
	
	//step1-1-2.이용정지해제시		
	//step1-1-2-1.이용정지IP삭제		
	
	//step1-2.관리자 처리 히스토리 남기기
	//step1-3.사용자 상태 변경
	
	
	//step2.가상계좌 처리
    
    @RequestMapping(value = {"/uss/umt/user/updateMberSttusBlockAjax.do"})
    public ModelAndView updateMberSttusBlockAjax(@ModelAttribute("searchVO") MberManageVO mberManageVO,  Model model) throws Exception {
    	
			ModelAndView modelAndView = new ModelAndView();
	    	modelAndView.setViewName("jsonView");
	    	
	    	try {
	    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
	        	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
	        	mberManageVO.setMberSttusUpdusrId(userId); //회원테이블 상태 수정자 ID
	        	mberManageVO.setLastUpdusrId(userId); // 문자온 전화번호 테이블 상태 수정자 ID
	        	mberManageVO.setPhmType("03"); //전화번호 타입 03(거부) 처리
	        	mberManageVO.setMberSttus("B"); //차단처리
	        	mberManageService.updateMberSttusBlockAjax(mberManageVO);
	        	
	        	//가상계좌 보유 여부 체크
	        	//대상 리스트 가져오기    
	    		VacsVactVO vacsVactVO = new VacsVactVO();
	    		String mberId = mberManageVO.getMberId();	//이용정지 할 회원 아이디
	    		vacsVactVO.setMberId(mberId);
	        	List<VacsVactVO> myBankList = vacsVactService.selectBankAccountByUserId(vacsVactVO);		//내가 할당받은 전용계좌 리스트 받아오기
	        	
	        	int vacsCnt = myBankList.size();
	        	
	        	//가상계좌 해지 처리
	        	if(vacsCnt > 0) {
	        		
	        		for(int i=0; i < vacsCnt; i++) {
	        			
	        			String acctNo = myBankList.get(i).getAcctNo();
	        			
	        			VacsVactVO vacsVO = new VacsVactVO();
	        			vacsVO.setMberId(mberId);	//회원 아이디
	        			//계좌 해지일자 생성
	           			Date now = new Date();
	           			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
	           			String closeDate = sdf.format(now);
	           			vacsVO.setCloseIl(closeDate);		//해지일자 
	           			vacsVO.setAcctNo(acctNo);			//해지계좌번호
	           			
	           			//계좌 상태 셋팅  0: 미할당, 1:할당, 9: 해지
	           			vacsVO.setAcctSt("9");
	           			int resultCnt = vacsVactService.updateVacsAccountUsrBlock(vacsVO);
	           			
	        		}
	        		
	        	}
	        	
				modelAndView.addObject("message", "차단처리가 완료되었습니다.");
				modelAndView.addObject("result", "success");
	        	
	        	
	    	}catch(Exception e) {
	    		modelAndView.addObject("message", "차단처리에 실패했습니다.");
	    		modelAndView.addObject("result", "fail");
	    	}
	    	
			return modelAndView;
    }	
    
    
    /**
     * 회원 금지어 예외 처리 수정
     * @param searchVO
     * @param model
     * @return	"/uss/umt/user/updateMberExceptSpamYnAjax.do"
     * @throws Exception
     */
    
    
    @RequestMapping(value = {"/uss/umt/user/updateMberExceptSpamYnAjax.do"})
    public ModelAndView updateMberExceptSpamYnAjax(@ModelAttribute("searchVO") MberManageVO mberManageVO,  Model model) throws Exception {
    	
			ModelAndView modelAndView = new ModelAndView();
	    	modelAndView.setViewName("jsonView");
	    	
	    	try {
	    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
	        	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
	        	mberManageVO.setMberSttusUpdusrId(userId); //회원테이블 상태 수정자 ID
	        	mberManageVO.setLastUpdusrId(userId); // 문자온 전화번호 테이블 상태 수정자 ID
	        	System.out.println(mberManageVO.getExceptSpamYn());
	        	System.out.println(mberManageVO.getMberId());
	        	int result = mberManageService.updateMberExceptSpamYn(mberManageVO);
	        	
	        	if(result > 0) {
	        		modelAndView.addObject("message", "금지어 예외 수정이 완료되었습니다.");
					modelAndView.addObject("result", "success");
	        	}else {
	        		modelAndView.addObject("message", "금지어 예외 수정이 완료되지 못하였습니다.");
	        		modelAndView.addObject("result", "fail");
	        	}
	        	
	        	
	    	}catch(Exception e) {
	    		modelAndView.addObject("message", "차단처리에 실패했습니다.");
	    		modelAndView.addObject("result", "fail");
	    	}
	    	
			return modelAndView;
    }	
    
    
    /**
     * 회원 스팸회원 체크
     * @param searchVO
     * @param model
     * @return	"/uss/umt/user/selectMberSttusAjax"
     * @throws Exception
     */
    @RequestMapping(value = {"/uss/umt/user/selectMberSttusAjax.do"})
    public ModelAndView selectMberSttusAjax(@RequestParam("mberId") String mberId,
    		 Model model) throws Exception {
    	
    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	try {
    		MberManageVO mberManageVO = mberManageService.selectMber(mberId);
    		
    		modelAndView.addObject("message", "조회 완료되었습니다.");
    		modelAndView.addObject("result", mberManageVO.getMberSttus());
    		
    		
    	}catch(Exception e) {
    		modelAndView.addObject("message", "조회에 실패했습니다.");
    		modelAndView.addObject("result", "fail");
    	}
    	
    	return modelAndView;
    }		
		
	/**
	 * 
	 * (관리자) 이용정지회원 주소록 요청 목록(pageing)
	 * @param userSearchVO 검색조건정보
	 * @param model 화면모델
	 * @return cmm/uss/umt/EgovNewUserManage
	 * @throws Exception
	 */
	
	@RequestMapping(value = "/uss/umt/user/selectRequestAddrList.do")
	public String selectRequestAddrList(@ModelAttribute("searchVO") MberManageVO mberManageVO, 
			ModelMap model) throws Exception {
		
		if(mberManageVO.getPageUnit() != 10) {
			mberManageVO.setPageUnit(mberManageVO.getPageUnit());
		}
		
		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(mberManageVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(mberManageVO.getPageUnit());
		paginationInfo.setPageSize(mberManageVO.getPageSize());
		
		mberManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		mberManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
		mberManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		
		if("".equals(mberManageVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			mberManageVO.setSearchSortCnd("smiId");
			mberManageVO.setSearchSortOrd("desc");
		}
		List<?> resultList = mberManageService.selectRequestAddrList(mberManageVO);
		
		paginationInfo.setTotalRecordCount( resultList.size()> 0 ? ((Long)((EgovMap)resultList.get(0)).get("totCnt")).intValue() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		
		model.addAttribute("resultList", resultList);
		
		return "cmm/uss/umt/EgovRequestAddrList";
	}
	
	
    /**
     * 이용정지회원 주소록 전송 완료 처리
     * @param searchVO
     * @param model
     * @return	"/uss/umt/user/updateMberSttusYAjax"
     * @throws Exception
     */
    @RequestMapping(value = {"/uss/umt/user/updateSendSttusYAjax.do"})
    public ModelAndView updateSendSttusYAjax(@ModelAttribute MberManageVO mberManageVO,
    		 Model model) throws Exception {
    	
    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	try {
    		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
        	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
        	mberManageVO.setSendId(userId);
    		mberManageVO.setSendSttus("Y"); //완료 처리
    		mberManageService.updateSendSttusY(mberManageVO);
    		
    		modelAndView.addObject("message", "완료 처리되었습니다.");
    		modelAndView.addObject("result", "success");
    		
    	}catch(Exception e) {
    		modelAndView.addObject("message", "완료 처리 실패했습니다.");
    		modelAndView.addObject("result", "fail");
    	}
    	
    	return modelAndView;
    }
    
	//이용정지 회원 주소록 엑셀 다운로드 
	@RequestMapping("/uss/umt/user/spamMberAddrExcelDownload.do")
	public void spamMberAddrExcelDownload(
		AddrVO addrVO, 
		HttpServletRequest request,
		HttpServletResponse response ,
		ModelMap model) throws Exception {
		
		addrVO.setRecordCountPerPage(100000);
		addrVO.setFirstIndex(0);
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
	
		//모든항목 다운로드
		String[] cellCheck = new String[8];
		cellCheck[0] = "addrPhoneNo";
		cellCheck[1] = "addrNm";
		cellCheck[2] = "addrGrpNm";
		cellCheck[3] = "addrComment";
		cellCheck[4] = "addrInfo1";
		cellCheck[5] = "addrInfo2";
		cellCheck[6] = "addrInfo3";
		cellCheck[7] = "addrInfo4";
		
		// 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다.
		SXSSFWorkbook wb = new SXSSFWorkbook(100);
		CellStyle style = wb.createCellStyle();
		style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 
		style.setBorderLeft(CellStyle.BORDER_THIN);
		style.setBorderRight(CellStyle.BORDER_THIN);
		style.setBorderTop(CellStyle.BORDER_THIN);
		Font font = wb.createFont();
		font.setBoldweight(Font.BOLDWEIGHT_BOLD);  //글씨 bold
		
		Cell cell = null;
		Row row = null;
		
		String fileName ="주소록";
		
		String sheetTitle = ""; 
		try{
			addrVO.setSearchSortCnd("A.ADDR_ID");
			addrVO.setSearchSortOrd("desc");
			List<AddrVO> addrList = addrService.selectAddrList(addrVO);
			{ 
				// row, cell 개수 순서대로 증가용 필드
				int rowNumber = 0;
				int celNumber = 0;
				//화면 리스트
				sheetTitle = "주소록" ; //제목
				Sheet sheet = wb.createSheet(sheetTitle);
				row = sheet.createRow(rowNumber++);
	
				cell = row.createCell(celNumber++);
				cell.setCellValue("번호");
				cell.setCellStyle(style);
	
				//cell = row.createCell(celNumber++);
				//cell.setCellValue("휴대폰번호");
				//cell.setCellStyle(style);
	
				for(String field : cellCheck) {
					cell = row.createCell(celNumber++);
					cell.setCellValue(addrVO.getHeaderName(field));
					cell.setCellStyle(style);
				}
	
				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); //번호
	
					//cell = row.createCell(celNumber++);
					//cell.setCellStyle(style);
					//cell.setCellValue(((AddrVO)addrList.get(i)).getAddrPhoneNo()); // 휴대폰번호
	
					for(String field : cellCheck) {
						cell = row.createCell(celNumber++);
						cell.setCellStyle(style);
						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 selectedUserId -> uniqId 상세조회대상 사용자아이디
	 * @param userSearchVO 검색조건
	 * @return cmm/uss/umt/EgovGnrlUserSelectUpdtPopup
	 * @param model 화면모델
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovGnrlselectedUserLoginDataListAjax.do")
	public String EgovGnrlselectedUserLoginDataListAjax(@ModelAttribute("searchVO") UserLogVO userLogVO,
			HttpServletRequest request, 
			Model model) throws Exception {


		/** pageing */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(userLogVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(userLogVO.getPageUnit());
		paginationInfo.setPageSize(userLogVO.getPageSize());
		
		userLogVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		userLogVO.setLastIndex(paginationInfo.getLastRecordIndex());
		userLogVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		//전체 리스트 불러오기
		//로그인 목록
		List<UserLogVO> userLogList = userLogService.selectLoginLogId(userLogVO);
        model.addAttribute("resultList", userLogList);
        
        paginationInfo.setTotalRecordCount(userLogList.size() > 0 ? ((UserLogVO)userLogList.get(0)).getTotCnt() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		
		
		return "cmm/uss/umt/EgovGnrlUserSelectLoginDataListPop";
	}
	
	/**
	 * 사용자정보 카카오 채널 등록 건 리스트 팝업 띄우기
	 * @param 
	 * @param 
	 * @return 
	 * @param model 화면모델
	 * @throws Exception
	 */
	@RequestMapping("/uss/umt/user/EgovGnrlselectedUserKakaoChListPopup.do")
	public String EgovGnrlselectedUserKakaoChListAjax(@ModelAttribute("searchVO") ChannelIDVO channelIDVO,
			HttpServletRequest request ,
			ModelMap model) throws Exception {

		
		try {
			
			LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
			String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
			if(id == "") {
				return "redirect:/uat/uia/EgovLoginUsr.do";
			}
			
			if(channelIDVO.getPageUnit() != 10) {
				channelIDVO.setPageUnit(channelIDVO.getPageUnit());
			}
			
			/** paging */
			PaginationInfo paginationInfo = new PaginationInfo();
			paginationInfo.setCurrentPageNo(channelIDVO.getPageIndex());
			paginationInfo.setRecordCountPerPage(channelIDVO.getPageUnit());
			paginationInfo.setPageSize(channelIDVO.getPageSize());
			
			channelIDVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
			channelIDVO.setLastIndex(paginationInfo.getLastRecordIndex());
			channelIDVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
			
			if("".equals(channelIDVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
				channelIDVO.setSearchSortCnd("profileId");
				channelIDVO.setSearchSortOrd("desc");
			}
			
			//사용자 등록 발신프로필 정보 조회해오기
			List<ChannelIDVO> resultChannelList = mjonKakaoATService.selectChannelIDList(channelIDVO);
			int totCnt = 0;
			paginationInfo.setTotalRecordCount(totCnt);
			if(resultChannelList.size() > 0) {
				totCnt = resultChannelList.get(0).getTotCnt();
			}
			paginationInfo.setTotalRecordCount(totCnt);
			
			List<ChannelIDVO> resultApiProfileList = new ArrayList<ChannelIDVO>();
			for(int i=0; i < resultChannelList.size(); i++) {
				
				KakaoVO kakaoProfileVO = new KakaoVO();
				
				String senderKey = resultChannelList.get(i).getSenderKey();
				String profileId = resultChannelList.get(i).getProfileId();
				String deleteYn = resultChannelList.get(i).getDeleteYn();
				String userId = resultChannelList.get(i).getUserId();
				kakaoProfileVO.setSenderKey(senderKey); 
				kakaoProfileVO.setProfileId(profileId);
				
				KakaoReturnVO tmpProfileVO = kakaoApiProfile.kakaoApiProfileList(kakaoProfileVO);
				
				ChannelIDVO returnChannelVO = new ChannelIDVO();
				
				returnChannelVO.setSenderKey(tmpProfileVO.getSenderKey());
				returnChannelVO.setUuid(tmpProfileVO.getUuid());
				returnChannelVO.setName(tmpProfileVO.getName());
				returnChannelVO.setStatus(tmpProfileVO.getStatus());
				returnChannelVO.setProfileStatus(tmpProfileVO.getProfileStatus());
				returnChannelVO.setCreatedAt(tmpProfileVO.getCreatedAt());
				returnChannelVO.setModifiedAt(tmpProfileVO.getModifiedAt());
				returnChannelVO.setDeleteYn(deleteYn);
				returnChannelVO.setUserId(userId);
				
				resultApiProfileList.add(returnChannelVO);
				
			}
			
			model.addAttribute("resultChannelList", resultApiProfileList);
			model.addAttribute("paginationInfo", paginationInfo);
			model.addAttribute("searchVO", channelIDVO);
			
		} catch (Exception e) {
			System.out.println("EgovGnrlselectedUserKakaoChListAjax Contrller Error ::: " + e);
		}
		
		return "cmm/uss/umt/EgovGnrlUserSelectKakaoChListPop";
	}
	
	public MberManageVO niceCheck(HttpServletRequest request, HttpSession session, MberManageVO mberManageVO) {
		
		CPClient niceCheck = new  CPClient();
		String sEncodeData = requestReplace(request.getParameter("EncodeData"), "encodeData");
		String sSiteCode = "BS933";				// NICE로부터 부여받은 사이트 코드
		String sSitePassword = "2CU5kY9wpppk";			// NICE로부터 부여받은 사이트 패스워드
		 
		String sCipherTime = "";			// 복호화한 시간
	    String sRequestNumber = "";			// 요청 번호
	    String sResponseNumber = "";		// 인증 고유번호
	    String sAuthType = "";				// 인증 수단
	    String sName = "";					// 성명
	    String sDupInfo = "";				// 중복가입 확인값 (DI_64 byte)
	    String sConnInfo = "";				// 연계정보 확인값 (CI_88 byte)
	    String sBirthDate = "";				// 생년월일(YYYYMMDD)
	    String sGender = "";				// 성별
	    String sNationalInfo = "";			// 내/외국인정보 (개발가이드 참조)
		String sMobileNo = "";				// 휴대폰번호
		String sMobileCo = "";				// 통신사
	    String sMessage = "";
	    String sPlainData = "";
	    
		int iReturn = niceCheck.fnDecode(sSiteCode, sSitePassword, sEncodeData);
		if( iReturn == 0 )
	    {
	        sPlainData = niceCheck.getPlainData();
	        sCipherTime = niceCheck.getCipherDateTime();
	        
	        // 데이타를 추출합니다.
	        java.util.HashMap mapresult = niceCheck.fnParse(sPlainData);
	        
	        sRequestNumber  = (String)mapresult.get("REQ_SEQ");
	        sResponseNumber = (String)mapresult.get("RES_SEQ");
	        sAuthType		= (String)mapresult.get("AUTH_TYPE");
	        sName			= (String)mapresult.get("NAME");
			//sName			= (String)mapresult.get("UTF8_NAME"); //charset utf8 사용시 주석 해제 후 사용
	        sBirthDate		= (String)mapresult.get("BIRTHDATE");
	        sGender			= (String)mapresult.get("GENDER");
	        sNationalInfo  	= (String)mapresult.get("NATIONALINFO");
	        sDupInfo		= (String)mapresult.get("DI");
	        sConnInfo		= (String)mapresult.get("CI");
	        sMobileNo		= (String)mapresult.get("MOBILE_NO");
	        sMobileCo		= (String)mapresult.get("MOBILE_CO");
	        
	        String session_sRequestNumber = (String)session.getAttribute("REQ_SEQ");
	        if(!sRequestNumber.equals(session_sRequestNumber))
	        {
	            sMessage = "세션값 불일치 오류입니다.";
	            sResponseNumber = "";
	            sAuthType = "";
	        }
	    }
	    else if( iReturn == -1)
	    {
	        sMessage = "복호화 시스템 오류입니다.";
	    }    
	    else if( iReturn == -4)
	    {
	        sMessage = "복호화 처리 오류입니다.";
	    }    
	    else if( iReturn == -5)
	    {
	        sMessage = "복호화 해쉬 오류입니다.";
	    }    
	    else if( iReturn == -6)
	    {
	        sMessage = "복호화 데이터 오류입니다.";
	    }    
	    else if( iReturn == -9)
	    {
	        sMessage = "입력 데이터 오류입니다.";
	    }    
	    else if( iReturn == -12)
	    {
	        sMessage = "사이트 패스워드 오류입니다.";
	    }    
	    else
	    {
	        sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn;
	    }
		
		try {
			mberManageVO.setNiceMessage(sMessage);
			mberManageVO.setNiceNm(sName);
			mberManageVO.setMblDn(sDupInfo);
			mberManageVO.setSexdstnCode(sGender);
			mberManageVO.setMoblphonNo(sMobileNo);
			mberManageVO.setBirthDay(sBirthDate);
			
			
		}catch(Exception e) {
			e.printStackTrace();
		}
		return mberManageVO;
		
	}	
	
	//나이스 인증
	public String requestReplace (String paramValue, String gubun) {

        String result = "";
        
        if (paramValue != null) {
        	
        	paramValue = paramValue.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

        	paramValue = paramValue.replaceAll("\\*", "");
        	paramValue = paramValue.replaceAll("\\?", "");
        	paramValue = paramValue.replaceAll("\\[", "");
        	paramValue = paramValue.replaceAll("\\{", "");
        	paramValue = paramValue.replaceAll("\\(", "");
        	paramValue = paramValue.replaceAll("\\)", "");
        	paramValue = paramValue.replaceAll("\\^", "");
        	paramValue = paramValue.replaceAll("\\$", "");
        	paramValue = paramValue.replaceAll("'", "");
        	paramValue = paramValue.replaceAll("@", "");
        	paramValue = paramValue.replaceAll("%", "");
        	paramValue = paramValue.replaceAll(";", "");
        	paramValue = paramValue.replaceAll(":", "");
        	paramValue = paramValue.replaceAll("-", "");
        	paramValue = paramValue.replaceAll("#", "");
        	paramValue = paramValue.replaceAll("--", "");
        	paramValue = paramValue.replaceAll("-", "");
        	paramValue = paramValue.replaceAll(",", "");
        	
        	if(gubun != "encodeData"){
        		paramValue = paramValue.replaceAll("\\+", "");
        		paramValue = paramValue.replaceAll("/", "");
            paramValue = paramValue.replaceAll("=", "");
        	}
        	
        	result = paramValue;
            
        }
        return result;
	}
	
	public String damoEnc(String strDec, HttpServletRequest request) {
		//DI 암호화
		System.out.println("-----damoEnc---request.getRequestURL().toString()-----------" + request.getRequestURL().toString()+"-----") ;
		
		String iniFilePath     = "/usr/local/tomcat/damo/scpdb_agent.ini"; //실서버
		if(request.getRequestURL().toString().contains("test.kofons.or.kr")){ //로컬
			iniFilePath = "C:\\damo\\scpdb_agent.ini";
		}else if(request.getRequestURL().toString().contains("219.240.88.15")) { //테스트
			iniFilePath = "/usr/local/tomcat_kofons/damo/scpdb_agent.ini";
		}
		System.out.println("iniFilePath --" + iniFilePath + "---");
		ScpDbAgent agt = new ScpDbAgent();
		String strEnc = "";
		try {
			strEnc =  agt.ScpEncB64( iniFilePath, "KEY1", strDec);
		}catch(Exception e) {
			
		}
		return  strEnc ;
	}
	
}