Ver Fonte

Merge branch 'develop' into order

card007 há 5 anos atrás
pai
commit
7c34a34ac9

+ 127 - 1
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -2,17 +2,20 @@ package com.style24.front.biz.web;
 
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
 
 
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.controller.TsfBaseController;
+import com.style24.persistence.domain.Goods;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 
 
 /**
 /**
  * 상품 Controller
  * 상품 Controller
- * 
+ *
  * @author gagamel
  * @author gagamel
  * @since 2020. 12. 29
  * @since 2020. 12. 29
  */
  */
@@ -27,4 +30,127 @@ public class TsfGoodsController extends TsfBaseController {
 	@Autowired
 	@Autowired
 	private TsfGoodsService goodsService;
 	private TsfGoodsService goodsService;
 
 
+	/**
+	 * 상품상세
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 7. 4
+	 */
+	@GetMapping("/detail/form")
+	public ModelAndView detail(Goods paramsGoods) {
+
+		ModelAndView mav = new ModelAndView();
+
+//		String afLinkCd = paramsGoods.getAfLinkCd();
+//		if (StringUtils.isBlank(paramsGoods.getGoodsCd())) {
+//			if (StringUtils.isBlank(afLinkCd)) {
+//				mav.setViewName("redirect:/display/mall/main/form");
+//			} else {
+//				mav.setViewName("redirect:/display/mall/main/form?af=" + afLinkCd);
+//			}
+//			return mav;
+//		}
+
+//		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
+//		setGoods(paramsGoods);
+//
+//		String mobileYn = paramsGoods.getMobileYn();
+//		if ("Y".equals(mobileYn)) {
+//			paramsGoods.setFrontGb("M");
+//		}
+//
+//		Goods goods = goodsService.getGoodsInfo(paramsGoods);
+//
+//		if (goods == null || goods.getGoodsCd().isBlank()) {
+//			if (StringUtils.isBlank(afLinkCd)) {
+//				mav.setViewName("redirect:/display/mall/main/form");
+//			} else {
+//				mav.setViewName("redirect:/display/mall/main/form?af=" + afLinkCd);
+//			}
+//			return mav;
+//		}
+//
+//		// 다른컬러보기용 업체코드 인자 처리
+//		paramsGoods.setSupplyCompCd(goods.getSupplyCompCd());
+//		paramsGoods.setGoodsType(goods.getGoodsType());
+//		paramsGoods.setFormalGb(goods.getFormalGb());
+//		//
+//		// 상품 기본정보
+//		mav.addObject("goodsInfo", goods);
+//		// 상품 네비정보
+//		mav.addObject("goodsNavigation", goodsService.getGoodsNavigation(paramsGoods));
+//		// 상품 이미지정보
+//		//		mav.addObject("goodsImg", goodsService.getGoodsImg(goods.getGoodsCd()));
+//		mav.addObject("goodsImgList", goodsService.getGoodsImgList(paramsGoods.getGoodsCd()));
+//		// 상품 동영상정보
+//		mav.addObject("goodsVideoList", goodsService.getVideoList(paramsGoods.getGoodsCd()));
+//
+//		if ("D".equals(goods.getGoodsType())) {	// 딜상품
+//			// 딜 구성상품 정보
+//			paramsGoods.setGoodsExtendSearchYn("Y");
+//			mav.addObject("goodsExtendList", goodsService.getGoodsDealExtendList(paramsGoods));
+//		} else {
+//			if ("N".equals(goods.getGoodsType())) {	// 일반상품
+//				// 상품 사이즈정보
+//				mav.addObject("goodsSizeList", goodsService.getGoodsSizeList(paramsGoods));
+//				// 상품 다른컬러정보
+//				mav.addObject("goodsOtherColorList", goodsService.getGoodsOtherColorList(paramsGoods));
+//				// 상품 고시정보
+//				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
+//				// 상품 부위별 사이즈정보
+//				mav.addObject("goodsRegionSizeHtml", goodsService.getGoodsRegionsizeList(paramsGoods));
+//
+//			} else if ("S".equals(goods.getGoodsType())) {		// 셋트상품
+//				mav.addObject("goodsExtendList", goodsService.getGoodsSetExtendList(paramsGoods));
+//			}
+//			// 상품쿠폰
+//			mav.addObject("goodsCouponList", goodsService.getGoodsCouponList(paramsGoods));
+//			// 찜브랜드 여부
+//			TsfBrandWish brandWish = new TsfBrandWish();
+//			brandWish.setBrandCd(goods.getBrandCd());
+//			mav.addObject("isBrandWish", goodsService.getBrandWishList(brandWish));
+//			//			// 특가세일 할인율
+//			//		mav.addObject("specialPriceSaleRate", policyService.getSpecialPriceSaleDisplayRate(TsfConstants.SITE_CD));
+//		}
+//
+//		// 상품포인트사용방법
+//		mav.addObject("goodsPointMothod", policyService.getPointMothod(TsfConstants.SITE_CD)); // A:정액, R:정율
+//		// 상품포인트절사단위
+//		mav.addObject("goodsPointUnit", paramsGoods.getPointUnit()); // 10:원단위절사(int)
+//		// 상품평노출여부 - 미사용
+//		//mav.addObject("reviewDisplayYn", policyService.getReviewDisplayYn(TsfConstants.SITE_CD));
+//
+//		// 무이자 혜택안내 -- 배너 미사용
+//		TsfCardInstallment cardInstallment = new TsfCardInstallment();
+//		cardInstallment.setImonths99SkipYn("Y");
+//		mav.addObject("cardInfoList", goodsService.getCardInfoList(cardInstallment));
+//
+//		// 오늘본 상품 쿠키 담기
+//		// SSL Server
+//		boolean isSslServer = Boolean.parseBoolean(hasSsl);
+//		log.debug("isSslServer: [{}]", isSslServer);
+//
+//		//기존쿠키 가져오기
+//		setTodayGoodsCd(paramsGoods);
+//
+//		mav.addObject("params", paramsGoods);
+//		if ("D".equals(goods.getGoodsType())) {
+//			if ("Y".equals(mobileYn)) {
+//				mav.setViewName("mob/goods/GoodsDealFormMob");
+//			} else {
+//				mav.setViewName(super.getDeviceViewName("goods/GoodsDealForm"));
+//			}
+//		} else {
+//			if ("Y".equals(mobileYn)) {
+//				mav.setViewName("mob/goods/GoodsDetailFormMob");
+//			} else {
+//				mav.setViewName(super.getDeviceViewName("goods/GoodsDetailForm"));
+//			}
+//		}
+
+		return mav;
+	}
+
+
 }
 }

