Selaa lähdekoodia

[ST24PRJ-500] [결함][BOS] 상품권 환불 이력확인 안됨

card007 4 vuotta sitten
vanhempi
commit
5132f581eb

+ 20 - 0
src/main/java/com/style24/core/biz/dao/TscOrderChangeDao.java

@@ -1117,4 +1117,24 @@ public interface TscOrderChangeDao {
 	 * @since 2021. 05. 31
 	 */
 	int updateOrderChangeChgReason(OrderChange orderChange);
+
+	/**
+	 * 최초 주문상세 번호 조회
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author card007
+	 * @since 2021. 11. 18
+	 */
+	int getFirstOrdDtlNo(Order order);
+
+	/**
+	 * 최초주문상세번호 기준 상품쿠폰 할인액 조회
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author card007
+	 * @since 2021. 11. 19
+	 */
+	int getGoodsCpnDcAmt(Order order);
 }

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

@@ -359,4 +359,13 @@ public interface TscOrderOcmDao {
 	 */
 	void createOrderMemo(ExtmallOrder extmallOrder);
 
+	/**
+	 * 주문상세 최초주문상세번호 수정
+	 *
+	 * @param ExtmallOrder
+	 * @return int
+	 * @author card007
+	 * @since 2021. 11. 18
+	 */
+	int updateOrderDetail(ExtmallOrder extmallOrder);
 }

+ 177 - 955
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -21,6 +21,7 @@ import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.dao.TscNaverPayDao;
 import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.biz.dao.TscOrderDao;
+import com.style24.core.biz.dao.TscPointDao;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.core.support.util.CryptoUtils;
@@ -29,6 +30,7 @@ import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Payment;
+import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.WmsDelivery;
 
 import lombok.extern.slf4j.Slf4j;
