package itn.let.mjo.pay.web; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URLDecoder; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; 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.RequestMethod; 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 com.mobilians.mcCancel_v0001.MC_Cancel; 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.let.cop.bbs.service.BoardMasterVO; import itn.let.mjo.addragency.service.AddrAgencyService; import itn.let.mjo.addragency.service.AddrAgencyVO; import itn.let.mjo.mjocommon.MjonCommon; 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.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.JoinSettingVO; import itn.let.uss.umt.service.EgovMberManageService; import itn.let.uss.umt.service.EgovUserManageService; import itn.let.uss.umt.service.MberManageVO; import itn.let.uss.umt.service.UserManageVO; import itn.let.utl.fcc.service.EgovCryptoUtil; import itn.let.utl.sim.service.EgovClntInfo; import itn.let.utl.user.service.CheckBoardUtil; import itn.let.utl.user.service.CheckFileUtil; import itn.let.utl.user.service.CheckLoginUtil; import itn.let.utl.user.service.MjonNoticeSendUtil; @Controller public class MjonKGMPayController { @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 = "checkBoardUtil") private CheckBoardUtil checkBoardUtil; //첨부 파일 체크 @Resource(name = "checkFileUtil") private CheckFileUtil checkFileUtil; //파일 체크 & 관리 @Resource(name="EgovFileMngUtil") private EgovFileMngUtil egovFileMngUtil; //파일 정보 관리 @Resource(name="EgovFileMngService") private EgovFileMngService fileMngService; /** 알림전송 Util */ @Resource(name = "mjonNoticeSendUtil") private MjonNoticeSendUtil mjonNoticeSendUtil; @Resource(name="MjonCommon") private MjonCommon mjonCommon; /** 사이트 설정 */ @Resource(name = "egovSiteManagerService") EgovSiteManagerService egovSiteManagerService; private static final Logger logger = LoggerFactory.getLogger(MjonKGMPayController.class); ///////////////////////////////////////////////////////////////////////////////////////// // // // USER // // /** * KGM mobile 결제 Action 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/KGMPayActionAjax.do"}) public String KGMPayActionAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, HttpServletRequest request, ModelMap model) throws Exception{ String userId = ""; LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { userId = loginVO.getId(); } mjonPayVO.setMoid(userId); model.addAttribute("mjonPayVO", mjonPayVO); return "web/cop/kgm/mc_web"; } /** * KGM mobile 결제 okurl 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/NotiUrlAjax.do"}) public String NotiUrlAjax( HttpServletRequest request , ModelMap model ) throws Exception{ System.out.println("request.toString()"); System.out.println(request.toString()); return "web/cop/kgm/notiurl"; } /** * KGM mobile 결제 okurl 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/OkUrlAjax.do"}) public String OkUrlAjax( HttpServletRequest request , HttpSession session , HttpServletResponse response , ModelMap model , RedirectAttributes redirect ) throws Exception{ //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); String Resultcd = request.getParameter("Resultcd"); //[ 4byte 고정] 결과코드 String Resultmsg = URLDecoder.decode(request.getParameter("Resultmsg"), "euc-kr"); //[ 100byte 이하] 결과메세지 String AutoBillKey = request.getParameter("AutoBillKey"); //[ 15byte 이하] 자동결제 최초등록키 String CASH_GB = request.getParameter("CASH_GB"); //[ 2byte 고정] 결제수단(MC) String Commid = request.getParameter("Commid"); //[ 3byte 고정] 이통사 String Mobilid = request.getParameter("Mobilid"); //[ 15byte 이하] 모빌리언스 거래번호 String Mrchid = request.getParameter("Mrchid"); //[ 8byte 고정] 상점ID String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수 String No = request.getParameter("No"); //[ 11byte 이하] 폰번호 String Payeremail = request.getParameter("Payeremail"); //[ 30byte 이하] 결제자 이메일 String Prdtnm = URLDecoder.decode(request.getParameter("Prdtnm"), "euc-kr"); //[ 50byte 이하] 상품명 String Prdtprice = request.getParameter("Prdtprice"); //[ 10byte 이하] 상품가격 String Signdate = request.getParameter("Signdate"); //[ 14byte 이하] 결제일자 String Svcid = request.getParameter("Svcid"); //[ 12byte 고정] 서비스ID String Tradeid = request.getParameter("Tradeid"); //[ 40byte 이하] 상점거래번호 String Userid = request.getParameter("Userid"); //[ 20byte 이하] 사용자ID String USERKEY = request.getParameter("USERKEY"); //[ 15byte 이하] 휴대폰정보(이통사, 휴대폰번호, 주민번호) 대체용 USERKEY String MC_EZ_KEY = request.getParameter("Ezkey"); //[ 20byte 고정] 간소화결제 사용자키 // 사용자 정보 String mberNm = ""; String moblphonNo = ""; String mberEmailAdres = ""; MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(Userid); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); if (userInfo != null) { mberNm = userInfo.getMberNm(); moblphonNo = userInfo.getMoblphonNo(); mberEmailAdres = userInfo.getMberEmailAdres(); } // MjonPayVO MjonPayVO mjonPayVO = new MjonPayVO(); mjonPayVO.setResultCd(Resultcd); mjonPayVO.setResultMsg(Resultmsg); mjonPayVO.setAutoBillKey(AutoBillKey); mjonPayVO.setCashGb(CASH_GB); mjonPayVO.setAutoYn(""); mjonPayVO.setCommId(Commid); mjonPayVO.setMobileId(Mobilid); mjonPayVO.setMrchId(Mrchid); mjonPayVO.setPno(No); mjonPayVO.setPayerEmail(Payeremail); mjonPayVO.setPrdtNm(Prdtnm); mjonPayVO.setPrdtPrice(Prdtprice); mjonPayVO.setSignDate(Signdate); mjonPayVO.setSvcId(Svcid); mjonPayVO.setTradeId(Tradeid); mjonPayVO.setUserId(Userid); mjonPayVO.setUserKey(USERKEY); mjonPayVO.setMcEzKey(MC_EZ_KEY); // 추가정보(mj_pg) String pgStatus = ""; if("0000".equals(Resultcd)) { pgStatus = "1"; // 1:결제완료 } else { pgStatus = "4"; // 4.결제오류 } mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] mjonPayVO.setResultCode(Resultcd); mjonPayVO.setResultMsg(Resultmsg); mjonPayVO.setAmt(Prdtprice); // 결제금액 mjonPayVO.setPayMethod("CELLPHONE"); // 결제방법 mjonPayVO.setPgCode("KGM"); // mjonPayVO.setGoodsName("KG 모빌리언스"); // mjonPayVO.setPhone(No); // 모바일 mjonPayVO.setMobile(No); // 모바일 mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) mjonPayVO.setTid(Tradeid); // Tid mjonPayVO.setMid(Mrchid); // Mid // 회원정보 mjonPayVO.setBuyerName(mberNm); mjonPayVO.setBuyerEmail(moblphonNo); mjonPayVO.setBuyerTel(mberEmailAdres); // 로그인정보 /* LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { mjonPayVO.setBuyerName(loginVO.getName()); mjonPayVO.setBuyerEmail(loginVO.getEmail()); mjonPayVO.setBuyerTel(loginVO.getTel()); } else { // 재로그인 처리 //Userid } */ // 인서트 mjonPayService.insertKgmAll(mjonPayVO); // 휴대폰 15만원결제 => 법인폰 알림 if (mjonPayVO.getAmt().equals("165000")) { // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { // 스미싱의심 SMS 알림전송 mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 15만원 결제", Userid, mberNm); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 스미싱의심/휴대폰 15만원 결제 - " + mberNm +"("+ Userid + ")"; mjonCommon.sendSimpleSlackMsg(msg); } // 스미싱 의심회원으로 변경 UserManageVO userManageVO = new UserManageVO(); userManageVO.setSmishingYn("Y"); userManageVO.setMberId(Userid); userManageService.updateOneUserSmishingYnNotAlert(userManageVO); } else { // 대상 : 휴대폰결제, 즉시이체, 전용계좌 // Step 1. 스미싱의심 지정 여부 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { // Step 1. 개인회원 여부 체크 int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); if (isPersnalMemberCnt == 1) { // Step 2. 첫결제 여부 체크 int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); if (isFirstPayCnt == 1) { // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { // 스미싱의심 SMS 알림전송 mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 첫결제", Userid, mberNm); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 스미싱의심/휴대폰 첫결제 - " + mberNm +"("+ Userid + ")"; mjonCommon.sendSimpleSlackMsg(msg); } // 스미싱 의심회원으로 변경 UserManageVO userManageVO = new UserManageVO(); userManageVO.setSmishingYn("Y"); userManageVO.setMberId(Userid); userManageService.updateOneUserSmishingYnNotAlert(userManageVO); } } } } redirect.addAttribute("Resultcd", Resultcd); redirect.addAttribute("Tradeid", Tradeid); redirect.addAttribute("Prdtprice", Prdtprice); //return "web/cop/kgm/okurl"; return "redirect:/web/kgm/pay/kgmResultAjax.do"; } static String convert(String str, String encoding) throws IOException { ByteArrayOutputStream requestOutputStream = new ByteArrayOutputStream(); requestOutputStream.write(str.getBytes(encoding)); return requestOutputStream.toString(encoding); } /** * KGM mobile 결제 Result 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/kgmResultAjax"}, method=RequestMethod.GET) public String kgmResultAjax(HttpServletRequest request , ModelMap model ) throws Exception{ String Resultmsg = ""; String Prdtprice = ""; if("0000".equals(request.getParameter("Resultcd"))) { Prdtprice = request.getParameter("Prdtprice"); /* MjonPayVO mjonPayVO = new MjonPayVO(); mjonPayVO.setTradeId(request.getParameter("Tradeid")); mjonPayVO = mjonPayService.selectKgmVO(mjonPayVO); if (!mjonPayVO.equals(null)) { } */ // 로그인정보 /* String userId = ""; LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { } else { // 재로그인 처리 userId = mjonPayVO.getUserId(); } */ Resultmsg = "휴대폰결제 정상처리 되었습니다."; } else { Resultmsg = "휴대폰결제 실패 했습니다."; } model.addAttribute("Resultcd", request.getParameter("Resultcd")); model.addAttribute("Resultmsg", Resultmsg); model.addAttribute("Prdtprice", Prdtprice); return "web/cop/kgm/result"; } /** * KGM mobile 결제 okurl 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/kgmCancelAjax.do"}, method=RequestMethod.GET) public String kgmCancelAjax(HttpServletRequest request , HttpServletResponse response , ModelMap model ) throws Exception { Boolean isSuccess = true; String msg = ""; String resultCd = ""; // 리턴코드 String resultMsg = ""; // 리턴메시지 try { // 아래정보가 맞지 않을 경우 취소정보 불일치 0045 가 리턴됩니다. String Mrchid=""; //모빌리언스가 부여한 상점아이디 8자리 String Svcid=""; //모빌리언스가 부여한 서비스아이디 12자리 String Tradeid = ""; //결제된 상점거래번호 String Prdtprice = ""; //결제된 금액 String Mobilid = ""; //결제된 모빌리언스 거래번호 Mrchid = request.getParameter("Mrchid"); Svcid = request.getParameter("Svcid"); Tradeid = request.getParameter("Tradeid"); Prdtprice = request.getParameter("Prdtprice"); Mobilid = request.getParameter("Mobilid"); // MOID : MOID_000000000000630 Mrchid = "17062204"; Svcid = "170622040674"; Tradeid = "170622040674_202204191748300618"; Prdtprice = "3000"; Mobilid = "5002140398"; String kgmServerIp = ""; // 메인서버아이피 int kgmServerPort = 0; // 서버포트 String kgmSwitchIp = ""; // 백업서버아이피 int kgmRecvTimeOut = 0; // 전문수신타임아웃 String kgmLogDir = ""; // 로그경로 String serverName = request.getServerName().toLowerCase(); int serverPort = request.getServerPort(); System.out.println("serverName : "+ serverName); System.out.println("serverPort : "+ serverPort); if (serverName.lastIndexOf("localhost") > -1 || serverName.lastIndexOf("127.0.0.1") > -1) { System.out.println("KGM 연결서버 : 개발서버1"); // 개발서버 kgmServerIp = "175.158.12.131"; kgmServerPort = 7500; kgmSwitchIp = "175.158.12.131"; kgmRecvTimeOut = 30000; kgmLogDir = "c:\\cancel_log\\"; } else if (serverPort != 80 || serverPort != 443) { System.out.println("KGM 연결서버 : 개발서버2"); // 개발서버 kgmServerIp = "175.158.12.131"; kgmServerPort = 7500; kgmSwitchIp = "175.158.12.131"; kgmRecvTimeOut = 30000; kgmLogDir = "c:\\cancel_log\\"; } else { System.out.println("KGM 연결서버 : 운영서버"); // 운영서버 kgmServerIp = "175.158.12.140"; kgmServerPort = 7500; kgmSwitchIp = "218.50.55.107"; kgmRecvTimeOut = 30000; kgmLogDir = "/cancel_log/"; } // MC Cancel /* MC_Cancel cancel = new MC_Cancel(); cancel.setServerInfo(kgmServerIp, kgmServerPort, kgmSwitchIp, kgmRecvTimeOut, kgmLogDir); resultCd = cancel.cancel_attempt(Mrchid, Svcid, Tradeid, Prdtprice, Mobilid); // 결제취소요청 resultMsg = getMobiliansCancelReturnMsg(resultCd); if (resultCd.equals("0000") ) { // 결제취소 성공 } else { // 결제취소 실패 } // KG 모빌리언스 취소 리턴메시지 System.out.println("