+ 38 - 0
src/main/java/com/style24/persistence/domain/Cate4Srch.java

@@ -0,0 +1,38 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * category4srch Domain
+ *
+ * @author eskim
+ * @since 2020. 2. 08
+ */
+@SuppressWarnings("serial")
+@Data
+public class Cate4Srch extends TscBaseDomain {
+
+	private String siteCd;
+	private String cateGb;
+	private int cateNo;
+	private int leafCateNo;
+	private String cateType;
+	private int cate1No;
+	private String cate1Nm;
+	private int cate2No;
+	private String cate2Nm;
+	private int cate3No;
+	private String cate3Nm;
+	private int cate4No;
+	private String cate4Nm;
+	private int cate5No;
+	private String cate5Nm;
+	private String fullCateCd;
+	private String fullCateNm;
+	private int dispOrd;
+	private String formalGb;
+	private String contentsLoc;
+
+}

+ 27 - 0
src/main/java/com/style24/persistence/domain/GoodsViewHst.java

@@ -0,0 +1,27 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품조회이력 Domain
+ *
+ * @author eskim
+ * @since 2021. 2. 08
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsViewHst extends TscBaseDomain {
+
+	private String goodsCd;
+	private String jsessionId;
+	private String siteCd;
+	private String frontGb;
+	private String afLinkCd;
+	private String ithrCd;
+	private String contentsLoc;
+	private int custNo;
+	private String referer;
+
+}

+ 138 - 13
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -14,32 +14,157 @@
 		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
 		WHERE  NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
 	</sql>
 	</sql>
 	
 	