@@ -77,6 +79,9 @@ public class TscOrderChangeService {
 	
 	@Autowired
 	private TscDeliveryService deliveryService;
+	
+	@Autowired
+	private TscPointDao pointDao;
 
 	/**
 	 * 주문변경 대상목록 조회 (취소, 반품, 교환)
@@ -357,8 +362,29 @@ public class TscOrderChangeService {
 							index++;
 						}
 
-						// 5-2-4. 사용포인트원복
+						// 5-2-4. 적립예정포인트 수정
+						// 2021.11.19 card007 적립예정포인트는 교환상품의 ORD_DTL_NO로 처리한다.
+						int savePntAmt = vo.getSavePntAmt();
+						vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+						vo.setFirstOrdDtlNo(vo.getOrdDtlNo());
+
+						for (Order point : orderChangeDao.getCustPointHst(vo)) {
+							point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
+							point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
+							point.setOccurDtlDesc("예정포인트적립취소");
+							point.setPntAmt(savePntAmt * -1);
+							point.setRegNo(userNo);
+							point.setUpdNo(userNo);
+
+							// 적립예정포인트 취소 이력 생성
+							orderChangeDao.createCustPointHstRollback(point);
+						}
+
+						// 5-2-5. 사용포인트원복
+						// 2021.11.18 card007 사용포인트 및  원복은 최초주문상세번호로 처리
 						int pntDcAmt = vo.getPntDcAmt();
+						int firstOrdDtlNo = orderChangeDao.getFirstOrdDtlNo(vo);
+						vo.setFirstOrdDtlNo(firstOrdDtlNo);
 						vo.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT.value());
 
 						for (Order point : orderChangeDao.getCustPointHst(vo)) {
@@ -385,25 +411,13 @@ public class TscOrderChangeService {
 							}
 						}
 
-						// 5-2-5. 적립예정포인트 수정
-						int savePntAmt = vo.getSavePntAmt();
-						vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
-
-						for (Order point : orderChangeDao.getCustPointHst(vo)) {
-							point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
-							point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
-							point.setOccurDtlDesc("예정포인트적립취소");
-							point.setPntAmt(savePntAmt * -1);
-							point.setRegNo(userNo);
-							point.setUpdNo(userNo);
-
-							// 적립예정포인트 취소 이력 생성
-							orderChangeDao.createCustPointHstRollback(point);
-						}
-
 						// 5-2-6. 상품쿠폰원복
 						if (leftQty == 0) {
-							orderChangeDao.updateGoodsCpnRollback(vo);
+							// 2021.11.19 card007 FIRST_ORD_DTL_NO 조회해서 GOODS_CPN_AMT = 0이면 원복 해줌
+							int goodsCpnDcAmt = orderChangeDao.getGoodsCpnDcAmt(vo);
+							if (goodsCpnDcAmt == 0) {
+								orderChangeDao.updateGoodsCpnRollback(vo);
+							}
 						}
 
 						// 5-2-7. 사용상품권 원복
@@ -1353,6 +1367,8 @@ public class TscOrderChangeService {
 			}
 
 			if (preOrdDtlNo != ordDtlNo) {
+				Integer custNo = 0;
+
 				// 5. TB_ORDER_DETAIL 등록
 				Order ordDtl = new Order();
 				ordDtl.setOrdNo(ordNo);
@@ -1424,6 +1440,26 @@ public class TscOrderChangeService {
 					orderChangeDao.updateOrderDetail(ordDtl);
 					orderChangeDao.createOrderDetailHstCnclRtn(ordDtl);
 
+					// 2021.11.19 card007 적립예정포인트 차감 후 신규 로우 생성
+					if (ordDtlSavePntAmt > 0) {
+						ordDtl.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+						ordDtl.setFirstOrdDtlNo(ordDtl.getOrdDtlNo());
+
+						for (Order point : orderChangeDao.getCustPointHst(ordDtl)) {
+							point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
+							point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
+							point.setOccurDtlDesc("예정포인트적립취소");
+							point.setPntAmt(ordDtlSavePntAmt * -1);
+							point.setRegNo(regNo);
+							point.setUpdNo(updNo);
+
+							// 적립예정포인트 차감
+							orderChangeDao.createCustPointHstRollback(point);
+
+							custNo = point.getCustNo();
+						}
+					}
+
 					// 선발송 결제완료 상태값 설정
 					ordDtl.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value());
 				} else {
@@ -1465,6 +1501,24 @@ public class TscOrderChangeService {
 				orderChangeDao.createOrderChangeDetail(orderChangeDetail);
 				orderChangeDao.createOrderChangeDetailHst(orderChangeDetail);
 
+				// 2021.11.19 card007 적립예정포인트 차감 후 신규 로우 생성
+				if ("Y".equals(wdBfSendYn) && custNo > 0 && ordDtlSavePntAmt > 0) {
+					// 적립예정포인트 신규 로우 생성
+					Point point = new Point();
+					point.setCustNo(custNo);
+					point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+					point.setOccurDtlDesc("예정포인트적립");
+					point.setPntAmt(ordDtlSavePntAmt);
+					point.setCustPntSq(0);
+					point.setOrdNo(ordNo);
+					point.setOrdDtlNo(exchangeOrdDtlNo);
+					point.setReviewSq(0);
+					point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
+					point.setRegNo(regNo);
+					point.setUpdNo(updNo);
+					pointDao.createCustomerPointHst(point);
+				}
+
 				preOrdDtlNo = ordDtlNo;
 			}
 
@@ -2880,8 +2934,29 @@ public class TscOrderChangeService {
 							index++;
 						}
 
-						// 4-2-4. 사용포인트원복
+						// 4-2-4. 적립예정포인트 수정
+						// 2021.11.19 card007 적립예정포인트는 교환상품의 ORD_DTL_NO로 처리한다.
+						int savePntAmt = vo.getSavePntAmt();
+						vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+						vo.setFirstOrdDtlNo(vo.getOrdDtlNo());
+
+						for (Order point : orderChangeDao.getCustPointHst(vo)) {
+							point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
+							point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
+							point.setOccurDtlDesc("예정포인트적립취소");
+							point.setPntAmt(savePntAmt * -1);
+							point.setRegNo(userNo);
+							point.setUpdNo(userNo);
+
+							// 적립예정포인트 취소 이력 생성
+							orderChangeDao.createCustPointHstRollback(point);
+						}
+
+						// 4-2-5. 사용포인트원복
+						// 2021.11.18 card007 사용포인트 원복은 최초주문상세번호로 처리
 						int pntDcAmt = vo.getPntDcAmt();
+						int firstOrdDtlNo = orderChangeDao.getFirstOrdDtlNo(vo);
+						vo.setFirstOrdDtlNo(firstOrdDtlNo);
 						vo.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT.value());
 
 						for (Order point : orderChangeDao.getCustPointHst(vo)) {
@@ -2908,25 +2983,13 @@ public class TscOrderChangeService {
 							}
 						}
 
-						// 4-2-5. 적립예정포인트 수정
-						int savePntAmt = vo.getSavePntAmt();
-						vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
-
-						for (Order point : orderChangeDao.getCustPointHst(vo)) {
-							point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
-							point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
-							point.setOccurDtlDesc("예정포인트적립취소");
-							point.setPntAmt(savePntAmt * -1);
-							point.setRegNo(userNo);
-							point.setUpdNo(userNo);
-
-							// 적립예정포인트 취소 이력 생성
-							orderChangeDao.createCustPointHstRollback(point);
-						}
-
 						// 4-2-6. 상품쿠폰원복
 						if (leftQty == 0) {
-							orderChangeDao.updateGoodsCpnRollback(vo);
+							// 2021.11.19 card007 FIRST_ORD_DTL_NO 조회해서 GOODS_CPN_AMT = 0이면 원복 해줌
+							int goodsCpnDcAmt = orderChangeDao.getGoodsCpnDcAmt(vo);
+							if (goodsCpnDcAmt == 0) {
+								orderChangeDao.updateGoodsCpnRollback(vo);
+							}
 						}
 
 						// 4-2-7. 사용상품권 원복
@@ -3297,640 +3360,100 @@ public class TscOrderChangeService {
 	}
 
 	/**
-	 * 마이페이지 부분취소 처리
+	 * 전체 환불 처리
 	 *
-	 * @param GagaMap
-	 * @return GagaMap
+	 * @param GagaMap, Integer
 	 * @author card007
-	 * @since 2021. 05. 24
+	 * @since 2021. 08. 12
 	 */
 	@SuppressWarnings("unchecked")
-	@Transactional("shopTxnManager")
-	public GagaMap partialRefundBak(GagaMap map, Integer userNo) {
-
-		// 1. 취소요청목록 및 정보 설정
-		List<Order> cancelOrderRefundList 	= (List<Order>) map.get("cancelOrderRefundList");				// 취소환불금액 목록 (주문상세단품 단위)
-		List<Order> cancelDelvRefundList 	= (List<Order>) map.get("cancelDelvRefundList");				// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
-
-		int ordNo 				= map.getInt("ordNo");											// 주문번호
-		int ordChgSq			= map.getInt("ordChgSq");										// 주문변경일련번호
-		String chgReason 		= map.getString("chgReason");									// 변경사유
-		String chgReasonNm 		= map.getString("chgReasonNm");									// 변경사유명
-		String chgMemo 			= map.getString("chgMemo");										// 변경메모
-		String allLastCanYn		= map.getString("allLastCanYn");								// 마지막 취소 여부
-		String ipAddress		= map.getString("ipAddress");									// IP주소
-		String pgTid			= map.getString("pgTid");										// PG거래ID
-		String payMeans			= map.getString("payMeans");									// 결제수단
-		String pgGb				= map.getString("pgGb");										// PG구분
-		String cashAuthNo		= map.getString("cashAuthNo");									// 현금영수증 승인번호
-		String accountNo		= map.getString("accountNo");									// 환불계좌번호
-		String accountNm		= map.getString("accountNm");									// 환불계좌주명
-		String bankCd			= map.getString("bankCd");										// 환불계좌은행코드
-		String reqGbn			= map.getString("reqGbn");										// 신청구분
-		String chgGb			= TscConstants.OrderChangeGb.CANCEL.value(); 					// 취소요청 (공톹코드:G680)
-		String ordDtlStat		= TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();	// 주문상세상태
-		String chgStat			= TscConstants.OrderChangeStat.RETURN_COMPLETE.value();			// 주문변경상태
-		String modType			= "";
-		String batchYn			= map.getString("batchYn");										// 배치여부
-		String delvExpnYn		= map.getString("delvExpnYn");									// 출고예외여부 
-		String mallGb			= map.getString("mallGb");										// 몰구분
-		String pgStat			= map.getString("pgStat");										// PG 점프 
-		int codFee				= map.getInt("codFee");											// 착불비 
-		String codFeeYn			= map.getString("codFeeYn");									// 착불비여부
-		String enCloseFeeYn 	= map.getString("enCloseFeeYn");								// 동봉비여부
-		int enCloseFee 			= map.getInt("enCloseFee");										// 동봉비
-		String wdInvoiceNo		= map.getString("codFeeYn");									// 회수송장번호
-		String wdGb				= map.getString("wdGb");										// 회수구분
-		int addPayCost			= map.getInt("addPayCost");										// 추갸배송비
+	public void allRefund(GagaMap map, Integer userNo) {
+		// 1. 변수 설정
+		Integer ordNo			= map.getInt("ordNo");							// 주문번호
+		Integer custNo			= map.getInt("custNo");							// 고객번호
+		String chgReasonNm		= map.getString("chgReasonNm");					// 변경사유명
+		String chgGb			= TscConstants.OrderChangeGb.RETURN.value();	// 변경구분
+		String accountNo		= map.getString("accountNo");					// 환불계좌번호
+		String accountNm		= map.getString("accountNm");					// 환불계좌주명
+		String bankCd			= map.getString("bankCd");						// 환불은행
+		Integer ordChgSq		= map.getInt("ordChgSq");						// 주문변경일련번호
+		int regNo				= userNo;										// 등록자번호
+		int updNo				= userNo;										// 수정자번호
+		String pgStat			= map.getString("pgStat");						// PG 점프
+		int depositAmt			= map.getInt("depositAmt");						// PG 점프 입금액
+		String codFeeYn			= map.getString("codFeeYn");					// 착불비여부
+		int codFee				= map.getInt("codFee");							// 착불비
+		String enCloseFeeYn		= map.getString("enCloseFeeYn");				// 동봉비여부
+		int enCloseFee			= map.getInt("enCloseFee");						// 동봉비
+		String wdInvoiceNo		= map.getString("wdInvoiceNo");					// 회수송장번호
+		String delvFeeCd		= map.getString("delvFeeCd");					// 배송비정책코드
+		String supplyCompCd		= "";
 
-		// 무통장입금 결제 주문 전체취소 상태값 처리
-		// 2021.09.09 페이코 조건 누락 추가
-		if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
-			if (TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payMeans)) {
-				modType = "STPD";																				// KCP 무통장입금 부분취소
-			} else {
-				modType = "STPC";																				// KCP 부분취소
-			}
+		List<Order> cancelDelvRefundList 	= (List<Order>) map.get("cancelDelvRefundList");	// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
+		if (cancelDelvRefundList != null && cancelDelvRefundList.size() > 0) {
+			supplyCompCd = cancelDelvRefundList.iterator().next().getSupplyCompCd();
 		}
 
-		log.info("cancelDelvRefundList {}", cancelDelvRefundList.iterator().next());
-		log.info("cancelOrderRefundList {}",cancelOrderRefundList.iterator().next());
-
-		// 3. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
-		List<Payment> pgList = new ArrayList<>();
-		List<GiftCard> cashReceiptsList = new ArrayList<>();
-		for (Order obj : cancelDelvRefundList) {
+		// 2. 상태값 설정
+		String ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
+		String chgStat = TscConstants.OrderChangeStat.RETURN_COMPLETE.value();
+		map.setString("chgGb", chgGb);
 
-			// 취소금액 있을 시 처리
-			if (obj.getCnclRtnAmt() > 0) {
-				// 3-1. 주문변경정보 생성
-				OrderChange orderChange = new OrderChange();
-				orderChange.setOrdNo(ordNo);
-				orderChange.setChgGb(chgGb);
-				orderChange.setChgReason(chgReason);
-				orderChange.setChgMemo(chgMemo);
-				orderChange.setAddPayCost(0);
-				orderChange.setAddPayAmt(0);
-				orderChange.setRegNo(userNo);
-				orderChange.setUpdNo(userNo);
-				orderChange.setOrdChgSq(ordChgSq);
+		// 3. 주문변경상세 수정
+		OrderChange orderChange = new OrderChange();
+		orderChange.setOrdChgSq(ordChgSq);
+		orderChange.setChgStat(chgStat);
+		orderChange.setRegNo(regNo);
+		orderChange.setUpdNo(updNo);
+		orderChangeDao.updateOrderChangeDtl(orderChange);
+		orderChangeDao.createOrderChangeDetailHstForAllCancel(orderChange);
 
-				// 3-2. 주문상세정보 수정
-				for (Order vo : cancelOrderRefundList) {
-					vo.setRegNo(userNo);
-					vo.setUpdNo(userNo);
-					vo.setOrdDtlStat(ordDtlStat);
+		// 4. 원주문 결제정보 조회
+		Payment payment = new Payment();
+		payment.setOrdNo(ordNo);
+		payment = orderChangeDao.getPaymentInfo(payment);
 
-					// 배송정책코드 별 주문상세 처리
-					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd()) && vo.getOrdCanChgQty() > 0) {
-						// 주문상세 별 전체취소여부 설정
-						int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
+		// 5. 환불금액 설정
+		Order returnOrderInfo = new Order();
+		returnOrderInfo.setOrdNo(ordNo);
+		returnOrderInfo.setDelvFeeCd(delvFeeCd);
+		map.set("returnOrderInfo", this.getReturnOrderInfo(returnOrderInfo));
+		OrderChange refundInfo = this.calculateRefundAmt(map);
+		int refundAmt = refundInfo.getRefundAmt();
 
-						// 3-2-1. 주문상세정보 수정
-						orderChangeDao.updateOrderDetail(vo);
+		// 6. 주문 전체취소 상태값 설정
+		String modType;
+		if (TscConstants.PgGb.KCP.value().equals(payment.getPgGb())
+			&& TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payment.getPayMeans())
+			&& TscConstants.PaymentStat.PAYMENT_COMPLETE.value().equals(payment.getPayStat())) {
 
-						// 3-2-2. 주문상세 이력 등록
-						orderChangeDao.createOrderDetailHstCnclRtn(vo);
+			modType = "STHD";											// KCP 무통장입금 전체취소
+		} else {
+			modType = "STSC";											// KCP 전체취소
+		}
 
-						// 3-2-3. 주문상세단품정보 수정 및 주문상세단품이력 등록
-						// 주문상세단품정보조회
-						Collection<Order> orderDetailItemList = orderChangeDao.getOrderDetailItemForCnclRtn(vo);
-						int ordDtlOrdAmt 			= orderDetailItemList.iterator().next().getOrdAmt();
-						int ordDtlCnclRtnAmt	 	= orderDetailItemList.iterator().next().getCnclRtnAmt();
-						int ordDtlCpn1DcAmt 		= orderDetailItemList.iterator().next().getCpn1DcAmt();
-						int ordDtlTmtb1DcAmt 		= orderDetailItemList.iterator().next().getTmtb1DcAmt();
-						int ordDtlTmtb2DcAmt 		= orderDetailItemList.iterator().next().getTmtb2DcAmt();
-						int ordDtlGoodsCpnDcAmt 	= orderDetailItemList.iterator().next().getGoodsCpnDcAmt();
-						int ordDtlCartCpnDcAmt 		= orderDetailItemList.iterator().next().getCartCpnDcAmt();
-						int ordDtlPntDcAmt 			= orderDetailItemList.iterator().next().getPntDcAmt();
-						int ordDtlPrePntDcAmt 		= orderDetailItemList.iterator().next().getPrePntDcAmt();
-						int ordDtlSavePntAmt 		= orderDetailItemList.iterator().next().getSavePntAmt();
-						int ordDtlRealOrdAmt 		= orderDetailItemList.iterator().next().getRealOrdAmt();
-						int ordDtlGfcdUseAmt 		= orderDetailItemList.iterator().next().getGfcdUseAmt();
+		// 7. 사용포인트원복
+		Order vo = new Order();
+		vo.setOrdNo(ordNo);
+		vo.setCustNo(custNo);
+		vo.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT.value());
+		vo.setUpdNo(updNo);
 
-						// 주문상세단품단위 금액 등록
-						int length					= orderDetailItemList.size();
-						int index					= 1;
-						int leftOrdAmt 				= ordDtlOrdAmt;
-						int leftCnclRtnAmt			= ordDtlCnclRtnAmt;
-						int leftCpn1DcAmt 			= ordDtlCpn1DcAmt;
-						int leftTmtb1DcAmt 			= ordDtlTmtb1DcAmt;
-						int leftTmtb2DcAmt 			= ordDtlTmtb2DcAmt;
-						int leftGoodsCpnDcAmt 		= ordDtlGoodsCpnDcAmt;
-						int leftCartCpnDcAmt 		= ordDtlCartCpnDcAmt;
-						int leftPntDcAmt 			= ordDtlPntDcAmt;
-						int leftPrePntDcAmt 		= ordDtlPrePntDcAmt;
-						int leftSavePntAmt 			= ordDtlSavePntAmt;
-						int leftRealOrdAmt 			= ordDtlRealOrdAmt;
-						int leftGfcdUseAmt 			= ordDtlGfcdUseAmt;
+		for (Order point : orderChangeDao.getCustPointHst(vo)) {
+			point.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT_CANCEL.value());
+			point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+			point.setOccurDtlDesc("포인트사용취소");
+			point.setPntAmt(point.getPntAmt() * -1);
+			point.setRegNo(regNo);
+			point.setUpdNo(updNo);
 
-						for (Order orderDetailItem : orderDetailItemList) {
-							double dtlOrdAmt		= orderDetailItem.getDtlOrdAmt();
-							double dtlItemOrdAmt	= orderDetailItem.getDtlItemOrdAmt();
-							double tempDivD			= (dtlItemOrdAmt / dtlOrdAmt) * 100;
+			// 포인트 사용 취소 이력 생성 및 포인트 수정
+			orderChangeDao.createCustPointHstRollback(point);
+			orderChangeDao.updateCustPointRollback(point);
+		}
 
-							int tempDiv				= Integer.parseInt(String.valueOf(Math.round(tempDivD)));
-
-							if (index == length) {
-								orderDetailItem.setCnclRtnAmt(leftCnclRtnAmt);
-								orderDetailItem.setCpn1DcAmt(leftCpn1DcAmt);
-								orderDetailItem.setTmtb1DcAmt(leftTmtb1DcAmt);
-								orderDetailItem.setTmtb2DcAmt(leftTmtb2DcAmt);
-								orderDetailItem.setGoodsCpnDcAmt(leftGoodsCpnDcAmt);
-								orderDetailItem.setCartCpnDcAmt(leftCartCpnDcAmt);
-								orderDetailItem.setPrePntDcAmt(leftPrePntDcAmt);
-								orderDetailItem.setPntDcAmt(leftPntDcAmt);
-								orderDetailItem.setGfcdUseAmt(leftGfcdUseAmt);
-								orderDetailItem.setRealOrdAmt(leftRealOrdAmt);
-								orderDetailItem.setSavePntAmt(leftSavePntAmt);
-
-							} else {
-								orderDetailItem.setCnclRtnAmt((ordDtlCnclRtnAmt 		* tempDiv) / 100);
-								orderDetailItem.setCpn1DcAmt((ordDtlCpn1DcAmt 			* tempDiv) / 100);
-								orderDetailItem.setTmtb1DcAmt((ordDtlTmtb1DcAmt 		* tempDiv) / 100);
-								orderDetailItem.setTmtb2DcAmt((ordDtlTmtb2DcAmt 		* tempDiv) / 100);
-								orderDetailItem.setGoodsCpnDcAmt((ordDtlGoodsCpnDcAmt 	* tempDiv) / 100);
-								orderDetailItem.setCartCpnDcAmt((ordDtlCartCpnDcAmt 	* tempDiv) / 100);
-								orderDetailItem.setPrePntDcAmt((ordDtlPrePntDcAmt 		* tempDiv) / 100);
-								orderDetailItem.setPntDcAmt((ordDtlPntDcAmt 			* tempDiv) / 100);
-								orderDetailItem.setGfcdUseAmt((ordDtlGfcdUseAmt 		* tempDiv) / 100);
-								orderDetailItem.setRealOrdAmt((ordDtlRealOrdAmt 		* tempDiv) / 100);
-								orderDetailItem.setSavePntAmt((ordDtlSavePntAmt 		* tempDiv) / 100);
-
-								leftCnclRtnAmt		-= ((ordDtlCnclRtnAmt 				* tempDiv) / 100);
-								leftCpn1DcAmt 		-= ((ordDtlCpn1DcAmt 				* tempDiv) / 100);
-								leftTmtb1DcAmt 		-= ((ordDtlTmtb1DcAmt 				* tempDiv) / 100);
-								leftTmtb2DcAmt 		-= ((ordDtlTmtb2DcAmt 				* tempDiv) / 100);
-								leftGoodsCpnDcAmt 	-= ((ordDtlGoodsCpnDcAmt 			* tempDiv) / 100);
-								leftCartCpnDcAmt 	-= ((ordDtlCartCpnDcAmt 			* tempDiv) / 100);
-								leftPrePntDcAmt 	-= ((ordDtlPrePntDcAmt 				* tempDiv) / 100);
-								leftPntDcAmt 		-= ((ordDtlPntDcAmt 				* tempDiv) / 100);
-								leftGfcdUseAmt 		-= ((ordDtlGfcdUseAmt 				* tempDiv) / 100);
-								leftRealOrdAmt 		-= ((ordDtlRealOrdAmt 				* tempDiv) / 100);
-								leftSavePntAmt 		-= ((ordDtlSavePntAmt 				* tempDiv) / 100);
-							}
-
-							orderDetailItem.setRegNo(userNo);
-							orderDetailItem.setUpdNo(userNo);
-							orderDetailItem.setOrdDtlStat(ordDtlStat);
-
-							// 2021.06.25 환불컨펌 (반품완료) (정산구분값추가)
-							// TODO 환불컨펌시 확정후반품 처리 체크 로직 추가 (TB_ORDER_DETAIL_ITEM_HST 배송중 일때 반품완료, 결제완료일때 취소완료) 
-							// 2021.07.07 확정후반품 로직 추가
-							int cnt = orderChangeDao.getOrderDetailItem20Cnt(orderDetailItem);
-							if (cnt > 0) {
-								orderDetailItem.setOrdDtlStat(TscConstants.OrdDtlItemStat.SALE_RETURN_RETURN_COMPLETE.value());
-							} else {
-								orderDetailItem.setOrdDtlStat(TscConstants.OrdDtlItemStat.SALE_RETURN_SOLDOUT_CANCEL.value());
-							}
-
-							orderDetailItem.setCnclRtnQty(vo.getOrdCanChgQty());
-							orderDetailItem.setOrdChgSq(ordChgSq);
-							orderChangeDao.createOrderDetailItemHst(orderDetailItem);
-
-							orderChangeDao.updateOrderDetailItem(orderDetailItem);
-
-							index++;
-						}
-
-						// 3-2-4. 사용포인트원복
-						int pntDcAmt = vo.getPntDcAmt();
-						vo.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT.value());
-
-						for (Order point : orderChangeDao.getCustPointHst(vo)) {
-							if (pntDcAmt > 0) {
-								int pntAmt = point.getPntAmt() * -1;
-
-								if (pntDcAmt < pntAmt) {
-									point.setPntAmt(pntDcAmt);
-									pntDcAmt -= pntDcAmt;
-								} else {
-									point.setPntAmt(pntAmt);
-									pntDcAmt -= pntAmt;
-								}
-
-								point.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT_CANCEL.value());
-								point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
-								point.setOccurDtlDesc("포인트사용취소");
-								point.setRegNo(userNo);
-								point.setUpdNo(userNo);
-
-								// 포인트 사용 취소 이력 생성 및 포인트 수정
-								orderChangeDao.createCustPointHstRollback(point);
-								orderChangeDao.updateCustPointRollback(point);
-							}
-						}
-
-						// 3-2-5. 적립예정포인트 수정
-						int savePntAmt = vo.getSavePntAmt();
-						vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
-
-						for (Order point : orderChangeDao.getCustPointHst(vo)) {
-							point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
-							point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
-							point.setOccurDtlDesc("예정포인트적립취소");
-							point.setPntAmt(savePntAmt * -1);
-							point.setRegNo(userNo);
-							point.setUpdNo(userNo);
-
-							// 적립예정포인트 취소 이력 생성
-							orderChangeDao.createCustPointHstRollback(point);
-						}
-
-						// 3-2-6. 상품쿠폰원복
-						if (leftQty == 0) {
-							orderChangeDao.updateGoodsCpnRollback(vo);
-						}
-
-						// 3-2-7. 사용상품권 원복
-						int gfcdUseAmt = vo.getGfcdUseAmt();
-
-						for (Order giftCard : orderChangeDao.getCustGiftCardHst(vo)) {
-							if (gfcdUseAmt > 0) {
-								int gfcdAmt = giftCard.getGfcdAmt() * -1;
-
-								if (gfcdUseAmt < gfcdAmt) {
-									giftCard.setGfcdAmt(gfcdUseAmt);
-									gfcdUseAmt -= gfcdUseAmt;
-								} else {
-									giftCard.setGfcdAmt(gfcdAmt);
-									gfcdUseAmt -= gfcdAmt;
-								}
-
-								giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
-								giftCard.setOccurDtlDesc("상품권사용취소");
-								giftCard.setRegNo(userNo);
-								giftCard.setUpdNo(userNo);
-
-								// 포인트 사용 취소 이력 생성 및 포인트 수정
-								orderChangeDao.createCustGiftCardHstRollback(giftCard);
-								orderChangeDao.updateCustGiftCardRollback(giftCard);
-							}
-						}
-
-						// 3-2-8. 상품권 현금영수증 PG 취소 정보 설정
-						GiftCard giftCardCashReceipts = orderDao.getGiftCardReceiptInfo(ordNo);
-
-						if (giftCardCashReceipts != null && StringUtils.isNotBlank(giftCardCashReceipts.getTradeNo())) {
-							giftCardCashReceipts.setModType("STPC");
-							giftCardCashReceipts.setUsGfcdAmt(vo.getGfcdUseAmt());
-
-							cashReceiptsList.add(giftCardCashReceipts);
-						}
-
-						// 3-2-9. 주문변경상세정보 및 이력 등록
-						OrderChange changeDetailPo = new OrderChange();
-						changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
-						changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
-						changeDetailPo.setChgQty(vo.getOrdCanChgQty());
-						changeDetailPo.setChgStat(chgStat);
-						changeDetailPo.setRegNo(userNo);
-						changeDetailPo.setUpdNo(userNo);
-
-						// 신청구분 처리
-
-						// 취소접수승인 시 주문변경상세 정보 수정
-						OrderChange orChange = new OrderChange();
-						orChange.setOrdNo(ordNo);
-						orChange.setOrdChgSq(ordChgSq);
-						orChange.setChgStat(chgStat);
-						orChange.setUpdNo(userNo);
-						orderChangeDao.updateOrderChangeDtl(orChange);
-
-						orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
-					}
-				}
-
-				// 3-3. 상품재고원복
-				/*  삭제 !!!
-				if(!TscConstants.OrderCancelReason.SOLDOUT_CANCEL.value().equals(chgReason)) {
-					orderChange.setSellGb(TscConstants.SellGb.ORDER_CANCEL.value());
-					orderChangeDao.createSellQty(orderChange);
-				}
-				*/
-
-				// 3-4. PG 결제 취소 정보 설정 (상품권으로만 결제 시 PG점프)
-				int spanRealCnclRtnAmt 	= obj.getRealOrdAmt();			// 취소금액합계
-				int sumDeliveryFee 		= obj.getDelvFee();				// 배송비합계
-				int spanDelvCpnDcAmt 	= obj.getDelvCpnDcAmt();		// 배송비쿠폰금액
-				int spanTotDeliveryFee 	= obj.getAddDelvFee();			// 추가배송비합계
-				int spanTotRtnDelvFee 	= obj.getRtnDelvFee();			// 반품배송비합계
-				int spanRefundAmt		= 0;							// 환불금액
-				int delvFee				= (sumDeliveryFee - spanDelvCpnDcAmt);	// 배송비
-
-				// codFee // 착불비
-				// enCloseFee // 동봉비
-
-				// 마지막 취소일때 배송비 추가
-				if ("Y".equals(obj.getLastCanYn())) {
-					// 귀책사유고객
-					if ("G688_10".equals(chgReason)) {
-						// 회수요청
-						if ("W".equals(wdGb)) {
-							// 환불비용 = (취소상품실결제금액 + 동봉비 + 추가결제비) - 반품배송비 - 착불비
-							spanRefundAmt = (spanRealCnclRtnAmt + enCloseFee + addPayCost) - spanTotRtnDelvFee - codFee;
-						}
-						// 직접배송
-						else {
-							// 환불비용 = (취소상품실결제금액 + 동봉비 + 추가결제비) - 착불비
-							spanRefundAmt = (spanRealCnclRtnAmt + enCloseFee + addPayCost) - codFee;
-						}
-					}
-					// 귀책사유회사
-					else {
-						// 환불비용 = (취소상품실결제금액) + (원주문배송비- 배송비쿠폰할인금액)
-						spanRefundAmt = spanRealCnclRtnAmt + (sumDeliveryFee - spanDelvCpnDcAmt);
-					}
-				}
-				// 부분취소
-				else {
-					// 귀책사유고객
-					if ("G688_10".equals(chgReason)) {
-						// 회수요청
-						if ("W".equals(wdGb)) {
-							// 환불금액  = (취소상품실결제금액 + 동봉비 + 추가결제비) - (추가배송비 + 반품배송비)
-							spanRefundAmt = (spanRealCnclRtnAmt + enCloseFee + addPayCost) - (spanTotDeliveryFee + spanTotRtnDelvFee);
-						}
-						// 직접배송
-						else {
-							// 환불금액  = (취소상품실결제금액 + 동봉비 + 추가결제비) - (추가배송비)
-							spanRefundAmt = (spanRealCnclRtnAmt + enCloseFee + addPayCost) - (spanTotDeliveryFee);
-						}
-					}
-					// 귀책사유회사
-					else {
-						// 환불금액  = 취소상품실결제금액
-						spanRefundAmt = spanRealCnclRtnAmt;
-					}
-				}
-
-				// 전체취소일때 TB_DELIVERY_FEE 배송비 취소 처리
-				if ("Y".equals(obj.getLastCanYn())) {
-					Order cancelDelvFee = new Order();
-					cancelDelvFee.setOrdNo(ordNo);
-					cancelDelvFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
-					cancelDelvFee.setDelvFeeCd(obj.getDelvFeeCd());
-					cancelDelvFee.setDelvFee(sumDeliveryFee * -1);
-					cancelDelvFee.setDelvCpnSq(0);
-					cancelDelvFee.setDelvCpnDcAmt(spanDelvCpnDcAmt);
-					cancelDelvFee.setRealDelvAmt(delvFee * -1);
-					cancelDelvFee.setOrdChgSq(orderChange.getOrdChgSq());
-					cancelDelvFee.setSupplyCompCd(obj.getSupplyCompCd());
-					cancelDelvFee.setRegNo(userNo);
-					cancelDelvFee.setUpdNo(userNo);
-
-					orderChangeDao.createDeliveryFee(cancelDelvFee);
-				}
-
-				// 환불   
-				OrderChange chgRefund = new OrderChange();
-
-				// 3-6. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록 (배송비허들무너짐)
-				if (spanTotDeliveryFee > 0) {
-					Order delvFeeOrder = new Order();
-					delvFeeOrder.setOrdNo(ordNo);
-					delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
-					delvFeeOrder.setDelvFeeCd(obj.getDelvFeeCd());
-					delvFeeOrder.setDelvFee(spanTotDeliveryFee);
-					delvFeeOrder.setRealDelvAmt(spanTotDeliveryFee);
-					delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
-					delvFeeOrder.setSupplyCompCd(obj.getSupplyCompCd());
-					delvFeeOrder.setRegNo(userNo);
-					delvFeeOrder.setUpdNo(userNo);
-
-					orderChangeDao.createDeliveryFee(delvFeeOrder);
-				}
-
-				// 착불비 처리 
-				if("Y".equals(codFeeYn)) {
-					// 10. 배송비  
-					OrderChange ordDelvFee = new OrderChange();
-					ordDelvFee.setOrdNo(ordNo);
-					ordDelvFee.setRegNo(userNo);
-					ordDelvFee.setCodFee(codFee);
-					ordDelvFee.setOrdChgSq(ordChgSq);
-					orderChangeDao.insertTbDeliveryFeeCodFee(ordDelvFee);
-
-					// 10-1. 환불
-					chgRefund.setRfDeliveryFee(codFee*-1);
-				}
-
-				// 동봉비 처리 
-				if("Y".equals(enCloseFeeYn)) {
-					// 배송비  
-					OrderChange ordDelvFee = new OrderChange();
-					ordDelvFee.setOrdNo(ordNo);
-					ordDelvFee.setRegNo(userNo);
-					ordDelvFee.setCodFee(enCloseFee*-1);
-					ordDelvFee.setOrdChgSq(ordChgSq);
-					orderChangeDao.insertTbDeliveryFeeCodFee(ordDelvFee);
-
-					// 환불   
-					chgRefund.setRfDeliveryFee(enCloseFee);
-					chgRefund.setEnCloseFeeYn(enCloseFeeYn);
-				}
-
-				chgRefund.setRefundAmt(spanRefundAmt);
-				chgRefund.setOrdNo(ordNo);
-				chgRefund.setOrdChgSq(ordChgSq);
-				orderChangeDao.updateRefundChange(chgRefund);
-
-				// tb_withdraw  업데이트 (동봉비 착불비)
-				OrderChange chgFee = new OrderChange();
-				chgFee.setWdInvoiceNo(wdInvoiceNo);
-				chgFee.setOrdChgSq(ordChgSq);
-				chgFee.setCodFee(codFee);
-				chgFee.setEncloseFee(enCloseFee);
-				chgFee.setUpdNo(userNo);
-				orderChangeDao.updateWithdrawFee(chgFee);
-
-				// 환불금액이 추가배송비 보다 적을 시
-				if (spanRefundAmt < 0) {
-					throw new IllegalStateException(message.getMessage("CANCEL_0002"));
-				}
-
-				Payment pg = new Payment();
-
-				pg.setOrdNo(ordNo);
-				pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
-				pg.setPayGb("O");
-				pg.setPgTid(pgTid);
-				pg.setPayMeans(payMeans);
-				pg.setPartCancelAmt(spanRefundAmt);
-				pg.setOrdChgSq(ordChgSq);
-				pg.setRegNo(userNo);
-				pg.setUpdNo(userNo);
-
-				// 2021.07.07 payAmt 금액 TB_PAYMENT.PAY_AMT 수정
-				int payAmt = orderChangeDao.getPaymentPayamt(pg);
-				pg.setLeftAmt(payAmt);
-
-				log.info("cancelAmt >>> {}", pg.getPartCancelAmt());
-				log.info("leftAmt >>> {}", pg.getLeftAmt());
-
-				if (spanRefundAmt > 0) {
-					pgList.add(pg);
-				}
-			}
-		}
-
-		// 4. 장바구니, 배송비 쿠폰 원복 및 사은품 전체 취소 처리 (마지막 취소 시)
-		if ("Y".equals(allLastCanYn)) {
-			// 4-1. 장바구니, 배송비 쿠폰 원복처리
-			Order coupon = new Order();
-			coupon.setOrdNo(ordNo);
-			coupon.setUpdNo(userNo);
-			orderChangeDao.updateCartCpnRollback(coupon);
-			orderChangeDao.updateDeliveryCpnRollback(coupon);
-
-			// 4-2. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
-
-			/*
-			 * Order freegiftOrder = new Order(); freegiftOrder.setOrdNo(ordNo);
-			 * freegiftOrder.setUpdNo(userNo);
-			 * orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
-			 */
-		}
-
-
-		if("G011_10".equals(mallGb)) {
-			if("N".equals(pgStat)) {
-				// 6. PG 취소 처리
-				for (Payment pg : pgList) {
-					if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
-						pg.setModType(modType);
-						pg.setModDesc("가맹점 취소 - 부분 취소");
-						pg.setIpAddress(ipAddress);
-						pg.setAccountNm(accountNm);
-						pg.setAccountNo(accountNo);
-						pg.setBankCd(bankCd);
-						pg.setBatchYn(batchYn);
-						kcpService.kcpCancel(pg);
-					} else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
-						pg.setPayAmt(pg.getPartCancelAmt());
-						pg.setPayMeans(payMeans);
-						pg.setChgReasonNm(chgReasonNm);
-
-						naverPayService.cancelNaverPayment(pg);
-					} else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
-						pg.setPayAmt(pg.getPartCancelAmt());
-						kakaoPayService.cancelKakaoPayment(pg);
-					}
-
-					// 7. 환불정보 수정
-					Order refundOrder = new Order();
-					refundOrder.setOrdNo(ordNo);
-					refundOrder.setPaySq(pg.getPaySq());
-					refundOrder.setOrdChgSq(ordChgSq);
-					refundOrder.setUpdNo(userNo);
-
-					orderChangeDao.updateRefundInfo(refundOrder);
-				}
-
-				// 8. 현금영수증 취소 처리
-				for (GiftCard cashReceipts : cashReceiptsList) {
-					kcpService.kcpCashReceiptCancel(cashReceipts);
-				}
-			}
-		}
-		return map;
-	}
-
-	/**
-	 * 전체 환불 처리
-	 *
-	 * @param GagaMap, Integer
-	 * @author card007
-	 * @since 2021. 08. 12
-	 */
-	@SuppressWarnings("unchecked")
-	public void allRefund(GagaMap map, Integer userNo) {
-		// 1. 변수 설정
-		Integer ordNo			= map.getInt("ordNo");							// 주문번호
-		Integer custNo			= map.getInt("custNo");							// 고객번호
-		String chgReasonNm		= map.getString("chgReasonNm");					// 변경사유명
-		String chgGb			= TscConstants.OrderChangeGb.RETURN.value();	// 변경구분
-		String accountNo		= map.getString("accountNo");					// 환불계좌번호
-		String accountNm		= map.getString("accountNm");					// 환불계좌주명
-		String bankCd			= map.getString("bankCd");						// 환불은행
-		Integer ordChgSq		= map.getInt("ordChgSq");						// 주문변경일련번호
-		int regNo				= userNo;										// 등록자번호
-		int updNo				= userNo;										// 수정자번호
-		String pgStat			= map.getString("pgStat");						// PG 점프
-		int depositAmt			= map.getInt("depositAmt");						// PG 점프 입금액
-		String codFeeYn			= map.getString("codFeeYn");					// 착불비여부
-		int codFee				= map.getInt("codFee");							// 착불비
-		String enCloseFeeYn		= map.getString("enCloseFeeYn");				// 동봉비여부
-		int enCloseFee			= map.getInt("enCloseFee");						// 동봉비
-		String wdInvoiceNo		= map.getString("wdInvoiceNo");					// 회수송장번호
-		String delvFeeCd		= map.getString("delvFeeCd");					// 배송비정책코드
-		String supplyCompCd		= "";
-
-		List<Order> cancelDelvRefundList 	= (List<Order>) map.get("cancelDelvRefundList");	// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
-		if (cancelDelvRefundList != null && cancelDelvRefundList.size() > 0) {
-			supplyCompCd = cancelDelvRefundList.iterator().next().getSupplyCompCd();
-		}
-
-		// 2. 상태값 설정
-		String ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
-		String chgStat = TscConstants.OrderChangeStat.RETURN_COMPLETE.value();
-		map.setString("chgGb", chgGb);
-
-		// 3. 주문변경상세 수정
-		OrderChange orderChange = new OrderChange();
-		orderChange.setOrdChgSq(ordChgSq);
-		orderChange.setChgStat(chgStat);
-		orderChange.setRegNo(regNo);
-		orderChange.setUpdNo(updNo);
-		orderChangeDao.updateOrderChangeDtl(orderChange);
-		orderChangeDao.createOrderChangeDetailHstForAllCancel(orderChange);
-
-		// 4. 원주문 결제정보 조회
-		Payment payment = new Payment();
-		payment.setOrdNo(ordNo);
-		payment = orderChangeDao.getPaymentInfo(payment);
-
-		// 5. 환불금액 설정
-		Order returnOrderInfo = new Order();
-		returnOrderInfo.setOrdNo(ordNo);
-		returnOrderInfo.setDelvFeeCd(delvFeeCd);
-		map.set("returnOrderInfo", this.getReturnOrderInfo(returnOrderInfo));
-		OrderChange refundInfo = this.calculateRefundAmt(map);
-		int refundAmt = refundInfo.getRefundAmt();
-
-		// 6. 주문 전체취소 상태값 설정
-		String modType;
-		if (TscConstants.PgGb.KCP.value().equals(payment.getPgGb())
-			&& TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payment.getPayMeans())
-			&& TscConstants.PaymentStat.PAYMENT_COMPLETE.value().equals(payment.getPayStat())) {
-
-			modType = "STHD";											// KCP 무통장입금 전체취소
-		} else {
-			modType = "STSC";											// KCP 전체취소
-		}
-
-		// 7. 사용포인트원복
-		Order vo = new Order();
-		vo.setOrdNo(ordNo);
-		vo.setCustNo(custNo);
-		vo.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT.value());
-		vo.setUpdNo(updNo);
-
-		for (Order point : orderChangeDao.getCustPointHst(vo)) {
-			point.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT_CANCEL.value());
-			point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
-			point.setOccurDtlDesc("포인트사용취소");
-			point.setPntAmt(point.getPntAmt() * -1);
-			point.setRegNo(regNo);
-			point.setUpdNo(updNo);
-
-			// 포인트 사용 취소 이력 생성 및 포인트 수정
-			orderChangeDao.createCustPointHstRollback(point);
-			orderChangeDao.updateCustPointRollback(point);
-		}
-
-		// 8. 적립예정포인트 취소
-		vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+		// 8. 적립예정포인트 취소
+		vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
 
 		for (Order point : orderChangeDao.getCustPointHst(vo)) {
 			point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
@@ -4298,307 +3821,6 @@ public class TscOrderChangeService {
 
 	}
 
-	/**
-	 * 전체 환불 처리
-	 *
-	 * @param OrderChange (ordChgSq, userNo)
-	 * @author card007
-	 * @since 2021. 05. 24
-	 */
-	public void allRefundBak(OrderChange orderChange) {
-		Integer ordNo = orderChange.getOrdNo();											// 주문번호
-		String chgGb = orderChange.getChgGb();											// 변경구분
-		String chgReasonNm = orderChange.getChgReasonNm();								// 변경사유명
-		String accountNo = orderChange.getAccountNo();									// 환불계좌번호
-		String accountNm = orderChange.getAccountNm();									// 환불계좌주명
-		String bankCd = orderChange.getBankCd();										// 환불은행
-		Integer ordChgSq = orderChange.getOrdChgSq();									// 주문변경일련번호
-		int regNo = orderChange.getUserNo();											// 등록자번호
-		int updNo = orderChange.getUserNo();											// 수정자번호
-		Integer delvAddrSq = orderChange.getDelvAddrSq();
-		String addDeliveryFeeYn =  orderChange.getAddDeliveryFeeYn();					// 배송비추가 환불여부 
-		int addDeliveryFee = orderChange.getAddDeliveryFee();							// 배송비추가 환불금액 
-		int spanRefundAmt = orderChange.getSpanRefundAmt();
-		String mallGb = orderChange.getMallGb();										// 몰구분 
-		String pgStat = orderChange.getPgStat();										// PG 점프 
-		String codFeeYn = orderChange.getCodFeeYn();									// 착불비여부
-		int codFee = orderChange.getCodFee();											// 착불비
-		String enCloseFeeYn = orderChange.getEnCloseFeeYn();							// 동봉비여부
-		int enCloseFee = orderChange.getEncloseFee();									// 동봉비
-		String wdInvoiceNo = orderChange.getWdInvoiceNo();								// 회수송장번호
-
-		// 상태값 설정
-		String ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
-		String chgStat = TscConstants.OrderChangeStat.RETURN_COMPLETE.value();
-		String ordDtlItemStat = TscConstants.OrdDtlItemStat.SALE_RETURN_RETURN_COMPLETE.value(); // G720_50 환입-반품완료
-
-		// 1. 주문변경상세 수정
-		orderChange.setChgStat(chgStat);
-		orderChangeDao.updateOrderChangeDtl(orderChange);
-		orderChangeDao.createOrderChangeDetailHstForAllCancel(orderChange);
-
-		// 반품일때 환불처리
-		// 원주문 결제정보 조회
-		Payment payment = new Payment();
-		payment.setOrdNo(ordNo);
-		payment = orderChangeDao.getPaymentInfo(payment);
-
-		// 환불금액 설정
-		int refundAmt = payment.getPayAmt();
-		refundAmt = spanRefundAmt;
-
-		// 주문 전체취소 상태값 처리
-		String modType;
-		if (TscConstants.PgGb.KCP.value().equals(payment.getPgGb())
-			&& TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payment.getPayMeans())
-			&& TscConstants.PaymentStat.PAYMENT_COMPLETE.value().equals(payment.getPayStat())) {
-
-			modType = "STHD";														// KCP 무통장입금 전체취소
-		} else {
-			modType = "STSC";														// KCP 전체취소
-		}
-
-		// 2. 사용포인트원복
-		Order vo = new Order();
-		vo.setOrdNo(ordNo);
-		vo.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT.value());
-		vo.setUpdNo(updNo);
-
-		for (Order point : orderChangeDao.getCustPointHst(vo)) {
-			point.setOccurGb(TscConstants.PointOccurGb.ORD_USE_POINT_CANCEL.value());
-			point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
-			point.setOccurDtlDesc("포인트사용취소");
-			point.setPntAmt(point.getPntAmt() * -1);
-			point.setRegNo(regNo);
-			point.setUpdNo(updNo);
-
-			// 포인트 사용 취소 이력 생성 및 포인트 수정
-			orderChangeDao.createCustPointHstRollback(point);
-			orderChangeDao.updateCustPointRollback(point);
-		}
-
-		// 3. 적립예정포인트 취소
-		vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
-
-		for (Order point : orderChangeDao.getCustPointHst(vo)) {
-			point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
-			point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
-			point.setOccurDtlDesc("예정포인트적립취소");
-			point.setPntAmt(point.getPntAmt() * -1);
-			point.setRegNo(regNo);
-			point.setUpdNo(updNo);
-
-			// 적립예정포인트 취소 이력 생성
-			orderChangeDao.createCustPointHstRollback(point);
-		}
-
-		// 4. 사용상품권 원복
-		for (Order giftCard : orderChangeDao.getCustGiftCardHst(vo)) {
-			giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
-			giftCard.setOccurDtlDesc("상품권사용취소");
-			giftCard.setGfcdAmt(giftCard.getGfcdAmt() * -1);
-			giftCard.setRegNo(regNo);
-			giftCard.setUpdNo(updNo);
-
-			// 포인트 사용 취소 이력 생성 및 포인트 수정
-			orderChangeDao.createCustGiftCardHstRollback(giftCard);
-			orderChangeDao.updateCustGiftCardRollback(giftCard);
-		}
-
-		// 4-2. 배송비 사용 상품권 원복
-		for (Order giftCard : orderChangeDao.getCustGiftCardDelvHst(vo)) {
-			giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
-			giftCard.setOccurDtlDesc("상품권사용취소");
-			giftCard.setGfcdAmt(giftCard.getGfcdAmt() * -1);
-			giftCard.setRegNo(regNo);
-			giftCard.setUpdNo(updNo);
-
-			// 상품권 사용 취소 이력 생성 및 상품권 수정
-			orderChangeDao.createCustGiftCardHstRollback(giftCard);
-			orderChangeDao.updateCustGiftCardRollback(giftCard);
-		}
-
-		// 5. 상품재고원복 (품절취소가 아닐 경우)
-		//		OrderChange sellQty = new OrderChange();
-		//		sellQty.setOrdChgSq(ordChgSq);
-		//		sellQty.setSellGb("11");
-		//		sellQty.setRegNo(regNo);
-		//		orderChangeDao.createSellQty(sellQty);
-
-		// 6. 쿠폰 원복처리
-		Order coupon = new Order();
-		coupon.setOrdNo(ordNo);
-		coupon.setUpdNo(updNo);
-		orderChangeDao.updateGoodsCpnRollback(coupon);
-		orderChangeDao.updateCartCpnRollback(coupon);
-		orderChangeDao.updateDeliveryCpnRollback(coupon);
-
-		// 7. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
-		//TODO: skip 
-		//		Order freegiftOrder = new Order();
-		//		freegiftOrder.setOrdNo(ordNo);
-		//		freegiftOrder.setUpdNo(updNo);
-		//		orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
-		//		
-
-		// 9. 주문상세 및 주문상세단품 정보 설정
-		OrderChange orderDetail = new OrderChange();
-		orderDetail.setOrdNo(ordNo);
-		orderDetail.setOrdDtlStat(ordDtlStat);
-		orderDetail.setRegNo(regNo);
-		orderDetail.setUpdNo(updNo);
-
-		// 주문상세정보 수정 및 이력 등록
-		orderChangeDao.updateOrderDetailForAllCancel(orderDetail);
-		orderChangeDao.createOrderDetailHstForAllCancel(orderDetail);
-
-		// 주문상세단품정보 수정 및 이력 등록
-		// 2021.06.25 환불컨펌 (반품완료) (정산구분값추가)
-		// TODO 환불컨펌시 확정후반품 처리 체크 로직 추가 (TB_ORDER_DETAIL_ITEM_HST 배송중 일때 반품완료, 결제완료일때 취소완료) 
-		// 2021.07.07 확정후반품 로직 추가
-		int cnt = orderChangeDao.getOrderDetailItem20CntAll(orderDetail);
-		if (cnt > 0) {
-			orderDetail.setOrdDtlStat(TscConstants.OrdDtlItemStat.SALE_RETURN_RETURN_COMPLETE.value());
-		} else {
-			orderDetail.setOrdDtlStat(TscConstants.OrdDtlItemStat.SALE_RETURN_SOLDOUT_CANCEL.value());
-		}
-
-		orderChangeDao.updateOrderDetailItemForAllCancel(orderDetail);
-		orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetail);
-
-		// 10. 배송비 환불
-		Order refundOrder = orderChangeDao.getRefundInfoForAllCancel(vo);
-		OrderChange chgRefund = new OrderChange();
-		chgRefund.setOrdNo(ordNo);
-		chgRefund.setOrdChgSq(ordChgSq);
-		chgRefund.setRfDelvGfcdUseAmt(refundOrder.getRfDelvGfcdUseAmt());
-
-		if("Y".equals(addDeliveryFeeYn)) {
-			// 배송비
-			OrderChange ordDelvFee = new OrderChange();
-			ordDelvFee.setOrdNo(ordNo);
-			ordDelvFee.setOrdChgSq(ordChgSq);
-			ordDelvFee.setRegNo(regNo);
-			ordDelvFee.setUpdNo(updNo);
-			// orderChangeDao.insertTbDeliveryFeeMinus(ordDelvFee);
-			orderChangeDao.createDeliveryFeeForAllCancel(ordDelvFee);
-
-			// 환불
-			chgRefund.setRefundAmt(refundAmt);
-			chgRefund.setRfDeliveryFee(addDeliveryFee);
-			chgRefund.setRfRealCnclAmt(refundAmt - addDeliveryFee);
-			orderChangeDao.updateRefundChange(chgRefund);
-
-		}
-
-		// 10-1. 착불비 처리 
-		if("Y".equals(codFeeYn)) {
-			// 배송비  
-			OrderChange ordDelvFee = new OrderChange();
-			ordDelvFee.setOrdNo(ordNo);
-			ordDelvFee.setRegNo(regNo);
-			ordDelvFee.setCodFee(codFee);
-			ordDelvFee.setOrdChgSq(ordChgSq);
-			orderChangeDao.insertTbDeliveryFeeCodFee(ordDelvFee);
-
-			// 환불   
-			chgRefund.setRefundAmt(refundAmt);
-			chgRefund.setRfDeliveryFee(codFee*-1);
-			chgRefund.setRfRealCnclAmt(refundAmt - (codFee*-1));
-			orderChangeDao.updateRefundChange(chgRefund);
-		}
-
-		// 10-2. 동봉비 처리 
-		if("Y".equals(enCloseFeeYn)) {
-			// 배송비  
-			OrderChange ordDelvFee = new OrderChange();
-			ordDelvFee.setOrdNo(ordNo);
-			ordDelvFee.setRegNo(regNo);
-			ordDelvFee.setCodFee(enCloseFee*-1);
-			ordDelvFee.setOrdChgSq(ordChgSq);
-			orderChangeDao.insertTbDeliveryFeeCodFee(ordDelvFee);
-
-			// 환불   
-			chgRefund.setRefundAmt(refundAmt);
-			chgRefund.setRfDeliveryFee(enCloseFee);
-			chgRefund.setEnCloseFeeYn(enCloseFeeYn);
-			chgRefund.setRfRealCnclAmt(refundAmt - enCloseFee);
-			orderChangeDao.updateRefundChange(chgRefund);
-		}
-
-		// 10-3. tb_withdraw  업데이트 (동봉비 착불비)
-		OrderChange chgFee = new OrderChange();
-		chgFee.setWdInvoiceNo(wdInvoiceNo);
-		chgFee.setOrdChgSq(ordChgSq);
-		chgFee.setCodFee(codFee);
-		chgFee.setEncloseFee(enCloseFee);
-		chgFee.setUpdNo(regNo);
-		orderChangeDao.updateWithdrawFee(chgFee);
-
-		// 11. PG 연동
-		String pgGb = payment.getPgGb();
-		String payMeans = payment.getPayMeans();
-
-		Payment pg = new Payment();
-		pg.setOrdNo(ordNo);
-		pg.setOrdChgSq(ordChgSq);
-		pg.setPayMeans(payMeans);
-		pg.setPayGb("O");
-		pg.setPgTid(payment.getPgTid());
-		pg.setPayAmt(refundAmt);
-		pg.setLeftAmt(refundAmt);
-		pg.setRegNo(regNo);
-		pg.setUpdNo(updNo);
-		pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
-		
-		// 2021.09.02 (PAY_STAT = 'G016_30' AND PG_TID IS NULL AND PG_GB <> 'ISTYLE') 체크 후 없으면 제휴몰로 판단 로직
-		if (orderDao.getExtmallOrderChk(pg) > 0) {
-			payMeans = TscConstants.PayMeans.EXTMALL.value();
-		}
-
-		// 상품권으로만 결제 시 PG점프
-		if (TscConstants.PgGb.NAVER_ORDER.value().equals(pgGb) || TscConstants.PayMeans.EXTMALL.value().equals(payMeans) || "Y".equals(pgStat) || refundAmt == 0) {
-			// 상품권 100%, 제휴몰, PG점프처리, 네이버페이주문은 PG점프 처리
-			// 2021.10.15 card007 PG점프는 추후 데이터 구분을 위해 pgTid, pgTradeNo 없앰
-			pg.setPayAmt(pg.getPayAmt() * -1);
-			pg.setPgTid("");
-			pg.setPgTradeNo("");
-			orderDao.insertPaymentCancel(pg);
-		} else if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
-			pg.setModType(modType);
-			pg.setModDesc("가맹점 취소 - 전체 취소");
-			pg.setAccountNm(accountNm);
-			pg.setAccountNo(accountNo);
-			pg.setBankCd(bankCd);
-			pg.setBatchYn(orderChange.getBatchYn());
-
-			kcpService.kcpCancel(pg);
-		} else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
-			pg.setPayMeans(payment.getPayMeans());
-			pg.setChgReasonNm(chgReasonNm);
-
-			naverPayService.cancelNaverPayment(pg);
-		} else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
-			pg.setPayMeans(payment.getPayMeans());
-			kakaoPayService.cancelKakaoPayment(pg);
-		}
-
-		// 11. 환불금액 정보 수정
-		refundOrder.setPaySq(pg.getPaySq());
-		orderChangeDao.updateRefundInfo(refundOrder);
-
-		// 13. 상품권 현금영수증 취소 처리
-		GiftCard giftCardCashReceipts = orderDao.getGiftCardReceiptInfo(ordNo);
-
-		if (giftCardCashReceipts != null && StringUtils.isNotBlank(giftCardCashReceipts.getTradeNo())) {
-			giftCardCashReceipts.setModType("STSC");
-			giftCardCashReceipts.setUsGfcdAmt(giftCardCashReceipts.getAmt());
-
-			kcpService.kcpCashReceiptCancel(giftCardCashReceipts);
-		}
-
-	}
-
 	/**
 	 * 취소 알림톡 정보 조회
 	 *

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

@@ -118,6 +118,7 @@ public class TscOrderOcmService {
 
 					// TODO 총알배송, 구매대행상품여부 체크
 					orderOcmDao.createOrderDetail(orderDetail); // 주문상세정보등록
+					orderOcmDao.updateOrderDetail(orderDetail); // 최초주문상세번호 수정
                     orderOcmDao.createOrderDetailHst(orderDetail); // 주문상세이력정보등록
 
                     Collection<ExtmallOrder> orderDetailItemList = orderOcmDao.getOrderDetailItem(orderDetail); // 주문상세단품정보조회

+ 47 - 2
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -20,6 +20,7 @@ import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.dao.TscNaverPayDao;
 import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.biz.dao.TscOrderDao;
+import com.style24.core.biz.dao.TscPointDao;
 import com.style24.core.biz.dao.TscScmDao;
 import com.style24.core.biz.thirdparty.SsgKakaoSender;
 import com.style24.core.support.env.TscConstants;
@@ -88,6 +89,9 @@ public class TscOrderService {
 	@Autowired
 	private SsgKakaoSender kakaoSender;
 
+	@Autowired
+	private TscPointDao pointDao;
+
 	/**
 	 * 주문목록 카운트
 	 * @param Order
@@ -3069,7 +3073,8 @@ public class TscOrderService {
 				
 				for (Order withdrawVo : withdrawConfirmList) {
 					for (Order vo : cancelOrderRefundList) {
-						
+						Integer custNo = 0;
+
 						// 회수컨펌상세번호 == 취소상세번호가 같을때 동작
 						if (withdrawVo.getOrdDtlNo().equals(vo.getOrdDtlNo())) {
 							vo.setRegNo(userNo);
@@ -3081,19 +3086,59 @@ public class TscOrderService {
 							
 							// 원주문 주문상세이력 등록
 							orderDao.createOrderDetailHst(vo);
+
+							// 2021.11.19 card007 적립예정포인트 차감 후 신규 로우 생성
+							int savePntAmt = vo.getSavePntAmt();
+							if (savePntAmt > 0) {
+								vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+								vo.setFirstOrdDtlNo(vo.getOrdDtlNo());
+
+								for (Order point : orderChangeDao.getCustPointHst(vo)) {
+									point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
+									point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
+									point.setOccurDtlDesc("예정포인트적립취소");
+									point.setPntAmt(savePntAmt * -1);
+									point.setRegNo(userNo);
+									point.setUpdNo(userNo);
+
+									// 적립예정포인트 차감
+									orderChangeDao.createCustPointHstRollback(point);
+
+									custNo = point.getCustNo();
+								}
+							}
 							
 							// 원주문 주문상세단품 데이타 등록
 							insertOrderDetailItem(vo, userNo, ordChgSq);
 							
 							// 교환주문 주문상세정보 등록
 							// 교환주문 상세 수정
+							Integer exchangeOrdDtlNo = withdrawVo.getExchangeOrdDtlNo();
 							vo.setOrdDtlStat(OrderDetailStat.PAYMENT_COMPLETE.value()); // 교환주문상세 결제완료
-							vo.setOrdDtlNo(withdrawVo.getExchangeOrdDtlNo());
+							vo.setOrdDtlNo(exchangeOrdDtlNo);
 							vo.setWdBfSendYn("N");
 							orderChangeDao.updateChgOrderDetailTemp(vo);
 							
 							// 교환주문 주문상세이력 등록
 							orderDao.createOrderDetailHst(vo);
+
+							// 2021.11.19 card007 적립예정포인트 차감 후 신규 로우 생성
+							if (custNo > 0 && savePntAmt > 0 && exchangeOrdDtlNo > 0) {
+								// 적립예정포인트 신규 로우 생성
+								Point point = new Point();
+								point.setCustNo(custNo);
+								point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+								point.setOccurDtlDesc("예정포인트적립");
+								point.setPntAmt(savePntAmt);
+								point.setCustPntSq(0);
+								point.setOrdNo(ordNo);
+								point.setOrdDtlNo(exchangeOrdDtlNo);
+								point.setReviewSq(0);
+								point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
+								point.setRegNo(userNo);
+								point.setUpdNo(userNo);
+								pointDao.createCustomerPointHst(point);
+							}
 							
 							// 교환주문 주문상세단품 데이타 등록
 							insertOrderDetailItem(vo, userNo, ordChgSq);

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

@@ -54,6 +54,7 @@ public class Order extends TscBaseDomain {
 	private String ordExchGb;						// 결제, 교환 구분 (O, E)
 	private String ordDtlStat;						// 주문상세상태
 	private int orgOrdDtlNo;						// 실제주문상세번호(교환)
+	private int firstOrdDtlNo;						// 최초주문상세번호
 	private String supplyCompCd;					// 공급업체코드
 	private String goodsCd;							// 상품코드
 	private String formalGb;						// 정상,이월구분

+ 1 - 0
src/main/java/com/style24/persistence/domain/OrderChange.java

@@ -36,6 +36,7 @@ public class OrderChange extends TscBaseDomain {
 	private String delvFeeCd;
 	private String delvFeeCdGrp;
 	private Integer delvAddrSq;
+	private int firstOrdDtlNo;
 	
 	private Integer ordChgSq;
 	private String chgGb;

+ 5 - 4
src/main/java/com/style24/persistence/mybatis/shop/TscNaverPay.xml

@@ -37,10 +37,11 @@
 	<update id="updateNpayOrdDtlNo" parameterType="Order">
 		/* TsbNaverPay.updateNpayOrdDtlNo : 네이버페이 상품주문번호(주문상세번호) 등록 */
 		UPDATE TB_ORDER_DETAIL SET
