Просмотр исходного кода

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

card007 5 лет назад
Родитель
Сommit
b8b10c7a78

+ 28 - 0
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -789,6 +789,15 @@ public class TsfCartService {
 
 		// 장바구니 상품 마스터 정보 조회
 		Cart cart = cartDao.selectCartGoodsInfo(param);
+		if(cart == null) {
+			throw new IllegalArgumentException("장바구니 상품 정보가 없습니다.<br/>새로고침 후 다시 시도해주세요.");
+		}
+
+		if(TscConstants.GoodsStat.SOLDOUT.value().equals(cart.getGoodsStat())) {
+			cart.setSoldoutYn("Y");
+		} else {
+			cart.setSoldoutYn("N");
+		}
 
 		// 세트 상품일 경우
 		if(TscConstants.GoodsType.SET.value().equals(cart.getGoodsType())) {
@@ -796,7 +805,19 @@ public class TsfCartService {
 			for(Cart comp : cart.getCartCompsList()) {
 				comp.setCartSq(cart.getCartSq());
 				comp.setCartColorList(cartDao.selectCartGoodsColorList(comp));
+				if("Y".equals(cart.getSoldoutYn()) || TscConstants.GoodsStat.SOLDOUT.value().equals(comp.getGoodsStat())) {
+					comp.setSoldoutYn("Y");
+				} else {
+					comp.setSoldoutYn("N");
+				}
+
 				for(Cart color : comp.getCartColorList()) {
+					if("Y".equals(comp.getSoldoutYn()) || TscConstants.GoodsStat.SOLDOUT.value().equals(color.getGoodsStat())) {
+						color.setSoldoutYn("Y");
+					} else {
+						color.setSoldoutYn("N");
+					}
+
 					color.setCartSq(comp.getCartSq());
 					color.setCartSizeList(cartDao.selectCartGoodsSizeList(color));
 				}
@@ -807,9 +828,16 @@ public class TsfCartService {
 			cart.getCartCompsList().add(new Cart());
 
 			for(Cart comp : cart.getCartCompsList()) {
+				comp.setSoldoutYn(cart.getSoldoutYn());
 				comp.setCartColorList(cartDao.selectCartGoodsColorList(cart));
 
 				for(Cart color : comp.getCartColorList()) {
+					if("Y".equals(comp.getSoldoutYn()) || TscConstants.GoodsStat.SOLDOUT.value().equals(color.getGoodsStat())) {
+						color.setSoldoutYn("Y");
+					} else {
+						color.setSoldoutYn("N");
+					}
+
 					color.setCartSq(cart.getCartSq());
 					color.setCartImgList(cartDao.selectCartSelfGoodsOptionImgList(color));
 					color.setCartSizeList(cartDao.selectCartGoodsSizeList(color));

+ 20 - 7
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -251,6 +251,19 @@ public class TsfGoodsService {
 		}
 
 		if (param.getGoodsType().equals(TscConstants.GoodsType.SET.value())) {		// 세트상품이면 구성 상품코드로 조회
+			Goods compsInfo = new Goods();
+			compsInfo.setGoodsCd(param.getGoodsCd());
+			compsInfo.setCompsGoodsCd(param.getItemCd());
+			compsInfo.setGoodsType(param.getGoodsType());
+
+			compsInfo = goodsDao.getGoodsCompsInfo(compsInfo);						// 구성상품 정보 조회
+
+			if(TscConstants.GoodsStat.SOLDOUT.value().equals(compsInfo.getGoodsStat())) {
+				return compsInfo.getGoodsNm() + " 상품은 품절입니다.";
+			} else if (!TscConstants.GoodsStat.APPR.value().equals(compsInfo.getGoodsStat())) {
+				return compsInfo.getGoodsNm() + " 상품은 구매할 수 없습니다.";
+			}
+
 			GoodsStock stockCheck = new GoodsStock();								// 재고 조회 결과
 			stockCheck.setGoodsCd(param.getItemCd());
 			stockCheck.setOptCd(param.getOptCd());
@@ -261,14 +274,10 @@ public class TsfGoodsService {
 				return "재고체크 실패했습니다. 새로고침 후 다시 시도해주세요.";
 			}
 
-			Goods compsInfo = new Goods();
-			compsInfo.setGoodsCd(param.getGoodsCd());
-			compsInfo.setCompsGoodsCd(param.getItemCd());
-			compsInfo.setGoodsType(param.getGoodsType());
-
-			compsInfo = goodsDao.getGoodsCompsInfo(compsInfo);						// 구성상품 정보 조회
+			if("Y".equals(stockCheck.getSoldoutYn())) {
+				return stockCheck.getOptCd2() + " 옵션은 품절입니다.";
+			}
 
-			// 재고 체크
 			if (param.getGoodsQty() * compsInfo.getQty() > stockCheck.getCurrStockQty()) {
 				return compsInfo.getGoodsNm() + " 옵션의 재고가 충분하지 않습니다.";
 			}
@@ -283,6 +292,10 @@ public class TsfGoodsService {
 				return "재고체크 실패했습니다. 새로고침 후 다시 시도해주세요.";
 			}
 
+			if("Y".equals(stockCheck.getSoldoutYn())) {
+				return stockCheck.getOptCd2() + " 옵션은 품절입니다.";
+			}
+
 			if (param.getGoodsQty() > stockCheck.getCurrStockQty()) {
 				return "옵션의 재고가 충분하지 않습니다.";
 			}

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

@@ -70,6 +70,7 @@ public class Cart extends TscBaseDomain {
 	private String imgPath;			// 상품 이미지 경로
 	private String soldoutYn;		// 옵션
 	private String frontGb;			// 접속 디바이스 정보
+	private String goodsStat;		// 상품상태
 
 	// 장바구니 상품 정보 리스트
 	Collection<Cart> cartCompsList;		// 장바구니 상품 구성 상품리스트

+ 17 - 36
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -539,7 +539,6 @@
 		             , G.PNT_PRATE
 		             , G.PNT_MRATE
 		             , STOCK.SOLDOUT_YN
-		             , CASE WHEN STOCK.ORD_CAN_YN = 'N' AND GRADE_YN.ORD_CAN_YN = 'N' THEN 'N' ELSE 'Y' END AS ORD_CAN_YN
 		             , FN_GET_APPLY_CPN1_PRICE(C.GOODS_CD, #{frontGb}) AS CURR_PRICE
 		             , G.LIST_PRICE
 		             , IFNULL(O.ADD_PRICE, 0) AS OPT_ADD_PRICE
@@ -554,6 +553,14 @@
 		             , CASE WHEN GQDS.GOODS_CD IS NULL AND G.SELF_GOODS_YN = 'Y' THEN 'SHOT'
 		                    WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
 		                    ELSE DFP.DELV_FEE_CD END AS CART_DELV_FEE_CD
+		             , CASE WHEN STOCK.ORD_CAN_YN = 'Y' AND (SELECT  CASE WHEN Z.CNT1 = 0 THEN 'Y' ELSE CASE WHEN CNT2 > 0 THEN 'Y'
+		                                                                                                     ELSE 'N' END END
+		                                                     FROM    (SELECT COUNT(1) AS CNT1
+		                                                                   , CASE WHEN GOG.CUST_GRADE = CT.CUST_GRADE THEN 1
+		                                                                          ELSE 0 END AS CNT2
+		                                                              FROM   TB_GOODS_ORDER_GRADE GOG
+		                                                              WHERE  GOG.GOODS_CD = C.GOODS_CD) Z ) = 'Y' THEN 'Y'
+		                    ELSE 'N' END AS ORD_CAN_YN
 		             , CASE WHEN C.CUST_NO > 0 AND (SELECT IFNULL(SUM(OD.ORD_QTY), 0)
 		                                            FROM   TB_ORDER_DETAIL OD
 		                                            INNER  JOIN TB_ORDER O
@@ -580,36 +587,8 @@
 		        INNER  JOIN TB_OPTION O
 		        ON     CD.ITEM_CD = O.GOODS_CD
 		        AND    CD.OPT_CD = O.OPT_CD
-		        LEFT   OUTER JOIN (SELECT A.CART_SQ
-		                                , MAX(A.ORD_CAN_YN) AS ORD_CAN_YN
-		                           FROM   (SELECT A.CART_SQ
-		                                        , CASE WHEN (GOODS_ALL_CNT > 0 AND GOODS_GRADE_CNT = 0) OR (ITEM_ALL_CNT > 0 AND ITEM_GRADE_CNT = 0) THEN 'N'
-		                                               ELSE 'Y' END AS ORD_CAN_YN
-		                                   FROM   (SELECT C.CART_SQ
-		                                                , C.GOODS_CD
-		                                                , CD.ITEM_CD
-		                                                , (SELECT COUNT(1) FROM TB_GOODS_ORDER_GRADE WHERE GOODS_CD = C.GOODS_CD) AS GOODS_ALL_CNT
-		                                                , CASE WHEN C.CUST_NO = 0 THEN 0
-		                                                       ELSE (SELECT COUNT(1) FROM TB_GOODS_ORDER_GRADE GOG INNER JOIN TB_CUSTOMER CT ON GOG.CUST_GRADE = CT.CUST_GRADE WHERE GOODS_CD = C.GOODS_CD AND CT.CUST_NO = C.CUST_NO) END AS GOODS_GRADE_CNT
-		                                                , (SELECT COUNT(1) FROM TB_GOODS_ORDER_GRADE WHERE GOODS_CD = CD.ITEM_CD) AS ITEM_ALL_CNT
-		                                                , CASE WHEN C.CUST_NO = 0 THEN 0
-		                                                       ELSE (SELECT COUNT(1) FROM TB_GOODS_ORDER_GRADE GOG INNER JOIN TB_CUSTOMER CT ON GOG.CUST_GRADE = CT.CUST_GRADE WHERE GOODS_CD = CD.ITEM_CD AND CT.CUST_NO = C.CUST_NO) END AS ITEM_GRADE_CNT
-		                                           FROM   TB_CART C
-		                                           INNER  JOIN TB_CART_DETAIL CD
-		                                           ON     C.CART_SQ = CD.CART_SQ
-		                                           WHERE  1=1
-		                                           <if test="custNo == 0">
-		                                           AND    C.CUST_NO = 0
-		                                           AND    C.JSESSION_ID = #{jsessionId}
-		                                           </if>
-		                                           <if test="custNo != 0">
-		                                           AND    C.CUST_NO = #{custNo}
-		                                           </if>
-		                                           ) A
-		                                  ) A
-		                           GROUP BY A.CART_SQ
-		               ) GRADE_YN
-		        ON     GRADE_YN.CART_SQ = C.CART_SQ
+		        LEFT   OUTER JOIN TB_CUSTOMER CT
+		        ON     C.CUST_NO = CT.CUST_NO
 		        INNER  JOIN (   SELECT A.CART_SQ
 		                             , MAX(A.SOLDOUT_YN) AS SOLDOUT_YN
 		                             , MAX(A.ORD_CAN_YN) AS ORD_CAN_YN
@@ -897,7 +876,7 @@
 		ON     G.BRAND_CD = BR.BRAND_CD
 		WHERE  CA.CART_SQ = #{cartSq}
 		AND    G.SELF_MALL_YN = 'Y'
-		AND    G.GOODS_STAT = 'G008_90'
+		AND    G.GOODS_STAT IN ('G008_90', 'G008_70')
 	</select>
 
 	<!-- 장바구니 세트 구성 상품 정보 조회 -->
@@ -913,6 +892,7 @@
 			 , CD.OPT_CD2
 			 , G.SELF_GOODS_YN
 			 , G.GOODS_NM
+		     , G.GOODS_STAT
 		FROM   TB_CART CA
 		INNER  JOIN TB_CART_DETAIL CD
 		ON     CA.CART_SQ = CD.CART_SQ
@@ -923,7 +903,7 @@
 		ON     GC.COMPS_GOODS_CD = G.GOODS_CD
 		WHERE  1=1
 		AND    G.SELF_MALL_YN = 'Y'
-		AND    G.GOODS_STAT = 'G008_90'
+		AND    G.GOODS_STAT IN ('G008_90', 'G008_70')
 		AND    GC.USE_YN = 'Y'
 		AND    GC.GOODS_CD = #{goodsCd}
 		AND    CA.CART_SQ = #{cartSq}
@@ -943,6 +923,7 @@
 			 , MAX(CD.CART_DTL_SQ) AS CART_DTL_SQ
 			 , MAX(ST.DISP_ORD) AS DISP_ORD
 			 , MAX(CD.OPT_CD1) AS CART_OPT_CD1
+		     , MAX(ST.SOLDOUT_YN) AS SOLDOUT_YN
 			 , IFNULL(MAX( CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = CD.OPT_CD1)
 								ELSE CD.OPT_CD1 END), MAX(CD.OPT_CD1)) AS CART_COLOR_NM
 		FROM   TB_GOODS G
@@ -954,7 +935,7 @@
 		AND    CD.CART_SQ = #{cartSq}
 		WHERE  ST.DISP_YN = 'Y'
 		AND    G.SELF_MALL_YN = 'Y'
-		AND    G.GOODS_STAT = 'G008_90'
+		AND    G.GOODS_STAT IN ('G008_90', 'G008_70')
 		AND    G.GOODS_CD = #{goodsCd}
 		GROUP  BY ST.GOODS_CD
 			 , ST.OPT_CD1
@@ -987,7 +968,7 @@
 		</if>
 		AND    ST.DISP_YN = 'Y'
 		AND    G.SELF_MALL_YN = 'Y'
-		AND    G.GOODS_STAT = 'G008_90'
+		AND    G.GOODS_STAT IN ('G008_90', 'G008_70')
 		ORDER  BY ST.DISP_ORD
 	</select>
 
@@ -1017,7 +998,7 @@
 		ON     G.GOODS_CD = GI.GOODS_CD
 		AND    G.MAIN_COLOR_CD = GI.COLOR_CD
 		WHERE  G.SELF_MALL_YN = 'Y'
-		AND    G.GOODS_STAT = 'G008_90'
+		AND    G.GOODS_STAT IN ('G008_90', 'G008_70')
 		AND    GI.GOODS_CD = #{goodsCd}
 		ORDER  BY GI.DISP_ORD
 	</select>

+ 0 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -449,7 +449,6 @@
 		    ON GC.COMPS_GOODS_CD = G.GOODS_CD
 		 WHERE GC.USE_YN = 'Y'
 		   AND G.SELF_MALL_YN = 'Y'							<!-- 자사몰 노출 여부 -->
-		   AND G.GOODS_STAT = 'G008_90'	<!-- 상품 승인완료, 일시품절 (품절도 프론트에서 보여져야함) -->
 		   AND GC.GOODS_TYPE = #{goodsType}
 		   AND GC.GOODS_CD = #{goodsCd}
 		   AND GC.COMPS_GOODS_CD = #{compsGoodsCd}

+ 83 - 66
src/main/webapp/WEB-INF/views/web/cart/CartChangeOptionPopupWeb.html

@@ -40,29 +40,26 @@
 						<!-- 세트상품 옵션 -->
 						<th:block th:if="${setType.equals(cart.goodsType)}">
 							<div class="opt_select">
+								<!-- 컬러 변경시 만들어줄 size option -->
+								<span style="display:none;" th:each="color, index : ${comp.cartColorList}">
+									<span th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
+										<th:block th:each="size, i : ${color.cartSizeList}">
+											<th:block th:if="${color.optCd1.equals(size.optCd1)}">
+												<li th:classappend="${i.index == 0} ? selected" th:data="${comp.cartDtlSq}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
+											</th:block>
+										</th:block>
+									</span>
+								</span>
+
 								<div class="opt_header">
 									<span class="title" th:text="${comp.goodsNm}"></span>
 								</div>
 								<div class="opt_header">
 									<span class="title">옵션1</span>
 									<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
-										<span class="text" th:text="${color.cartColorNm}"></span>
+										<span class="text" th:classappend="|chooseColorNm_${comp.goodsCd}|" th:text="${color.cartColorNm}"></span>
 									</th:block>
 								</div>
-
-								<!-- 컬러 변경시 만들어줄 size option -->
-								<th:block th:each="color, index : ${comp.cartColorList}">
-									<span style="display:none;">
-										<select th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
-											<th:block th:each="size, i : ${color.cartSizeList}">
-												<th:block th:if="${color.optCd1.equals(size.optCd1)}">
-													<option th:value="${size.optCd}" th:text="${size.optCd2}"></option>
-												</th:block>
-											</th:block>
-										</select>
-									</span>
-								</th:block>
-
 								<form class="form_wrap">
 									<div class="form_field">
 										<div class="select_custom item_opt1 setColorSelect">
@@ -70,13 +67,10 @@
 												<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
 													<div class="select" th:text="${color.cartColorNm}"></div>
 												</th:block>
-												<ul class="list">
-													<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+												<ul class="list" th:data="${comp.goodsCd}">
 													<th:block th:each="color, index : ${comp.cartColorList}">
-														<li th:classappend="${color.cartColorNm != null} ? selected" th:text="${color.colorNm}"></li>
+														<li th:classappend="${color.cartColorNm != null} ? 'selected addNewScombo'" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
 													</th:block>
-													<!--<li class="selected">카키/95</li>
-													<li aria-disabled="true">옐로우/105</li>-->
 												</ul>
 											</div>
 										</div>
@@ -94,16 +88,16 @@
 								</div>
 								<form class="form_wrap">
 									<div class="form_field">
-										<div class="select_custom item_opt2 setSizeSelect">
+										<div class="select_custom item_opt2 setOption">
 											<div class="combo">
 												<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
 													<th:block th:each="size, i : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
-														<div class="select" th:classappend="|size_${comp.goodsCd}|" th:text="${size.optCd2}" th:data="${color.goodsCd}"></div>
+														<div class="select" th:classappend="|size_${comp.goodsCd}_size_nm addNewScombo|" th:text="${size.optCd2}" th:data="${color.goodsCd}"></div>
 													</th:block>
-													<ul class="list">
+													<ul class="list setSizeSelect" th:classappend="|size_${comp.goodsCd}|">
 														<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
 															<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
-															<li th:classappend="${size.cartOptCd != null} ? selected" th:data="${comp.cartDtlSq}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}"></li>
+															<li th:classappend="${size.cartOptCd != null} ? selected" th:data="${comp.cartDtlSq}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
 															<!--<li class="selected">블랙/95</li>
 															<li aria-disabled="true">블랙/105</li>-->
 														</th:block>
@@ -157,26 +151,23 @@
 						<!-- 입점업체 -->
 						<th:block th:if="${!setType.equals(cart.goodsType) and 'N'.equals(cart.selfGoodsYn)}">
 							<div class="opt_select">
+								<!-- 컬러 변경시 만들어줄 size option -->
+								<span style="display:none;" th:each="color, index : ${comp.cartColorList}">
+									<span th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
+										<th:block th:each="size, i : ${color.cartSizeList}">
+											<th:block th:if="${color.optCd1.equals(size.optCd1)}">
+												<li th:classappend="${i.index == 0} ? selected" th:data="${cart.cartDtlSq}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
+											</th:block>
+										</th:block>
+									</span>
+								</span>
+
 								<div class="opt_header">
 									<span class="title">옵션1</span>
 									<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
-										<span class="text" th:text="${color.cartColorNm}"></span>
+										<span class="text" th:classappend="|chooseColorNm_${cart.goodsCd}|" th:text="${color.cartColorNm}"></span>
 									</th:block>
 								</div>
-
-								<!-- 컬러 변경시 만들어줄 size option -->
-								<th:block th:each="color, index : ${comp.cartColorList}">
-									<span style="display:none;">
-										<select th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
-											<th:block th:each="size, i : ${color.cartSizeList}">
-												<th:block th:if="${color.optCd1.equals(size.optCd1)}">
-													<option th:value="${size.optCd}" th:text="${size.optCd2}"></option>
-												</th:block>
-											</th:block>
-										</select>
-									</span>
-								</th:block>
-
 								<form class="form_wrap">
 									<div class="form_field">
 										<div class="select_custom item_opt1 setColorSelect">
@@ -184,13 +175,10 @@
 												<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
 													<div class="select" th:text="${color.cartColorNm}"></div>
 												</th:block>
-												<ul class="list">
-													<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
+												<ul class="list" th:data="${cart.goodsCd}">
 													<th:block th:each="color, index : ${comp.cartColorList}">
-														<li th:classappend="${color.cartColorNm != null} ? selected" th:text="${color.colorNm}"></li>
+														<li th:classappend="${color.cartColorNm != null} ? 'selected addNewScombo'" th:data="${color.optCd1}" th:text="${color.colorNm}" th:aria-disabled="${color.soldoutYn.equals('Y') ? true : false}"></li>
 													</th:block>
-													<!--<li class="selected">카키/95</li>
-													<li aria-disabled="true">옐로우/105</li>-->
 												</ul>
 											</div>
 										</div>
@@ -208,18 +196,16 @@
 								</div>
 								<form class="form_wrap">
 									<div class="form_field">
-										<div class="select_custom item_opt2 setSizeSelect">
+										<div class="select_custom item_opt2 setOption">
 											<div class="combo">
 												<th:block th:each="color, index : ${comp.cartColorList}" th:if="${color.cartColorNm != null}">
 													<th:block th:each="size, i : ${color.cartSizeList}" th:if="${size.cartOptCd != null}">
-														<div class="select" th:classappend="|size_${comp.goodsCd}|" th:text="${size.optCd2}" th:data="${color.goodsCd}"></div>
+														<div class="select" th:classappend="|size_${cart.goodsCd}_size_nm addNewScombo|" th:text="${size.optCd2}" th:data="${color.goodsCd}"></div>
+														<input type="hidden" th:if="${size.cartDtlSq > 0}" class="cartDtlSq" th:value="${size.cartDtlSq}" />
 													</th:block>
-													<ul class="list">
+													<ul class="list setSizeSelect" th:classappend="|size_${cart.goodsCd}|">
 														<th:block th:each="size, i : ${color.cartSizeList}" th:if="${color.optCd1.equals(size.optCd1)}">
-															<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
-															<li th:classappend="${size.cartOptCd != null} ? selected" th:data="${color.cartDtlSq}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}"></li>
-															<!--<li class="selected">블랙/95</li>
-															<li aria-disabled="true">블랙/105</li>-->
+															<li th:classappend="${size.cartOptCd != null} ? selected" th:data="${size.cartDtlSq}" th:optCd="${size.optCd}" th:value="${size.optCd}" th:text="${size.optCd2}" th:aria-disabled="${color.soldoutYn.equals('Y') or size.soldoutYn.equals('Y') ? true : false}"></li>
 														</th:block>
 													</ul>
 												</th:block>
@@ -251,7 +237,7 @@
 	<script th:inline="javascript">
 		$(document).ready(function() {
 			$(".select_custom").each(function() {
-				new sCombo(this);
+				new sCombo($(this));
 			});
 		});
 
@@ -262,11 +248,33 @@
 			$('.optModify_pop .number_count .minus').addClass('min_val');
 		}
 
-		// 세트상품 컬러 변경시
-		$(".setColorSelect").on("change", function(e) {
-			let goodsCd = $(this).find("option:checked").attr("data");
+		// 세트상품, 입점업체 상품 컬러 변경시
+		$(".setColorSelect > .combo > .list li").on("click", function(e) {
+			let goodsCd = $(this).parent().attr("data");
+			let firstSize = "";
+
+			$(".chooseColorNm_" + goodsCd).text($(this).text());
+
 			$(".setOption .size_" + goodsCd).html("");
-			$(".setOption .size_" + goodsCd).html($(".color_" + goodsCd + "_" + $(this).val()).html());
+			$(".setOption .size_" + goodsCd).html($(".color_" + goodsCd + "_" + $(this).attr("data")).html());
+
+			$(".setOption .size_" + goodsCd + " li").each(function() {
+				if($(this).hasClass("selected")) {
+					firstSize = $(this).text();
+				}
+			});
+
+			$(".setOption .size_" + goodsCd + "_size_nm").text(firstSize);
+			$(".setOption .size_" + goodsCd + "_size_nm").parent().parent().parent().parent().parent().find(".opt_header .text").text(firstSize);
+			//if(!$(this).hasClass("addNewScombo")) {
+				//new sCombo($(".setOption .size_" + goodsCd).parent().parent());
+			//	$(this).addClass("addNewScombo");
+			//}
+		});
+
+		// 세트상품, 입점업체 상품 사이즈 변경시
+		$(".setOption > .combo > .list li").on("click", function() {
+			$(this).parent().parent().parent().parent().parent().parent().find(".opt_header .text").text($(this).text());
 		});
 
 		// 자사 일반 상품 컬러 선택시
@@ -315,13 +323,13 @@
 
 			if(cart.goodsType == "G056_S") {
 				$(".setSizeSelect").each(function() {
-					$(this).find("ul.list > li").each(function() {
+					$(this).find("li").each(function() {
 						if($(this).hasClass("selected")) {
 							optCds.push($(this).attr("optCd"));
 							cartDtlSqArr.push($(this).attr("data"));
 						}
 					});
-					itemCds.push($(this).find("div.select").attr("data"));
+					itemCds.push($(this).parent().find("div.select").attr("data"));
 				});
 
 				data = {
@@ -334,6 +342,11 @@
 					, goodsQty : $("input[name=goodsQty]").val()
 				}
 			} else if(cart.goodsType != "G056_S" && cart.selfGoodsYn == "Y") {
+				if($(".selfGoodsSize").find("input[name=rdi-optsize]:checked").length < 1) {
+					mcxDialog.alert("옵션을 선택해 주세요.");
+					return false;
+				}
+
 				optCds.push($(".selfGoodsSize").find("input[name=rdi-optsize]:checked").val());
 				itemCds.push(cart.goodsCd);
 				$(".selfGoodsColorSelect").each(function() {
@@ -354,11 +367,13 @@
 			} else {
 				// optCds.push($(".selfGoodsColor").val());
 				itemCds.push(cart.goodsCd);
-				$(".setSizeSelect .selected").each(function() {
-					if($(this).attr("data") > 0) {
-						cartDtlSqArr.push($(this).attr("data"));
-						optCds.push($(this).attr("optCd"));
-					}
+				$(".setSizeSelect").each(function() {
+					$(this).find("li").each(function() {
+						if($(this).hasClass("selected")) {
+							optCds.push($(this).attr("optCd"));
+							cartDtlSqArr.push($(this).attr("data"));
+						}
+					});
 				});
 
 				data = {
@@ -371,7 +386,7 @@
 					, goodsQty : $("input[name=goodsQty]").val()
 				}
 			}
-
+			alert(JSON.stringify(data));
 			$.ajax( {
 				type: "POST",
 				url : '/cart/change/option',
@@ -384,8 +399,10 @@
 				success : function(result) {
 					mcxDialog.alert(result.message);
 					$(".closeCartOptionModal").trigger("click");
-					let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
-					getCartList(data);
+					if(result.status == "SUCCESS") {
+						let data = {shotDelvUseYn : $("input[name=shotDelvUseYn]:checked").val()};
+						getCartList(data);
+					}
 				}
 			});
 		}

+ 34 - 42
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -89,9 +89,9 @@
 										<input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
 										<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
 										<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
+										<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
 										<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
 										<input type="hidden" name="ordCanYn" th:value="${cart.ordCanYn}" />
-										<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
 										<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
 
 										<div class="order_desc">
@@ -166,7 +166,7 @@
 												<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|" th:disabled="${cart.ordCanYn.equals('N')}"><span>옵션 / 수량 변경</span></button></p>
 												<div class="util">
 													<span>
-														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}" th:disabled="${cart.soldoutYn.equals('Y')}">
+														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}" th:disabled="${cart.ordCanYn.equals('N')}">
 															<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
 														</button>
 													</span>
@@ -200,14 +200,15 @@
 										<input type="hidden" name="amtTmtbSq" th:value="${cart.amtTmtbSq}" />
 										<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
 										<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
-										<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
 										<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
+										<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
+										<input type="hidden" name="ordCanYn" th:value="${cart.ordCanYn}" />
 										<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
 
 										<div class="order_desc">
 											<div class="form_box">
 												<div class="form_field">
-													<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N')}" th:disabled="${cart.soldoutYn.equals('Y')}">
+													<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}" th:disabled="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}">
 													<label th:for="|od_item_${cart.cartSq}|">
 														<span class="sr-only">상품선택</span>
 													</label>
@@ -244,7 +245,8 @@
 														<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
 														<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
 														<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
-														<p th:if="${cart.soldoutYn.equals('Y')}">해당 상품은 구매 불가능한 상품입니다.</p>
+														<p th:if="${cart.soldoutYn.equals('Y')}">품절된 상품입니다.</p>
+														<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 													</div>
 												</div>
 											</div>
@@ -263,13 +265,13 @@
 												</p>
 											</div>
 											<div class="button_box">
-												<p th:if="${cart.soldoutYn.equals('Y')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
-												<p th:if="${cart.soldoutYn.equals('N')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
+												<p th:if="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
+												<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
 
-												<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|" th:disabled="${cart.soldoutYn.equals('Y')}"><span>옵션 / 수량 변경</span></button></p>
+												<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|" th:disabled="${cart.ordCanYn.equals('N')}"><span>옵션 / 수량 변경</span></button></p>
 												<div class="util">
 													<span>
-														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}" th:disabled="${cart.soldoutYn.equals('Y')}">
+														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}" th:disabled="${cart.ordCanYn.equals('N')}">
 															<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
 														</button>
 													</span>
@@ -315,13 +317,14 @@
 										<input type="hidden" name="amtTmtbNm" th:value="${cart.amtTmtbNm}" />
 										<input type="hidden" name="currPrice" th:value="${cart.currPrice}" />
 										<input type="hidden" name="soldoutYn" th:value="${cart.soldoutYn}" />
+										<input type="hidden" name="ordCanYn" th:value="${cart.ordCanYn}" />
 										<input type="hidden" name="tmtbDcAmt" th:value="${cart.tmtbDcAmt}" />
 										<input type="hidden" name="cartSq" th:value="${cart.cartSq}" />
 
 										<div class="order_desc">
 											<div class="form_box">
 												<div class="form_field">
-													<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N')}" th:disabled="${cart.soldoutYn.equals('Y')}">
+													<input th:id="|od_item_${cart.cartSq}|" name="cartSqArr" type="checkbox" th:value="${cart.cartSq}" th:checked="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}" th:disabled="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}">
 													<label th:for="|od_item_${cart.cartSq}|">
 														<span class="sr-only">상품선택</span>
 													</label>
@@ -357,7 +360,8 @@
 													<p th:if="${cart.qtyTmtbSq > 0 and cart.applyQtySectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
 													<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'Y'}" class="applyTmtb"><span class="tag primary">SALE</span>다다익선 할인 적용</p>
 													<p th:if="${cart.amtTmtbSq > 0 and cart.applyAmtSectionYn == 'N'}" class="notApplyTmtb"><a href="" class="btn_moresale"><span class="tag primary">SALE</span>다다익선 상품보기</a></p>
-													<p th:if="${cart.soldoutYn.equals('Y')}">해당 상품은 구매 불가능한 상품입니다.</p>
+													<p th:if="${cart.soldoutYn.equals('Y')}">품절된 상품입니다.</p>
+													<p th:if="${cart.ordCanYn.equals('N')}">해당 상품은 구매 불가능한 상품입니다.</p>
 												</div>
 											</div>
 											<div class="calc_box">
@@ -375,13 +379,13 @@
 												</p>
 											</div>
 											<div class="button_box">
-												<p th:if="${cart.soldoutYn.equals('Y')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
-												<p th:if="${cart.soldoutYn.equals('N')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
+												<p th:if="${cart.soldoutYn.equals('Y') or cart.ordCanYn.equals('N')}"><button type="button" class="btn btn_dark btn_sm" disabled=""><span>구매 불가</span></button></p>
+												<p th:if="${cart.soldoutYn.equals('N') and cart.ordCanYn.equals('Y')}"><button type="button" class="btn btn_primary btn_sm" th:onclick="|fnSubmitNoMember(${cart.cartSq})|"><span>바로 구매</span></button></p>
 
-												<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|" th:disabled="${cart.soldoutYn.equals('Y')}"><span>옵션 / 수량 변경</span></button></p>
+												<p><button type="button" class="btn btn_default btn_sm" th:onclick="|fnChangeCartOptCd(${cart.cartSq})|" th:disabled="${cart.ordCanYn.equals('N')}"><span>옵션 / 수량 변경</span></button></p>
 												<div class="util">
 													<span>
-														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}" th:disabled="${cart.soldoutYn.equals('Y')}">
+														<button type="button" class="btn_favorite" th:classappend="${cart.wishCnt > 0} ? active" onclick="cfnPutWishList(this)" th:goodsCd="${cart.goodsCd}" th:ithrCd="${cart.ithrCd}" th:contentsLoc="${cart.contentsLoc}" th:disabled="${cart.ordCanYn.equals('N')}">
 															<span><i class="ico ico_like2"></i><em class="sr-only">관심상품 추가</em></span>
 														</button>
 													</span>
@@ -581,40 +585,28 @@
 			/* 세트상품 장바구니 */
 			/*let compsList = [];
 			let temp = new Object;
-			temp.goodsCd = "STYS00000002";
-			temp.itemCd = "CMW1GQJM91";
-			temp.optCd = "10127856-3";
+			temp.goodsCd = "STYS00000005";
+			temp.itemCd = "A83F-DP568S";
+			temp.optCd = "14019445-2";
 			temp.goodsQty = 1;
 			temp.goodsType = "G056_S";
 			temp.cartGb = "C";
-			temp.afLinkCd = "afLinkCd";
-			temp.ithrCd = "G027_ZZZ";
-			temp.contentsLoc = "G028_YYY";
-			temp.planDtlSq = "123";
+			temp.afLinkCd = "aaaa";
+			temp.ithrCd = "12311";
+			temp.contentsLoc = "afasd";
+			temp.planDtlSq = "44";
 			compsList.push(temp);
 			temp = new Object;
-			temp.goodsCd = "STYS00000002";
-			temp.itemCd = "CMW0GQTS53";
-			temp.optCd = "10127620-2";
+			temp.goodsCd = "STYS00000005";
+			temp.itemCd = "A83F-TS517S";
+			temp.optCd = "11867579-2";
 			temp.goodsQty = 1;
 			temp.goodsType = "G056_S";
 			temp.cartGb = "C";
-			temp.afLinkCd = "afLinkCd";
-			temp.ithrCd = "G027_ZZZ";
-			temp.contentsLoc = "G028_YYY";
-			temp.planDtlSq = "123";
-			compsList.push(temp);
-			temp = new Object;
-			temp.goodsCd = "STYS00000002";
-			temp.itemCd = "CNF1GADN51";
-			temp.optCd = "11873201-4";
-			temp.goodsQty = 1;
-			temp.goodsType = "G056_S";
-			temp.cartGb = "C";
-			temp.afLinkCd = "afLinkCd";
-			temp.ithrCd = "G027_ZZZ";
-			temp.contentsLoc = "G028_YYY";
-			temp.planDtlSq = "123";
+			temp.afLinkCd = "aaaa";
+			temp.ithrCd = "12311";
+			temp.contentsLoc = "afasd";
+			temp.planDtlSq = "44";
 			compsList.push(temp);
 
 			cfnAddCart(compsList);*/
@@ -1140,7 +1132,7 @@
 						}
 
 						if(delv.delvFee == 0) {
-							$(".delvList").find(".delv_" + delv.delvFeeCd).html("<span class='dlvr_fee'>배송비 무료</span><span class='dlvr_fee'><em>" + delv.supplyCOmpNm + "</em> 업체직배송</span>");
+							$(".delvList").find(".delv_" + delv.delvFeeCd).html("<span class='dlvr_fee'>배송비 무료</span><span class='dlvr_fee'><em>" + delv.supplyCompNm + "</em> 업체직배송</span>");
 						} else {
 							let html = "<div className='order_delivery'><span class='dlvr_fee'>배송비 <em>" + Number(delv.delvFee).toLocaleString() + "</em>원</span><span class='dlvr_shop'><em>" + delv.supplyCompNm + "</em> 업체직배송</span><a href='#' className='btn_popup_save'>배송비 SAVE 상품 보기</a></div>";
 							$(".delvList").find(".delv_" + delv.delvFeeCd).html(html);