Explorar o código

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.core into develop

jsshin %!s(int64=5) %!d(string=hai) anos
pai
achega
48ee6e98f4

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

@@ -691,4 +691,26 @@ public interface TscOrderChangeDao {
 	 * @since 2021.05.26
 	 */
 	Collection<Order> getOrderDetailItemForCnclRtn(Order order);
+	
+	/**
+	 * 반품 배송비 마이너스처리
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author moon
+	 * @since 2021. 05. 31
+	 */
+	int insertTbDeliveryFeeMinus(OrderChange orderChange);
+	
+	/**
+	 * 환불금액 배송비 포함 변경
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author moon
+	 * @since 2021. 05. 31
+	 */
+	int updateRefundChange(OrderChange orderChange);	
+	
+	
 }

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

@@ -121,7 +121,7 @@ public class TscDeliveryService {
 				orderChangeService.cancelRequest(change);
 			} else {		// 무통장입금 주문 중 환불계좌정보 없을 경우 제외는 취소처리
 				// 취소완료
-				GagaMap cancelInfo = orderChangeService.orderCancelPreInfo(change, userNo);
+				GagaMap cancelInfo = orderChangeService.orderCancelPreInfoTemp(change, userNo);
 
 				// TODO 취소 완료 알림톡 발송 에정
 				//

+ 57 - 15
src/main/java/com/style24/core/biz/service/TscKakaotalkService.java

@@ -503,8 +503,8 @@ public class TscKakaotalkService {
 		dm.setFdestine(order.getOrdPhnno());
 		dm.setFkkoresendtype("LMS");
 
-		dm.setButtonNm("마이페이지 > 주문내역");
-		dm.setButtonUrl("/mypage/order/list/form");
+		dm.setButtonNm("마이페이지 > 주문상세");
+		dm.setButtonUrl("/mypage/order/detail/" + order.getOrdNo());
 
 		DecimalFormat dc = new DecimalFormat("###,###,###,###");
 		String payAmt = dc.format(order.getPayAmt());
@@ -529,34 +529,76 @@ public class TscKakaotalkService {
 				Date deadline = new SimpleDateFormat("yyyyMMdd").parse(order.getVaDeadline().substring(0, 8));
 
 				replaceInfo.setString("ordDt"			, todayDate);
-				replaceInfo.setString("vaBankNm"		, order.getCardNm());
+				replaceInfo.setString("vaNm"			, order.getCardNm());
 				replaceInfo.setString("vaNo"			, order.getVaNo());
-				replaceInfo.setString("deadlineYmd"		, new SimpleDateFormat("yyyy년 MM월 dd일").format(deadline));
+				replaceInfo.setString("vaDeadline"		, new SimpleDateFormat("yyyy년 MM월 dd일").format(deadline));
 				replaceInfo.setString("deadlineH"		, "17");
 				
-				kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.VA_ORDER_COMPLETE.value(), dm, replaceInfo);
+				//kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.VA_ORDER_COMPLETE.value(), dm, replaceInfo);
 			} 
 			// 실시간계좌이체
 			else if (TscConstants.PayMeans.ACCOUNT_TRANSFER.value().equals(order.getPayMeans())) {
 				replaceInfo.setString("ordDt"			, todayDate);
-				replaceInfo.setString("vaBankNm"		, order.getCardNm());
+				replaceInfo.setString("vaNm"			, order.getCardNm());
 				
-				kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.AT_ORDER_COMPLETE.value(), dm, replaceInfo);
+				//kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.AT_ORDER_COMPLETE.value(), dm, replaceInfo);
 			}
 			// 신용카드, 휴대폰결제
 			else {
-				kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.ORDER_COMPLETE.value(), dm, replaceInfo);
+				//kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.ORDER_COMPLETE.value(), dm, replaceInfo);
 			}
 		}
-		else if ("KAKAO".equals(order.getPgGb())) {
-			kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.ORDER_COMPLETE.value(), dm, replaceInfo);
+		else  {
+			//kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.ORDER_COMPLETE.value(), dm, replaceInfo);
 		}
