Kaynağa Gözat

ST24PRJ-683 [결함] 주문취소 중복 처리

card007 4 yıl önce
ebeveyn
işleme
ba149d1e08

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

@@ -1142,4 +1142,14 @@ public interface TscOrderChangeDao {
 	 * @since 2021. 11. 19
 	 */
 	int getGoodsCpnDcAmt(Order order);
+
+	/**
+	 * 취/반/교 가능 수량 조회
+	 *
+	 * @param OrderChange
+	 * @return Collection<OrderChange>
+	 * @author card007
+	 * @since 2021. 12. 21
+	 */
+	OrderChange getClaimCanQty(Order order);
 }

+ 52 - 0
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -164,6 +164,11 @@ public class TscOrderChangeService {
 		List<Order> cancelOrderRefundList 	= (List<Order>) map.get("cancelOrderRefundList");	// 취소환불금액 목록 (주문상세단품 단위)
 		List<Order> cancelDelvRefundList 	= (List<Order>) map.get("cancelDelvRefundList");	// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
 
+		// 2021.12.21 card007 취소 가능 수량 체크 로직 추가
+		if (!getClaimCanQtyYn(cancelOrderRefundList, "cancel")) {
+			throw new IllegalStateException("취소 가능 수량이 부족합니다.");
+		}
+
 		int ordNo 				= map.getInt("ordNo");											// 주문번호
 		Integer custNo			= map.getInt("custNo");											// 고객번호
 		int ordChgSq			= map.getInt("ordChgSq");										// 주문변경일련번호
@@ -816,6 +821,11 @@ public class TscOrderChangeService {
 		// 1. 변경정보목록 및 정보 설정
 		List<Order> cancelOrderRefundList 	= (List<Order>) map.get("cancelOrderRefundList");				// 취소환불금액 목록 (주문상세단품 단위)
 		List<Order> cancelDelvRefundList 	= (List<Order>) map.get("cancelDelvRefundList");				// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
+
+		// 2021.12.21 card007 취소 가능 수량 체크 로직 추가
+		if (!getClaimCanQtyYn(cancelOrderRefundList, "return")) {
+			throw new IllegalStateException("반품 가능 수량이 부족합니다.");
+		}
 		
 		int ordNo 							= map.getInt("ordNo");											// 주문번호
 		int custNo							= map.getInt("custNo");											// 고객번호
@@ -1164,6 +1174,11 @@ public class TscOrderChangeService {
 		// 교환신청 목록 설정
 		Collection<Order> excReqList = excReq.getCancelReqList();
 
+		// 2021.12.21 card007 취소 가능 수량 체크 로직 추가
+		if (!getClaimCanQtyYn(excReqList, "exchange")) {
+			throw new IllegalStateException("교환 가능 수량이 부족합니다.");
+		}
+
 		// 추가배송비 관련 상태값 설정
 		String orderChangeStat = TscConstants.OrderChangeStat.EXCHANGE.value();
 		String ordDtlStat = TscConstants.OrderDetailStat.REFUND_CONFIRM_WAIT.value();
@@ -5644,4 +5659,41 @@ public class TscOrderChangeService {
 	public Collection<Order> getAddDeliveryFeePayment (OrderChange orderChange) {
 		return orderChangeDao.getAddDeliveryFeePayment(orderChange);
 	}
+
+	/**
+	 * 취/반/교 가능 수량 조회
+	 *
+	 * @param OrderChange
+	 * @return Collection<OrderChange>
+	 * @author card007
+	 * @since 2021. 12. 21
+	 */
+	public Boolean getClaimCanQtyYn(Collection<Order> dataList, String claim) {
+		Boolean result = true;
+
+		for (Order order : dataList) {
+			// 클레임진행수량 조회
+			OrderChange orderChange = orderChangeDao.getClaimCanQty(order);
+			int ordQty 			= orderChange.getOrdQty();				// 주문수량
+			int cnclRtnQty 		= orderChange.getCnclRtnQty();			// 취소수량
+			int ordReqChgQty 	= orderChange.getOrdReqChgQty();		// 클레임진행수량
+			int claimCanQty		= ordQty - cnclRtnQty - ordReqChgQty;	// 클레임가능수량
+			int chgQty 			= order.getOrdCanChgQty();				// 클레임요청수량
+			if ("exchange".equals(claim)) {
+				chgQty			= order.getChgQty();
+			}
+
+			log.info("ordQty >>> {}", ordQty);
+			log.info("cnclRtnQty >>> {}", cnclRtnQty);
+			log.info("ordReqChgQty >>> {}", ordReqChgQty);
+			log.info("claimCanQty >>> {}", claimCanQty);
+			log.info("chgQty >>> {}", chgQty);
+
+			if (claimCanQty < chgQty) {
+				result = false;
+			}
+		}
+
+		return result;
+	}
 }

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

@@ -274,6 +274,8 @@ public class OrderChange extends TscBaseDomain {
 	private int rowspanRank;
 	private int rowspanCnt;
 	private String msgStat;							// 메세지 전송 여부
+	private int cnclRtnQty;
+	private int ordReqChgQty;
 
 	public String getMaskingOrdNm() {
 		return TscSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.name(getOrdNm()) : getOrdNm();

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

@@ -5305,6 +5305,30 @@
 		  FROM TB_ORDER_DETAIL
 		 WHERE FIRST_ORD_DTL_NO = #{firstOrdDtlNo}
 	</select>
+	
+	<!-- 취/반/교 가능 수량 조회 -->
+	<select id="getClaimCanQty" parameterType="Order" resultType="OrderChange">
+		/* TscOrderChange.getClaimCanQty */
+		SELECT OD.ORD_DTL_NO
+		     , OD.ORD_QTY
+		     , OD.CNCL_RTN_QTY
+		     , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+		  FROM TB_ORDER_DETAIL OD
+		  LEFT OUTER JOIN (SELECT OCD.ORD_DTL_NO
+		                        , SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
+		                     FROM TB_ORDER_CHANGE_DETAIL OCD
+		                     INNER JOIN TB_ORDER_CHANGE OC
+		                     ON OCD.ORD_CHG_SQ = OC.ORD_CHG_SQ
+		                    WHERE OCD.ORD_DTL_NO = #{ordDtlNo}
+		                      AND OCD.DEL_YN = 'N'
+		                      AND OCD.CHG_STAT IN ('G685_20', 'G685_21', 'G685_30', 'G685_31', 'G685_32', 'G685_33', 'G685_34', 'G685_50', 'G685_51')
+		                      AND OC.WD_BF_SEND_YN = 'N'
+		                    GROUP BY OCD.ORD_DTL_NO
+		                  ) OCD
+		  ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		 WHERE OD.ORD_NO = #{ordNo}
+		   AND OD.ORD_DTL_NO = #{ordDtlNo}
+	</select>
 </mapper>