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 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 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=실입금액 //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 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 p_map = new Map<>(); //Map in_map = new HashMap<>(); boolean in_bool = true; List result = null; String atchFileId = ""; String isThumbFile = ""; //String isThumbFile = "thumbFile"; //"thumbFile" - 썸네일을 생성한다. final Map 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 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)", "<script"); ret = ret.replaceAll("