瀏覽代碼

Merge branch 'card007' into develop

card007 5 年之前
父節點
當前提交
fc8193067a

+ 32 - 0
src/main/java/com/style24/core/biz/service/TscMailService.java

@@ -531,4 +531,36 @@ public class TscMailService {
 		}
 	}
 
+	/**
+	 * 주문 교환 안내
+	 *
+	 * @param GagaMap
+	 * @param Integer
+	 * @author card007
+	 * @since 2021. 06. 14
+	 */
+	@Transactional("shopTxnManager")
+	public void sendOrderExchange(GagaMap replaceInfo, Integer senderNo) {
+
+		// 주문 취소 메일 발송
+		netpathyMailSender.send(NetpathyMailSender.MailAnswerSq.EXCHANGE_REQUEST.value(), replaceInfo.getString("ordEmail"), replaceInfo);
+
+		try {
+			if (replaceInfo.getInt("custNo") > 0) {
+				// 고객접촉이력 정보
+				CustContactHst custContactHst = new CustContactHst();
+				custContactHst.setContactType(TscConstants.ContactType.EXCHANGE_RECEIPT.value());			// 접촉유형:교환-교환접수완료(공통코드G054)
+				custContactHst.setContactMethod(TscConstants.ContactMethod.EMAIL.value());					// 접촉방법:이메일(공통코드G055)
+				custContactHst.setContactContents("교환-교환접수완료");
+				custContactHst.setReceiverNo(replaceInfo.getInt("custNo"));
+				custContactHst.setSenderNo(senderNo);
+				custContactHst.setRegNo(senderNo);
+				coreCustomerService.createCustomerContactHistory(custContactHst);
+			}
+		} catch (Exception e) {
+			log.error("error", e);
+			// Do nothing
+		}
+	}
+
 }

