Browse Source

상품쿼리

eskim 5 năm trước cách đây
mục cha
commit
724afffa10

+ 52 - 2
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -3,10 +3,13 @@ package com.style24.front.biz.dao;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsCompose;
+import com.style24.persistence.domain.GoodsDesc;
 import com.style24.persistence.domain.GoodsImg;
+import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsViewHst;
 import com.style24.persistence.domain.VideoDisploc;
@@ -109,15 +112,62 @@ public interface TsfGoodsDao {
 
 
 	/**
-	 * 상품 옵션 사이즈 목록
+	 * 상품 옵션2 목록
 	 *
 	 * @param goods
 	 * @return
 	 * @author eskim
 	 * @date 2021. 2. 9
 	 */
-	Collection<GoodsStock> getGoodsSizeList(Goods goods);
+	Collection<GoodsStock> getGoodsOption2List(Goods goods);
 
+	/**
+	 * 상품 고시정보
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 17
+	 */
+	Collection<GoodsNotiInfo> getGoodsNotiList(Goods goods);
+
+	/**
+	 * 카드 혜택
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 17
+	 */
+	Collection<CardPromotion> getCardPromotionList(CardPromotion cardPromotion);
+
+	/**
+	 * 핫딜 상품 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 17
+	 */
+	Goods getSocialGoods(Goods goods);
 
+	/**
+	 * 카드 혜택
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 17
+	 */
+	Collection<GoodsDesc> getGoodsDescList(GoodsDesc goodsDesc);
 
+	/**
+	 * 상품예약판매정보 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 17
+	 */
+	Goods getGoodsResSell(Goods goods);
 }

+ 140 - 3
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -10,10 +10,13 @@ import org.springframework.transaction.annotation.Transactional;
 import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfGoodsDao;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsCompose;
+import com.style24.persistence.domain.GoodsDesc;
 import com.style24.persistence.domain.GoodsImg;
+import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsViewHst;
 import com.style24.persistence.domain.VideoDisploc;
@@ -90,6 +93,85 @@ public class TsfGoodsService {
 		return goodsDao.getGoodsInfo(goods);
 	}
 
+	/**
+	 * 상품 DESC 조회
+	 *
+	 * @param resultGoods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 17
+	 */
+	public Goods getGoodsDesc(Goods resultGoods) {
+
+		GoodsDesc goods = new GoodsDesc();
+		goods.setGoodsCd(resultGoods.getGoodsCd());
+
+		//상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:상위컨텐츠-모바일,70:하위컨텐츠-모바일,80:상품상세(as-is,입점))
+
+		// 상품타이틀
+		goods.setDescGb("10");
+		String goodsTitle = this.getGoodsDescList(goods);
+		resultGoods.setGoodsTitle(goodsTitle);
+		// 상품타이틀내용
+		goods.setDescGb("20");
+		String goodsTitleDesc = this.getGoodsDescList(goods);
+		resultGoods.setGoodsTitleDesc(goodsTitleDesc);
+		// 상품특징
+		goods.setDescGb("30");
+		String goodsSpecialDesc = this.getGoodsDescList(goods);
+		resultGoods.setGoodsSpecialDesc(goodsSpecialDesc);
+
+		if ("P".equals(TsfSession.getFrontGb())) {
+			// 상품 상세 pc 상단
+			goods.setDescGb("40");
+			String goodsPcTopDesc = this.getGoodsDescList(goods);
+			resultGoods.setGoodsTopDesc(goodsPcTopDesc);
+
+			// 상품 상세 pc 하단
+			goods.setDescGb("50");
+			String goodsPcDownDesc = this.getGoodsDescList(goods);
+			resultGoods.setGoodsDownDesc(goodsPcDownDesc);
+
+		} else {
+			// 상품 상세 mobile 상단
+			goods.setDescGb("60");
+			String goodsMobileTopDesc = this.getGoodsDescList(goods);
+			resultGoods.setGoodsTopDesc(goodsMobileTopDesc);
+
+			// 상품 상세 mpbile 하단
+			goods.setDescGb("70");
+			String goodsMobileDownDesc = this.getGoodsDescList(goods);
+			resultGoods.setGoodsDownDesc(goodsMobileDownDesc);
+		}
+
+		// 상품특징
+		goods.setDescGb("80");
+		String goodsDesc = this.getGoodsDescList(goods);
+		resultGoods.setGoodsDesc(goodsDesc);
+
+		return resultGoods;
+	}
+
+	/**
+	 * 상품 상세 정보 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 17
+	 */
+	private String getGoodsDescList(GoodsDesc goods) {
+		Collection<GoodsDesc> goodsDescList = goodsDao.getGoodsDescList(goods);
+		StringBuilder goodsDesc = new StringBuilder();
+		if (goodsDescList != null && !goodsDescList.isEmpty()) {
+			for (GoodsDesc tmpGoodsDesc : goodsDescList) {
+				goodsDesc.append(tmpGoodsDesc.getGoodsDesc());
+			}
+		}
+		return goodsDesc.toString();
+	}
+
+
 	/**
 	 * 상품 이미지 정보
 	 *
@@ -216,15 +298,70 @@ public class TsfGoodsService {
 	}
 
 	/**
-	 * 상품 옵션 사이즈 목록
+	 * 상품 옵션2 목록
 	 *
 	 * @param goods
 	 * @return
 	 * @author eskim
 	 * @since 2021. 2. 9
 	 */
