File name
Commit message
Commit date
File name
Commit message
Commit date
2023-12-26
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2023-12-26
2023-12-19
2023-12-26
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;
}
}