-		       NPAY_ORD_DTL_NO = #{npayOrdDtlNo}
-		     , ORD_DTL_STAT    = #{ordDtlStat}
-		     , UPD_NO          = 0
-		     , UPD_DT          = NOW()
+		       NPAY_ORD_DTL_NO  = #{npayOrdDtlNo}
+		     , FIRST_ORD_DTL_NO = ORD_DTL_NO
+		     , ORD_DTL_STAT     = #{ordDtlStat}
+		     , UPD_NO           = 0
+		     , UPD_DT           = NOW()
 		WHERE  ORD_DTL_NO = #{ordDtlNo}
 		AND    IFNULL(NPAY_ORD_DTL_NO, 0) = 0
 	</update>

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

@@ -4166,6 +4166,7 @@
 	<update id="updateOrderDetail" parameterType="Order">
 		UPDATE TB_ORDER_DETAIL
 		SET    ORD_DTL_STAT = #{ordDtlStat}
+		     , FIRST_ORD_DTL_NO = ORD_DTL_NO
 		     , UPD_NO = #{custNo}
 		     , UPD_DT = NOW()
 		WHERE  1=1

+ 25 - 6
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -1455,6 +1455,7 @@
 		     , ORD_EXCH_GB
 		     , ORD_DTL_STAT
 		     , ORG_ORD_DTL_NO