-	public Collection<GoodsStock> getGoodsSizeList(Goods goods) {
-		return goodsDao.getGoodsSizeList(goods);
+	public Collection<GoodsStock> getGoodsOption2List(Goods goods) {
+		return goodsDao.getGoodsOption2List(goods);
+	}
+
+	/**
+	 * 상품 고시정보
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 17
+	 */
+	public Collection<GoodsNotiInfo> getGoodsNotiList(Goods goods) {
+		return goodsDao.getGoodsNotiList(goods);
+	}
+
+	/**
+	 * 카드 혜택
+	 *
+	 * @param cardPromotion
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 17
+	 */
+	public Collection<CardPromotion> getCardPromotionList(CardPromotion cardPromotion) {
+		return goodsDao.getCardPromotionList(cardPromotion);
+	}
+
+	/**
+	 * 핫딜 상품 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 17
+	 */
+	public Goods getSocialGoods(Goods goods) {
+		return goodsDao.getSocialGoods(goods);
+	}
+
+	/**
+	 * 상품예약판매정보 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 17
+	 */
+	public Goods getGoodsResSell(Goods resultGoods) {
+
+		Goods goods = goodsDao.getGoodsResSell(resultGoods);
+		if (goods != null) {
+			resultGoods.setDelvResDt(goods.getDelvResDt());
+		}
+
+		return resultGoods;
 	}
 
+
 }