-		else if ("NAVER".equals(order.getPgGb())) {
-			kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.ORDER_COMPLETE.value(), dm, replaceInfo);
-		}
-		else if ("PAYCO".equals(order.getPgGb())) {
-			kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.ORDER_COMPLETE.value(), dm, replaceInfo);
+		
+		try {
+			// 고객접촉이력 정보
+			CustContactHst custContactHst = new CustContactHst();
+			custContactHst.setContactType(TscConstants.ContactType.ORDER_INFO.value()); 		// 접촉유형:임시비밀번호발급(공통코드G054)
+			custContactHst.setContactMethod(TscConstants.ContactMethod.KAKAOTALK.value()); 		// 접촉방법:알림톡+문자(공통코드G055)
+			custContactHst.setContactContents("주문안내");
+			custContactHst.setReceiverNo(order.getCustNo());
+			custContactHst.setSenderNo(senderNo);
+			custContactHst.setRegNo(senderNo);
+			coreCustomerService.createCustomerContactHistory(custContactHst);
+		} catch (Exception e) {
+			log.error("error", e);
+			// Do nothing
 		}
+	}
+	
+	/**
+	 * 선물받기 배송지입력
+	 * @param order - 주문 정보
+	 * @param senderNo - 발송자번호(고객)
+	 * @author jsh77b
+	 * @since 2021. 6. 2
+	 */
+	@Transactional("shopTxnManager")
+	public void sendOrderGiftComplete(Order order, Integer senderNo) throws Exception {
+		SsgDirectMessage dm = new SsgDirectMessage();
+		dm.setFuserid(String.valueOf(senderNo)); // 발송자NO
+		dm.setFdestine(order.getRecipPhnno());
+		dm.setFkkoresendtype("LMS");
+
+		dm.setButtonNm("선물받기 > 배송지입력");
+		dm.setButtonUrl("/order/giftComplete?ordNo" + order.getOrdNo());
+
+		DecimalFormat dc = new DecimalFormat("###,###,###,###");
+		String payAmt = dc.format(order.getPayAmt());
+
+		GagaMap replaceInfo = new GagaMap();
+		replaceInfo.setString("siteNm"				, siteNm);
+		replaceInfo.setString("ordNm"				, order.getOrdNm());
+		replaceInfo.set("ordNo"						, order.getOrdNo());
+		replaceInfo.setString("goodsNm"				, order.getGoodsNm());
+		replaceInfo.setString("goodsCnt"			, order.getGoodsCnt());
+		
+		Date giftPackCloseDt = new SimpleDateFormat("yyyy-MM-dd").parse(order.getGiftPackCloseDt().substring(0, 10));
+		replaceInfo.setString("giftPackCloseDt"		, new SimpleDateFormat("yyyy년 MM월 dd일").format(giftPackCloseDt));
+		
+		//kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.GIFT_ARRIVED.value(), dm, replaceInfo);
 		
 		try {
 			// 고객접촉이력 정보

+ 698 - 4
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -3064,8 +3064,8 @@ public class TscOrderChangeService {
 	public GagaMap refundConfirmPreInfo(OrderChange orderChange) {
 		GagaMap result = new GagaMap();
 		Integer ordChgSq = orderChange.getOrdChgSq();
-		Integer userNo = orderChange.getUserNo();
-
+		Integer userNo   = orderChange.getUserNo();
+		
 		// 주문변경상세정보 조회
 		Collection<OrderChange> orderChangeList = orderChangeDao.getOrderChangeDetailInfo(orderChange);
 
@@ -3103,10 +3103,704 @@ public class TscOrderChangeService {
 			// 환불 사전 정보 조회
 			GagaMap refundPreInfo = getRefundPreInfo2(orderChange);
 			List<Order> cnclReqList = (List<Order>)refundPreInfo.get("cnclReqList");
-
+			
 			result = orderRefundService.cnclRtnRefundAmt2(cnclReqList);
-
+			result.set("allCanYn",              refundPreInfo.get("allCanYn"));
+			result.set("allLastCanYn",          refundPreInfo.get("allLastCanYn"));
+			result.set("allCanYnBeforePayment", refundPreInfo.get("allCanYnBeforePayment"));
+			result.set("pgTid",                 refundPreInfo.get("pgTid"));
+			result.set("payMeans",              refundPreInfo.get("payMeans"));
+			result.set("pgGb",                  refundPreInfo.get("pgGb"));
+			result.set("cashAuthNo",            refundPreInfo.get("cashAuthNo"));
+			
 		}
 		return result;
 	}
+	
+	/**
+	 * 마이페이지 부분취소 처리
+	 *
+	 * @param GagaMap
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 05. 24
+	 */
+	@SuppressWarnings("unchecked")
+	@Transactional("shopTxnManager")
+	public GagaMap partialRefund(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();			// 주문변경상태
+		int payAmt							= map.getInt("spanPayAmt");										// 부분취소 전 결제금액
+		String modType						= "";
+		String batchYn						= map.getString("batchYn");										// 배치여부
+		String delvExpnYn					= map.getString("delvExpnYn");									// 출고예외여부 
+		String mallGb						= map.getString("mallGb");										// 몰구분
+		String pgStat						= map.getString("pgStat");										// PG 점프 
+		
+
+		// 무통장입금 결제 주문 전체취소 상태값 처리
+		if (TscConstants.PgGb.KCP.value().equals(pgGb)) {
+			if (TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payMeans)) {
+				modType = "STPD";																				// KCP 무통장입금 부분취소
+			} else {
+				modType = "STPC";																				// KCP 부분취소
+			}
+		}
+		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) {
+			// 취소금액 있을 시 처리
+			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);
+				// 신청구분 처리
+				// 삭제 ?????? 
+				/*
+				if ("cnclComplete".equals(reqGbn)) {
+					// 취소 완료 시 생성
+					orderChangeDao.createOrderChange(orderChange);
+					ordChgSq = orderChange.getOrdChgSq();
+				} else {
+					// 취소접수승인 시 ordChgSq 설정
+					orderChange.setOrdChgSq(ordChgSq);
+				}
+				*/
+
+				// 3-2. 주문상세정보 수정
+				for (Order vo : cancelOrderRefundList) {
+					vo.setRegNo(userNo);
+					vo.setUpdNo(userNo);
+					vo.setOrdDtlStat(ordDtlStat);
+					
+					// 배송정책코드 별 주문상세 처리
+					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
+						// 주문상세 별 전체취소여부 설정
+						int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
+
+						// 3-2-1. 주문상세정보 수정
+						orderChangeDao.updateOrderDetailTemp(vo);
+
+						// 3-2-2. 주문상세 이력 등록
+						orderChangeDao.createOrderDetailHstCnclRtnTemp(vo);
+
+						// 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();
+
+						// 주문상세단품단위 금액 등록
+						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 orderDetailItem : orderDetailItemList) {
+							double dtlOrdAmt		= orderDetailItem.getDtlOrdAmt();
+							double dtlItemOrdAmt	= orderDetailItem.getDtlItemOrdAmt();
+							double tempDivD			= (dtlItemOrdAmt / dtlOrdAmt) * 100;
+							
+							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);
+							
+							log.info("ordDtlStat ::: {}", ordDtlStat);
+
+							orderChangeDao.updateOrderDetailItemTemp(orderDetailItem);
+							orderChangeDao.createOrderDetailItemHstTemp(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);
+
+						// 신청구분 처리
+				
+						// 취소접수승인 시 주문변경상세 정보 수정
+						Order order = new Order();
+						order.setOrdNo(ordNo);
+						order.setOrdChgSq(ordChgSq);
+						order.setChgStat(chgStat);
+						order.setUpdNo(userNo);
+						order.setDelYn("N");
+
+						orderChangeDao.updateOrderChangeDtlCancel(order);
+				
+						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 spanTotDeliveryFee = obj.getAddDelvFee();			// 추가배송비합계
+				int spanRefundAmt = spanRealCnclRtnAmt;
+				int addDelvFee = 0;
+
+				// 마지막 취소일때 배송비 추가
+				if ("Y".equals(obj.getLastCanYn())) {
+					spanRefundAmt += sumDeliveryFee;					// 환불금액 계산
+					addDelvFee = sumDeliveryFee;						// 추가배송비 계산
+
+					// TB_DELIVERY_FEE 배송비 취소 처리
+					Order cancelDelvFee = new Order();
+					// cancelDelvFee.setPaySq(pg.getPaySq());
+					cancelDelvFee.setOrdNo(ordNo);
+					cancelDelvFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
+					cancelDelvFee.setDelvFeeCd(obj.getDelvFeeCd());
+					cancelDelvFee.setDelvFee(sumDeliveryFee);
+					cancelDelvFee.setOrdChgSq(orderChange.getOrdChgSq());
+					cancelDelvFee.setUpdNo(userNo);
+
+					orderChangeDao.updateDeliveryFee(cancelDelvFee);
+				}
+
+				// 고객사유일때 추가배송비 차감 후 환불처리
+				if ("G686_10".equals(chgReason)) {
+					spanRefundAmt -= spanTotDeliveryFee;				// 환불금액 계산
+					addDelvFee -= spanTotDeliveryFee;					// 추가배송비 계산
+				}
+
+				// 환불금액이 추가배송비 보다 적을 시
+				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.setLeftAmt(orderChangeDao.getLeftAmt(ordNo));
+				pg.setLeftAmt(payAmt);
+				pg.setRegNo(userNo);
+				pg.setUpdNo(userNo);
+				log.info("cancelAmt >>> {}", pg.getPartCancelAmt());
+				log.info("leftAmt >>> {}", pg.getLeftAmt());
+				if (spanRefundAmt > 0) {
+					pgList.add(pg);
+				}
+
+				// 3-5. 환불정보 등록
+				// tb_Refund update  spanRefundAmt , addDelvFee
+				
+				/*
+				Order refundOrder = new Order();
+				refundOrder.setOrdNo(ordNo);
+				refundOrder.setPaySq(0);
+				refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+				refundOrder.setRefundAmt(spanRefundAmt);
+				refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
+				refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
+				refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
+				refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
+				refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
+				refundOrder.setRfDelvCpnAmt(obj.getDelvCpnDcAmt());
+				refundOrder.setRfPntAmt(obj.getPntDcAmt());
+				refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
+				refundOrder.setRfGfcdUseAmt(obj.getGfcdAmt());
+				refundOrder.setRfCnclAmt(obj.getCnclRtnAmt());
+				refundOrder.setRfDeliveryFee(addDelvFee);
+				refundOrder.setRfRealCnclAmt(spanRefundAmt - addDelvFee);
+				refundOrder.setRaNo(accountNo);
+				refundOrder.setRaNm(accountNm);
+				refundOrder.setRaBank(bankCd);
+				refundOrder.setRegNo(userNo);
+
+				orderChangeDao.createRefund(refundOrder);
+				*/
+
+				// 3-6. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
+				if (spanTotDeliveryFee > 0) {
+					Order delvFeeOrder = new Order();
+					// delvFeeOrder.setPaySq(pg.getPaySq());
+					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);
+				}
+			}
+		}
+
+		// 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 OrderChange (ordChgSq, userNo)
+	 * @author card007
+	 * @since 2021. 05. 24
+	 */
+	public void allRefund(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 ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
+		String chgStat = TscConstants.OrderChangeStat.RETURN_COMPLETE.value();
+
+		// 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);
+		}
+
+		// 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);
+
+		// 주문상세단품정보 수정 및 이력 등록
+		orderChangeDao.updateOrderDetailItemForAllCancel(orderDetail);
+		orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetail);
+		
+		if("Y".equals(addDeliveryFeeYn)) {
+			// 10. 배송비  
+			OrderChange ordDelvFee = new OrderChange();
+			ordDelvFee.setOrdNo(ordNo);
+			ordDelvFee.setRegNo(regNo);
+			orderChangeDao.insertTbDeliveryFeeMinus(ordDelvFee);
+			
+			// 10-1. 환불   
+			OrderChange chgRefund = new OrderChange();
+			chgRefund.setRefundAmt(refundAmt);
+			chgRefund.setRfDeliveryFee(addDeliveryFee);
+			chgRefund.setOrdNo(ordNo);
+			chgRefund.setOrdChgSq(ordChgSq);
+			orderChangeDao.updateRefundChange(chgRefund);
+			
+			//refundAmt = refundAmt+addDeliveryFee;
+		}
+		// 11. PG 연동
+		Payment pg = new Payment();
+		pg.setOrdNo(ordNo);
+		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());
+
+		// 상품권으로만 결제 시 PG점프
+		if("G011_10".equals(mallGb)) { // 자사몰일경우
+			if("N".equals(pgStat)) { // PG점프
+				String pgGb = payment.getPgGb();
+				if (!TscConstants.PgGb.ISTYLE.value().equals(pgGb)) {
+					
+					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. 환불금액 정보 수정
+					Order refundOrder = new Order();
+					refundOrder.setPaySq(pg.getPaySq());
+					refundOrder.setOrdNo(ordNo);
+					refundOrder.setOrdChgSq(ordChgSq);
+					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);
+				}
+			}
+			
+		}
+
+	}
+	
 }

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