+	<!-- 상품상세보기이력 생성 -->
+	<insert id="createGoodsViewHistory" parameterType="GoodsViewHst">
+		/* TsfGoods.createGoodsViewHistory */
+		INSERT INTO TB_GOODS_VIEW_HST
+		    (
+		    GOODS_CD
+		  , JSESSION_ID
+		  , SITE_CD
+		  , FRONT_GB
+		  , AF_LINK_CD
+		  , ITHR_CD
+		  , CONTENTS_LOC
+		  , CUST_NO
+		  , REFERER
+		  , REG_DT
+		    )
+		SELECT #{goodsCd}
+		     , #{jsessionId}
+		     , #{siteCd}
+		     , #{frontGb}
+		     , #{afLinkCd}
+		     , #{ithrCd}
+		     , #{contentsLoc}
+		     , #{custNo}
+		     , #{referer}
+		     , NOW()
+		FROM DUAL
+		WHERE EXISTS (SELECT 1
+		              FROM TB_GOODS
+		              WHERE GOODS_CD = #{goodsCd}
+		              )
+	</insert>
 	
 	
+	<!-- 상품 네비게이션 조회 -->
+	<select id="getGoodsNavigation" parameterType="Goods" resultType="Cate4Srch">
+		/* TsfGoods.getGoodsNavigation */
+		SELECT G.FORMAL_GB
+		     , I.CATE_CD
+		     , CATE1_NO
+		     , CATE1_NM
+		     , CATE2_NO
+		     , CATE2_NM
+		     , CATE3_NO
+		     , CATE3_NM
+		     , CATE4_NO
+		     , CATE4_NM
+		     , CATE5_NO
+		     , CATE5_NM
+		     , CATE_GB
+		     , LEAF_CATE_CD
+		FROM TB_GOODS G
+		   , TB_ITEMKIND_CATEGORY I
+		   , TB_CATE_4SRCH A
+		WHERE G.ITEMKIND_CD = I.ITEMKIND_CD
+		AND I.CATE_CD = A.LEAF_CATE_CD
+		AND G.GOODS_CD = #{goodsCd}
+		AND A.CATE_TYPE = 'G031_10' -- 상품카테
+		AND A.CATE_GB = #{cateGb}
+		AND A.SITE_CD = #{siteCd}
+		AND ROWNUM = 1
+	</select>
 
 
 	<!-- 상품 정보 -->
 	<!-- 상품 정보 -->
 	<select id="getGoodsInfo" parameterType="Goods" resultType="Goods">
 	<select id="getGoodsInfo" parameterType="Goods" resultType="Goods">
 		/* TsfGoods.getGoods */
 		/* TsfGoods.getGoods */
 		SELECT G.GOODS_CD
 		SELECT G.GOODS_CD
