eskim преди 5 години
родител
ревизия
d660b07807

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

@@ -1,9 +1,15 @@
 package com.style24.front.biz.dao;
 
+import java.util.Collection;
+
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Cate4Srch;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsCompose;
+import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsViewHst;
+import com.style24.persistence.domain.VideoDisploc;
 
 /**
  * 상품 Dao
@@ -24,6 +30,36 @@ public interface TsfGoodsDao {
 	 */
 	void createGoodsViewHst(GoodsViewHst goodsViewHst);
 
+	/**
+	 * 상품 네비게이션 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 9
+	 */
+	Cate4Srch getGoodsNavigation(Goods goods);
+
+	/**
+	 * 상품 이미지 정보
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 9
+	 */
+	Collection<GoodsImg> getGoodsImgList(String goodsCd);
+
+	/**
+	 * 상품 동영상정보
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 9
+	 */
+	Collection<VideoDisploc> getVideoList(String goodsCd);
+
 	/**
 	 * 상품 정보 조회
 	 * @param goods
@@ -51,4 +87,37 @@ public interface TsfGoodsDao {
 	 */
 	GoodsStock getGoodsStockInfo(GoodsStock goodsStock);
 
+	/**
+	 * 딜상품 구성상품정보 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 9
+	 */
+	Collection<GoodsCompose> getGoodsDealComposeList(Goods goods);
+
+	/**
+	 * 상품 옵션 사이즈 목록
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 9
+	 */
+	Collection<GoodsStock> getGoodsOtherColorList(Goods goods);
+
+
+	/**
+	 * 상품 옵션 사이즈 목록
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @date 2021. 2. 9
+	 */
+	Collection<GoodsStock> getGoodsSizeList(Goods goods);
+
+
+
 }

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

@@ -63,10 +63,10 @@ public class TsfCommonService {
 				inflow.setInflowRefer(new String(referBytes, 0, 500));
 			}
 		}
