package itn.let.sym.site.web;

import java.io.File;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Random;

import javax.annotation.Resource;
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.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.support.RequestContextUtils;

import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
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.ReadVO;
import itn.com.cmm.service.CmmnDetailCode;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
import itn.com.cmm.service.ReadService;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.sym.ccm.cca.service.CmmnCodeVO;
import itn.let.sym.ccm.cca.service.EgovCcmCmmnCodeManageService;
import itn.let.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService;
import itn.let.sym.mnu.mpm.service.MenuManageVO;
import itn.let.sym.site.service.BiddingVO;
import itn.let.sym.site.service.EgovSiteIpService;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.sym.site.service.MetaTagVO;
import itn.let.sym.site.service.SiteIpManagerVO;
import itn.let.sym.site.service.SiteManagerVO;
import itn.let.sym.site.service.TermsVO;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.user.service.IndexNowUtil;
import itn.let.utl.user.service.MjonNoticeSendUtil;

/**
 * 로그인정책에 대한 controller 클래스를 정의한다.
 * 로그인정책에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
 * 로그인정책의 조회기능은 목록조회, 상세조회로 구분된다.
 * @author 공통서비스개발팀 lee.m.j
 * @since 2009.08.03
 * @version 1.0
 * @see
 *
 * <pre>
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *   2009.08.03  lee.m.j        최초 생성
 *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
 *
 * </pre>
 */
@Controller
public class EgovSiteManagerController {

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

	@Resource(name = "egovSiteManagerService")
	EgovSiteManagerService egovSiteManagerService;
	
	@Resource(name = "egovSiteIpService")
	EgovSiteIpService egovSiteIpService;
	
	/** cmmUseService */
	@Resource(name = "EgovCmmUseService")
	private EgovCmmUseService cmmUseService;
	
	@Resource(name = "CmmnCodeManageService")
    private EgovCcmCmmnCodeManageService cmmnCodeManageService;
	
	@Resource(name = "CmmnDetailCodeManageService")
    private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService;
	
	@Resource(name="EgovFileMngUtil")
	private EgovFileMngUtil fileUtil;
	
	@Resource(name="EgovFileMngService")
    private EgovFileMngService fileMngService;
	
	@Resource(name = "egovFileIdGnrService")
	private EgovIdGnrService idgenService;

	@Resource(name = "egovTermsIdGnrService")
	private EgovIdGnrService idgenTermsService;
	
	@Resource(name = "EgovFileMngService")
	private EgovFileMngService fileService;
	
	@Resource(name = "readService")
	private ReadService readService;
	
	@Resource(name = "userManageService")
	private EgovUserManageService userManageService;
	
	@Resource(name="indexNowUtil")
	private IndexNowUtil indexNowUtil;
	
	/** 알림전송 Util */
	@Resource(name = "mjonNoticeSendUtil")
	private MjonNoticeSendUtil mjonNoticeSendUtil;
	
	//배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"}
	private String[][] siteMngExcelValue ={
	    {"0" ,"번호" , "1" , "" },
	    {"1", "사이트 아이디" , "ITN" , "[코드]"}, 
	    {"2", "사이트 이름" , "아이티앤" , "[코드]"}, 
	    {"3", "테마" , "1", ""}, 
	    {"4", "샘플사용" , "Y", ""}, 
	    {"5", "등록자" , "일반관리자", "[코드]"}, 
	    {"6", "등록일" , "2019-10-31", "(날자형식)"}, 
	    {"7", "수정일" , "2019-10-31", "(날자형식)"} 
	} ;
	
