Procházet zdrojové kódy

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

jsshin před 5 roky
rodič
revize
4957db41ba

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

@@ -288,14 +288,14 @@ public interface TscOrderChangeDao {
 	Order getAddDeliveryFeePayment(OrderChange orderChange);
 
 	/**
-	 * 추가배송비 결제 취소 정보 생성
+	 * 추가배송비 결제 취소 정보 생성 (사용안함)
 	 *
 	 * @param Order - 주문 정보
 	 * @return 
 	 * @author card007
 	 * @since 2021. 02. 02
 	 */
-	int createAddDeliveryFeeCancelPayment(Order order);
+	// int createAddDeliveryFeeCancelPayment(Order order);
 
 	/**
 	 * 교환철회 주문상세 상태코드 변경
@@ -526,4 +526,24 @@ public interface TscOrderChangeDao {
 	 * @since 2021. 04. 21
 	 */
 	Order getCurrStockQty(Order order);
+
+	/**
+	 * 결제취소 환불정보 수정
+	 *
+	 * @param Order
+	 * @return int
+	 * @author card007
+	 * @since 2021. 04. 22
+	 */
+	int updateRefundInfo(Order order);
+
+	/**
+	 * 주문취소접수승인 정보 조회
+	 *
+	 * @param Collection<OrderChange>
+	 * @return OrderChange
+	 * @author card007
+	 * @since 2021. 04. 22
+	 */
+	Collection<OrderChange> approveCancelRequestInfo(OrderChange orderChange);
 }

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

@@ -295,7 +295,7 @@ public class TscKcpService {
 		param.setTranCd("00200000");
 		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), env.getProperty("pg.kcp.site.key"), param.getTranCd(), custIp, "", env.getProperty("pg.kcp.log.level"), "0");
 
