package itn.let.mjo.pay.web;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.EgovMessageSource;
import itn.com.cmm.LoginVO;
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.util.RedirectUrlMaker;
import itn.let.cop.bbs.service.Board;
import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.pay.service.RefundService;
import itn.let.mjo.payva.service.VacsVactService;
import itn.let.mjo.payva.service.VacsVactVO;
import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.utl.fcc.service.EgovCryptoUtil;
import itn.let.utl.user.service.CheckFileUtil;
import itn.let.utl.user.service.CheckLoginUtil;

/*
 * 
 * settle bank Virtual Account
 * 
 * */
@Controller
public class MjonSBVAPayController {
	
	@Resource(name = "mjonPayService")
    private MjonPayService mjonPayService;
	
	/** EgovMessageSource */
    @Resource(name="egovMessageSource")
    EgovMessageSource egovMessageSource;
    
    /** userManageService */
	@Resource(name = "userManageService")
	private EgovUserManageService userManageService;
	
	/** refundService */
	@Resource(name = "refundService")
    private RefundService refundService;
	
	@Resource(name = "mjonMsgService")
    private MjonMsgService mjonMsgService;
	
	@Resource(name = "MjonMsgDataService")
    private MjonMsgDataService mjonMsgDataService;
	
	@Resource(name = "mberManageService")
	private EgovMberManageService mberManageService;
	
	@Resource(name = "EgovCmmUseService")
	private EgovCmmUseService cmmUseService;	
	

	//암호화
	@Resource(name = "egovCryptoUtil")
	EgovCryptoUtil egovCryptoUtil;

	//로그인 처리
	@Resource(name = "checkLoginUtil")
	private CheckLoginUtil checkLoginUtil;
	
	//무료 대행 관련 쿼리
    //@Resource(name="addrAgencyService")
    //private AddrAgencyService addrAgencyService;
    
	//가상계좌원장
    @Resource(name="vacsVactService")
    private VacsVactService vacsVactService;
    	
    //첨부파일 체크
	@Resource(name = "checkFileUtil")
	private CheckFileUtil checkFileUtil;
	
	//파일 체크 & 관리
    @Resource(name="EgovFileMngUtil")
	private EgovFileMngUtil egovFileMngUtil;
    
    //파일 정보 관리
    @Resource(name="EgovFileMngService")
    private EgovFileMngService fileMngService;
    
	
    private static final Logger logger = LoggerFactory.getLogger(MjonSBVAPayController.class);
    
    /////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    //	USER
    //
    //
    
