Przeglądaj źródła

이태영 - 20210129 중간커밋

xodud1202 5 lat temu
rodzic
commit
c795b4a8ae

+ 20 - 0
src/main/java/com/style24/front/biz/dao/TsfCartDao.java

@@ -1,6 +1,10 @@
 package com.style24.front.biz.dao;
 
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Cart;
+import com.style24.persistence.domain.GoodsStock;
+
+import java.util.List;
 
 /**
  * 장바구니 Dao
@@ -10,5 +14,21 @@ import com.style24.core.support.annotation.ShopDs;
  */
 @ShopDs
 public interface TsfCartDao {
+    /**
+     * 대상상품 존재 장바구니 List 조회
+     * @param Cart
+     * @return
+     * @author xodud1202
+     * @since 2021. 01. 28
+     */
+    List<Cart> getHasGoodsCartList(Cart cart);
 
+    /**
+     * 대상 세트 구성 상품 존재 여부 확인
+     * @param Cart
+     * @return
+     * @author xodud1202
+     * @since 2021. 01. 28
+     */
+    int getCartDetailCnt(Cart cart);
 }

+ 58 - 18
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -1,18 +1,19 @@
 package com.style24.front.biz.service;
 
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
-import com.style24.front.support.env.TsfConstants;
+import com.style24.front.biz.dao.TsfCartDao;
 import com.style24.persistence.domain.Cart;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsStock;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
-import com.style24.front.biz.dao.TsfCartDao;
-
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collection;
+import java.util.List;
+
 /**
  * 장바구니 Service
  *
@@ -36,15 +37,17 @@ public class TsfCartService {
 	 * @param cart
 	 */
 	@Transactional("shopTxnManager")