-		if (!StringUtils.isEmpty(inflow.getReturnUrl())) {
-			byte[] referBytes = inflow.getReturnUrl().getBytes();
+		if (!StringUtils.isEmpty(inflow.getPageUrl())) {
+			byte[] referBytes = inflow.getPageUrl().getBytes();
 			if (referBytes.length > 1000) {
-				inflow.setReturnUrl(new String(referBytes, 0, 1000));
+				inflow.setPageUrl(new String(referBytes, 0, 1000));
 			}
 		}
 

+ 81 - 26
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -1,7 +1,8 @@
 package com.style24.front.biz.service;
 
-import java.nio.charset.StandardCharsets;
+import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -9,9 +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.Cate4Srch;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsCompose;
+import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.GoodsViewHst;
+import com.style24.persistence.domain.VideoDisploc;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -46,7 +51,15 @@ public class TsfGoodsService {
 		goodsViewHst.setSiteCd(TscConstants.Site.STYLE24.value());
 		goodsViewHst.setFrontGb(TsfSession.getFrontGb());
 		goodsViewHst.setAfLinkCd(ithrCd);
-		goodsViewHst.setReferer(javaToOracleStringConvertor(TsfSession.getHttpServletRequest().getHeader("Referer"), 2000)); // byte 기준 2000 짜르기
+		String referer = TsfSession.getHttpServletRequest().getHeader("Referer");
+		if (StringUtils.isNotBlank(referer)) {
+			byte[] referBytes = referer.getBytes();
+			if (referBytes.length > 1000) {
+				goodsViewHst.setReferer(new String(referBytes, 0, 1000));
+			}else {
+				goodsViewHst.setReferer(referer);
+			}
+		}
 
 		if (TsfSession.getInfo() != null) {
 			goodsViewHst.setCustNo(TsfSession.getInfo().getCustNo());
@@ -56,33 +69,14 @@ public class TsfGoodsService {
 	}
 
 	/**
-	 * byte 기준 데이터 자르기
-	 *
-	 * @param s
-	 * @param limitByteLength
+	 * 상품 네비게이션 조회
+	 * @param goods
 	 * @return
 	 * @author eskim
-	 * @since 2020. 9. 1.
+	 * @since 2021. 02. 09
 	 */
-	public String javaToOracleStringConvertor(String s, int limitByteLength) {
-		byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
-		int length = bytes.length;
-		if (limitByteLength >= length) {
-			return s;
-		}
-		int totalByteCount = 0;
-		for (int i = 0; i < s.length();) {
-			int cp = s.codePointAt(i);
-			int n = Character.charCount(cp);
-			int byteCount = s.substring(i, i + n).getBytes(StandardCharsets.UTF_8).length;
-			if ((totalByteCount + byteCount) > limitByteLength) {
-
-				break;
-			}
-			totalByteCount += byteCount;
-			i += n;
-		}
-		return new String(bytes, 0, totalByteCount);
+	public Cate4Srch getGoodsNavigation(Goods goods) {
+		return goodsDao.getGoodsNavigation(goods);
 	}
 
 	/**
@@ -96,6 +90,30 @@ public class TsfGoodsService {
 		return goodsDao.getGoodsInfo(goods);
 	}
 
+	/**
+	 * 상품 이미지 정보
+	 *
+	 * @param goodsCd
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 9
+	 */
+	public Collection<GoodsImg> getGoodsImgList(String goodsCd) {
+		return goodsDao.getGoodsImgList(goodsCd);
+	}
+
+	/**
+	 * 상품 동영상정보
+	 *
+	 * @param goodsCd
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 9
+	 */
+	public Collection<VideoDisploc> getVideoList(String goodsCd) {
+		return goodsDao.getVideoList(goodsCd);
+	}
+
 	/**
 	 * 구성 상품 정보 조회
 	 * @param goods
@@ -172,4 +190,41 @@ public class TsfGoodsService {
 
 		return "SUCCESS";
 	}
+
+	/**
+	 * 딜상품 구성상품정보 조회
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 9
+	 */
+	public Collection<GoodsCompose> getGoodsDealComposeList(Goods goods) {
+		return goodsDao.getGoodsDealComposeList(goods);
+	}
+
+	/**
+	 * 상품 옵션 사이즈 목록
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 9
+	 */
+	public Collection<GoodsStock> getGoodsOtherColorList(Goods goods) {
+		return goodsDao.getGoodsOtherColorList(goods);
+	}
+
+	/**
+	 * 상품 옵션 사이즈 목록
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 2. 9
+	 */
+	public Collection<GoodsStock> getGoodsSizeList(Goods goods) {
+		return goodsDao.getGoodsSizeList(goods);
+	}
+
 }

+ 78 - 52
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -1,14 +1,17 @@
 package com.style24.front.biz.web;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 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.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.security.session.TsfSession;
 import com.style24.persistence.domain.Goods;
 
 import lombok.extern.slf4j.Slf4j;
@@ -30,6 +33,9 @@ public class TsfGoodsController extends TsfBaseController {
 	@Autowired
 	private TsfGoodsService goodsService;
 
+//	@Autowired
+//	private TsfPolicyService policyService;
+
 	/**
 	 * 상품상세
 	 *
@@ -42,77 +48,72 @@ public class TsfGoodsController extends TsfBaseController {
 
 		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;
-//		}
+		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);
+		// 상품관련 기본값 설정(회원 등급, 앱, 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;
-//		}
+		Goods goods = goodsService.getGoodsInfo(paramsGoods);
+
+		if (goods == null || goods.getGoodsCd().isEmpty()) {
+			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("goodsInfo", goods);
+		// 상품 네비정보
+		paramsGoods.setCateGb("G032_101"); 		//by item
+		mav.addObject("goodsNavigation", goodsService.getGoodsNavigation(paramsGoods));
+		// 상품 이미지정보
+		mav.addObject("goodsImgList", goodsService.getGoodsImgList(paramsGoods.getGoodsCd()));
+		// 상품 동영상정보
+		mav.addObject("goodsVideoList", goodsService.getVideoList(paramsGoods.getGoodsCd()));
+
+		if ("D".equals(goods.getGoodsType())) {	// 딜상품
+			// 딜 구성상품 정보
+			paramsGoods.setGoodsComposeSearchYn("Y");
+			mav.addObject("goodsExtendList", goodsService.getGoodsDealComposeList(paramsGoods));
+		} else {
+			if ("N".equals(goods.getGoodsType())) {	// 일반상품
+				// 상품 다른컬러정보
+				mav.addObject("goodsOtherColorList", goodsService.getGoodsOtherColorList(paramsGoods));
+				// 상품 사이즈정보
+				mav.addObject("goodsSizeList", goodsService.getGoodsSizeList(paramsGoods));
+
 //				// 상품 고시정보
 //				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 //				// 상품 부위별 사이즈정보
 //				mav.addObject("goodsRegionSizeHtml", goodsService.getGoodsRegionsizeList(paramsGoods));
-//
-//			} else if ("S".equals(goods.getGoodsType())) {		// 셋트상품
+
+			} 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:정율
@@ -152,5 +153,30 @@ public class TsfGoodsController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2021. 2. 09.
+	 */
+	private void setGoods(Goods goods) {
+		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()));
+		// 회원 구분
+		if (TsfSession.getInfo() != null) {
+			goods.setCustGb(TsfSession.getInfo().getCustGb());
+			goods.setCustNo(TsfSession.getInfo().getCustNo());
+			goods.setCustGrade(TsfSession.getInfo().getCustGrade());
+		} else {
+			goods.setCustGb("00");
+			goods.setCustNo(0);
+			goods.setCustGrade("00");
+		}
+	}
 
 }

+ 1 - 1
src/main/java/com/style24/front/support/interceptor/TsfAflinkInterceptor.java

@@ -56,7 +56,7 @@ public class TsfAflinkInterceptor extends HandlerInterceptorAdapter {
 
 		InflowHst inflow = new InflowHst();
 		inflow.setAfLinkCd(afLinkCd);
-		inflow.setReturnUrl(request.getRequestURL() + queryString);
+		inflow.setPageUrl(request.getRequestURL() + queryString);
 		commonService.createInflowHst(inflow);
 
 		return super.preHandle(request, response, handler);

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

@@ -69,12 +69,13 @@ public class Goods extends TscBaseDomain {
 	private int costPrice;		//원가
 	private String adultYn;		//성인용품여부
 
+	private String colorCd;		//색상코드
 	private String brandnm;		//브랜드명
 	private String brandGrpNm;	//브랜드그룹명
 	private String frontGb;		//프론트구분
 	private String isApp;		//앱구분
 	private String siteCd;		//사이트코드
-//	private String cateGb;		//카테구분
+	private String cateGb;		//카테구분
 	private String afLinkCd;	//제휴링크코드
 	private String ithrCd;		//위치코드
 	private String contentsLoc;	//컨텐츠위치
@@ -87,7 +88,7 @@ public class Goods extends TscBaseDomain {
 	private String viewDt;		//미리보기일시
 	private String custGb;		//고객구분
 	private String custGrade;	//고객등급
-	private String custNo;		//고객번호
+	private int custNo;		//고객번호
 	private String soldoutGoodsDisplayYn = "N";	//품절노추여부
 	private int pointUnit = 10;	//포인트단위
 	private String goodsNmFull;	//상품타이틀+ 상품명
@@ -96,6 +97,7 @@ public class Goods extends TscBaseDomain {
 	private int stockQty;		//재고
 	private String soldoutYn;	//품절여부
 	private String wishYn;		//위시리스트여부
+	private String goodsComposeSearchYn;	//구성상품 조회여부
 	private String goodsCdIncludeYn;	//상품코드포함 여부
 	private String socialSq;	//소셜번호
 //	private String socialTypeNm;	//소셜타입명

+ 52 - 0
src/main/java/com/style24/persistence/domain/GoodsCompose.java

@@ -0,0 +1,52 @@
+package com.style24.persistence.domain;
+
+import java.util.Collection;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품 세트/딜 구성상품
+ *
+ * @author eskim
+ * @since 2020. 06. 11
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsCompose extends TscBaseDomain {
+
+	private String goodsCd;
+	private String goodsType;
+	private String goodsTypeNm;
+	private String compsGoodsCd;
+	private int dispOrd;
+	private int qty;
+	private int compsCurrPrice;
+	private String compsGoodsOptNm;
+	private String baseYn;
+	private String repYn;
+	private String useYn;
+
+	private String repGoodsCd;
+	private int compsCurrPriceOrg;
+	private int currPrice;
+	private String goodsStat;
+	private String sysImgNm;
+	private String crud;
+	private String compsGoodsNm;
+
+//	private String optionTitle;
+//	private String optionNm;
+//	private String optionInfo;
+//	private String setDetail;
+//	private int level;
+
+	private String selfGoodsYn;
+	private String supplyCompCd;
+
+	//private Collection<Coupon> goodsCouponList;
+	private Collection<GoodsNotiInfo> goodsNotiList;
+	private Collection<GoodsStock> goodsSizeList;
+	private Collection<GoodsImg> goodsImgList;
+}

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

@@ -1,10 +1,11 @@
 package com.style24.persistence.domain;
 
 import com.style24.persistence.TscBaseDomain;
+
 import lombok.Data;
 
 /**
- * 장바구니
+ * 상품옵션
  *
  * @author xodud1202
  * @since 2021.01.22

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

@@ -23,6 +23,6 @@ public class InflowHst extends TscBaseDomain {
 	private String frontGb;			// PC,MO구분
 	private String appYn;			// APP구분
 	private String osType;			// Mobile OS 구분
-	private String returnUrl;		// return URL
+	private String pageUrl;			// pageUrl
 
 }

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

@@ -39,5 +39,6 @@ public class Login extends TscBaseDomain {
 	private String ipAddr;			// IP주소
 	private String loginLdt;		// 최종로그인일시
 	private String loginFailYn;		// 로그인실패여부
+	private String custGrade;		// 고객등급
 
 }

+ 1 - 15
src/main/java/com/style24/persistence/mybatis/shop/TsfCommon.xml

@@ -15,7 +15,7 @@
 	</sql>
 	
 	<!-- 제휴링크 이력 추가 -->
-	<insert id="createInflowHst" parameterType="TsfInflow">
+	<insert id="createInflowHst" parameterType="InflowHst">
 		/* TsfCommon.createInflowHst */
 		INSERT INTO TB_INFLOW_HST (
 		       INFLOW_DT
@@ -42,20 +42,6 @@
 		FROM   TB_AF_LINK
 		WHERE  AF_LINK_CD = #{afLinkCd}
 		AND    USE_YN = 'Y'
-		
-		SELECT SYSDATE        AS INFLOW_DT
-		     , #{siteCd}      AS SITE_CD
-		     , #{inflowRefer} AS INFLOW_REFER
-		     , #{ipAddr}      AS IP_ADDR
-		     , AF_LINK_CD
-		     , #{jsessionId}  AS JSESSION_ID
-		     , #{frontGb}     AS FRONT_GB
-		     , #{appYn}       AS APP_YN
-		     , #{osType}      AS OS_TYPE
-		     , #{returnUrl}   AS PAGE_URL
-		FROM   TB_AF_LINK
-		WHERE  AF_LINK_CD = #{afLinkCd}
-		AND    USE_YN = 'Y'
 	</insert>
 	
 

+ 72 - 38
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -15,8 +15,8 @@
 	</sql>
 	
 	<!-- 상품상세보기이력 생성 -->
-	<insert id="createGoodsViewHistory" parameterType="GoodsViewHst">
-		/* TsfGoods.createGoodsViewHistory */
+	<insert id="createGoodsViewHst" parameterType="GoodsViewHst">
+		/* TsfGoods.createGoodsViewHst */
 		INSERT INTO TB_GOODS_VIEW_HST
 		    (
 		    GOODS_CD
@@ -51,7 +51,7 @@
 	<select id="getGoodsNavigation" parameterType="Goods" resultType="Cate4Srch">
 		/* TsfGoods.getGoodsNavigation */
 		SELECT G.FORMAL_GB
-		     , I.CATE_CD
+		     , I.CATE_NO
 		     , CATE1_NO
 		     , CATE1_NM
 		     , CATE2_NO
@@ -63,17 +63,17 @@
 		     , CATE5_NO
 		     , CATE5_NM
 		     , CATE_GB
-		     , LEAF_CATE_CD
+		     , LEAF_CATE_NO
 		FROM TB_GOODS G
-		   , TB_ITEMKIND_CATEGORY I
+		   , TB_ITEMKIND_CATE I
 		   , TB_CATE_4SRCH A
 		WHERE G.ITEMKIND_CD = I.ITEMKIND_CD
-		AND I.CATE_CD = A.LEAF_CATE_CD
+		AND I.CATE_NO = A.LEAF_CATE_NO
 		AND G.GOODS_CD = #{goodsCd}
 		AND A.CATE_TYPE = 'G031_10' -- 상품카테
 		AND A.CATE_GB = #{cateGb}
 		AND A.SITE_CD = #{siteCd}
-		AND ROWNUM = 1
+		LIMIT 1
 	</select>
 
 	<!-- 상품 정보 -->
@@ -91,8 +91,7 @@
 		     , G.ITEMKIND_CD
 		     , G.FORMAL_GB
 		     , G.LIST_PRICE
-		     , G.CURR_PRICE
-		     -- , G.DC_RATE
+		     , BP.CURR_PRICE
 		     , 100 - ROUND((BP.CURR_PRICE / G.LIST_PRICE) * 100 ,0) AS DC_RATE
 		     , G.SELF_GOODS_YN
 		     , G.GOODS_STAT
@@ -119,12 +118,8 @@
 		     , 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
+		     , (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 = IFNULL(#{colorCd}, IFNULL(G.MAIN_COLOR_CD,'00')) 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
@@ -132,6 +127,8 @@
 		                                                               END) ,0)
 		                                                FROM  VW_STOCK
 		                                                WHERE GOODS_CD = G.GOODS_CD
+		                                                AND OPT_CD1 =  (CASE WHEN G.SELF_GOODS_YN = 'N' THEN OPT_CD1 
+		                                                                    ELSE  IFNULL(#{colorCd}, IFNULL(G.MAIN_COLOR_CD,'00')) END)
 		                                                GROUP BY GOODS_CD )
 		            ELSE (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
 		                                      ELSE CURR_STOCK_QTY
@@ -144,7 +141,7 @@
 		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 
+		            FN_GET_BENEFIT_PRICE(#{siteCd},#{frontGb},GOODS_CD, 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
@@ -199,30 +196,16 @@
 		LIMIT 1
 	</select>
 	
-		<!-- 상품 다른컬러 목록 -->
-	<select id="getGoodsOtherColorList" parameterType="Goods" resultType="Goods">
-		/* TsfGoods.getGoodsOtherColorList */
+	<!-- 상품 옵션1 목록 -->
+	<select id="getGoodsOption1List" parameterType="Goods" resultType="GoodsStock">
+		/* TsfGoods.getGoodsOption1List */
 		SELECT Z.*
 		FROM (
 		    SELECT G.GOODS_CD
-		         , G.GOODS_NM
-		         , G.GOODS_TNM
-		         , 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
-		         , G.ITEMKIND_CD
-		         , G.FORMAL_GB
-		         , G.LIST_PRICE
-		         , G.CURR_PRICE
 		         , G.SELF_GOODS_YN
 		         , G.GOODS_STAT
 		         , G.MAIN_COLOR_CD
-		         , G.SEX_GB
-		         , FN_GET_CODE_NM('G007',G.SEX_GB) AS SEX_NM
-		         , G.SUPPLY_COMP_CD
-		         , G.GOODS_TYPE
-		         , (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
+		         , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(#{colorCd}, IFNULL(G.MAIN_COLOR_CD,'00')) AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
 		         , IFNULL( (CASE WHEN G.GOODS_CD = #{goodsCd} THEN  1 
 		                         ELSE ( CASE WHEN G.GOODS_TYPE = 'G056_N'THEN S.STOCK_QTY ELSE S1.STOCK_QTY END) 
 		                         END)
@@ -235,6 +218,7 @@
 		    FROM TB_GOODS G
 		    INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		                          AND B.USE_YN = 'Y'
+		    INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD
 		    LEFT OUTER JOIN (SELECT GOODS_CD
 		                          , MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
 		                                     ELSE CURR_STOCK_QTY
@@ -251,7 +235,6 @@
 		                     GROUP BY GOODS_CD) S1 G.GOODS_CD = S1.GOODS_CD
 		    WHERE G.GOODS_NUM = (SELECT GOODS_NUM FROM TB_GOODS WHERE GOODS_CD = #{goodsCd})
 		    AND G.GOODS_TYPE = 'G056_N' -- 일반상품
-		    -- AND G.SELF_MALL_YN = 'Y' -- 자사몰 노출
 		    <if test='goodsCdIncludeYn != null and goodsCdIncludeYn == "N"'>
 		    AND G.GOODS_CD <![CDATA[<>]]> #{goodsCd}
 		    </if>
@@ -297,20 +280,71 @@
 	</select>
 		
 	<!-- 상품 이미지 정보 -->
-	<select id="getGoodsImg" parameterType="String" resultType="GoodsImg">
-		/* TsfGoods.getGoodsImg */
+	<select id="getGoodsImgList" parameterType="String" resultType="GoodsImg">
+		/* TsfGoods.getGoodsImgList */
 		SELECT GOODS_CD
 		     , COLOR_CD
 		     , DISP_ORD
 		     , SYS_IMG_NM
 		     , DEFAULT_IMG_YN
 		     , MOUSEOVER_IMG_YN
-		     , REG_NO
 		FROM TB_GOODS_IMG
 		WHERE GOODS_CD = #{goodsCd}
 		ORDER BY DISP_ORD
 	</select>
 	
+	<!-- 딜상품 구성상품정보 조회 -->
+	<select id="getGoodsDealComposeList"  parameterType="Goods" resultType="GoodsCompose">
+		/* TsfGoods.getGoodsDealComposeList */
+		SELECT E.GOODS_CD
+		     , E.COMPS_GOODS_CD
+		     , E.DISP_ORD
+		     , E.COMPS_GOODS_OPT_NM
+		     , G.LIST_PRICE
+		     , BP.CURR_PRICE
+		     , 100 - ROUND((BP.CURR_PRICE / G.LIST_PRICE) * 100 ,0) AS DC_RATE
+		     , G.DELV_FEE
+		     , G.MIN_ORD_AMT
+		     , G.MIN_ORD_QTY
+		     , G.MAX_ORD_QTY
+		     , G.DAY_MAX_ORD_QTY
+		     , (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.BRAND_CD
+		     , (CASE WHEN B.DISP_NM_LANG = 'EN' THEN B.BRAND_ENM ELSE B.BRAND_KNM END) AS BRAND_NM
+		     , G.SUPPLY_COMP_CD
+		     , (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
+		     , (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_COMPOSE
+		                  WHERE GOODS_CD= G.GOODS_CD
+		                  GROUP BY GOODS_CD )
+		            END) AS STOCK_QTY
+		FROM TB_GOODS G
+		INNER JOIN TB_GOODS_COMPOSE E ON G.GOODS_CD = E.COMPS_GOODS_CD 
+		                              AND E.GOODS_TYPE = 'D'
+		                              AND E.USE_YN = 'Y'
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		                      AND B.USE_YN = 'Y'
+		INNER JOIN TB_SITE_BRAND SB ON B.BRAND_CD = SB.BRAND_CD
+		                            AND SB.USE_YN = 'Y'
+		                            AND SB.SITE_CD = #{siteCd}
+		INNER JOIN (SELECT GOODS_CD, 
+		            FN_GET_BENEFIT_PRICE(#{siteCd},#{frontGb},GOODS_CD,CURR_PRICE,#{custGb},#{floorUnit},#{custGrade}) AS CURR_PRICE 
+		            FROM TB_GOODS
+		            WHERE GOODS_CD = #{goodsCd}) BP ON G.GOODS_CD = BP.GOODS_CD
+		WHERE E.GOODS_CD = #{goodsCd}
+		AND G.SELF_MALL_YN = 'Y' -- 자사몰 노출
+		ORDER BY E.DISP_ORD
+	</select>
+	
 	<!-- 구성 상품 정보 -->
 	<select id="getGoodsCompsInfo" parameterType="Goods" resultType="Goods">
 		/* TsfGoods.getGoodsCompsInfo */