    /**
     * 세틀뱅크 가상계좌 결제 Action 페이지 
     * @param searchVO
     * @param model
     * @return	"/web/pay/PayView.do"
     * @throws Exception
     */
    @RequestMapping(value= {"/web/member/payva/SBPayActionAjax.do"})
	public String KGMPayActionAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, 
			HttpServletRequest request,
			ModelMap model) throws Exception{
    	
    	/*
    	String pattern = (String) request.getAttribute(
                HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
                */
    	
    	mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "payva/SBPayActionAjax.do") ;
    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
    	//테스트
    	mjonPayVO.setBuyerName(loginVO.getName());
    	mjonPayVO.setBuyerEmail(loginVO.getEmail());
    	mjonPayVO.setMoid(loginVO.getId());
    	
		model.addAttribute("mjonPayVO", mjonPayVO);
		return "web/cop/sb/mc_web";
		
	}
    
    /**
     * KGM mobile 결제 okurl 페이지 
     * @param searchVO
     * @param model
     * @return	"/web/pay/PayView.do"
     * @throws Exception
     */
    @RequestMapping(value= {"/web/member/payva/OkUrl.do"})
	public String OkUrl(			
			HttpServletRequest request
			, ModelMap model
			) throws Exception{

    	System.out.println("request.toString()");
    	System.out.println(request.toString());
    	
		return "web/cop/sb/okurl";
		
	}
    
    /**
     * KGM mobile 결제 okurl 페이지 
     * @param searchVO
     * @param model
     * @return	"/web/pay/PayView.do"
     * @throws Exception
     */
    @RequestMapping(value= {"/web/member/payva/NotiUrl.do"})
	public String NotiUrl(			
			HttpServletRequest request
			, ModelMap model
			) throws Exception{
    	
    	System.out.println("request.toString()");
    	System.out.println(request.toString());
    	
		return "web/cop/sb/notiurl";
		
	}
    
    /////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    //	ADMIN
    //
    //
    
    /**
     *세틀뱅크 가상계좌 리스트 관리 화면
     * @param VacsVactVO
     * @param model
     * @return
     * @throws Exception
     */
        
    @RequestMapping(value= {"/uss/ion/payva/selectVirtualAccountList.do"})    
    public String selectAddrAgencyListAdmin(
    		HttpServletRequest request
    		, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
    		, ModelMap model
    		, RedirectAttributes redirectAttributes
    		) throws Exception {

    	
    	//관리자 로그인 여부 체크
    	String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);    	
    	if (!"Y".equals(isLogin)) return isLogin;
    	
    	
    	//로그인 정보 획득
    	LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
    	
    	
    	//login 정보
    	model.addAttribute("loginVO", loginVO);
    	
    	
    	//ajax를 위한 현재 URL 정보 받기
    	vacsVactVO.setUrl(request.getRequestURI()); 
    	
    	
		return "/uss/ion/payva/VirtualAccountList";    	
    	
    }
    
    /**
     * 세틀뱅크 가상계좌 관리 리스트 ajax 부분
     * @param addrVO
     * @param model
     * @return
     * @throws Exception
     */
    
    @RequestMapping(value= {"/uss/ion/payva/selectVirtualAccountListAjax.do"})
    public String selectAddrAgencyListAjaxAdmin(
    		HttpServletRequest request
    		, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
    		, ModelMap model
    		, RedirectAttributes redirectAttributes
    		) throws Exception {
    	
    	//관리자 로그인 여부 체크
    	String isLogin = checkLoginUtil.isLoginCheck4JsonPage(redirectAttributes);    	
    	if ("N".equals(isLogin)) return "/uss/ion/payva/VirtualAccountListAjax";   	
    	

    	// pageing step1
    	PaginationInfo paginationInfo = this.setPagingStep1(vacsVactVO);

    	
    	// pageing step2
    	vacsVactVO = this.setPagingStep2(vacsVactVO, paginationInfo);
    	
    	
		//대상 리스트 가져오기
    	//관리자 리스트는 30일 마감에 대한 제한을 없애기 위해서 해당 값을 넣어준다.    	
    	List<VacsVactVO> vacsVactList = vacsVactService.selectList(vacsVactVO);
    	
    	
    	// pageing step3
    	paginationInfo = this.setPagingStep3(vacsVactList, paginationInfo);
   	    	
		
    	//대상 리스트, 페이징 정보 전달
    	model.addAttribute("resultList", vacsVactList);
    	model.addAttribute("paginationInfo", paginationInfo);
    	
    	
    	return "/uss/ion/payva/VirtualAccountListAjax";
    	
    	
    }
    
    /**
     * 세틀뱅크 가상계좌  등록
     * @param searchVO
     * @param model
     * @return	"/uss/ion/payva/VirtualAccountInsert"
     * @throws Exception
     */
    @RequestMapping(value = {"/uss/ion/payva/VirtualAccountInsert.do"})
    public String AddrAgencyInsert(
            @ModelAttribute("searchVO") VacsVactVO vacsVactVO 
            , HttpServletRequest request 
            , RedirectAttributes redirectAttributes
            , Model model) throws Exception {
    	
    	//관리자 로그인 여부 체크
    	String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);    	
    	if (!"Y".equals(isLogin)) return isLogin;
    	
    	
    	//사용자 정보
    	LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();    	
    	model.addAttribute("loginVO", loginVO);
    	
		
        return "/uss/ion/payva/VirtualAccountInsert";
    }
    
	/**
	 * 은행별 계좌번호 첨부파일을 디비에 저장
	 *
	 * @param VacsVactVO
	 * @param multiRequest
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value= {"/uss/ion/payva/insertVirtualAccountAjax.do"})
	public ModelAndView insertAddrAgencyAjax(
			HttpServletRequest request
			, @ModelAttribute("insertAgency") VacsVactVO vacsVactVO
			, final MultipartHttpServletRequest multiRequest
			, @ModelAttribute("board") Board board
			//, ModelMap model
			, ModelAndView modelAndView
			, RedirectAttributes redirectAttributes			 
			) throws Exception {

		//json 알림
		modelAndView.setViewName("jsonView");
				
		
    	//사용자 로그인 여부 체크 for json
    	String isLogin = checkLoginUtil.isLoginCheck4JsonAction(modelAndView);    	
    	if ("N".equals(isLogin)) return modelAndView;	
    					    	
    	
		//파일 정상 처리 여부와 첨부 파일 정보
		String atchFileId = this.readFile(multiRequest, modelAndView, "txt|xls|xlsx", 10, 1);	//size and ea		
				
		if ("ERROR".equals(atchFileId)) return modelAndView;
				
		
		//text 파일 읽어서 list에 넣기
		List<String> sb = new ArrayList<>();		
		sb = checkFileUtil.extractFromTxtFile(multiRequest, sb);
						
		if (sb.size()==0) {
			//text 파일읽기가 안된경우 excel 읽기를 실행
			sb = checkFileUtil.extractFromExcelFile(multiRequest, sb);

		}
				
		
		//필요 쿼리 생성 및 처리	-	계좌번호만 작성된 파일 처리
		String s_split	=	"\t";
		int i_plan_size	=	1;
		
		String s_in_query	=	"'0'";
		String s_select_query	=	"SELECT '0' acct_no";
		
		for (int i=0;i<sb.size();i++) {
			String[] s_tmp	=	sb.get(i).split(s_split);			
			
			if (s_tmp.length==i_plan_size) {
				s_in_query		=	s_in_query		+	",'"	+	s_tmp[0]	+	"'";
				s_select_query	=	s_select_query	+	"	UNION ALL SELECT '"	+	s_tmp[0]	+	"'";
				
				/*
				//한 row에 여러값이 있는 경우 처리 방법				
				for (int j=0;j<i_plan_size;j++) {
					System.out.println(s_tmp[j].toString());	
				}
				*/		
			}
		}
		
		System.out.println(s_in_query);
		System.out.println(s_select_query);
		
		
		//중복수량 확인
		vacsVactVO.setAcctNo(s_in_query);
		
		System.out.println(vacsVactVO.toString());
		System.out.println(vacsVactVO.getAcctNo());
		
		int i_over_count	=	vacsVactService.selectOverCount(vacsVactVO);
		System.out.println("i_over_count");
		System.out.println(i_over_count);
		
		//비중복 저장
		vacsVactVO.setOrgCd("31001412");
		vacsVactVO.setCmfNm("ITN");				//회사명 셋팅
		vacsVactVO.setAcctNo(s_select_query);
		
		//입금가능 기준 금액
		vacsVactVO.setTrAmt("5000");
		
		//입금가능 기준 금액보다
		//0 조건없음
		//1금액=실금액
		//2 금액>=실입금액
		//3 금액<=실입금액
		vacsVactVO.setTramtCond("3");
		
		//txt 파일에서 읽어온 list 사이즈
		int readTxtListSize = sb.size();
		
		int i_insert_count	=	vacsVactService.updateBulk(vacsVactVO);
		
		System.out.println("txt파일에서 읽은 가상계좌 list size    ::    " + readTxtListSize);
		System.out.println("DB에 insert 된 가상계좌 list size     ::    " + i_insert_count);
		
		System.out.println("i_insert_count");
		System.out.println(i_insert_count);
		
		//정합성 체크해서 처리하기
		//step1.기존에 사용중인지 확인 하기
		//step2.나머지는 저장 처리
		//step3.사용중인것 리스트 ret해서 처리하기

		
		//System.out.println(s_in_query);
		//System.out.println(s_select_query);
				
		//게시판 등록하기
		//modelAndView = this.insertAddrAgencyBoard(modelAndView, atchFileId, addrAgencyVO, board.getNttCn(), loginVO.getId(), multiRequest);
				
		if(readTxtListSize == i_insert_count) {
			
			modelAndView.addObject("result", "success");
			modelAndView.addObject("message", "계좌번호 저장에 성공하였습니다.");
			
		}else if(i_insert_count == 0){
			
			modelAndView.addObject("result", "fail");
			modelAndView.addObject("message", "계좌번호 저장에 실패하였습니다.");
			
		}else {
			
			modelAndView.addObject("result", "fail");
			modelAndView.addObject("message", "첨부자료의 계좌수와 입력된 계좌수가 다릅니다.");
			
		}
		
		return modelAndView;
	}
	
    /**
     * 세틀뱅크 가상계좌번호  수정 화면
     * @param VacsVactVO
     * @param model
     * @return	"/uss/ion/payva/VirtualAccountModify"
     * @throws Exception
     */
    @RequestMapping(value = {"/uss/ion/payva/VirtualAccountModify.do"})
    public String MjonNumberModify(
            @ModelAttribute("searchVO") VacsVactVO vacsVactVO
            , HttpServletRequest request 
            , Model model
            , RedirectAttributes redirectAttributes
            ) throws Exception {
    	
    	//관리자 로그인 여부 체크
    	String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);    	
    	if (!"Y".equals(isLogin)) return isLogin;
    	
    	
    	//수정 대상 정보 가져오기
    	vacsVactVO = vacsVactService.selectDetail(vacsVactVO);
		model.addAttribute("VacsVactVO", vacsVactVO);
		
		
        return "/uss/ion/payva/VirtualAccountModify";
    }	
	
	/**
	 * 세틀뱅크 가상계좌번호  수정처리
	 *
	 * @param boardVO
	 * @param board
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value= {"/uss/ion/payva/updateVirtualAccountAjax.do"})
	public ModelAndView updateVirtualAccountAjax(
			HttpServletRequest request
			, @ModelAttribute("updateAgency") VacsVactVO vacsVactVO						
			//, ModelMap model
			, ModelAndView modelAndView
			, RedirectAttributes redirectAttributes			 
			) throws Exception {

		modelAndView.setViewName("jsonView");
				
		LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
		
    	//사용자 로그인 여부 체크 for json
    	String isLogin = checkLoginUtil.isLoginCheck4JsonAction(modelAndView);    	
    	if ("N".equals(isLogin)) return modelAndView;
    	

		//게시판 등록하기
		try {
			
			vacsVactService.update(vacsVactVO);
			
			VacsVactVO hstryVO = vacsVactService.selectDetail(vacsVactVO);
			
			hstryVO.setMberId(loginVO.getId());
			
			//원장 상태 변경 이력 저장
			vacsVactService.insertVacsHistory(hstryVO);
			
			modelAndView.addObject("message", egovMessageSource.getMessage("success.common.update"));
			modelAndView.addObject("result", "success");
			
		}catch(Exception ex){
			ex.printStackTrace();
			
			modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
			modelAndView.addObject("result", "fail");
			
		}
		
		
		return modelAndView;
	}
	
    /**
     * 가상계좌 관리 삭제 프로세서
     * @param searchVO
     * @param model
     * @return	"/uss/ion/payva/VirtualAccountDelete.do"
     * @throws Exception
     */
    @RequestMapping(value = {"/uss/ion/payva/VirtualAccountDelete.do"})
    public String AddrAgencyDelete(
    		@RequestParam("del") String[] del
    		, @ModelAttribute("searchVO") VacsVactVO vacsVactVO
    		, HttpServletRequest request 
    		, RedirectAttributes redirectAttributes
    		, Model model
    		) throws Exception {
    	    	
    	//관리자 로그인 여부 체크
    	String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes);    	
    	if (!"Y".equals(isLogin)) return isLogin;  
    	
    	
    	//전달받은 AddrAgencyId로 삭제처리
    	try {
    		int i_delete_count		=	0;
    		int i_cant_delete_count	=	0;
    		
        	for(String id: del) {
        		String[] a_param = id.split("_");	//은행코드 & 계좌번호 
        		
        		if (a_param.length==2) {
            		vacsVactVO.setBankCd(a_param[0]);
            		vacsVactVO.setAcctNo(a_param[1]);
            		vacsVactVO.setQuery("	AND MBER_ID is null	");
            		        		
            		if (vacsVactService.deleteWithQuery(vacsVactVO)>0) {
            			i_delete_count++;
            			
            		}else {
            			i_cant_delete_count++;
            			
            		}        			
            		
        		}else {
        			i_cant_delete_count++;
        			
        		}

     	    }
        	
        	if (i_cant_delete_count>0) {
        		redirectAttributes.addFlashAttribute("message", "요청하신 "+(i_delete_count+i_cant_delete_count)+"건 중에서 "+i_delete_count+"건 삭제, "+i_cant_delete_count+"건 사용자 할당으로 비 삭제되었습니다.");	
        	}else {
        		redirectAttributes.addFlashAttribute("message", "요청하신 "+(i_delete_count+i_cant_delete_count)+"건 "+egovMessageSource.getMessage("success.common.delete"));
        	}        	
        	
    	}catch(Exception e) {
    		redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete"));
    	}
    	
		RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/payva/selectVirtualAccountList.do");
		return redirectUrlMaker.getRedirectUrl();		
		
    }
    
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    //	private function
    //
    //
    
    //페이징을 위한 처리 step1 - 페이징 기본 정보 설정
    private PaginationInfo setPagingStep1(VacsVactVO p_vacsVactVO)throws Exception{
    	// pageing step1
    	PaginationInfo paginationInfo = new PaginationInfo();
    	paginationInfo.setCurrentPageNo(p_vacsVactVO.getPageIndex());
    	paginationInfo.setRecordCountPerPage(p_vacsVactVO.getPageUnit());
    	paginationInfo.setPageSize(p_vacsVactVO.getPageSize());
    	
    	return paginationInfo;
    }

    
    //페이징을 위한 처리 step2 - 게시물 리스트 수량 설정 및 검색 조건 초기화
    private VacsVactVO setPagingStep2(
    		VacsVactVO p_vacsVactVO
    		, PaginationInfo p_paginationInfo
    		)throws Exception{
    	// pageing step2
    	p_vacsVactVO.setFirstIndex(p_paginationInfo.getFirstRecordIndex());
    	p_vacsVactVO.setLastIndex(p_paginationInfo.getLastRecordIndex());
    	p_vacsVactVO.setRecordCountPerPage(p_paginationInfo.getRecordCountPerPage());
    	
    	if("".equals(p_vacsVactVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
    		p_vacsVactVO.setSearchSortCnd("REG_IL");
    		p_vacsVactVO.setSearchSortOrd("desc");
    	}
    	
    	return p_vacsVactVO;    	
    }
    
    
    //페이징을 위한 처리 step3 - 전체 게시물 수량 설정하기
    private PaginationInfo setPagingStep3(
    		List<VacsVactVO> p_vacsVactList
    		, PaginationInfo p_paginationInfo    		
    		)throws Exception{
    	// pageing step3
    	int totCnt = 0;
    	if(p_vacsVactList.size() > 0) totCnt = p_vacsVactList.get(0).getTotCnt();
    	p_paginationInfo.setTotalRecordCount(totCnt);
    	
    	return p_paginationInfo;
    }
        
    
    //사용자 업로드 파일 처리 - 하나의 파일만 처리
    private String readFile(
    		MultipartHttpServletRequest p_multiRequest
    		, ModelAndView p_modelAndView
    		, String p_exts				//가능한 확장자를 받는다. |
			, int p_i_file_size
			, int p_i_file_count
    		//, BoardMasterVO p_bmVO
    		) throws Exception{
    	//Map<String, Object> p_map = new Map<>();
    	//Map<String, Object> in_map = new HashMap<>();
    	boolean in_bool	=	true;
    	
    	
		List<FileVO> result = null;
		String atchFileId = "";
		String isThumbFile = "";		
		//String isThumbFile = "thumbFile";	//"thumbFile"	-	썸네일을 생성한다.
		
		final Map<String, MultipartFile> files = p_multiRequest.getFileMap();
		if (!files.isEmpty()) {
			result = egovFileMngUtil.parseFileInf(files, "ADDRAGENCY_", 0, "", "", isThumbFile);
			
			// 파일 사이즈, 개수, 확장자 체크. model에 체크 오류 메세지 set
			
			//관리자에서 게시판 설정시 업로드 파일 사이즈와 수량 체크용
			if(!checkFileUtil.isPosblAtchFileMvWithUserSetting(result, p_modelAndView, 0, p_exts, p_i_file_size, p_i_file_count)) {
				// 공통코드 Set
				//setBBSCommCd(model, bmVO);
				
				//model.addAttribute("bdMstr", bmVO);				
				//return "web/cop/bbs/EgovNoticeRegist";
				//modelAndView.addObject("bdMstr", bmVO);
				p_modelAndView.addObject("result", "fail");
				
				in_bool	=	false;
			}
			
			//atchFileId = fileMngService.insertFileInfs(result);	//첨부 파일
			for(int i=0;i<result.size();i++) {
				FileVO vo = (FileVO) result.get(i);
				atchFileId = atchFileId + "|" + vo.fileStreCours + vo.streFileNm;	//첨부 파일
			}
						
			//atchFileId = atchFileId + "|" + fileMngService.insertFileInfs(result);	//첨부 파일
		}
		
		if (!in_bool)	atchFileId = "ERROR";
		
		return atchFileId;
    }
    
    //vacs_vact 가상계좌원장 내용 변경하기
    /*
    private ModelAndView insertAddrAgencyBoard(
    		ModelAndView p_modelAndView
    		//, Map<String, Object> p_fileResult
    		, String p_atchFileId
    		
    		, VacsVactVO p_vacsVactVO
    		, String p_content
    		, String p_registerId
    		//, String p_processStatus
    		, MultipartHttpServletRequest p_multiRequest
    		) throws Exception{
    	
		//게시판 등록하기
		try {
			
			String p_processStatus = "";
			
			//p_processStatus = p_vacsVactVO.getProcessStatus();
			//if ("".equals(p_processStatus) || p_processStatus==null)	p_processStatus = "B";

			
			//p_vacsVactVO.setAtchFileId(p_atchFileId);
			//p_vacsVactVO.setRequestTxt(unscript(p_content));		// XSS 방지
			
			//p_vacsVactVO.setProcessStatus(p_processStatus);	//처리상태 B/I/E
			
			//p_vacsVactVO.setRegisterId(p_registerId);
			//String userIp = EgovClntInfo.getClntIP(p_multiRequest);
			//p_vacsVactVO.setNtcrIp(userIp);			
			
			
			vacsVactService.insert(p_vacsVactVO);	
			
			p_modelAndView.addObject("message", egovMessageSource.getMessage("success.common.insert"));
			p_modelAndView.addObject("result", "success");
			
		}catch(Exception ex){
			ex.printStackTrace();
			
			p_modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.insert"));
			p_modelAndView.addObject("result", "fail");
			
		}
		
		return p_modelAndView;
    }
    */
    
    
	/**
	 * XSS 방지 처리.
	 *
	 * @param data
	 * @return
	 */
	protected String unscript(String data) {
		if (data == null || data.trim().equals("")) {
			return "";
		}

		String ret = data;

		ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "&lt;script");
		ret = ret.replaceAll("</(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "&lt;/script");

		ret = ret.replaceAll("<(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "&lt;object");
		ret = ret.replaceAll("</(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "&lt;/object");

		ret = ret.replaceAll("<(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "&lt;applet");
		ret = ret.replaceAll("</(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "&lt;/applet");

		ret = ret.replaceAll("<(E|e)(M|m)(B|b)(E|e)(D|d)", "&lt;embed");
		ret = ret.replaceAll("</(E|e)(M|m)(B|b)(E|e)(D|d)", "&lt;embed");

		ret = ret.replaceAll("<(F|f)(O|o)(R|r)(M|m)", "&lt;form");
		ret = ret.replaceAll("</(F|f)(O|o)(R|r)(M|m)", "&lt;form");

		//ret = ret.replaceAll("<", "&lt;");
		ret = ret.replaceAll("alert", "");
		//ret = ret.replaceAll("iframe", "");
		
		return ret;
	}	
}
