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

보증보험, 현금영수증 취소 처리

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

+ 10 - 3
src/main/java/com/style24/core/biz/dao/TscOrderDao.java

@@ -2,8 +2,6 @@ package com.style24.core.biz.dao;
 
 import java.util.Collection;
 
-import org.apache.ibatis.session.ResultHandler;
-
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
@@ -813,7 +811,16 @@ public interface TscOrderDao {
 	 * @author xodud1202
 	 * @since 2021.04.23
 	 */
-	GiftCard getGiftCardReceiptInfo(GiftCard param);
+	GiftCard getGiftCardReceiptInfo(Integer ordNo);
+
+	/**
+	 * 주문 현금영수증 정보 조회
+	 * 
+	 * @param GiftCard
+	 * @author card007
+	 * @since 2021. 05. 10
+	 */
+	GiftCard getOrderCashReceiptsInfo(Integer ordNo);
 
 	/**
 	 * 보증보험 정보 조회

+ 10 - 9
src/main/java/com/style24/core/biz/service/TscKcpService.java

@@ -428,9 +428,7 @@ public class TscKcpService {
 	 * KCP 현금영수증 취소 신청 API
 	 * param.setModType("STSQ");	// 요청 구분 (STSQ : 조회, STSC : 전체취소, STPC : 부분취소) >> 조회는 사용 안함 > result 안받음. 사용시 result 추가활것.
 	 * param.setOrdNo(100);			// 주문번호
-	 *
-	 * * 부분취소시 추가 금액
-	 * param.setUsGfcdAmt(3000);	// 부분취소 요청 금액
+	 * param.setUsGfcdAmt(3000);	// 취소 요청 금액
 	 *
 	 * @param GiftCard
 	 * @author xodud1202
@@ -445,7 +443,7 @@ public class TscKcpService {
 		String txCd = "07030000";	// 현금영수증 조회 요청
 
 		// 현금영수증 정보 조회
-		GiftCard receiptInfo = orderDao.getGiftCardReceiptInfo(param);
+		// GiftCard receiptInfo = orderDao.getGiftCardReceiptInfo(param);
 
 		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"));
@@ -465,13 +463,13 @@ public class TscKcpService {
 		// 부분 취소
 		if("STPC".equals(param.getModType())) {
 			c_PayPlus.mf_set_us( mod_data_set_no, "mod_mny"  , String.valueOf(param.getUsGfcdAmt()));	// 부분취소 요청 금액
-			c_PayPlus.mf_set_us( mod_data_set_no, "rem_mny"  , String.valueOf(receiptInfo.getAmt()));	// 잔여금액 (부분취소 이전에 남은 금액)
+			c_PayPlus.mf_set_us( mod_data_set_no, "rem_mny"  , String.valueOf(param.getAmt()));			// 잔여금액 (부분취소 이전에 남은 금액)
 		}
 
 		c_PayPlus.mf_set_us( mod_data_set_no, "mod_type"  , param.getModType()) ;
-		c_PayPlus.mf_set_us( mod_data_set_no, "mod_value" , receiptInfo.getTradeNo()) ;
+		c_PayPlus.mf_set_us( mod_data_set_no, "mod_value" , param.getTradeNo()) ;
 		c_PayPlus.mf_set_us( mod_data_set_no, "mod_gubn"  , "MG01"  ) ;
-		c_PayPlus.mf_set_us( mod_data_set_no, "trad_time" , receiptInfo.getTradeTime()) ;
+		c_PayPlus.mf_set_us( mod_data_set_no, "trad_time" , param.getTradeTime()) ;
 
 		// 실행
 		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), "", txCd, cust_ip, String.valueOf(param.getOrdNo()), env.getProperty("pg.kcp.log.level"), "0");
@@ -488,8 +486,11 @@ public class TscKcpService {
 				result.setTradeNo(c_PayPlus.mf_get_res("cash_no"));
 				result.setAuthNo(c_PayPlus.mf_get_res("receipt_no"));
 
-				// 성공시 TB_GIFTCARD_RECEIPT AMT UPDATE
-				orderDao.updateGiftCardReceipt(result);
+				// 상품권 현금영수증 취소 시 금액 업데이트 처리
+				if ("giftCard".equals(param.getCashReceiptsGb())) {
+					// 성공시 TB_GIFTCARD_RECEIPT AMT UPDATE
+					orderDao.updateGiftCardReceipt(result);
+				}
 			}
 
 			// 성공이든 실패이든 로그성 데이터 TB_GIFTCARD_RECEIPT_API INSERT

+ 61 - 25
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -252,6 +252,7 @@ public class TscOrderChangeService {
 
 		// 3. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
 		List<Payment> pgList = new ArrayList<>();
+		List<GiftCard> cashReceiptsList = new ArrayList<>();
 		for (Order obj : cancelDelvRefundList) {
 			// 취소금액 있을 시 처리
 			if (obj.getCnclRtnAmt() > 0) {
@@ -365,7 +366,18 @@ public class TscOrderChangeService {
 							}
 						}
 
-						// 3-2-7. 주문변경상세정보 및 이력 등록
+						// 3-2-7. 상품권 현금영수증 PG 취소 정보 설정
+						GiftCard giftCardCashReceipts = orderDao.getGiftCardReceiptInfo(ordNo);
+
+						if (StringUtils.isNotBlank(giftCardCashReceipts.getTradeNo())) {
+							giftCardCashReceipts.setModType("STPC");
+							giftCardCashReceipts.setCashReceiptsGb("giftCard");
+							giftCardCashReceipts.setUsGfcdAmt(gfcdUseAmt);
+							
+							cashReceiptsList.add(giftCardCashReceipts);
+						}
+
+						// 3-2-8. 주문변경상세정보 및 이력 등록
 						OrderChange changeDetailPo = new OrderChange();
 						changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
 						changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
@@ -493,6 +505,16 @@ public class TscOrderChangeService {
 
 					orderChangeDao.createDeliveryFee(delvFeeOrder);
 				}
+
+				// 3-7. 주문 현금영수증 취소 정보 설정 (무통장입금 결제완료, 실시간계좌이체)
+				GiftCard orderCashReceipts = orderDao.getOrderCashReceiptsInfo(ordNo);
+				if (StringUtils.isNotBlank(orderCashReceipts.getTradeNo())) {
+					orderCashReceipts.setModType("STPC");
+					orderCashReceipts.setCashReceiptsGb("payment");
+					orderCashReceipts.setUsGfcdAmt(pg.getPartCancelAmt());
+
+					cashReceiptsList.add(orderCashReceipts);
+				}
 			}
 		}
 
@@ -561,16 +583,11 @@ public class TscOrderChangeService {
 			refundOrder.setUpdNo(userNo);
 
 			orderChangeDao.updateRefundInfo(refundOrder);
-
-			// 8. 현금영수증 취소 처리 (무통장입금 결제완료, 실시간계좌이체)
-			if (StringUtils.isNotBlank(cashAuthNo)) {
-				GiftCard cashReceipts = new GiftCard();
-				cashReceipts.setModType("STPC");
-				cashReceipts.setOrdNo(ordNo);
-				cashReceipts.setGfcdAmt(pg.getPartCancelAmt());
-
-				kcpService.kcpCashReceiptCancel(cashReceipts);
-			}
+		}
+		
+		// 7. 현금영수증 취소 처리
+		for (GiftCard cashReceipts : cashReceiptsList) {
+			kcpService.kcpCashReceiptCancel(cashReceipts);
 		}
 
 		return map;
@@ -2203,6 +2220,7 @@ public class TscOrderChangeService {
 		}
 
 		// 1. 주문변경 및 변경상세 정보 설정
+		List<GiftCard> cashReceiptsList = new ArrayList<>();
 		OrderChange orderChangeDetail = new OrderChange();
 		orderChangeDetail.setOrdNo(ordNo);
 		orderChangeDetail.setChgGb(chgGb);
@@ -2286,7 +2304,18 @@ public class TscOrderChangeService {
 			orderChangeDao.updateCustGiftCardRollback(giftCard);
 		}
 
-		// 5. 상품재고원복 (품절취소가 아닐 경우)
+		// 5. 상품권 현금영수증 PG 취소 정보 설정
+		GiftCard giftCardCashReceipts = orderDao.getGiftCardReceiptInfo(ordNo);
+
+		if (StringUtils.isNotBlank(giftCardCashReceipts.getTradeNo())) {
+			giftCardCashReceipts.setModType("STSC");
+			giftCardCashReceipts.setCashReceiptsGb("giftCard");
+			giftCardCashReceipts.setUsGfcdAmt(giftCardCashReceipts.getAmt());
+
+			cashReceiptsList.add(giftCardCashReceipts);
+		}
+
+		// 6. 상품재고원복 (품절취소가 아닐 경우)
 		if(!TscConstants.OrderCancelReason.SOLDOUT_CANCEL.value().equals(chgReason)) {
 			OrderChange sellQty = new OrderChange();
 			sellQty.setOrdChgSq(orderChangeDetail.getOrdChgSq());
@@ -2295,7 +2324,7 @@ public class TscOrderChangeService {
 			orderChangeDao.createSellQty(sellQty);
 		}
 
-		// 6. 쿠폰 원복처리
+		// 7. 쿠폰 원복처리
 		Order coupon = new Order();
 		coupon.setOrdNo(ordNo);
 		coupon.setUpdNo(updNo);
@@ -2303,13 +2332,13 @@ public class TscOrderChangeService {
 		orderChangeDao.updateCartCpnRollback(coupon);
 		orderChangeDao.updateDeliveryCpnRollback(coupon);
 
-		// 7. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+		// 8. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
 		Order freegiftOrder = new Order();
 		freegiftOrder.setOrdNo(ordNo);
 		freegiftOrder.setUpdNo(updNo);
 		orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
 
-		// 8. 주문상세 및 주문상세단품 정보 설정
+		// 9. 주문상세 및 주문상세단품 정보 설정
 		OrderChange orderDetail = new OrderChange();
 		orderDetail.setOrdNo(ordNo);
 		orderDetail.setOrdDtlStat(ordDtlStat);
@@ -2324,7 +2353,7 @@ public class TscOrderChangeService {
 		orderChangeDao.updateOrderDetailItemForAllCancel(orderDetail);
 		orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetail);
 		
-		// 9. WMS 취소 처리
+		// 10. WMS 취소 처리
 		List<Order> wmsList = new ArrayList<>();
 		if(orderChange.getOrdDtlNoArr() != null && orderChange.getOrdDtlNoArr().length > 0) {
 			for (int i = 0; i < orderChange.getOrdDtlNoArr().length; i++) {
@@ -2341,7 +2370,7 @@ public class TscOrderChangeService {
 			}
 		}
 
-		// 10. 환불금액 등록
+		// 11. 환불금액 등록
 		Order refundOrder = orderChangeDao.getRefundInfoForAllCancel(vo);
 		refundOrder.setOrdNo(ordNo);
 		refundOrder.setPaySq(0);
@@ -2355,7 +2384,18 @@ public class TscOrderChangeService {
 
 		orderChangeDao.createRefund(refundOrder);
 
-		// 11. PG 연동
+		// 12. 주문 현금영수증 취소 정보 설정 (무통장입금 결제완료, 실시간계좌이체)
+		GiftCard orderCashReceipts = orderDao.getOrderCashReceiptsInfo(ordNo);
+
+		if (StringUtils.isNotBlank(orderCashReceipts.getTradeNo())) {
+			orderCashReceipts.setModType("STSC");
+			orderCashReceipts.setCashReceiptsGb("payment");
+			orderCashReceipts.setUsGfcdAmt(orderCashReceipts.getAmt());
+
+			cashReceiptsList.add(orderCashReceipts);
+		}
+
+		// 13. PG 연동
 		Payment pg = new Payment();
 		pg.setOrdNo(ordNo);
 		pg.setPayGb("O");
@@ -2398,7 +2438,7 @@ public class TscOrderChangeService {
 			orderChangeDao.updateRefundInfo(refundOrder);
 		}
 
-		// 12. 보증보험 취소 처리 (무통장입금 전 전체취소 시 처리)
+		// 14. 보증보험 취소 처리 (무통장입금 전 전체취소 시 처리)
 		if (TscConstants.OrderChangeStat.PAYMENT_BEFORE_CANCEL.value().equals(chgStat)) {
 			Order guarantee = new Order();
 			guarantee.setOrdNo(ordNo);
@@ -2406,12 +2446,8 @@ public class TscOrderChangeService {
 			orderService.uSafeGuaranteePayedBeforeCancel(guarantee);
 		}
 
-		// 13. 현금영수증 취소 처리 (무통장입금 결제완료, 실시간계좌이체)
-		if (StringUtils.isNotBlank(payment.getCashAuthNo())) {
-			GiftCard cashReceipts = new GiftCard();
-			cashReceipts.setModType("STSQ");
-			cashReceipts.setOrdNo(ordNo);
-
+		// 15. 현금영수증 취소 처리
+		for (GiftCard cashReceipts : cashReceiptsList) {
 			kcpService.kcpCashReceiptCancel(cashReceipts);
 		}
 	}

+ 2 - 0
src/main/java/com/style24/persistence/domain/GiftCard.java

@@ -1,6 +1,7 @@
 package com.style24.persistence.domain;
 
 import com.style24.persistence.TscBaseDomain;
+
 import lombok.Data;
 
 /**
@@ -62,4 +63,5 @@ public class GiftCard extends TscBaseDomain {
 	private String ordNm;			// 주문자명
 	private String ordEmail;		// 주문자 E-Mail
 	private String modType;			// 요청 구분 (STSQ : 조회, STSC : 전체취소, STPC : 부분취소)
+	private String cashReceiptsGb;	// 현금영수증 구분 (상품권 : giftCard, 결제 : payment)
 }

+ 22 - 1
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -203,6 +203,7 @@
 								WHERE  Z.BRAND_CD = G2.BRAND_CD) AS BRAND_ENM
 							 , G2.GOODS_CD AS ITEM_CD
 							 , G2.GOODS_NM AS ITEM_NM
+							 , IFNULL((SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 							 , ODI.OPT_CD1
 							 , ODI.OPT_CD2
 							 , OD.EXTMALL_ORDER_ID
@@ -494,6 +495,7 @@
 				 WHERE Z.BRAND_CD = G2.BRAND_CD)       AS BRAND_ENM
 			 , G2.GOODS_CD                             AS ITEM_CD
 			 , G2.GOODS_NM                             AS ITEM_NM
+			 , IFNULL((SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G1.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 			 , ODI.OPT_CD1
 			 , ODI.OPT_CD2
 			 , ODI.ITEM_QTY
@@ -737,6 +739,7 @@
 		     , OC.CHG_GB
 		     , FN_GET_CODE_NM('G680', OC.CHG_GB)       AS CHG_GB_NM
 		     , OD.GOODS_CD
+		     , IFNULL((SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), ODI.OPT_CD1) AS COLOR_NM
 		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2
 		     , OCD.CHG_STAT
@@ -766,6 +769,8 @@
 		    ON OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ
 		 INNER JOIN TB_ORDER_DETAIL OD
 		    ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+		 INNER JOIN TB_GOODS G
+		    ON G.GOODS_CD = OD.GOODS_CD
 		 INNER JOIN (
 		      SELECT X.ORD_DTL_ITEM_SQ
 		           , X.ORD_DTL_NO
@@ -3695,7 +3700,7 @@
 	</update>
 
 	<!-- 상품권 현금영수증 정보 조회 -->
-	<select id="getGiftCardReceiptInfo" parameterType="GiftCard" resultType="GiftCard">
+	<select id="getGiftCardReceiptInfo" parameterType="Integer" resultType="GiftCard">
 		/* TscOrder.getGiftCardReceiptInfo : 상품권 현금영수증 정보 조회 */
 		SELECT GR.ORD_NO
 		     , GR.TRADE_NO
@@ -3707,6 +3712,22 @@
 		ON     GR.ORD_NO = O.ORD_NO
 		WHERE  GR.ORD_NO = #{ordNo}
 	</select>
+
+	<!-- 주문 현금영수증 정보 조회 -->
+	<select id="getOrderCashReceiptsInfo" parameterType="Integer" resultType="GiftCard">
+		/* TscOrder.getOrderCashReceiptsInfo */
+		SELECT P.ORD_NO
+		     , P.CASH_TRADE_NO                      AS TRADE_NO
+		     , P.CASH_AUTH_NO                       AS AUTH_NO
+		     , SUM(P.PAY_AMT)                       AS AMT
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS TRADE_TIME
+		  FROM TB_PAYMENT P
+		 INNER JOIN TB_ORDER O
+		    ON P.ORD_NO = O.ORD_NO
+		 WHERE P.ORD_NO = #{ordNo}
+		   AND P.CASH_TRADE_NO IS NOT NULL
+		 GROUP BY P.ORD_NO, P.CASH_TRADE_NO, P.CASH_AUTH_NO, O.ORD_DT
+	</select>
 	
 	<!-- 포인트사용 기준정보 조회 -->
 	<select id="getPointUseEnvset" resultType="Order">

+ 13 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -2656,6 +2656,19 @@
 		  FROM TB_PAYMENT
 		 WHERE ORD_NO = #{ordNo}
 	</select>
+	
+	<!-- 상품권 현금영수증 신청 정보 조회 -->
+	<select id="getGiftCardReceiptsInfo" parameterType="Integer" resultType="GiftCard">
+		/* TscOrderChange.getGiftCardReceiptsInfo */
+		SELECT ORD_NO
+		     , TRADE_NO
+		     , AUTH_NO
+		     , AMT
+		     , REG_DT
+		     , UPD_DT
+		  FROM TB_GIFTCARD_RECEIPT
+		 WHERE ORD_NO = #{ordNo}
+	</select>
 </mapper>