Przeglądaj źródła

마이페이지 교환 임시 커밋

card007 5 lat temu
rodzic
commit
ae30ecada6

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

@@ -506,4 +506,14 @@ public interface TscOrderChangeDao {
 	 * @since 2021. 04. 20
 	 */
 	Payment getAddPayCostPaymentInfo(Payment payment);
+
+	/**
+	 * 교환 상품 재고 조회
+	 *
+	 * @param Order
+	 * @return Order
+	 * @author card007
+	 * @since 2021. 04. 21
+	 */
+	Order getCurrStockQty(Order order);
 }

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

@@ -14,6 +14,7 @@ import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.biz.dao.TscOrderDao;
 import com.style24.core.support.env.TscConstants;
+import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.DeliveryFee;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
@@ -31,6 +32,9 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public class TscOrderChangeService {
 
+	@Autowired
+	private TscMessageByLocale message;
+
 	@Autowired
 	private TscOrderChangeDao orderChangeDao;
 
@@ -925,13 +929,15 @@ public class TscOrderChangeService {
 				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
 				else {
 					spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+					spanTotDeliveryFee = 0;
+					spanTotRtnDelvFee = 0;
 				}
 
 				// 추가배송비 발생 시 반품대기 상태 처리
 				if (addDelvFee > 0) {
 					chgStat = TscConstants.OrderChangeStat.RETURN_WAIT.value();
 				}
-				
+
 				// 3-2. 주문변경정보 생성
 				OrderChange orderChange = new OrderChange();
 				orderChange.setOrdNo(ordNo);
@@ -955,7 +961,29 @@ public class TscOrderChangeService {
 
 				orderChangeDao.createOrderChange(orderChange);
 
-				// 3-3. 주문상세정보 수정
+				// 3-3. TB_DELIVERY_FEE 추가배송비 등록
+				// 반품배송비 등록
+				Order deliveryFee = new Order();
+				deliveryFee.setOrdNo(ordNo);
+				deliveryFee.setDelvFeeCd(obj.getDelvFeeCd());
+				deliveryFee.setOrdChgSq(orderChange.getOrdChgSq());
+				deliveryFee.setSupplyCompCd(obj.getSupplyCompCd());
+				deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.RETURN_DELIVERY_FEE.value());
+				deliveryFee.setDelvFee(spanTotRtnDelvFee);
+				deliveryFee.setRealDelvAmt(spanTotRtnDelvFee);
+				deliveryFee.setRegNo(custNo);
+				deliveryFee.setUpdNo(custNo);
+
+				orderChangeDao.createDeliveryFee(deliveryFee);
+
+				// 추가배송비 등록
+				deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
+				deliveryFee.setDelvFee(spanTotDeliveryFee);
+				deliveryFee.setRealDelvAmt(spanTotDeliveryFee);
+
+				orderChangeDao.createDeliveryFee(deliveryFee);
+
+				// 3-4. 주문상세정보 수정
 				ordChgSq = orderChange.getOrdChgSq();
 				for (Order vo : cancelOrderDetailList) {
 					// 배송정책코드 별 주문상세 처리
@@ -977,7 +1005,7 @@ public class TscOrderChangeService {
 					}
 				}
 
-				// 3-4. 환불정보 등록
+				// 3-5. 환불정보 등록
 				Order refundOrder = new Order();
 				refundOrder.setOrdNo(ordNo);
 				refundOrder.setPaySq(0);
@@ -1264,11 +1292,13 @@ public class TscOrderChangeService {
 		result.set("status", GagaResponseStatus.FAIL.getCode());
 
 		// 교환 기본 정보
+		int ordNo = excReq.getOrdNo();						// 주문번호
 		int addPayCost = excReq.getAddPayCost();			// 추가배송비
 		String wdGb = excReq.getWdGb();						// 회수구분
 		String wdInvoiceNo = excReq.getWdInvoiceNo();		// 회수송장번호
 		Integer regNo = excReq.getRegNo();					// 등록자번호
 		Integer updNo = excReq.getUpdNo();					// 수정자번호
+		int ordChgSq;										// 주문변경일련번호
 
 		// 교환신청 목록 설정
 		Collection<Order> excReqList = excReq.getCancelReqList();
@@ -1279,11 +1309,17 @@ public class TscOrderChangeService {
 
 		if (addPayCost > 0) { // 프론트 결제 여부 체크 필요
 			orderChangeStat = TscConstants.OrderChangeStat.EXCHANGE_WAIT.value();
-			ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_WAIT.value();
 		}
 
 		// 1. 재고 체크 (세트아이템 포함)
+		for (Order order : excReqList) {
+			Order currStockQty = orderChangeDao.getCurrStockQty(order);
 
+			if ((currStockQty.getCurrStockQty() < (order.getChgQty() * currStockQty.getItemQty()))
+				|| "Y".equals(currStockQty.getSoldoutYn())) {
+				throw new IllegalStateException(message.getMessage("EXCHANGE_0003"));
+			}
+		}
 
 		// 2. TB_DELIVERY_ADDR 등록
 		Order deliveryAddr = new Order();
@@ -1305,7 +1341,7 @@ public class TscOrderChangeService {
 		// 교환대상 정보 등록
 		int preOrdDtlNo = 0;
 		String preDelvFeeCd = "";
-		int ordChgSq = 0;
+		ordChgSq = 0;
 		int exchangeOrdDtlNo = 0;
 
 		for (Order order : excReqList) {
@@ -1345,27 +1381,40 @@ public class TscOrderChangeService {
 				log.info("############# ordChgSq >>> {} ##############", ordChgSq);
 
 				// 4. TB_DELIVERY_FEE 추가배송비 등록
-				int delvFee = 0;
-
-				if ("true".equals(excReq.getIsCustomer())) {
-					delvFee = "W".equals(wdGb) ? order.getExcDelvFee() : order.getRtnDelvFee();
-				}
+				int rtnDelvFee = 0;
+				int excDelvFee = 0;
 
 				Order deliveryFee = new Order();
 				deliveryFee.setOrdNo(excReq.getOrdNo());
-				deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.EXCHANGE_DELIVERY_FEE.value());
 				deliveryFee.setDelvFeeCd(delvFeeCd);
-				deliveryFee.setDelvFee(delvFee);
-				deliveryFee.setRealDelvAmt(delvFee);
 				deliveryFee.setOrdChgSq(ordChgSq);
 				deliveryFee.setSupplyCompCd(order.getSupplyCompCd());
 				deliveryFee.setRegNo(regNo);
 				deliveryFee.setUpdNo(updNo);
 
+				// 반품, 교환 배송비 설정
+				if ("true".equals(excReq.getIsCustomer())) {
+					rtnDelvFee = order.getRtnDelvFee();
+					excDelvFee = order.getExcDelvFee() - rtnDelvFee;
+					
+					if ("D".equals(wdGb)) {
+						rtnDelvFee = 0;
+					}
+				}
+
+				// 반품배송비 등록
+				deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.RETURN_DELIVERY_FEE.value());
+				deliveryFee.setDelvFee(rtnDelvFee);
+				deliveryFee.setRealDelvAmt(rtnDelvFee);
+
 				orderChangeDao.createDeliveryFee(deliveryFee);
 
-				// TODO
-				// 추가배송비 결제 여부 확인 후 TB_PAYMENT 생성
+				// 교환배송비 등록
+				deliveryFee.setDelvFeeGb(TscConstants.DeliveryFeeGb.EXCHANGE_DELIVERY_FEE.value());
+				deliveryFee.setDelvFee(excDelvFee);
+				deliveryFee.setRealDelvAmt(excDelvFee);
+
+				orderChangeDao.createDeliveryFee(deliveryFee);
 			}
 
 			if (preOrdDtlNo != ordDtlNo) {
@@ -1400,6 +1449,7 @@ public class TscOrderChangeService {
 				orderChangeDetail.setUpdNo(updNo);
 
 				orderChangeDao.createOrderChangeDetail(orderChangeDetail);
+				orderChangeDao.createOrderChangeDetailHst(orderChangeDetail);
 
 				preOrdDtlNo = ordDtlNo;
 			}
@@ -1428,6 +1478,8 @@ public class TscOrderChangeService {
 		orderChangeDao.createSellQtyForExchange(sellQty);
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("ordNo", ordNo);
+		result.set("ordChgSq", ordChgSq);
 
 		return result;
 	}

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

@@ -3323,7 +3323,7 @@
 		           , IFNULL(CASE WHEN OCD.CHG_STAT = 'G685_20' THEN 1
 		                         WHEN OCD.CHG_STAT = 'G685_21' THEN 1
 		                         WHEN OCD.CHG_STAT = 'G685_34' THEN 1
-		                         WHEN OCD.CHG_STAT = 'G685_40' AND (OD2.ORD_DTL_STAT <![CDATA[<>]]> 'G013_60' AND OD2.ORD_DTL_STAT <![CDATA[<>]]> 'G013_70') THEN 1
+		                         WHEN OCD.CHG_STAT = 'G685_40' AND (OD2.ORD_DTL_STAT IS NOT NULL AND OD2.ORD_DTL_STAT <![CDATA[<>]]> 'G013_60' AND OD2.ORD_DTL_STAT <![CDATA[<>]]> 'G013_70') THEN 1
 		                     END, 0) AS EXCHANGE_COUNT
 		           , IFNULL(CASE OCD.CHG_STAT WHEN 'G685_50' THEN 1
 		                                      WHEN 'G685_51' THEN 1
@@ -3502,7 +3502,7 @@
 		    ON     OD.GOODS_CD = G.GOODS_CD
 		    INNER  JOIN TB_BRAND BR
 		    ON     G.BRAND_CD = BR.BRAND_CD
-		    INNER  JOIN TB_REFUND RF
+		    LEFT   OUTER JOIN TB_REFUND RF
 		    ON     RF.ORD_CHG_SQ = OC.ORD_CHG_SQ
 		    WHERE  1=1
 		    AND    OC.ADD_PAY_COST <![CDATA[>]]> 0

+ 14 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -2478,6 +2478,20 @@
 		   AND PAY_GB = 'D'
 		   AND PAY_STAT = 'G016_30'
 	</select>
+	
+	<!-- 교환 상품 재고 조회 -->
+	<select id="getCurrStockQty" parameterType="Order" resultType="Order">
+		/* TscOrder.getCurrStockQty */
+		SELECT VS.CURR_STOCK_QTY - VS.BASE_STOCK_QTY AS CURR_STOCK_QTY
+		     , VS.SOLDOUT_YN
+		     , ODI.ITEM_QTY
+		  FROM TB_ORDER_DETAIL_ITEM ODI
+		 INNER JOIN VW_STOCK VS
+		    ON VS.GOODS_CD = ODI.ITEM_CD
+		   AND VS.OPT_CD1 = ODI.OPT_CD1
+		   AND VS.OPT_CD2 = #{ordChgOpt}
+		 WHERE ODI.ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
+	</select>
 </mapper>