Ver Fonte

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

card007 há 5 anos atrás
pai
commit
148b5a1bbc

+ 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());
 		}

+ 25 - 15
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -90,12 +90,12 @@ public class TsfOrderController extends TsfBaseController {
 		
 		// 1.1 카트시퀀스가 정보가 없을때 처리 장바구니로 이동 
 		if (order.getCartSqArr() == null) {
-			mav.setViewName("redirect:/cart/list/form");		// 비회원주문서화면
+			mav.setViewName("redirect:/cart/list/form");						// 비회원주문서화면
 			return mav;
 		}
 		
-		mav.addObject("order" 	, order);						// 주문정보
-		mav.addObject("isLogin"	, TsfSession.isLogin());		// 로그인여부
+		mav.addObject("order" 	, order);										// 주문정보
+		mav.addObject("isLogin"	, TsfSession.isLogin());						// 로그인여부
 		mav.setViewName(super.getDeviceViewName("order/OrderNoMember"));		// 비회원주문서화면
 
 		return mav;
@@ -142,6 +142,7 @@ public class TsfOrderController extends TsfBaseController {
 			order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
 		} else {
 			order.setJsessionId(TsfSession.getSessionId());
+			order.setCustNo(0);
 		}
 		
 		// TODO
@@ -296,6 +297,12 @@ public class TsfOrderController extends TsfBaseController {
 					
 						if (deliveryAddrInfo.getRecipZipcode() == null || "".equals(deliveryAddrInfo.getRecipZipcode())) {
 							deliveryAddrInfo.setDelvAddrNm(deliveryAddrInfo.getCustNm());
+							
+							// 회원 배송지명이 없으면 설정
+							if (deliveryAddrInfo.getRecipNm() == null || "".equals(deliveryAddrInfo.getRecipNm())) {
+								deliveryAddrInfo.setRecipNm(deliveryAddrInfo.getCustNm());
+							}
+							
 							deliveryAddrInfo.setRecipZipcode("00000");
 							deliveryAddrInfo.setRecipBaseAddr("기본주소정보없음");
 							deliveryAddrInfo.setRecipDtlAddr("상세주소정보없음");
@@ -304,12 +311,13 @@ public class TsfOrderController extends TsfBaseController {
 						}
 					}
 				}
-				
 				index++;
 			}
 		} else {
 			// 2.1 주문고객 정보조회
-			deliveryAddrInfo.setDelvAddrNm(order.getCustNm());
+			deliveryAddrInfo.setDelvAddrNm(deliveryAddrInfo.getCustNm());
+			deliveryAddrInfo.setRecipNm(order.getCustNm());
+			deliveryAddrInfo.setRecipPhnno(order.getCellPhnno());
 			deliveryAddrInfo.setRecipZipcode(order.getRecipZipcode());
 			deliveryAddrInfo.setRecipBaseAddr(order.getRecipBaseAddr());
 			deliveryAddrInfo.setRecipDtlAddr(order.getRecipDtlAddr());
@@ -317,8 +325,9 @@ public class TsfOrderController extends TsfBaseController {
 		}
 		
 		ModelAndView mav = new ModelAndView();
-		mav.addObject("deliveryAddrInfo", deliveryAddrInfo);						// 배송지정보
-		mav.addObject("order"			, order);									// 파라미터
+		mav.addObject("deliveryAddrInfo"	, deliveryAddrInfo);						// 배송지정보
+		mav.addObject("order"				, order);									// 파라미터
+		mav.addObject("isLogin"				, TsfSession.isLogin());					// 로그인여부
 		mav.setViewName(super.getDeviceViewName("order/OrderDeliveryAddrInfo"));
 		
 		return mav;
@@ -468,10 +477,10 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("cartCpnList"						, cartCpnList);								// 장바구니쿠폰목록
 		mav.addObject("delvCpnList"						, delvCpnList);								// 배송비쿠폰목록
 
-		mav.addObject("orgGoodsSumAmt"					, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계
-		mav.addObject("cpn1DcSumAmt"					, goodsDcAmtMap.get("cpn1DcSumAmt"));		// 즉시할인금액합계
-		mav.addObject("tmtbDcSumAmt"					, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
-		mav.addObject("prePntDcAmt"						, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트사용가능금액
+		mav.addObject("orgGoodsSumAmt"					, goodsDcAmtMap.getInt("orgGoodsSumAmt"));	// 상품금액합계
+		mav.addObject("cpn1DcSumAmt"					, goodsDcAmtMap.getInt("cpn1DcSumAmt"));	// 즉시할인금액합계
+		mav.addObject("tmtbDcSumAmt"					, goodsDcAmtMap.getInt("tmtbDcSumAmt"));	// 다다익선할인금액합계
+		mav.addObject("prePntDcAmt"						, goodsDcAmtMap.getInt("prePntDcAmt"));		// 선포인트사용가능금액
 
 		mav.addObject("rmPntAmt"						, rmPntAmt);								// 고객포인트정보
 		mav.addObject("rmGfcdAmt"						, rmGfcdAmt);								// 고객상품권정보
@@ -558,9 +567,9 @@ public class TsfOrderController extends TsfBaseController {
 		log.info("order.getFreegiftValArr()    ::: {}", order.getFreegiftValArr());
 		log.info("order.getFreegiftSqArr()     ::: {}", order.getFreegiftSqArr());
 		
-		//for(int i = 0 ; i < order.getFreegiftGoodsArr().length ; i++) {
-		//	log.info("order.getFreegiftGoodsArr()  ::: {}", order.getFreegiftGoodsArr()[i]);
-		//}
+		for(int i = 0 ; i < order.getFreegiftGoodsArr().length ; i++) {
+			log.info("order.getFreegiftGoodsArr()  ::: {}", order.getFreegiftGoodsArr()[i]);
+		}
 
 		// 필수 데이터
 		// pgGb = 결제타입, payMeans = 결제수단, ordNo = 주문번호, goodsNm = 상품명, payAmt = 실결제금액, ordNm = 주문자명, ordPhnno = 휴대폰번호, custNo = 고객번호
@@ -799,8 +808,9 @@ public class TsfOrderController extends TsfBaseController {
 	public ModelAndView delvAddrAddPop(Order order) {
 		
 		ModelAndView mav = new ModelAndView();
+		mav.addObject("isLogin"	, TsfSession.isLogin());					// 로그인여부
 		mav.setViewName(super.getDeviceViewName("order/OrderDelvAddrAddPop"));
-		
+
 		return mav;
 	}
 	

+ 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);
 					}

+ 1 - 1
src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html

@@ -872,7 +872,7 @@
 					</div>
 				</div>
 			</div>
-			<a rel="modal:close" id="daumZipcodePop_close" style="margin-top:20px; size:12px; display:inline-block; font-weight:bold; cursor:pointer;">
+			<a id="daumZipcodePop_close" style="margin-top:20px; size:12px; display:inline-block; font-weight:bold; cursor:pointer;">
 				Close
 			</a>
 		</div>

+ 21 - 8
src/main/webapp/WEB-INF/views/web/order/OrderDeliveryAddrInfoWeb.html

@@ -14,6 +14,8 @@
  *******************************************************************************
  -->
 <!-- 배송지정보 -->
+<input type="hidden" name="recipNm" 		th:value="${deliveryAddrInfo.recipNm}"/>
+<input type="hidden" name="recipPhnno" 		th:value="${deliveryAddrInfo.recipPhnno}"/>
 <input type="hidden" name="recipZipcode" 	th:value="${deliveryAddrInfo.recipZipcode}"/>
 <input type="hidden" name="recipBaseAddr" 	th:value="${deliveryAddrInfo.recipBaseAddr}"/>
 <input type="hidden" name="recipDtlAddr" 	th:value="${deliveryAddrInfo.recipDtlAddr}"/>
@@ -36,10 +38,10 @@
 		<dl>
 			<div>
 				<dt>
-					<span class="sr-only">배송지명</span>
+					<span>배송지명</span>
 				</dt>
 				<dd>
-					<th:block th:text="${deliveryAddrInfo.delvAddrNm}"></th:block>
+					<th:block th:text="${deliveryAddrInfo.recipNm}"></th:block>
 					<span class="icon_tag"> 
 						<th:block th:if="${deliveryAddrInfo.defaultYn} == 'Y'">
 							<em class="tag gray">기본 배송지</em>
@@ -52,20 +54,31 @@
 			</div>
 			<div>
 				<dt>
-					<span class="sr-only">배송주소</span>
+					<span>배송주소</span>
 				</dt>
 				<dd>
 					<th:block th:text="${deliveryAddrInfo.recipBaseAddr} + '    ' + ${deliveryAddrInfo.recipDtlAddr}"></th:block>
-					<button type="button" class="btn btn_default btn_sm" id="btn_adrsChange_pop">
-						<span>배송지 변경</span>
-					</button>
+					<!-- 회원 -->
+					<th:block th:if="${isLogin}">
+						<button type="button" class="btn btn_default btn_sm" id="btn_adrsChange_pop">
+							<span>배송지 변경</span>
+						</button><!-- 비회원 -->
+					</th:block>
+					<!-- //회원 -->
+					<!-- 비회원 -->
+					<th:block th:if="!${isLogin}">
+						<button type="button" class="btn btn_default btn_sm" id="btn_adrsAdd_pop_noMember">
+							<span>배송지 변경</span>
+						</button>
+					</th:block>
+					<!-- //비회원 -->
 				</dd>
 			</div>
 			<div>
 				<dt>
-					<span class="sr-only">휴대폰 번호</span>
+					<span>휴대폰 번호</span>
 				</dt>
-				<dd th:text="${deliveryAddrInfo.cellPhnno}"></dd>
+				<dd th:text="${deliveryAddrInfo.recipPhnno}"></dd>
 			</div>
 			<div>
 				<dt>배송요청 사항</dt>

+ 82 - 3
src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrAddPopWeb.html

@@ -83,7 +83,17 @@
 	</div>
 </div>
 <div class="modal-footer">
-	<button type="button" class="btn btn_dark" id="btn_delivery_addr_save"><span>배송지 등록</span></button>
+	<!-- 회원 -->
+	<th:block th:if="${isLogin}">
+		<button type="button" class="btn btn_dark" id="btn_delivery_addr_save"><span>배송지 등록</span></button>
+	</th:block>
+	<!-- //회원 -->
+	
+	<!-- 비회원 -->
+	<th:block th:if="!${isLogin}">
+		<button type="button" class="btn btn_dark" id="btn_sel_delvAddr_noMember"><span>배송지 등록</span></button>
+	</th:block>
+	<!-- //비회원 -->
 </div>
 
 <script th:inline="javascript">
@@ -106,7 +116,6 @@ $(document).ready( function() {
 
 // 우편번호 DAUM을 이용한 우편번호 팝업 레이어
 var fnOpenDaumAddr = function() {
-	
 	let daumZip = new daum.Postcode({
 		oncomplete: function(data) {
 			$('#deliveryAddForm input[name=recipAddr]').val(data.zonecode + '    ' + cfnGetDaumRoadAddr(data));
@@ -117,12 +126,17 @@ var fnOpenDaumAddr = function() {
 		},
 		width: '100%'
 	});
-	
 	cfnOpenDaumAddr(daumZip);
 }
 
 // 배송지등록버튼
 $("#btn_delivery_addr_save").on("click", function(){
+	
+	// 유효성체크
+	if (!deliveryAddFormCheck()){
+		return false;
+	}
+	
 	// 기본배송지여부
 	var defaultYn = "N";
 	if ($("#deliveryAddForm input[name=defaultYn]").is(":checked")) {
@@ -181,6 +195,71 @@ $("#btn_delivery_addr_save").on("click", function(){
 		}
 	});
 });
+
+// 2.2 배송지등록버튼
+$("#btn_sel_delvAddr_noMember").on("click", function(){
+	
+	// 유효성체크
+	if (!deliveryAddFormCheck()){
+		return false;
+	}
+	
+	// 배송지정보 새로고침
+	// 기타사항일때 텍스트 등록
+	var delvMemo = $("#deliveryAddForm input[name=rdi-request1]:checked").parent().find('span').text();
+	if ("기타사항" == delvMemo) {
+		delvMemo = $("input[name=delvMemoText]").val();
+	}
+	
+	jsonObj.custNm 			= $("#deliveryAddForm input[name=recipNm]").val();
+	jsonObj.cellPhnno 		= $("#deliveryAddForm input[name=recipPhnno]").val();
+	jsonObj.recipZipcode 	= $("#deliveryAddForm input[name=recipZipcode]").val();
+	jsonObj.recipBaseAddr 	= $("#deliveryAddForm input[name=recipBaseAddr]").val();
+	jsonObj.recipDtlAddr 	= $("#deliveryAddForm input[name=recipDtlAddr]").val();
+	jsonObj.delvMemo 		= delvMemo;
+	
+	// 배송지정보로드실행
+	deliveryAddrInfoSet(false);
+	
+	// 팝업닫기
+	$(".close-modal").trigger("click");
+});
+
+// 유효성체크 함수
+var deliveryAddFormCheck = function() {
+	// TODO 유효성 체크 추가
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipNm]").val())) {
+		mcxDialog.alert("이름을 입력해주세요.");
+		$('#deliveryAddForm input[name=custNm]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipPhnno]").val())) {
+		mcxDialog.alert("휴대폰번호를 입력해주세요.");
+		$('#deliveryAddForm input[name=recipPhnno]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipZipcode]").val())) {
+		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#deliveryAddForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipBaseAddr]").val())) {
+		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#deliveryAddForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipDtlAddr]").val())) {
+		mcxDialog.alert("상세주소를 입력해주세요.");
+		$('#deliveryAddForm input[name=recipDtlAddr]').focus();
+		return false;
+	}
+	
+	return true;
+} 
 </script>
 
 

+ 38 - 0
src/main/webapp/WEB-INF/views/web/order/OrderDelvAddrModifyPopWeb.html

@@ -27,6 +27,7 @@
 						</div>
 					</div>
 				</div>	
+				<!-- 
 				<div class="form_field">
 					<label class="input_label sr-only">휴대폰 번호</label>
 					<div class="ui_col_12">
@@ -35,6 +36,7 @@
 						</div>
 					</div>
 				</div>
+				 -->
 				<div class="form_field">
 					<label class="input_label sr-only">배송주소</label>
 					<div class="ui_col_12">
@@ -156,6 +158,12 @@ var fnOpenDaumAddr = function() {
 
 // 배송지등록버튼
 $("#btn_delivery_addr_save").on("click", function(){
+	
+	// 유효성체크
+	if (!deliveryAddFormCheck()){
+		return false;
+	}
+	
 	// 기본배송지여부
 	var defaultYn = "N";
 	if ($("#deliveryModifyForm input[name=defaultYn]").is(":checked")) {
@@ -215,4 +223,34 @@ $("#btn_delivery_addr_save").on("click", function(){
 		}
 	});
 });
+
+//유효성체크 함수
+var deliveryAddFormCheck = function() {
+	// TODO 유효성 체크 추가
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipNm]").val())) {
+		mcxDialog.alert("이름을 입력해주세요.");
+		$('#deliveryAddForm input[name=custNm]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipZipcode]").val())) {
+		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#deliveryAddForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipBaseAddr]").val())) {
+		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#deliveryAddForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#deliveryAddForm input[name=recipDtlAddr]").val())) {
+		mcxDialog.alert("상세주소를 입력해주세요.");
+		$('#deliveryAddForm input[name=recipDtlAddr]').focus();
+		return false;
+	}
+	
+	return true;
+} 
 </script>

+ 30 - 9
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -611,20 +611,21 @@ var deliveryAddrInfoSet = function(temp) {
 			gagajf.showProgressbar(true);
 		},
 		success 	: function(result) {
-			
 			$("#deliveryAddrInfo").css("display", "block");
 			$("#deliveryAddrInfo").html(result);
 			
 			// 배송정보설정
-			$(".recipZipcode").text($("input[name='recipZipcode']").val());
-			$(".recipBaseAddr").text($("input[name='recipBaseAddr']").val());
-			$(".recipDtlAddr").text($("input[name='recipDtlAddr']").val());
-			$(".delvMemo").text($("input[name='delvMemo']").val());
-			$(".foreignBuyYn").text($("input[name='foreignBuyYn']").val());
-			$(".orderMadeYn").text($("input[name='orderMadeYn']").val());
+			$(".recipNm").text($("#orderForm input[name='recipNm']").val());
+			$(".recipPhnno").text($("#orderForm input[name='recipPhnno']").val());
+			$(".recipZipcode").text($("#orderForm input[name='recipZipcode']").val());
+			$(".recipBaseAddr").text($("#orderForm input[name='recipBaseAddr']").val());
+			$(".recipDtlAddr").text($("#orderForm input[name='recipDtlAddr']").val());
+			$(".delvMemo").text($("#orderForm input[name='delvMemo']").val());
+			$(".foreignBuyYn").text($("#orderForm input[name='foreignBuyYn']").val());
+			$(".orderMadeYn").text($("#orderForm input[name='orderMadeYn']").val());
 			
 			// 2. 버튼기능구현
-			// 2.1 배송지변경 팝업열기
+			// 2.1 회원 배송지변경 팝업열기
 			$('#btn_adrsChange_pop').on("click", function(){
 				$.ajax( {
 					type		: "POST",
@@ -644,6 +645,26 @@ var deliveryAddrInfoSet = function(temp) {
 				});	
 			});
 			
+			// 2.1 비회원 배송지추가 팝업열기
+			$('#btn_adrsAdd_pop_noMember').on("click", function(){
+				$.ajax( {
+					type		: "POST",
+					url 		: '/order/delvAddrAddPop',
+					data		: JSON.stringify(jsonObj),
+					dataType 	: 'html',
+					beforeSend : function(xhr, settings) {
+						xhr.setRequestHeader("AJAX"			, "true");
+						xhr.setRequestHeader('Accept'		, 'application/json');
+						xhr.setRequestHeader('Content-Type'	, 'application/json');
+						gagajf.showProgressbar(true);
+					},
+					success 	: function(result) {
+						$("#adrsAddPop .modal-dialog .modal-content").html(result);
+						$("#adrsAddPop").modal("show");
+					}
+				});	
+			});
+			
 			// 배송요청사항 팝업열기
 			$("#btn_rqstModify_pop").on("click", function(e){
 				var jsonObj = new Object();
@@ -1995,7 +2016,7 @@ $(document).ready( function() {
 	});
 });
 
-//PG 카카오페이 결제준비 처리
+// PG 카카오페이 결제준비 처리
 var fnKakaoPaymentReady = function() {
 	let nextRedirectUrl = $('#order_info input[name=nextRedirectPcUrl]').val();
 	let option = 'width=420, height=520';

+ 17 - 8
src/main/webapp/WEB-INF/views/web/order/OrderNoMemberWeb.html

@@ -54,7 +54,7 @@
 						<div class="form_field">
 							<label class="input_label sr-only">이름(주문자명)</label>
 							<div class="input_wrap"> 
-								<input type="text" class="form_control" name="custNm" placeholder="이름(주문자명)">
+								<input type="text" class="form_control" name="custNm" placeholder="이름(주문자명)" value="홍길동">
 							</div>
 						</div>	
 						
@@ -63,7 +63,7 @@
 							<label class="input_label sr-only">휴대폰 번호</label>
 							<div class="ui_col_9">
 								<div class="input_wrap"> 
-									<input type="text" class="form_control" name="cellPhnno" placeholder="휴대폰 인증을 해주세요" readonly="readonly" onfocus="this.blur();">
+									<input type="text" class="form_control" name="cellPhnno" placeholder="휴대폰 인증을 해주세요" readonly="readonly" onfocus="this.blur();" value="010-2345-5678">
 								</div>
 							</div>
 							
@@ -82,7 +82,7 @@
 						<div class="form_field">
 							<label class="input_label sr-only">이메일주소</label>
 							<div class="input_wrap"> 
-								<input type="text" class="form_control" name="email" placeholder="이메일주소">
+								<input type="text" class="form_control" name="email" placeholder="이메일주소" value="email@email.com">
 							</div>
 						</div>	
 						
@@ -90,8 +90,8 @@
 							<label class="input_label sr-only">배송주소</label>
 							<div class="ui_col_9">
 								<div class="input_wrap">
-									<input type="hidden" class="form_control" name="recipZipcode" placeholder="우편번호" readonly="readonly">
-									<input type="hidden" class="form_control" name="recipBaseAddr" placeholder="기본주소" readonly="readonly">
+									<input type="hidden" class="form_control" name="recipZipcode" placeholder="우편번호" readonly="readonly" value="12345">
+									<input type="hidden" class="form_control" name="recipBaseAddr" placeholder="기본주소" readonly="readonly" value="인천광역시 서구 마전동 101">
 									<input type="text" class="form_control" name="recipAddr" placeholder="상세주소" readonly="readonly">
 								</div>
 							</div>
@@ -102,7 +102,7 @@
 						<div class="form_field">
 							<label class="input_label sr-only">상세주소</label>
 							<div class="input_wrap"> 
-								<input type="text" class="form_control" name="recipDtlAddr" placeholder="상세주소">
+								<input type="text" class="form_control" name="recipDtlAddr" placeholder="상세주소" value="아파트 202동 202호">
 							</div>
 						</div>
 			
@@ -158,6 +158,7 @@ $(document).ready( function() {
 	
 // 주문하기버튼
 $("#btn_order").on("click", function() {
+	/*
 	// TODO 유효성 체크 추가
 	if (gagajf.isNull($("#orderForm input[name=custNm]").val())) {
 		mcxDialog.alert("이름을 입력해주세요.");
@@ -185,12 +186,19 @@ $("#btn_order").on("click", function() {
 	
 	if (gagajf.isNull($("#orderForm input[name=recipZipcode]").val())) {
 		mcxDialog.alert("배송주소를 입력해주세요.");
+		$('#orderForm input[name=recipAddr]').focus();
 		return false;
 	}
 	
 	if (gagajf.isNull($("#orderForm input[name=recipBaseAddr]").val())) {
 		mcxDialog.alert("배송주소를 입력해주세요.");
-		$('#orderForm input[name=recipBaseAddr]').focus();
+		$('#orderForm input[name=recipAddr]').focus();
+		return false;
+	}
+	
+	if (gagajf.isNull($("#orderForm input[name=recipDtlAddr]").val())) {
+		mcxDialog.alert("상세주소를 입력해주세요.");
+		$('#orderForm input[name=recipDtlAddr]').focus();
 		return false;
 	}
 	
@@ -198,6 +206,7 @@ $("#btn_order").on("click", function() {
 		mcxDialog.alert("비회원 개인정보 수집 이용에 동의해주세요.");
 		return false;
 	}
+	*/
 	
 	// 주문서전송
 	$("#orderForm").submit();
@@ -223,7 +232,7 @@ var fnUpdateAuthInfoCallback = function (result) {
 	$('#orderForm input[name=cellPhnno]').val(result.sMobileNo);
 }
 
-//우편번호 DAUM을 이용한 우편번호 팝업 레이어
+// 우편번호 DAUM을 이용한 우편번호 팝업 레이어
 var fnOpenDaumAddr = function() {
 	let daumZip = new daum.Postcode({
 		oncomplete: function(data) {