+		     , FIRST_ORD_DTL_NO
 		     , SUPPLY_COMP_CD
 		     , GOODS_CD
 		     , FORMAL_GB
@@ -1527,6 +1528,7 @@
 		     , 'E'
 		     , #{ordDtlStat}
 		     , ORD_DTL_NO
+		     , FIRST_ORD_DTL_NO
 		     , SUPPLY_COMP_CD
 		     , GOODS_CD
 		     , FORMAL_GB
@@ -2548,8 +2550,8 @@
 		     , UPD_DT
 		  FROM TB_CUST_POINT_HST
 		 WHERE ORD_NO = #{ordNo}
-		<if test="ordDtlNo != null and ordDtlNo != ''">
-		   AND ORD_DTL_NO = #{ordDtlNo}
+		<if test="firstOrdDtlNo != null and firstOrdDtlNo != ''">
+		   AND ORD_DTL_NO = #{firstOrdDtlNo}
 		</if>
 		   AND OCCUR_GB = #{occurGb}
 		 ORDER BY CUST_PNT_SQ
@@ -2621,8 +2623,8 @@
 		     , CC.UPD_NO = #{updNo}
 		     , CC.UPD_DT = NOW()
 		 WHERE OD.ORD_NO = #{ordNo}
-		<if test="ordDtlNo != null and ordDtlNo != ''">
-		   AND OD.ORD_DTL_NO = #{ordDtlNo}
+		<if test="firstOrdDtlNo != null and firstOrdDtlNo != ''">
+		   AND OD.ORD_DTL_NO = #{firstOrdDtlNo}
 		</if>
 	</update>
 
