ソースを参照

Merge remote-tracking branch '112.172.147.34/style' into ST24PRJ-659(휴대폰-취소시-계좌번호-입력화면-오류-문의)

jsh77b 4 年 前
コミット
fa22677427

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

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

+ 83 - 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();
@@ -2158,6 +2173,11 @@ public class TscOrderChangeService {
 		String pgStat = orderChange.getPgStat();										// PG점프 여부
 		int depositAmt = orderChange.getDepositAmt();									// PG점프 입금액
 
+		// 2021.12.21 card007 취소 가능 수량 체크 로직 추가
+		if (!getAllCancelCanQtyYn(orderChange)) {
+			throw new IllegalStateException("취소 가능 수량이 부족합니다.");
+		}
+
 		// 원주문 결제정보 조회
 		Payment payment = new Payment();
 		payment.setOrdNo(ordNo);
@@ -5660,4 +5680,67 @@ public class TscOrderChangeService {
 	public Collection<Order> getAddDeliveryFeePayment (OrderChange orderChange) {
 		return orderChangeDao.getAddDeliveryFeePayment(orderChange);
 	}
+
+	/**
+	 * 취/반/교 가능 수량 조회
+	 *
+	 * @param Collection<Order>, String
+	 * @return Boolean
+	 * @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;
+	}
+
+	/**
+	 * 전체취소 가능 수량 조회
+	 *
+	 * @param OrderChange
+	 * @return Boolean
+	 * @author card007
+	 * @since 2021. 12. 22
+	 */
+	public Boolean getAllCancelCanQtyYn(OrderChange orderChange) {
+		Boolean result = true;
+
+		for (OrderChange data : orderChangeDao.getAllCancelCanQty(orderChange)) {
+			int cnclRtnQty = data.getCnclRtnQty();
+			int ordReqChgQty = data.getOrdReqChgQty();
+
+			log.info("cnclRtnQty >>> {}", cnclRtnQty);
+			log.info("ordReqChgQty >>> {}", ordReqChgQty);
+
+			if (cnclRtnQty > 0 || ordReqChgQty > 0) {
+				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();

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

@@ -536,7 +536,7 @@
 		                  , OD.CNCL_RTN_QTY
 		                  , OD.ORD_AMT
 		                  , OD.CNCL_RTN_AMT
-		                  , OD.CPN1_DC_AMT + OD.TMTB1_DC_AMT + OD.TMTB2_DC_AMT +  OD.GOODS_CPN_DC_AMT + OD.CART_CPN_DC_AMT + OD.PNT_DC_AMT + OD.PRE_PNT_DC_AMT AS TOT_DC_AMT
+		                  , OD.TMTB1_DC_AMT + OD.TMTB2_DC_AMT +  OD.GOODS_CPN_DC_AMT + OD.CART_CPN_DC_AMT + OD.PNT_DC_AMT + OD.PRE_PNT_DC_AMT AS TOT_DC_AMT
 		                  , OD.REAL_ORD_AMT
 		                  , OD.FORMAL_GB
 		                  , DATE_FORMAT(OD.DELV_ASSIGN_DT,'%Y%m%d%H%i%S') AS DELV_ASSIGN_DT
@@ -4445,6 +4445,11 @@
 		UPDATE TB_ORDER_DETAIL
 		SET    ORD_DTL_STAT = #{ordDtlStat}
 		     , FIRST_ORD_DTL_NO = ORD_DTL_NO
+			<if test="payMeans == 'G014_20' and ordDtlStat == 'G013_20'">
+		     , SHOT_DELV_YN = CASE WHEN SHOT_DELV_YN = 'Y' AND DATE_FORMAT(NOW(), '%H') <![CDATA[>]]> 10 THEN 'N'
+		                           ELSE SHOT_DELV_YN
+		                       END
+			</if>
 		     , UPD_NO = #{custNo}
 		     , UPD_DT = NOW()
 		WHERE  1=1

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

@@ -5326,6 +5326,57 @@
 		  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>
+
+	<!-- 전체취소 가능 수량 조회 -->
+	<select id="getAllCancelCanQty" parameterType="OrderChange" resultType="OrderChange">
+		/* TscOrderChange.getAllCancelCanQty */
+		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
+		                    INNER JOIN TB_ORDER_DETAIL OD
+		                       ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		                    INNER JOIN TB_ORDER O
+		                       ON OD.ORD_NO = O.ORD_NO
+		                    WHERE O.ORD_NO = #{ordNo}
+		                      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}
+	</select>
 </mapper>