+ 116 - 53
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -2,20 +2,26 @@ package com.style24.front.biz.web;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.support.controller.TsfBaseController;
+import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Goods;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.util.GagaCookieUtil;
+
 /**
  * 상품 Controller
  *
@@ -33,8 +39,12 @@ public class TsfGoodsController extends TsfBaseController {
 	@Autowired
 	private TsfGoodsService goodsService;
 
-//	@Autowired
-//	private TsfPolicyService policyService;
+	@Autowired
+	private TscEnvsetService envsetService;
+
+	@Value("${has-ssl}")
+	private String hasSsl;
+
 
 	/**
 	 * 상품상세
@@ -60,12 +70,12 @@ public class TsfGoodsController extends TsfBaseController {
 
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(paramsGoods);
-//
-//		String mobileYn = paramsGoods.getMobileYn();
-//		if ("Y".equals(mobileYn)) {
-//			paramsGoods.setFrontGb("M");
-//		}
-//
+
+		String mobileYn = paramsGoods.getMobileYn();
+		if ("Y".equals(mobileYn)) {
+			paramsGoods.setFrontGb("M");
+		}
+
 		Goods goods = goodsService.getGoodsInfo(paramsGoods);
 
 		if (goods == null || goods.getGoodsCd().isEmpty()) {
@@ -76,12 +86,20 @@ public class TsfGoodsController extends TsfBaseController {
 			}
 			return mav;
 		}
-//
-//		// 다른컬러보기용 업체코드 인자 처리
-//		paramsGoods.setSupplyCompCd(goods.getSupplyCompCd());
-//		paramsGoods.setGoodsType(goods.getGoodsType());
-//		paramsGoods.setFormalGb(goods.getFormalGb());
-//		//
+
+		// 상품 상세
+		goods = goodsService.getGoodsDesc(goods);
+		// 핫딜정보
+		Goods socialGoods = goodsService.getSocialGoods(goods);
+		if (socialGoods != null && !StringUtils.isBlank(socialGoods.getGoodsCd())) {
+			goods.setSocialSq(socialGoods.getSocialSq());
+			goods.setSocialTnm(socialGoods.getSocialTnm());
+			goods.setSocialEddt(socialGoods.getSocialEddt());
+			goods.setSocialSq(socialGoods.getSocialSq());
+		}
+		// 예약판매정보
+		goods = goodsService.getGoodsResSell(goods);
+
 		// 상품 기본정보
 		mav.addObject("goodsInfo", goods);
 		// 상품 네비정보
@@ -98,15 +116,13 @@ public class TsfGoodsController extends TsfBaseController {
 			mav.addObject("goodsExtendList", goodsService.getGoodsDealComposeList(paramsGoods));
 		} else {
 			if ("N".equals(goods.getGoodsType())) {	// 일반상품
-				// 상품 옵션1 정보
-				mav.addObject("goodsOtherColorList", goodsService.getGoodsOption1List(paramsGoods));
-				// 상품 사이즈정보
-				mav.addObject("goodsSizeList", goodsService.getGoodsSizeList(paramsGoods));
+				// 상품 옵션1(색상) 정보
+				mav.addObject("goodsOption1List", goodsService.getGoodsOption1List(paramsGoods));
+				// 상품 옵션2(사이즈) 정보
+				mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
 
 //				// 상품 고시정보
-//				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
-//				// 상품 부위별 사이즈정보
-//				mav.addObject("goodsRegionSizeHtml", goodsService.getGoodsRegionsizeList(paramsGoods));
+				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 
 			} else if ("S".equals(goods.getGoodsType())) {		// 셋트상품
 //				mav.addObject("goodsExtendList", goodsService.getGoodsSetExtendList(paramsGoods));
@@ -116,39 +132,40 @@ public class TsfGoodsController extends TsfBaseController {
 		}
 //
 //		// 상품포인트사용방법
-//		mav.addObject("goodsPointMothod", policyService.getPointMothod(TsfConstants.SITE_CD)); // A:정액, R:정율
+//		mav.addObject("goodsPointMothod", envsetService.getPointMothod(TscConstants.Site.STYLE24.value())); // 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);
+//		//mav.addObject("reviewDisplayYn", envsetService.getReviewDisplayYn(TsfConstants.SITE_CD));
 //
-//		//기존쿠키 가져오기
-//		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"));
-//			}
-//		}
+		// 카드 혜택안내
+		CardPromotion cardPromotion = new CardPromotion();
+		cardPromotion.setRegNo(1); // 혜택유형별로 1건씩
+		mav.addObject("cardInfoList", goodsService.getCardPromotionList(cardPromotion));
+
+		// 오늘본 상품 쿠키 담기
+		// SSL Server
+		boolean isSslServer = Boolean.parseBoolean(hasSsl);
+		//log.info("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;
 	}
@@ -164,9 +181,9 @@ public class TsfGoodsController extends TsfBaseController {
 		goods.setFrontGb(TsfSession.getFrontGb());
 		goods.setIsApp(TsfSession.getAttribute("isApp"));	//앱여부 true
 		goods.setSiteCd(TscConstants.Site.STYLE24.value());
-//		goods.setSoldoutGoodsDisplayYn(policyService.getSoldoutGoodsDisplayYn(TscConstants.Site.STYLE24.value())); // 품절상품노출여부
-//		goods.setPointUnit(policyService.getPointUnit(TscConstants.Site.STYLE24.value())); // 10:원단위절사(int)
-//		goods.setFloorUnit(policyService.getPointUnit(TscConstants.Site.STYLE24.value()));
+//		goods.setSoldoutGoodsDisplayYn(envsetService.getSoldoutGoodsDisplayYn(TscConstants.Site.STYLE24.value())); // 품절상품노출여부
+//		goods.setPointUnit(envsetService.getPointUnit(TscConstants.Site.STYLE24.value())); // 10:원단위절사(int)
+//		goods.setFloorUnit(envsetService.getPointUnit(TscConstants.Site.STYLE24.value()));
 		// 회원 구분
 		if (TsfSession.getInfo() != null) {
 			goods.setCustGb(TsfSession.getInfo().getCustGb());
@@ -179,4 +196,50 @@ public class TsfGoodsController extends TsfBaseController {
 		}
 	}
 
+	/**
+	 * 상품 쿠키 생성
+	 *
+	 * @param paramsGoods
+	 * @author eskim
+	 * @since 2021. 2. 17.
+	 */
+	private void setTodayGoodsCd(Goods paramsGoods) {
+		String ckGoodsCd = GagaCookieUtil.getCookie(TsfSession.getHttpServletRequest(), TsfConstants.CK_PREFIX + "_today_goodsCd");
+		//log.info("[detail] ckGoodsCd = {}", ckGoodsCd);
+		String arrGetCkGoodsCd[] = ckGoodsCd.split("\\,");
+		String setCkGoodsCd = "";
+		StringBuilder ckGoodsCdSb = new StringBuilder();
+		if (arrGetCkGoodsCd.length > 0) {
+			for (String cookieGoodsCd : arrGetCkGoodsCd) {
+				if (!cookieGoodsCd.equals(paramsGoods.getGoodsCd()) && !StringUtils.isBlank(cookieGoodsCd)) {
+					ckGoodsCdSb.append(cookieGoodsCd).append(",");
+				}
+			}
+			ckGoodsCdSb.insert(0, ",");
+			ckGoodsCdSb.insert(0, paramsGoods.getGoodsCd());
+		} else {
+			ckGoodsCdSb.append(paramsGoods.getGoodsCd()).append(",");
+		}
+		setCkGoodsCd = ckGoodsCdSb.toString();
+		setCkGoodsCd = setCkGoodsCd.substring(0, setCkGoodsCd.lastIndexOf(","));
+
+		// 오늘본 상품 최대 30개 처리
+		String arrSetCkGoodsCd[] = setCkGoodsCd.split("\\,");
+		if (arrSetCkGoodsCd.length > 30) {
+			ckGoodsCdSb.setLength(0);
+			for (String tempSetCkGoodsCd : arrSetCkGoodsCd) {
+				ckGoodsCdSb.append(tempSetCkGoodsCd).append(",");
+			}
+			setCkGoodsCd = ckGoodsCdSb.toString();
+			setCkGoodsCd = setCkGoodsCd.substring(0, setCkGoodsCd.lastIndexOf(","));
+		}
+
+		//log.info("[detail] setCkGoodsCd = {}", setCkGoodsCd);
+
+		//		if (isSslServer) {
+		//			GagaCookieUtil.setSecureCookie(TsfSession.getHttpServletResponse(), TsfConstants.CK_PREFIX + "_today_goodsCd", setCkGoodsCd, 1);
+		//		} else {
+		GagaCookieUtil.setCookie(TsfSession.getHttpServletResponse(), TsfConstants.CK_PREFIX + "_today_goodsCd", setCkGoodsCd, 24 * 60 * 60);
+		//		}
+	}
 }

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