	//배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"}
	private String[][] ipExcelValue ={
	    {"0" ,"번호" , "1" , "" },
	    {"1", "사이트" , "ITN" , "[코드]"}, 
	    {"2", "컴퓨터IP" , "192.168.0.21" , "[코드]"}, 
	    {"3", "소속" , "개발부서", ""}, 
	    {"4", "직위" , "사원", ""}, 
	    {"5", "성명" , "홍길동", "[코드]"}, 
	    {"6", "기간" , "2019-06-06 02:02~2019-06-27 04:04", "(날자형식)"}, 
	    {"7", "위치" , "2층 301호", "(날자형식)"}, 
	    {"8", "랜선번호" , "1", "(날자형식)"},
	    {"9", "등록자" , "admin", "(날자형식)"}, 
	    {"10", "등록일" , "2019-05-21 06:05:08", "(날자형식)"}, 
	    {"11", "사용여부" , "사용", "(날자형식)"} 
	} ;
		
		
	/**
	 * 사이트을 가져온다..
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/getSiteManager.do")
	public String getLoginGroupPolicy(@ModelAttribute("SiteManagerVo") SiteManagerVO siteManagerVO, ModelMap model) throws Exception {
		siteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;
		return "/sym/site/addSiteManagerView";
	}
	
	/**
	 * 사이트 정보 등록화면으로 이동한다.
	 * @param loginPolicy - 로그인정책 model
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/addSiteManagerView.do")
	public String addSiteManagerView(@ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO, ModelMap model) throws Exception {

		siteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;
		model.addAttribute("siteManagerVO", siteManagerVO);
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  //테마사용
		vo.setCodeId("UNI002");
		model.addAttribute("themeList", cmmUseService.selectCmmCodeDetail(vo));
		
		return "/sym/site/addSiteManagerView";
	}
	
	/**
	 * 사이트 정보 등록한다.
	 * @param loginPolicy - 로그인정책 model
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/addSiteManager.do")
	public String insertSiteManagerView(@ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO, RedirectAttributes redirectAttributes ,  ModelMap model) throws Exception {

		LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
		siteManagerVO.setFrstRegisterId(user.getId());
		try{
			egovSiteManagerService.insertSiteManager(siteManagerVO);
		}catch(Exception e){
			redirectAttributes.addFlashAttribute("message", "중복된 사이트 아이디가 있습니다.");
			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectSiteManagerList.do");
			return redirectUrlMaker.getRedirectUrl();
		}
		
		model.addAttribute("message", egovMessageSource.getMessage("success.common.update"));
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectSiteManagerList.do");
		return redirectUrlMaker.getRedirectUrl();
	}
	
	/**
	 * 사이트 목록을 조회한다.
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/selectSiteManagerList.do")
	public String selectSiteManagerList( @RequestParam Map<?, ?> commandMap , String[] adminAccessIp 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
			
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  //테마사용
		vo.setCodeId("UNI002");
		
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("sortTempNo");
			siteManagerVO.setSearchSortOrd("desc");
		}
		List<SiteManagerVO> siteConfigList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("siteConfigList", siteConfigList);
		
		model.addAttribute("themeList", cmmUseService.selectCmmCodeDetail(vo));
		
		int totCnt = egovSiteManagerService.selectSiteManagerListTotCnt(siteManagerVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
	
		return "/sym/site/selectSiteManagerList";
	}
	
	@RequestMapping("/sym/site/deleteSiteManagerList.do")
	public String deleteSiteManagerList( @RequestParam("del") String[] del, RedirectAttributes redirectAttributes , Model model) throws Exception {

		for(String id:del) {
 		    try{
 		    	egovSiteManagerService.deleteSiteManager(id);
 		    }catch(Exception e){
 		    	redirectAttributes.addFlashAttribute("message", "사이트 삭제에 실패하였습니다.");
 				RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectSiteManagerList");
 				return redirectUrlMaker.getRedirectUrl();
 		    }
 	   }
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectSiteManagerList.do");
		return redirectUrlMaker.getRedirectUrl();
	}
	
	/**
	 * 사이트 정보 수정한다.
	 * @param loginPolicy - 로그인정책 model
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/siteManagerUpdate.do")
	public String updateSiteManager(@ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO, ModelMap model, RedirectAttributes redirectAttributes ) throws Exception {
		try{
			egovSiteManagerService.siteManagerUpdate(siteManagerVO) ;
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
		}catch(Exception e){
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.update"));
		}
		
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/addSiteManagerView.do");
       	return redirectUrlMaker.getRedirectUrl();
	}
	
	/**
	 * 사이트 IP 목록을 조회한다.
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/selectSiteIpList.do")
	public String selectSiteIpList( @RequestParam Map<?, ?> commandMap , HttpSession session , @ModelAttribute("siteIpManagerVO") SiteIpManagerVO siteIpManagerVO, ModelMap model, MenuManageVO menuManageVO) throws Exception {

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

		siteIpManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteIpManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteIpManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<SiteIpManagerVO> siteIpList = new ArrayList<SiteIpManagerVO>();
		siteIpManagerVO.setChgFlag("N"); //히스토리 제외
		
		if("".equals(siteIpManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteIpManagerVO.setSearchSortCnd("comId");
			siteIpManagerVO.setSearchSortOrd("desc");
		}
		
		siteIpList = egovSiteIpService.selectSiteIpList(siteIpManagerVO);
		model.addAttribute("siteIpList", siteIpList);
	
		int totCnt = egovSiteIpService.selectSiteIpListTotCnt(siteIpManagerVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
	
		CmmnCodeVO searchVO = new CmmnCodeVO();
		searchVO.setFirstIndex(0);
		searchVO.setRecordCountPerPage(100); //부서100개 까지
		searchVO.setSearchCondition("clCode");
		searchVO.setSearchKeyword("CMS");
		model.addAttribute("teamList", cmmnCodeManageService.selectCmmnCodeList(searchVO));
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO(); 
		vo.setCodeId("ITN009"); //직위
		model.addAttribute("gradeList", cmmUseService.selectCmmCodeDetail(vo));
		
		return "/sym/site/selectSiteIpList";
	}
	
	/**
	 * 사이트 IP 대시보드 화면.
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/siteIpInfo.do")
	public String selectSiteIpInfo( @RequestParam Map<?, ?> commandMap , HttpSession session , @ModelAttribute("siteIpManagerVO") SiteIpManagerVO siteIpManagerVO, ModelMap model) throws Exception {
		
		CmmnDetailCode cmmnDetailCode = new CmmnDetailCode();//소속
		cmmnDetailCode.setClCode("CMS");
		
		//모든 부서 이름조회
		List<CmmnDetailCode> teamList = cmmnDetailCodeManageService.selectCmmnCodeAllList(cmmnDetailCode);
		model.addAttribute("teamList", teamList);
		
		//사용량 현황
		List<SiteIpManagerVO> basicUseSumCnt = new ArrayList<SiteIpManagerVO>(); // 모든부서에 useYn : Y,N / useSumCnt : 0 
		
		for(CmmnDetailCode cmmnDetailCode_Y: teamList) {
			SiteIpManagerVO siteIpManagerVO_Y = new SiteIpManagerVO();
			siteIpManagerVO_Y.setTeam(cmmnDetailCode_Y.getCodeId());
			siteIpManagerVO_Y.setDepartment(cmmnDetailCode_Y.getCode());
			siteIpManagerVO_Y.setUseYn("Y");
			siteIpManagerVO_Y.setUseSumCnt(0);
			basicUseSumCnt.add(siteIpManagerVO_Y);
		}
		
		for(CmmnDetailCode cmmnDetailCode_N: teamList) {
			SiteIpManagerVO siteIpManagerVO_N = new SiteIpManagerVO();
			siteIpManagerVO_N.setTeam(cmmnDetailCode_N.getCodeId());
			siteIpManagerVO_N.setDepartment(cmmnDetailCode_N.getCode());
			siteIpManagerVO_N.setUseYn("N");
			siteIpManagerVO_N.setUseSumCnt(0);
			basicUseSumCnt.add(siteIpManagerVO_N);
		}
		
		List<SiteIpManagerVO> useSumCnt = new ArrayList<SiteIpManagerVO>();
		useSumCnt = egovSiteIpService.selectSiteUseSumCnt(siteIpManagerVO);
		for(SiteIpManagerVO basicUseSumCntVO: basicUseSumCnt){
			for(SiteIpManagerVO useSumCntVO : useSumCnt ) {
				if(basicUseSumCntVO.getTeam().equals(useSumCntVO.getTeam()) && 
				   basicUseSumCntVO.getDepartment().equals(useSumCntVO.getDepartment()) &&
				   basicUseSumCntVO.getUseYn().equals(useSumCntVO.getUseYn())
				){
					basicUseSumCntVO.setUseSumCnt( basicUseSumCntVO.getUseSumCnt() + useSumCntVO.getUseSumCnt());
				}
			}
		}
		model.addAttribute("basicUseSumCnt", basicUseSumCnt);
		siteIpManagerVO.setTotalUseSumFlag("Y");//총카운트 다시조회(Y,N만)
		List<SiteIpManagerVO> totalUseSumCnt = new ArrayList<SiteIpManagerVO>();
		useSumCnt = egovSiteIpService.selectSiteUseSumCnt(siteIpManagerVO); 
		model.addAttribute("useSumCnt", useSumCnt);
		return "/sym/site/siteIpInfo";
	}
	
	@RequestMapping("/sym/site/siteIpModifyView.do")
	public String siteIpModifyView( @RequestParam Map<?, ?> commandMap , HttpSession session , @ModelAttribute("SiteIpManagerVO") SiteIpManagerVO siteIpManagerVO, ModelMap model) throws Exception {
		LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
		
		//팝업창시작일자(시)
		model.addAttribute("ntceBgndeHH", getTimeHH());
		//팝업창시작일자(분)
		model.addAttribute("ntceBgndeMM", getTimeMM());
		//팝업창종료일자(시)
		model.addAttribute("ntceEnddeHH", getTimeHH());
		//팝업창정료일자(분)
		model.addAttribute("ntceEnddeMM", getTimeMM());

				
		if("Modify".equals((String)commandMap.get("pageType"))){  //수정
			siteIpManagerVO = egovSiteIpService.selectSiteIpVO(siteIpManagerVO);
			String sNtceBgnde = siteIpManagerVO.getNtceBgnde();
			String sNtceEndde = siteIpManagerVO.getNtceEndde();
			
			//읽음처리 Insert
			ReadVO readVO = new ReadVO();
			readVO.setReadId(siteIpManagerVO.getComId());
			readVO.setLoginId(loginVO.getId());
			readVO.setMenuNo("4200000");
			
			ReadVO readYn = readService.selectReadYn(readVO);
			if(readYn == null) {
				readService.insertReadYn(readVO);
			}
			
			if(null != sNtceBgnde && !sNtceBgnde.equals("")) {
				siteIpManagerVO.setNtceBgndeHH(sNtceBgnde.substring(8, 10));
				siteIpManagerVO.setNtceBgndeMM(sNtceBgnde.substring(10, 12));	
			}
				
			if(null != sNtceEndde &&  !sNtceEndde.equals("") ) {
				siteIpManagerVO.setNtceEnddeHH(sNtceEndde.substring(8, 10));
				siteIpManagerVO.setNtceEnddeMM(sNtceEndde.substring(10, 12));
			}
			
			siteIpManagerVO.setTeam_dept(siteIpManagerVO.getTeam()+"_"+siteIpManagerVO.getDepartment());
			
			model.addAttribute("siteIpManagerVO", siteIpManagerVO);
			
    	}
		model.addAttribute("siteIpManagerVO", siteIpManagerVO);	
		
		
		CmmnCodeVO searchVO = new CmmnCodeVO();
		searchVO.setFirstIndex(0);
		searchVO.setRecordCountPerPage(100); //부서100개 까지
		searchVO.setSearchCondition("clCode");
		searchVO.setSearchKeyword("CMS");
		model.addAttribute("teamList", cmmnCodeManageService.selectCmmnCodeList(searchVO));
		 
		CmmnDetailCode cmmnDetailCode = new CmmnDetailCode();//하위 부서 리스트 모두 가져옴.
		cmmnDetailCode.setClCode("CMS");
		
		List<CmmnDetailCode> allTeamList = cmmnDetailCodeManageService.selectCmmnCodeAllList(cmmnDetailCode);
		model.addAttribute("allTeamList", allTeamList);
		
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  
		vo.setCodeId("ITN009"); //직위
		model.addAttribute("gradeList", cmmUseService.selectCmmCodeDetail(vo));
		model.addAttribute("pageType", (String)commandMap.get("pageType"));
		return "/sym/site/siteIpModifyView";
	}
	
	
	/**
	 * 사이트 정보 수정한다.
	 * @param loginPolicy - 로그인정책 model
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/insertSiteIp.do")
	public String insertSiteIp(@ModelAttribute("siteIpManagerVO") SiteIpManagerVO siteIpManagerVO, ModelMap model, RedirectAttributes redirectAttributes ) throws Exception {
		
		try{
			egovSiteIpService.insertSiteIp(siteIpManagerVO);
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
		}catch(Exception e){
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.insert"));
		}
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectSiteIpList.do");
		return redirectUrlMaker.getRedirectUrl();
	}
	
	
	/**
	 * 사이트 정보 수정한다.
	 * @param loginPolicy - 로그인정책 model
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/updateSiteIp.do")
	public String updateSiteId(@ModelAttribute("SiteIpManagerVO") SiteIpManagerVO siteIpManagerVO, ModelMap model, RedirectAttributes redirectAttributes ) throws Exception {
		try{
			LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
			egovSiteIpService.updateSiteIp(siteIpManagerVO) ;
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
		}catch(Exception e){
			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.update"));
		}
		
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectSiteIpList.do");
       	return redirectUrlMaker.getRedirectUrl();
	}
	
	
	@RequestMapping("/sym/site/deleteSiteIp.do")
	public String deleteSiteIp( @RequestParam("del") String[] del, RedirectAttributes redirectAttributes , Model model) throws Exception {

		for(String id:del) {
 		    try{
 		    	egovSiteIpService.deleteSiteIp(id);
 		    }catch(Exception e){
 		    	redirectAttributes.addFlashAttribute("message", "삭제에 실패하였습니다.");
 				RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectSiteManagerList");
 				return redirectUrlMaker.getRedirectUrl();
 		    }
 	   }
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectSiteIpList.do");
		return redirectUrlMaker.getRedirectUrl();
	}

	/**
	 * 시간을 LIST를 반환한다.
	 * @return  List
	 * @throws
	 */
	@SuppressWarnings("unused")
	private List<ComDefaultCodeVO> getTimeHH() {
		ArrayList<ComDefaultCodeVO> listHH = new ArrayList<ComDefaultCodeVO>();
		HashMap<?, ?> hmHHMM;
		for (int i = 0; i <= 24; i++) {
			String sHH = "";
			String strI = String.valueOf(i);
			if (i < 10) {
				sHH = "0" + strI;
			} else {
				sHH = strI;
			}

			ComDefaultCodeVO codeVO = new ComDefaultCodeVO();
			codeVO.setCode(sHH);
			codeVO.setCodeNm(sHH);

			listHH.add(codeVO);
		}

		return listHH;
	}
	
	/**
	 * 분을 LIST를 반환한다.
	 * @return  List
	 * @throws
	 */
	@SuppressWarnings("unused")
	private List<ComDefaultCodeVO> getTimeMM() {
		ArrayList<ComDefaultCodeVO> listMM = new ArrayList<ComDefaultCodeVO>();
		HashMap<?, ?> hmHHMM;
		for (int i = 0; i <= 60; i++) {

			String sMM = "";
			String strI = String.valueOf(i);
			if (i < 10) {
				sMM = "0" + strI;
			} else {
				sMM = strI;
			}

			ComDefaultCodeVO codeVO = new ComDefaultCodeVO();
			codeVO.setCode(sMM);
			codeVO.setCodeNm(sMM);

			listMM.add(codeVO);
		}
		return listMM;
	}

	/**
	 * 0을 붙여 반환
	 * @return  String
	 * @throws
	 */
	public String dateTypeIntForString(int iInput) {
		String sOutput = "";
		if (Integer.toString(iInput).length() == 1) {
			sOutput = "0" + Integer.toString(iInput);
		} else {
			sOutput = Integer.toString(iInput);
		}

		return sOutput;
	}
	