-		log.info("CHECK RESULT >>> {}", c_PayPlus.getRecvObj().toString());
+		log.info("CHECK KCP PG RESULT ::::: {}", c_PayPlus.getRecvObj().toString());
 
 		if("0000".equals(c_PayPlus.m_res_cd)) {
 			try {

+ 364 - 139
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -57,6 +57,9 @@ public class TscOrderChangeService {
 
 	@Autowired
 	private TscNaverPayService naverPayService;
+	
+	@Autowired
+	private TscWmsService wmsService;
 
 	/**
 	 * 주문변경정보 (상세번호배열, 취소수량배열) 취소 목록으로 변환 (사용안함)
@@ -176,14 +179,14 @@ public class TscOrderChangeService {
 	 */
 	@SuppressWarnings("unchecked")
 	@Transactional("shopTxnManager")
-	public GagaMap partialCancel(GagaMap map) {
+	public GagaMap partialCancel(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 custNo							= map.getInt("custNo");											// 고객번호
+		int ordChgSq						= map.getInt("ordChgSq");										// 주문변경일련번호
 		String chgReason 					= map.getString("chgReason");									// 변경사유
-		String chgReasonNm 					= "고객변심";														// 변경사유명
+		String chgReasonNm 					= map.getString("chgReasonNm");									// 변경사유명
 		String chgMemo 						= map.getString("chgMemo");										// 변경메모
 		String allLastCanYn					= map.getString("allLastCanYn");								// 마지막 취소 여부
 		String ipAddress					= map.getString("ipAddress");									// IP주소
@@ -193,28 +196,31 @@ public class TscOrderChangeService {
 		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.PAYMENT_AFTER_CANCEL.value();	// 주문변경상태
 		int realOrdAmt						= map.getInt("spanSumRealOrdAmt");								// 부분취소 전 결제금액
-		String modType;
+		String modType						= "";
 
 		// 무통장입금 결제 주문 전체취소 상태값 처리
-		if (TscConstants.PgGb.KCP.value().equals(pgGb)
-			&& TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payMeans)) {
-			modType = "STPD";															// KCP 무통장입금 부분취소
-		} else {
-			modType = "STPC";															// KCP 부분취소
+		if (TscConstants.PgGb.KCP.value().equals(pgGb)) {
+			if (TscConstants.PayMeans.BANK_DEPOSIT.value().equals(payMeans)) {
+				modType = "STPD";															// KCP 무통장입금 부분취소
+			} else {
+				modType = "STPC";															// KCP 부분취소
+			}
 		}
 
 		// 2. 주문상세단품정보등록, 변경 (단품단위)
 		List<Order> cancelOrderDetailList = new ArrayList<>();
 		List<Integer> ordDtlNoList = new ArrayList<>();
+		List<Integer> ordCanChgQtyList = new ArrayList<>();
 
 		for (Order cancelOrderRefundPo : cancelOrderRefundList) {
 			cancelOrderRefundPo.setOrdDtlStat(ordDtlStat);
-			cancelOrderRefundPo.setRegNo(custNo);
-			cancelOrderRefundPo.setUpdNo(custNo);
+			cancelOrderRefundPo.setRegNo(userNo);
+			cancelOrderRefundPo.setUpdNo(userNo);
 
 			// 2-1. 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품 이력 등록
 			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
@@ -226,13 +232,16 @@ public class TscOrderChangeService {
 
 			// 2-2. 주문상세단위로 데이터 설정
 			Integer ordDtlNo = cancelOrderRefundPo.getOrdDtlNo();
+			int ordCanChgQty = cancelOrderRefundPo.getOrdCanChgQty();
 			if (!ordDtlNoList.contains(ordDtlNo)) {
 				cancelOrderDetailList.add(cancelOrderRefundPo);
 				ordDtlNoList.add(ordDtlNo);
+				ordCanChgQtyList.add(ordCanChgQty);
 			}
 		}
 
 		// 3. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
+		List<Payment> pgList = new ArrayList<>();
 		for (Order obj : cancelDelvRefundList) {
 			// 취소금액 있을 시 처리
 			if (obj.getCnclRtnAmt() > 0) {
@@ -244,10 +253,18 @@ public class TscOrderChangeService {
 				orderChange.setChgMemo(chgMemo);
 				orderChange.setAddPayCost(0);
 				orderChange.setAddPayAmt(0);
-				orderChange.setRegNo(custNo);
-				orderChange.setUpdNo(custNo);
+				orderChange.setRegNo(userNo);
+				orderChange.setUpdNo(userNo);
 
-				orderChangeDao.createOrderChange(orderChange);
+				// 신청구분 처리
+				if ("cnclComplete".equals(reqGbn)) {
+					// 취소 완료 시 생성
+					orderChangeDao.createOrderChange(orderChange);
+					ordChgSq = orderChange.getOrdChgSq();
+				} else {
+					// 취소접수승인 시 ordChgSq 설정
+					orderChange.setOrdChgSq(ordChgSq);
+				}
 
 				// 3-2. 주문상세정보 수정
 				for (Order vo : cancelOrderDetailList) {
@@ -279,8 +296,8 @@ public class TscOrderChangeService {
 								point.setOccurGb(TscConstants.PointOccurGb.USE_POINT_CANCEL.value());
 								point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
 								point.setOccurDtlDesc("포인트사용취소");
-								point.setRegNo(custNo);
-								point.setUpdNo(custNo);
+								point.setRegNo(userNo);
+								point.setUpdNo(userNo);
 
 								// 포인트 사용 취소 이력 생성 및 포인트 수정
 								orderChangeDao.createCustPointHstRollback(point);
@@ -297,8 +314,8 @@ public class TscOrderChangeService {
 							point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_EXPECT.value());
 							point.setOccurDtlDesc("예정포인트적립취소");
 							point.setPntAmt(savePntAmt * -1);
-							point.setRegNo(custNo);
-							point.setUpdNo(custNo);
+							point.setRegNo(userNo);
+							point.setUpdNo(userNo);
 							
 
 							// 적립예정포인트 취소 이력 생성
@@ -324,8 +341,8 @@ public class TscOrderChangeService {
 
 								giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
 								giftCard.setOccurDtlDesc("상품권사용취소");
-								giftCard.setRegNo(custNo);
-								giftCard.setUpdNo(custNo);
+								giftCard.setRegNo(userNo);
+								giftCard.setUpdNo(userNo);
 
 								// 포인트 사용 취소 이력 생성 및 포인트 수정
 								orderChangeDao.createCustGiftCardHstRollback(giftCard);
@@ -339,19 +356,36 @@ public class TscOrderChangeService {
 						changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
 						changeDetailPo.setChgQty(vo.getOrdCanChgQty());
 						changeDetailPo.setChgStat(chgStat);
-						changeDetailPo.setRegNo(custNo);
-						changeDetailPo.setUpdNo(custNo);
+						changeDetailPo.setRegNo(userNo);
+						changeDetailPo.setUpdNo(userNo);
+
+						// 신청구분 처리
+						if ("cnclComplete".equals(reqGbn)) {
+							// 취소완료 시 주문변경상세 정보 생성
+							orderChangeDao.createOrderChangeDetail(changeDetailPo);
+						} else {
+							// 취소접수승인 시 주문변경상세 정보 수정
+							Order order = new Order();
+							order.setOrdNo(ordNo);
+							order.setOrdChgSq(ordChgSq);
+							order.setChgStat(chgStat);
+							order.setUpdNo(userNo);
+							order.setDelYn("N");
+
+							orderChangeDao.updateOrderChangeDtlCancel(order);
+						}
 
-						orderChangeDao.createOrderChangeDetail(changeDetailPo);
 						orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
 					}
 				}
 
 				// 3-3. 상품재고원복
-				orderChange.setSellGb(TscConstants.SellGb.ORDER_CANCEL.value());
-				orderChangeDao.createSellQty(orderChange);
+				if(!TscConstants.OrderCancelReason.SOLDOUT_CANCEL.value().equals(chgReason)) {
+					orderChange.setSellGb(TscConstants.SellGb.ORDER_CANCEL.value());
+					orderChangeDao.createSellQty(orderChange);
+				}
 
-				// 3-4. PG 결제 취소 처리 (상품권으로만 결제 시 PG점프)
+				// 3-4. PG 결제 취소 정보 설정 (상품권으로만 결제 시 PG점프)
 				int spanRealCnclRtnAmt = obj.getRealOrdAmt();			// 취소금액합계
 				int sumDeliveryFee = obj.getDelvFee();					// 배송비합계
 				int spanTotDeliveryFee = obj.getAddDelvFee();			// 추가배송비합계
@@ -375,33 +409,17 @@ public class TscOrderChangeService {
 				pg.setPayMeans(payMeans);
 				pg.setPartCancelAmt(spanRefundAmt);
 				pg.setLeftAmt(realOrdAmt);
-				pg.setRegNo(custNo);
-				pg.setUpdNo(custNo);
+				pg.setRegNo(userNo);
+				pg.setUpdNo(userNo);
 
 				if (!TscConstants.PgGb.ISTYLE.value().equals(pgGb) && spanRefundAmt > 0) {
-					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);
-
-						kcpService.kcpCancel(pg);
-					} else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
-						pg.setPayMeans(payMeans);
-						pg.setChgReasonNm(chgReasonNm);
-
-						naverPayService.cancelNaverPayment(pg);
-					} else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
-						kakaoPayService.cancelKakaoPayment(pg);
-					}
+					pgList.add(pg);
 				}
 
 				// 3-5. 환불정보 등록
 				Order refundOrder = new Order();
 				refundOrder.setOrdNo(ordNo);
-				refundOrder.setPaySq(pg.getPaySq());
+				refundOrder.setPaySq(0);
 				refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
 				refundOrder.setRefundAmt(spanRefundAmt);
 				refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
@@ -418,7 +436,7 @@ public class TscOrderChangeService {
 				refundOrder.setRaNo(accountNo);
 				refundOrder.setRaNm(accountNm);
 				refundOrder.setRaBank(bankCd);
-				refundOrder.setRegNo(custNo);
+				refundOrder.setRegNo(userNo);
 
 				orderChangeDao.createRefund(refundOrder);
 
@@ -433,8 +451,8 @@ public class TscOrderChangeService {
 					delvFeeOrder.setRealDelvAmt(obj.getDelvFee());
 					delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
 					delvFeeOrder.setSupplyCompCd(obj.getSupplyCompCd());
-					delvFeeOrder.setRegNo(custNo);
-					delvFeeOrder.setUpdNo(custNo);
+					delvFeeOrder.setRegNo(userNo);
+					delvFeeOrder.setUpdNo(userNo);
 
 					orderChangeDao.createDeliveryFee(delvFeeOrder);
 				}
@@ -445,16 +463,58 @@ public class TscOrderChangeService {
 				// 4-1. 장바구니, 배송비 쿠폰 원복처리
 				Order coupon = new Order();
 				coupon.setOrdNo(ordNo);
-				coupon.setUpdNo(custNo);
+				coupon.setUpdNo(userNo);
 				orderChangeDao.updateCartCpnRollback(coupon);
 				orderChangeDao.updateDeliveryCpnRollback(coupon);
 
 				// 4-2. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
 				Order freegiftOrder = new Order();
 				freegiftOrder.setOrdNo(ordNo);
-				freegiftOrder.setUpdNo(custNo);
+				freegiftOrder.setUpdNo(userNo);
 				orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
 			}
+
+			// 5. WMS 취소 처리
+			List<Order> wmsList = new ArrayList<>();
+			for (int i = 0; i < ordDtlNoList.size(); i++) {
+				Order wms = new Order();
+				wms.setOrdNo(ordNo);
+				wms.setOrdDtlNo(ordDtlNoList.get(i));
+				wms.setChgQty(ordCanChgQtyList.get(i));
+
+				wmsList.add(wms);
+			}
+
+			wmsService.updateWmsCancel(wmsList);
+			
+			// 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);
+
+					kcpService.kcpCancel(pg);
+				} else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
+					pg.setPayMeans(payMeans);
+					pg.setChgReasonNm(chgReasonNm);
+
+					naverPayService.cancelNaverPayment(pg);
+				} else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
+					kakaoPayService.cancelKakaoPayment(pg);
+				}
+
+				Order refundOrder = new Order();
+				refundOrder.setOrdNo(ordNo);
+				refundOrder.setPaySq(pg.getPaySq());
+				refundOrder.setOrdChgSq(ordChgSq);
+				refundOrder.setUpdNo(userNo);
+				
+				orderChangeDao.updateRefundInfo(refundOrder);
+			}
 		}
 
 		return map;
@@ -993,11 +1053,13 @@ public class TscOrderChangeService {
 				orderChangeDao.createDeliveryFee(deliveryFee);
 
 				// 추가배송비 등록
-				deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
-				deliveryFee.setDelvFee(spanTotDeliveryFee);
-				deliveryFee.setRealDelvAmt(spanTotDeliveryFee);
+				if (spanTotDeliveryFee > 0) {
+					deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
+					deliveryFee.setDelvFee(spanTotDeliveryFee);
+					deliveryFee.setRealDelvAmt(spanTotDeliveryFee);
 
-				orderChangeDao.createDeliveryFee(deliveryFee);
+					orderChangeDao.createDeliveryFee(deliveryFee);
+				}
 
 				// 3-4. 주문상세정보 수정
 				ordChgSq = orderChange.getOrdChgSq();
@@ -1305,7 +1367,6 @@ public class TscOrderChangeService {
 	@Transactional("shopTxnManager")
 	public GagaMap exchReq(OrderChange excReq) {
 		GagaMap result = new GagaMap();
-		result.set("status", GagaResponseStatus.FAIL.getCode());
 
 		// 교환 기본 정보
 		int ordNo = excReq.getOrdNo();						// 주문번호
@@ -1323,7 +1384,7 @@ public class TscOrderChangeService {
 		String orderChangeStat = TscConstants.OrderChangeStat.EXCHANGE.value();
 		String ordDtlStat = TscConstants.OrderDetailStat.REFUND_CONFIRM_WAIT.value();
 
-		if (addPayCost > 0) { // 프론트 결제 여부 체크 필요
+		if (addPayCost > 0) {
 			orderChangeStat = TscConstants.OrderChangeStat.EXCHANGE_WAIT.value();
 		}
 
@@ -1564,25 +1625,32 @@ public class TscOrderChangeService {
 		int regNo = orderChange.getRegNo();					// 등록자번호
 		int updNo = orderChange.getUpdNo();					// 수정자번호
 
-		// 추가배송비 조회
+		// 1. PG 실행 (취소시 추가결제금액 취소처리)
 		Order payment = orderChangeDao.getAddDeliveryFeePayment(orderChange);
 
-		// 추가배송비 결제취소 처리
+		// 추가배송비 존재 시
 		if (payment != null && payment.getPayAmt() > 0) {
-			payment.setOrdNo(ordNo);
-			payment.setOrdChgSq(ordChgSq);
-			payment.setPayAmt(payment.getPayAmt() * -1);
-			payment.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value());
-			payment.setPayGb(TscConstants.PaymentGb.DELIVERY.value());
-			payment.setRegNo(regNo);
-			payment.setUpdNo(updNo);
-			orderChangeDao.createAddDeliveryFeeCancelPayment(payment);
-
-			// TODO
-			// PG취소처리
+			// 1-1. 추가배송비 결제정보 조회
+			Payment pg = new Payment();
+			pg.setOrdChgSq(ordChgSq);
+			pg = orderChangeDao.getAddPayCostPaymentInfo(pg);
+
+			// 1-2. 추가배송비 취소 정보 설정
+			if (StringUtils.isNotBlank(pg.getPgTid())) {
+				pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				pg.setPayGb("D");
+				pg.setModType("STSC");
+				pg.setModDesc("가맹점 취소 - 전체 취소");
+				pg.setIpAddress(orderChange.getIpAddress());
+				pg.setRegNo(regNo);
+				pg.setUpdNo(updNo);
+			}
+
+			// 1-3. PG 취소 처리
+			kcpService.kcpCancel(pg);
 		}
 
-		// 교환철회 처리
+		// 2. 교환철회 처리
 		Order exchangeCancel = new Order();
 		exchangeCancel.setOrdNo(ordNo);
 		exchangeCancel.setOrdChgSq(ordChgSq);
@@ -1592,22 +1660,22 @@ public class TscOrderChangeService {
 		exchangeCancel.setRegNo(regNo);
 		exchangeCancel.setUpdNo(updNo);
 
-		// TB_ORDER_DETAIL 상태값 변경
+		// 2-1. TB_ORDER_DETAIL 상태값 변경
 		orderChangeDao.updateOrderDetailForExchangeCancel(exchangeCancel);
 
-		// TB_ORDER_DETAIL_HST 생성
+		// 2-2. TB_ORDER_DETAIL_HST 생성
 		orderChangeDao.createOrderDtlHstCancel(exchangeCancel);
 
-		// TB_ORDER_DETAIL_ITEM 상태값 변경
+		// 2-3. TB_ORDER_DETAIL_ITEM 상태값 변경
 		orderChangeDao.updateOrderDetailItemForExchangeCancel(exchangeCancel);
 
-		// TB_ORDER_DETAIL_ITEM_HST 생성
+		// 2-4. TB_ORDER_DETAIL_ITEM_HST 생성
 		orderChangeDao.createOrderDetailItemHstForExchangeCancel(exchangeCancel);
 
-		// TB_ORDER_CHANGE_DETAIL 상태값 변경 및 DEL_YN Y로 업데이트
+		// 2-5. TB_ORDER_CHANGE_DETAIL 상태값 변경 및 DEL_YN Y로 업데이트
 		orderChangeDao.updateOrderChangeDtlCancel(exchangeCancel);
 
-		// 결과값 처리
+		// 3. 결과값 처리
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
 		return result;
@@ -1661,7 +1729,122 @@ public class TscOrderChangeService {
 
 
 
+	/**
+	 * 취소 접수
+	 * 
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 22
+	 */
+	@SuppressWarnings("unchecked")
+	@Transactional("shopTxnManager")
+	public GagaMap cancelRequest(OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+		int userNo = orderChange.getUserNo();
+
+		// 1. 주문변경 등록
+		// ordNo				: 주문번호
+		// chgGb				: 변경구분
+		// chgReason			: 변경사유
+		// chgMemo				: 변경메모
+		// userNo				: 회원번호
+		// ordDtlNoArr			: 주문상세번호배열
+		// cnclRtnReqQtyArr		: 변경수량배열
+
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+		orderChangeDao.createOrderChange(orderChange);
+
+		for (int i = 0; i < orderChange.getOrdDtlNoArr().length; i++) {
+			Integer ordDtlNo = orderChange.getOrdDtlNoArr()[i];
+			int chgQty = orderChange.getCnclRtnReqQtyArr()[i];
+
+			// 2. 주문변경상세정보 등록
+			OrderChange changeDetailPo = new OrderChange();
+			changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+			changeDetailPo.setOrdDtlNo(ordDtlNo);
+			changeDetailPo.setChgQty(chgQty);
+			changeDetailPo.setChgStat(TscConstants.OrderChangeStat.CANCEL.value());
+			changeDetailPo.setRegNo(userNo);
+			changeDetailPo.setUpdNo(userNo);
+
+			orderChangeDao.createOrderChangeDetail(changeDetailPo);
+		}
+		
+		result.setInt("status", GagaResponseStatus.SUCCESS.getCode());
+		
+		return result;
+	}
+
+	/**
+	 * 취소접수승인
+	 * 
+	 * @param GagaMap, int
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 22
+	 */
+	@SuppressWarnings("unchecked")
+	@Transactional("shopTxnManager")
+	public GagaMap approveCancelRequest(OrderChange orderChange, Integer userNo) {
+		GagaMap result = new GagaMap();
 
+		// 1. 환불 사전 정보 조회
+		// ordChgSq, accountNo, accountNm, bankCd, ipAddress
+		List<Integer> ordDtlNoList = new ArrayList<>();
+		List<Integer> chgQtyList = new ArrayList<>();
+		for (OrderChange preInfo : orderChangeDao.approveCancelRequestInfo(orderChange)) {
+			ordDtlNoList.add(preInfo.getOrdDtlNo());
+			chgQtyList.add(preInfo.getChgQty());
+		}
+
+		orderChange.setOrdDtlNoArr(ordDtlNoList.stream().mapToInt(Integer::intValue).toArray());
+		orderChange.setCnclRtnReqQtyArr(chgQtyList.stream().mapToInt(Integer::intValue).toArray());
+		orderChange.setReqGbn("cnclReqComplete");
+		// 전체취소 분기처리
+		// 부분취소 신청구분 처리
+
+		GagaMap refundPreInfo = getRefundPreInfo(orderChange);
+		List<Order> cnclReqList = (List<Order>)refundPreInfo.get("cnclReqList");
+		String allCanYn = refundPreInfo.getString("allCanYn");
+		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
+
+		// 2. 전체취소, 부분취소 구분 처리 진행
+		if ("Y".equals(allCanYn)) {
+			orderChange.setChgGb(TscConstants.OrderChangeGb.CANCEL.value());
+			orderChange.setRegNo(userNo);
+			orderChange.setUpdNo(userNo);
+
+			// 전체 취소 처리
+			allCnclComplete(orderChange);
+		} else {
+			// 3. 환불금액계산
+			// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
+			result = orderRefundService.cnclRtnRefundAmt(cnclReqList);
+
+			// 4. 부분취소 처리 정보 설정
+			result.setInt("ordNo", orderChange.getOrdNo());						// 주문번호
+			result.setString("chgReason", orderChange.getChgReason());			// 변경사유
+			result.setString("chgReasonNm", orderChange.getChgReasonNm());		// 변경사유명
+			result.setString("chgMemo", orderChange.getChgMemo());				// 변경메모
+			result.setString("accountNo", orderChange.getAccountNo());			// 환불계좌번호
+			result.setString("accountNm", orderChange.getAccountNm());			// 환불계좌예금주명
+			result.setString("bankCd", orderChange.getBankCd());				// 환불계좌은행코드
+			result.setString("allLastCanYn", allLastCanYn);						// 전체 마지막 취소 여부
+			result.setString("reqGbn", orderChange.getReqGbn());				// 신청구분
+			result.setString("ipAddress", orderChange.getIpAddress());			// IP주소
+			result.setInt("custNo", orderChange.getCustNo());					// 고객번호
+			result.setString("pgTid", refundPreInfo.getString("pgTid"));		// PG거래ID
+			result.setString("payMeans", refundPreInfo.getString("payMeans"));	// 결제수단
+			result.setString("pgGb", refundPreInfo.getString("pgGb"));			// PG구분
+
+			// 부분취소 처리
+			partialCancel(result, userNo);
+		}
+
+		return result;
+	}
 
 
 	/**
@@ -1923,6 +2106,8 @@ public class TscOrderChangeService {
 		String accountNm = orderChange.getAccountNm();									// 환불계좌주명
 		String bankCd = orderChange.getBankCd();										// 환불은행
 		String ipAddress = orderChange.getIpAddress();									// IP주소
+		String reqGbn = orderChange.getReqGbn();										// 신청구분
+		Integer ordChgSq = orderChange.getOrdChgSq();									// 주문변경일련번호
 		int regNo = orderChange.getRegNo();												// 등록자번호
 		int updNo = orderChange.getUpdNo();												// 등록자번호
 
@@ -1963,10 +2148,31 @@ public class TscOrderChangeService {
 		orderChangeDetail.setUpdNo(updNo);
 
 		// 주문변경정보 등록
-		orderChangeDao.createOrderChange(orderChangeDetail);
+		if ("cnclComplete".equals(reqGbn)) {
+			// 취소 완료 시 생성
+			orderChangeDao.createOrderChange(orderChangeDetail);
+			ordChgSq = orderChangeDetail.getOrdChgSq();
+		} else {
+			// 취소접수승인 시 ordChgSq 설정
+			orderChangeDetail.setOrdChgSq(ordChgSq);
+		}
 
 		// 주문변경상세 및 이력정보 등록
-		orderChangeDao.createOrderChangeDetailForAllCancel(orderChangeDetail);
+		if ("cnclComplete".equals(reqGbn)) {
+			// 취소완료 시 주문변경상세 정보 생성
+			orderChangeDao.createOrderChangeDetailForAllCancel(orderChangeDetail);
+		} else {
+			// 취소접수승인 시 주문변경상세 정보 수정
+			Order order = new Order();
+			order.setOrdNo(ordNo);
+			order.setOrdChgSq(ordChgSq);
+			order.setChgStat(chgStat);
+			order.setUpdNo(updNo);
+			order.setDelYn("N");
+
+			orderChangeDao.updateOrderChangeDtlCancel(order);
+		}
+
 		orderChangeDao.createOrderChangeDetailHstForAllCancel(orderChangeDetail);
 
 		// 2. 사용포인트원복
@@ -2016,12 +2222,14 @@ public class TscOrderChangeService {
 			orderChangeDao.updateCustGiftCardRollback(giftCard);
 		}
 
-		// 5. 상품재고원복
-		OrderChange sellQty = new OrderChange();
-		sellQty.setOrdChgSq(orderChangeDetail.getOrdChgSq());
-		sellQty.setSellGb("11");
-		sellQty.setRegNo(regNo);
-		orderChangeDao.createSellQty(sellQty);
+		// 5. 상품재고원복 (품절취소가 아닐 경우)
+		if(!TscConstants.OrderCancelReason.SOLDOUT_CANCEL.value().equals(chgReason)) {
+			OrderChange sellQty = new OrderChange();
+			sellQty.setOrdChgSq(orderChangeDetail.getOrdChgSq());
+			sellQty.setSellGb("11");
+			sellQty.setRegNo(regNo);
+			orderChangeDao.createSellQty(sellQty);
+		}
 
 		// 6. 쿠폰 원복처리
 		Order coupon = new Order();
@@ -2037,7 +2245,49 @@ public class TscOrderChangeService {
 		freegiftOrder.setUpdNo(updNo);
 		orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
 
-		// 8. PG 연동
+		// 8. 주문상세 및 주문상세단품 정보 설정
+		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);
+		
+		// 9. WMS 취소 처리
+		List<Order> wmsList = new ArrayList<>();
+		for (int i = 0; i < orderChange.getOrdDtlNoArr().length; i++) {
+			Order wms = new Order();
+			wms.setOrdNo(ordNo);
+			wms.setOrdDtlNo(orderChange.getOrdDtlNoArr()[i]);
+			wms.setChgQty(orderChange.getCnclRtnReqQtyArr()[i]);
+
+			wmsList.add(wms);
+		}
+
+		wmsService.updateWmsCancel(wmsList);
+
+		// 10. 환불금액 등록
+		Order refundOrder = orderChangeDao.getRefundInfoForAllCancel(vo);
+		refundOrder.setOrdNo(ordNo);
+		refundOrder.setPaySq(0);
+		refundOrder.setOrdChgSq(orderChangeDetail.getOrdChgSq());
+		refundOrder.setRefundAmt(refundAmt);
+		refundOrder.setRfRealCnclAmt(refundOrder.getRealOrdAmt() - refundOrder.getRfDeliveryFee());
+		refundOrder.setRaNo(accountNo);
+		refundOrder.setRaNm(accountNm);
+		refundOrder.setRaBank(bankCd);
+		refundOrder.setRegNo(regNo);
+
+		orderChangeDao.createRefund(refundOrder);
+
+		// 11. PG 연동
 		Payment pg = new Payment();
 		pg.setOrdNo(ordNo);
 		pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
@@ -2067,91 +2317,66 @@ public class TscOrderChangeService {
 			} else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
 				kakaoPayService.cancelKakaoPayment(pg);
 			}
-		}
-
-		// 9. 환불금액 등록
-		Order refundOrder = orderChangeDao.getRefundInfoForAllCancel(vo);
-		refundOrder.setOrdNo(ordNo);
-		refundOrder.setPaySq(pg.getPaySq());
-		refundOrder.setOrdChgSq(orderChangeDetail.getOrdChgSq());
-		refundOrder.setRefundAmt(refundAmt);
-		refundOrder.setRfRealCnclAmt(refundOrder.getRealOrdAmt() - refundOrder.getRfDeliveryFee());
-		refundOrder.setRaNo(accountNo);
-		refundOrder.setRaNm(accountNm);
-		refundOrder.setRaBank(bankCd);
-		refundOrder.setRegNo(regNo);
-
-		orderChangeDao.createRefund(refundOrder);
 
-		// 10. 주문상세 및 주문상세단품 정보 설정
-		OrderChange orderDetail = new OrderChange();
-		orderDetail.setOrdNo(ordNo);
-		orderDetail.setOrdDtlStat(ordDtlStat);
-		orderDetail.setRegNo(regNo);
-		orderDetail.setUpdNo(updNo);
+			// 11. 환불금액 정보 수정
+			refundOrder.setPaySq(pg.getPaySq());
 
-		// 주문상세정보 수정 및 이력 등록
-		orderChangeDao.updateOrderDetailForAllCancel(orderDetail);
-		orderChangeDao.createOrderDetailHstForAllCancel(orderDetail);
-
-		// 주문상세단품정보 수정 및 이력 등록
-		orderChangeDao.updateOrderDetailItemForAllCancel(orderDetail);
-		orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetail);
+			orderChangeDao.updateRefundInfo(refundOrder);
+		}
 	}
 
-	public GagaMap orderCancelPreInfo(OrderChange orderChange) {
+	/**
+	 * 취소완료 요청
+	 *
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 21
+	 */
+	@SuppressWarnings("unchecked")
+	@Transactional("shopTxnManager")
+	public GagaMap orderCancelPreInfo(OrderChange orderChange, Integer userNo) {
 		GagaMap result = new GagaMap();
 
-		// 2. 환불 사전 정보 조회
+		// 1. 환불 사전 정보 조회
 		GagaMap refundPreInfo = getRefundPreInfo(orderChange);
 		List<Order> cnclReqList = (List<Order>)refundPreInfo.get("cnclReqList");
 		String allCanYn = refundPreInfo.getString("allCanYn");
 		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
-		// String allCanYnBeforePayment = refundPreInfo.getString("allCanYnBeforePayment");
 
-		// 전체취소, 부분취소 구분 처리 진행
+		// 2. 전체취소, 부분취소 구분 처리 진행
+		orderChange.setReqGbn("cnclComplete");
+
 		if ("Y".equals(allCanYn)) {
 			orderChange.setChgGb(TscConstants.OrderChangeGb.CANCEL.value());
-			orderChange.setRegNo(orderChange.getCustNo());
-			orderChange.setUpdNo(orderChange.getCustNo());
+			orderChange.setRegNo(userNo);
+			orderChange.setUpdNo(userNo);
 
+			// 전체 취소 처리
 			allCnclComplete(orderChange);
 		} else {
 			// 3. 환불금액계산
 			// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
 			result = orderRefundService.cnclRtnRefundAmt(cnclReqList);
 
-			// 4. 주문변경 기본정보 설정
+			// 4. 부분취소 처리 정보 설정
 			result.setInt("ordNo", orderChange.getOrdNo());						// 주문번호
-			// result.setInt("ordChgSq", orderChange.getOrdChgSq());				// 주문변경번호
 			result.setString("chgReason", orderChange.getChgReason());			// 변경사유
+			result.setString("chgReasonNm", orderChange.getChgReasonNm());		// 변경사유명
 			result.setString("chgMemo", orderChange.getChgMemo());				// 변경메모
-
 			result.setString("accountNo", orderChange.getAccountNo());			// 환불계좌번호
 			result.setString("accountNm", orderChange.getAccountNm());			// 환불계좌예금주명
 			result.setString("bankCd", orderChange.getBankCd());				// 환불계좌은행코드
-
-			// result.setString("allCanYnBeforePayment", allCanYnBeforePayment);	// 무통장입금전 전체취소 여부
-			// result.setString("allCanYn", allCanYn);								// 전체취소 여부
 			result.setString("allLastCanYn", allLastCanYn);						// 전체 마지막 취소 여부
-			// result.setString("isCustomer", orderChange.getIsCustomer());		// 변경사유 (고객, 회사)
-
-			// 5. 주문변경 회수지정보 추가
-			// result.setString("chgerNm", orderChange.getChgerNm());				// 변경자명
-			// result.setString("chgerEmail", orderChange.getChgerEmail());			// 변경자이메일주소
-			// result.setString("chgerPhnno", orderChange.getChgerPhnno());			// 변경자핸드폰번호
-			// result.setString("chgerTelno", orderChange.getChgerTelno());			// 변경자전화번호
-
-			// result.setString("reqGbn", orderChange.getReqGbn());				// 신청구분
+			result.setString("reqGbn", orderChange.getReqGbn());				// 신청구분
 			result.setString("ipAddress", orderChange.getIpAddress());			// IP주소
-			result.setInt("custNo", orderChange.getCustNo());									// 고객번호
+			result.setInt("custNo", orderChange.getCustNo());					// 고객번호
 			result.setString("pgTid", refundPreInfo.getString("pgTid"));		// PG거래ID
 			result.setString("payMeans", refundPreInfo.getString("payMeans"));	// 결제수단
 			result.setString("pgGb", refundPreInfo.getString("pgGb"));			// PG구분
 
-			// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
-			// coreOrderChangeService.cnclComplete(result, custNo);
-			partialCancel(result);
+			// 부분취소 처리
+			partialCancel(result, userNo);
 		}
 
 		return result;

+ 45 - 26
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -21,6 +21,7 @@ import com.style24.core.biz.dao.TscOrderDao;
 import com.style24.core.biz.dao.TscScmDao;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.core.support.util.CryptoUtils;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
@@ -51,6 +52,9 @@ public class TscOrderService {
 	
 	@Autowired
 	private TscOrderChangeDao orderChangeDao;
+
+	@Autowired
+	private TscOrderChangeService orderChangeService;
 	
 	@Autowired
 	private TscPointService pointService;
@@ -804,7 +808,7 @@ public class TscOrderService {
 								goodsCpn.setCpnDcAmt(goodsCpnAll.getMaxDcAmt());
 							}
 						}
-						
+
 						// 8. 주문최소주문금액 보다 크면 쿠폰 적용
 						if (tmtbGoods.getCurrPrice() > goodsCpn.getBuyLimitAmt()) {
 							goodsCpnList.add(goodsCpn);
@@ -880,7 +884,7 @@ public class TscOrderService {
 			}
 			
 			// 최소금액주문이상일때 쿠폰사용불가
-			if (cartCpn.getMinOrdAmt() > ordAmtSum) {
+			if (cartCpn.getBuyLimitAmt() > ordAmtSum) {
 				cartCpn.setCartCpnCartSqArr(null);
 			} else {
 				cartCpn.setCartCpnCartSqArr(cartCpnCartSqArr);
@@ -2093,39 +2097,54 @@ public class TscOrderService {
 			// 주문번호별 상세번호, 취소수량 및 주문정보 세팅
 			List<OrderChange> cancelDataList = new ArrayList<OrderChange>();
 			for(Order param : params) {
-				boolean chkOrd = true;
-
-				for(OrderChange cancelData : cancelDataList) {
-					if(param.getOrdNo().equals(cancelData.getOrdNo())) {
-						chkOrd = false;
-						cancelData.getOrdDtlNoList().add(param.getOrdDtlNo());
-						cancelData.getCnclRtnReqQtyList().add(param.getCnclRtnQty());
+				if(param.getCnclRtnQty() > 0) {
+					boolean chkOrd = true;
+
+					for(OrderChange cancelData : cancelDataList) {
+						if(param.getOrdNo().equals(cancelData.getOrdNo())) {
+							chkOrd = false;
+							cancelData.getOrdDtlNoList().add(param.getOrdDtlNo());
+							cancelData.getCnclRtnReqQtyList().add(param.getCnclRtnQty());
+						}
 					}
-				}
 
-				if(chkOrd) {
-					OrderChange change = new OrderChange();
-					change.setOrdNo(param.getOrdNo());
-					change.setCustNo(param.getCustNo());
-					change.setOrderNm(param.getOrdNm());
-					change.setPgGb(param.getPgGb());
-					change.setPayMeans(param.getPayMeans());
-					change.setBankCd(param.getBankCd());
-					change.setAccountNm(param.getAccountNm());
-					change.setAccountNo(param.getAccountNo());
-					change.getOrdDtlNoList().add(param.getOrdDtlNo());
-					change.getCnclRtnReqQtyList().add(param.getCnclRtnQty());
-					cancelDataList.add(change);
+					if(chkOrd) {
+						OrderChange change = new OrderChange();
+						change.setOrdNo(param.getOrdNo());
+						change.setCustNo(param.getCustNo());
+						change.setOrderNm(param.getOrdNm());
+						change.setPgGb(param.getPgGb());
+						change.setPayMeans(param.getPayMeans());
+						change.setBankCd(param.getBankCd());
+						change.setAccountNm(param.getAccountNm());
+						change.setAccountNo(CryptoUtils.decryptAES(param.getAccountNo()));
+						change.getOrdDtlNoList().add(param.getOrdDtlNo());
+						change.getCnclRtnReqQtyList().add(param.getCnclRtnQty());
+						change.setChgReason(TscConstants.OrderCancelReason.SOLDOUT_CANCEL.value());
+						change.setChgReasonNm("품절취소");
+						cancelDataList.add(change);
+					}
 				}
 			}
 
-			// 리스트로 지정된
+			// 리스트로 지정된 주문상세번호와 취소수량 배열로 변경 후 취소
 			for(OrderChange change : cancelDataList) {
 				change.setOrdDtlNoArr(change.getOrdDtlNoList().stream().mapToInt(i->i).toArray());
 				change.setCnclRtnReqQtyArr(change.getCnclRtnReqQtyList().stream().mapToInt(i->i).toArray());
-			}
 
-			// TODO 취소 완료 알림톡 발송 에정
+				// 무통장입금 주문 중 환불계좌정보 없을 경우 취소신청
+				if(TscConstants.PgGb.KCP.value().equals(change.getPgGb()) && TscConstants.PayMeans.BANK_DEPOSIT.value().equals(change.getPayMeans()) && StringUtils.isEmpty(change.getAccountNo())) {
+					// TODO 취소신청
+					log.info("CHECK IN PART CANCEL ORD_DTL_NO_ARR ::::: {} / {} / {}", change.getOrdNo(), change.getOrdDtlNoArr(), change.getAccountNo());
+				} else {		// 무통장입금 주문 중 환불계좌정보 없을 경우 제외는 취소처리
+					// 취소완료
+					log.info("CHECK IN PART CANCEL ORD_DTL_NO_ARR ::::: {} / {} / {}", change.getOrdNo(), change.getOrdDtlNoArr(), change.getAccountNo());
+					GagaMap cancelInfo = orderChangeService.orderCancelPreInfo(change, userNo);
+
+					// TODO 취소 완료 알림톡 발송 에정
+					//
+				}
+			}
 
 			// 결품 취소 후 수량이 남은 경우 배송중처리
 			for(Order param : params) {

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

@@ -1,22 +1,21 @@
 package com.style24.core.biz.service;
 
-import com.style24.core.biz.dao.TscWmsDao;
-import com.style24.core.biz.dao.TscDeliveryDao;
-import com.style24.core.support.env.TscConstants;
-import com.style24.persistence.domain.WmsDelivery;
-import com.style24.persistence.domain.Order;
-import com.style24.persistence.domain.ErpStock;
-
-import com.style24.core.biz.service.TscErpService;
-
-import lombok.extern.slf4j.Slf4j;
-
 import java.util.ArrayList;
 import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.style24.core.biz.dao.TscDeliveryDao;
+import com.style24.core.biz.dao.TscWmsDao;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.ErpStock;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.WmsDelivery;
+
+import lombok.extern.slf4j.Slf4j;
+
 
 /**
  * Wms Service
@@ -134,6 +133,7 @@ public class TscWmsService {
 	 * @author moon
 	 * @since 2021. 03. 16
 	 */
+	@Transactional("wmsTxnManager")
 	public void updateWmsCancel(Collection<Order> ordCancelList) {
 		// 주문번호, 주문상세번호, 변경수량 
 		// ordNo, ordDtlNo , chgQty

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

@@ -234,22 +234,21 @@ public class TscConstants {
 	}
 
 	// // 주문변경사유(취소)
-	// public enum OrderCancelReason {
-	// 	CHANGE_CUSTOMER("10"),			// 고객변심
-	// 	EXCHANGE_SIZE("30"),			// 사이즈교환
-	// 	SOLDOUT("60"),					// 품절
-	// 	SOLDOUT_MEMO("품절 취소");
-	//
-	// 	private String value;
-	//
-	// 	private OrderCancelReason(String value) {
-	// 		this.value = value;
-	// 	}
-	//
-	// 	public String value() {
-	// 		return value;
-	// 	}
-	// }
+	public enum OrderCancelReason {
+	 	CHANGE_CUSTOMER("G686_10"),		// 고객변심
+	 	ADMIN_CANCEL("G686_20"),			// 관리자취소
+	 	SOLDOUT_CANCEL("G686_30");		// 품절
+
+	 	private String value;
+
+	 	private OrderCancelReason(String value) {
+	 		this.value = value;
+	 	}
+
+	 	public String value() {
+	 		return value;
+	 	}
+	}
 
 	// 주문변경요청처리상태
 	public enum OrderChangeStat {

+ 10 - 1
src/main/java/com/style24/persistence/domain/GiftCard.java

@@ -50,5 +50,14 @@ public class GiftCard extends TscBaseDomain {
 	private int monthLength;		// 날짜 변수
 	private String useYn;			// 사용가능여부
 
-
+	// KCP 현금영수증 신청
+	private Integer gfcdRcpApiSq;	// 현금영수증 신청 번호
+	private String tradeNo;			// 거래번호
+	private String authNo;			// 승인번호
+	private String resultCd;		// 결과코드
+	private String resultMsg;		// 결과메세지
+	private String tradeTime;		// 주문시간
+	private String ordPhnno;		// 주문자휴대폰번호
+	private String ordNm;			// 주문자명
+	private String ordEmail;		// 주문자 E-Mail
 }

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

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import com.style24.persistence.TscBaseDomain;
@@ -20,6 +21,7 @@ public class OrderChange extends TscBaseDomain {
 	private Integer ordNo;
 	private Integer ordDtlNo;
 	private Integer custNo;
+	private Integer userNo;
 	private String orderNm;
 	
 	private Integer ordChgSq;
@@ -62,9 +64,11 @@ public class OrderChange extends TscBaseDomain {
 	private int[] ordDtlNoArr;
 	private int[] cnclRtnReqQtyArr;
 	private String[] chgOptCd2Arr;
+	private String ordDtlNos;
+	private String chgQtys;
 
-	private List<Integer> ordDtlNoList;
-	private List<Integer> cnclRtnReqQtyList;
+	private List<Integer> ordDtlNoList = new ArrayList<>();
+	private List<Integer> cnclRtnReqQtyList = new ArrayList<>();
 	
 	private String wdGb;
 	private String recipNm;

+ 1 - 4
src/main/java/com/style24/persistence/domain/WmsDelivery.java

@@ -1,8 +1,5 @@
 package com.style24.persistence.domain;
 
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -21,7 +18,7 @@ public class WmsDelivery extends TscBaseDomain {
 	private Integer ordNo;
 	private Integer ordDtlNo;
 	private Integer ordDtlItemSq;
-	private Integer optCd;
+	private String optCd;
 	
 	private String skuCode;
 	private String stockLoc;

+ 40 - 1
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -1679,7 +1679,7 @@
 		   AND OC.ADD_PAY_COST > 0
 	</select>
 	
-	<!-- 추가배송비 결제 취소 정보 생성 -->
+	<!-- 추가배송비 결제 취소 정보 생성(사용안함) -->
 	<insert id="createAddDeliveryFeeCancelPayment" parameterType="Order" keyProperty="paySq">
 		/* OrderChange.createAddDeliveryFeeCancelPayment */
 		INSERT INTO TB_PAYMENT (
@@ -2590,6 +2590,45 @@
 		   AND O.DISP_YN = 'Y'
 		</where>
 	</select>
+	
+	<!-- 결제취소 환불정보 수정 -->
+	<update id="updateRefundInfo" parameterType="Order">
+		/* TscOrderChange.updateRefundInfo */
+		UPDATE TB_REFUND
+		   SET PAY_SQ = #{paySq}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+		 WHERE ORD_NO = #{ordNo}
+		   AND ORD_CHG_SQ = #{ordChgSq}
+	</update>
+	
+	<!-- 주문취소접수승인 정보 조회 -->
+	<select id="approveCancelRequestInfo" parameterType="OrderChange" resultType="OrderChange">
+		/* TscOrderChange.approveCancelRequestInfo */
+		SELECT OD.ORD_NO
+		     , O.CUST_NO
+		     , O.ORD_NM
+		     , OCD.ORD_DTL_NO
+			 , OCD.CHG_QTY
+		     , OC.CHG_REASON
+		     , FN_GET_CODE_NM('G686', OC.CHG_REASON) AS CHG_REASON_NM
+		     , OC.CHG_MEMO
+		     , P.PG_TID
+		     , P.PAY_MEANS
+		     , P.PG_GB
+		  FROM TB_ORDER_CHANGE_DETAIL OCD
+		 INNER JOIN TB_ORDER_CHANGE OC
+		    ON OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ
+		 INNER JOIN TB_ORDER_DETAIL OD
+		    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		 INNER JOIN TB_ORDER O
+		    ON O.ORD_NO = OD.ORD_NO
+		 INNER JOIN TB_PAYMENT P
+		    ON P.ORD_NO = O.ORD_NO
+		   AND P.PAY_GB = 'O'
+		   AND P.PAY_STAT = 'G016_30'
+		 WHERE OCD.ORD_CHG_SQ = #{ordChgSq}
+	</select>
 </mapper>
 
 

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/wms/TscWmsDelivery.xml

@@ -130,7 +130,7 @@
 	<!-- WMS 배송 사은품 취소  -->
 	<update id="updateWmsIfDeliveryOrderGiftCancel" parameterType="WmsDelivery">
 		/* TscWmsDelivery.updateWmsIfDeliveryOrderGiftCancel */
-		UPDATE istyle24_Wmsif.dbo.TB_IF_DeliveryOrderItem A SET 
+		UPDATE istyle24_Wmsif.dbo.TB_IF_DeliveryOrderItem SET 
 			  StatusCd = '60'
 			, IsCancel = 1
 		WHERE DeliveryOrderNo = ( SELECT MAX(A.DeliveryOrderNo) AS DeliveryOrderNo