File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
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("<h3>결과코드 : "+ resultCd +"</h3>" );
System.out.println("<h3>결과메시지 : "+ getMobiliansCancelReturnMsg(resultCd) +"</h3>" );
if (resultCd.equals("0000") ) {
System.out.println("<h3>결제취소 성공</h3>");
} else {
System.out.println("<h3>결제취소 실패</h3>");
}
*/
} 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<AddrAgencyVO> 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<AddrAgencyVO> 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<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.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<String, Object> 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("</(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "</script");
ret = ret.replaceAll("<(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "<object");
ret = ret.replaceAll("</(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "</object");
ret = ret.replaceAll("<(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "<applet");
ret = ret.replaceAll("</(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "</applet");
ret = ret.replaceAll("<(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("</(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
ret = ret.replaceAll("<(F|f)(O|o)(R|r)(M|m)", "<form");
ret = ret.replaceAll("</(F|f)(O|o)(R|r)(M|m)", "<form");
//ret = ret.replaceAll("<", "<");
ret = ret.replaceAll("alert", "");
//ret = ret.replaceAll("iframe", "");
return ret;
}
}