@@ -2678,8 +2680,8 @@
 		     , UPD_DT
 		  FROM TB_CUST_GIFTCARD_HST
 		 WHERE ORD_NO = #{ordNo}
-		<if test="ordDtlNo != null and ordDtlNo != ''">
-		   AND ORD_DTL_NO = #{ordDtlNo}
+		<if test="firstOrdDtlNo != null and firstOrdDtlNo != ''">
+		   AND ORD_DTL_NO = #{firstOrdDtlNo}
 		</if>
 		   AND OCCUR_GB = 'G074_12'
 		   AND IFNULL(DELV_FEE_SQ, 0) = 0
@@ -5241,6 +5243,23 @@
 		   AND ORD_CHG_SQ = #{ordChgSq}
 	</update>
 	
+	<!-- 최초 주문상세 번호 조회 -->
+	<select id="getFirstOrdDtlNo" parameterType="Order" resultType="int">
+		/* TscOrderChange.getFirstOrdDtlNo */
+		SELECT CASE WHEN FIRST_ORD_DTL_NO > 0 THEN FIRST_ORD_DTL_NO
+		            ELSE ORD_DTL_NO
+		        END AS FIRST_ORD_DTL_NO
+		  FROM TB_ORDER_DETAIL
+		 WHERE ORD_DTL_NO = #{ordDtlNo}
+	</select>
+	
+	<!-- 최초주문상세번호 기준 상품쿠폰 할인액 조회 -->
+	<select id="getGoodsCpnDcAmt" parameterType="Order" resultType="int">
+		/* TscOrderChange.getGoodsCpnDcAmt */
+		SELECT SUM(GOODS_CPN_DC_AMT) AS GOODS_CPN_DC_AMT
+		  FROM TB_ORDER_DETAIL
+		 WHERE FIRST_ORD_DTL_NO = #{firstOrdDtlNo}
+	</select>
 </mapper>
 
 

+ 7 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscOrderOcm.xml

@@ -1650,4 +1650,11 @@
 		)
 	</insert>
 
+	<!-- 주문상세 최초주문상세번호 수정 -->
+	<update id="updateOrderDetail" parameterType="ExtmallOrder">
+		/* TscOrderOcm.updateOrderDetail */
+		UPDATE TB_ORDER_DETAIL
+		   SET FIRST_ORD_DTL_NO = ORD_DTL_NO
+		 WHERE ORD_DTL_NO = #{ordDtlNo}
+	</update>
 </mapper>