@@ -1861,6 +1861,9 @@ public class TscOrderService {
 				order.setCustNo(orderInfo.getCustNo());
 				order.setPgGb(orderInfo.getPgGb());
 				order.setCustId(orderInfo.getCustId());
+				
+				order.setGiftPackCloseYn(orderInfo.getGiftPackCloseYn());
+				order.setGiftPackCloseDt(orderInfo.getGiftPackCloseDt());
 			}
 			index++;
 		}
@@ -2071,10 +2074,14 @@ public class TscOrderService {
 		
 		// 3. 주문목록 조회
 		Collection<Order> orderList = getOrderGiftGoodsList(order);
-		String giftAddrInpYn = "N";
+		String giftAddrInpYn 	= "N";
+		String goodsNm 			= "";
+		int goodsCnt			= orderList.size() - 1;
+		
 		for (Order orderDetail : orderList) {
 			if (index == 0) {
-				giftAddrInpYn = orderDetail.getGiftAddrInpYn();
+				giftAddrInpYn 	= orderDetail.getGiftAddrInpYn();
+				goodsNm			= orderDetail.getGoodsNm();
 			}
 			
 			// 1.1 세트상품 옵션별 배열로 담기
@@ -2107,6 +2114,8 @@ public class TscOrderService {
 		resultMap.set("orderListCnt"		, orderList.size());	// 주문목록갯수
 		resultMap.set("giftAddrInpYn"		, giftAddrInpYn);		// 선물받기배송지등록여부
 		resultMap.set("delvRegYn"			, delvRegYn);			// 배송지등록여부
+		resultMap.set("goodsNm"				, goodsNm);				// 상품명
+		resultMap.set("goodsCnt"			, goodsCnt);			// 상품수
 		
 		return resultMap;
 	}

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

@@ -723,4 +723,8 @@ public class Order extends TscBaseDomain {
 	private String errorReason;
 	private String accessLicense;
 	private String secretKey;
+	
+	private String delvExpnYn;
+	private String addDeliveryFeeYn;
+	private int addDeliveryFee;	
 }

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

@@ -197,4 +197,12 @@ public class OrderChange extends TscBaseDomain {
 	private String cardMips;						// 카드할부
 
 	private String batchYn;							// 배치여부
+	
+	private String addDeliveryFeeYn;
+	private String mallGb;
+	private String pgStat;
+	private int addDeliveryFee;	
+	private int spanRefundAmt;
+	
+	
 }

+ 7 - 2
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -2683,8 +2683,8 @@
 		     , NOW()
 		     , #{custNo}
 		     , #{custNm}
-		     , #{recipPhnno}
-		     , #{recipTelno}
+		     , #{ordPhnno}
+		     , #{ordTelno}
 		     , #{email}
 		     , 'G000_10'
 		     , #{npayOrdNo}
@@ -3867,6 +3867,7 @@
 		     , GROUP_CONCAT(Z.OPT_CD2    ORDER BY Z.ORD_DTL_ITEM_SQ)                    AS OPT_CD2
 		     , GROUP_CONCAT(Z.ITEM_QTY   ORDER BY Z.ORD_DTL_ITEM_SQ)                    AS ITEM_QTYR
 		     , GROUP_CONCAT(Z.COLOR_NM   ORDER BY Z.ORD_DTL_ITEM_SQ)                    AS COLOR_NM
+		     , Z.BRAND_GROUP_NM
 		FROM (
 		    SELECT OD.ORD_NO
 		         , OD.ORD_DTL_NO
@@ -3886,6 +3887,7 @@
 		         , ODI.ORD_DTL_ITEM_SQ
 		         , OD.GIFT_PACK_YN
 		         , OD.GIFT_ADDR_INP_YN
+		         , (CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM ELSE BG.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
 		    FROM   TB_ORDER_DETAIL OD
 		    INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
 		    ON     OD.ORD_DTL_NO = ODI.ORD_DTL_NO
@@ -3893,6 +3895,8 @@
 		    ON     OD.GOODS_CD = G.GOODS_CD
 		    INNER  JOIN TB_BRAND BR
 		    ON     G.BRAND_CD = BR.BRAND_CD
+		    INNER  JOIN TB_BRAND_GROUP BG
+		    ON     BR.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
 		    WHERE  1=1
 		    AND    OD.ORD_NO = #{ordNo}
 		    AND    OD.ORD_QTY > OD.CNCL_RTN_QTY
@@ -3907,6 +3911,7 @@
 		     , Z.CNCL_RTN_QTY
 		     , Z.GIFT_PACK_YN
 		     , Z.GIFT_ADDR_INP_YN
+		     , Z.BRAND_GROUP_NM
 	</select>
 	
 	<!-- 선물주문배송신청완료 -->

+ 58 - 3
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -3611,9 +3611,10 @@
 	<update id="updateOrderChangeDtl" parameterType="OrderChange">
 		/* OrderChange.updateOrderChangeDtl */
 		UPDATE TB_ORDER_CHANGE_DETAIL
-		   SET CHG_STAT = #{chgStat}
-			 , UPD_NO   = #{updNo}
-			 , UPD_DT   = NOW()
+		   SET CHG_STAT     = #{chgStat}
+		     , COMPLETE_DT  = NOW()
+			 , UPD_NO       = #{updNo}
+			 , UPD_DT       = NOW()
 		 WHERE ORD_CHG_SQ = #{ordChgSq}
 	</update>
 	
@@ -3645,6 +3646,60 @@
 		WHERE 1=1
 		AND    OD.ORD_DTL_NO = #{ordDtlNo}
 	</select>
+	
+	<!-- 반품 배송비 마이너스처리  -->
+	<insert id="insertTbDeliveryFeeMinus" parameterType="Order" >
+		/* TscDelivery.insertTbDeliveryFeeMinus */
+		INSERT INTO TB_DELIVERY_FEE
+		(
+			  PAY_SQ
+			, ORD_NO
+			, DELV_FEE_GB
+			, DELV_FEE_CD
+			, DELV_FEE
+			, DELV_CPN_SQ
+			, DELV_CPN_DC_AMT
+			, REAL_DELV_AMT
+			, ORD_CHG_SQ
+			, SUPPLY_COMP_CD
+			, DELV_USAC_YN
+			, DELV_USAC_DT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT	
+		)
+		SELECT 
+			  PAY_SQ
+			, ORD_NO
+			, DELV_FEE_GB
+			, DELV_FEE_CD
+			, DELV_FEE *-1
+			, DELV_CPN_SQ
+			, DELV_CPN_DC_AMT
+			, REAL_DELV_AMT *-1
+			, ORD_CHG_SQ
+			, SUPPLY_COMP_CD
+			, DELV_USAC_YN
+			, DELV_USAC_DT
+			, #{regNo}
+			, NOW()
+			, #{regNo}
+			, NOW()	
+		  FROM TB_DELIVERY_FEE 
+		 WHERE ORD_NO      = #{ordNo}
+		   AND DELV_FEE_GB = 'G018_10'
+	</insert>
+	
+	<!-- 환불금액 배송비 포함 변경  -->
+	<update id="updateRefundChange" parameterType="OrderChange">
+		/* OrderChange.updateRefundChange */
+		UPDATE TB_REFUND SET
+		  REFUND_AMT       = #{refundAmt}
+		, RF_DELIVERY_FEE  = #{rfDeliveryFee}
+		WHERE ORD_NO     = #{ordNo}
+		  AND ORD_CHG_SQ = #{ordChgSq}
+	</update>	
 </mapper>