결과코드 : "+ resultCd +"

" ); System.out.println("

결과메시지 : "+ getMobiliansCancelReturnMsg(resultCd) +"

" ); if (resultCd.equals("0000") ) { System.out.println("

결제취소 성공

"); } else { System.out.println("

결제취소 실패

"); } */ } catch (Exception e) { e.printStackTrace(); isSuccess = false; msg = "Err : " + e.getMessage(); } model.clear(); model.addAttribute("isSuccess", isSuccess); model.addAttribute("msg", msg); model.addAttribute("resultCd", resultCd); model.addAttribute("resultMsg", resultMsg); return ""; } // KG 모빌리언스 취소 리턴메시지 public static String getMobiliansCancelReturnMsg(String val) { String rtnVal = ""; switch (val.trim().toUpperCase()) { case "0000": rtnVal = "정상취소처리"; break; case "0011": rtnVal = "통신사미등록폰"; break; case "0014": rtnVal = "해지된 폰"; break; case "0020": rtnVal = "SKT,LGT 경우 휴대폰정보 변경으로 인한 취소실패"; break; case "0041": rtnVal = "거래내역 없음"; break; case "0042": rtnVal = "취소기간경과"; break; case "0044": rtnVal = "이미 취소된 자료"; break; case "0045": rtnVal = "취소 자료 정보 불일치"; break; case "0097": rtnVal = "요청자료 오류"; break; case "0098": rtnVal = "통신사 통신오류"; break; case "0099": rtnVal = "기타"; break; } return rtnVal; } ///////////////////////////////////////////////////////////////////////////////////////// // // // ADMIN // // /** * 주소록 입력 대행(무료) 관리 화면 * @param addrVO * @param model * @return * @throws Exception */ @RequestMapping(value= { "/uss/ion/paycellphone/selectVirtualAccountList.do" }) public String selectAddrAgencyListAdmin( HttpServletRequest request , @ModelAttribute("searchVO") AddrAgencyVO addrAgencyVO , 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 정보 받기 addrAgencyVO.setUrl(request.getRequestURI()); return "/uss/ion/paycellphone/VirtualAccountList"; } /** * 주소록 입력 대행(무료) 관리 리스트 ajax 부분 * @param addrVO * @param model * @return * @throws Exception */ @RequestMapping(value= { "/uss/ion/paycellphone/selectAddrAgencyListAjax.do" }) public String selectAddrAgencyListAjaxAdmin( HttpServletRequest request , @ModelAttribute("searchVO") AddrAgencyVO addrAgencyVO , ModelMap model , RedirectAttributes redirectAttributes ) throws Exception { //관리자 로그인 여부 체크 String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes); if (!"Y".equals(isLogin)) return isLogin; // pageing step1 PaginationInfo paginationInfo = this.setPagingStep1(addrAgencyVO); // pageing step2 addrAgencyVO = this.setPagingStep2(addrAgencyVO, paginationInfo); //대상 리스트 가져오기 //관리자 리스트는 30일 마감에 대한 제한을 없애기 위해서 해당 값을 넣어준다. addrAgencyVO.setSiteNm("ADMIN"); List addrList = addrAgencyService.selectList(addrAgencyVO); // pageing step3 paginationInfo = this.setPagingStep3(addrList, paginationInfo); //대상 리스트, 페이징 정보 전달 model.addAttribute("resultList", addrList); model.addAttribute("paginationInfo", paginationInfo); return "/uss/ion/paycellphone/AddrAgencyListAjax"; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // // private function // // //페이징을 위한 처리 step1 - 페이징 기본 정보 설정 private PaginationInfo setPagingStep1(AddrAgencyVO p_addrAgencyVO)throws Exception{ // pageing step1 PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(p_addrAgencyVO.getPageIndex()); paginationInfo.setRecordCountPerPage(p_addrAgencyVO.getPageUnit()); paginationInfo.setPageSize(p_addrAgencyVO.getPageSize()); return paginationInfo; } //페이징을 위한 처리 step2 - 게시물 리스트 수량 설정 및 검색 조건 초기화 private AddrAgencyVO setPagingStep2( AddrAgencyVO p_addrAgencyVO , PaginationInfo p_paginationInfo )throws Exception{ // pageing step2 p_addrAgencyVO.setFirstIndex(p_paginationInfo.getFirstRecordIndex()); p_addrAgencyVO.setLastIndex(p_paginationInfo.getLastRecordIndex()); p_addrAgencyVO.setRecordCountPerPage(p_paginationInfo.getRecordCountPerPage()); if("".equals(p_addrAgencyVO.getSearchSortCnd())){ //최초조회시 최신것 조회List p_addrAgencyVO.setSearchSortCnd("registPnttm"); p_addrAgencyVO.setSearchSortOrd("desc"); } return p_addrAgencyVO; } //페이징을 위한 처리 step3 - 전체 게시물 수량 설정하기 private PaginationInfo setPagingStep3( List p_addrList , PaginationInfo p_paginationInfo )throws Exception{ // pageing step3 int totCnt = 0; if(p_addrList.size() > 0) totCnt = p_addrList.get(0).getTotCnt(); p_paginationInfo.setTotalRecordCount(totCnt); return p_paginationInfo; } //사용자 업로드 파일 처리 - 하나의 파일만 처리 private String takeFile( MultipartHttpServletRequest p_multiRequest , ModelAndView p_modelAndView , 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.isPosblAtchFileMvWithBoardMaster(result, p_modelAndView, 0, "xlsx|xls|zip|hwp|txt|doc|docx|csv", p_bmVO)) { // 공통코드 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); //첨부 파일 } if (!in_bool) atchFileId = "ERROR"; return atchFileId; } //addragency 게시물에 글 남기기 private ModelAndView insertAddrAgencyBoard( ModelAndView p_modelAndView //, Map p_fileResult , String p_atchFileId , AddrAgencyVO p_addrAgencyVO , String p_content , String p_registerId //, String p_processStatus , MultipartHttpServletRequest p_multiRequest ) throws Exception{ //게시판 등록하기 try { String p_processStatus = ""; p_processStatus = p_addrAgencyVO.getProcessStatus(); if ("".equals(p_processStatus) || p_processStatus==null) p_processStatus = "B"; p_addrAgencyVO.setAtchFileId(p_atchFileId); p_addrAgencyVO.setRequestTxt(unscript(p_content)); // XSS 방지 p_addrAgencyVO.setProcessStatus(p_processStatus); //처리상태 B/I/E p_addrAgencyVO.setRegisterId(p_registerId); String userIp = EgovClntInfo.getClntIP(p_multiRequest); p_addrAgencyVO.setNtcrIp(userIp); addrAgencyService.insert(p_addrAgencyVO); 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("