Przeglądaj źródła

이태영 - 20210427 장바구니 배송비SAVE 상품 리스트 팝업 개발 중

xodud1202 5 lat temu
rodzic
commit
15347b7390

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

@@ -355,4 +355,12 @@ public interface TsfGoodsDao {
 	 */
 	Collection<Goods> getContentsCategoryNewGoodsList(Cate4Srch cate);
 
+	/**
+	 * 배송비 SAVE 상품 조회
+	 * @param cate - 카테고리 정보
+	 * @return
+	 * @author xodud1202
+	 * @date 2021. 04. 27
+	 */
+	Collection<Goods> getDelvFeeSaveGoodsList(Goods param);
 }

+ 32 - 4
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -16,18 +16,16 @@ import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.dao.TscEnvsetDao;
 import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.biz.service.TscOrderService;
-import com.style24.core.support.annotation.ShopDs;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.front.biz.dao.TsfCartDao;
+import com.style24.front.biz.dao.TsfGoodsDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
-import com.style24.persistence.domain.Envset;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Order;
-import com.style24.persistence.domain.Payment;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -44,6 +42,9 @@ public class TsfCartService {
 	@Autowired
 	private TsfCartDao cartDao;
 
+	@Autowired
+	private TsfGoodsDao goodsDao;
+
 	@Autowired
 	private TsfGoodsService goodsService;
 
@@ -799,9 +800,9 @@ public class TsfCartService {
 			if(lastCompCheck != null) {
 				// 한 업체의 마지막 상품 체크
 				lastCompCheck.setAddDelvFeeYn("Y");
-
 				// 배송 상품 존재 여부
 				lastCompCheck.setDelvYn(delvYn);
+				// 배송상품 금액차이
 			}
 		}
 
@@ -818,6 +819,8 @@ public class TsfCartService {
 					} else if (TscConstants.DelvFeeCrite.NORMAL.value().equals(delv.getDelvFeeCrite()) && delv.getCompSumPrice() > delv.getMinOrdAmt()) {
 						param.setDelvFee(0);
 					} else {
+						param.setCompSumPrice(delv.getCompSumPrice());
+						param.setMinOrdAmt(delv.getMinOrdAmt());
 						param.setDelvFee(delv.getDelvFee());
 					}
 				}
@@ -839,6 +842,8 @@ public class TsfCartService {
 				order.setWmsDelvFee(0);
 			} else {
 				order.setWmsDelvFee(wmsDelvFee);
+				order.setCompSumPrice(wmsSumPrice);
+				order.setMinOrdAmt(wmsMinOrdAmt);
 			}
 
 			// 배송 상품 존재 여부
@@ -932,6 +937,29 @@ public class TsfCartService {
 		}
 	}
 