-	public void saveCartInfo(Cart param) {
-		Cart cart = new Cart();			// 최종 정보가 담길 cart 객체
+	public void saveCartInfo(Collection<Cart> params) {
+		Cart cart = new Cart();
 		// JSESSION_ID 저장
-		param.setJsessionId(TscSession.getSessionId());
+		cart.setJsessionId(TscSession.getSessionId());
 
 		// 로그인 유무 확인 (로그인이 되어 있지 않으면 regNo 를 0으로 장바구니에 저장한다.)
+		cart.setRegNo(0);
+		cart.setUpdNo(0);
 
 		// 상품 정보 확인
-		Goods goods = new Goods();		// 상품 마스터 정보
+		/*Goods goods = new Goods();		// 상품 마스터 정보
 		goods.setGoodsCd(param.getGoodsCd());
 		goods = goodsService.getGoodsInfo(goods);
 		if(goods == null) {
@@ -53,10 +56,13 @@ public class TsfCartService {
 
 		cart.setGoodsCd(goods.getGoodsCd());
 		cart.setProductNo(goods.getProductNo());
-		cart.setProductCode(goods.getProductCode());
+		cart.setProductCode(goods.getProductCode());*/
+
+		// 재고 정보 확인
+
 
 		// 재고 정보 확인
-		if(TsfConstants.GOODS_TYPE.SET.value().equals(goods.getGoodsType())) {		// 장바구니 상품이 세트상품이라면
+		/*if(TscConstants.GOODS_TYPE.SET.value().equals(goods.getGoodsType())) {		// 장바구니 상품이 세트상품이라면
 			if(param.getCompsList() != null && param.getCompsList().size() > 0) {
 				for(int i = 0 ; i < param.getCompsList().size() ; i++) {
 					Cart tCart = param.getCompsList().get(i);
@@ -69,7 +75,7 @@ public class TsfCartService {
 
 					// 구성상품 재고 정보
 					GoodsStock stock = new GoodsStock();
-					stock.setGoodsCd(compsGoodsInfo.getGoodsCd());
+					stock.setGoodsCd(compsGoodsInfo.getCompsGoodsCd());
 					stock.setOptCd(tCart.getOptCd());
 					stock = goodsService.getGoodsStockInfo(stock);
 
@@ -78,7 +84,7 @@ public class TsfCartService {
 					}
 
 					// 세트상품 요청 수량 * 구성상품 필요 수량이 해당 구성수량의 재고보다 많으면
-					if(param.getItemQty() * compsGoodsInfo.getQty() > stock.getCurrStockQty()) {
+					if(param.getGoodsQty() * compsGoodsInfo.getQty() > stock.getCurrStockQty()) {
 						throw new IllegalArgumentException("요청하신 수량만큼의 재고가 존재하지 않습니다.");
 					}
 
@@ -86,20 +92,54 @@ public class TsfCartService {
 					tCart.setOptCd(stock.getOptCd());
 					tCart.setOptCd1(stock.getOptCd1());
 					tCart.setOptCd2(stock.getOptCd2());
-					tCart.setSkuModelNo(stock.getSKU_MODEL_NO());
+					tCart.setSkuModelNo(stock.getSkuModelNo());
 					tCart.setProductNo(compsGoodsInfo.getProductNo());
 					tCart.setProductCode(compsGoodsInfo.getProductCode());
-					tCart.setItemQty(param.getItemQty() * compsGoodsInfo.getQty());
+					tCart.setItemQty(compsGoodsInfo.getQty());
 				}
 			} else {
 				throw new IllegalArgumentException("세트 상품 정보가 존재하지 않습니다.");
 			}
 		} else {		// 딜상품이거나 일반 상품일 경우
 
-		}
+		}*/
+
+		// 현재 장바구니에 존재하는지 확인 후 정보 저장
+		/*if(param.getCompsList() != null && param.getCompsList().size() > 0) {		// 세트상품
+			int haveCartSq = 0, ifHaveSq = 0;
+			for(int i = 0 ; i < param.getCompsList().size() ; i++) {				// 세트상품 전체 옵션이 같은지 확인
+				int cnt = 0;														// 맞는 수량 체크
+				List<Cart> goodsCartList = cartDao.getHasGoodsCartList(param);		// 해당 세트 상품이 있는 cart_sq 검색
+
+				// cart_sq마다 같은 옵션의 세트상품이 있는지 검색
+				for (Cart value : goodsCartList) {
+					Cart searchParam = new Cart();
+					searchParam.setCartSq(value.getCartSq());
+					searchParam.setItemCd(param.getCompsList().get(i).getCompsGoodsCd());
+					searchParam.setOptCd(param.getCompsList().get(i).getOptCd());
+
+					if (cartDao.getCartDetailCnt(searchParam) > 0) {
+						cnt++;
+						ifHaveSq = searchParam.getCartSq();
+					} else {
+						continue;
+					}
+				}
 
-		// 현재 장바구니에 존재하는지 확인
+				if(param.getCompsList().size() == cnt) {
+					haveCartSq = ifHaveSq;
+				}
+			}
+
+			if(haveCartSq != 0) {	// 세트상품 전체 옵션이 같은 장바구니가 있다면
+				// update (추가)
+				Cart updateInfo = new Cart();
+
+			} else {
+				// insert (추가)
+			}
+		} else {	// 세트상품이 아닐 경우
 
-		// 존재하면 update 없으면 insert
+		}*/
 	}
 }

+ 5 - 6
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -12,6 +12,8 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
+import java.util.Collection;
+
 /**
  * 장바구니 Controller
  * 
@@ -31,7 +33,6 @@ public class TsfCartController extends TsfBaseController {
 
 	/**
 	 * 장바구니 화면
-	 *
 	 * @return
 	 * @author xodud1202
 	 * @since 2021. 01. 28
@@ -39,9 +40,7 @@ public class TsfCartController extends TsfBaseController {
 	@GetMapping("/list/form")
 	public ModelAndView cartListForm() {
 		ModelAndView mav = new ModelAndView();
-
-		mav.setViewName("web/cart/cartListForm");
-
+		mav.setViewName(super.getDeviceViewName("cart/cartListForm"));
 		return mav;
 	}
 
@@ -54,9 +53,9 @@ public class TsfCartController extends TsfBaseController {
 	 */
 	@ResponseBody
 	@PostMapping("/save")
-	public GagaResponse freeGoodsPromotionSave(@RequestBody Cart param) {
+	public GagaResponse freeGoodsPromotionSave(@RequestBody Collection<Cart> params) {
 		try {
-			cartService.saveCartInfo(param);
+			cartService.saveCartInfo(params);
 		} catch (Exception e) {
 			e.printStackTrace();
 			return super.error(message.getMessage("FAIL_0001"));

+ 0 - 13
src/main/java/com/style24/front/support/env/TsfConstants.java

@@ -48,17 +48,4 @@ public class TsfConstants {
 //			return value;
 //		}
 //	}
-
-	public enum GOODS_TYPE {
-		NORMAL("G056_N"), DEAL("G056_D"), SET("G056_S");
-
-		private String value;
-		private GOODS_TYPE(String value) {
-			this.value = value;
-		}
-
-		public String value() {
-			return value;
-		}
-	}
 }

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

@@ -20,6 +20,7 @@ public class Cart extends TscBaseDomain {
 	private int cartSq;			// 장바구니 번호
 	private int custNo;			// 고객번호
 	private int planDtlSq;		// 기획전상세번호
+	private int goodsQty;		// 장바구니 등록 수량
 	private String cartGb;		// 장바구니 구분 (공통코드G026)
 	private String goodsCd;		// 상품번호
 	private String productNo;	// ProductNo(WMS)
@@ -35,11 +36,10 @@ public class Cart extends TscBaseDomain {
 	private String optCd1;		// 옵션코드1
 	private String optCd2;		// 옵션코드2
 	private String skuModelNo;	// SKUModelNo(WMS)
-	private int itemQty;		// 장바구니 담긴 수량
+	private int itemQty;		// 장바구니 등록된 상품의 기준재고
 
 	// 상품 정보
 	private int currStockQty;		// 기준 재고
-	private int qty;				// 구성 상품 적용 수량
 	private String compsGoodsCd;	// 세트 구성상품 코드
 	private List<Cart> compsList;	// 구성 세트상품 리스트
 

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

@@ -20,5 +20,5 @@ public class GoodsStock extends TscBaseDomain {
 	private String optCd1;			// 옵션코드1(자사 : 컬러, 입점 : 옵션명1)
 	private String optCd2;			// 옵션코드1(자사 : 사이즈, 입점 : 옵션명2)
 	private String soldoutYn;		// 품절여부
-	private String SKU_MODEL_NO;	// SKUModelNo(WMS)
+	private String skuModelNo;		// SKUModelNo(WMS)
 }

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

@@ -7,7 +7,34 @@
 		LIMIT #{pageable.startRow}, #{pageable.pageSize}
 	</sql>
 	<!--// Paging -->
-	
-	
 
+	<!--대상상품 존재 장바구니 List 조회 -->
+	<select id="getHasGoodsCartList" parameterType="Cart" resultType="Cart">
+		/* TsfGoods.getHasGoodsCartList : 대상상품 존재 장바구니 List 조회 */
+		SELECT CART_SQ
+			 , GOODS_CD
+		FROM  TB_CART C
+		WHERE 1=1
+		AND   GOODS_CD = #{goodsCd}
+		<choose>
+			<when test="regNo == 0">
+				AND C.JSESSION_ID = #{jsessionId}
+		  		AND C.REG_NO = 0
+			</when>
+			<otherwise>
+				AND C.REG_NO = #{regNo}
+			</otherwise>
+		</choose>
+	</select>
+
+	<!-- 장바구니 상세 존재 유무 확인 -->
+	<select id="getCartDetailCnt" parameterType="Cart" resultType="Cart">
+		/* TsfGoods.getCartDetailCnt : 장바구니 상세 존재 유무 확인 */
+		SELECT COUNT(1) AS CNT
+		FROM  TB_CART_DETAIL C
+		WHERE 1=1
+		  AND ITEM_CD = #{itemCd}
+		  AND OPT_CD = #{optCd}
+		  AND CART_SQ = #{cartSq}
+	</select>
 </mapper>

+ 4 - 24
src/main/java/com/style24/persistence/mybatis/TsfGoods.xml

@@ -22,8 +22,8 @@
 	</select>
 
 	<!-- 구성 상품 정보 -->
-	<select id="getGoodsComposeInfo" parameterType="Goods" resultType="Goods">
-		/* TsfGoods.getGoodsComposeInfo */
+	<select id="getGoodsCompsInfo" parameterType="Goods" resultType="Goods">
+		/* TsfGoods.getGoodsCompsInfo */
 		SELECT GC.GOODS_CD
 			 , GC.COMPS_GOODS_CD
 			 , GC.GOODS_TYPE
@@ -41,29 +41,9 @@
 		AND GC.COMPS_GOODS_CD = #{compsGoodsCd}
 	</select>
 
-	<!-- 구성 상품 정보 -->
-	<select id="getGoodsComposeInfo" parameterType="Goods" resultType="Goods">
-		/* TsfGoods.getGoodsComposeInfo */
-		SELECT GC.GOODS_CD
-		, GC.COMPS_GOODS_CD
-		, GC.GOODS_TYPE
-		, GC.QTY
-		, G.PRODUCT_NO
-		, G.PRODUCT_CODE
-		FROM  TB_GOODS_COMPOSE GC
-		INNER JOIN TB_GOODS G
-		ON    GC.COMPS_GOODS_CD = G.GOODS_CD
-		WHERE GC.USE_YN = 'Y'
-		AND   G.SELF_MALL_YN = 'Y'			<!-- 자사몰 노출 여부 -->
-		AND   G.GOODS_STAT = 'G008_90'		<!-- 상품 승인완료 -->
-		AND   GC.GOODS_TYPE = #{goodsType}
-		AND   GC.GOODS_CD = #{goodsCd}
-		AND   GC.COMPS_GOODS_CD = #{compsGoodsCd}
-	</select>
-
 	<!-- 상품 재고 조회 -->
-	<select id="getGoodsComposeInfo" parameterType="Goods" resultType="Goods">
-		/* TsfGoods.getGoodsComposeInfo */
+	<select id="getGoodsStockInfo" parameterType="GoodsStock" resultType="GoodsStock">
+		/* TsfGoods.getGoodsStockInfo */
 		SELECT VS.GOODS_CD
 			 , VS.OPT_CD
 			 , VS.OPT_CD1

+ 0 - 64
src/main/webapp/WEB-INF/views/web/cart/cartListForm.html

@@ -1,64 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<head>
-    <meta charset="UTF-8">
-    <title>Title</title>
-    <link rel="stylesheet" href="/ux/plugins/mcxdialog/mcxdialog_ui.css"/>
-
-    <!-- Include JS library -->
-    <script type="text/javascript" src="/ux/plugins/jquery/jquery-1.12.4.min.js"></script>
-    <script type="text/javascript" src="/ux/plugins/jquery/jquery-ui.min.js"></script>
-    <script type="text/javascript" src="/ux/plugins/jquery/jquery.serializeObject.min.js"></script>
-
-    <!-- Include gaga library -->
-    <link rel="stylesheet" href="/ux/plugins/gaga/gaga.agGrid.css"/>
-    <script type="text/javascript" src="/ux/plugins/gaga/gaga.common.js"></script>
-    <script type="text/javascript" src="/ux/plugins/gaga/gaga.validation.js"></script>
-    <script type="text/javascript" src="/ux/plugins/gaga/gaga.agGrid.js"></script>
-    <script type="text/javascript" src="/ux/plugins/gaga/gaga.alert.js"></script>
-
-    <script type="text/javascript" src="/ux/plugins/mcxdialog/mcxdialog_ui.js"></script>
-</head>
-<body>
-    <form id="cartInfo" name="searchForm" action="/cart/createCart">
-        <div with="500" height="500" style="text-align:center;">
-            <div style="vertical-align: middle;">
-                <input type="text" name="goodsCd" />
-                <button type="button" id="save">cart 저장</button>
-            </div>
-        </div>
-    </form>
-
-    <script type="text/javascript">
-        // 저장 후 콜백 함수
-        var saveFinish = function(result) {
-            alert(result.result);
-        }
-        $("#save").click(function() {
-            let goodsCd = "STYS000000016";
-            let i = 2;      // 구성상품 length만큼
-            let compsList = new Object;
-            for(let j = 0 ; j < i ; j++) {
-                let temp = new Object;
-                if(j == 0) {
-                    temp.compsGoodsCd = '14373757';
-                    temp.optCd = "핑크120";
-                    compList.push(temp);
-                } else {
-                    temp.compsGoodsCd = '14373758';
-                    temp.optCd = "블랙130";
-                    compsList.push(temp);
-                }
-            }
-
-            let data = {
-                goodsCd : goodsCd,
-                itemQty : 2,
-                compsList : compsList
-            };
-            let jsonData = JSON.stringify(data);
-            gagajf.ajaxJsonSubmit('/cart/save', jsonData, saveFinish);
-        });
-    </script>
-</body>
-</html>

+ 112 - 0
src/main/webapp/WEB-INF/views/web/cart/cartListFormWeb.html

@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html lang="ko"
+      xmlns:th="http://www.thymeleaf.org"
+      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+      layout:decorator="web/common/layout/DefaultLayoutWeb">
+<!--
+ *******************************************************************************
+ * @source  : MallMainFormWeb.html
+ * @desc    : 장바구니
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.28   xodud1202   최초 작성
+ *******************************************************************************
+ -->
+<body>
+
+<th:block layout:fragment="content">
+    <form id="cartInfo" name="searchForm" action="/cart/createCart">
+        <div with="500" height="500" style="text-align:center;">
+            <div style="vertical-align: middle;">
+                <input type="text" name="goodsCd" />
+                <button type="button" id="save">cart 저장</button>
+            </div>
+        </div>
+    </form>
+
+    <script type="text/javascript">
+        // 저장 후 콜백 함수
+        var saveFinish = function(result) {
+            alert(result.result);
+        }
+        $("#save").click(function() {
+            let goodsCd = "STYS000000016";
+            let i = 2;      // 구성상품 length만큼
+            let compsList = [];
+            for(let j = 0 ; j < i ; j++) {
+                let temp = new Object;
+                if(j == 0) {
+                    temp.compsGoodsCd = '14373757';
+                    temp.optCd = "핑크120";
+                    compsList.push(temp);
+                } else {
+                    temp.compsGoodsCd = '14373758';
+                    temp.optCd = "블랙130";
+                    compsList.push(temp);
+                }
+            }
+
+            let data = {
+                goodsCd : goodsCd,
+                goodsQty : 2,
+                compsList : compsList
+            };
+            let jsonData = JSON.stringify(data);
+
+
+            $.ajax({
+                type : 'POST',
+                url : '/cart/save',
+                data : jsonData,
+                dataType : 'json',
+                beforeSend : function(xhr, settings) {
+                    // AJAX call
+                    xhr.setRequestHeader("AJAX", "true");
+
+                    // dataType: "json"일 때
+                    xhr.setRequestHeader('Accept', 'application/json');
+                    xhr.setRequestHeader('Content-Type', 'application/json');
+
+                    // Button disabled & progressBar creation
+                    //gagajf.showProgressbar(true);
+                },
+                complete : function(xhr) {
+                    // Button abled & progressBar remove
+                    //gagajf.showProgressbar(false);
+
+                    // 세션이 없다. 로그인 페이지로 이동
+                    if (xhr.status == 901) {
+
+                    }
+                },
+                success : function(result) {
+                    if (typeof(result.status) == 'undefined' || result.status == 200) { // 성공
+                        if (!result.message) {
+                            saveFinish.call(this, result);
+                        } else {
+                            if (typeof(saveFinish) == "function") {
+                                saveFinish.call(this, result);
+                            }
+                        }
+                    } else { // 실패
+                        if (!result.error.message) {
+                            alert(result.error.message);
+                        }
+
+                        return;
+                    }
+                },
+                error : function(result) {
+                    console.log(result);
+                    alert('오류로 인해 처리되지 않았습니다.');
+                }
+            });
+        });
+    </script>
+</th:block>
+</body>
+</html>