ソースを参照

Merge remote-tracking branch 'origin/develop' into xodud1202

merge
xodud lee 4 年 前
コミット
22c8626ed7

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

@@ -56,7 +56,6 @@ public interface TscOrderChangeDao {
 	 * @since 2020. 12. 22
 	 */
 	int updateOrderDetailItem(Order order);
-	int updateOrderDetailItemTemp(Order order);
 	
 	/**
 	 * 주문상세단품이력정보 등록
@@ -67,7 +66,6 @@ public interface TscOrderChangeDao {
 	 * @since 2020. 12. 22
 	 */
 	int createOrderDetailItemHst(Order order);
-	int createOrderDetailItemHstTemp(Order order);
 	
 	/**
 	 * 상품옵션재고정보 등록
@@ -118,8 +116,7 @@ public interface TscOrderChangeDao {
 	 * @since 2020. 12. 22
 	 */
 	int updateOrderDetail(Order order);
-	int updateOrderDetailTemp(Order order);
-	
+
 	/**
 	 * 주문상세이력정보 (취소,반품) 등록
 	 *
@@ -129,8 +126,7 @@ public interface TscOrderChangeDao {
 	 * @since 2020. 12. 22
 	 */
 	int createOrderDetailHstCnclRtn(Order order);
-	int createOrderDetailHstCnclRtnTemp(Order order);
-	
+
 	/**
 	 * 주문환불금액정보(PG) 등록
 	 *
@@ -842,4 +838,24 @@ public interface TscOrderChangeDao {
 	 * @since 2021. 06. 14
 	 */	
 	int updateChgOrderDetailItemTemp(Order order);	
+	
+	/**
+	 * 교환배송실패 변경요청단위 전체취소 여부
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author card007
+	 * @since 2021. 01. 28
+	 */
+	int getExchangeDelvFailQty(OrderChange orderChange);
+	
+	/**
+	 * 추가배송비 취소 처리 (부분취소)
+	 *
+	 * @param OrderChange
+	 * @return int
+	 * @author jsh77b
+	 * @since 2021. 06. 21
+	 */
+	int createAddDeliveryFeeCancelPart(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.orderCancelPreInfoTemp(change, userNo);
+				GagaMap cancelInfo = orderChangeService.orderCancelPreInfo(change, userNo);
 
 				// TODO 취소 완료 알림톡 발송 에정
 				//

+ 9 - 4
src/main/java/com/style24/core/biz/service/TscKakaotalkService.java

@@ -119,11 +119,16 @@ public class TscKakaotalkService {
 			custId = "YES24 간편가입회원";
 		}
 
+		String cpnNm = "";
+		if (coupon != null) {
+			cpnNm = coupon.getCpnNm();
+		}
+
 		GagaMap replaceInfo = new GagaMap();
 		replaceInfo.setString("siteNm", siteNm);
 		replaceInfo.setString("custNm", customer.getCustNm());
 		replaceInfo.setString("custId", custId);
-		replaceInfo.setString("cpnNm", coupon.getCpnNm());
+		replaceInfo.setString("cpnNm", cpnNm);
 		replaceInfo.setString("joinDt", today);
 
 		replaceInfo.set("custNo", customer.getCustNo());
@@ -401,9 +406,9 @@ public class TscKakaotalkService {
 		dm.setFuserid(String.valueOf(senderNo)); // 발송자NO
 		dm.setFdestine(customer.getCellPhnno());
 		dm.setFkkoresendtype("LMS");
-		String emailAgreeYn = "Y".equals(customer.getEmailAgreeYn()) ? "수신":"미수신";
-		String smsAgreeYn = "Y".equals(customer.getSmsAgreeYn()) ? "수신":"미수신";
-		String mkAgreeYn = "Y".equals(customer.getMkAgreeYn()) ? "수신":"미수신";
+		String emailAgreeYn = "Y".equals(customer.getEmailAgreeYn()) ? "수신동의" : "미동의";
+		String smsAgreeYn = "Y".equals(customer.getSmsAgreeYn()) ? "수신동의" : "미동의";
+		String mkAgreeYn = "Y".equals(customer.getMkAgreeYn()) ? "수신동의" : "미동의";
 
 		GagaMap replaceInfo = new GagaMap();
 		replaceInfo.setString("siteNm", siteNm);

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

@@ -22,6 +22,8 @@ import com.style24.persistence.domain.Payment;
 
 import lombok.extern.slf4j.Slf4j;
 
+import java.lang.reflect.Field;
+import java.nio.charset.Charset;
 import java.util.HashMap;
 
 @Service
@@ -400,14 +402,14 @@ public class TscKcpService {
 		siteKey = "4aVa--.Xz8Fc78nwYPsrmmY__";
 
 		String tranCd = "00100000";
-		
+		// 파일 인코딩 EUC-KR 변경
+		setFileEncoding("EUC-KR");
 		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
 		c_PayPlus.mf_init( "", pgUrl, pgPort, 0, env.getProperty("pg.kcp.log.dir") );
 		c_PayPlus.mf_init_set();
 
 		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
 		String custIp = request.getRemoteAddr();
-		//String custIp = custAccount.getIpAddress();
 		String ordNo = String.valueOf(custAccount.getOrdNo());
 		String bankCode = custAccount.getBankCd();
 		String accountNo = custAccount.getAccountNo();
@@ -447,6 +449,8 @@ public class TscKcpService {
 		result.set("resCd", c_PayPlus.m_res_cd);										// 결과 메시지
 		result.set("resMsg", c_PayPlus.m_res_msg);										// 결과 메시지
 		result.set("res_en_msg", c_PayPlus.getRecvMsgOfKey("res_en_msg"));				// 결과 메시지(영문)
+		// 파일 인코딩 UTF-8 변경
+		setFileEncoding("UTF-8");
 
 		return result;
 	}
@@ -526,4 +530,33 @@ public class TscKcpService {
 
 		return result;
 	}
+
+	/**
+	 * 파일 인코딩 설정
+	 * JDK 1.9에서는 작동 안하는것 같음
+	 * @param encoding - EUC-KR, UTF-8
+	 * @author jsshin
+	 * @since 2021. 06. 21
+	 */
+	private void setFileEncoding(String encoding) {
+		log.info("file.encoding Before: {}", System.getProperty("file.encoding"));
+		System.setProperty("file.encoding", encoding);
+		Field charset;
+		try {
+			charset = Charset.class.getDeclaredField("defaultCharset");
+			charset.setAccessible(true);
+			charset.set(null, null);
+		} catch (NoSuchFieldException e1) {
+			e1.printStackTrace();
+		} catch (SecurityException e1) {
+			e1.printStackTrace();
+		} catch (IllegalArgumentException e) {
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			e.printStackTrace();
+		}
+		log.info("file.encoding After: {}", System.getProperty("file.encoding"));
+	}
+
 }
+

+ 99 - 26
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -146,6 +146,7 @@ public class TscOrderChangeService {
 	@SuppressWarnings("unchecked")
 	@Transactional("shopTxnManager")
 	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 단위)
@@ -181,6 +182,12 @@ public class TscOrderChangeService {
 				modType = "STPC";																			// KCP 부분취소
 			}
 		}
+		
+		// 2021.06.21 교환출고 재고부족 취소실행
+		Order exchangeDelvFailCnclVo = new Order();
+		exchangeDelvFailCnclVo.setUpdNo(userNo);
+		exchangeDelvFailCnclVo.setOrdChgSq(ordChgSq);
+		orderChangeDao.updateExchangeDelvFailCnclYn(exchangeDelvFailCnclVo);
 
 		// 3. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
 		List<Payment> pgList = new ArrayList<>();
@@ -224,10 +231,10 @@ public class TscOrderChangeService {
 						int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
 
 						// 3-2-1. 주문상세정보 수정
-						orderChangeDao.updateOrderDetailTemp(vo);
+						orderChangeDao.updateOrderDetail(vo);
 
 						// 3-2-2. 주문상세 이력 등록
-						orderChangeDao.createOrderDetailHstCnclRtnTemp(vo);
+						orderChangeDao.createOrderDetailHstCnclRtn(vo);
 
 						// 3-2-3. 주문상세단품정보 수정 및 주문상세단품이력 등록
 						// 주문상세단품정보조회
@@ -311,14 +318,11 @@ public class TscOrderChangeService {
 							orderDetailItem.setUpdNo(userNo);
 							orderDetailItem.setOrdDtlStat(ordDtlStat);
 
-							orderChangeDao.updateOrderDetailItemTemp(orderDetailItem);
-							orderChangeDao.createOrderDetailItemHstTemp(orderDetailItem);
+							orderChangeDao.updateOrderDetailItem(orderDetailItem);
+							orderChangeDao.createOrderDetailItemHst(orderDetailItem);
 
 							index++;
 						}
-						
-						// 2021.06.15 교환출고 재고부족 취소실행
-						orderChangeDao.updateExchangeDelvFailCnclYn(vo);
 
 						// 3-2-4. 사용포인트원복
 						int pntDcAmt = vo.getPntDcAmt();
@@ -546,19 +550,21 @@ public class TscOrderChangeService {
 
 		// 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);
+			// 2021.06.21  교환완료가 아닌상태의 변경신청값일때 실행
+			if (!TscConstants.OrderChangeStat.EXCHANGE_CANCEL.value().equals(chgStat)) {
+				// 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);
+			}
 		}
 
 		// 5. WMS 취소 처리
@@ -885,6 +891,7 @@ public class TscOrderChangeService {
 		Integer regNo = excReq.getRegNo();					// 등록자번호
 		Integer updNo = excReq.getUpdNo();					// 수정자번호
 		String wdTargetYn = excReq.getWdTargetYn();			// 회수지시여부
+		String selfGoodsYn = excReq.getSelfGoodsYn();		// 자사여부
 		int ordChgSq = 0;									// 주문변경일련번호
 
 		// 교환신청 목록 설정
@@ -931,7 +938,7 @@ public class TscOrderChangeService {
 		int exchangeOrdDtlNo = 0;
 
 		for (Order order : excReqList) {
-			String delvFeeCd = order.getDelvFeeCd();
+			String delvFeeCd = "Y".equals(selfGoodsYn) ? "WMS" : order.getDelvFeeCd();
 			int chgQty = order.getChgQty();
 			String ordChgOpt = order.getOrdChgOpt();
 			int ordDtlNo = order.getOrdDtlNo();
@@ -1636,7 +1643,7 @@ public class TscOrderChangeService {
 	 */
 	@SuppressWarnings("unchecked")
 	@Transactional("shopTxnManager")
-	public GagaMap orderCancelPreInfoTemp(OrderChange orderChange, Integer userNo) {
+	public GagaMap orderCancelPreInfo(OrderChange orderChange, Integer userNo) {
 		GagaMap result = new GagaMap();
 		Integer ordChgSq;
 
@@ -1962,10 +1969,10 @@ public class TscOrderChangeService {
 						int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
 
 						// 3-2-1. 주문상세정보 수정
-						orderChangeDao.updateOrderDetailTemp(vo);
+						orderChangeDao.updateOrderDetail(vo);
 
 						// 3-2-2. 주문상세 이력 등록
-						orderChangeDao.createOrderDetailHstCnclRtnTemp(vo);
+						orderChangeDao.createOrderDetailHstCnclRtn(vo);
 
 						// 3-2-3. 주문상세단품정보 수정 및 주문상세단품이력 등록
 						// 주문상세단품정보조회
@@ -2051,8 +2058,8 @@ public class TscOrderChangeService {
 							
 							log.info("ordDtlStat ::: {}", ordDtlStat);
 
-							orderChangeDao.updateOrderDetailItemTemp(orderDetailItem);
-							orderChangeDao.createOrderDetailItemHstTemp(orderDetailItem);
+							orderChangeDao.updateOrderDetailItem(orderDetailItem);
+							orderChangeDao.createOrderDetailItemHst(orderDetailItem);
 
 							index++;
 						}
@@ -3855,6 +3862,72 @@ public class TscOrderChangeService {
 
 		return sb.toString();
 	}
+	
+	/**
+	 * 교환추가배송비 취소처리
+	 *
+	 * @param OrderChange (ordChgSq, userNo)
+	 * @author jsh77b
+	 * @since 2021. 06. 21
+	 */
+	public void addPayCostCncl(OrderChange orderChange) {
+		
+		// 2021.06.21
+		int ordQty = orderChangeDao.getExchangeDelvFailQty(orderChange);
+				
+		if (ordQty < 1) {
+			// PG 실행 (취소시 추가결제금액 취소처리)
+			Collection<Order> paymentList = orderChangeDao.getAddDeliveryFeePayment(orderChange);
+			
+			// 추가배송비 존재 시
+			if (paymentList != null && paymentList.size() > 0) {
+				
+				// 추가배송비 결제정보 조회
+				Payment pg = new Payment();
+				pg.setOrdChgSq(orderChange.getOrdChgSq());
+				pg = orderChangeDao.getAddPayCostPaymentInfo(pg);
+				
+				// 2021.06.21 추가배송비 취소 처리
+				// 회수구분 회수일때는 부분취소 (W)
+				if ("W".equals(orderChange.getWdGb())) {
+					orderChangeDao.createAddDeliveryFeeCancelPart(orderChange);
+
+					// 추가배송비 취소 정보 설정
+					if (StringUtils.isNotBlank(pg.getPgTid())) {
+						pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+						pg.setPayGb(TscConstants.PaymentGb.DELIVERY.value());
+						pg.setModType("STSC");
+						pg.setModDesc("가맹점 취소 - 부분 취소");
+						pg.setIpAddress(orderChange.getIpAddress());
+						pg.setRegNo(orderChange.getUserNo());
+						pg.setUpdNo(orderChange.getUserNo());
+						
+						int leftAmt = orderChange.getAddPayCost() / 2;
+						
+						pg.setLeftAmt(leftAmt);
+						pg.setPartCancelAmt(leftAmt);
+					}
+				}
+				// 회수구분 직접일때는 전체취소 (D)
+				else {
+					orderChangeDao.createAddDeliveryFeeCancel(orderChange);
+					
+					// 추가배송비 취소 정보 설정
+					if (StringUtils.isNotBlank(pg.getPgTid())) {
+						pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+						pg.setPayGb(TscConstants.PaymentGb.DELIVERY.value());
+						pg.setModType("STSC");
+						pg.setModDesc("가맹점 취소 - 전체 취소");
+						pg.setIpAddress(orderChange.getIpAddress());
+						pg.setRegNo(orderChange.getUserNo());
+						pg.setUpdNo(orderChange.getUserNo());
+					}
+				}
+				
+				// KCP 취소 처리
+				kcpService.kcpCancel(pg);
+			}
+		}
 
 	public Payment getPaymentInfo(Payment param) {
 		return orderChangeDao.getPaymentInfo(param);

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

@@ -1402,7 +1402,7 @@ public class TscOrderService {
 				// 주문상세 상태값 변경
 				order.setOrdDtlStat(TscConstants.OrderDetailStat.PURCHASE_CONFIRM.value());
 				order.setOrdDtlNo(ordDtlNo);
-				orderDao.changedOrdDtlStat(order);
+				this.saveOrdDtlStat(order);
 			}
 			
 			result.set("message", NumberFormat.getInstance().format(gvPointAmt) + "P가 적립되었습니다.");
@@ -2214,6 +2214,7 @@ public class TscOrderService {
 		String chgerPhnno	= "";
 		String goodsNm		= "";
 		String ordNm		= "";
+		String ordPhnno		= "";
 		
 		int index = 0;
 		for (Order orderInfo : orderAddPayGoodsList) {
@@ -2228,6 +2229,7 @@ public class TscOrderService {
 				chgerPhnno	= orderInfo.getChgerPhnno();
 				goodsNm		= orderInfo.getGoodsNm();
 				ordNm		= orderInfo.getOrdNm();
+				ordPhnno	= orderInfo.getOrdPhnno();
 			}
 			
 			// 1.1 세트상품 옵션별 배열로 담기
@@ -2264,6 +2266,7 @@ public class TscOrderService {
 		resultMap.set("chgerPhnno"				, chgerPhnno);				// 변경신청핸드폰번호
 		resultMap.set("goodsNm"					, goodsNm);					// 상품명
 		resultMap.set("ordNm"					, ordNm);					// 주문자
+		resultMap.set("ordPhnno"				, ordPhnno);				// 주문자핸드폰번호
 		resultMap.set("delvCnt"					, delvFeeCdList.size());	// 업체명카운트
 		resultMap.set("delvFeeCdList"			, delvFeeCdList);			// 추가결제시 업체명 목록 조회
 		
@@ -2351,7 +2354,7 @@ public class TscOrderService {
 
 				} else {		// 무통장입금 주문 중 환불계좌정보 없을 경우 제외는 취소처리
 					// 취소완료
-					GagaMap cancelInfo = orderChangeService.orderCancelPreInfoTemp(change, userNo);
+					GagaMap cancelInfo = orderChangeService.orderCancelPreInfo(change, userNo);
 
 					// 3. 취소완료 카카오알림톡 발송
 					Integer ordChgSq = cancelInfo.getInt("ordChgSq");

+ 51 - 1
src/main/java/com/style24/core/biz/thirdparty/HansaeErp.java

@@ -41,7 +41,10 @@ public class HansaeErp {
 
 	// 재고 URL
 	private String stockUrl = "http://erp.hansaemk.com:96/api/#{erpGb}/Shop/StockCheck";
-
+	
+	// RT URL
+	private String stockRtUrl = "http://erp.hansaemk.com:96/api/#{erpGb}/Shop/StockRTConfirm";
+		
 	// 매출반영 URL
 	private String salesUrl = "http://erp.hansaemk.com:96/api/#{erpGb}/Shop/SaleIF";
 
@@ -284,4 +287,51 @@ public class HansaeErp {
 		return salesMap;
 	}
 
+	/**
+	 * ERP RT
+	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
+	 * @param Collection<Erp> - 재고이동 정보  
+	 * @return
+	 * @author moon
+	 * @since 2021. 06. 21
+	 */
+	public String erpStockRt(String erpGb, Collection<Erp> rtList) {
+		GagaMap salesMap = new GagaMap();
+		String rtn = "S";
+
+		try {
+			// Parameter
+			String requestData = (new Gson()).toJson(rtList, new TypeToken<Collection<Erp>>() {
+			}.getType());
+			MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
+			params.add("DATA", requestData);
+			log.info("params: {}", params);
+
+			String requestUrl = GagaStringUtil.replace(stockRtUrl, "#{erpGb}", erpGb);
+			log.info("requestUrl: {}", requestUrl);
+
+			HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params);
+			URI url = URI.create(requestUrl);
+
+			// POST방식으로 호출
+			ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+			log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+			String jsonResult = responseEntity.getBody();
+			log.info("responseEntity.getBody(): {}", jsonResult);
+
+			Gson gson = new Gson();
+			GagaMap resultMap = gson.fromJson(jsonResult, GagaMap.class);
+
+			if (resultMap.containsKey("Message")) { // 실패 메시지
+				log.error("Message: {}", resultMap.get("Message").toString());
+				rtn = "F";
+			} 
+		} catch (Exception e) {
+			log.error("{}", e.getMessage().toString());
+		}
+
+		return rtn;
+	}
+	
 }

+ 21 - 0
src/main/java/com/style24/core/support/env/TscConstants.java

@@ -997,5 +997,26 @@ public class TscConstants {
 			return value;
 		}
 	}
+	
+	// 정산구분상태
+	public enum OrdDtlItemStat {
+		
+		SALE_PAYMENT_COMPLETE("G720_10"), 			// 판매-결제완료
+		SALE_SHIPPING("G720_20"),					// 판매-배송완료
+		SALE_RETURN_CANCEL("G720_30"), 				// 환입-취소완료
+		SALE_RETURN_SOLDOUT_CANCEL("G720_40"),		// 환입-품절취소
+		SALE_RETURN_RETURN_COMPLETE("G720_50"),		// 환입-반품완료
+		SALE_RETURN_EXCHANGE_COMPLETE("G720_60");	// 환입-교환완료
+
+		private String value;
+
+		private OrdDtlItemStat(String value) {
+			this.value = value;
+		}
+
+		public String value() {
+			return value;
+		}
+	}
 
 }

+ 6 - 0
src/main/java/com/style24/persistence/domain/Erp.java

@@ -38,5 +38,11 @@ public class Erp implements Serializable {
 	// 매출반영 Response
 	private String CD_SALEBILL;	// 판매전표번호(매출일자, 브랜드 단위)
 	private String DS_ERROR;	// 실패메시지
+	
+	// rt
+	private String CD_RTOUTSHOP; // 매장코드
+	private String QT_RTOUT;     // 수량 
+	private String DS_INVOICE;   // 송장번호
+	
 
 }

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

@@ -34,8 +34,8 @@ public class Order extends TscBaseDomain {
 	private String ordTelno;						// 주문자핸드폰번호
 	private String siteCd;							// 사이트코드
 	private String siteCdNm;						// 사이트코드명
-	private String npayOrdNo;							// 네이버페이주문번호
-	private String npayOrdDtlNo;						// 네이버페이 상품주문번호(주문상세번호)
+	private String npayOrdNo;						// 네이버페이주문번호
+	private String npayOrdDtlNo;					// 네이버페이 상품주문번호(주문상세번호)
 	private String frontGb;							// 프론트구분 (P, M, A)
 	private String frontGbNm;						// 프론트구분명 (PC, MOBILE, APP)
 	private String extmallNm;						// 외부몰명
@@ -728,6 +728,8 @@ public class Order extends TscBaseDomain {
 
 	private int dtlOrdAmt;
 	private int dtlItemOrdAmt;
+	
+	private String ordChgGb;
 
 	// 네이버페이 주문형
 	private String stdt;

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

@@ -225,4 +225,5 @@ public class OrderChange extends TscBaseDomain {
 	private int codFee;
 	private int encloseFee;	
 	private int goodsCnt;
+	private String ordChgGb;
 }

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

@@ -4070,6 +4070,7 @@
 		/* TscOrder.getAddPayGoodsList */
 		SELECT Z.ORD_NO
 		     , Z.ORD_NM
+		     , Z.ORD_PHNNO
 		     , Z.ORD_DTL_NO
 		     , Z.ORD_CHG_SQ
 		     , Z.CHG_STAT
@@ -4122,6 +4123,7 @@
 		         , OC.CHGER_NM
 		         , OC.CHGER_PHNNO
 		         , O.ORD_NM
+		         , O.ORD_PHNNO
 		         , (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_CHANGE_DETAIL OCD
 		    INNER  JOIN TB_ORDER_CHANGE OC
@@ -4148,6 +4150,7 @@
 		) Z
 		GROUP  BY Z.ORD_NO
 		     , Z.ORD_NM
+		     , Z.ORD_PHNNO
 		     , Z.ORD_DTL_NO
 		     , Z.ORD_CHG_SQ
 		     , Z.CHG_STAT

+ 79 - 315
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -226,6 +226,9 @@
 		         , A.DELV_FEE_CD
 		         , A.ORD_CAN_CHG_QTY
 		         , A.CHG_STAT
+		         , A.WD_GB
+		         , A.ADD_PAY_COST
+		         , A.DELV_FAIL_REASON
 		    FROM (
 		        SELECT OD.ORD_NO
 		             , OD.ORD_DTL_NO
@@ -287,6 +290,9 @@
 		                    THEN X.CHG_STAT
 		                    ELSE Y.CHG_STAT
 		                    END CHG_STAT
+		             , Y.WD_GB
+		             , Y.ADD_PAY_COST
+		             , Y.DELV_FAIL_REASON
 		        FROM   TB_ORDER_DETAIL OD
 		        INNER  JOIN TB_GOODS G1
 		        ON     OD.GOODS_CD = G1.GOODS_CD
@@ -335,9 +341,14 @@
 		            SELECT EDF.ORD_DTL_NO
 		                 , EDF.CNCL_RTN_QTY
 		                 , OCD.CHG_STAT
+		                 , OC.WD_GB
+		                 , OC.ADD_PAY_COST
+		                 , EDF.DELV_FAIL_REASON
 		              FROM TB_EXCHANGE_DELV_FAIL EDF
 		             INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
 		                ON EDF.ORD_DTL_NO = OCD.CHG_ORD_DTL_NO
+		             INNER JOIN TB_ORDER_CHANGE OC
+		                ON OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ
 		             WHERE OCD.DEL_YN = 'N'
 		               AND OCD.ORD_CHG_SQ = #{ordChgSq}
 		               AND EDF.DELV_CNCL_YN = 'N'
@@ -398,6 +409,9 @@
 		         , A.DELV_FEE_CD
 		         , A.ORD_CAN_CHG_QTY
 		         , A.CHG_STAT
+		         , A.WD_GB
+		         , A.ADD_PAY_COST
+		         , A.DELV_FAIL_REASON
 		) Z
 		INNER  JOIN (
 		    SELECT X.DELV_FEE_CD
@@ -474,31 +488,6 @@
 	<!-- 주문상세단품정보 수정 -->
 	<update id="updateOrderDetailItem" parameterType="Order">
 		/* OrderChange.updateOrderDetailItem */
-		UPDATE TB_ORDER_DETAIL_ITEM ODI
-		 INNER JOIN TB_ORDER_DETAIL OD
-		    ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO
-		   SET ODI.CNCL_RTN_AMT     = ODI.CNCL_RTN_AMT + #{cnclRtnAmt}
-		     , ODI.CPN1_DC_AMT      = ODI.CPN1_DC_AMT - #{cpn1DcAmt}
-		     , ODI.TMTB1_DC_AMT     = ODI.TMTB1_DC_AMT - #{tmtb1DcAmt}
-		     , ODI.TMTB2_DC_AMT     = ODI.TMTB2_DC_AMT - #{tmtb2DcAmt}
-		     , ODI.GOODS_CPN_DC_AMT = ODI.GOODS_CPN_DC_AMT - #{goodsCpnDcAmt}
-		     , ODI.CART_CPN_DC_AMT  = ODI.CART_CPN_DC_AMT - #{cartCpnDcAmt}
-		     , ODI.PNT_DC_AMT       = ODI.PNT_DC_AMT - #{pntDcAmt}
-		     , ODI.PRE_PNT_DC_AMT   = ODI.PRE_PNT_DC_AMT - #{prePntDcAmt}
-		     , ODI.SAVE_PNT_AMT     = ODI.SAVE_PNT_AMT - #{savePntAmt}
-		     , ODI.REAL_ORD_AMT     = ODI.REAL_ORD_AMT - #{realOrdAmt}
-		     , ODI.GFCD_USE_AMT     = ODI.GFCD_USE_AMT - #{gfcdUseAmt}
-		     , ODI.UPD_NO           = #{updNo}
-		     , ODI.UPD_DT           = NOW()
-		 WHERE 1 = 1
-		   AND ODI.ORD_NO = #{ordNo}
-		   AND ODI.ORD_DTL_NO = #{ordDtlNo}
-		   AND ODI.ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
-	</update>
-
-	<!-- 주문상세단품정보 수정 -->
-	<update id="updateOrderDetailItemTemp" parameterType="Order">
-		/* OrderChange.updateOrderDetailItemTemp */
 		UPDATE TB_ORDER_DETAIL_ITEM
 		   SET CNCL_RTN_AMT     = #{cnclRtnAmt}
 		     , CPN1_DC_AMT      = #{cpn1DcAmt}
@@ -520,78 +509,6 @@
 
 	<!-- 주문상세단품이력정보 등록 -->
 	<insert id="createOrderDetailItemHst" parameterType="Order">
-		/* OrderChange.createOrderDetailItemHst */
-		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
-		       ORD_DTL_ITEM_SQ
-		     , ORD_DTL_NO
-		     , ORD_NO
-		     , ORD_DTL_STAT
-		     , ITEM_CD
-		     , OPT_CD
-		     , OPT_CD1
-		     , OPT_CD2
-		     , SKU_MODEL_NO
-		     , PRODUCT_NO
-		     , PRODUCT_CODE
-		     , ITEM_QTY
-		     , ITEM_PRICE
-		     , OPT_ADD_PRICE
-		     , DISP_ORD
-		     , ORD_AMT
-		     , CNCL_RTN_AMT
-		     , CPN1_DC_AMT
-		     , TMTB1_DC_AMT
-		     , TMTB2_DC_AMT
-		     , GOODS_CPN_DC_AMT
-		     , CART_CPN_DC_AMT
-		     , PNT_DC_AMT
-		     , PRE_PNT_DC_AMT
-		     , SAVE_PNT_AMT
-		     , REAL_ORD_AMT
-		     , GFCD_USE_AMT
-		     , REG_NO
-		     , REG_DT
-		     , UPD_NO
-		     , UPD_DT
-		)
-		SELECT ORD_DTL_ITEM_SQ
-		     , ORD_DTL_NO
-		     , ORD_NO
-		     , #{ordDtlStat}
-		     , ITEM_CD
-		     , OPT_CD
-		     , OPT_CD1
-		     , OPT_CD2
-		     , SKU_MODEL_NO
-		     , PRODUCT_NO
-		     , PRODUCT_CODE
-		     , ITEM_QTY
-		     , ITEM_PRICE
-		     , OPT_ADD_PRICE
-		     , DISP_ORD
-		     , ORD_AMT
-		     , #{cnclRtnAmt}
-		     , #{cpn1DcAmt}
-		     , #{tmtb1DcAmt}
-		     , #{tmtb2DcAmt}
-		     , #{goodsCpnDcAmt}
-		     , #{cartCpnDcAmt}
-		     , #{pntDcAmt}
-		     , #{prePntDcAmt}
-		     , #{savePntAmt}
-		     , #{realOrdAmt}
-		     , #{gfcdUseAmt}
-		     , REG_NO
-		     , REG_DT
-		     , UPD_NO
-		     , UPD_DT
-		  FROM TB_ORDER_DETAIL_ITEM
-		 WHERE 1 = 1
-		   AND ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
-	</insert>
-
-	<!-- 주문상세단품이력정보 등록 -->
-	<insert id="createOrderDetailItemHstTemp" parameterType="Order">
 		/* OrderChange.createOrderDetailItemHstTemp */
 		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
 		       ORD_DTL_ITEM_SQ
@@ -812,53 +729,10 @@
 		 WHERE ORD_CHG_SQ = #{ordChgSq}
 		   AND ORD_DTL_NO = #{ordDtlNo}
 	</insert>
-	
-	<!-- 주문상세정보 수정 -->
-	<update id="updateOrderDetail" parameterType="Order">
-		/* OrderChange.updateOrderDetail */
-		UPDATE TB_ORDER_DETAIL OD
-		 INNER JOIN (
-		    SELECT ODI.ORD_DTL_NO
-		         , SUM(ODI.CNCL_RTN_AMT)     AS CNCL_RTN_AMT
-		         , SUM(ODI.CPN1_DC_AMT)      AS CPN1_DC_AMT
-		         , SUM(ODI.TMTB1_DC_AMT)     AS TMTB1_DC_AMT
-		         , SUM(ODI.TMTB2_DC_AMT)     AS TMTB2_DC_AMT
-		         , SUM(ODI.GOODS_CPN_DC_AMT) AS GOODS_CPN_DC_AMT
-		         , SUM(ODI.CART_CPN_DC_AMT)  AS CART_CPN_DC_AMT
-		         , SUM(ODI.PNT_DC_AMT)       AS PNT_DC_AMT
-		         , SUM(ODI.PRE_PNT_DC_AMT)   AS PRE_PNT_DC_AMT
-		         , SUM(ODI.SAVE_PNT_AMT)     AS SAVE_PNT_AMT
-		         , SUM(ODI.REAL_ORD_AMT)     AS REAL_ORD_AMT
-		         , SUM(ODI.GFCD_USE_AMT)     AS GFCD_USE_AMT
-		      FROM TB_ORDER_DETAIL_ITEM ODI
-		     WHERE ODI.ORD_NO = #{ordNo}
-		       AND ODI.ORD_DTL_NO = #{ordDtlNo}
-		     GROUP BY ODI.ORD_DTL_NO
-		 ) Z
-		    ON OD.ORD_DTL_NO = Z.ORD_DTL_NO
-		   SET OD.ORD_DTL_STAT     = CASE WHEN OD.ORD_QTY > (OD.CNCL_RTN_QTY + #{ordCanChgQty}) THEN OD.ORD_DTL_STAT
-		                                  ELSE #{ordDtlStat}
-		                              END
-		     , OD.CNCL_RTN_QTY     = OD.CNCL_RTN_QTY + #{ordCanChgQty}
-		     , OD.CNCL_RTN_AMT     = Z.CNCL_RTN_AMT
-		     , OD.CPN1_DC_AMT      = Z.CPN1_DC_AMT
-		     , OD.TMTB1_DC_AMT     = Z.TMTB1_DC_AMT
-		     , OD.TMTB2_DC_AMT     = Z.TMTB2_DC_AMT
-		     , OD.GOODS_CPN_DC_AMT = Z.GOODS_CPN_DC_AMT
-		     , OD.CART_CPN_DC_AMT  = Z.CART_CPN_DC_AMT
-		     , OD.PNT_DC_AMT       = Z.PNT_DC_AMT
-		     , OD.PRE_PNT_DC_AMT   = Z.PRE_PNT_DC_AMT
-		     , OD.SAVE_PNT_AMT     = Z.SAVE_PNT_AMT
-		     , OD.REAL_ORD_AMT     = Z.REAL_ORD_AMT
-		     , OD.GFCD_USE_AMT     = Z.GFCD_USE_AMT
-		 WHERE 1 = 1
-		   AND OD.ORD_NO = #{ordNo}
-		   AND OD.ORD_DTL_NO = #{ordDtlNo}
-	</update>
 
 	<!-- 주문상세단품정보 수정 -->
-	<update id="updateOrderDetailTemp" parameterType="Order">
-		/* OrderChange.updateOrderDetailTemp */
+	<update id="updateOrderDetail" parameterType="Order">
+		/* OrderChange.updateOrderDetail */
 		UPDATE TB_ORDER_DETAIL OD
 		   SET OD.ORD_DTL_STAT     = CASE WHEN OD.ORD_QTY > (OD.CNCL_RTN_QTY + #{ordCanChgQty}) THEN OD.ORD_DTL_STAT
 		                                  ELSE #{ordDtlStat}
@@ -880,7 +754,7 @@
 		 WHERE OD.ORD_NO = #{ordNo}
 		   AND OD.ORD_DTL_NO = #{ordDtlNo}
 	</update>
-	
+
 	<!-- 주문상세이력정보 (취소,반품) 등록 -->
 	<insert id="createOrderDetailHstCnclRtn" parameterType="Order">
 		/* OrderChange.createOrderDetailHstCnclRtn */
@@ -957,176 +831,6 @@
 		     , UPD_NO
 		     , UPD_DT
 		)
-		SELECT OD.ORD_DTL_NO
-		     , OD.ORD_NO
-		     , OD.ORD_EXCH_GB
-		     , #{ordDtlStat}
-		     , OD.ORG_ORD_DTL_NO
-		     , OD.SUPPLY_COMP_CD
-		     , OD.GOODS_CD
-		     , OD.FORMAL_GB
-		     , OD.GOODS_TYPE
-		     , OD.LIST_PRICE
-		     , OD.CURR_PRICE
-		     , OD.DC_RATE
-		     , OD.OPT_ADD_PRICE
-		     , OD.ORD_QTY
-		     , Z.ORD_AMT
-		     , #{ordCanChgQty}
-		     , OD.ORD_AMT
-		     , OD.CPN1_CPN_SQ
-		     , OD.CPN1_DC_AMT - Z.CPN1_DC_AMT
-		     , OD.TMTB1_SQ
-		     , OD.TMTB1_DC_AMT - Z.TMTB1_DC_AMT
-		     , OD.TMTB2_SQ
-		     , OD.TMTB2_DC_AMT - Z.TMTB2_DC_AMT
-		     , OD.GOODS_CPN_SQ
-		     , OD.GOODS_CPN_DC_AMT - Z.GOODS_CPN_DC_AMT
-		     , OD.CART_CPN_SQ
-		     , OD.CART_CPN_DC_AMT - Z.CART_CPN_DC_AMT
-		     , OD.BURDEN_RATE
-		     , OD.PNT_DC_AMT - Z.PNT_DC_AMT
-		     , OD.PRE_PNT_DC_AMT - Z.PRE_PNT_DC_AMT
-		     , OD.SAVE_PNT_AMT - Z.SAVE_PNT_AMT
-		     , Z.REAL_ORD_AMT
-		     , OD.GFCD_USE_AMT - Z.GFCD_USE_AMT
-		     , OD.VENDOR_ID
-		     , OD.EXTMALL_ID
-		     , OD.AGENT_ORDER_ID
-		     , OD.EXTMALL_ORDER_ID
-		     , OD.CHANGEABLE_YN
-		     , OD.CHANGE_FEE_FREE_YN
-		     , OD.RETURNABLE_YN
-		     , OD.RETURN_FEE_FREE_YN
-		     , OD.SOLDOUT_YN
-		     , OD.SOLDOUT_MEMO
-		     , OD.SOLDOUT_REG_NO
-		     , OD.SOLDOUT_REG_DT
-		     , OD.DELV_ADDR_SQ
-		     , OD.DELV_FEE_CD
-		     , OD.SHOT_DELV_YN
-		     , OD.GIFT_PACK_YN
-		     , OD.MAKE_GOODS_YN
-		     , OD.ENTRY_NO
-		     , OD.DELV_LOC_CD
-		     , OD.DELV_ASSIGN_DT
-		     , OD.DELV_ASSIGN_STAT
-		     , OD.DSTRBT_NOTE
-		     , OD.DELV_STDT
-		     , OD.DELV_EDDT
-		     , OD.SHIP_COMP_CD
-		     , OD.INVOICE_NO
-		     , OD.INVOICE_SEND_YN
-		     , OD.SELL_STORE_CD
-		     , OD.SELL_FEE_RATE
-		     , OD.AF_LINK_CD
-		     , OD.ITHR_CD
-		     , OD.CONTENTS_LOC
-		     , OD.PLAN_DTL_SQ
-		     , OD.SOCIAL_SQ
-		     , #{regNo}            AS REG_ID
-		     , NOW()               AS REG_DT
-		     , #{regNo}            AS REG_ID
-		     , NOW()               AS UPD_DT
-		  FROM TB_ORDER_DETAIL OD
-		 INNER JOIN (
-		      SELECT ODI.ORD_DTL_NO
-		           , SUM(ODI.ORD_AMT)          AS ORD_AMT
-		           , SUM(ODI.CNCL_RTN_AMT)     AS CNCL_RTN_AMT
-		           , SUM(ODI.CPN1_DC_AMT)      AS CPN1_DC_AMT
-		           , SUM(ODI.TMTB1_DC_AMT)     AS TMTB1_DC_AMT
-		           , SUM(ODI.TMTB2_DC_AMT)     AS TMTB2_DC_AMT
-		           , SUM(ODI.GOODS_CPN_DC_AMT) AS GOODS_CPN_DC_AMT
-		           , SUM(ODI.CART_CPN_DC_AMT)  AS CART_CPN_DC_AMT
-		           , SUM(ODI.PNT_DC_AMT)       AS PNT_DC_AMT
-		           , SUM(ODI.PRE_PNT_DC_AMT)   AS PRE_PNT_DC_AMT
-		           , SUM(ODI.SAVE_PNT_AMT)     AS SAVE_PNT_AMT
-		           , SUM(ODI.REAL_ORD_AMT)     AS REAL_ORD_AMT
-		           , SUM(ODI.GFCD_USE_AMT)     AS GFCD_USE_AMT
-		        FROM TB_ORDER_DETAIL_ITEM ODI
-		       WHERE ODI.ORD_DTL_NO = #{ordDtlNo}
-		       GROUP BY ODI.ORD_DTL_NO
-		 ) Z
-		    ON OD.ORD_DTL_NO = Z.ORD_DTL_NO
-		   AND OD.ORD_DTL_NO = #{ordDtlNo}
-	</insert>
-
-	<!-- 주문상세이력정보 (취소,반품) 등록 -->
-	<insert id="createOrderDetailHstCnclRtnTemp" parameterType="Order">
-		/* OrderChange.createOrderDetailHstCnclRtnTemp */
-		INSERT INTO TB_ORDER_DETAIL_HST (
-		       ORD_DTL_NO
-		     , ORD_NO
-		     , ORD_EXCH_GB
-		     , ORD_DTL_STAT
-		     , ORG_ORD_DTL_NO
-		     , SUPPLY_COMP_CD
-		     , GOODS_CD
-		     , FORMAL_GB
-		     , GOODS_TYPE
-		     , LIST_PRICE
-		     , CURR_PRICE
-		     , DC_RATE
-		     , OPT_ADD_PRICE
-		     , ORD_QTY
-		     , ORD_AMT
-		     , CNCL_RTN_QTY
-		     , CNCL_RTN_AMT
-		     , CPN1_CPN_SQ
-		     , CPN1_DC_AMT
-		     , TMTB1_SQ
-		     , TMTB1_DC_AMT
-		     , TMTB2_SQ
-		     , TMTB2_DC_AMT
-		     , GOODS_CPN_SQ
-		     , GOODS_CPN_DC_AMT
-		     , CART_CPN_SQ
-		     , CART_CPN_DC_AMT
-		     , BURDEN_RATE
-		     , PNT_DC_AMT
-		     , PRE_PNT_DC_AMT
-		     , SAVE_PNT_AMT
-		     , REAL_ORD_AMT
-		     , GFCD_USE_AMT
-		     , VENDOR_ID
-		     , EXTMALL_ID
-		     , AGENT_ORDER_ID
-		     , EXTMALL_ORDER_ID
-		     , CHANGEABLE_YN
-		     , CHANGE_FEE_FREE_YN
-		     , RETURNABLE_YN
-		     , RETURN_FEE_FREE_YN
-		     , SOLDOUT_YN
-		     , SOLDOUT_MEMO
-		     , SOLDOUT_REG_NO
-		     , SOLDOUT_REG_DT
-		     , DELV_ADDR_SQ
-		     , DELV_FEE_CD
-		     , SHOT_DELV_YN
-		     , GIFT_PACK_YN
-		     , MAKE_GOODS_YN
-		     , ENTRY_NO
-		     , DELV_LOC_CD
-		     , DELV_ASSIGN_DT
-		     , DELV_ASSIGN_STAT
-		     , DSTRBT_NOTE
-		     , DELV_STDT
-		     , DELV_EDDT
-		     , SHIP_COMP_CD
-		     , INVOICE_NO
-		     , INVOICE_SEND_YN
-		     , SELL_STORE_CD
-		     , SELL_FEE_RATE
-		     , AF_LINK_CD
-		     , ITHR_CD
-		     , CONTENTS_LOC
-		     , PLAN_DTL_SQ
-		     , SOCIAL_SQ
-		     , REG_NO
-		     , REG_DT
-		     , UPD_NO
-		     , UPD_DT
-		)
 		SELECT OD.ORD_DTL_NO
 		     , OD.ORD_NO
 		     , OD.ORD_EXCH_GB
@@ -4494,7 +4198,7 @@
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()
 		WHERE  1=1
-		AND    ORD_DTL_NO = #{ordDtlNo}
+		AND    ORD_CHG_SQ = #{ordChgSq}
 		AND    DELV_CNCL_YN = 'N'
 	</update>
 	
@@ -4546,7 +4250,67 @@
 		 WHERE ORD_NO = #{ordNo}
 		   AND ORD_DTL_NO = #{ordDtlNo}
 		   AND ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
-	</update>		
+	</update>
+	
+	<!-- 교환배송실패 변경요청단위 전체취소 여부 -->
+	<select id="getExchangeDelvFailQty" parameterType="Payment" resultType="int">
+		/* OrderChange.getExchangeDelvFailQty */
+		SELECT SUM(A.QTY) AS QTY
+		FROM (
+			SELECT OD.ORD_QTY - OD.CNCL_RTN_QTY AS QTY
+			FROM   TB_ORDER_DETAIL OD
+			INNER  JOIN TB_ORDER_CHANGE_DETAIL OCD
+			ON     OD.ORD_DTL_NO = OCD.CHG_ORD_DTL_NO 
+			WHERE  1=1
+			AND    OCD.ORD_CHG_SQ = #{ordChgSq}
+		) A
+	</select>
+	
+	<!-- 추가배송비 취소 처리 (부분취소)ㄴ -->
+	<insert id="createAddDeliveryFeeCancelPart" parameterType="OrderChange">
+		/* TscOrderChange.createAddDeliveryFeeCancelPart */
+		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 NULL                            AS PAY_SQ
+		     , DF.ORD_NO
+		     , DF.DELV_FEE_GB
+		     , DF.DELV_FEE_CD
+		     , (DF.DELV_FEE / 2) * -1          AS DELV_FEE
+		     , NULL                            AS DELV_CPN_SQ
+		     , 0                               AS DELV_CPN_DC_AMT
+		     , (DF.REAL_DELV_AMT / 2) * -1     AS REAL_DELV_AMT
+		     , DF.ORD_CHG_SQ
+		     , DF.SUPPLY_COMP_CD
+		     , 'N'
+		     , NULL
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		  FROM TB_DELIVERY_FEE DF
+		 INNER JOIN TB_PAYMENT P
+		    ON P.ORD_CHG_SQ = DF.ORD_CHG_SQ
+		   AND P.PAY_STAT = 'G016_30'
+		   AND P.PAY_GB = 'D'
+		 WHERE DF.ORD_CHG_SQ = #{ordChgSq}
+	</insert>
+	
 </mapper>