Explorar el Código

이태영 - 20210306 PG 임시 커밋

xodud1202 hace 5 años
padre
commit
40578b75ca

+ 14 - 8
src/main/java/com/style24/core/biz/dao/TscOrderDao.java

@@ -423,6 +423,20 @@ public interface TscOrderDao {
 	 * @since 2021. 02. 02
 	 */	
 	Collection<Order> getDelvCpnList(Order order);
+
+	/**
+	 * 결제 취소 정보 생성
+	 * @param param
+	 * @return
+	 */
+	void insertPaymentCancel(Payment param);
+
+	/**
+	 * 결제 데이터 생성 중 에러로 인한 결제 취소 데이터 생성
+	 * @param param
+	 * @return
+	 */
+	void insertPaymentRollback(Payment param);
 	
 	/**
 	 * 총알배송 가능 시간 체크
@@ -441,12 +455,4 @@ public interface TscOrderDao {
 	 * @since 2021. 02. 02
 	 */	
 	int getDailyDeliveryZoneInfo(Order order);
-
-	/**
-	 * 결제 후 롤백 취소 데이터 등록
-	 *
-	 * @param param
-	 * @return
-	 */
-	int insertPaymentForRollback(Payment param);
 }

+ 77 - 17
src/main/java/com/style24/core/biz/service/TscKcpService.java

@@ -108,8 +108,8 @@ public class TscKcpService {
 					// 06-3. 가상계좌 승인 결과 처리 (현금영수증은 입금완료 noti에서 입력)
 					result.setVaNm(c_PayPlus.mf_get_res("va_name"));				// 입금할 계좌 예금주
 					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.setVaBank(c_PayPlus.mf_get_res("bank_code"));			// 입금 은행 코드(공통코드 G940)
+					result.setVaDeadline(c_PayPlus.mf_get_res("va_date"));		// 가상계좌 입금마감시간
 					result.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value());	// 결제대기
 				} else if ("000010000000".equals(result.getUsePayMethod())) {
 					// 06-4. 휴대폰 승인 결과 처리
@@ -127,10 +127,6 @@ public class TscKcpService {
 			}
 		}
 
-		log.info("CHECK RESPONSE DATA        ::::: {} / {}", c_PayPlus.toString(), c_PayPlus.getRecvObj().toString());
-		log.info("CHECK RESPONSE RESULT DATA ::::: {}", result.toString());
-		log.info("CHECK RESPONSE PARAM DATA  ::::: {}", param.toString());
-
 		return result;
 	}
 
@@ -172,30 +168,94 @@ public class TscKcpService {
 		return payment;
 	}
 
-	@Transactional("shopTxnManager")
+	/**
+	 * KCP 결제 처리 후 로직 진행 중 에러 발생으로 인한 취소처리
+	 * @param param
+	 * @param request
+	 */
 	public void kcpPayRollBack(Payment param, HttpServletRequest request) {
+		param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
+		param.setPayGb("E");
+		param.setModType("STSC");
+		param.setModDesc("가맹점 결과 처리 오류 - 가맹점에서 취소 요청");
+		kcpCancel(param, request);
+	}
+
+	/**
+	 * KCP 전체 취소 (pgTid, regNo, updNo 필수)
+	 * @param param
+	 * @param request
+	 */
+	public void kcpPayCancelAll(Payment param, HttpServletRequest request) {
+		param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+		param.setPayGb("O");
+		param.setModType("STSC");
+		param.setModDesc("가맹점 취소 - 전체 취소");
+		kcpCancel(param, request);
+	}
+
+	/**
+	 * KCP 부분 취소 (pgTid, regNo, updNo, leftAmt:취소 전 잔여금액, partCancelAmt:부분취소금액 필수)
+	 * @param param
+	 * @param request
+	 */
+	public void kcpPayCancelPart(Payment param, HttpServletRequest request) {
+		param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+		param.setPayGb("O");
+		param.setModType("STPC");
+		param.setModDesc("가맹점 취소 - 부분 취소");
+		kcpCancel(param, request);
+	}
+
+	@Transactional("shopTxnManager")
+	public void kcpCancel(Payment param, HttpServletRequest request) {
 		try {	request.setCharacterEncoding("euc-kr");	} catch(Exception e) {	}
 
 		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
+		Payment payment = new Payment();
 
 		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", "가맹점 결과 처리 오류 - 가맹점에서 취소 요청"); // 변경 사유
+		c_PayPlus.mf_set_us(mod_data_set_no, "tno"		, param.getPgTid());					// KCP 원거래 거래번호
+		c_PayPlus.mf_set_us(mod_data_set_no, "mod_type"	, param.getModType());					// 전체취소 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.getModDesc());					// 변경 사유
+
+		if("STPC".equals(param.getModType())) {
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_mny", param.getPartCancelAmt() + "");	// 취소요청금액
+			c_PayPlus.mf_set_us( mod_data_set_no, "rem_mny", param.getLeftAmt() + "");		// 취소가능잔액
+		}
 
 		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());