-		     , G.PRODUCT_NO
-		     , G.PRODUCT_CODE
-			 , G.GOODS_TYPE
-			 , G.DAY_MAX_ORD_QTY
-			 , G.GOODS_STAT
-		  FROM TB_GOODS G
-		 WHERE G.SELF_MALL_YN = 'Y'							<!-- 자사몰 노출 여부 -->
-		   AND G.GOODS_STAT IN ('G008_90', 'G008_70')		<!-- 상품 승인완료, 일시품절 (품절도 프론트에서 보여져야함) -->
-		   AND G.GOODS_CD = #{goodsCd}
+		     , G.GOODS_NM
+		     , G.GOODS_TNM
+		     , G.GOODS_NM
+		     , CONCAT(G.GOODS_TNM,' ',G.GOODS_NM) AS GOODS_TNM_FULL
+		     , G.BRAND_CD
+		     , (CASE WHEN B.DISP_NM_LANG = 'EN' THEN B.BRAND_ENM ELSE B.BRAND_KNM END) AS BRAND_NM
+		     , B.BRAND_GRP_NM
+		     , B.LOGO_FILE_NM
+		     , G.ITEMKIND_CD
+		     , G.FORMAL_GB
+		     , G.LIST_PRICE
+		     , G.CURR_PRICE
+		     -- , G.DC_RATE
+		     , 100 - ROUND((BP.CURR_PRICE / G.LIST_PRICE) * 100 ,0) AS DC_RATE
+		     , G.SELF_GOODS_YN
+		     , G.GOODS_STAT
+		     , (CASE WHEN #{frontGb} = 'P' THEN G.PNT_PRATE ELSE G.PNT_MRATE END) AS PNT_RATE
+		     , (CASE WHEN #{frontGb} = 'P' THEN G.PRE_PPNT_USABLE_YN ELSE G.PRE_MPNT_USABLE_YN END) AS PRE_PNT_USABLE_YN
+		     , G.MIN_ORD_QTY
+		     , G.MAX_ORD_QTY
+		     , G.DAY_MAX_ORD_QTY
+		     , G.SEX_GB
+		     , FN_GET_CODE_NM('G007',G.SEX_GB) AS SEX_NM
+		     , G.DELV_FEE
+		     , G.MIN_ORD_AMT
+		     , G.GOODS_GB
+		     , (SELECT NI_CLSF_CD
+		        FROM TB_ITEMKIND
+		        WHERE ITEMKIND_CD = G.ITEMKIND_CD) AS NI_CLSF_CD
+		     , G.MAIN_COLOR_CD
+		     , G.SUPPLY_COMP_CD
+		     , G.SELF_MALL_YN
+		     , G.AGE_GRP_CD
+		     , G.GIFT_PACK_YN
+		     , G.NEW_CUST_ORD_YN
+		     , G.ADULT_YN
+		     , G.GOODS_TYPE
+		     , G.CHANGEABLE_YN
+		     , G.RETURNABLE_YN
+		     , (SELECT CATE1_NO
+		         FROM TB_SITE_BRAND
+		         WHERE  BRAND_CD = G.BRAND_CD
+		         AND SITE_CD = #{siteCd}
+		         AND USE_YN = 'Y') AS BRAND_CATE1_NO
+		     , (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') AS SYS_IMG_NM
+		     , BP.CURR_PRICE AS BENEFIT_PRICE
+		     , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
+		     , (CASE WHEN G.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
+		                                                               ELSE CURR_STOCK_QTY
+		                                                               END) ,0)
+		                                                FROM  VW_STOCK
+		                                                WHERE GOODS_CD = G.GOODS_CD
+		                                                GROUP BY GOODS_CD )
+		            ELSE (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
+		                                      ELSE CURR_STOCK_QTY
+		                                      END) ,0)
+		                  FROM  VW_STOCK_EXTEND
+		                  WHERE GOODS_CD= G.GOODS_CD
+		                  GROUP BY GOODS_CD )
+		            END) AS STOCK_QTY
+		FROM TB_GOODS G
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		                      AND B.USE_YN = 'Y'
+		INNER JOIN (SELECT GOODS_CD, 
+		            FN_GET_BENEFIT_PRICE(#{siteCd},#{frontGb},GOODS_CD,DECODE(NVL(#{custGb},'G100_00'),'G100_20', CURR_PRICE, CURR_PRICE),#{custGb},#{floorUnit},#{custGrade}) AS CURR_PRICE 
+		            FROM TB_GOODS
+		            WHERE GOODS_CD = #{goodsCd}) BP ON G.GOODS_CD = BP.GOODS_CD
+		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
+		                              AND IFNULL(#{custNo}, 0) = W.CUST_NO
+		WHERE G.GOODS_CD = #{goodsCd}
+		-- AND G.SELF_MALL_YN = 'Y' --자사몰 노출(기획전과 상품상세는 노출)
+		<if test='adminYn == null or adminYn != "Y"'>
+		AND G.GOODS_STAT = 'G008_90'
+		</if>
 	</select>
 	</select>
 
 
 	<!-- 구성 상품 정보 -->
 	<!-- 구성 상품 정보 -->
 	<select id="getGoodsCompsInfo" parameterType="Goods" resultType="Goods">
 	<select id="getGoodsCompsInfo" parameterType="Goods" resultType="Goods">
 		/* TsfGoods.getGoodsCompsInfo */
 		/* TsfGoods.getGoodsCompsInfo */
 		SELECT GC.GOODS_CD
 		SELECT GC.GOODS_CD
-			 , GC.COMPS_GOODS_CD
-			 , GC.GOODS_TYPE
-			 , GC.QTY
+		     , GC.COMPS_GOODS_CD
+		     , GC.GOODS_TYPE
+		     , GC.QTY
 		     , G.PRODUCT_NO
 		     , G.PRODUCT_NO
-			 , G.PRODUCT_CODE
+		     , G.PRODUCT_CODE
 			 , G.GOODS_STAT
 			 , G.GOODS_STAT
 		  FROM TB_GOODS_COMPOSE GC
 		  FROM TB_GOODS_COMPOSE GC
 		 INNER JOIN TB_GOODS G
 		 INNER JOIN TB_GOODS G