@@ -116,4 +116,15 @@ public class Goods extends TscBaseDomain {
 	private String optCd1;			// 옵션코드1
 	private int qty;				// 세트 상품 구성 수량
 
+	private String mobileYn;
+	private String delvResDt;		// 예약판매 출고예정일
+
+	//상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:상위컨텐츠-모바일,70:하위컨텐츠-모바일,80:상품상세(as-is,입점))
+	private String goodsTitle; 			// 10:상품타이틀
+	private String goodsTitleDesc;		// 20:상품타이틀내용
+	private String goodsSpecialDesc;	// 30:상품특징
+	private String goodsTopDesc;		// 40:상위컨텐츠, 60:상위컨텐츠-모바일
+	private String goodsDownDesc;		// 50:하위컨텐츠, 70:하위컨텐츠-모바일
+	private String goodsDesc;			// 80:상품상세(as-is,입점)
+
 }

+ 68 - 10
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -203,13 +203,19 @@
 		SELECT GOODS_CD
 		     , OPT_CD1
 		     , STOCK_QTY
+		     , SOLDOUT_YN
+		     , DISP_ORD
+		     , SYS_IMG_NM
 		FROM (
 		     SELECT G.GOODS_CD
 		          , G.SELF_GOODS_YN
 		          , O.OPT_CD1 
 		          , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IF(G.SELF_GOODS_YN ='Y', O.OPT_CD1, '00') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
-		          , IFNULL(S.STOCK_QTY,0) AS STOCK_QTY
-		          , G.MIN_ORD_QTY
+		          , (CASE WHEN IFNULL(S.STOCK_QTY,0) - G.MIN_ORD_QTY >= 0 THEN STOCK_QTY
+		                 ELSE 0
+		            END ) AS STOCK_QTY
+		          , S.SOLDOUT_YN
+		          , S.DISP_ORD
 		     FROM TB_GOODS G
 		     INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		                           AND B.USE_YN = 'Y'
@@ -219,22 +225,33 @@
 		                           , SUM(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
 		                                      ELSE CURR_STOCK_QTY
 		                                      END) AS STOCK_QTY
+		                           , MIN(SOLDOUT_YN) AS SOLDOUT_YN
+		                           , MIN(DISP_ORD) AS DISP_ORD
 		                      FROM VW_STOCK
 		                      WHERE DISP_YN = 'Y'
 		                      GROUP BY GOODS_CD, OPT_CD1) S ON G.GOODS_CD = S.GOODS_CD 
 		                                                    AND O.OPT_CD1 = S.OPT_CD1
 		     WHERE G.GOODS_CD = #{goodsCd})
 		     AND G.GOODS_TYPE = 'G056_N' -- 일반상품