+		if("0000".equals(c_PayPlus.m_res_cd)) {
+			payment.setResCd(c_PayPlus.m_res_cd);			// 결과 코드
+			payment.setResMsg(c_PayPlus.m_res_msg);			// 결과 메시지
+			payment.setPgTid(c_PayPlus.mf_get_res("tno"));
+			payment.setPgCpnAmt(-Integer.parseInt(c_PayPlus.mf_get_res("coupon_mny")));
+			if ("STSC".equals(param.getModType())) {
+				payment.setOrdNo(Integer.parseInt(c_PayPlus.mf_get_res("order_no")));			// 전체취소시 return 되는 주문번호
+				payment.setPayAmt(-Integer.parseInt(c_PayPlus.mf_get_res("amount")));			// 전체 취소는 결제 금액 전체
+			} else {
+				payment.setOrdNo(Integer.parseInt(c_PayPlus.mf_get_res("ca_order_id")));			// 부분취소시 return되는 주문번호
+				payment.setPayAmt(-Integer.parseInt(c_PayPlus.mf_get_res("panc_mod_mny")));		// 부분 취소는 취소된 금액
+			}
 
-		param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
-		orderDao.insertPaymentForRollback(param);
+			if ("E".equals(param.getPayGb())) {			// 결제완료 로직 진행 중 에러 발생시
+				param.setPgTid(payment.getPgTid());
+				orderDao.insertPaymentCancel(param);
+			} else {									// 일반 취소 작업
+				payment.setRegNo(param.getRegNo() == null ? 0 : param.getRegNo());
+				payment.setUpdNo(param.getUpdNo() == null ? 0 : param.getUpdNo());
+				payment.setPayGb(param.getPayGb());
+				payment.setPayStat(param.getPayStat());
+				orderDao.insertPaymentCancel(payment);
+			}
+		} else {
+			throw new IllegalArgumentException("결제 취소 실패하였습니다.");
+		}
 	}
 }

+ 4 - 0
src/main/java/com/style24/persistence/domain/Payment.java

@@ -54,12 +54,16 @@ public class Payment extends TscBaseDomain {
 	private int goodMny;			// 결제금액
 	private int shopUserId;			// 가맹점 고객 ID (CUST_NO)
 	private int quotaopt;			// 신용카드 최대 할부개월수
+	private int leftAmt;			// 남은 금액
+	private int partCancelAmt;		// 부분취소금액
 	private Integer vcntExpireTerm;	// 무통장입금 유효기간 설정
 	private String dispTaxYn;		// 현금영수증 노출 여부
 	private String paycoDirect;		// 페이코 직접 호출 변수
 	private String payMthod;		// 페이코 직접 호출 변수
 	private String siteCd;			// 가맹점 상점코드
 	private String siteName;		// 가맹점 명
+	private String modType;			// 취소/부분취소 구분
+	private String modDesc;			// 취소 사유
 	private String moduleType;
 	private String goodExpr;
 	private String buyrName;		// 구매자명

+ 65 - 4
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -2158,8 +2158,69 @@
 		</foreach>
 	</insert>
 
-	<insert id="insertPaymentForRollback" parameterType="Payment">
-		/* TscOrder.insertPaymentForRollback : 롤백 취소 데이터 등록 */
+	<!-- 결제 취소 정보 생성 -->
+	<insert id="insertPaymentCancel" parameterType="Payment">
+		/* TscOrder.insertPaymentCancel : 결제 취소 정보 생성 */
+		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_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 )
+		SELECT #{ordNo}
+			 , NOW()
+			 , PAY_MEANS
+			 , #{payAmt}
+			 , #{pgCpnAmt}
+			 , #{npayPntAmt}
+			 , #{payGb}
+			 , #{payStat}
+			 , PG_GB
+			 , #{pgTid}
+			 , 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
+			 , #{regNo}
+			 , NOW()
+			 , #{updNo}
+			 , NOW()
+		FROM   TB_PAYMENT PAY
+		WHERE  PG_TID = #{pgTid}
+	</insert>
+
+	<!-- 결제 데이터 생성 중 에러로 인한 결제 취소 데이터 생성 -->
+	<insert id="insertPaymentRollback" parameterType="Payment">
+		/* TscOrder.insertPaymentRollback : 결제 데이터 생성 중 에러로 인한 결제 취소 데이터 생성 */
 		INSERT INTO TB_PAYMENT (
 			  ORD_NO
 			, PAY_DT
@@ -2195,7 +2256,7 @@
 			, -#{payAmt}
 			, -#{pgCpnAmt}
 			, -#{npayPntAmt}
-			, 'E'
+			, #{payGb}
 			, #{payStat}
 			, #{pgGb}
 			, #{pgTid}
@@ -2214,7 +2275,7 @@
 			, #{telecom}
 			, #{regNo}
 			, NOW()
-			, #{regNo}
+			, #{updNo}
 			, NOW()
 		)
 	</insert>