sowon4187 4 лет назад
Родитель
Сommit
03ba486702

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

@@ -512,4 +512,24 @@ public interface TsfPlanningDao {
 	 */
 	Collection<Plan> getPlanContentInfo(Plan plan);
 	
+	/**
+	 * 총알배송 브랜드 리스트 
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @date 2021. 6. 29
+	 */
+	Collection<Plan> getShotBrandList();
+	
+	/**
+	 * 총알배송 브랜드 리스트 
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @date 2021. 6. 29
+	 */
+	Collection<Plan> getShotDeliveryGoodsList(Plan plan);
+	
 }

+ 24 - 0
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -705,5 +705,29 @@ public class TsfPlanningService {
 	 public Collection<Plan> getPlanContentInfo(Plan plan) {
 		 return planningDao.getPlanContentInfo(plan);
 	 }
+	 
+	 /**
+	 * 총알배송 브랜드 리스트 
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @date 2021. 6. 29
+	 */
+	public Collection<Plan> getShotBrandList(){
+		return planningDao.getShotBrandList();
+	}
+	
+	/**
+	 * 총알배송 브랜드 상품 리스트 
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @date 2021. 6. 29
+	 */
+	public Collection<Plan> getShotDeliveryGoodsList(Plan plan){
+		return planningDao.getShotDeliveryGoodsList(plan);
+	}
 	
 }