+ 304 - 15
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -1538,6 +1538,7 @@ public class TscOrderChangeService {
 		String wdInvoiceNo					= map.getString("wdInvoiceNo");									// 회수송장번호
 		String chgStat						= TscConstants.OrderChangeStat.RETURN.value();					// 주문변경상태
 		int ordChgSq						= 0;															// 주문변경일련번호
+		int addPayCost						= 0;															// 반품배송비
 		
 		// 2021.05.25 회수구분이 직접일때 상품검수중 설정
 		// if ("D".equals(wdGb)) {
@@ -1575,6 +1576,7 @@ public class TscOrderChangeService {
 					int refundAmt = spanRealCnclRtnAmt - addDelvFee;
 					if (refundAmt < 0) {
 						chgStat = TscConstants.OrderChangeStat.RETURN_WAIT.value();			// 추가배송비 처리 상태값 설정
+						addPayCost = addDelvFee;
 					} else {
 						spanRefundAmt = refundAmt;											// 추가배송비 제외 환불금액 설정
 						addDelvFee = 0;
@@ -1679,6 +1681,7 @@ public class TscOrderChangeService {
 
 		// 주문변경일련번호 설정
 		map.setInt("ordChgSq", ordChgSq);
+		map.setInt("addPayCost", addPayCost);
 
 		return map;
 	}
@@ -1776,7 +1779,7 @@ public class TscOrderChangeService {
 		String wdInvoiceNo = excReq.getWdInvoiceNo();		// 회수송장번호
 		Integer regNo = excReq.getRegNo();					// 등록자번호
 		Integer updNo = excReq.getUpdNo();					// 수정자번호
-		int ordChgSq;										// 주문변경일련번호
+		int ordChgSq = 0;									// 주문변경일련번호
 
 		// 교환신청 목록 설정
 		Collection<Order> excReqList = excReq.getCancelReqList();
@@ -1819,7 +1822,6 @@ public class TscOrderChangeService {
 		// 교환대상 정보 등록
 		int preOrdDtlNo = 0;
 		String preDelvFeeCd = "";
-		ordChgSq = 0;
 		int exchangeOrdDtlNo = 0;
 
 		for (Order order : excReqList) {
@@ -1959,6 +1961,7 @@ public class TscOrderChangeService {
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 		result.set("ordNo", ordNo);
 		result.set("ordChgSq", ordChgSq);
+		result.setInt("addPayCost", addPayCost);
 
 		return result;
 	}
@@ -4482,6 +4485,30 @@ public class TscOrderChangeService {
 			sb.append("																						</td>\n");
 			sb.append("																					</tr>\n");
 			sb.append("																					<tr>\n");
+			sb.append("																						<td>\n");
+			if (TscConstants.OrderChangeGb.EXCHANGE.value().equals(orderChange.getChgGb())) {
+				sb.append("																							<p style=\"margin: 0; padding: 0; font-family:'Apple SD Gothic Neo','나눔고딕',NanumGothic,'맑은고딕',Malgun Gothic, Helvetica, sans-serif;font-weight:500;color: #fd4802; line-height: 2;\">교환 옵션</p>\n");
+				if ("G056_S".equals(orderChange.getGoodsType())) {
+					for (int i=0; i < orderChange.getChgColorNmArr().length; i++) {
+						sb.append("																							<p style=\"margin: 0; padding: 0; font-family:'Apple SD Gothic Neo','나눔고딕',NanumGothic,'맑은고딕',Malgun Gothic, Helvetica, sans-serif;font-weight:200;color: #666666; line-height: 2;\">");
+						sb.append(orderChange.getChgItemNmArr()[i]);
+						sb.append(" / ");
+						sb.append(orderChange.getChgColorNmArr()[i]);
+						sb.append(" / ");
+						sb.append(orderChange.getChgOptCd2Arr()[i]);
+						sb.append("</p>\n");
+					}
+				} else {
+					sb.append("																							<p style=\"margin: 0; padding: 0; font-family:'Apple SD Gothic Neo','나눔고딕',NanumGothic,'맑은고딕',Malgun Gothic, Helvetica, sans-serif;font-weight:200;color: #666666; line-height: 2;\">");
+					sb.append(orderChange.getChgColorNm());
+					sb.append(" / ");
+					sb.append(orderChange.getChgOptCd2());
+					sb.append("</p>\n");
+				}
+			}
+			sb.append("																						</td>\n");
+			sb.append("																					</tr>\n");
+			sb.append("																					<tr>\n");
 			sb.append("																						<td height=\"5px;\" style=\"height: 5px;\"></td>\n");
 			sb.append("																					</tr>\n");
 			sb.append("																					<tr>\n");
@@ -4618,12 +4645,11 @@ public class TscOrderChangeService {
 
 		// 회수지 정보 설정
 		if ("W".equals(oneData.getWdGb())) {
-			result.setString("chgerInfo", this.getMailReturnChgerInfo(oneData));
+			result.setString("chgerInfo", this.getMailChgerInfo(oneData));
 		}
 
 		// 반품 정보 설정
-		String returnInfo = this.getMailOrderReturnInfo(returnList);
-		result.setString("returnInfo", returnInfo);
+		result.setString("returnInfo", this.getMailOrderReturnInfo(returnList));
 
 		// 결제 정보 조회
 		int dcAmt = oneData.getRfCpn1Amt() + oneData.getRfTmtb1Amt() + oneData.getRfTmtb2Amt() + oneData.getRfGoodsCpnAmt() + oneData.getRfCartCpnAmt() + oneData.getRfDelvCpnAmt() + oneData.getRfPrePntAmt();
@@ -4646,7 +4672,6 @@ public class TscOrderChangeService {
 		}
 
 		result.setString("cnclRtnAmt", df.format(oneData.getRfCnclAmt()));
-		result.setString("addPayCost", df.format(oneData.getAddPayCost()));
 		result.setString("dcAmt", dcAmt == 0 ? "0" : "-" + df.format(dcAmt));
 		result.setString("payMeansNm", payMeansNm);
 		result.setString("refundAmt", df.format(oneData.getRefundAmt()));
@@ -4654,6 +4679,15 @@ public class TscOrderChangeService {
 		result.setString("rfGfcdUseAmt", df.format(oneData.getRfGfcdUseAmt()));
 		result.setString("totalRefundAmt", df.format(totalRefundAmt));
 
+		// 추가배송비 조회
+		int addpayCost = oneData.getAddPayCost();
+		Order addPayCostOrder = orderChangeDao.getAddDeliveryFeePayment(orderChange);
+		if (addPayCostOrder != null && addPayCostOrder.getPayAmt() > 0) {
+			addpayCost = 0;
+		}
+
+		result.setString("addPayCost", df.format(addpayCost));
+
 		// 버튼 URL 설정
 		String hasSsl = env.getProperty("has-ssl");
 		String protocol;
@@ -4684,20 +4718,17 @@ public class TscOrderChangeService {
 	 * @since 2021.06.10
 	 */
 	@SuppressWarnings("unchecked")
-	public String getMailOrderReturnInfo(Collection<OrderChange> ReturnList) {
+	public String getMailOrderReturnInfo(Collection<OrderChange> returnList) {
 		List<GagaMap> returnDelvList = new ArrayList<>();
 		List<OrderChange> returnDetailList = new ArrayList<>();
 		GagaMap returnMap = new GagaMap();
-		DecimalFormat df = new DecimalFormat("###,###");
 
-		OrderChange oneData = ReturnList.iterator().next();
-		Integer ordNo = oneData.getOrdNo();
-		Integer ordChgSq = oneData.getOrdChgSq();
+		OrderChange oneData = returnList.iterator().next();
 
 		String selfGoodsYn = oneData.getSelfGoodsYn();
 		String delvFeeCd = "Y".equals(selfGoodsYn) ? "WMS" : oneData.getDelvFeeCd();
 		String supplyCompNm = oneData.getSupplyCompNm();
-		for (OrderChange returnInfo : ReturnList) {
+		for (OrderChange returnInfo : returnList) {
 			String delvFeeCdTemp = "Y".equals(returnInfo.getSelfGoodsYn()) ? "WMS" : returnInfo.getDelvFeeCd();
 			if (!delvFeeCd.equals(delvFeeCdTemp)) {
 				returnMap.set("returnDetailList", returnDetailList);
@@ -4751,7 +4782,39 @@ public class TscOrderChangeService {
         sb.append("												<tr>\n");
         sb.append("													<td height=\"30px;\" style=\"height: 30px;\"></td>\n");
         sb.append("												</tr>\n");
-		sb.append(this.getMailCreListInfo(returnDetailList));
+		for (GagaMap map : returnDelvList) {
+			sb.append("													<tr>\n");
+			sb.append("														<td height=\"20px;\" style=\"height: 20px;\"></td>\n");
+			sb.append("													</tr>\n");
+			sb.append("													<tr>\n");
+			sb.append("														<td>\n");
+			sb.append("															<table style=\"border: 1px; border-color: #dddddd; border-style: solid; box-sizing: border-box; width:100%;margin:0;padding:0\" cellspacing=\"0\" cellpadding=\"0\">\n");
+			sb.append("																<tbody>\n");
+			sb.append("																	<tr>\n");
+			sb.append("																		<td colspan=\"5\" height=\"20px;\" style=\"height: 20px;\"></td>\n");
+			sb.append("																	</tr>\n");
+			sb.append("																	<tr>\n");
+			sb.append("																		<td width=\"40px;\"></td>\n");
+			sb.append("																		<td colspan=\"3\" style=\"text-align: left;font-size: 18px;font-family:'Apple SD Gothic Neo','나눔고딕',NanumGothic,'맑은고딕',Malgun Gothic, Helvetica, sans-serif;font-weight:600;color: #222222;\" align=\"left\">\n");
+			if ("Y".equals(map.getString("selfGoodsYn"))) {
+				sb.append("																			STYLE24 배송\n");
+			} else {
+				sb.append("																			");
+				sb.append(map.getString("supplyCompNm"));
+				sb.append(" 업체직배송\n");
+			}
+			sb.append("																		</td>\n");
+			sb.append("																		<td width=\"40px;\"></td>\n");
+			sb.append("																	</tr>\n");
+			sb.append("																	<tr>\n");
+			sb.append("																		<td colspan=\"5\" height=\"20px;\" style=\"height: 20px;border:0; border-bottom: 1px; border-color: #dddddd; border-style: solid; box-sizing: border-box;\"></td>\n");
+			sb.append("																	</tr>\n");
+			sb.append(this.getMailCreListInfo(returnDetailList));
+			sb.append("																</tbody>\n");
+			sb.append("															</table>\n");
+			sb.append("														</td>\n");
+			sb.append("													</tr>\n");
+		}
         sb.append("											</tbody>\n");
         sb.append("										</table>\n");
 
@@ -4759,7 +4822,7 @@ public class TscOrderChangeService {
 	}
 
 	/**
-	 * 반품 안내 메일 상품 정보 설정
+	 * 취반교 메일 회수지 정보 설정
 	 *
 	 * @param Collection<OrderChange>
 	 * @return String
@@ -4767,7 +4830,7 @@ public class TscOrderChangeService {
 	 * @since 2021.06.10
 	 */
 	@SuppressWarnings("unchecked")
-	public String getMailReturnChgerInfo(OrderChange orderChange) {
+	public String getMailChgerInfo(OrderChange orderChange) {
 		StringBuilder sb = new StringBuilder();
 
 		sb.append("<table style=\"width:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">\n");
@@ -4864,4 +4927,230 @@ public class TscOrderChangeService {
 		
 		return sb.toString();
 	}
+
+	/**
+	 * 교환 안내 메일 정보 조회
+	 *
+	 * @param OrderChange
+	 * @return Gagamap
+	 * @author card007
+	 * @since 2021. 06. 14
+	 */
+	public GagaMap getMailOrderExchangeReplaceInfo(OrderChange orderChange) {
+		GagaMap result = new GagaMap();
+
+		// 반품 상세 정보 조회
+		Collection<OrderChange> exchangeList = orderChangeDao.getCreExchangeDetailInfo(orderChange);
+
+		if (exchangeList.size() == 0) {
+			throw new IllegalStateException(message.getMessage("FAIL_0005"));
+		}
+
+		OrderChange oneData = exchangeList.iterator().next();
+
+		// 주문 정보 설정
+		result.setString("ordNm", oneData.getOrdNm());
+		result.setInt("ordNo", oneData.getOrdNo());
+		result.setString("ordDate", oneData.getOrdDate());
+		result.setString("ordDt", oneData.getOrdDt());
+		result.setString("ordEmail", oneData.getOrdEmail());
+		result.setInt("custNo", oneData.getCustNo());
+		result.setString("wdGbNm", "W".equals(oneData.getWdGb()) ? "회수요청" : "직접배송");
+
+		if (StringUtils.isBlank(oneData.getOrdEmail())) {
+			return result;
+		}
+
+		// 회수지 정보 설정
+		if ("W".equals(oneData.getWdGb())) {
+			result.setString("chgerInfo", this.getMailChgerInfo(oneData));
+		}
+
+		// 교환 정보 설정
+		result.setString("exchangeInfo", this.getMailOrderExchangeInfo(exchangeList));
+
+		// 교환 배송지 정보 설정
+		result.setString("recipNm", oneData.getRecipNm());
+		result.setString("recipPhnno", oneData.getRecipPhnno());
+		result.setString("recipBaseAddr", oneData.getRecipBaseAddr());
+		result.setString("recipDtlAddr", oneData.getRecipDtlAddr());
+		result.setString("recipZipcode", oneData.getRecipZipcode());
+		result.setString("delvMemo", oneData.getDelvMemo());
+
+		// 버튼 URL 설정
+		String hasSsl = env.getProperty("has-ssl");
+		String protocol;
+
+		if ("true".equals(hasSsl)) {
+			protocol = "https:";
+		} else {
+			protocol = "http:";
+		}
+
+		String url = protocol + env.getProperty("domain.front");
+		if (orderChange.getCustNo() > 0) {
+			url += "/mypage/cre/list/form";
+		} else {
+			url += "/customer/noncust/order/confirm/form";
+		}
+
+		result.setString("creButtonUrl", url);
+		return result;
+	}
+
+	/**
+	 * 교환 안내 메일 상품 정보 설정
+	 *
+	 * @param Collection<OrderChange>
+	 * @return String
+	 * @author card007
+	 * @since 2021.06.14
+	 */
+	@SuppressWarnings("unchecked")
+	public String getMailOrderExchangeInfo(Collection<OrderChange> exchangeList) {
+		List<GagaMap> exchangeDelvList = new ArrayList<>();
+		List<OrderChange> exchangeDetailList = new ArrayList<>();
+		GagaMap exchangeMap = new GagaMap();
+		DecimalFormat df = new DecimalFormat("###,###");
+
+		OrderChange oneData = exchangeList.iterator().next();
+
+		String selfGoodsYn = oneData.getSelfGoodsYn();
+		String delvFeeCd = "Y".equals(selfGoodsYn) ? "WMS" : oneData.getDelvFeeCd();
+		String supplyCompNm = oneData.getSupplyCompNm();
+		for (OrderChange exchangeInfo : exchangeList) {
+			String delvFeeCdTemp = "Y".equals(exchangeInfo.getSelfGoodsYn()) ? "WMS" : exchangeInfo.getDelvFeeCd();
+			if (!delvFeeCd.equals(delvFeeCdTemp)) {
+				exchangeMap.set("exchangeDetailList", exchangeDetailList);
+				exchangeMap.setString("delvFeeCd", delvFeeCd);
+				exchangeMap.setString("supplyCompNm", supplyCompNm);
+				exchangeMap.setString("selfGoodsYn", selfGoodsYn);
+				exchangeDelvList.add(exchangeMap);
+
+				exchangeDetailList = new ArrayList<>();
+				exchangeMap = new GagaMap();
+				delvFeeCd = delvFeeCdTemp;
+				supplyCompNm = exchangeInfo.getSupplyCompNm();
+				selfGoodsYn = exchangeInfo.getSelfGoodsYn();
+			}
+
+			// 세트상품 옵션별 배열로 담기
+			if (exchangeInfo.getItemNm().contains("!@!")) {
+				exchangeInfo.setItemNmArr(exchangeInfo.getItemNm().split("!@!"));
+				exchangeInfo.setColorNmArr(exchangeInfo.getColorNm().split(","));
+				exchangeInfo.setOptCd1Arr(exchangeInfo.getOptCd1().split(","));
+				exchangeInfo.setOptCd2Arr(exchangeInfo.getOptCd2().split(","));
+			} else {
+				String[] arr = {exchangeInfo.getItemNm()}, arr2 = {exchangeInfo.getColorNm()}, arr3 = {exchangeInfo.getOptCd1()}, arr4 = {exchangeInfo.getOptCd2()};
+				exchangeInfo.setItemNmArr(arr);
+				exchangeInfo.setColorNmArr(arr2);
+				exchangeInfo.setOptCd1Arr(arr3);
+				exchangeInfo.setOptCd2Arr(arr4);
+			}
+
+			// 교환상품 옵션 정보 조회 및 설정
+			OrderChange changeOptionInfo = orderChangeDao.getExchangeGoodsOptionInfoList(exchangeInfo);
+			if (changeOptionInfo.getItemNm().contains("!@!")) {
+				exchangeInfo.setChgItemNmArr(changeOptionInfo.getItemNm().split("!@!"));
+				exchangeInfo.setChgColorNmArr(changeOptionInfo.getColorNm().split(","));
+				exchangeInfo.setChgOptCd1Arr(changeOptionInfo.getOptCd1().split(","));
+				exchangeInfo.setChgOptCd2Arr(changeOptionInfo.getOptCd2().split(","));
+			} else {
+				exchangeInfo.setChgItemNm(changeOptionInfo.getItemNm());
+				exchangeInfo.setChgColorNm(changeOptionInfo.getColorNm());
+				exchangeInfo.setChgOptCd1(changeOptionInfo.getOptCd1());
+				exchangeInfo.setChgOptCd2(changeOptionInfo.getOptCd2());
+			}
+
+			exchangeDetailList.add(exchangeInfo);
+		}
+
+		exchangeMap.set("exchangeDetailList", exchangeDetailList);
+		exchangeMap.setString("delvFeeCd", delvFeeCd);
+		exchangeMap.setString("supplyCompNm", supplyCompNm);
+		exchangeMap.setString("selfGoodsYn", selfGoodsYn);
+		exchangeDelvList.add(exchangeMap);
+
+		// 추가배송비 설정
+		// int addpayCost = oneData.getAddPayCost();
+		// Order addPayCostOrder = orderChangeDao.getAddDeliveryFeePayment(oneData);
+		// if (addPayCostOrder != null && addPayCostOrder.getPayAmt() > 0) {
+		// 	addpayCost = 0;
+		// }
+
+		StringBuilder sb = new StringBuilder();
+
+		sb.append("<table style=\"width:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">\n");
+		sb.append("											<tbody>\n");
+		sb.append("												<tr>\n");
+		sb.append("													<td height=\"50px;\" style=\"height: 50px;\"></td>\n");
+		sb.append("												</tr>\n");
+		sb.append("												<tr>\n");
+		sb.append("													<th colspan=\"2\" style=\"text-align: left;font-size: 18px;color: #222222;\" align=\"left\">\n");
+		sb.append("														교환신청 상품 정보\n");
+		sb.append("													</th>\n");
+		sb.append("												</tr>\n");
+		sb.append("												<tr>\n");
+		sb.append("													<td height=\"30px;\" style=\"height: 30px;\"></td>\n");
+		sb.append("												</tr>\n");
+		for (GagaMap map : exchangeDelvList) {
+			sb.append("													<tr>\n");
+			sb.append("														<td height=\"20px;\" style=\"height: 20px;\"></td>\n");
+			sb.append("													</tr>\n");
+			sb.append("													<tr>\n");
+			sb.append("														<td>\n");
+			sb.append("															<table style=\"border: 1px; border-color: #dddddd; border-style: solid; box-sizing: border-box; width:100%;margin:0;padding:0\" cellspacing=\"0\" cellpadding=\"0\">\n");
+			sb.append("																<tbody>\n");
+			sb.append("																	<tr>\n");
+			sb.append("																		<td colspan=\"5\" height=\"20px;\" style=\"height: 20px;\"></td>\n");
+			sb.append("																	</tr>\n");
+			sb.append("																	<tr>\n");
+			sb.append("																		<td width=\"40px;\"></td>\n");
+			sb.append("																		<td colspan=\"3\" style=\"text-align: left;font-size: 18px;font-family:'Apple SD Gothic Neo','나눔고딕',NanumGothic,'맑은고딕',Malgun Gothic, Helvetica, sans-serif;font-weight:600;color: #222222;\" align=\"left\">\n");
+			if ("Y".equals(map.getString("selfGoodsYn"))) {
+				sb.append("																			STYLE24 배송\n");
+			} else {
+				sb.append("																			");
+				sb.append(map.getString("supplyCompNm"));
+				sb.append(" 업체직배송\n");
+			}
+			sb.append("																		</td>\n");
+			sb.append("																		<td width=\"40px;\"></td>\n");
+			sb.append("																	</tr>\n");
+			sb.append("																	<tr>\n");
+			sb.append("																		<td colspan=\"5\" height=\"20px;\" style=\"height: 20px;border:0; border-bottom: 1px; border-color: #dddddd; border-style: solid; box-sizing: border-box;\"></td>\n");
+			sb.append("																	</tr>\n");
+			sb.append(this.getMailCreListInfo(exchangeDetailList));
+			// sb.append("																	<!-- 배송비 시작 -->\n");
+			// sb.append("																	<tr>\n");
+			// sb.append("																		<td width=\"40px;\"></td>\n");
+			// sb.append("																		<td colspan=\"3\" height=\"20px;\" style=\"height: 45px; background: #f5f5f5;\" bgcolor=\"#f5f5f5\">\n");
+			// sb.append("																			<span style=\"width: 12px;padding-left:12px;\"></span>\n");
+			// sb.append("																			<span>배송비</span>\n");
+			// sb.append("																			<span style=\"width: 12px;padding-right:12px;\"></span>\n");
+			// sb.append("																			<span>\n");
+			// sb.append("																				<span>");
+			// sb.append(df.format(addpayCost));
+			// sb.append("</span>원\n");
+			// sb.append("																			</span>\n");
+			// sb.append("																		</td>\n");
+			// sb.append("																		<td width=\"40px;\"></td>\n");
+			// sb.append("																	</tr>\n");
+			// sb.append("																	<tr>\n");
+			// sb.append("																		<td height=\"30px;\" style=\"height: 30px;\"></td>\n");
+			// sb.append("																	</tr>\n");
+			// sb.append("																	<!-- 배송비 종료 -->\n");
+			sb.append("																</tbody>\n");
+			sb.append("															</table>\n");
+			sb.append("														</td>\n");
+			sb.append("													</tr>\n");
+		}
+		sb.append("												<tr>\n");
+		sb.append("													<td height=\"50px;\" style=\"height: 50px;\"></td>\n");
+		sb.append("												</tr>\n");
+		sb.append("											</tbody>\n");
+		sb.append("										</table>\n");
+
+		return sb.toString();
+	}
 }

+ 23 - 8
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -2166,6 +2166,7 @@
 	<select id="getExchangeInfo" parameterType="Order" resultType="Order">
 		/* OrderChange.getExchangeInfo */
 		SELECT OC.ORD_CHG_SQ
+		     , OC.CHG_GB
 		     , OCD.CHG_QTY
 		     , ODI.ITEM_CD
 		     , ODI.OPT_CD1
@@ -3824,8 +3825,8 @@
 		             , OC.CHGER_BASE_ADDR
 		             , OC.CHGER_DTL_ADDR
 		             , OC.WD_GB
-		             , OC.ADD_PAY_COST
-		             , COUNT(*) OVER (PARTITION BY OC.ORD_CHG_SQ) - 1 AS GOODS_CNT
+		             , IF(IFNULL(P.PAY_AMT, 0) > 0, 0, OC.ADD_PAY_COST)                       AS ADD_PAY_COST
+		             , COUNT(*) OVER (PARTITION BY OC.ORD_CHG_SQ) - 1                         AS GOODS_CNT
 		             , ROW_NUMBER() OVER (PARTITION BY OC.ORD_CHG_SQ ORDER BY OCD.ORD_DTL_NO) AS RNUM
 		          FROM TB_ORDER_CHANGE OC
 		         INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
@@ -3836,9 +3837,13 @@
 		            ON O.ORD_NO = OD.ORD_NO
 		         INNER JOIN TB_GOODS G
 		            ON OD.GOODS_CD = G.GOODS_CD
+		          LEFT OUTER JOIN TB_PAYMENT P
+		            ON OC.ORD_CHG_SQ = P.ORD_CHG_SQ
+		           AND P.PAY_GB = 'D'
+		           AND P.PAY_STAT = 'G016_30'
 		         WHERE OC.ORD_CHG_SQ = #{ordChgSq}
 		         GROUP BY O.ORD_NO, OC.ORD_CHG_SQ, OCD.ORD_DTL_NO, O.ORD_NM, O.ORD_PHNNO, O.MALL_GB, G.GOODS_NM, O.CUST_NO, OC.CHGER_BASE_ADDR
-		                , OC.CHGER_DTL_ADDR, OC.WD_GB, OC.ADD_PAY_COST
+		                , OC.CHGER_DTL_ADDR, OC.WD_GB, OC.ADD_PAY_COST, P.PAY_AMT
 		       ) Z
 		 WHERE Z.RNUM = 1
 	</select>
@@ -4046,6 +4051,7 @@
 		     , Z.CHG_STAT
 		     , Z.CHG_STAT_NM
 		     , Z.ORD_NO
+		     , Z.DELV_FEE_CD
 		     , Z.ORD_AMT
 		     , Z.ORD_QTY
 		     , Z.CNCL_RTN_QTY
@@ -4088,6 +4094,7 @@
 		     , Z.CHGER_BASE_ADDR
 		     , Z.CHGER_DTL_ADDR
 		     , Z.CHGER_RTN_MEMO
+		     , Z.CHGER_ZIPCODE
 		     , Z.WD_INVOICE_NO
 		     , Z.SHIP_COMP_CD
 		     , Z.SHIP_COMP_NM
@@ -4106,6 +4113,7 @@
 		             , OCD.CHG_STAT
 		             , FN_GET_CODE_NM('G685', OCD.CHG_STAT)                             AS CHG_STAT_NM
 		             , OD.ORD_NO
+		             , OD.DELV_FEE_CD
 		             , OD.ORD_AMT
 		             , OD.ORD_QTY
 		             , OD.CNCL_RTN_QTY
@@ -4156,6 +4164,7 @@
 		             , OC.CHGER_BASE_ADDR
 		             , OC.CHGER_DTL_ADDR
 		             , OC.CHGER_RTN_MEMO
+		             , OC.CHGER_ZIPCODE
 		             , OC.WD_INVOICE_NO
 		             , OC.SHIP_COMP_CD
 		             , (SELECT SHIP_COMP_NM
@@ -4213,12 +4222,12 @@
 		</if>
 		) Z
 		 GROUP BY Z.ORD_CHG_SQ, Z.CHG_GB, Z.CHG_QTY, Z.ORD_DT, Z.ORD_DATE, Z.CHG_DATE, Z.CHG_TIME, Z.CHG_DT, Z.COMPLETE_DT, Z.CHG_STAT
-		        , Z.CHG_STAT_NM, Z.ORD_NO, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT, Z.CPN1_DC_AMT, Z.REAL_ORD_AMT, Z.PNT_DC_AMT
+		        , Z.CHG_STAT_NM, Z.ORD_NO, Z.DELV_FEE_CD, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT, Z.CPN1_DC_AMT, Z.REAL_ORD_AMT, Z.PNT_DC_AMT
 		        , Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 		        , Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.REFUND_AMT, Z.RF_CPN1_AMT, Z.RF_TMTB1_AMT
 		        , Z.RF_TMTB2_AMT, Z.RF_GOODS_CPN_AMT, Z.RF_CART_CPN_AMT, Z.RF_DELV_CPN_AMT, Z.RF_PNT_AMT, Z.RF_PRE_PNT_AMT, Z.RF_GFCD_USE_AMT, Z.RF_CNCL_AMT
 		        , Z.RF_DELIVERY_FEE, Z.RF_REAL_CNCL_AMT, Z.PG_GB, Z.PAY_MEANS, Z.PAY_MEANS_NM, Z.WD_GB, Z.CHGER_NM, Z.CHGER_PHNNO, Z.CHGER_BASE_ADDR
-		        , Z.CHGER_DTL_ADDR, Z.CHGER_RTN_MEMO, Z.WD_INVOICE_NO, Z.SHIP_COMP_CD, Z.SHIP_COMP_NM, Z.ORD_NM, Z.ORD_EMAIL, Z.CUST_NO
+		        , Z.CHGER_DTL_ADDR, Z.CHGER_RTN_MEMO, Z.CHGER_ZIPCODE, Z.WD_INVOICE_NO, Z.SHIP_COMP_CD, Z.SHIP_COMP_NM, Z.ORD_NM, Z.ORD_EMAIL, Z.CUST_NO
 		 ORDER BY Z.ORD_CHG_SQ DESC
 	</select>
 
@@ -4244,6 +4253,7 @@
 		     , Z.EXCHANGE_SHIP_COMP_CD
 		     , Z.EXCHANGE_INVOICE_NO
 		     , Z.ORD_NO
+		     , Z.DELV_FEE_CD
 		     , Z.ORD_AMT
 		     , Z.ORD_QTY
 		     , Z.CNCL_RTN_QTY
@@ -4269,6 +4279,7 @@
 		     , Z.CHGER_PHNNO
 		     , Z.CHGER_BASE_ADDR
 		     , Z.CHGER_DTL_ADDR
+		     , Z.CHGER_ZIPCODE
 		     , Z.CHGER_RTN_MEMO
 		     , Z.CHG_MEMO
 		     , Z.WD_INVOICE_NO
@@ -4279,6 +4290,7 @@
 		     , Z.RECIP_PHNNO
 		     , Z.RECIP_BASE_ADDR
 		     , Z.RECIP_DTL_ADDR
+		     , Z.RECIP_ZIPCODE
 		     , Z.DELV_MEMO
 		     , Z.PG_TID
 		     , Z.PAY_MEANS
@@ -4304,6 +4316,7 @@
 		             , OD2.INVOICE_NO                                                   AS EXCHANGE_INVOICE_NO
 		             , OD2.SHIP_COMP_CD                                                 AS EXCHANGE_SHIP_COMP_CD
 		             , OD.ORD_NO
+		             , OD.DELV_FEE_CD
 		             , OD.ORD_AMT
 		             , OD.ORD_QTY
 		             , OD.CNCL_RTN_QTY
@@ -4337,6 +4350,7 @@
 		             , OC.CHGER_PHNNO
 		             , OC.CHGER_BASE_ADDR
 		             , OC.CHGER_DTL_ADDR
+		             , OC.CHGER_ZIPCODE
 		             , OC.CHGER_RTN_MEMO
 		             , OC.CHG_MEMO
 		             , OC.WD_INVOICE_NO
@@ -4349,6 +4363,7 @@
 		             , DA.RECIP_PHNNO
 		             , DA.RECIP_BASE_ADDR
 		             , DA.RECIP_DTL_ADDR
+		             , DA.RECIP_ZIPCODE
 		             , DA.DELV_MEMO
 		             , P.PG_TID
 		             , P.PAY_MEANS
@@ -4415,11 +4430,11 @@
 		</if>
 		) Z
 		 GROUP BY Z.ORD_CHG_SQ, Z.CHG_GB, Z.CHG_QTY, Z.ORD_DT, Z.ORD_DATE, Z.CHG_DATE, Z.CHG_TIME, Z.CHG_DT, Z.COMPLETE_DT, Z.CHG_STAT
-		        , Z.CHG_STAT_NM, Z.ORD_DTL_STAT, Z.EXCHANGE_SHIP_COMP_CD, Z.EXCHANGE_INVOICE_NO, Z.ORD_NO, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT
+		        , Z.CHG_STAT_NM, Z.ORD_DTL_STAT, Z.EXCHANGE_SHIP_COMP_CD, Z.EXCHANGE_INVOICE_NO, Z.ORD_NO, Z.DELV_FEE_CD, Z.ORD_AMT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.CNCL_RTN_AMT
 		        , Z.CPN1_DC_AMT, Z.REAL_ORD_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.ORD_DTL_NO, Z.GOODS_CD, Z.BRAND_NM, Z.SHOT_DELV_YN, Z.SELF_GOODS_YN, Z.GOODS_NM
 		        , Z.GOODS_TYPE, Z.PRICE_ORG, Z.PRICE_SALE, Z.ADD_PAY_COST, Z.SYS_IMG_NM, Z.GIFT_PACK_YN, Z.WD_GB, Z.CHGER_NM, Z.CHGER_PHNNO, Z.CHGER_BASE_ADDR
-		        , Z.CHGER_DTL_ADDR, Z.CHGER_RTN_MEMO, Z.CHG_MEMO, Z.WD_INVOICE_NO, Z.SHIP_COMP_CD, Z.SHIP_COMP_NM, Z.DELV_ADDR_SQ, Z.RECIP_NM, Z.RECIP_PHNNO
-		        , Z.RECIP_BASE_ADDR, Z.RECIP_DTL_ADDR, Z.DELV_MEMO, Z.PG_TID, Z.PAY_MEANS, Z.PAY_MEANS_NM, Z.CARD_NM, Z.CARD_MIPS, Z.CHG_ORD_DTL_STAT
+		        , Z.CHGER_DTL_ADDR, Z.CHGER_ZIPCODE, Z.CHGER_RTN_MEMO, Z.CHG_MEMO, Z.WD_INVOICE_NO, Z.SHIP_COMP_CD, Z.SHIP_COMP_NM, Z.DELV_ADDR_SQ, Z.RECIP_NM, Z.RECIP_PHNNO
+		        , Z.RECIP_BASE_ADDR, Z.RECIP_DTL_ADDR, Z.RECIP_ZIPCODE, Z.DELV_MEMO, Z.PG_TID, Z.PAY_MEANS, Z.PAY_MEANS_NM, Z.CARD_NM, Z.CARD_MIPS, Z.CHG_ORD_DTL_STAT
 		        , Z.ORD_NM, Z.ORD_EMAIL, Z.CUST_NO
 		 ORDER BY Z.ORD_CHG_SQ DESC
 	</select>