+	public Collection<Goods> getDelvFeeSaveGoodsList(Order param) {
+		Goods goods = new Goods();
+		if(StringUtils.isEmpty(param.getDelvFeeCd())) {
+			return null;
+		}
+
+		if("WMS".equals(param.getDelvFeeCd())) {
+			goods.setSelfGoodsYn("Y");
+		} else {
+			goods.setDelvFeeCd(param.getDelvFeeCd());
+		}
+
+		goods.setPrice(param.getDelvFeeSaveGoodsAmt());
+
+		if(TsfSession.isLogin()) {
+			goods.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			goods.setCustNo(0);
+		}
+
+		return goodsDao.getDelvFeeSaveGoodsList(goods);
+	}
+
 	public Cart getCartGoodsInfo(Cart param) {
 		// Collection<Cart> result = new ArrayList<Cart>();
 		/* cart.add(cartDao.selectCartGoodsInfo(param)); */

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

@@ -151,6 +151,15 @@ public class TsfCartController extends TsfBaseController {
 		return super.getDeviceViewName("cart/CartListAjaxForm");
 	}
 
+	@PostMapping("/add/goods/list")
+	public ModelAndView selectCartAddGoodsList(Order param, Model model) {
+		log.info("CHECK PARAM ::::: {} / {}", param.getDelvFeeCd(), param.getDelvFeeSaveGoodsAmt());
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("goodsList", cartService.getDelvFeeSaveGoodsList(param));
+		mav.setViewName(super.getDeviceViewName("cart/CartAddGoodsPopup"));
+		return mav;
+	}
+
 	/**
 	 * 장바구니 로그인 정보 조회
 	 * @param param

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

@@ -31,6 +31,7 @@ public class Goods extends TscBaseDomain {
 	private String goodsType;		//상품타입(공통코드G056)
 	private int listPrice;		//정상가(최초판매가)
 	private int currPrice;		//현재판매가
+	private int price;			// 금액
 	private String priceUpdDt;		//가격변경일시
 	private float dcRate;		//할인율
 	private int pntAmt;				// 적립금

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

@@ -561,8 +561,8 @@
 		                                            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 MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = CD.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
-		            		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') END AS SYS_IMG_NM
+		             , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(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
 		        INNER  JOIN TB_CART_DETAIL CD
 		        ON     C.CART_SQ = CD.CART_SQ

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

@@ -1426,6 +1426,45 @@
 		</if>
 	</select>
 
-
+	<!-- 배송비 SAVE 상품 조회 -->
+	<select id="getDelvFeeSaveGoodsList" parameterType="Goods" resultType="Goods">
+		/* TsfGoods.getDelvFeeSaveGoodsList : 배송비 SAVE 상품 조회 */
+		SELECT A.GOODS_CD
+		     , A.CURR_PRICE
+		     , A.PRICE
+		     , ROUND((((A.PRICE / A.CURR_PRICE) - 1) * 100) * - 1, 0) AS DC_RATE
+		     , A.BRAND_NM
+		     , A.SYS_IMG_NM
+		FROM (SELECT G.GOODS_CD
+		           , CASE WHEN G.LIST_PRICE <![CDATA[ < ]]> G.CURR_PRICE THEN G.LIST_PRICE ELSE G.CURR_PRICE END AS CURR_PRICE
+		           , FN_GET_APPLY_CPN1_PRICE(G.GOODS_CD, #{frontGb}) AS PRICE
+		           , G.MAIN_COLOR_CD
+		           , (SELECT BRAND_ENM FROM TB_BRAND WHERE BRAND_CD = G.BRAND_CD) AS BRAND_NM
+		           , G.GOODS_TYPE
+		           , G.SELF_GOODS_YN
+		           , CASE WHEN G.GOODS_TYPE != 'G056_S' AND G.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(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)
+		                  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_GOODS G
+		      INNER JOIN (SELECT VS.GOODS_CD
+		                  FROM   VW_STOCK VS
+		                  WHERE  VS.SOLDOUT_YN = 'N'
+		                  AND    VS.CURR_STOCK_QTY > 0
+		                  GROUP  BY VS.GOODS_CD ) VS
+		      ON    G.GOODS_CD = VS.GOODS_CD
+		      WHERE 1=1
+		      AND G.GOODS_STAT = 'G008_90'
+		      AND G.GOODS_TYPE = 'G056_N'
+		      AND G.SELF_MALL_YN = 'Y'
+		      AND G.MIN_ORD_QTY = 1
+		      AND G.CURR_PRICE BETWEEN ${price} AND ${price} + 10000
+		      <if test="delvFeeCd != null and delvFeeCd != ''">
+		      AND G.DELV_FEE_CD = #{delvFeeCd}
+			  </if>
+		      <if test="selfGoodsYn != null and selfGoodsYn != ''">
+		      AND G.SELF_GOODS_YN = #{selfGoodsYn}
+			  </if>
+		      ORDER  BY ITEMKIND_CD
+		      LIMIT 20) A
+	</select>
 	
 </mapper>

+ 100 - 0
src/main/webapp/WEB-INF/views/web/cart/CartAddGoodsPopupWeb.html

@@ -0,0 +1,100 @@
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!-- 배송비 SAVE 상품보기, 다다익선 할인 상품 보기 -->
+	<div class="modal-dialog" role="document">
+		<div class="modal-content"><div class="modal-header">
+			<h5 class="modal-title" id="dlvrSaveLabel">배송비 SAVE 상품</h5>
+			<input type="text" th:value="${goodsList.size()}" />
+		</div>
+			<div class="modal-body">
+				<div class="pop_cont">
+					<div class="area_slider">
+						<div class="swiper-container swiper-container-initialized swiper-container-horizontal">
+							<div class="swiper-wrapper" style="transform: translate3d(0px, 0px, 0px);">
+								<div class="swiper-slide swiper-slide-active" style="width: 150px; margin-right: 20px;">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class="itemPercent">10%</span>
+												</p>
+											</a>
+											<button type="button" class="btn btn_default btn_sm"><span>쇼핑백 담기</span></button>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide swiper-slide-next" style="width: 150px; margin-right: 20px;">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class=" itemPercent">10%</span>
+												</p>
+											</a>
+											<button type="button" class="btn btn_default btn_sm"><span>쇼핑백 담기</span></button>
+										</div>
+									</div>
+								</div>
+								<div class="swiper-slide" style="width: 150px; margin-right: 20px;">
+									<div class="item_prod">
+										<div class="item_state">
+											<a href="#none" class="itemLink">
+												<div class="itemPic">
+													<img alt="" class="vLHTC pd_img" src="/images/pc/thumb/tmp_pdTogether1.jpg">
+												</div>
+												<p class="itemBrand">BRAND NAME1</p>
+												<div class="itemName">남성 로고 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건 자카드 방풍 패딩 스웨터 가디건</div>
+												<p class="itemPrice">80,100
+													<span class="itemPrice_original">89,000</span>
+													<span class=" itemPercent">10%</span>
+												</p>
+											</a>
+											<button type="button" class="btn btn_default btn_sm"><span>쇼핑백 담기</span></button>
+										</div>
+									</div>
+								</div>
+							</div>
+							<!-- Add Scrollbar -->
+							<div class="swiper-scrollbar"></div>
+							<span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
+					</div>
+					<!-- -->
+				</div>
+			</div>
+
+			<script>
+				//팝업 - 배송비 SAVE 상품보기 > 슬라이드
+				var dlvrSaveSwiper = new Swiper('.dlvrSave_pop .swiper-container', {
+					observer:true,
+					observeParents: true,
+					slidesPerView: 5,
+					spaceBetween: 20,
+					scrollbar: {
+						el: '.dlvr_save_pop .swiper-scrollbar',
+						hide: true,
+					},
+				});
+			</script>
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="dlvrSavePop_close" class="close-modal">Close</a>
+	<!-- // 배송비 SAVE 상품보기, 다다익선 할인 상품 보기 -->
+
+<script th:inline="javascript">
+	$(document).ready(function() {
+
+	});
+</script>
+</html>

+ 4 - 5
src/main/webapp/WEB-INF/views/web/cart/CartListAjaxFormWeb.html

@@ -303,12 +303,11 @@
 						<div class="order_delivery selfGoodsDelv" th:classappend="|delv_${order.cartDelvFeeCd}|">
 							<span class="dlvr_fee delvFeeArea" th:if="${order.wmsDelvFee == 0}">배송비 무료</span>
 							<span class="dlvr_fee delvFeeArea" th:if="${order.wmsDelvFee > 0}">배송비&nbsp;<em th:text="${#numbers.formatInteger(order.wmsDelvFee, 1, 'COMMA')}"></em>원</span>
-							<a href="#" class="btn_popup_save" th:if="${order.wmsDelvFee > 0}">배송비 SAVE 상품 보기</a>
+							<a th:href="|javascript:fnGetDelvFeeSaveGoods('WMS', '${order.minOrdAmt - order.compSumPrice}');|" class="btn_popup_save btn_dlvrSave_pop" th:if="${order.wmsDelvFee > 0}">배송비 SAVE 상품 보기</a>
 						</div>
 					</div>
 				</div>
 
-
 				<div class="sec_part delvList" th:if="${order.delvCartList != null and order.delvCartList.size() > 0}">
 					<h3 class="subH2">업체직배송</h3>
 					<div class="area_part">
@@ -420,7 +419,7 @@
 										<span class="dlvr_fee delvFeeArea" th:if="${cart.delvFee == 0}">배송비 무료</span>
 										<span class="dlvr_fee delvFeeArea" th:if="${cart.delvFee > 0}">배송비&nbsp;<em th:text="${#numbers.formatInteger(cart.delvFee, 1, 'COMMA')}"></em>원</span>
 										<span class="dlvr_shop"><em th:text="${cart.supplyCompNm}"></em>&nbsp;업체직배송</span>
-										<a href="#" class="btn_popup_save" th:if="${cart.delvFee > 0}">배송비 SAVE 상품 보기</a>
+										<a th:href="|javascript:fnGetDelvFeeSaveGoods('${cart.delvFeeCd}', '${cart.minOrdAmt - cart.compSumPrice}');|" class="btn_popup_save btn_dlvrSave_pop" th:if="${cart.delvFee > 0}">배송비 SAVE 상품 보기</a>
 									</div>
 								</div>
 							</div>
@@ -899,7 +898,7 @@
 				if (order.wmsDelvFee == 0) {
 					$(".selfGoodsDelv").html("<span class='dlvr_fee delvFeeArea'>배송비 무료</span>");
 				} else {
-					let html = "<span class='dlvr_fee delvFeeArea'>배송비 <em>" + Number(order.wmsDelvFee).toLocaleString() + "</em> 원</span><a href='#' class='btn_popup_save'>배송비 SAVE 상품 보기</a>";
+					let html = "<span class='dlvr_fee delvFeeArea'>배송비 <em>" + Number(order.wmsDelvFee).toLocaleString() + "</em> 원</span><a href=\"javascript:fnGetDelvFeeSaveGoods('WMS', '" + (order.minOrdAmt - order.compSumPrice) + "');\" class='btn_popup_save btn_dlvrSave_pop'>배송비 SAVE 상품 보기</a>";
 					$(".selfGoodsDelv").html(html);
 				}
 			}
@@ -955,7 +954,7 @@
 						if(delv.delvFee == 0) {
 							$(".delvList").find(".delv_" + delv.delvFeeCd).html("<span class='dlvr_fee delvFeeArea'>배송비 무료</span><span class='dlvr_fee'><em>" + delv.supplyCompNm + "</em> 업체직배송</span>");
 						} else {
-							let html = "<span class='dlvr_fee delvFeeArea'>배송비 <em>" + Number(delv.delvFee).toLocaleString() + "</em>원</span><span class='dlvr_shop'><em>" + delv.supplyCompNm + "</em> 업체직배송</span><a href='#' class='btn_popup_save'>배송비 SAVE 상품 보기</a>";
+							let html = "<span class='dlvr_fee delvFeeArea'>배송비 <em>" + Number(delv.delvFee).toLocaleString() + "</em>원</span><span class='dlvr_shop'><em>" + delv.supplyCompNm + "</em> 업체직배송</span><a href=\"javascript:fnGetDelvFeeSaveGoods('" + delv.delvFeeCd + "','" + (delv.minOrdAmt - delv.compSumPrice) +  "');\" class='btn_popup_save btn_dlvrSave_pop'>배송비 SAVE 상품 보기</a>";
 							$(".delvList").find(".delv_" + delv.delvFeeCd).html(html);
 						}
 					}