+ 3 - 4
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -578,11 +578,10 @@ public class TsfPlanningController extends TsfBaseController {
 	 * @since 2021. 3. 30
 	 */
 	@GetMapping("/shot/delivery/guide/form")
-	public ModelAndView planningShotDeliveryForm(@RequestParam(value="planGb",required = true)String planGb ,Plan plan) throws Exception {
+	public ModelAndView planningShotDeliveryForm(Plan plan) throws Exception {
 		ModelAndView mav = new ModelAndView();
 		Integer planSq = planningService.getShotPlanSq(plan);
 		plan.setPlanSq(planSq);
-		plan.setPlanGb(planGb);
 		
 		CustDeliveryAddr addr = new CustDeliveryAddr();
 		Integer custNo = null;
@@ -601,9 +600,9 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setCustGb(TsfSession.getCustGb());
 		// 코너 목록
-		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
+		mav.addObject("shotBrandList", planningService.getShotBrandList());
 		// 코너 상품
-		mav.addObject("planCornerGoodsList", planningService.getPlanningCornerGoodsList(plan));
+		mav.addObject("shotBrandGoodsList", planningService.getShotDeliveryGoodsList(plan));
 
 		addr.setCustNo(custNo);
 		

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

@@ -94,6 +94,7 @@ public class Plan extends TscBaseDomain {
 	private String viewDt;			// 미리보기 일시
 	private String preview;			// 미리보기 여부 (Y:미리보기)
 	private Integer attachSq;
+	private String brandNm;
 
 	// 기획전 브랜드
 	private Integer brandGroupNo;	//기획전브랜드그룹번호

+ 190 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -1734,4 +1734,194 @@
 		AND DISP_YN = 'Y'
 	</select>
 	
+	<select id="getShotBrandList" resultType="Plan" parameterType="Plan">
+		/* TsfPlanning.getShotBrandList */	
+		SELECT SDB.BRAND_GROUP_NO
+		      , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                BG.BRAND_GROUP_ENM
+		            ELSE
+		                BG.BRAND_GROUP_KNM
+		       END                                     AS BRAND_NM
+		  , SDB.CORNER_DISP_TYPE
+		  , SDB.DISP_ORD
+		  , SDB.REG_DT
+		FROM TB_SHOT_DELV_BRAND SDB INNER JOIN TB_BRAND_GROUP BG 
+		  ON SDB.BRAND_GROUP_NO = BG.BRAND_GROUP_NO 
+		WHERE BG.USE_YN = 'Y'
+		ORDER BY SDB.DISP_ORD 
+	</select>
+	
+	<!-- 총알배송 상품 목록 -->
+	<select id="getShotDeliveryGoodsList" parameterType="Plan" resultType="Plan">
+		/* TsfPlanning.getShotDeliveryGoodsList */	
+		WITH TAB_BRAND_GOODS AS (
+		   SELECT RNK.*
+		        ,(CASE WHEN RNK.LIST_PRICE > 0 THEN 100 - ROUND((RNK.CURR_PRICE / RNK.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
+		      FROM
+		         (
+		          SELECT  ROW_NUMBER() OVER (PARTITION BY GOODS.BRAND_GROUP_NO ORDER BY GOODS.DISP_ORD DESC) AS RNUM
+		                 , GOODS.*
+		            FROM 
+		                (
+		                 SELECT 
+		                    CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                             BG.BRAND_GROUP_ENM
+		                         ELSE
+		                             BG.BRAND_GROUP_KNM
+		                    END                                    AS BRAND_NM /*브랜드그룹명*/
+		                  , SDB.BRAND_GROUP_NO 
+		                  , SDB.DISP_ORD
+		                  , G.GOODS_CD 
+		                  , G.GOODS_NM 
+		                  , G.GOODS_GB                                               /*상품구분*/
+		                  , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		                  , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		                  , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		                  , G.GOODS_TNM                                              /*상품타이틀명*/
+		                  , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		                  , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                  , G.CURR_PRICE                                             /*현재판매가*/
+		                FROM   TB_SHOT_DELV_BRAND SDB
+		                                 INNER JOIN TB_SHOT_DELV_GOODS SDG
+		                        ON SDB.BRAND_GROUP_NO = SDG.BRAND_GROUP_NO
+		                                 INNER JOIN TB_GOODS G
+		                        ON SDG.GOODS_CD = G.GOODS_CD 
+		                          		  INNER JOIN TB_BRAND B
+		                        ON G.BRAND_CD = B.BRAND_CD 
+		                                 INNER JOIN TB_BRAND_GROUP BG 
+		                        ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO 
+		                                 INNER JOIN TB_GOODS_STOCK GS
+		                        ON SDG.GOODS_CD = GS.GOODS_CD 
+		                WHERE  1=1  
+		                AND    G.GOODS_CD NOT IN (SELECT GOODS_CD FROM TB_GOODS_SHOT_DELV_SKIP GSDS)
+		                AND    G.SELF_GOODS_YN = 'Y'
+		                AND    G.SELF_MALL_YN = 'Y'
+		                AND    SDG.DEL_YN = 'N'
+		                AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		                AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*현재 판매되는 상품*/
+		                AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		                AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		                AND    GS.STOCK_QTY  <![CDATA[>]]>  0 /*재고있는상품*/
+		                UNION 
+		                SELECT 
+		                       CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                                BG.BRAND_GROUP_ENM
+		                            ELSE
+		                                BG.BRAND_GROUP_KNM
+		                       END                                    AS BRAND_NM /*브랜드그룹명*/
+		                     , SDB.BRAND_GROUP_NO 
+		                     , SDB.DISP_ORD
+		                     , G.GOODS_CD 
+		                     , G.GOODS_NM 
+		                     , G.GOODS_GB                                               /*상품구분*/
+		                     , G.FOREIGN_BUY_YN                                         /*해외구매대행여부*/
+		                     , G.PARALLEL_IMPORT_YN                                     /*병행수입여부*/
+		                     , G.ORDER_MADE_YN                                          /*주문제작여부*/
+		                     , G.GOODS_TNM                                              /*상품타이틀명*/
+		                     , G.MAIN_COLOR_CD                                          /*대표색상코드*/
+		                     , G.LIST_PRICE                                             /*정상가(최초판매가)*/
+		                     , G.CURR_PRICE                                             /*현재판매가*/
+		                FROM   TB_SHOT_DELV_BRAND SDB
+		                                  INNER JOIN TB_BRAND_GROUP BG 
+		                        ON SDB.BRAND_GROUP_NO = BG.BRAND_GROUP_NO 
+		                                  INNER JOIN TB_BRAND B
+		                        ON BG.BRAND_GROUP_NO = B.BRAND_GROUP_NO 
+		                                 INNER JOIN TB_GOODS G
+		                        ON B.BRAND_CD = G.BRAND_CD 
+		                                 INNER JOIN TB_GOODS_STOCK GS
+		                        ON G.GOODS_CD = GS.GOODS_CD 
+		                WHERE  1=1  
+		                AND    G.GOODS_CD NOT IN (SELECT GOODS_CD FROM TB_GOODS_SHOT_DELV_SKIP GSDS)
+		                AND    G.SELF_GOODS_YN = 'Y'
+		                AND    G.SELF_MALL_YN = 'Y'
+		                AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		                AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*현재 판매되는 상품*/
+		                AND    B.USE_YN = 'Y' /*사용하는 브랜드*/
+		                AND    BG.USE_YN = 'Y' /*사용하는 브랜드그룹*/
+		                AND    GS.STOCK_QTY  <![CDATA[>]]>  0 /*재고있는상품*/
+		               )GOODS 
+		        )RNK
+		   WHERE RNK.RNUM <![CDATA[<=]]> 100
+		)
+		, TAB_GOODS_IMG AS (
+		        /* 상품의 이미지 */
+		            SELECT BG.GOODS_CD
+		                 , MAX(CASE WHEN GI.DEFAULT_IMG_YN = 'Y' THEN GI.SYS_IMG_NM ELSE NULL END)   AS SYS_IMG_NM
+		            FROM   TAB_BRAND_GOODS BG
+		                 , TB_GOODS_IMG GI
+		            WHERE  BG.GOODS_CD = GI.GOODS_CD
+		            AND    BG.MAIN_COLOR_CD = GI.COLOR_CD
+		            AND    (GI.DEFAULT_IMG_YN = 'Y' OR GI.MOUSEOVER_IMG_YN = 'Y')
+		            GROUP  BY BG.GOODS_CD
+		)
+		, TAB_COLORCHIP AS (
+		            /* 상품 컬러칩 */
+		            SELECT BG.GOODS_CD
+		                 , GROUP_CONCAT(DISTINCT CONCAT(C.COLOR_CD,':',CC.CD_DESC) ORDER BY CC.DISP_ORD SEPARATOR ',') AS COLOR_CHIPS
+		            FROM   TAB_BRAND_GOODS BG
+		                 , TB_OPTION O
+		                 , TB_COLOR C
+		                 , TB_COMMON_CODE CC
+		            WHERE  BG.GOODS_CD = O.GOODS_CD
+		            AND    O.OPT_CD1 = C.COLOR_CD
+		            AND    C.COLOR_GRP_CD = CC.CD
+		            AND    O.DISP_YN = 'Y'
+		            AND    C.USE_YN = 'Y'
+		            AND    CC.USE_YN = 'Y'
+		            GROUP  BY BG.GOODS_CD
+		)
+		, TAB_GOODS_BENEFIT AS (
+		            /* 상품혜택 */
+		            SELECT GOODS_CD
+		                 , GROUP_CONCAT(CONCAT(BENEFIT_GB,':',BENEFIT_NM) ORDER BY NUMB SEPARATOR ',') AS ICON
+		            FROM   (
+		                    SELECT BG.GOODS_CD
+		                         , GB.BENEFIT_GB
+		                         , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
+		                                WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
+		                                WHEN GB.BENEFIT_GB = '30' THEN '사은품'
+		                                WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		                                ELSE '총알배송'
+		                           END                               AS BENEFIT_NM
+		                         , RANK() OVER(PARTITION BY BG.GOODS_CD
+		                                       ORDER BY GB.BENEFIT_GB
+		                                              , GB.GOODS_CD) AS NUMB
+		                    FROM   TAB_BRAND_GOODS BG
+		                         , TB_GOODS_BENEFIT GB
+		                    WHERE  BG.GOODS_CD = GB.GOODS_CD
+		                   ) Z
+		            GROUP  BY GOODS_CD
+		)
+		 SELECT 
+		        BG.RNUM
+		      , BG.BRAND_NM
+		      , BG.GOODS_CD
+		      , BG.BRAND_GROUP_NO
+		      , FN_GET_GOODS_NM(BG.GOODS_NM,BG.GOODS_GB,BG.FOREIGN_BUY_YN,BG.PARALLEL_IMPORT_YN,BG.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
+		      , BG.GOODS_NM
+		      , BG.GOODS_TNM
+		      , BG.MAIN_COLOR_CD
+		      , BG.LIST_PRICE
+		      , FN_GET_BENEFIT_PRICE( #{frontGb} /**P*/,BG.GOODS_CD,BG.CURR_PRICE,#{custGb})                              AS CURR_PRICE    /*현재판매가*/
+		      , GI.SYS_IMG_NM
+		      , C.COLOR_CHIPS                                                                                                      /*컬러칩*/
+		      , GB.ICON                                                                                                            /*혜택아이콘*/
+		       <choose>
+	                 <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+	             , IF(W.GOODS_CD IS NULL,'','likeit')                                                                AS LIKE_IT       /*위시리스트담긴상품*/
+	                 </when>
+	                 <otherwise>
+	             , ''                                                                                                AS LIKE_IT       /*위시리스트담긴상품*/
+	                 </otherwise>
+		      </choose>
+		FROM   TAB_BRAND_GOODS BG
+		LEFT OUTER JOIN TAB_GOODS_IMG GI ON BG.GOODS_CD = GI.GOODS_CD
+		LEFT OUTER JOIN TAB_COLORCHIP C ON BG.GOODS_CD = C.GOODS_CD
+		LEFT OUTER JOIN TAB_GOODS_BENEFIT GB ON BG.GOODS_CD = GB.GOODS_CD
+		<if test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		LEFT OUTER JOIN TB_WISHLIST W ON BG.GOODS_CD = W.GOODS_CD
+		        AND W.CUST_NO = #{custNo}
+        </if>
+	</select>
+	
 </mapper>

+ 10 - 12
src/main/webapp/WEB-INF/views/mob/planning/PlanningShotGuideFormMob.html

@@ -118,8 +118,8 @@
                     </div>
                     <div class="popup_con">
                         <div class="button_list clear">
-                        	<th:block th:if="${planCornerList!=null}" th:each="a, cornerStat : ${planCornerList}">
-                           	 <button type="button" th:onclick="fnCornerClick([[${cornerStat.index+1}]], [[${a.cornerNm}]])"><span th:text="${a.cornerNm}"></span></button>
+                        	<th:block th:if="${shotBrandList!=null}" th:each="a, cornerStat : ${shotBrandList}">
+                           	 <button type="button" th:onclick="fnCornerClick([[${cornerStat.index+1}]], [[${a.brandNm}]])"><span th:text="${a.brandNm}"></span></button>
                             </th:block>
                         </div>
                     </div>
@@ -166,17 +166,17 @@
 <script th:inline="javascript">
 let custAddr = [[${custAddr}]];
 let customerInfo = [[${customerInfo}]];
-let planCornerList = [[${planCornerList}]];
-let planCornerGoodsList = [[${planCornerGoodsList}]];
-if(planCornerList.length>0){
+let shotBrandList = [[${shotBrandList}]];
+let shotBrandGoodsList = [[${shotBrandGoodsList}]];
+if(shotBrandList.length>0){
 	var html = '';
-	$.each(planCornerList, function(idx, item)  {
+	$.each(shotBrandList, function(idx, item)  {
 		html += '<div class="inner" id="type'+idx+'">';
 		html += '	<div class="dp_listItems_wrap type1">';
-		html += '		<h2 class="dp_subtitle">'+item.cornerNm+'</h2>';
+		html += '		<h2 class="dp_subtitle">'+item.brandNm+'</h2>';
 		html += '			<div class="itemsGrp">';
-		$.each(planCornerGoodsList, function(idx2, item2)  {
-			if (item2.cornerNm == item.cornerNm) {
+		$.each(shotBrandGoodsList, function(idx2, item2)  {
+			if (item2.brandGroupNo == item.brandGroupNo) {
 			html += '				<div class="item_prod">';
 			html += '					<div class="item_state">';
 			if(item2.likeIt === 'likeit'){
@@ -333,8 +333,6 @@ var fnCornerClick = function (result1,result2) {
 	
 }
 
-
-
 //팝업_닫기
 $('.popup_close').on("click",function(){
     $('.popup_box').hide().removeClass('active');
@@ -344,7 +342,7 @@ $('.popup_close').on("click",function(){
 
 $(document).ready(function(){
 	shotBody();
-	$("#filter").text(planCornerList[0].cornerNm);
+	$("#filter").text(shotBrandList[0].brandNm);
 	// 다른기획전
 
 	$(window).scroll(function(){

+ 10 - 19
src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html

@@ -28,11 +28,6 @@
 		</div>
 		<div class="wrap">
 			<div class="content wide dp_Bulletship"> <!-- 페이지특정 클래스 = dp_Bulletship -->
-				<div class="cont_head">
-					<div>
-                        <h3>총알배송</h3>
-                    </div>
-				</div>
 				<div class="cont_body">
 				    <div class="bulletship">
 						<!-- <div class="bulletship_head" th:utext="${#strings.replace(#strings.replace(shotHtmlTop.fsrcPc,'&amplt;','<'),'&ampgt;','>')}"> -->
@@ -148,43 +143,39 @@
 /*<![CDATA[*/
 let custAddr = [[${custAddr}]];
 let customerInfo = [[${customerInfo}]];
-let planCornerList = [[${planCornerList}]];
-let planCornerGoodsList = [[${planCornerGoodsList}]];
+let shotBrandList = [[${shotBrandList}]];
+let shotBrandGoodsList = [[${shotBrandGoodsList}]];
 // 로그인 확인
-if(planCornerList.length>0){
+if(shotBrandList.length>0){
 	var html = '';
 	
 	html += '<div class="cont_head">';
 	html += '     <div class="sticky_nav">';
 	html += '         <ul>    ';
-	$.each(planCornerList, function(idx, item)  {
-		html += '             <li><a href="#brand'+idx+'">'+item.cornerNm+'</a></li>';
+	$.each(shotBrandList, function(idx, item)  {
+		html += '             <li><a href="#brand'+idx+'">'+item.brandNm+'</a></li>';
 	})
 	html += '         </ul>';
 	html += '     </div>';
 	html += '</div>';
 	html += '<div class="cont_body">';
 	html += '     <div class="list_content">';
-	$.each(planCornerList, function(idx, item)  {
+	$.each(shotBrandList, function(idx, item)  {
 		html += '         <div id="brand'+idx+'">';
 		html += '             <div class="item_header">';
-		html += '                 <h4>'+item.cornerNm+'</h4>';
+		html += '                 <h4>'+item.brandNm+'</h4>';
 		html += '             </div>';
 		html += '             <div class="itemsGrp';
-		if (item.cornerDispType == 'G045_1') {
-			html += ' cut1';
-		}else if(item.cornerDispType == 'G045_2'){
+		if(item.cornerDispType == 'G045_2'){
 			html += ' cut2';
-		}else if(item.cornerDispType == 'G045_3'){
-			html += ' cut3';
 		}else if(item.cornerDispType == 'G045_4'){
 			html += ' cut4';
 		}else if(item.cornerDispType == 'G045_5'){
 			html += ' cut5';
 		}
 		html += '">';
-		$.each(planCornerGoodsList, function(idx2, item2)  {
-			if (item2.cornerNm == item.cornerNm) {
+		$.each(shotBrandGoodsList, function(idx2, item2)  {
+			if (item2.brandGroupNo == item.brandGroupNo) {
 				html += '                 <div class="item_prod">';
 				html += '                     <div class="item_state">';
 				if(item2.likeIt === 'likeit'){