Просмотр исходного кода

Merge branch 'order' into develop

card007 5 лет назад
Родитель
Сommit
0032bb15fa

+ 9 - 0
src/main/java/com/style24/core/biz/dao/TscOrderDao.java

@@ -8,6 +8,7 @@ import org.apache.ibatis.session.ResultHandler;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
+import com.style24.persistence.domain.Payment;
 
 /**
  * 주문관리 Dao
@@ -440,4 +441,12 @@ public interface TscOrderDao {
 	 * @since 2021. 02. 02
 	 */	
 	int getDailyDeliveryZoneInfo(Order order);
+
+	/**
+	 * 결제 후 롤백 취소 데이터 등록
+	 *
+	 * @param param
+	 * @return
+	 */
+	int insertPaymentForRollback(Payment param);
 }

+ 1 - 14
src/main/java/com/style24/core/biz/service/TscFreegiftService.java

@@ -40,7 +40,6 @@ public class TscFreegiftService {
 	 * @author jsh77b
 	 * @since 2020. 12. 16
 	 */
-	@SuppressWarnings("null")
 	public GagaMap getOrderFreegift(Order order) {
 		
 		GagaMap resultMap = new GagaMap();
@@ -50,8 +49,6 @@ public class TscFreegiftService {
 		// 1. 장바구니 담긴 상품으로 적용된 사은품 프로모션 정보 조회 (with 상품금액)
 		Collection<Order> fregiftGoodsApplyAmtList = freegiftDao.getFreeGiftGoodsApplyAmt(order);
 		
-		log.info("fregiftGoodsApplyAmtList.size() ::: {}", fregiftGoodsApplyAmtList.size());
-		
 		// 1.1 장바구니 상품으로 적용된 사은품 여부 판단
 		if (fregiftGoodsApplyAmtList.size() > 0) {
 			int[] freegiftSqArr = new int[fregiftGoodsApplyAmtList.size()];
@@ -88,24 +85,14 @@ public class TscFreegiftService {
 						
 						// 같은 사은품 프로모션끼리 등록
 						if (fregiftGoodsApplyAmt.getFreegiftSq() == freegiftGoodsApplySection.getFreegiftSq()) {
-							
-							log.info("fregiftGoodsApplyAmt.getFreegiftSq() ::: {}", fregiftGoodsApplyAmt.getFreegiftSq());
-							log.info("freegiftAmt ::: {}", freegiftAmt);
-							log.info("sectionVal ::: {}", sectionVal);
-							log.info("tempFreegiftSectionSq ::: {}", tempFreegiftSectionSq);
-
 							if (freegiftAmt > sectionVal) {
 								tempFreegiftSectionSq = freegiftSectionSq;
-							} else {
-								if (tempFreegiftSectionSq > 0) {
-									freegiftSectionSqArr[k] = tempFreegiftSectionSq;
-									k++;
-								}
 							}
 						}
 					}
 					
 					freegiftSectionSqArr[k] = tempFreegiftSectionSq;
+					k++;
 				}
 				
 				// 3. 사은품 적용구간 의 적용 사은품정보조회

+ 1 - 1
src/main/java/com/style24/core/biz/service/TscKakaoPayService.java

@@ -159,7 +159,7 @@ public class TscKakaoPayService {
 	 * 카카오페이 결제 취소
 	 *
 	 * @param Order
-	 * @return KakaoPay
+	 * @return Payment
 	 * @author card007
 	 * @since 2021. 03. 05
 	 */

+ 86 - 5
src/main/java/com/style24/core/biz/service/TscKcpService.java

@@ -8,9 +8,14 @@ import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.kcp.J_PP_CLI_N;
+import com.style24.core.biz.dao.TscOrderDao;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Payment;
 
 import lombok.extern.slf4j.Slf4j;
@@ -21,6 +26,9 @@ public class TscKcpService {
 	@Autowired
 	private Environment env;
 
+	@Autowired
+	private TscOrderDao orderDao;
+
 	public String f_get_parm(String val) {
 		if ( val == null ) val = "";
 		return  val;
@@ -37,11 +45,14 @@ public class TscKcpService {
 		}
 
 		// 02. 지불 요청 정보 설정
+		result.setPgGb(param.getPgGb());
+		result.setPayMeans(param.getPayMeans());
 		result.setReqTx(request.getParameter("req_tx"));
 		result.setTranCd(request.getParameter("tran_cd"));
 		result.setUsePayMethod(request.getParameter("use_pay_method"));
 		result.setOrdNo(Integer.parseInt(request.getParameter("ordr_idxx")));
-
+		result.setPgShopId(env.getProperty("pg.kcp.site.cd"));
+		result.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());
 
 		// 03. 인스턴스 생성 및 초기화(변경 불가) (결제에 필요한 인스턴스를 생성하고 초기화 합니다.)
 		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
@@ -75,6 +86,8 @@ public class TscKcpService {
 				//result.setPntIssue(c_PayPlus.mf_get_res("pnt_issue"));					// 결제 포인트사 코드
 				result.setPayAmt(Integer.parseInt(c_PayPlus.mf_get_res("amount")));	// KCP 실제 거래 금액
 				result.setPgCpnAmt(c_PayPlus.mf_get_res("coupon_mny").isEmpty() ? 0 : Integer.parseInt(c_PayPlus.mf_get_res("coupon_mny")));    // 쿠폰 할인금액
+				result.setPgGb(TscConstants.PgGb.KCP.value());
+				// TODO KCP일 경우 PgGb PAYCO로 변경 필요
 
 				if ("100000000000".equals(result.getUsePayMethod())) {
 					// 06-1. 신용카드 승인 결과 처리
@@ -97,18 +110,21 @@ public class TscKcpService {
 					result.setVaNo(c_PayPlus.mf_get_res("account"));				// 입금할 계좌 번호
 					result.setVaBank(c_PayPlus.mf_get_res("bankcode"));			// 입금 은행 코드(공통코드 G940)
 					result.setVaDeadline(c_PayPlus.mf_get_res("vaDate"));		// 가상계좌 입금마감시간
+					result.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value());	// 결제대기
 				} else if ("000010000000".equals(result.getUsePayMethod())) {
 					// 06-4. 휴대폰 승인 결과 처리
 					result.setPayDt(c_PayPlus.mf_get_res("hp_app_time"));		// 승인시간
 					result.setTelecom(c_PayPlus.mf_get_res("commid"));			// 통신사코드
 				}
+
+				if(!StringUtils.isEmpty(param.getPgGb()) && TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
+					result.setPgGb(TscConstants.PgGb.PAYCO.value());
+					result.setPayMeans(TscConstants.PayMeans.CREDIT_CARD.value());
+				}
 			} else {
-				log.info("KCP RESULT :::: {}, {}", result.getResCd(), result.getResMsg());
+				log.error("KCP ERROR RESULT :::: {}, {}", result.getResCd(), result.getResMsg());
 				throw new IllegalArgumentException("결제 실패하였습니다.");
 			}
-		} else {
-			// PAY가 아닐 경우 ?? 다른 메서드로 진행할지 확인 후 Exception 처리할건지 취소가 진행될건지 소스 진행
-			int a = 1;
 		}
 
 		log.info("CHECK RESPONSE DATA        ::::: {} / {}", c_PayPlus.toString(), c_PayPlus.getRecvObj().toString());
@@ -117,4 +133,69 @@ public class TscKcpService {
 
 		return result;
 	}
+
+	public Payment setKcpOrderData(Order order) {
+		Payment payment = new Payment();
+		// KCP 주문요청 공통 데이터
+		payment.setReqTx("pay");						// 필수 (주문시 only "pay")
+		payment.setCurrency("WON");						// 필수, 원화 : WON, 달러 : USD
+		payment.setOrdrIdxx(order.getOrdNo());			// 필수
+		payment.setGoodName(order.getGoodsNm());		// 필수
+		payment.setGoodMny(order.getPayAmt());			// 필수
+		payment.setBuyrName(order.getOrdNm());			// 필수
+		payment.setBuyrMail(order.getOrdEmail());		// 선택
+		payment.setBuyrTel1(order.getOrdTelno());		// 선택, 일반 전화번호
+		payment.setBuyrTel2(order.getOrdPhnno());		// 필수, 휴대폰번호
+		payment.setShopUserId(order.getCustNo());		// 필수, 쇼핑몰회원ID (CUST_NO)
+		// KCP 공통 변경되지 않는 값
+		payment.setSiteCd(env.getProperty("pg.kcp.site.cd"));		// 상점코드
+		payment.setSiteName(env.getProperty("pg.kcp.site.name"));	// 상점 이름 (영문 작성 권장)
+		payment.setModuleType(env.getProperty("pg.kcp.module.type"));
+		payment.setGoodExpr("0");									// 제공 기간 설정 0:일회성 1:기간설정(ex 1:2012010120120131)
+
+		if(TscConstants.PgGb.PAYCO.value().equals(order.getPgGb())) {	// 페이코
+			payment.setPaycoDirect("Y");					// 페이코 직접 호출
+			payment.setPayMthod( "100000000000");			// 직접 호출시 필요 데이터
+			payment.setPayMethod("100000000000");			// 카드
+		} else if(order.getPayMeans() != null && TscConstants.PayMeans.CREDIT_CARD.value().equals(order.getPayMeans())) {		// KCP 카드
+			payment.setPayMethod("100000000000");			// 카드
+			payment.setQuotaopt(12);						// 최대 할부 개월 수
+		} else if(order.getPayMeans() != null && TscConstants.PayMeans.BANK_DEPOSIT.value().equals(order.getPayMeans())) {		// KCP 가상계좌(무통장입금)
+			payment.setPayMethod("001000000000");			// 가상계좌
+			payment.setVcntExpireTerm(3);					// 무통장입금 유효기간
+		} else if(order.getPayMeans() != null && TscConstants.PayMeans.ACCOUNT_TRANSFER.value().equals(order.getPayMeans())) {	// KCP 계좌이체(실시간계좌이체)
+			payment.setPayMethod("010000000000");			// 계좌이체
+		} else if(order.getPayMeans() != null && TscConstants.PayMeans.CELL_PHONE.value().equals(order.getPayMeans())) {		// KCP 휴대폰결제
+			payment.setPayMethod("000010000000");			// 휴대폰결제
+		}
+
+		return payment;
+	}
+
+	@Transactional("shopTxnManager")
+	public void kcpPayRollBack(Payment param, HttpServletRequest request) {
+		try {	request.setCharacterEncoding("euc-kr");	} catch(Exception e) {	}
+
+		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
+
+		c_PayPlus.mf_init( "", env.getProperty("pg.kcp.gw.url"), env.getProperty("pg.kcp.gw.port"), Integer.parseInt(env.getProperty("pg.kcp.tx.mode")), env.getProperty("pg.kcp.log.dir"));
+		c_PayPlus.mf_init_set();
+
+		int mod_data_set_no = c_PayPlus.mf_add_set("mod_data");
+		c_PayPlus.mf_set_us( mod_data_set_no, "tno", param.getPgTid());		// KCP 원거래 거래번호
+		c_PayPlus.mf_set_us( mod_data_set_no, "mod_type", "STSC");		// 전체취소 STSC / 부분취소 STPC
+		c_PayPlus.mf_set_us( mod_data_set_no, "mod_ip", f_get_parm(request.getRemoteAddr())); // 변경 요청자 IP
+		c_PayPlus.mf_set_us( mod_data_set_no, "mod_desc", "가맹점 결과 처리 오류 - 가맹점에서 취소 요청"); // 변경 사유
+
+		param.setTranCd("00200000");
+		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), env.getProperty("pg.kcp.site.key"), param.getTranCd(), "", "", env.getProperty("pg.kcp.log.level"), "0");
+
+		param.setResCd(c_PayPlus.m_res_cd);		// 결과 코드
+		param.setResMsg(c_PayPlus.m_res_msg);	// 결과 메시지
+
+		log.info("CHECK CANCEL INFO >> {} ", c_PayPlus.getRecvObj().toString());
+
+		param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
+		orderDao.insertPaymentForRollback(param);
+	}
 }

+ 170 - 4
src/main/java/com/style24/core/biz/service/TscNaverPayService.java

@@ -1,5 +1,9 @@
 package com.style24.core.biz.service;
 
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
@@ -42,14 +46,14 @@ public class TscNaverPayService {
 	 * 네이버페이 결제준비 처리
 	 * 
 	 * @param Order
-	 * @return KakaoPay
+	 * @return NaverPay
 	 * @author card007
-	 * @since 2021. 03. 03
+	 * @since 2021. 03. 07
 	 */
 	@Transactional("shopTxnManager")
 	public NaverPay naverPaymentReady(Order order) {
 		// API 전송 URL 설정
-		String paymentReadyUrl = "https://dev.apis.naver.com/np_ktptw906068/naverpay/payments/v2/reserve";
+		String paymentReadyUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.paymentReadyUrl");
 
 		// API 파라메터 설정
 		NaverPay naverPay = new NaverPay();
@@ -63,8 +67,170 @@ public class TscNaverPayService {
 		naverPay.setTaxExScopeAmount(0);
 		naverPay.setReturnUrl(order.getReturnUrl());
 
+		// 네이버페이 API 전송
+		return naverPayApi.naverPaymentJsonApi(naverPay, paymentReadyUrl);
+	}
+
+	/**
+	 * 네이버페이 결제승인 처리
+	 *
+	 * @param Order
+	 * @return NaverPay
+	 * @author card007
+	 * @since 2021. 03. 08
+	 */
+	@Transactional("shopTxnManager")
+	public Payment approveNaverPayment(Order order) {
+		// API 전송 URL 설정
+		String paymentReadyUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.approvePaymentUrl");
+
+		// API 파라메터 설정
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+		params.add("paymentId", order.getPgTid());
+
+		// 네이버페이 API 전송
+		NaverPay naverPay = naverPayApi.naverPaymentApi(params, paymentReadyUrl);
+
+		// 카카오페이 API 전송 결과 처리
+		Payment payment = new Payment();
+		int statusCode = naverPay.getStatusCode();
+
+		// 승인 성공일때 200
+		if (statusCode == 200) {
+			payment.setPgTradeNo(naverPay.getBody().getPayHistId());
+			payment.setPgTid(naverPay.getBody().getDetail().getPaymentId());
+			payment.setPgShopId(naverPay.getBody().getDetail().getMerchantId());
+			payment.setOrdNo(Integer.parseInt(naverPay.getBody().getDetail().getMerchantPayKey()));
+			payment.setCustNo(Integer.parseInt(naverPay.getBody().getDetail().getMerchantUserKey()));
+			payment.setNaverMethodType(naverPay.getBody().getDetail().getPrimaryPayMeans());
+			payment.setPayAmt(naverPay.getBody().getDetail().getTotalPayAmount());
+			payment.setNpayPntAmt(naverPay.getBody().getDetail().getNpointPayAmount());
+
+			// 네이버페이 카드결제 시 카드정보 설정
+			if ("CARD".equals(naverPay.getBody().getDetail().getPrimaryPayMeans())) {
+				payment.setCardNm(getCardNm(naverPay.getBody().getDetail().getCardCorpCode()));
+				payment.setCardMips(String.valueOf(naverPay.getBody().getDetail().getCardInstCount()));
+			}
+		}
+
+		payment.setResCd(naverPay.getCode());
+		payment.setResMsg(naverPay.getMessage());
+		
+		return payment;
+	}
+	
+	private String getCardNm(String cardCode) {
+		String result = "";
+		String[] codeArr = {"C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", "CC", "CD", "CF", "CH"};
+		String[] codeNmArr = {"신한", "비씨", "광주", "KB국민", "NH", "롯데", "산업", "삼성", "수협", "씨티", "외환", "우리", "전북", "제주", "하나-외환", "현대"};
+
+		List<String> list = Arrays.asList(codeArr);
+
+		int index = list.indexOf(cardCode);
+
+		if (index >= 0) {
+			result = codeNmArr[list.indexOf(cardCode)];
+		} else {
+			result = cardCode;
+		}
+
+		return result; 
+	}
+
+	/**
+	 * 네이버페이 주문 조회
+	 *
+	 * @param Order
+	 * @return NaverPay
+	 * @author card007
+	 * @since 2021. 03. 08
+	 */
+	@Transactional("shopTxnManager")
+	public NaverPay getNaverPaymentOrder(Order order) {
+		// API 전송 URL 설정
+		String paymentOrderUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.paymentOrderUrl");
+
+		// API 파라메터 설정
+		NaverPay naverPay = new NaverPay();
+		naverPay.setPaymentId(order.getPgTid());
+
+		// 기간별 주문 조회 (31일 이내)
+		// naverPay.setStartTime(order.getStartTime());
+		// naverPay.setEndTime(order.getEndTime());
+		// naverPay.setApprovalType(order.getApprovalType());
+		// naverPay.setPageNumber(order.getPageNo());
+		// naverPay.setRowsPerPage(order.getPageSize());
+
 		// 카카오페이 API 전송
-		return naverPayApi.naverPaymentApi(naverPay, paymentReadyUrl);
+		return naverPayApi.naverPaymentJsonApi(naverPay, paymentOrderUrl);
 	}
 
+	/**
+	 * 네이버페이 결제 취소
+	 *
+	 * @param Order
+	 * @return Payment
+	 * @author card007
+	 * @since 2021. 03. 08
+	 */
+	@Transactional("shopTxnManager")
+	public Payment cancelNaverPayment(Order order) {
+		// API 전송 URL 설정
+		String cancelPaymentUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.cancelPaymentUrl");
+
+		// API 파라메터 설정
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+		params.add("paymentId", order.getPgTid());
+		params.add("cancelReason", order.getChgReasonNm());
+
+		// 전체 취소의 경우 네이버페이에 취소가능금액으로 취소금액 설정
+		if ("Y".equals(order.getAllCanYn())) {
+			NaverPay orderInfo = getNaverPaymentOrder(order);
+			
+			int cancelAmount = 0;
+			for (int i = 0; i < orderInfo.getBody().getList().size(); i++) {
+				int amt = 0;
+
+				if ("01".equals(orderInfo.getBody().getList().get(i).getAdmissionTypeCode())) {
+					amt = orderInfo.getBody().getList().get(i).getTotalPayAmount();
+				} else if ("04".equals(orderInfo.getBody().getList().get(i).getAdmissionTypeCode())) {
+					amt = orderInfo.getBody().getList().get(i).getTotalPayAmount() * -1;
+				}
+
+				cancelAmount += amt;
+			}
+			params.add("cancelAmount", String.valueOf(cancelAmount));
+		} else {
+			params.add("cancelAmount", String.valueOf(order.getCnclRtnAmt()));
+		}
+		
+		// 취소 요청자 설정
+		String cancelRequester = "2";
+		if (StringUtils.isNotBlank(order.getCancelRequester())) {
+			cancelRequester = order.getCancelRequester();
+		}
+		params.add("cancelRequester", cancelRequester);
+
+		// 카카오페이 API 전송
+		NaverPay naverPay = naverPayApi.naverPaymentApi(params, cancelPaymentUrl);
+
+		// 카카오페이 API 전송 결과 처리
+		Payment payment = new Payment();
+		int statusCode = naverPay.getStatusCode();
+
+		// 승인 성공일때 200
+		if (statusCode == 200) {
+			payment.setPgTradeNo(naverPay.getBody().getPayHistId());
+			payment.setPgTid(naverPay.getBody().getPaymentId());
+			payment.setOrdNo(order.getOrdNo());
+			payment.setCustNo(order.getCustNo());
+			payment.setNaverMethodType(naverPay.getBody().getPrimaryPayMeans());
+			payment.setPayAmt(naverPay.getBody().getPrimaryPayCancelAmount() + naverPay.getBody().getNpointCancelAmount());
+		}
+
+		payment.setResCd(naverPay.getCode());
+		payment.setResMsg(naverPay.getMessage());
+
+		return payment;
+	}
 }

+ 77 - 27
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -22,6 +22,7 @@ import com.style24.core.biz.dao.TscPointDao;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Payment;
 import com.style24.persistence.domain.Point;
 
 import lombok.extern.slf4j.Slf4j;
@@ -966,23 +967,30 @@ public class TscOrderService {
 	 * @since 2021. 02. 02
 	 */	
 	@SuppressWarnings({ "unchecked", "rawtypes" })
-	public GagaMap getCartDelvGoodsCntList(Collection<Order> cartGoodsList) {
+	public GagaMap getCartDelvGoodsCntList(Collection<Order> cartGoodsList, Order orderInfo) {
 		
 		// 1. 장바구니 상품 배송단위별 건수 체크 로직 (자사:총알배송, 자사:일반배송, 입점업체, 예약배송)
 		GagaMap resultMap = new GagaMap();
 		
-		int shotCnt			= 0; // 자사총알배송 건수
-		int wmsCnt 			= 0; // 자사일반배송 건수
-		int resCnt 			= 0; // 자사예약배송 건수
-		int delvCnt 		= 0; // 업체직배송 건수
-		int delvFeeTotCnt 	= 0; // 배송단위 총 건수
-		int delvTotCnt		= 0; // 배송 총 건수
+		int shotCnt				= 0; // 자사총알배송 건수
+		int wmsCnt 				= 0; // 자사일반배송 건수
+		int shotWmsCnt 			= 0; // 자사총알,일반배송 건수
+		int resCnt 				= 0; // 자사예약배송 건수
+		int delvCnt 			= 0; // 업체직배송 건수
+		int delvFeeCdCnt 		= 0; // 배송정책단위 총 건수
+		int goodsTotCnt			= 0; // 상품 총 건수
+		
+		String foreignBuyYn 	= "N"; // 해외구매대행여부
+		String orderMadeYn 		= "N"; // 주문제작상품여부
 		
 		Collection<Order> shotCartList 						= (Collection<Order>)new ArrayList();					// 자사 총알배송
 		Collection<Order> wmsCartList 						= (Collection<Order>)new ArrayList();					// 자사 일반배송
+		Collection<Order> shotWmsCartList 					= (Collection<Order>)new ArrayList();					// 자사 총알,일반배송
 		Collection<Order> resCartList 						= (Collection<Order>)new ArrayList();					// 자사 예약배송
 		Collection<Order> delvCartList 						= (Collection<Order>)new ArrayList();					// 입점 일반배송
 		Collection<Collection<Order>> delvAllCartList 		= (Collection<Collection<Order>>)new ArrayList();		// 배송전체목록
+		Collection<Collection<Order>> delvCartGoodsList 	= (Collection<Collection<Order>>)new ArrayList();		// 장바구니상품목록
+		
 		
 		List<Order> delvFeeCdList 		= (ArrayList<Order>)new ArrayList();
 		int ordAmt 						= 0; // 주문금액
@@ -1008,8 +1016,13 @@ public class TscOrderService {
 			order.setOrgCurrPrice(order.getOrgCurrPrice() * order.getGoodsQty());
 			
 			// 1.3 배송정책별 상품 구분
-			// 1.3.1 자사일반배송
-			if ("WMS".equals(order.getResDelvFeeCd())) {
+			// 1.3.1 자사총알배송
+			if ("SHOT".equals(order.getResDelvFeeCd())) {
+				shotCartList.add(order);
+				shotCnt++;
+			}
+			// 1.3.2 자사일반배송
+			else if ("WMS".equals(order.getResDelvFeeCd())) {
 				wmsCartList.add(order);
 				wmsCnt++;
 			} 
@@ -1023,7 +1036,7 @@ public class TscOrderService {
 				delvCartList.add(order);
 				delvCnt++;
 			}
-			delvTotCnt++;
+			goodsTotCnt++;
 			
 			// 1.4 배송단위별 배송비 설정
 			// 다다익선 할인 금액 적용
@@ -1062,6 +1075,16 @@ public class TscOrderService {
 				order.setSumOrdAmt(ordAmt);
 				delvFeeCdList.add(order);
 			}
+			
+			// 1.5 해외구매대행여부체크
+			if ("Y".equals(order.getForeignBuyYn())) {
+				foreignBuyYn = "Y";
+			}
+			
+			// 1.6 주문제작여부체크
+			if ("Y".equals(order.getOrderMadeYn())) {
+				orderMadeYn = "Y";
+			}
 		}
 		
 		// 배송비
@@ -1078,41 +1101,68 @@ public class TscOrderService {
 		}
 		
 		// 입점업체건수 적용
-		delvFeeTotCnt = delvCnt;
+		delvFeeCdCnt = delvCnt;
 		
 		// 자사총알배송건수 추가
 		if (shotCnt > 0) {
-			delvFeeTotCnt++;
+			delvFeeCdCnt++;
 		}
 		
 		// 자사일반배송건수 1추가
 		if (wmsCnt > 0) {
-			delvFeeTotCnt++;
+			delvFeeCdCnt++;
 		}
 		
 		// 자사예약배송건수 1추가
 		if (resCnt > 0) {
-			delvFeeTotCnt++;
+			delvFeeCdCnt++;
 		}
 		
-		delvAllCartList.add(shotCartList);
-		delvAllCartList.add(wmsCartList);
-		delvAllCartList.add(delvCartList);
-		delvAllCartList.add(resCartList);
-
-		resultMap.set("wmsCnt"				, wmsCnt);				// 자사몰 일반배송건수
+		shotWmsCnt = shotCnt + wmsCnt;
+		
+		// 총알배송, 일반배송 
+		shotWmsCartList.addAll(shotCartList);
+		shotWmsCartList.addAll(wmsCartList);
+		
+		// 전체배송정보
+		// 총알배송일때 배송정보 목록 분기처리
+		if ("Y".equals(orderInfo.getShotDelvYn())) {
+			delvAllCartList.add(shotCartList);						// index 0
+			delvAllCartList.add(wmsCartList);						// index 1
+		} else {
+			// 배송카운트(총알배송 + 일반배송)
+			shotCnt 	= 0;
+			wmsCnt 		= shotWmsCnt;
+			
+			delvAllCartList.add(null);								// index 0
+			delvAllCartList.add(shotWmsCartList);					// index 1
+		}
+		
+		delvAllCartList.add(delvCartList);							// index 4
+		delvAllCartList.add(resCartList);							// index 5
+		
+		delvCartGoodsList.add(shotCartList);
+		delvCartGoodsList.add(wmsCartList);
+		delvCartGoodsList.add(delvCartList);
+		delvCartGoodsList.add(resCartList);
+		
+		resultMap.set("delvFeeCdCnt"		, delvFeeCdCnt);		// 배송타입건수
+		resultMap.set("shotCnt"				, shotCnt);				// 자사몰 총알배송건수
+		resultMap.set("wmsCnt"				, wmsCnt);				// 자사몰 일반배송건수(총알배송불가)
+		resultMap.set("shotWmsCnt"			, shotWmsCnt);			// 자사몰 총알,일반배송건수(총알배송불가)
 		resultMap.set("resCnt"				, resCnt);				// 자사몰 예약배송건수
 		resultMap.set("delvCnt"				, delvCnt);				// 입점업체 배송건수
-		resultMap.set("delvTotCnt"			, delvTotCnt);			// 배송유형건수
-		resultMap.set("delvFeeTotCnt"		, delvFeeTotCnt);		// 전체배송건수
-		resultMap.set("shotCartList"		, shotCartList);		// 자사총알배송상품목록
-		resultMap.set("wmsCartList"			, wmsCartList);			// 자사일반배송상품목록
-		resultMap.set("resCartList"			, resCartList);			// 자사예약배송상품목록
-		resultMap.set("delvAllCartList"		, delvAllCartList);		// 전체배송목록 sort
-		resultMap.set("delvCartList"		, delvCartList);		// 입점업체상품목록
+		
+		resultMap.set("goodsTotCnt"			, goodsTotCnt);			// 전체상품건수
+		resultMap.set("delvAllCartList"		, delvAllCartList);		// 전체배송단위목록 sort
+		resultMap.set("delvCartGoodsList"	, delvCartGoodsList);	// 장바구니상품목록 sort
+		
 		resultMap.set("sumDelvFee"			, sumDelvFee);			// 배송비합계
 		resultMap.set("delvFeeCdList"		, delvFeeCdList);		// 배송업체목록
 		
+		resultMap.set("foreignBuyYn"		, foreignBuyYn);		// 해외구매대행여부
+		resultMap.set("orderMadeYn"			, orderMadeYn);			// 주문제작여부
+		
 		return resultMap;
 	}
 	

+ 43 - 7
src/main/java/com/style24/core/biz/thirdparty/NaverPayApi.java

@@ -2,6 +2,7 @@ package com.style24.core.biz.thirdparty;
 
 import java.net.URI;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.http.HttpEntity;
@@ -41,23 +42,20 @@ public class NaverPayApi {
 	private RestTemplate restTemplate;
 
 	/**
-	 * 네이버페이 API
+	 * 네이버페이 JSON API
 	 *
 	 * @param Order
 	 * @return GagaMap
 	 * @author card007
 	 * @since 2021. 03. 07
 	 */
-	public NaverPay naverPaymentApi(NaverPay params, String apiUrl) {
+	public NaverPay naverPaymentJsonApi(NaverPay params, String apiUrl) {
 		NaverPay naverPay;
 		try {
 			HttpHeaders headers = new HttpHeaders();
 			headers.setContentType(MediaType.APPLICATION_JSON);
-			headers.set("X-Naver-Client-Id", "8TSWSyJMMUvOLKUySQx6");
-			headers.set("X-Naver-Client-Secret", "oGXnO7cMD1");
-			// headers.set("X-Naver-Client-Id", env.getProperty("naver.clientId"));
-			// headers.set("X-Naver-Client-Secret", env.getProperty("naver.clientSecret"));
-			
+			headers.set("X-Naver-Client-Id", env.getProperty("naverPay.clientId"));
+			headers.set("X-Naver-Client-Secret", env.getProperty("naverPay.clientSecret"));
 
 			HttpEntity<NaverPay> request = new HttpEntity<>(params, headers);
 			URI url = URI.create(apiUrl);
@@ -79,4 +77,42 @@ public class NaverPayApi {
 
 		return naverPay;
 	}
+
+	/**
+	 * 네이버페이 API
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 08
+	 */
+	public NaverPay naverPaymentApi(MultiValueMap<String, String> params, String apiUrl) {
+		// 취소가 완료되기까지 시간이 걸리므로, Timeout 시간을 최소 60초로 설정해야 합니다
+		NaverPay naverPay;
+		try {
+			HttpHeaders headers = new HttpHeaders();
+			headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+			headers.set("X-Naver-Client-Id", env.getProperty("naverPay.clientId"));
+			headers.set("X-Naver-Client-Secret", env.getProperty("naverPay.clientSecret"));
+
+			HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
+			URI url = URI.create(apiUrl);
+
+			ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+			log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+			String jsonResult = responseEntity.getBody();
+			log.info("responseEntity.getBody(): {} ", jsonResult);
+
+			Gson gson = new GsonBuilder().create();
+			naverPay = gson.fromJson(jsonResult, NaverPay.class);
+			naverPay.setStatusCode(responseEntity.getStatusCode().value());
+
+		} catch (Exception e) {
+			// throw new IllegalStateException(message.getMessage("FAIL_0004"));
+			throw new IllegalStateException(e.getMessage());
+		}
+
+		return naverPay;
+	}
 }

+ 4 - 4
src/main/java/com/style24/core/support/env/TscConstants.java

@@ -293,9 +293,9 @@ public class TscConstants {
 
 	// 결제상태
 	public enum PaymentStat {
-		PAYMENT_WAIT("G016_00"),			// 결제대기
+		PAYMENT_WAIT("G016_00"),				// 결제대기
 		PAYMENT_SUCCESS("G016_20"),			// 결제성공
-		PAYMENT_COMPLETE("G016_30"),		// 결제완료
+		PAYMENT_COMPLETE("G016_30"),			// 결제완료
 		DB_FAIL("G016_97"),					// 결제성공후DB실패
 		PAYMENT_CANCEL("G016_99");			// 결제취소
 
@@ -312,8 +312,8 @@ public class TscConstants {
 
 	// 결제수단
 	public enum PayMeans {
-		ACCOUNT_TRANSFER("G014_10"),	// 실시간계좌이체
-		BANK_DEPOSIT("G014_20"),		// 무통장입금
+		ACCOUNT_TRANSFER("G014_10"),		// 실시간계좌이체
+		BANK_DEPOSIT("G014_20"),			// 무통장입금
 		CREDIT_CARD("G014_30"),			// 신용카드
 		POINT("G014_40"),				// 포인트
 		COUPON("G014_50"),				// 쿠폰

+ 86 - 1
src/main/java/com/style24/persistence/domain/NaverPay.java

@@ -1,6 +1,7 @@
 package com.style24.persistence.domain;
 
 import java.util.Collection;
+import java.util.List;
 
 import com.style24.persistence.TscBaseDomain;
 
@@ -28,11 +29,95 @@ public class NaverPay extends TscBaseDomain {
 	private int statusCode;						// 요청상태코드
 	private String code;						// 결과코드
 	private String message;						// 결과메세지
+	private String paymentId;					// 결제번호
+	private String startTime;					// 주문조회 시작일시
+	private String endTime;						// 주문조회 종료일시
+	private String approvalType;				// 주문조회 타입 (ALL:전체, APPROVAL:승인, CANCEL:취소, CANCEL_FAIL:취소실패)
+	private int pageNumber;						// 조회하고자 하는 페이지번호 (값이 없으면 1로 간주)
+	private int rowsPerPage;					// 페이지 당 row 건수 (1~100까지 지정 가능하며, 값이 없으면 20으로 간주)
 	private Body body;
-	
+
 	@Data
 	public class Body {
 		private String reserveId;				// 결제예약키
+		private String paymentId;				// 결제번호
+		private Detail detail;					// 네이버페이 결제결과 상세정보
+		private String payHistId;				// 취소 결제 번호
+		private String primaryPayMeans;			// 취소 처리된 주 결제 수단(CARD: 신용카드, BANK: 계좌 이체)
+		private int primaryPayCancelAmount;		// 주 결제 수단 취소 금액
+		private int primaryPayRestAmount;		// 추가로 취소 가능한 주 결제 수단 잔여 결제 금액
+		private int npointCancelAmount;			// 네이버페이 포인트 취소 금액
+		private int npointRestAmount;			// 추가로 취소 가능한 네이버페이 포인트 잔여 결제 금액
+		private String cancelYmdt;				// 취소 일시(YYYYMMDDHH24MMSS)
+		private int totalRestAmount;			// 추가로 취소 가능한 전체 잔여 결제 금액(primaryPayRestAmount + npointRestAmount)
+		private List<PaymentInfo> list;			// 결제 내역 배열
+		private int totalCount;					// 조회조건에 대한 전체건수
+		private int responseCount;				// 현재 페이지에 대한 응답건수
+		private int totalPageCount;				// 전체 페이지 개수
+		private int currentPageNumber;			// 응답 된 현재 페이지 번호
+
+		@Data
+		public class Detail {
+			private String paymentId;				// 네이버페이 결제번호
+			private String payHistId;				// 네이버페이 결제 이력 번호
+			private String merchantId;				// 가맹점 아이디 (가맹점센터 로그인 아이디)
+			private String merchantName;			// 가맹점명
+			private String merchantPayKey;			// 가맹점의 결제번호
+			private String merchantUserKey;			// 가맹점의 사용자 키
+			private String admissionTypeCode;		// 결제승인 유형 (01:원결제 승인건, 03:전체취소 건, 04:부분취소 건)
+			private String admissionYmdt;			// 결제/취소 일시(YYYYMMDDHH24MMSS)
+			private String tradeConfirmYmdt;		// 거래완료 일시(정산기준날짜, YYYYMMDDHH24MMSS)
+			private String admissionState;			// 결제/취소 시도에 대한 최종결과 (SUCCESS:완료, FAIL:실패)
+			private int totalPayAmount;				// 총 결제/취소 금액
+			private int primaryPayAmount;			// 주 결제 수단 결제/취소 금액
+			private int npointPayAmount;			// 네이버페이 포인트 결제/취소 금액
+			private String primaryPayMeans;			// 주 결제 수단 (CARD:신용카드, BANK:계좌이체)
+			private String cardCorpCode;			// 주 결제 수단 카드사
+			private String cardNo;					// 일부 마스킹 된 신용카드 번호
+			private String cardAuthNo;				// 카드승인번호
+			private int cardInstCount;				// 할부 개월 수 (일시불은 0)
+			private String bankCorpCode;			// 주 결제 수단 은행
+			private String bankAccountNo;			// 일부 마스킹 된 계좌 번호
+			private String productName;				// 상품명
+			private Boolean settleExpected;			// 정산 예정 금액과 결제 수수료 금액이 계산되었는지 여부
+			private int settleExpectAmount;			// 정산 예정 금액
+			private int payCommissionAmount;		// 결제 수수료 금액
+		}
+
+		@Data
+		public class PaymentInfo {
+			private String paymentId;				// 네이버페이 결제번호
+			private String payHistId;				// 네이버페이 결제 이력 번호
+			private String merchantId;				// 가맹점 아이디 (가맹점센터 로그인 아이디)
+			private String merchantName;			// 가맹점명
+			private String merchantPayKey;			// 가맹점의 결제번호
+			private String merchantUserKey;			// 가맹점의 사용자 키
+			private String admissionTypeCode;		// 결제승인 유형 (01:원결제 승인건, 03:전체취소 건, 04:부분취소 건)
+			private String admissionYmdt;			// 결제/취소 일시(YYYYMMDDHH24MMSS)
+			private String tradeConfirmYmdt;		// 거래완료 일시(정산기준날짜, YYYYMMDDHH24MMSS)
+			private String admissionState;			// 결제/취소 시도에 대한 최종결과 (SUCCESS:완료, FAIL:실패)
+			private int totalPayAmount;				// 총 결제/취소 금액
+			private int primaryPayAmount;			// 주 결제 수단 결제/취소 금액
+			private int npointPayAmount;			// 네이버페이 포인트 결제/취소 금액
+			private String primaryPayMeans;			// 주 결제 수단 (CARD:신용카드, BANK:계좌이체)
+			private String cardCorpCode;			// 주 결제 수단 카드사
+			private String cardNo;					// 일부 마스킹 된 신용카드 번호
+			private String cardAuthNo;				// 카드승인번호
+			private int cardInstCount;				// 할부 개월 수 (일시불은 0)
+			private String bankCorpCode;			// 주 결제 수단 은행
+			private String bankAccountNo;			// 일부 마스킹 된 계좌 번호
+			private String productName;				// 상품명
+			private SettleInfo settleInfo;			// 정산 데이터 그룹
+
+			@Data
+			public class SettleInfo {
+				private Boolean settleCreated;			// 정산 데이터 생성 여부
+				private int primarySettleAmount;		// 주결제수단 정산 입금금액
+				private int primaryCommissionAmount;	// 주결제수단 정산 수수료 금액
+				private int npointSettleAmount;			// 네이버페이 포인트 정산 입금금액
+				private int npointCommissionAmount;		// 네이버페이 정산 수수료 금액
+			}
+		}
 	}
 
 }

+ 10 - 0
src/main/java/com/style24/persistence/domain/Order.java

@@ -92,6 +92,7 @@ public class Order extends TscBaseDomain {
 	private String soldoutRegDt;					// 품절등록일자
 	private int delvAddrSq;							// 주문배송지시퀀스번호
 	private String shotDelvYn;						// 총알배송여부
+	private String shotDelvUseYn;					// 총알배송사용여부(장바구니)
 	private String giftPackYn;						// 선물포장여부
 	
 	private String delvLocCd;						// 출고처코드
@@ -158,6 +159,9 @@ public class Order extends TscBaseDomain {
 	private String search;							// 검색어
 	private int productNo;							// 상품번호
 	
+	private String foreignBuyYn;					// 해외구매대행가능여부
+	private String orderMadeYn;						// 주문제작상품여부
+	
 	/* Multi CheckBox 항목 */
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiBrand;					// 브랜드코드배열
@@ -274,6 +278,7 @@ public class Order extends TscBaseDomain {
 	private int usePoint;
 	private int seq;
 	private String userNm;
+	private String allYn;
 	
 	// 환불계좌칼럼
 	private String raBank;
@@ -529,6 +534,11 @@ public class Order extends TscBaseDomain {
 
 	// 네이버페이
 	private String returnUrl;
+	private String paymentId;
+	private String startTime;
+	private String endTime;
+	private String approvalType;
+	private String cancelRequester;
 
 	// 암호화 대상 복호화 처리
 	public String getCustNm() {

+ 6 - 2
src/main/java/com/style24/persistence/domain/Payment.java

@@ -28,8 +28,9 @@ public class Payment extends TscBaseDomain {
 	private int custNo;				// 고객번호
 	private String payGb;			// 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
 	private String payDt;			// 결제일자
-	private String pgMeans;			// 결제수단
+	private String payMeans;		// 결제수단
 	private String pgGb;			// PG구분
+	private String payStat;			// 결제 상태
 	private String pgTid;			// PG TID
 	private String pgTradeNo;		// PG거래번호(승인번호)
 	private String pgShopId;		// PG가맹점ID
@@ -74,11 +75,14 @@ public class Payment extends TscBaseDomain {
 	private String resCd;			// 결과코드
 	private String resMsg;			// 결과메세지
 	
-	// KAKAOPAY
+	// KakaoPay
 	private String kakaoMethodType;	// 결제 수단, CARD 또는 MONEY 중 하나
 	private int kakaoPoint;			// 사용한 포인트 금액
 	private int kakaoDiscount;		// 할인 금액
 	private String createDt;		// 결제 준비 요청 시각
 	private String approveDt;		// 결제 승인 시각
 	private String status;			// 카카오페이 결제 상태
+	
+	// NaverPay
+	private String naverMethodType;	// 주 결제 수단 (CARD:신용카드, BANK:계좌이체)
 }

+ 1 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscFreegift.xml

@@ -110,6 +110,7 @@
 		     , FGV.FREEGIFT_SQ 
 		     , FGV.USE_POINT
 		     , FGV.ITEM_QTY
+		     , FG.ALL_YN
 		     , G.PRODUCT_NO
 		     , G.PRODUCT_CODE 
 		     , G.GOODS_NM 

+ 76 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -1657,6 +1657,9 @@
 			 , CASE WHEN #{frontGb} IN ('P')      AND Z.PRE_PPNT_USABLE_YN IN ('Y') THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_PRATE/100)
 			        WHEN #{frontGb} IN ('M', 'A') AND Z.PRE_MPNT_USABLE_YN IN ('Y') THEN (Z.CURR_PRICE * Z.GOODS_QTY) * (Z.PNT_MRATE/100)
 					 END AS PRE_PNT_DC_AMT
+			 , Z.SHOT_DELV_YN
+			 , Z.FOREIGN_BUY_YN
+			 , Z.ORDER_MADE_YN
 		FROM  ( SELECT CA.CART_SQ
 					 , CD.CART_DTL_SQ
 					 , BR.BRAND_ENM
@@ -1690,6 +1693,7 @@
 					 , CASE WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
 							ELSE DFP.DELV_FEE_CD END AS DELV_FEE_CD
 					 , CASE WHEN GRS.DELV_RES_DT IS NOT NULL THEN 'RES'
+					        WHEN GQDS.GOODS_CD IS NULL AND G.SELF_GOODS_YN = 'Y' THEN 'SHOT'
 							WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
 							ELSE DFP.DELV_FEE_CD END AS RES_DELV_FEE_CD
 		             , DATE_FORMAT(GRS.DELV_RES_DT, '%Y.%m.%d') AS DELV_RES_DT
@@ -1704,6 +1708,12 @@
 							ELSE '00' END AS COLOR_CD
 					 , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
 							ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM
+					 , CASE WHEN GQDS.GOODS_CD IS NULL 
+					        THEN 'Y'
+					        ELSE 'N'
+					         END SHOT_DELV_YN
+					 , G.FOREIGN_BUY_YN
+					 , G.ORDER_MADE_YN
 				  FROM TB_CART CA
 				 INNER JOIN TB_CART_DETAIL CD
 					ON CA.CART_SQ = CD.CART_SQ
@@ -1728,6 +1738,8 @@
 				    ON CA.CUST_NO = CT.CUST_NO
 				  LEFT OUTER JOIN TB_GOODS_ORDER_GRADE GOG
 				    ON G.GOODS_CD = GOG.GOODS_CD
+				  LEFT OUTER JOIN TB_GOODS_QUICK_DELEVERY_SKIP GQDS
+				    ON G.GOODS_CD = GQDS.GOODS_CD
 				 WHERE 1 = 1
 				   AND G.GOODS_STAT = 'G008_90'
 				<if test="custNo == 0">
@@ -1770,6 +1782,9 @@
 		     , Z.PNT_PRATE
 		     , Z.PNT_MRATE
 			 , Z.SYS_IMG_NM
+			 , Z.SHOT_DELV_YN
+			 , Z.FOREIGN_BUY_YN
+			 , Z.ORDER_MADE_YN
 		ORDER  BY Z.SUPPLY_COMP_CD
 				, Z.DELV_FEE_CD
 				, Z.GOODS_CD
@@ -2142,6 +2157,67 @@
 			#{item}
 		</foreach>
 	</insert>
+
+	<insert id="insertPaymentForRollback" parameterType="Payment">
+		/* TscOrder.insertPaymentForRollback : 롤백 취소 데이터 등록 */
+		INSERT INTO TB_PAYMENT (
+			  ORD_NO
+			, PAY_DT
+			, PAY_MEANS
+			, PAY_AMT
+			, PG_CPN_AMT
+			, NPAY_PNT_AMT
+			, PAY_GB
+			, PAY_STAT
+			, PG_GB
+			, PG_TID
+			, PG_TRADE_NO
+			, PG_SHOP_ID
+			, CARD_TYPE
+			, CARD_KIND
+			, CARD_BANK
+			, CARD_NM
+			, CARD_MIPS
+			, CARD_PCABLE_YN
+			, VA_NO
+			, VA_NM
+			, VA_BANK
+			, VA_DEADLINE
+			, TELECOM
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			  #{ordNo}
+			, NOW()
+			, #{payMeans}
+			, -#{payAmt}
+			, -#{pgCpnAmt}
+			, -#{npayPntAmt}
+			, 'E'
+			, #{payStat}
+			, #{pgGb}
+			, #{pgTid}
+			, #{pgTradeNo}
+			, #{pgShopId}
+			, #{cardType}
+			, #{cardKind}
+			, #{cardBank}
+			, #{cardNm}
+			, #{cardMips}
+			, #{cardPcableYn}
+			, #{vaNo}
+			, #{vaNm}
+			, #{vaBank}
+			, DATE_FORMAT(#{vaDeadline} , '%Y%m%d%H%i%S')
+			, #{telecom}
+			, #{regNo}
+			, NOW()
+			, #{regNo}
+			, NOW()
+		)
+	</insert>
 </mapper>