-		     <if test='adminYn == null or adminYn != "Y"'>
-		     AND G.GOODS_STAT = 'G008_90'
-		     </if>
 		     ORDER BY O.DISP_ORD
-		)
+		) Z
+		WHERE 1 = 1
+		<if test='soldoutYn != null and soldoutYn == "Y"'>
+		AND (SOLDOUT_YN = 'Y'
+		     OR
+		     STOCK_QTY <![CDATA[<=]]> 0
+		    )
+		</if>
+		<if test='soldoutYn != null and soldoutYn == "N"'>
+		AND SOLDOUT_YN = 'N'
+		AND STOCK_QTY > 0
+		</if>
+		ORDER BY DISP_ORD
 	</select>
 	
-	<!-- 상품 사이즈 목록 -->
-	<select id="getGoodsSizeList" parameterType="Goods" resultType="GoodsStock">
-		/* TsfGoods.getGoodsSizeList */
+	<!-- 상품 옵션2 목록-->
+	<select id="getGoodsOption2List" parameterType="Goods" resultType="GoodsStock">
+		/* TsfGoods.getGoodsOption2List */
 		SELECT GOODS_CD
 		     , OPT_CD
 		     , OPT_CD1
@@ -272,6 +289,7 @@
 		                FROM VW_STOCK
 		                WHERE GOODS_CD = #{goodsCd}
 		                AND DISP_YN ='Y'
+		                AND OPT_CD2 IS NOT NULL
 		               ) A
 		        ) B
 		     ) Z
@@ -467,7 +485,47 @@
 		      </if>
 		) A
 		<if test="rownum != null and rownum > 0 ">
-		LIMIT 1
+		WHERE RNUM = 1
 		</if>
 	</select>
+	
+	<!-- 상품 고시정보 목록 -->
+	<select id="getGoodsNotiList" parameterType="Goods" resultType="GoodsNotiInfo">
+		/* TsfGoods.getGoodsNotiList */
+		SELECT A.GOODS_CD
+		     , A.NI_CLSF_CD
+		     , A.NI_ITEM_CD
+		     , FN_GET_CODE_NM('G005',A.NI_ITEM_CD) AS NI_ITEM_NM
+		     , A.NI_CONTENT
+		     , A.DISP_ORD
+		FROM TB_GOODS_NOTI_INFO A
+		WHERE A.GOODS_CD = #{goodsCd}
+		ORDER BY A.DISP_ORD
+	</select>
+	
+	<!-- 상품 상세 정보 조회 -->
+	<select id="getGoodsDescList" parameterType="GoodsDesc" resultType="GoodsDesc">
+		/* TsfGoods.getGoodsDescList */
+		SELECT GOODS_CD
+		     , DESC_GB
+		     , SEQ
+		     , GOODS_DESC
+		FROM TB_GOODS_DESC
+		WHERE GOODS_CD = #{goodsCd}
+		AND DESC_GB = #{descGb}
+		ORDER BY SEQ
+	</select>
+	
+	<!-- 상품예약판매정보 조회 -->
+	<select id="getGoodsResSell" parameterType="Goods" resultType="Goods">
+		/* TsfGoods.getGoodsResSell */
+		SELECT GOODS_CD
+		     , DATE_FORMAT(DELV_RES_DT ,'%Y년 %m월 %d일') AS DELV_RES_DT
+		FROM TB_GOODS_RES_SELL
+		WHERE GOODS_CD = #{goodsCd}
+		AND DELV_RES_DT > NOW()
+		ORDER BY DELV_RES_DT
+		LIMIT 1
+	</select>
+	
 </mapper>