	@RequestMapping(value = "/sym/site/siteIpChgView.do")
	public String siteIpChgView(@ModelAttribute("siteIpManagerVO") SiteIpManagerVO siteIpManagerVO, ModelMap model) throws Exception {

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

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

		siteIpManagerVO.setChgFlag("Y"); //수정정보만 조회
		List<SiteIpManagerVO> siteIpList = new ArrayList<SiteIpManagerVO>();
		siteIpList = egovSiteIpService.selectSiteIpList(siteIpManagerVO);
		model.addAttribute("siteIpList", siteIpList);

		int totCnt = egovSiteIpService.selectSiteIpListTotCnt(siteIpManagerVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
		
		CmmnCodeVO searchVO = new CmmnCodeVO();
		searchVO.setFirstIndex(0);
		searchVO.setRecordCountPerPage(100); //부서100개 까지
		searchVO.setSearchCondition("clCode");
		searchVO.setSearchKeyword("CMS");
		model.addAttribute("teamList", cmmnCodeManageService.selectCmmnCodeList(searchVO));
		 
		CmmnDetailCode cmmnDetailCode = new CmmnDetailCode();//하위 부서 리스트 모두 가져옴.
		cmmnDetailCode.setClCode("CMS");
		
		List<CmmnDetailCode> allTeamList = cmmnDetailCodeManageService.selectCmmnCodeAllList(cmmnDetailCode);
		model.addAttribute("allTeamList", allTeamList);
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  
		vo.setCodeId("ITN009"); //직위
		model.addAttribute("gradeList", cmmUseService.selectCmmCodeDetail(vo));
		
		return "/sym/site/selectSiteIpChgList";
	}
	
	//리스트 엑셀 다운로드
  	@RequestMapping(value="/sym/site/siteMngExcelDownload.do")
  	public void siteMngExcelDownload(SiteManagerVO siteManagerVO, 
  			HttpServletRequest request, 
  			HttpServletResponse response , 
  			ModelMap model) throws Exception {
  		
  		siteManagerVO.setRecordCountPerPage(100000);
  		siteManagerVO.setFirstIndex(0);
  		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		if(null != loginVO && !"super".equals(loginVO.getSiteId())){
			siteManagerVO.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 ="사이트아이디 리스트";
  		String sheetTitle = "";
  		try{
  			List<SiteManagerVO> siteManagerList = egovSiteManagerService.selectSiteManagerList(siteManagerVO); 
  			{ //화면 리스트
  				sheetTitle = "사이트아이디 리스트(화면)" ; //제목
  				Sheet sheet = wb.createSheet(sheetTitle);
  				row = sheet.createRow(0);
  		        for(int i=0 ; i < siteMngExcelValue.length ; i++) {
  	 		       cell = row.createCell(i);
  	 		       cell.setCellStyle(style);
  		 	       cell.setCellValue(siteMngExcelValue[i][1]);
  	 		    }
  			        
  		        for(int i=0; i < siteManagerList.size(); i++){
  			    	row = sheet.createRow(i+1);
  			    	for(int j=0 ; j < siteMngExcelValue.length ; j++) {
  			        	cell = row.createCell(j);
  			        	cell.setCellStyle(style);
  			        	if(j==0) cell.setCellValue(i+1); //번호
  			        	if(j==1) cell.setCellValue(siteManagerList.get(i).getSiteId()); //사이트 아이디
  			        	if(j==2) cell.setCellValue(siteManagerList.get(i).getSiteNm()); //사이트 이름
  			        	if(j==3) cell.setCellValue(siteManagerList.get(i).getThemeTxt()); //테마
  			        	if(j==4) cell.setCellValue(siteManagerList.get(i).getThemeSmplUseTxt()); //샘플사용
  			        	if(j==5) cell.setCellValue(siteManagerList.get(i).getFrstRegisterId()); //등록자
  			        	if(j==6) cell.setCellValue(siteManagerList.get(i).getFrstRegistPnttm()); //등록일
  			        	if(j==7) cell.setCellValue(siteManagerList.get(i).getLastUpdtPnttm()); //수정일
  				 	}
  		        }
  			}
  	    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 loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping(value="/sym/site/inspList.do")
	public String selectIinspList( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
			
		List<SiteManagerVO> inspList = new ArrayList<SiteManagerVO>();
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("frstRegistPnttm");
			siteManagerVO.setSearchSortOrd("desc");
		}
		inspList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("inspList", inspList);
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  //테마사용
		vo.setCodeId("UNI002");
		model.addAttribute("themeList", cmmUseService.selectCmmCodeDetail(vo));
		
		int totCnt = egovSiteManagerService.selectSiteManagerListTotCnt(siteManagerVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
	
		return "/sym/site/inspList";
	}
	
	/**
	 * 점검 중 페이지 업데이트.
	 * @param mberManageVO 일반회원가입신청정보
	 * @return forward:/uat/uia/egovLoginUsr.do
	 * @throws Exception
	 */
	@RequestMapping("/sym/site/inspUpdateAjax.do")
	public ModelAndView updateUpdateAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateInsp(siteManagerVO);
		return modelAndView;
	}
  	
	/**
	 * 웹 아이콘 관리 목록을 조회한다.
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/faviconList.do")
	public String selectFaviconList( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<SiteManagerVO> faviconList = new ArrayList<SiteManagerVO>();
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("frstRegistPnttm");
			siteManagerVO.setSearchSortOrd("desc");
		}
		faviconList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("faviconList", faviconList);
		
		int totCnt = egovSiteManagerService.selectSiteManagerListTotCnt(siteManagerVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
		return "/sym/site/faviconList";
	}
	
	/* favicon 첨부파일등록/수정 view*/
    @RequestMapping(value="/sym/site/faviconFileView.do")
    public String viewUpdateFaviconFile(@RequestParam Map<?, ?> commandMap, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO,
            HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes  , Model model)
            throws Exception  {
    	SiteManagerVO faviconFileVO = new SiteManagerVO();
    	/*if("U".equals((String)commandMap.get("pageType"))){  //수정
    		//faviconFileVO = egovSiteManagerService.selectFaviconFileVO(siteManagerVO) ;
    		faviconFileVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;
    		if(faviconFileVO ==null){
    			redirectAttributes.addFlashAttribute("message", "수정하려는 첨부파일 목록이 없습니다.");
    			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/fms/fmsFileList.do");
    			return redirectUrlMaker.getRedirectUrl();
    		}
    	}else{//등록
    		faviconFileVO.setSiteId(siteManagerVO.getSiteId());
    	}*/
    	
    	faviconFileVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;
    	if(null != faviconFileVO.getFaviconFileId() && !"".equals( faviconFileVO.getFaviconFileId())) {
    		String atchFileId = faviconFileVO.getFaviconFileId() ;
    		FileVO fileVO = new FileVO();
    		fileVO.setAtchFileId(atchFileId);
    		List<FileVO> fileList = fileService.selectFileInfs(fileVO);
    		model.addAttribute("fileList", fileList);
    	}
	    model.addAttribute("faviconFileVO", faviconFileVO);	
	    return "sym/site/faviconFileView";
    } 
    
    /* 웹 아이콘 파일등록/수정 process */
    @RequestMapping(value="/sym/site/faviconFileInsert.do")
    public String insertfaviconFile(@RequestParam Map<?, ?> commandMap, 
    		@ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO, 
    		final MultipartHttpServletRequest multiRequest,
    		HttpServletRequest request,	HttpServletResponse response, RedirectAttributes redirectAttributes , Model model) throws Exception  {
		/*파일등록 */
    	List<FileVO> result = null;
    	String uploadFolder = "";
    	String orignlFileNm = "";
    	String atchFileId = "";
    	final Map<String, MultipartFile> files = multiRequest.getFileMap();
		if (!files.isEmpty()){
			result = fileUtil.parseFileInf(files, "FAV_", 0, "", uploadFolder, "");
			atchFileId = fileMngService.insertFileInfs(result);
			FileVO vo = null;
			Iterator<FileVO> iter = result.iterator();
			while (iter.hasNext()) {
				vo = iter.next();
				orignlFileNm = vo.getOrignlFileNm();
				atchFileId = vo.getAtchFileId();
			}
			if (vo == null) {
			} else {
				siteManagerVO.setFaviconFileId(atchFileId);
				siteManagerVO.setFaviconYn("Y");
				egovSiteManagerService.updateFaviconFile(siteManagerVO);
			}
		}
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/faviconList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
	
    /**
	 * 웹아이콘 페이지 업데이트.
	 */
	@RequestMapping("/sym/site/faviconYnUpdateAjax.do")
	public ModelAndView faviconYnUpdateAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateFaviconYnAjax(siteManagerVO);
		return modelAndView;
	}
	
	/*웹 아이콘 삭제 */
    @RequestMapping("/sym/site/faviconFileDelete.do")
    public String deleteFaviconFile(@RequestParam("del") String[] del, SiteManagerVO siteManagerVO, RedirectAttributes redirectAttributes , Model model) throws Exception {
    	boolean delete = false;
    	String whFile = "";
    	for(String id:del) {
    		siteManagerVO.setFaviconFileId(id);
    		SiteManagerVO faviconFileVO = egovSiteManagerService.selectFaviconFileVO(siteManagerVO) ;
    		if(null !=faviconFileVO) { 
    			if(null !=faviconFileVO.getWhFile()){ //실제파일 삭제
    				File delFile = new File(whFile);
        			delete = delFile.delete();
    			}
    			FileVO fileVO = new FileVO(); //DB삭제
    			fileVO.setAtchFileId(faviconFileVO.getFaviconFileId());
    			fileVO.setFileSn("");
    			fileService.deleteFileInf(fileVO);
    		}
    		siteManagerVO.setFaviconFileId("");
    		siteManagerVO.setFaviconYn("N");
    		egovSiteManagerService.updateFaviconFile(siteManagerVO); //사이트 테이블 업데이트
 	   }
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/faviconList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
	
    
    /**
	 * 웹 타이틀 관리 목록을 조회한다.
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/tabTitleList.do")
	public String selectwebTitleList( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<SiteManagerVO> tabTitleList = new ArrayList<SiteManagerVO>();
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("frstRegistPnttm");
			siteManagerVO.setSearchSortOrd("desc");
		}
		tabTitleList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("tabTitleList", tabTitleList);
		
		int totCnt = egovSiteManagerService.selectSiteManagerListTotCnt(siteManagerVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
		return "/sym/site/tabTitleList";
	}
	
	/* 웹 타이틀 등록/수정 view*/
    @RequestMapping(value="/sym/site/tabTitleView.do")
    public String viewUpdateTabTitle(@RequestParam Map<?, ?> commandMap, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO,
            HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes  , Model model)
            throws Exception  {
    	SiteManagerVO tabTitleVO = new SiteManagerVO();
    	if("U".equals((String)commandMap.get("pageType"))){  //수정
    		tabTitleVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;
    		if(tabTitleVO ==null){
    			redirectAttributes.addFlashAttribute("message", "수정하려는 사이트 정보가 없습니다.");
    			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/tabTitleList.do");
    			return redirectUrlMaker.getRedirectUrl();
    		}
    	}else{//등록
    		tabTitleVO.setSiteId(siteManagerVO.getSiteId());
    	}
	    model.addAttribute("tabTitleVO", tabTitleVO);	
	    return "sym/site/tabTitleView";
    } 
    
    /* 웹 타이틀등록/수정 process */
    @RequestMapping(value="/sym/site/tabTitleInsert.do")
    public String insertTabTitle(@RequestParam Map<?, ?> commandMap, 
    		@ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO, 
    		HttpServletRequest request,	HttpServletResponse response, 
    		RedirectAttributes redirectAttributes , Model model) throws Exception  {
		egovSiteManagerService.updateTabTitle(siteManagerVO);
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/tabTitleList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
    /**
	 * 웹 타이틀 사용여부 업데이트.
	 */
	@RequestMapping("/sym/site/tabTitleYnUpdateAjax.do")
	public ModelAndView tabTitleYnUpdateAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateTabTitleYnAjax(siteManagerVO);
		return modelAndView;
	}
	
	/*웹 아이콘 삭제 */
    @RequestMapping("/sym/site/tabTitleDelete.do")
    public String deleteTabTitle(SiteManagerVO siteManagerVO, RedirectAttributes redirectAttributes , Model model) throws Exception {
		siteManagerVO.setTabTitle("");
		siteManagerVO.setTabTitleYn("N");
		egovSiteManagerService.updateTabTitleYn(siteManagerVO); //사이트 테이블 업데이트
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/tabTitleList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
    /**
	 * 개인정보 설정관리 조회한다.
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/infoProtect.do")
	public String selectInfoProtectList( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {
		
		if(siteManagerVO.getPageUnit() != 10) {
			siteManagerVO.setPageUnit(siteManagerVO.getPageUnit());
		}
		/** paging */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(siteManagerVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(siteManagerVO.getPageUnit());
		paginationInfo.setPageSize(siteManagerVO.getPageSize());

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<SiteManagerVO> infoProtect = new ArrayList<SiteManagerVO>();
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("frstRegistPnttm");
			siteManagerVO.setSearchSortOrd("desc");
		}
		
		infoProtect = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("infoProtect", infoProtect);
		
		if(infoProtect.size() > 0 ) {
			paginationInfo.setTotalRecordCount(  Integer.parseInt(  ((SiteManagerVO)infoProtect.get(0)).getsTotCnt() ) );  
		}else {
			paginationInfo.setTotalRecordCount(0) ;
		}
		
		model.addAttribute("paginationInfo", paginationInfo);
		return "/sym/site/infoProtect";
	}
	
	 /**
	 * 개인정보보호 조회시 패스워드 입력업데이트.
	 */
	@RequestMapping("/sym/site/infoProtectPassUpdateAjax.do")
	public ModelAndView updateInfoProtectPassAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateInfoProtectPassAjax(siteManagerVO);
		return modelAndView;
	}
	
	 /**
	 * 개인정보보호 조회시 패스워드 입력업데이트.
	 */
	@RequestMapping("/sym/site/infoProtectMarkUpdateAjax.do")
	public ModelAndView updateInfoProtectMarkAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateInfoProtectMark(siteManagerVO);
		return modelAndView;
	}
		
		
  	//IP 리스트 엑셀 다운로드
  	@RequestMapping(value="/sym/site/ipListExcelDownload.do")
  	public void ipListExcelDownload( SiteIpManagerVO siteIpManagerVO, 
  			HttpServletRequest request, 
  			HttpServletResponse response , 
  			ModelMap model) throws Exception {
  		
  		siteIpManagerVO.setRecordCountPerPage(100000);
  		siteIpManagerVO.setFirstIndex(0);
  		LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
		if(null != loginVO && !"super".equals(loginVO.getSiteId())){  //리스트, 수정, 입력
			siteIpManagerVO.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 ="IP 리스트";
  		String sheetTitle = ""; 
  		try{
  			{ //화면 리스트
  				sheetTitle = "IP 리스트(화면)" ; //제목
  				Sheet sheet = wb.createSheet(sheetTitle);
  				row = sheet.createRow(0);
  		        for(int i=0 ; i < ipExcelValue.length ; i++) {
  	 		       cell = row.createCell(i);
  	 		       cell.setCellStyle(style);
  		 	       cell.setCellValue(ipExcelValue[i][1]);
  	 		    }
  		        siteIpManagerVO.setChgFlag("N"); //히스토리 제외
  		        List<SiteIpManagerVO> siteIpList = egovSiteIpService.selectSiteIpList(siteIpManagerVO);
  		        for(int i=0; i <  siteIpList.size(); i++){
  			    	row = sheet.createRow(i+1);
  			    	for(int j=0 ; j < ipExcelValue.length ; j++) {
  			        	cell = row.createCell(j);
  			        	cell.setCellStyle(style);
  			        	if(j==0) cell.setCellValue(i+1); //번호
  			        	if(j==1) cell.setCellValue( siteIpList.get(i).getSiteNm()); //사이트
  			        	if(j==2) cell.setCellValue( siteIpList.get(i).getComIp()); //컴퓨터IP
  			        	if(j==3) cell.setCellValue( siteIpList.get(i).getTeamTxt()); //소속
  			        	if(j==4) cell.setCellValue( siteIpList.get(i).getDepartmentTxt()); //직위
  			        	if(j==5) cell.setCellValue( siteIpList.get(i).getComName()); //성명
  			        	if(j==6) cell.setCellValue( siteIpList.get(i).getNtceBgndeTxt()+"~"+siteIpList.get(i).getNtceEnddeTxt()); //기간
  			        	if(j==7) cell.setCellValue( siteIpList.get(i).getComDesc()); //위치
  			        	if(j==8) cell.setCellValue( siteIpList.get(i).getLanNum()); //랜선번호
  			        	if(j==9) cell.setCellValue( siteIpList.get(i).getFrstRegisterId()); //등록자
  			        	if(j==10) cell.setCellValue( siteIpList.get(i).getFrstRegistPnttm()); //등록일
  			        	if(j==11) cell.setCellValue( "Y".equals(siteIpList.get(i).getUseYn()) ? "사용" : "미사용" ); //사용여부
  				 	}
  		        }
  			}
  	    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("/sym/site/insertReadYn.do")
    public ModelAndView insertReadYn(@RequestParam("del") String[] del, @ModelAttribute("siteIpManagerVO") SiteIpManagerVO siteIpManagerVO,
    		RedirectAttributes redirectAttributes , ReadVO readVO, 
    		Model model) throws Exception {
		LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	for(String id:del) {
 		    try{
 		    	readVO.setMenuNo("4200000");
 		    	readVO.setReadId(id);
 		    	readVO.setLoginId(user.getId());
 		    	ReadVO readYn = readService.selectReadYn(readVO);
 		    	if(readYn == null) {
 		    		readService.insertReadYn(readVO);
 		    	}
 		    	modelAndView.addObject("result", "success");
 		    }catch(Exception e){
 		    	modelAndView.addObject("result", "fail");
 		    }
 	   }
    	return modelAndView;
    }
	
	/**
	 * 회원탈퇴설정관리
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/WithdrawConfig.do")
	public String selectWithdrawConfig( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
			
		List<SiteManagerVO> siteWithdrawList = new ArrayList<SiteManagerVO>();
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("frstRegistPnttm");
			siteManagerVO.setSearchSortOrd("desc");
		}
		
		siteWithdrawList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("siteWithdrawList", siteWithdrawList);
		if(siteWithdrawList.size() > 0 ) {
			paginationInfo.setTotalRecordCount(  Integer.parseInt(  ((SiteManagerVO)siteWithdrawList.get(0)).getsTotCnt() ) );  
		}else {
			paginationInfo.setTotalRecordCount(0) ;
		}
		model.addAttribute("paginationInfo", paginationInfo);
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  //탈퇴코드
		vo.setCodeId("ITN011");
		model.addAttribute("withdrawList", cmmUseService.selectCmmCodeDetail(vo));
		return "/sym/site/withdrawConfig";
	}
	
	/**
	 * 점검 중 페이지 업데이트.
	 * @param mberManageVO 일반회원가입신청정보
	 * @return forward:/uat/uia/egovLoginUsr.do
	 * @throws Exception
	 */
	@RequestMapping("/sym/site/withdrawUpdateAjax.do")
	public ModelAndView updateWithdrawAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateWithdrawCd(siteManagerVO);
    	modelAndView.addObject("siteManagerVO", siteManagerVO);
		return modelAndView;
	}
	
	
	/**
	 * 관리자 로그관리
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/AdminLogMng.do")
	public String selectAdminLogMng( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<SiteManagerVO> adminlogMngList = new ArrayList<SiteManagerVO>();
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("frstRegistPnttm");
			siteManagerVO.setSearchSortOrd("desc");
		}
		
		adminlogMngList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("adminlogMngList", adminlogMngList);
		if(adminlogMngList.size() > 0 ) {
			paginationInfo.setTotalRecordCount(  Integer.parseInt(  ((SiteManagerVO)adminlogMngList.get(0)).getsTotCnt() ) );  
		}else {
			paginationInfo.setTotalRecordCount(0) ;
		}
		model.addAttribute("paginationInfo", paginationInfo);
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  //관리자로그기간설정
		vo.setCodeId("ITN012");
		model.addAttribute("adminlogKpCdList", cmmUseService.selectCmmCodeDetail(vo));
		return "/sym/site/adminLogMng";
	}
	
	/**
	 * 관리자로그설정 업데이트.
	 * @param mberManageVO 일반회원가입신청정보
	 * @return forward:/uat/uia/egovLoginUsr.do
	 * @throws Exception
	 */
	@RequestMapping("/sym/site/adminLogKpCdUpdateAjax.do")
	public ModelAndView updateAdminLogKpCdAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateAdminLogKpCd(siteManagerVO);
    	modelAndView.addObject("siteManagerVO", siteManagerVO);
		return modelAndView;
	}
	
	/**
	 * 최근검색어 관리
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/RecentSearchMng.do")
	public String RecentSearchMng( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<SiteManagerVO> recentSearchList = new ArrayList<SiteManagerVO>();
		recentSearchList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("recentSearchList", recentSearchList);
		if(recentSearchList.size() > 0 ) {
			paginationInfo.setTotalRecordCount(  Integer.parseInt(  ((SiteManagerVO)recentSearchList.get(0)).getsTotCnt() ) );  
		}else {
			paginationInfo.setTotalRecordCount(0) ;
		}
		model.addAttribute("paginationInfo", paginationInfo);
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  //관리자로그기간설정
		vo.setCodeId("ITN013");
		model.addAttribute("recentSearchCdList", cmmUseService.selectCmmCodeDetail(vo));
		return "/sym/site/recentSearchMng";
	}
	
	/**
	 * 최근검색어 설정 업데이트.
	 * @param mberManageVO 일반회원가입신청정보
	 * @return forward:/uat/uia/egovLoginUsr.do
	 * @throws Exception
	 */
	@RequestMapping("/sym/site/recentSearchCdUpdateAjax.do")
	public ModelAndView recentSearchCdUpdateAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateRecentSearchCd(siteManagerVO);
    	modelAndView.addObject("siteManagerVO", siteManagerVO);
		return modelAndView;
	}
	
	
	 /**
	 * 약관관리 목록을 조회한다.
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/termsList.do")
	public String selectTermsList( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<SiteManagerVO> termsList = new ArrayList<SiteManagerVO>();
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("frstRegistPnttm");
			siteManagerVO.setSearchSortOrd("desc");
		}
		termsList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("termsList", termsList);
		
		int totCnt = egovSiteManagerService.selectSiteManagerListTotCnt(siteManagerVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
		return "/sym/site/termsList";
	}
	

	
	
	 /**
	 * 약관관리 사용여부 업데이트.
	 */
	@RequestMapping("/sym/site/termsYnUpdateAjax.do")
	public ModelAndView termsYnUpdateAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	//egovSiteManagerService.updateTabTitleYnAjax(siteManagerVO);
    	egovSiteManagerService.updateTermsYnAjax(siteManagerVO);
		return modelAndView;
	}
		
	/* 약관 등록/수정 view*/
    @RequestMapping(value="/sym/site/termsView.do")
    public String viewUpdateTerms(@RequestParam Map<?, ?> commandMap, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO,
            HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes  , Model model)
            throws Exception  {
    	SiteManagerVO termsVO = new SiteManagerVO();
    	if("U".equals((String)commandMap.get("pageType"))){  //수정
    		termsVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ;
    		if(termsVO ==null){
    			redirectAttributes.addFlashAttribute("message", "수정하려는 사이트 정보가 없습니다.");
    			RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsList.do");
    			return redirectUrlMaker.getRedirectUrl();
    		}
    	}else{//등록
    		termsVO.setSiteId(siteManagerVO.getSiteId());
    	}
	    model.addAttribute("termsVO", termsVO);	
	    return "sym/site/termsView";
    } 
    
    /* 약관관리 등록/수정 process */
    @RequestMapping(value="/sym/site/termsInsert.do")
    public String insertTerms(@RequestParam Map<?, ?> commandMap, 
    		@ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO, 
    		HttpServletRequest request,	HttpServletResponse response, 
    		RedirectAttributes redirectAttributes , Model model) throws Exception  {
		//egovSiteManagerService.updateTabTitle(siteManagerVO);
    	egovSiteManagerService.updateTerms(siteManagerVO);
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
    
    @RequestMapping(value = "/{siteId}/web/user/bidding.do")
	public String bidding(@PathVariable("siteId") String siteId, 
			HttpServletRequest request, 
			HttpServletResponse response,
			BiddingVO biddingVO, 
			ModelMap model) throws Exception {
		return "web/site/itn/login/bidding";
	}	
    
    
    @RequestMapping(value = "/{siteId}/web/user/biddSetButtonAjax.do")
	public ModelAndView biddSetButtonAjax(@PathVariable("siteId") String siteId, 
			HttpServletRequest request, 
			HttpServletResponse response,
			BiddingVO biddingVO, 
			ModelMap model) throws Exception {
		
    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	//int biddNum = 50000000 ; //5천만
    	int biddNum = Integer.parseInt(biddingVO.getBiddNum().replaceAll("," , "")) ; //5천만
    	
    	int biddNumPer = (int)(biddNum * 0.03) ;
    	int biddNumUp = biddNum + biddNumPer ;
    	int biddNumDown = biddNum - biddNumPer ;
    	Random random = new Random();
    	//biddNum = random.nextInt((max - min) + 1) + min ;
    	List<BiddingVO> biddList = new ArrayList<BiddingVO>();
    	for(int i=0 ; i < 15; i++ ) {
    		BiddingVO tempBidd = new BiddingVO();
    		biddNum = random.nextInt((biddNumUp - biddNumDown) + 1) + biddNumDown ;
    		tempBidd.setBiddNum(biddNum+"");
    		biddList.add(tempBidd);
    	}
    	modelAndView.addObject("biddList", biddList);
		return modelAndView;
	}
    
    
    @RequestMapping(value = "/{siteId}/web/user/biddSetResultAjax.do")
	public ModelAndView biddSetResultAjax(@PathVariable("siteId") String siteId, 
			HttpServletRequest request, 
			HttpServletResponse response,
			@ModelAttribute("biddingVO") BiddingVO biddingVO, 
			ModelMap model) throws Exception {
		
    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	
    	int biddNum = Integer.parseInt(biddingVO.getBiddNum().replaceAll("," , "")) ; //기초금액
    	List<BiddingVO> biddList = new ArrayList<BiddingVO>(); //예비가격전체
    	int biddListCnt = biddingVO.getBiddCheckList().split(",").length;
    	for(int i=0 ; i < biddListCnt; i++ ) {
    		BiddingVO tempBidd = new BiddingVO();
    		tempBidd.setBiddNum(biddingVO.getBiddCheckList().split(",")[i]);
    		biddList.add(tempBidd);
    	}
    	int comNum = Integer.parseInt(biddingVO.getComNum());  //경쟁업체수
    	//int biddPer = Integer.parseInt(biddingVO.getBiddPer()); //낙찰하한율
    	
    	double biddPer = Double.parseDouble(biddingVO.getBiddPer()); //낙찰하한율
    	
    	List<BiddingVO> comAllCompany = new ArrayList<BiddingVO>(); //모든 업체(경쟁업체 포함)
    	for(BiddingVO tempBiddingVO : biddList) { //내가 선택한것 추가하기
    		if(tempBiddingVO.getBiddNum().equals(biddingVO.getBiddCheckBox().split(",")[0])) {
    			tempBiddingVO.setBiddChoice(tempBiddingVO.getBiddChoice()+1) ;
    		}
    		if(tempBiddingVO.getBiddNum().equals(biddingVO.getBiddCheckBox().split(",")[1])) {
    			tempBiddingVO.setBiddChoice(tempBiddingVO.getBiddChoice()+1) ;
    		}
    	}
    	biddingVO.setComName("업체:ITN");
    	comAllCompany.add(biddingVO) ; //내것 추가
    	for(int i=0; i < comNum; i++ ) { //경쟁업체수가 예비가격 두개 선택함.
    		Collections.shuffle(biddList); //랜덤셔플 첫번째 두번째 가져옴.
    		BiddingVO tempComNumCompany = new BiddingVO();
    		tempComNumCompany.setComName("업체:경쟁업체_"+(i+1));
    		((BiddingVO)biddList.get(0)).setBiddChoice(((BiddingVO)biddList.get(0)).getBiddChoice()+1); //선택 +1
    		((BiddingVO)biddList.get(1)).setBiddChoice(((BiddingVO)biddList.get(1)).getBiddChoice()+1); //선택 +2
    		tempComNumCompany.setBiddCheckBox(((BiddingVO)biddList.get(0)).getBiddNum()+","+((BiddingVO)biddList.get(1)).getBiddNum());
    		comAllCompany.add(tempComNumCompany);
    	}
    	
    	Collections.sort(biddList, new ListComparator()); //많이 선택한 순서대로 정렬
    	int sum = 0;
    	int divideNum = 4 ;
    	//4번째와 5이후 건수가 같으면 이후것도 가져옴.
    	String fourChoiceNum = ((BiddingVO)biddList.get(3)).getBiddChoice()+"";
    	for(int i=0 ; i < biddList.size() ;i++) { //5번째 부터 15개까지
    		if(i < 4) { //선택되었다는 flag 넣어줌.
    			((BiddingVO)biddList.get(i)).setChoiced("Y");
    		}else {
    			if(fourChoiceNum.equals(((BiddingVO)biddList.get(i)).getBiddChoice()+"")) {
    				((BiddingVO)biddList.get(i)).setChoiced("Y");
    				divideNum++;
        		}
    		}
    	}

    	
    	
    	for(int i=0 ; i < divideNum ;i++ ) {
    		sum+= Integer.parseInt(biddList.get(i).getBiddNum());
    	}
    	int avg = sum/divideNum;
    	
    	long lgAvg= avg ;
    	modelAndView.addObject("avg", avg); //4개 평균가
    	modelAndView.addObject("divideNum", divideNum); //선택된 결과 갯수
    	//modelAndView.addObject("lgAvg", (lgAvg * Integer.parseInt(biddingVO.getBiddPer())) /100); //4개 평균 하한가
    	//modelAndView.addObject("lgAvg", (lgAvg * Double.parseDouble(biddingVO.getBiddPer())) /100 ); //4개 평균 하한가
    	modelAndView.addObject("lgAvg",     Math.round(  (lgAvg * Double.parseDouble(biddingVO.getBiddPer())) /100 )); //4개 평균 하한가
    	modelAndView.addObject("biddList", biddList);
    	modelAndView.addObject("comAllCompany", comAllCompany);
    	
		return modelAndView;
	}
    
    //로그인 세션 연장
    @RequestMapping("/sym/site/sessionExpendAjax.do")
	public ModelAndView sessionExpendAjax(SiteManagerVO siteManagerVO, HttpSession session
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");

		return modelAndView;
	}
    
    
    
    /**
	 * 세션타임관리
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/SessionTimeMng.do")
	public String selectSessionTimeMng( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("siteManagerVO") SiteManagerVO siteManagerVO
			, ModelMap model) throws Exception {

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

		siteManagerVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		siteManagerVO.setLastIndex(paginationInfo.getLastRecordIndex());
		siteManagerVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<SiteManagerVO> sessionTimeList = new ArrayList<SiteManagerVO>();
		if("".equals(siteManagerVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			siteManagerVO.setSearchSortCnd("frstRegistPnttm");
			siteManagerVO.setSearchSortOrd("desc");
		}
		sessionTimeList = egovSiteManagerService.selectSiteManagerList(siteManagerVO);
		model.addAttribute("sessionTimeList", sessionTimeList);
		if(sessionTimeList.size() > 0 ) {
			paginationInfo.setTotalRecordCount(  Integer.parseInt(  ((SiteManagerVO)sessionTimeList.get(0)).getsTotCnt() ) );  
		}else {
			paginationInfo.setTotalRecordCount(0) ;
		}
		model.addAttribute("paginationInfo", paginationInfo);
		
		ComDefaultCodeVO vo = new ComDefaultCodeVO();  //관리자로그기간설정
		vo.setCodeId("ITN014");
		model.addAttribute("sessionTimeCdList", cmmUseService.selectCmmCodeDetail(vo));
		return "/sym/site/sessionTimeMng";
	}
	
	/**
	 * 세션타임 설정 업데이트.
	 * @param mberManageVO 일반회원가입신청정보
	 * @return forward:/uat/uia/egovLoginUsr.do
	 * @throws Exception
	 */
	@RequestMapping("/sym/site/sessionTimeUpdateAjax.do")
	public ModelAndView updateSessionTimeUpdateAjax(SiteManagerVO siteManagerVO
			) throws Exception {
		
		ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("jsonView");
    	egovSiteManagerService.updateSessionTimeCd(siteManagerVO);
    	modelAndView.addObject("siteManagerVO", siteManagerVO);
		return modelAndView;
	}
	
	
	/**
	 * 문자온 약관관리 목록을 조회한다.
	 * @param loginPolicyVO - 로그인정책 VO
	 * @return String - 리턴 Url
	 */
	//이용약관 메뉴 시작 - 기본 terms뒤 mng추가
	@RequestMapping("/sym/site/termsMngList.do")
	public String selectTermsMngList( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("searchVO") TermsVO termsVO
			, ModelMap model
			, HttpServletRequest request) throws Exception {
		
		Map<String, ?> flashMap =RequestContextUtils.getInputFlashMap(request);
		
		if(flashMap!=null && flashMap.get("searchVO") != null) {
			termsVO = (TermsVO)flashMap.get("searchVO");
			model.addAttribute("searchVO", termsVO);
		}

		if(termsVO.getPageUnit() != 10) {
			termsVO.setPageUnit(termsVO.getPageUnit());
		}
		
    	//사용메뉴 조회 코드 조회
    	ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
		
		comDefaultCodeVO.setCodeId("ITN039");
		List<?> codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
		model.addAttribute("codeResult", codeResult);
		
		/** paging */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(termsVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(termsVO.getPageUnit());
		paginationInfo.setPageSize(termsVO.getPageSize());

		termsVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		termsVO.setLastIndex(paginationInfo.getLastRecordIndex());
		termsVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<TermsVO> termsList = new ArrayList<TermsVO>();
		if("".equals(termsVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			termsVO.setSearchSortCnd("termsId");
			termsVO.setSearchSortOrd("desc");
		}
		termsList = egovSiteManagerService.selectTermsMngList(termsVO);
		model.addAttribute("termsList", termsList);
		
		int totCnt = egovSiteManagerService.selectTermsMngListTotCnt(termsVO);
		paginationInfo.setTotalRecordCount(totCnt);
		model.addAttribute("paginationInfo", paginationInfo);
		return "/sym/site/termsMngList";
	}
	
	 /**
	 * 문자온 약관관리 필수여부 업데이트.
	 */
	@RequestMapping("/sym/site/termsNecYnUpdateAjax.do")
	public ModelAndView termsNecYnUpdateAjax(TermsVO termsVO
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
   	modelAndView.setViewName("jsonView");
   	//egovSiteManagerService.updateTabTitleYnAjax(siteManagerVO);
   	egovSiteManagerService.updateTermsNecYnAjax(termsVO);
		return modelAndView;
	}
	
	 /**
	 * 문자온 약관관리 사용여부 업데이트.
	 */
	@RequestMapping("/sym/site/termsUseYnUpdateAjax.do")
	public ModelAndView termsUseYnUpdateAjax(TermsVO termsVO
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
  	modelAndView.setViewName("jsonView");
  	//egovSiteManagerService.updateTabTitleYnAjax(siteManagerVO);
  	egovSiteManagerService.updateTermsUseYnAjax(termsVO);
		return modelAndView;
	}
	
	/**
	 * 문자온 약관관리 순서업데이트.
	 */
	@RequestMapping("/sym/site/termsMenuOrderUpdateAjax.do")
	public ModelAndView termsMenuOrderUpdateAjax(TermsVO termsVO
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
  	modelAndView.setViewName("jsonView");
  	egovSiteManagerService.updateTermsMenuOrderAjax(termsVO);
		return modelAndView;
	}
		
	/* 문자온 약관 등록/수정 view*/
    @RequestMapping(value="/sym/site/termsMngView.do")
    public String viewUpdateTermsMng(@RequestParam Map<?, ?> commandMap, @ModelAttribute("termsVO") TermsVO termsVO,
            HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes  , Model model)
            throws Exception  {
    	TermsVO termsDetail= new TermsVO();
    	if("U".equals((String)commandMap.get("pageType"))){  //수정
    		termsDetail = egovSiteManagerService.selectTermsVO(termsVO) ;
    		model.addAttribute("termsVO", termsDetail);	
    	}
    	model.addAttribute("searchVO", termsVO);
    	
    	//사용메뉴 조회 코드 조회
    	ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
		
		comDefaultCodeVO.setCodeId("ITN039");
		List<?> codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
		model.addAttribute("codeResult", codeResult);
		
	    return "sym/site/termsView";
    } 
    /* 문자온 약관관리 등록 */
    @RequestMapping(value="/sym/site/termsMngInsert.do")
    public String insertTermsMng(@RequestParam Map<?, ?> commandMap, 
    		@ModelAttribute("termsVO") TermsVO termsVO, 
    		RedirectAttributes redirectAttributes , Model model) throws Exception  {
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	termsVO.setFrstRegisterId(loginVO.getId());
    	termsVO.setTermsId(idgenTermsService.getNextStringId());
    	
    	egovSiteManagerService.insertTermsMng(termsVO);
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsMngList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
    /* 문자온 약관관리 수정 */
    @RequestMapping(value="/sym/site/termsMngUpdate.do")
    public String updateTermsMng(@RequestParam Map<?, ?> commandMap, 
    		@ModelAttribute("termsVO") TermsVO termsVO, 
    		RedirectAttributes redirectAttributes , Model model) throws Exception  {
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	termsVO.setLasUpdusrId(loginVO.getId());
    	
    	egovSiteManagerService.updateTermsMng(termsVO);
    	
    	redirectAttributes.addFlashAttribute("searchVO", termsVO);
    	
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsMngList.do");
		return redirectUrlMaker.getRedirectUrl();
    }    
		
    /* 문자온 약관관리 삭제 */
    @RequestMapping(value="/sym/site/termsMngDelete.do")
   	public String deleteTermsMng(TermsVO termsVO, 
   			 String[] checkDel, 
   			 ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
       	LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
       	
//       	ProhibitVO tempProhibitVO = new ProhibitVO();
       	
       	try{
    			for(String id: checkDel) {
    				termsVO.setTermsId(id);
    				egovSiteManagerService.deleteTermsMng(termsVO);
    	       	}	
       		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
       	}catch(Exception e){
       		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
       	}
       	
    	RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsMngList.do");
       	return redirectUrlMaker.getRedirectUrl();
   	}    
    
    /**
     * 사용자 공통 문자 단가 화면
     * 
     * @param joinSettingVO
     * @param model
     * @return
     * @throws Exception
     */
    
    @RequestMapping("/sym/site/selectBaseUnitPrice.do")
    public String selectJoinSetting(JoinSettingVO joinSettingVO, ModelMap model) throws Exception {
    	
    	joinSettingVO = egovSiteManagerService.selectJoinSetting();
    	
    	model.addAttribute("joinSettingVO", joinSettingVO);
    	return "/sym/site/baseUnitPrice";
    }
    
    
    /**
     * 사용자 공통 문자 단가 수정
     * 
     * @param joinSettingVO
     * @param redirectAttributes
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/updateBaseUnitPrice.do")
    public String updateBaseUnitPrice(@ModelAttribute("joinSettingVO") JoinSettingVO joinSettingVO
    		,RedirectAttributes redirectAttributes , Model model) throws Exception  {
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	joinSettingVO.setLasUpdusrId(loginVO.getId());
    	
    	egovSiteManagerService.updateJoinSetting(joinSettingVO);
    	
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectBaseUnitPrice.do");
		return redirectUrlMaker.getRedirectUrl();
    } 
    
    /**
     * 회원가입 본인인증 관리 화면
     * 
     * @param joinSettingVO
     * @param model
     * @return
     * @throws Exception
     */
    
    @RequestMapping("/sym/site/selectJoinCertTypeDetail.do")
    public String selectJoinCertTypeDetail(JoinSettingVO joinSettingVO, ModelMap model) throws Exception {
    	
    	joinSettingVO = egovSiteManagerService.selectJoinCertTypeDetail();
    	
    	model.addAttribute("joinSettingVO", joinSettingVO);
    	return "/sym/site/joinCertDetail";
    }
    
    /**
     * 회원가입 본인인증 관리 수정
     * 
     * @param joinSettingVO
     * @param redirectAttributes
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/updateJoinCertType.do")
    public String updateJoinCertType(@ModelAttribute("joinSettingVO") JoinSettingVO joinSettingVO
    		,RedirectAttributes redirectAttributes , Model model) throws Exception  {
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	joinSettingVO.setLasUpdusrId(loginVO.getId());
    	
    	egovSiteManagerService.updateJoinCertType(joinSettingVO);
    	
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectJoinCertTypeDetail.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
    /**
     * 메타태그 등록 화면
     * 
     * @param metaTagVO
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/metaTagInsertView.do")
    public String insertMetaTagView(@ModelAttribute("metaTagVO") MetaTagVO metaTagVO,ModelMap model) throws Exception{
    	
    	return "/sym/site/metaTagInsertView";
    }
    /**
     * 메타태그 수정 화면
     * 
     * @param metaTagVO
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/metaTagModifyView.do")
    public String metaTagModifyView(@ModelAttribute("metaTagVO") MetaTagVO metaTagVO,ModelMap model) throws Exception{
    	
    		metaTagVO = egovSiteManagerService.selectMetaTagDetail(metaTagVO);
    		model.addAttribute("metaTagVO", metaTagVO);
    	
    	return "/sym/site/metaTagModifyView";
    }
    /**
     * 메타태그 등록
     * 
     * @param metaTagVO
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/insertMetaTag.do")
    public String insertMetaTag(@ModelAttribute("metaTagVO") MetaTagVO metaTagVO) throws Exception{
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	metaTagVO.setFrstRegisterId(loginVO.getId());
    	
    	egovSiteManagerService.insertMetaTag(metaTagVO);
    	return "redirect:/sym/site/selectMetaTagList.do";
    }
    /**
     * 메타태그 목록
     * 
     * @param metaTagVO
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/selectMetaTagList.do")
    public String selectMetaTagList(@ModelAttribute("searchVO") MetaTagVO metaTagVO, ModelMap model) throws Exception{
    	
		/** paging */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(metaTagVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(metaTagVO.getPageUnit());
		paginationInfo.setPageSize(metaTagVO.getPageSize());

		metaTagVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		metaTagVO.setLastIndex(paginationInfo.getLastRecordIndex());
		metaTagVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
    	
		if("".equals(metaTagVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			metaTagVO.setSearchSortCnd("frstRegistPnttm");
			metaTagVO.setSearchSortOrd("desc");
		}

		
		List<MetaTagVO> metaTagList = egovSiteManagerService.selectMetaTagList(metaTagVO);
		model.addAttribute("metaTagList", metaTagList);
		paginationInfo.setTotalRecordCount( metaTagList.size()> 0 ? metaTagList.get(0).getTotCnt() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
    	return "/sym/site/metaTagList";
    }
    
    /**
     * 메타태그 일괄삭제
     * 
     * @param metaTagVO
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/sym/site/deleteMetaTags.do")
   	public String deleteMetaTags(MetaTagVO metaTagVO, 
   			 String[] checkDel, 
   			 ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
       	LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
       	try{
    			for(String id: checkDel) {
    				metaTagVO.setMetaTagNo(id);
    				egovSiteManagerService.deleteMetaTag(metaTagVO);
    	       	}	
       		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
       	}catch(Exception e){
       		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
       	}
       	
    	RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectMetaTagList.do");
       	return redirectUrlMaker.getRedirectUrl();
   	} 
    
    /**
     * 메타태그 삭제
     * 
     * @param metaTagVO
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/sym/site/deleteMetaTag.do")
    public String deleteMetaTag(MetaTagVO metaTagVO, 
    		ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
    	LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
    	
    	egovSiteManagerService.deleteMetaTag(metaTagVO);
    	
    	return "redirect:/sym/site/selectMetaTagList.do";
    } 
   
    /**
     * 메타태그 수정
     * 
     * @param metaTagVO
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/updateMetaTag.do")
    public String updateMetaTag(@ModelAttribute("metaTagVO") MetaTagVO metaTagVO) throws Exception{
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	metaTagVO.setLastUpdusrId(loginVO.getId());
    	
    	egovSiteManagerService.updateMetaTag(metaTagVO);
    	return "redirect:/sym/site/selectMetaTagList.do";
    }
    
    /**
     * 메타태그 인택스
     * 
     * @param metaTagVO
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/selectMetaTagIndex.do")
    public String selectMetaTagIndex(@ModelAttribute("searchVO") MetaTagVO metaTagVO, ModelMap model) throws Exception{
    	
		/** paging */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(1);
		paginationInfo.setRecordCountPerPage(100000);
		paginationInfo.setPageSize(1);

		metaTagVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		metaTagVO.setLastIndex(paginationInfo.getLastRecordIndex());
		metaTagVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
    	
		if("".equals(metaTagVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			metaTagVO.setSearchSortCnd("frstRegistPnttm");
			metaTagVO.setSearchSortOrd("desc");
		}		
		
		metaTagVO.setSearchKeyword("10");	
		metaTagVO.setSearchCondition("10");
		
		List<MetaTagVO> metaTagList = egovSiteManagerService.selectMetaTagList(metaTagVO);
		/*
		model.addAttribute("metaTagList", metaTagList);
		paginationInfo.setTotalRecordCount( metaTagList.size()> 0 ? metaTagList.get(0).getTotCnt() : 0);
		model.addAttribute("paginationInfo", paginationInfo);
		*/
		
		for (int i=0;i<metaTagList.size();i++) {
			indexNowUtil.submitUrl("https://www.munjaon.co.kr" + metaTagList.get(i).getUrl());			
			//if (i>2) break;
			
		}
		
		
		//submitUrl("https://yourdomain.com/new-post.html"); // 🔁 여기에 전송할 실제 URL 입력
		
    	//return "/sym/site/metaTagList";
    	return "redirect:/sym/site/selectMetaTagList.do";
    }    
    
    /**
     * 관리자 알림 여부
     * 
     * @param joinSettingVO
     * @param model
     * @return
     * @throws Exception
     */
    
    @RequestMapping("/sym/site/selectAdminNotiDetail.do")
    public String selectAdminNotiDetail(JoinSettingVO joinSettingVO, ModelMap model) throws Exception {
    	
    	joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
    	
    	model.addAttribute("joinSettingVO", joinSettingVO);
    	return "/sym/site/adminNotiDetail";
    }
    
    /**
     * 관리자 알림 여부 수정
     * 
     * @param joinSettingVO
     * @param redirectAttributes
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/sym/site/updateAdminNoti.do")
    public String updateAdminNoti(@ModelAttribute("joinSettingVO") JoinSettingVO joinSettingVO
    		,RedirectAttributes redirectAttributes , Model model) throws Exception  {
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	joinSettingVO.setLasUpdusrId(loginVO.getId());
    	
    	egovSiteManagerService.updateAdminNoti(joinSettingVO);
    	
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/selectAdminNotiDetail.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
	/**
	 * 문자온 약관관리 목록을 조회한다. 히스토리 기능 추가(마스터)
	 * @param termsVO - 약관VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/termsMastMngList.do")
	public String selectTermsMastMngList( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("searchVO") TermsVO termsVO
			, ModelMap model
			, HttpServletRequest request) throws Exception {
		
		Map<String, ?> flashMap =RequestContextUtils.getInputFlashMap(request);
		
		if(flashMap!=null && flashMap.get("searchVO") != null) {
			termsVO = (TermsVO)flashMap.get("searchVO");
			model.addAttribute("searchVO", termsVO);
		}

		if(termsVO.getPageUnit() != 10) {
			termsVO.setPageUnit(termsVO.getPageUnit());
		}
		
    	//사용메뉴 조회 코드 조회
    	ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
		
		comDefaultCodeVO.setCodeId("ITN039");
		List<?> codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
		model.addAttribute("codeResult", codeResult);
		
		/** paging */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(termsVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(termsVO.getPageUnit());
		paginationInfo.setPageSize(termsVO.getPageSize());

		termsVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		termsVO.setLastIndex(paginationInfo.getLastRecordIndex());
		termsVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		if("".equals(termsVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			termsVO.setSearchSortCnd("frstRegistPnttm");
			termsVO.setSearchSortOrd("desc");
		}
		List<TermsVO> termsMastList = egovSiteManagerService.selectTermsMastMngList(termsVO);
		model.addAttribute("termsMastList", termsMastList);
		paginationInfo.setTotalRecordCount( termsMastList.size() > 0 ? termsMastList.get(0).getTotCnt() : 0 );
		model.addAttribute("paginationInfo", paginationInfo);
		return "/sym/site/termsMastMngList";
	}
	
	/**
	 * 문자온 약관관리 목록을 조회한다. 히스토리 기능 추가(서브)
	 * @param termsVO - 약관VO
	 * @return String - 리턴 Url
	 */
	@RequestMapping("/sym/site/termsSubMngList.do")
	public String selectTermsSubMngList( @RequestParam Map<?, ?> commandMap 
			, @ModelAttribute("searchVO") TermsVO termsVO
			, ModelMap model
			, HttpServletRequest request) throws Exception {
		
		Map<String, ?> flashMap =RequestContextUtils.getInputFlashMap(request);
		
    	//사용메뉴 조회 코드 조회
    	ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
		
		comDefaultCodeVO.setCodeId("ITN039");
		List<?> codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
		model.addAttribute("codeResult", codeResult);
		
		if(flashMap!=null && flashMap.get("searchVO") != null) {
			termsVO = (TermsVO)flashMap.get("searchVO");
			model.addAttribute("searchVO", termsVO);
		}
		
		if(termsVO.getPageUnit() != 10) {
			termsVO.setPageUnit(termsVO.getPageUnit());
		}
		
		/** paging */
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(termsVO.getPageIndex());
		paginationInfo.setRecordCountPerPage(termsVO.getPageUnit());
		paginationInfo.setPageSize(termsVO.getPageSize());
		
		termsVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
		termsVO.setLastIndex(paginationInfo.getLastRecordIndex());
		termsVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		if("".equals(termsVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
			termsVO.setSearchSortCnd("sort");
			termsVO.setSearchSortOrd("asc");
		}
		List<TermsVO> termsSubList = egovSiteManagerService.selectTermsSubMngList(termsVO);
		model.addAttribute("termsSubList", termsSubList);
		paginationInfo.setTotalRecordCount( termsSubList.size() > 0 ? termsSubList.get(0).getTotCnt() : 0 );
		model.addAttribute("paginationInfo", paginationInfo);
		
		model.addAttribute("termsMastVO", egovSiteManagerService.selectTermsMastVO(termsVO));
		
		return "/sym/site/termsSubMngList";
	}
	
    /* 약관관리master 등록/ 기존 sub도 등록 */
    @RequestMapping(value="/sym/site/insertTermsMastMng.do")
    public String insertTermsMast(TermsVO termsVO, RedirectAttributes redirectAttributes) throws Exception  {
    	
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		termsVO.setFrstRegisterId(loginVO.getId());
		
		//가장 최근 약관 조회
		termsVO.setTermsMastLastNo(egovSiteManagerService.selectTermsLastMastNo(termsVO.getTermsDivCode()));
		//마스터, 서브 약관 등록
		termsVO.setUseYn("N");
		termsVO.setEmailInfoYn("N");
		egovSiteManagerService.insertTermsMastMng(termsVO);
		
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
		redirectAttributes.addAttribute("termsMastNo", termsVO.getTermsMastNo());
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsSubMngList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
	/* 문자온 약관 sub 등록/수정 view*/
    @RequestMapping(value="/sym/site/termsSubMngView.do")
    public String viewUpdateTermsSubMng(@RequestParam Map<?, ?> commandMap, @ModelAttribute("termsVO") TermsVO termsVO,
            HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes  , Model model)
            throws Exception  {
    	if("U".equals((String)commandMap.get("pageType"))){  //수정
    		TermsVO	termsSubDetail = egovSiteManagerService.selectTermsSubVO(termsVO) ;
    		model.addAttribute("termsSubVO", termsSubDetail);	
    	}
    	model.addAttribute("searchVO", termsVO);
    	
		
	    return "sym/site/termsSubView";
    }
    
    /* 문자온 약관관리 sub 등록 */
    @RequestMapping(value="/sym/site/termsSubMngInsert.do")
    public String insertTermsSubMng(@RequestParam Map<?, ?> commandMap, 
    		@ModelAttribute("termsVO") TermsVO termsVO, 
    		RedirectAttributes redirectAttributes , Model model) throws Exception  {
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	termsVO.setFrstRegisterId(loginVO.getId());
    	termsVO.setLastUpdusrId(loginVO.getId());
    	
    	egovSiteManagerService.insertTermsSubMng(termsVO);
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert"));
		redirectAttributes.addAttribute("termsMastNo", termsVO.getTermsMastNo());
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsSubMngList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
    /* 문자온 약관 마스터 삭제, 서브도 삭제 */
    @RequestMapping(value="/sym/site/termsMastMngDelete.do")
   	public String deleteTermsMastMng(TermsVO termsVO, 
   			 String[] checkDel, 
   			 ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
       	LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
       	
       	
       	try{
    			for(String id: checkDel) {
    				termsVO.setTermsMastNo(id);
    				egovSiteManagerService.deleteTermsMastMng(termsVO);
    	       	}	
       		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
       	}catch(Exception e){
       		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
       	}
       	
    	RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsMastMngList.do");
       	return redirectUrlMaker.getRedirectUrl();
   	}
    
    /* 문자온 약관 서브 삭제*/
    @RequestMapping(value="/sym/site/termsSubMngDelete.do")
   	public String deleteTermsSubMng(TermsVO termsVO, 
   			 String[] checkDel, 
   			 ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
       	LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
       	
       	
       	try{
    			for(String id: checkDel) {
    				termsVO.setTermsSubNo(id);
    				egovSiteManagerService.deleteTermsSubMng(termsVO);
    	       	}	
       		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete"));
       	}catch(Exception e){
       		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
       	}
       	
       	redirectAttributes.addAttribute("termsMastNo", termsVO.getTermsMastNo());
    	RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsSubMngList.do");
       	return redirectUrlMaker.getRedirectUrl();
   	}
    
	 /**
	 * 문자온 약관관리 서브 사용여부 업데이트.
	 */
	@RequestMapping("/sym/site/termsSubUseYnUpdateAjax.do")
	public ModelAndView termsSubUseYnUpdateAjax(TermsVO termsVO
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
  	modelAndView.setViewName("jsonView");
  	egovSiteManagerService.updateTermsSubUseYnAjax(termsVO);
		return modelAndView;
	}
	
    /* 문자온 약관관리 서브 수정 */
    @RequestMapping(value="/sym/site/termsSubMngUpdate.do")
    public String updateTermsSubMng(@RequestParam Map<?, ?> commandMap, 
    		@ModelAttribute("termsVO") TermsVO termsVO, 
    		RedirectAttributes redirectAttributes , Model model) throws Exception  {
    	
    	LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	termsVO.setLasUpdusrId(loginVO.getId());
    	
    	egovSiteManagerService.updateTermsSubMng(termsVO);
    	
    	redirectAttributes.addFlashAttribute("searchVO", termsVO);
    	
		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/sym/site/termsSubMngList.do");
		return redirectUrlMaker.getRedirectUrl();
    }
    
    /*문자온 약관 시행 팝업*/
	@RequestMapping("/sym/site/termsMastEffectPopup.do")
	public String termsMastEffectPopup(TermsVO termsVO,
			Model model) throws Exception {
		
//		mberCmpHstVO = egovMberCmpHstService.selectMberCmpHstDetail(mberCmpHstVO);
//		model.addAttribute("mberCmpHstVO", mberCmpHstVO);

		model.addAttribute("termsMastVO", egovSiteManagerService.selectTermsMastVO(termsVO));	
		
		return "sym/site/termsEffectPopup";
	}
	
	@RequestMapping("/sym/site/termsMastEffectUpdateAjax.do")
	public ModelAndView termsMastEffectUpdateAjax(TermsVO termsVO, 
			ModelMap model) throws Exception{
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		boolean isSuccess = true;
		String sttusMsg = "";
		String msg = "저장되었습니다.";
		
		try {
			
			LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
			String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
			
			if(userId.equals("")) {
				isSuccess = false;
				modelAndView.addObject("isSuccess", isSuccess);        		
				modelAndView.addObject("msg", "로그인 후 이용이 가능합니다.");
				return modelAndView;
			}
			termsVO.setLasUpdusrId(userId);
			// 나머지 약관 미시행 처리
			egovSiteManagerService.updateTermsMastUseYnAjax(termsVO);
		}
		catch(Exception e) {
			isSuccess = false;
			msg = "오류 : " + e.getMessage();
		}
		modelAndView.addObject("isSuccess", isSuccess);        		
		modelAndView.addObject("msg", msg);
		return modelAndView;
	}
	
    /*문자온 약관 이메일 안내 팝업*/
	@RequestMapping("/sym/site/termsMastEmailPopup.do")
	public String termsMastEmailPopup(TermsVO termsVO,
			Model model) throws Exception {
		
//		mberCmpHstVO = egovMberCmpHstService.selectMberCmpHstDetail(mberCmpHstVO);
//		model.addAttribute("mberCmpHstVO", mberCmpHstVO);

		model.addAttribute("termsMastVO", egovSiteManagerService.selectTermsMastVO(termsVO));	
		
		return "sym/site/termsEmailPopup";
	}
	
	/*문자온 약관 이메일 안내 발송하기*/
	@RequestMapping("/sym/site/termsMastEmainInfoYUpdateAjax.do")
	public ModelAndView termsMastEmainInfoYUpdateAjax(TermsVO termsVO, 
			ModelMap model) throws Exception{
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		boolean isSuccess = true;
		String sttusMsg = "";
		String msg = "발송되었습니다.";
		
		try {
			
			LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
			String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
			
			if(userId.equals("")) {
				isSuccess = false;
				modelAndView.addObject("isSuccess", isSuccess);        		
				modelAndView.addObject("msg", "로그인 후 이용이 가능합니다.");
				return modelAndView;
			}
			termsVO.setLasUpdusrId(userId);
			
			egovSiteManagerService.updateTermsMastEmainInfoYUpdateAjax(termsVO);
			
		}
		catch(Exception e) {
			isSuccess = false;
			msg = "오류 : " + e.getMessage();
		}
		modelAndView.addObject("isSuccess", isSuccess);        		
		modelAndView.addObject("msg", msg);
		return modelAndView;
	}
	
	/*문자온 약관 이메일 안내 테스트 발송하기*/
	@RequestMapping("/sym/site/termsMastEmainInfoTestSendAjax.do")
	public ModelAndView termsMastEmainInfoTestSendAjax(TermsVO termsVO, 
			ModelMap model) throws Exception{
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
		
		boolean isSuccess = true;
		String sttusMsg = "";
		String msg = "발송되었습니다.";
		
		try {

			LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
			String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
			//로그인한 관리자 계정 이메일 조회
			UserManageVO userManageVO = userManageService.selectUser(loginVO.getUniqId());
			String email = userManageVO == null ? "" : EgovStringUtil.isNullToString(userManageVO.getEmailAdres());
			
			if(userId.equals("")) {
				isSuccess = false;
				modelAndView.addObject("isSuccess", isSuccess);        		
				modelAndView.addObject("msg", "로그인 후 이용이 가능합니다.");
				return modelAndView;
			}
			
			if(email.equals("")) {
				isSuccess = false;
				modelAndView.addObject("isSuccess", isSuccess);        		
				modelAndView.addObject("msg", "관리자 계정의 이메일을 등록해주세요.");
				return modelAndView;
			}
			
			String terms = "개인정보처리방침";
			if("02".equals(termsVO.getTermsDivCode())) {
				terms = "이용약관";
			}
			
			mjonNoticeSendUtil.userTermsTestEmailSend("[문자온] " + terms + " 개정안내", termsVO.getEmailInfoCn(), email);
		}
		catch(Exception e) {
			isSuccess = false;
			msg = "오류 : " + e.getMessage();
		}
		modelAndView.addObject("isSuccess", isSuccess);        		
		modelAndView.addObject("msg", msg);
		return modelAndView;
	}
	
	/**
     * 관리자 알림 여부
     * 
     * @param joinSettingVO
     * @param model
     * @return
     * @throws Exception
     */
    
    @RequestMapping("/sym/site/selectInspManage.do")
    public String selectInspManage(ModelMap model) throws Exception {
    	model.addAttribute("model", egovSiteManagerService.selectSiteManagerVO(new SiteManagerVO()));
    	return "/sym/site/inspManage";
    }
    
    @RequestMapping("/sym/site/updateInspManageAjax.do")
    public ModelAndView updateInspManage(SiteManagerVO siteManagerVO, ModelMap model) throws Exception {
    	
    	ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("jsonView");
    	
    	LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
    	
		siteManagerVO.setLastUpdusrId(userId);
		String msg = "저장되었습니다.";
		String result = "SUCCESS";
		
		try {
			egovSiteManagerService.updateInspManage(siteManagerVO);
		} catch (Exception e) {
			System.out.println(e.getMessage());
			msg = "저장에 실패했습니다.";
			result = "fail";
		}
		
		model.addAttribute("msg", msg);
		model.addAttribute("result", result);
		
    	return modelAndView;
    }
}
