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

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

jsh77b 5 лет назад
Родитель
Сommit
5562b568d8

+ 8 - 0
src/main/java/com/style24/front/biz/dao/TsfCouponDao.java

@@ -23,6 +23,14 @@ public interface TsfCouponDao {
 	 */
 	Coupon getSerialCpnUseInfo(Coupon param);
 
+	/**
+	 * 쿠폰 적용 대상조건명 및 조건별 수량 조회
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 03. 30
+	 */
+	Collection<Coupon> getCpnRefName(Coupon param);
+
 	/**
 	 * 입력된 시리얼 쿠폰 정보 조회
 	 * @param param

+ 11 - 17
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -304,7 +304,7 @@ public class TsfCartService {
 
 		// 품절 아닌 상품만 체크
 		for (Order goods : cartGoodsList) {
-			if ("N".equals(goods.getSoldoutYn())) {
+			if ("N".equals(goods.getSoldoutYn()) && "Y".equals(goods.getOrdCanYn())) {
 				cartSqs.add(goods.getCartSq());
 			}
 		}
@@ -645,7 +645,7 @@ public class TsfCartService {
 			for (Order param : params) {
 				if (param.getDelvFeeCd().equals(delv.getDelvFeeCd())) {
 					compCnt++;
-					if("N".equals(param.getSoldoutYn())) {
+					if("N".equals(param.getSoldoutYn()) && "Y".equals(param.getOrdCanYn())) {
 						delv.setCompSumPrice(delv.getCompSumPrice() + param.getCurrPrice());
 						log.info("CHECK CURR_PRICE :::: {} / {}", param.getCartSq(), param.getCurrPrice());
 					}
@@ -681,7 +681,7 @@ public class TsfCartService {
 
 			// 자사 상품 가격 계산
 			if("WMS".equals(param.getDelvFeeCd())) {
-				if("N".equals(param.getSoldoutYn())) {
+				if("N".equals(param.getSoldoutYn()) && "Y".equals(param.getOrdCanYn())) {
 					wmsSumPrice = wmsSumPrice + param.getCurrPrice();
 					wmsMinOrdAmt = param.getMinOrdAmt();
 					wmsDelvFee = param.getDelvFee();
@@ -711,7 +711,7 @@ public class TsfCartService {
 		int notSoldoutCnt = 0;
 
 		for(Order cart : cartGoodsList) {
-			if("N".equals(cart.getSoldoutYn())) {
+			if("N".equals(cart.getSoldoutYn()) && "Y".equals(cart.getOrdCanYn())) {
 				notSoldoutCnt++;
 				// 상품 금액 합계
 				order.setSumOrdAmt(order.getSumOrdAmt() + cart.getCurrPrice());
@@ -807,19 +807,13 @@ public class TsfCartService {
 			cart.getCartCompsList().add(new Cart());
 
 			for(Cart comp : cart.getCartCompsList()) {
-				//if("Y".equals(cart.getSelfGoodsYn())) {
-					comp.setCartColorList(cartDao.selectCartGoodsColorList(cart));
-
-				//	if("Y".equals(cart.getSelfGoodsYn())) {		// 자사 상품은 TB_GOODS_IMG.COLOR_CD = TB_OPTION.OPT_CD1
-						for(Cart color : comp.getCartColorList()) {
-							color.setCartSq(cart.getCartSq());
-							color.setCartImgList(cartDao.selectCartSelfGoodsOptionImgList(color));
-							color.setCartSizeList(cartDao.selectCartGoodsSizeList(color));
-						}
-				//	}
-				//} else {
-				//	comp.setCartColorList(cartDao.selectCartGoodsSizeList(cart));
-				//}
+				comp.setCartColorList(cartDao.selectCartGoodsColorList(cart));
+
+				for(Cart color : comp.getCartColorList()) {
+					color.setCartSq(cart.getCartSq());
+					color.setCartImgList(cartDao.selectCartSelfGoodsOptionImgList(color));
+					color.setCartSizeList(cartDao.selectCartGoodsSizeList(color));
+				}
 			}
 
 			if(!"Y".equals(cart.getSelfGoodsYn())) {			// 입점 상품은 TB_GOODS_IMG.COLOR_CD = TB_GOODS.MAIN_COLOR_CD

+ 36 - 5
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -109,11 +109,42 @@ public class TsfCouponService {
 			return cpn;
 		}
 
-		Coupon dtData = couponDao.getSerialCpnUseInfo(cpn);
-		cpn.setAvailStdtTime(cpn.getAvailStdt());
-		cpn.setAvailEddtTime(cpn.getAvailEddt());
-		cpn.setAvailStdt(dtData.getAvailStdt());
-		cpn.setAvailEddt(dtData.getAvailEddt());
+		Coupon cpnInfo = couponDao.getSerialCpnUseInfo(cpn);
+
+		cpn.setAvailStdtTime(cpnInfo.getAvailStdtTime());
+		cpn.setAvailEddtTime(cpnInfo.getAvailEddtTime());
+		cpn.setAvailStdt(cpnInfo.getAvailStdt());
+		cpn.setAvailEddt(cpnInfo.getAvailEddt());
+		cpn.setBuyLimitAmt(cpnInfo.getBuyLimitAmt());
+		cpn.setMaxDcAmt(cpnInfo.getMaxDcAmt());
+		cpn.setCpnNm(cpnInfo.getCpnNm());
+		cpn.setCustPubLimitQty(cpnInfo.getCustPubLimitQty());
+		cpn.setApplyScope(cpnInfo.getApplyScope());
+
+		// 쿠폰 적용 대상조건명 및 조건별 수량 조회
+		if(TscConstants.ApplyScope.INDIVIDUAL.value().equals(cpn.getApplyScope())) {
+			Collection<Coupon> cpnRefInfo = couponDao.getCpnRefName(cpn);
+
+			for(Coupon ref : cpnRefInfo) {
+				if(TscConstants.CpnTarget.GOODS.value().equals(ref.getCpnTarget())) {
+					cpn.setRefGoodsNm(ref.getRefVal());
+					cpn.setRefGoodsCnt(ref.getCnt());
+				} else if(TscConstants.CpnTarget.BRAND.value().equals(ref.getCpnTarget())) {
+					if(ref.getCnt() > 1) {
+						cpn.setRefBrandNm(ref.getRefVal() + " / " + ref.getSecondRefVal());
+					} else {
+						cpn.setRefBrandNm(ref.getRefVal());
+					}
+					cpn.setRefBrandCnt(ref.getCnt());
+				} else if(TscConstants.CpnTarget.COMP.value().equals(ref.getCpnTarget())) {
+					cpn.setRefSupplyCompNm(ref.getRefVal());
+					cpn.setRefSupplyCompCnt(ref.getCnt());
+				} else if(TscConstants.CpnTarget.CATE.value().equals(ref.getCpnTarget())) {
+					cpn.setRefCateNm(ref.getRefVal());
+					cpn.setRefCateCnt(ref.getCnt());
+				}
+			}
+		}
 
 		// 2021.03.03 장바구니 시퀀스 없음 jsh77b 
 		// 장바구니쿠폰 토탈 할인 금액 계산

+ 0 - 3
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -126,9 +126,6 @@ public class TsfCartController extends TsfBaseController {
 			param.setShotDelvDt(format.format(time));
 		}
 
-		// TODO 테스트 후 삭제할것.
-		// param.setShotCanYn("Y");
-
 		if(param.getShotDelvUseYn() == null) {
 			param.setShotDelvUseYn(param.getShotCanYn());
 		}

+ 50 - 29
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -516,6 +516,7 @@
 		     , Z.MIN_ORD_AMT
 		     , Z.DELV_FEE
 			 , Z.CART_DELV_FEE_CD
+		     , Z.ORD_CAN_YN
 			 , (Z.CURR_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS CURR_PRICE
 			 , (Z.LIST_PRICE + SUM(Z.OPT_ADD_PRICE)) * Z.GOODS_QTY AS LIST_PRICE
 			 , CASE WHEN Z.SOLDOUT_YN = 'N' AND Z.CUST_TODAY_ORD = 0 AND Z.NOCUST_TODAY_ORD = 0 THEN 'N' ELSE 'Y' END AS SOLDOUT_YN
@@ -535,21 +536,17 @@
 		             , G.GOODS_TYPE
 		             , G.SUPPLY_COMP_CD
 		             , G.GOODS_NM
-		             , G.BRAND_CD
 		             , 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
 		             , BR.BRAND_ENM
 		             , BR.BRAND_KNM
-		             , CT.CUST_GRADE
 		             , DFP.MIN_ORD_AMT
 		             , DFP.DELV_FEE
-		             , CASE WHEN GOG.CUST_GRADE IS NOT NULL AND GOG.CUST_GRADE = IFNULL(CT.CUST_GRADE, '') THEN GOG.CUST_GRADE
-		                    WHEN GOG.CUST_GRADE IS NOT NULL THEN 'NO'
-		                    ELSE CT.CUST_GRADE END AS ORDER_GRADE
 		             , (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
 		             , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CD.ITEM_CD) AS ITEM_NM
 		             , CASE WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
@@ -569,9 +566,6 @@
 		                                            AND    OD.GOODS_CD = C.GOODS_CD
 		                                            AND    DATE(ORD_DT) = CURRENT_DATE) + C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END CUST_TODAY_ORD
 		             , CASE WHEN C.CUST_NO = 0 AND C.GOODS_QTY > G.DAY_MAX_ORD_QTY THEN 1 ELSE 0 END AS NOCUST_TODAY_ORD
-		             /*, CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
-		            		ELSE (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM*/
-		             /* , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM */
 		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT SYS_IMG_NM FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' LIMIT 1)
 		            		ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(G.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y' LIMIT 1) END AS SYS_IMG_NM
 		        FROM   TB_CART C
@@ -586,37 +580,73 @@
 		        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
 		        INNER  JOIN (   SELECT A.CART_SQ
 		                             , MAX(A.SOLDOUT_YN) AS SOLDOUT_YN
+		                             , MAX(A.ORD_CAN_YN) AS ORD_CAN_YN
 		                        FROM   (SELECT C.CART_SQ
-		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY * GC.QTY THEN 'N'
+		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY * GC.QTY AND COMP_GOODS.GOODS_STAT != 'G008_70' AND G.GOODS_STAT != 'G008_70' THEN 'N'
 		                                            ELSE 'Y' END AS SOLDOUT_YN
+		                                     , CASE WHEN G.GOODS_STAT != 'G008_90' AND G.GOODS_STAT != 'G008_70' AND COMP_GOODS.GOODS_STAT != 'G008_70' AND COMP_GOODS.GOODS_STAT != 'G008_90' THEN 'N'
+		                                            ELSE 'Y' END AS ORD_CAN_YN
 		                                FROM   TB_CART C
 		                                INNER  JOIN TB_CART_DETAIL CD
 		                                ON     C.CART_SQ = CD.CART_SQ
 		                                INNER  JOIN TB_GOODS G
 		                                ON     C.GOODS_CD = G.GOODS_CD
+		                                INNER  JOIN TB_GOODS COMP_GOODS
+		                                ON     CD.ITEM_CD = COMP_GOODS.GOODS_CD
 		                                INNER  JOIN TB_GOODS_COMPOSE GC
 		                                ON     C.GOODS_CD = GC.GOODS_CD
 		                                AND    CD.ITEM_CD = GC.COMPS_GOODS_CD
 		                                INNER  JOIN VW_STOCK VS
 		                                ON     CD.ITEM_CD = VS.GOODS_CD
-		                                AND	CD.OPT_CD = VS.OPT_CD
+		                                AND    CD.OPT_CD = VS.OPT_CD
 		                                WHERE  1=1
-		                                AND	C.CART_GB = 'G026_BC'
-		                                AND	G.GOODS_STAT = 'G008_90'
-		                                AND	G.SELF_MALL_YN = 'Y'
+		                                AND    C.CART_GB = 'G026_BC'
+		                                AND    G.SELF_MALL_YN = 'Y'
 		                                <if test="custNo == 0">
-		                                AND	C.CUST_NO = 0
-		                                AND	C.JSESSION_ID = #{jsessionId}
+		                                AND    C.CUST_NO = 0
+		                                AND    C.JSESSION_ID = #{jsessionId}
 		                                </if>
 		                                <if test="custNo != 0">
-		                                AND	C.CUST_NO = #{custNo}
+		                                AND    C.CUST_NO = #{custNo}
 		                                </if>
 		                                UNION ALL
 		                                SELECT C.CART_SQ
-		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY THEN 'N'
+		                                     , CASE WHEN VS.SOLDOUT_YN = 'N' AND VS.CURR_STOCK_QTY >= C.GOODS_QTY AND G.GOODS_STAT != 'G008_70' THEN 'N'
 		                                            ELSE 'Y' END AS SOLDOUT_YN
+		                                     , CASE WHEN G.GOODS_STAT != 'G008_90' AND G.GOODS_STAT != 'G008_70' THEN 'N'
+		                                            ELSE 'Y' END AS ORD_CAN_YN
 		                                FROM   TB_CART C
 		                                INNER  JOIN TB_CART_DETAIL CD
 		                                ON     C.CART_SQ = CD.CART_SQ
@@ -627,7 +657,6 @@
 		                                AND    CD.OPT_CD = VS.OPT_CD
 		                                WHERE  1=1
 		                                AND    C.CART_GB = 'G026_BC'
-		                                AND    G.GOODS_STAT = 'G008_90'
 		                                AND    G.SELF_MALL_YN = 'Y'
 		                                <if test="custNo == 0">
 		                                AND    C.CUST_NO = 0
@@ -640,14 +669,10 @@
 		                        GROUP  BY  A.CART_SQ
 		               ) STOCK
 		        ON     C.CART_SQ = STOCK.CART_SQ
-		        LEFT   OUTER JOIN TB_CUSTOMER CT
-		        ON     C.CUST_NO = CT.CUST_NO
-		        LEFT   OUTER JOIN TB_GOODS_ORDER_GRADE GOG
-		        ON     G.GOODS_CD = GOG.GOODS_CD
 		        LEFT   OUTER JOIN TB_GOODS_QUICK_DELEVERY_SKIP GQDS
 		        ON     G.GOODS_CD = GQDS.GOODS_CD
 		        WHERE  G.SELF_MALL_YN = 'Y'
-		        AND    G.GOODS_STAT = 'G008_90'
+		        AND    G.GOODS_STAT <![CDATA[ <> ]]> 'G008_99'
 		        <if test="custNo == 0">
 		        AND    C.CUST_NO = 0
 		        AND    C.JSESSION_ID = #{jsessionId}
@@ -663,12 +688,6 @@
 		        </if>
 		        ORDER BY G.SUPPLY_COMP_CD ) Z
 		WHERE  1=1
-		<if test="custNo != 0">
-		AND    Z.ORDER_GRADE = Z.CUST_GRADE
-		</if>
-		<if test="custNo == 0">
-		AND    Z.ORDER_GRADE IS NULL
-		</if>
 		GROUP  BY Z.CART_SQ
 		     , Z.GOODS_CD
 		     , Z.GOODS_QTY
@@ -684,6 +703,7 @@
 		     , Z.DELV_FEE
 		     , Z.CART_DELV_FEE_CD
 		     , Z.CURR_PRICE
+		     , Z.ORD_CAN_YN
 		     , Z.PNT_PRATE
 		     , Z.PNT_MRATE
 		     , SYS_IMG_NM
@@ -869,6 +889,7 @@
 			 , CA.CART_SQ
 			 , CA.GOODS_QTY
 			 , G.SELF_GOODS_YN
+		     , G.GOODS_STAT
 		FROM   TB_CART CA
 		INNER  JOIN TB_GOODS G
 		ON     CA.GOODS_CD = G.GOODS_CD

+ 43 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -18,17 +18,53 @@
 	<select id="getSerialCpnUseInfo" parameterType="Coupon" resultType="Coupon">
 		/* TsfCoupon.getSerialCpnUseInfo */
 		SELECT CC.CPN_ID
-			 , DATE_FORMAT(CC.USED_DT, '%Y-%m-%d') AS USED_DT
-			 , CASE WHEN NOW() BETWEEN CC.AVAIL_STDT AND CC.AVAIL_EDDT THEN 'Y'
-					ELSE 'N' END AS AVAIL_YN
-			 , DATE_FORMAT(CC.AVAIL_STDT, '%Y.%m.%d') AS AVAIL_STDT
-			 , DATE_FORMAT(CC.AVAIL_EDDT, '%Y.%m.%d') AS AVAIL_EDDT
-		FROM   TB_CUST_COUPON CC
+		     , DATE_FORMAT(CC.USED_DT, '%Y-%m-%d') AS USED_DT
+		     , CASE WHEN NOW() BETWEEN CC.AVAIL_STDT AND CC.AVAIL_EDDT THEN 'Y'
+		            ELSE 'N' END AS AVAIL_YN
+		     , DATE_FORMAT(CC.AVAIL_STDT, '%Y.%m.%d') AS AVAIL_STDT
+		     , DATE_FORMAT(CC.AVAIL_EDDT, '%Y.%m.%d') AS AVAIL_EDDT
+		     , CP.BUY_LIMIT_AMT
+		     , CP.MAX_DC_AMT
+		     , CP.CPN_NM
+		     , CP.CUST_PUB_LIMIT_QTY
+		     , CP.APPLY_SCOPE
+		     , DATE_FORMAT(CC.AVAIL_STDT, '%Y.%m.%d %H:%i') AS AVAIL_STDT_TIME
+		     , DATE_FORMAT(CC.AVAIL_EDDT, '%Y.%m.%d %H:%i') AS AVAIL_EDDT_TIME
+		FROM   TB_COUPON CP
+		INNER  JOIN TB_CUST_COUPON CC
+		ON     CC.CPN_ID = CP.CPN_ID
 		WHERE  1=1
 		AND    CC.CPN_ID = #{cpnId}
 		AND    CC.CUST_NO = #{custNo}
 	</select>
 
+	<!-- 쿠폰 적용 대상조건명 및 조건별 수량 조회 -->
+	<select id="getCpnRefName" parameterType="Coupon" resultType="Coupon">
+		/* TsfCoupon.getCpnRefName */
+		SELECT A.CPN_ID
+		     , A.CPN_TARGET
+		     , MIN(REF_VAL) AS REF_VAL
+		     , MAX(REF_VAL) AS SECOND_REF_VAL
+		     , COUNT(A.CPN_ID) AS CNT
+		FROM   (SELECT CR.CPN_ID
+		             , CR.CPN_TARGET
+		             , CASE WHEN CR.CPN_TARGET = 'G260_10' THEN (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CR.REF_VAL AND GOODS_STAT = 'G008_90')
+		                    WHEN CR.CPN_TARGET = 'G260_11' THEN CASE WHEN (SELECT COUNT(1) FROM VW_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL) > 0 THEN (SELECT CATE1_NM FROM VW_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL LIMIT 1)
+		                                                             WHEN (SELECT COUNT(1) FROM VW_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM VW_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL LIMIT 1)
+		                                                             WHEN (SELECT COUNT(1) FROM VW_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM VW_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL LIMIT 1)
+		                                                             WHEN (SELECT COUNT(1) FROM VW_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL) > 0 THEN (SELECT CONCAT(CATE1_NM, ' > ', CATE2_NM) FROM VW_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL LIMIT 1)
+		                                                             END    <!-- 카테고리명은 대 > 중 카테고리까지만 노출 20210330 정지혜과장님 확인 -->
+		                    WHEN CR.CPN_TARGET = 'G260_12' THEN (SELECT BRAND_KNM FROM TB_BRAND WHERE BRAND_CD = CR.REF_VAL AND USE_YN = 'Y')
+		                    WHEN CR.CPN_TARGET = 'G260_13' THEN (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = CR.REF_VAL AND USE_YN = 'Y' AND SUPPLY_STAT = 'G010_30')
+		               END AS REF_VAL
+		        FROM   TB_COUPON_REFVAL CR
+		        WHERE  1=1
+		        AND    CPN_TARGET != 'G260_14'
+		        AND    CPN_ID = #{cpnId}) A
+		GROUP  BY A.CPN_ID
+		        , A.CPN_TARGET
+	</select>
+
 	<!-- 입력된 시리얼 쿠폰 정보 조회 -->
 	<select id="getSearchSerialCpnInfo" parameterType="Coupon" resultType="Coupon">
 		/* TsfCoupon.getSearchSerialCpnInfo : 입력된 시리얼 쿠폰 정보 조회 */
@@ -52,6 +88,7 @@
 		WHERE  1=1
 		AND    RC.RD_CPN_NM = #{rdCpnNm}
 		AND    NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
+		AND    CP.CPN_STAT = 'G232_11'
 		ORDER  BY RC.CPN_ID
 		<!-- 랜덤쿠폰은 RD_CPN_NM이 1개이나, 시리얼 쿠폰은 다수개이므로 하나의 정보만 조회 -->
 		LIMIT  1

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

@@ -236,7 +236,7 @@
 						</div>
 						<div class="number_count">
 							<span class="minus"><em class="sr-only">감소</em></span>
-							<input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}" />
+							<input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}" readonly/>
 							<span class="plus"><em class="sr-only">추가</em></span>
 						</div>
 					</div>

+ 60 - 21
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -90,13 +90,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>
@@ -140,7 +141,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">
@@ -158,10 +160,10 @@
 												</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')}">
@@ -505,21 +507,21 @@
 									<span>9,999,999</span>원 이상 구매 시 최대 <span>9,999,999</span>원 할인
 								</dd>
 							</div>
-							<div>
+							<div class="cartCpnPubLimitQty">
 								<dt>발급수량</dt>
-								<dd>
+								<dd class="custPubLimitQtyTxt">
 									1인 최대<span>9,999</span>매
 								</dd>
 							</div>
 							<div>
 								<dt>유효기간</dt>
-								<dd>
+								<dd class="availDt">
 									<span>2020.09.21 23:59</span>&nbsp;~&nbsp;<span>2020.09.21 23:59</span>
 								</dd>
 							</div>
 							<div>
 								<dt>대상조건</dt>
-								<dd>
+								<dd class="refVal">
 									카테고리명 / 브랜드명 / 상품명 등 (일부 품목 제외)
 								</dd>
 							</div>
@@ -825,30 +827,67 @@
 				data : jsonData,
 				success : function(result) {
 					if(result.serialCpnInfo.result == "SUCCESS") {
+						let cpnInfo = result.serialCpnInfo;
 						$("#cartListForm .area_salecoupon .coupon_box").show();
 
 						// 합계 금액
-						$("#cartListForm #sumRealPayAmt").text(Number(sumRealPayAmt - result.serialCpnInfo.dcAmt).toLocaleString());
-						$("#cartListForm #totDcAmt").text(Number(totDcAmt - result.serialCpnInfo.dcAmt).toLocaleString());
+						$("#cartListForm #sumRealPayAmt").text(Number(sumRealPayAmt - cpnInfo.dcAmt).toLocaleString());
+						$("#cartListForm #totDcAmt").text(Number(totDcAmt - cpnInfo.dcAmt).toLocaleString());
 
 						// 쿠폰 정보
-						$("#cartListForm .area_salecoupon .cp_name").text(result.serialCpnInfo.cpnNm);
-						$("#cartListForm .area_salecoupon .cp_condition").html(result.serialCpnInfo.cpnDesc + "<span><em class='tag'>1장 보유</em></span>");
-						$("#cartListForm .area_salecoupon .availStdt").text(result.serialCpnInfo.availStdt);
-						$("#cartListForm .area_salecoupon .availEddt").text(result.serialCpnInfo.availEddt);
-						if (result.serialCpnInfo.dcWay == "G240_10") {
-							$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + Number(result.serialCpnInfo.dcVal).toLocaleString() + "</em> 원");
-						} else if (result.serialCpnInfo.dcWay == "G240_11") {
-							$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + result.serialCpnInfo.dcVal + "%</em>");
+						$("#cartListForm .area_salecoupon .cp_name").text(cpnInfo.cpnNm);
+						$("#cartListForm .area_salecoupon .cp_condition").html(cpnInfo.cpnDesc + "<span><em class='tag'>1장 보유</em></span>");
+						$("#cartListForm .area_salecoupon .availStdt").text(cpnInfo.availStdt);
+						$("#cartListForm .area_salecoupon .availEddt").text(cpnInfo.availEddt);
+						if (cpnInfo.dcWay == "G240_10") {
+							$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + Number(cpnInfo.dcVal).toLocaleString() + "</em> 원");
+						} else if (cpnInfo.dcWay == "G240_11") {
+							$("#cartListForm .area_salecoupon .cp_dc_val").html("<em>" + cpnInfo.dcVal + "%</em>");
 						}
 
+						let conditionComment = "", refValComment = "";
+
+						if(cpnInfo.buyLimitAmt > 0) { conditionComment += "<span>" + Number(cpnInfo.buyLimitAmt).toLocaleString() + "</span>원 이상 구매 시 "; }
+						if(cpnInfo.maxDcAmt > 0) { conditionComment += "최대 <span>" +  Number(cpnInfo.maxDcAmt).toLocaleString() + "</span>원 할인"; }
 
-						$(".cartCpnInfoModal .modal-header").html('<h5 class="modal-title" id="couponInfoLabel">' + result.serialCpnInfo.cpnNm + '</h5>');
-						$(".cartCpnInfoModal .cartCpnCondition").html('<h5 class="modal-title" id="couponInfoLabel">' + result.serialCpnInfo.cpnNm + '</h5>');
+						if("A" == cpnInfo.applyScope) {
+							refValComment += "전체<br/>";
+						} else {
+							if(cpnInfo.refCateCnt > 0) {
+								refValComment += cpnInfo.refCateNm + " 카테고리";
+								if(cpnInfo.refCateCnt > 1) { refValComment += " 外"; }
+								refValComment += "<br/>";
+							}
+							if(cpnInfo.refSupplyCompCnt > 0) {
+								refValComment += cpnInfo.refSupplyCompNm + " 업체";
+								if(cpnInfo.refSupplyCompCnt > 1) { refValComment += " 外"; }
+								refValComment += "<br/>";
+							}
+							if(cpnInfo.refBrandCnt > 0) {
+								refValComment += cpnInfo.refBrandNm;
+								refValComment += " 브랜드";
+								if(cpnInfo.refBrandCnt > 2) { refValComment += " 外"; }
+								refValComment += "<br/>";
+							}
+							if(cpnInfo.refGoodsCnt > 0) {
+								refValComment += cpnInfo.refGoodsNm + " 상품";
+								if(cpnInfo.refGoodsCnt > 1) { refValComment += " 外"; }
+								refValComment += "<br/>";
+							}
+						}
+						refValComment += "일부상품, 특가상품 제외";
 
+						$(".cartCpnInfoModal .modal-header").html('<h5 class="modal-title" id="couponInfoLabel">' + cpnInfo.cpnNm + '</h5>');
 
+						if(conditionComment != "") { $(".cartCpnInfoModal .cpnCondition").html(conditionComment); }
+						else { $(".cartCpnInfoModal .cartCpnCondition").hide(); }
 
+						if(cpnInfo.custPubLimitQty > 0) { $(".cartCpnInfoModal .custPubLimitQtyTxt").html("1인 최대 <span>" + Number(cpnInfo.custPubLimitQty).toLocaleString() + "</span>매"); }
+						else { $(".cartCpnInfoModal .cartCpnPubLimitQty").hide(); }
 
+						$(".cartCpnInfoModal .availDt").html('<span>' + cpnInfo.availStdtTime + "</span> ~ <span>" + cpnInfo.availEddtTime + "</span>");
+						$(".cartCpnInfoModal .refVal").html(refValComment);
+						alert("1 :::: " + refValComment);
 					} else {
 						mcxDialog.alert(result.serialCpnInfo.result);
 					}