+ 26 - 0
src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html

@@ -257,6 +257,9 @@
 	</div>
 	<!-- // container -->
 
+	<!-- 장바구니 배송비 SAVE 상품보기 팝업 -->
+	<div class="modal fade dlvrSave_pop" id="dlvrSavePop" tabindex="-1" role="dialog" aria-labelledby="dlvrSaveLabel" aria-hidden="true" style="display:none;"></div>
+
 <script src="/ux/pc/js/swiper.min.js"></script>
 <link rel="stylesheet" type="text/css" href="/ux/pc/css/swiper.min.css" />
 
@@ -297,6 +300,29 @@
 		$(".cartCpnInfoModal").modal("hide");
 	});
 
+	//팝업 - 다다익선 상품보기
+	$(document).on('click','#btn_moresale_pop',function(e){
+		$("#moresalePop .modal-content").load("popup_moresale.html");
+		// $("#moresalePop").modal("show");
+		return false;
+	});
+	$("#moresalePop_close").click(function() {
+		$("#moresalePop > #dlvrSavePop").modal("hide");
+	});
+
+	//팝업 - 배송비 SAVE 상품보기
+	function fnGetDelvFeeSaveGoods(delvFeeCd, delvFeeSaveGoodsAmt) {
+		var param = new Object();
+		param.delvFeeCd = delvFeeCd;
+		param.delvFeeSaveGoodsAmt = delvFeeSaveGoodsAmt;
+
+		gagajf.ajaxSubmit("/cart/add/goods/list", "html", "dlvrSavePop", param);
+		$("#dlvrSavePop").modal("show");
+	};
+	$("#dlvrSavePop_close").click(function() {
+		$("#dlvrSavePop").modal("hide");
+	});
+
 	//수량조절 이벤트
 	$(document).on('click','.optModify_pop .number_count .minus',function(e){
 		var $input = $(this).parent().find('input');