소스 검색

Merge remote-tracking branch 'origin/develop' into order

card007 5 년 전
부모
커밋
c454d2ffc8
23개의 변경된 파일831개의 추가작업 그리고 454개의 파일을 삭제
  1. 12 1
      src/main/java/com/style24/front/biz/dao/TsfCouponDao.java
  2. 8 0
      src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java
  3. 11 1
      src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java
  4. 23 2
      src/main/java/com/style24/front/biz/service/TsfCouponService.java
  5. 13 0
      src/main/java/com/style24/front/biz/service/TsfDisplayService.java
  6. 12 0
      src/main/java/com/style24/front/biz/service/TsfPlanningService.java
  7. 14 0
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  8. 20 13
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  9. 57 15
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  10. 4 0
      src/main/java/com/style24/persistence/domain/Contents.java
  11. 3 0
      src/main/java/com/style24/persistence/domain/GnbTab.java
  12. 5 0
      src/main/java/com/style24/persistence/domain/Plan.java
  13. 272 178
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  14. 42 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  15. 14 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  16. 40 124
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  17. 104 14
      src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html
  18. 41 28
      src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html
  19. 1 5
      src/main/webapp/WEB-INF/views/web/common/layout/PlanningLayoutWeb.html
  20. 65 7
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  21. 27 43
      src/main/webapp/WEB-INF/views/web/mypage/MypageCouponDetailFormWeb.html
  22. 29 15
      src/main/webapp/WEB-INF/views/web/mypage/MypageCouponFormWeb.html
  23. 14 3
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

+ 12 - 1
src/main/java/com/style24/front/biz/dao/TsfCouponDao.java

@@ -94,7 +94,7 @@ public interface TsfCouponDao {
 	 * @author sowon
 	 * @since 2021. 03. 17
 	 */
-	Coupon getCouponDetailInfo(int cpnId);
+	Coupon getCouponDetailInfo(Coupon coupon);
 	
 	/**
 	 * 마이페이지 등급쿠폰 다운가능 쿠폰 정보 조회
@@ -127,4 +127,15 @@ public interface TsfCouponDao {
 	Coupon getCustGradePolicyCoupon(Coupon coupon);
 	
 	
+	/**
+	 * 기획전 쿠폰 디테일 정보
+	 * @param coupon - 쿠폰정보
+	 * @return Coupon
+	 * @author sowon
+	 * @since 2021. 03. 17
+	 */
+	Coupon getPlanCouponDetailInfo(Coupon coupon);
+	
+	
+	
 }

+ 8 - 0
src/main/java/com/style24/front/biz/dao/TsfDisplayDao.java

@@ -208,4 +208,12 @@ public interface TsfDisplayDao {
 	 */
 	String getBrandGroupDefaultCategoryYn(Integer brandGroupNo);
 
+	/**
+	 * GNB TAB 기획전배너 목록
+	 * @param contents - 컨텐츠 정보
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 14
+	 */
+	Collection<Contents> getGnbTabBannerList(Contents contents);
 }

+ 11 - 1
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -273,7 +273,7 @@ public interface TsfPlanningDao {
 	int getCustAnswerCount(Plan plan);
 	
 	/**
-	 * 설문조사 선착순 운트
+	 * 설문조사 선착순 운트
 	 *
 	 * @param poll
 	 * @return int
@@ -332,6 +332,16 @@ public interface TsfPlanningDao {
 	 */
 	int getAttendEntryCount(Plan plan);
 	
+	/**
+	 * 출석체크 혜택 리스트
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 14
+	 */
+	Collection<Plan> getAttendBenefitList(Plan plan);
+	
 	/**
 	 * 고객이 출석한 일 리스트
 	 *

+ 23 - 2
src/main/java/com/style24/front/biz/service/TsfCouponService.java

@@ -433,6 +433,8 @@ public class TsfCouponService {
 	 */
 	public Collection<Coupon> getMypageCouponList(Coupon coupon) {
 		coupon.setCustNo(TsfSession.getInfo().getCustNo());
+		coupon.setFrontGb(TsfSession.getFrontGb());
+		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
 		return couponDao.getMypageCouponList(coupon);
 	}
 	
@@ -445,6 +447,8 @@ public class TsfCouponService {
 	 */
 	public Coupon getMypageCouponInfo(Coupon param) {
 		param.setCustNo(TsfSession.getInfo().getCustNo());
+		param.setFrontGb(TsfSession.getFrontGb());
+		param.setSiteCd(TscConstants.Site.STYLE24.value());
 		return couponDao.getMypageCouponInfo(param);
 	}
 	
@@ -455,8 +459,11 @@ public class TsfCouponService {
 	 * @author sowon
 	 * @since 2021. 03. 16
 	 */
-	public Coupon getCouponDetailInfo(int cpnId) {
-		return couponDao.getCouponDetailInfo(cpnId);
+	public Coupon getCouponDetailInfo(Coupon coupon) {
+		coupon.setCustNo(TsfSession.getInfo().getCustNo());
+		coupon.setFrontGb(TsfSession.getFrontGb());
+		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
+		return couponDao.getCouponDetailInfo(coupon);
 	}
 	
 	
@@ -585,5 +592,19 @@ public class TsfCouponService {
 		}
 		return resultCnt;
 	}
+	
+	/**
+	 * 기획전 쿠폰 디테일 정보
+	 * @param cpnId
+	 * @return
+	 * @author sowon
+	 * @since 2021. 04. 14
+	 */
+	public Coupon getPlanCouponDetailInfo(Coupon coupon) {
+		coupon.setFrontGb(TsfSession.getFrontGb());
+		coupon.setSiteCd(TscConstants.Site.STYLE24.value());
+		return couponDao.getPlanCouponDetailInfo(coupon);
+	}
+	
 
 }

+ 13 - 0
src/main/java/com/style24/front/biz/service/TsfDisplayService.java

@@ -1,6 +1,7 @@
 package com.style24.front.biz.service;
 
 import java.util.Collection;
+import java.util.ArrayList;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
@@ -476,4 +477,16 @@ public class TsfDisplayService {
 		return displayDao.getAllBrandList(brandGroup);
 	}
 
+	/**
+	 * GNB TAB 기획전배너 리스트
+	 * @param Contents
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 14
+	 */
+	public Collection<Contents> getGnbTabBannerlist(Contents contenst){
+		Collection<Contents> contentsList = displayDao.getGnbTabBannerList(contenst);
+		return contentsList;
+	}
+
 }

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

@@ -516,6 +516,18 @@ public class TsfPlanningService {
 		plan.setCustNo(TsfSession.getInfo().getCustNo());
 		return planningDao.getCustAttendEntryList(plan);
 	}
+	
+	/**
+	 * 출석체크 혜택 리스트
+	 *
+	 * @param Plan
+	 * @return Collection<Plan>
+	 * @author sowon
+	 * @date 2021. 4. 14
+	 */
+	public Collection<Plan> getAttendBenefitList(Plan plan){
+		return planningDao.getAttendBenefitList(plan);
+	}
 
 	/**
 	 * 기획전/이벤트 댓글

+ 14 - 0
src/main/java/com/style24/front/biz/web/TsfDisplayController.java

@@ -664,4 +664,18 @@ public class TsfDisplayController extends TsfBaseController {
 		return result;
 	}
 
+	/**
+	 * GNB TAB 기획전배너 리스트
+	 * @param Contents
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 4. 14
+	 */
+	@GetMapping("/gnb/tab/banner/list")
+	@ResponseBody
+	public Collection<Contents> getGnbTabBannerlist(Contents contents) {
+		contents.setContentsLoc("STAB003");
+		return displayService.getGnbTabBannerlist(contents);
+	}
+
 }

+ 20 - 13
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1300,6 +1300,22 @@ public class TsfMypageController extends TsfBaseController {
 
 		return mav;
 	}
+	
+	/**
+	 * 퀵메뉴 보유한 쿠폰리스트
+	 * @return
+	 * @author sowon
+	 * @since 2021. 4. 14
+	 */
+	@GetMapping("/quick/own/coupon/list")
+	@ResponseBody
+	public Collection<Coupon> getQuickOwnCouponList() {
+		Coupon coupon = new Coupon();
+		Collection<Coupon> ownCouponList = new ArrayList<>();
+		coupon.setQuickYn("Y");
+		ownCouponList  = couponService.getMypageCouponList(coupon);
+		return ownCouponList;
+	}
 
 	/**
 	 * 마이페이지 쿠폰 상세보기 팝업
@@ -1308,22 +1324,13 @@ public class TsfMypageController extends TsfBaseController {
 	 * @author sowon	
 	 * @since 2021. 03. 17
 	 */
-	@GetMapping(value = "/coupon/detailPop")
-	public ModelAndView mypageCouponDetailPop(@RequestParam(value = "cpnId") int cpnId) {
+	@PostMapping(value = "/coupon/detailPop")
+	public ModelAndView mypageCouponDetailPop(@RequestBody Coupon coupon) {
 		ModelAndView mav = new ModelAndView();
 
 		// 쿠폰 - 기본정보
-		mav.addObject("couponDetailInfo", couponService.getCouponDetailInfo(cpnId));
-		// 쿠폰적용대상 - 공급업체 조회
-		mav.addObject("cpnDtlRefvalSupplyCompList", coreCouponService.getCouponRefvalSupplyCompList(cpnId));
-		// 쿠폰적용대상 - 적용상품 조회
-		mav.addObject("cpnDtlRefvalApplyGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_10"));
-		// 쿠폰적용대상 - 카테고리 조회
-		mav.addObject("cpnDtlRefvalCateList", coreCouponService.getCouponRefvalCategoryList(cpnId));
-		// 쿠폰적용대상 - 브랜드 조회
-		mav.addObject("cpnDtlRefvalBrandList", coreCouponService.getCouponRefvalBrandList(cpnId));
-		// 쿠폰적용대상 - 제외상품 조회
-		mav.addObject("cpnDtlRefvalExceptGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_14"));
+		mav.addObject("couponDetailInfo", couponService.getCouponDetailInfo(coupon));
+		
 		mav.setViewName(super.getDeviceViewName("mypage/MypageCouponDetailForm"));
 		return mav;
 	}

+ 57 - 15
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -20,6 +20,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.style24.core.biz.service.TscCouponService;
 import com.style24.core.biz.service.TscCustomerService;
+import com.style24.core.biz.service.TscPointService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCouponService;
@@ -32,6 +33,7 @@ import com.style24.persistence.domain.CustDeliveryAddr;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
+import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Poll;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.WishList;
@@ -72,6 +74,9 @@ public class TsfPlanningController extends TsfBaseController {
 
 	@Autowired
 	private TsfDisplayService displayService;
+	
+	@Autowired
+	private TscPointService corePointService;
 
 	/**
 	 * 기획전 메인 화면
@@ -238,6 +243,24 @@ public class TsfPlanningController extends TsfBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 기획전 쿠폰 상세보기 팝업
+	 *
+	 * @return
+	 * @author sowon	
+	 * @since 2021. 04. 14
+	 */
+	@PostMapping(value = "/coupon/detailPop")
+	public ModelAndView planningCouponDetailPop(@RequestBody Coupon coupon) {
+		ModelAndView mav = new ModelAndView();
+
+		// 쿠폰 - 기본정보
+		mav.addObject("couponDetailInfo", couponService.getPlanCouponDetailInfo(coupon));
+		
+		mav.setViewName(super.getDeviceViewName("mypage/MypageCouponDetailForm"));
+		return mav;
+	}
+	
 	/**
 	 * 기획전/이벤트 댓글 리스트
 	 *
@@ -303,21 +326,11 @@ public class TsfPlanningController extends TsfBaseController {
 	 * @since 2021. 04. 01
 	 */
 	@GetMapping(value = "/coupon/detail")
-	public ModelAndView mypageCouponDetailPop(@RequestParam(value = "cpnId") int cpnId) {
+	public ModelAndView mypageCouponDetailPop(@RequestBody Coupon coupon) {
 		ModelAndView mav = new ModelAndView();
 
 		// 쿠폰 - 기본정보
-		mav.addObject("couponDetailInfo", couponService.getCouponDetailInfo(cpnId));
-		// 쿠폰적용대상 - 공급업체 조회
-		mav.addObject("cpnDtlRefvalSupplyCompList", coreCouponService.getCouponRefvalSupplyCompList(cpnId));
-		// 쿠폰적용대상 - 적용상품 조회
-		mav.addObject("cpnDtlRefvalApplyGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_10"));
-		// 쿠폰적용대상 - 카테고리 조회
-		mav.addObject("cpnDtlRefvalCateList", coreCouponService.getCouponRefvalCategoryList(cpnId));
-		// 쿠폰적용대상 - 브랜드 조회
-		mav.addObject("cpnDtlRefvalBrandList", coreCouponService.getCouponRefvalBrandList(cpnId));
-		// 쿠폰적용대상 - 제외상품 조회
-		mav.addObject("cpnDtlRefvalExceptGoodsList", coreCouponService.getCouponRefvalGoodsList(cpnId, "G260_14"));
+		mav.addObject("couponDetailInfo", couponService.getCouponDetailInfo(coupon));
 		mav.setViewName(super.getDeviceViewName("planning/PlanningCouponDetailForm"));
 		return mav;
 	}
@@ -577,17 +590,46 @@ public class TsfPlanningController extends TsfBaseController {
 	@ResponseBody
 	public GagaMap planningAttendEntry(@RequestBody Plan plan) throws Exception {
 		GagaMap result = new GagaMap();
+		plan.setEntryAllYn("N");
 		int count = planningService.getAttendEntryCount(plan);
 		if (count > 0) {
 			result.set("msg", "이미 출석체크 되었습니다.");
 		}else {
 			planningService.saveAttendEntry(plan);
-			result.set("msg", "출석체크 되었습니다.");
-			result.set("custAttendList",planningService.getCustAttendEntryList(plan));
 			
+			// 총 출석일 수 구해보장.. 
+			Collection<Plan> benefitList = planningService.getAttendBenefitList(plan);
+			plan.setEntryAllYn("Y");
+			count = planningService.getAttendEntryCount(plan);
+			for (Plan tPlan : benefitList) {
+				if (tPlan.getBasDays() == count) {
+					System.out.println("여기들어오니?1");
+					// 지급 방식이 포인트일 경우
+					if (tPlan.getBenefitGb().equals("P")) {
+						Point point = new Point();
+						int pointAmt = tPlan.getPntAmt();
+						point.setRegNo(TsfSession.getInfo().getCustNo());
+						point.setUpdNo(TsfSession.getInfo().getCustNo());
+						point.setCustNo(TsfSession.getInfo().getCustNo());
+						point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+						point.setGvPntAmt(pointAmt);
+						point.setRmPntAmt(pointAmt);
+						point.setOccurGb("G069_37"); //출석체크 이벤트
+						corePointService.saveCustomerPoint(point);
+						System.out.println("여기들어오니?2");
+						String msg =  "축하합니다." + pointAmt + "포인트가 지급 되었습니다!";
+						result.set("msg", msg);
+						break;
+					}
+
+				}else {
+					result.set("msg", "출석체크 되었습니다.");
+					break;
+				}
+			}
 		}
 		
+		result.set("custAttendList",planningService.getCustAttendEntryList(plan));
 		return result;
-
 	}
 }

+ 4 - 0
src/main/java/com/style24/persistence/domain/Contents.java

@@ -66,6 +66,10 @@ public class Contents extends TscBaseDomain {
 	private String cateGb;
 	private String cateNm;
 
+	// 몰메인 STAB003에서 사용
+	private String gnbTabTitle;		// gnbTab 기획전배너영역 타이틀
+	private String bannerGb;		// admin:수동설정, plan:기획전
+
 	private String pageGb;	// 호출페이지 구분(MALL:몰메인, BEST:베스트메인)
 
 	//private String contentsTitle;		// 메인 타이틀(md가 설정한)

+ 3 - 0
src/main/java/com/style24/persistence/domain/GnbTab.java

@@ -4,6 +4,8 @@ import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
 
+import java.util.Collection;
+
 /**
  * 컨텐츠 Domain
  * 
@@ -29,4 +31,5 @@ public class GnbTab extends TscBaseDomain {
 	private String viewDt;			// 미리보기일시
 	private String preview;			// 미리보기여부
 
+	private String gtabBannerTitle;
 }

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

@@ -270,6 +270,11 @@ public class Plan extends TscBaseDomain {
 	private Integer planEntrySq;		//참여일련번호
 	private String orgFileNm;
 	private String sysFileNm;
+	private String entryAllYn;
+	private int basDays;
+	private String benefitGb;
+	private int pntAmt;
+	private Integer cpnId;
 	
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiReplyOrgFile;			//댓글 이미지

+ 272 - 178
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -431,146 +431,56 @@
 	
 	<select id="getMypageCouponList" resultType="Coupon" parameterType="Coupon">
 		/* TsfCoupon.getMypageCouponList */
-		SELECT T.*
-		FROM 
-		(
-			SELECT z.*
-			FROM 
-			(
-				SELECT TC.CPN_ID
-				     ,TC.CPN_NM
-				     ,TC.CPN_DESC
-				     ,TC.SITE_CD
-				     ,TC.CPN_TYPE
-				     ,(CASE TC.APPLY_SCOPE WHEN 'A' THEN '전체' 
-				     				 	   WHEN 'I' THEN '개별' END) AS APPLY_SCOPE 
-				     ,(CASE TC.DC_WAY WHEN 'G240_10' THEN '할인금액' 
-				 				 	  WHEN 'G240_11' THEN '할인율' END) AS DC_WAY 
-				     ,TC.DC_PVAL
-				     ,TC.DC_MVAL
-				     ,TC.DC_AVAL
-				     ,TC.MAX_DC_AMT
-				     ,(CASE TC.PD_GB WHEN 'P' THEN '기간' 
-				     				 WHEN 'D' THEN '일수' END) AS PD_GB
-				     ,DATE_FORMAT(A.AVAIL_STDT, '%Y-%m-%d') AS AVAIL_STDT
-				     ,DATE_FORMAT(A.AVAIL_EDDT, '%Y-%m-%d') AS AVAIL_EDDT
-				     ,TC.AVAIL_DAYS
-				     ,TC.CUST_PUB_LIMIT_QTY
-				     ,TC.TOT_PUB_LIMIT_QTY
-				     ,TC.ONE_PUB_QTY
-				     ,TC.DN_GB
-				     ,TC.DOWN_STDT
-				     ,TC.DOWN_EDDT
-				     ,TC.BUY_LIMIT_AMT
-				     ,TC.PLAN_SQ
-				     ,TC.REISSUANCE
-				     ,TC.CPN_STAT
-				     ,TC.END_ALIM_YN
-				     ,TC.FIRST_ORD_YN
-				     ,TC.DOWN_ABL_YN
-				     ,TC.DC_CD_GB
-				     ,TC.CUST_JOIN_STDT
-				     ,TC.CUST_JOIN_EDDT
-				     ,TC.BUY_STDT
-				     ,TC.BUY_EDDT
-				     ,TC.NEW_CUST_YN
-				     ,IF(NOW() BETWEEN TC.AVAIL_STDT AND TC.AVAIL_EDDT , 'Y','N') AS USER_YN
-				     , A.CUST_NO
-				     , A.USED_DT
-				     , A.CNT
-				FROM TB_COUPON TC INNER JOIN 
-											(
-												SELECT 
-												       CUST_NO
-												     , CPN_ID
-												     , USED_DT
-												     , COUNT(*) AS CNT
-												     , AVAIL_STDT 
-												     , AVAIL_EDDT 
-												     FROM TB_CUST_COUPON
-												     WHERE CUST_NO = #{custNo}
-					                                     AND USED_DT IS NULL
-					                                     AND NOW() BETWEEN AVAIL_STDT AND AVAIL_EDDT
-												GROUP BY 
-												       CUST_NO
-												     , CPN_ID
-												     , USED_DT
-												     , AVAIL_STDT 
-												     , AVAIL_EDDT 
-											)A ON TC.CPN_ID = A.CPN_ID 
-				WHERE 1=1
-					AND TC.CPN_STAT = 'G232_11'  /*쿠폰 상태 - 진행*/
-			)Z
-			UNION 
-			SELECT F.*
-			FROM 
-			(
-				SELECT TC.CPN_ID
-				     ,TC.CPN_NM
-				     ,TC.CPN_DESC
-				     ,TC.SITE_CD
-				     ,TC.CPN_TYPE
-				     ,(CASE TC.APPLY_SCOPE WHEN 'A' THEN '전체' 
-				     				 	   WHEN 'I' THEN '개별' END) AS APPLY_SCOPE 
-				     ,(CASE TC.DC_WAY WHEN 'G240_10' THEN '할인금액' 
-				 				 	  WHEN 'G240_11' THEN '할인율' END) AS DC_WAY 
-				     ,TC.DC_PVAL
-				     ,TC.DC_MVAL
-				     ,TC.DC_AVAL
-				     ,TC.MAX_DC_AMT
-				     ,(CASE TC.PD_GB WHEN 'P' THEN '기간' 
-				     				 WHEN 'D' THEN '일수' END) AS PD_GB
-				     ,DATE_FORMAT(A.AVAIL_STDT, '%Y-%m-%d') AS AVAIL_STDT
-				     ,DATE_FORMAT(A.AVAIL_EDDT, '%Y-%m-%d') AS AVAIL_EDDT
-				     ,TC.AVAIL_DAYS
-				     ,TC.CUST_PUB_LIMIT_QTY
-				     ,TC.TOT_PUB_LIMIT_QTY
-				     ,TC.ONE_PUB_QTY
-				     ,TC.DN_GB
-				     ,TC.DOWN_STDT
-				     ,TC.DOWN_EDDT
-				     ,TC.BUY_LIMIT_AMT
-				     ,TC.PLAN_SQ
-				     ,TC.REISSUANCE
-				     ,TC.CPN_STAT
-				     ,TC.END_ALIM_YN
-				     ,TC.FIRST_ORD_YN
-				     ,TC.DOWN_ABL_YN
-				     ,TC.DC_CD_GB
-				     ,TC.CUST_JOIN_STDT
-				     ,TC.CUST_JOIN_EDDT
-				     ,TC.BUY_STDT
-				     ,TC.BUY_EDDT
-				     ,TC.NEW_CUST_YN
-			         ,IF(NOW() BETWEEN TC.AVAIL_STDT AND TC.AVAIL_EDDT , 'Y','N') AS USER_YN
-				     , A.CUST_NO
-				     , A.USED_DT
-				     , A.CNT
-				FROM TB_COUPON TC INNER JOIN 
-											(
-												SELECT 
-												       CUST_NO
-												     , CPN_ID
-												     , USED_DT
-												     , COUNT(*) AS CNT
-												     , AVAIL_STDT 
-												     , AVAIL_EDDT 
-												     FROM TB_CUST_COUPON
-												     WHERE CUST_NO = #{custNo}
-					                                   AND USED_DT IS NULL
-					                                   AND AVAIL_EDDT BETWEEN DATE_ADD(NOW(), INTERVAL -3 MONTH) AND AVAIL_EDDT
-												GROUP BY 
-												       CUST_NO
-												     , CPN_ID
-												     , USED_DT
-												     , AVAIL_STDT 
-												     , AVAIL_EDDT 
-											)A ON TC.CPN_ID = A.CPN_ID 
-				WHERE 1=1
-					AND TC.CPN_STAT = 'G232_11'  /*쿠폰 상태 - 진행*/
-			)F
-		)T
-		ORDER BY T.USER_YN DESC, T.AVAIL_EDDT
+		SELECT CC.CPN_ID                    /*쿠폰ID*/
+		     , C.CPN_NM                     /*쿠폰명*/
+		     , C.BUY_LIMIT_AMT              /*구매제한금액*/
+		     , C.MAX_DC_AMT                 /*최대할인금액*/
+		     , CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL
+		            WHEN #{frontGb} = 'M' THEN C.DC_MVAL
+		            WHEN #{frontGb} = 'A' THEN C.DC_AVAL
+		       END             AS DC_VAL    /*할인값*/
+		     , CASE WHEN C.DC_WAY = 'G240_10' THEN '원'                                                                                             
+		            ELSE '%'
+		       END             AS DC_WAY    /*할인방법*/
+		     , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
+		                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
+		              END
+		             ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
+		                   ELSE CONCAT('최대 ',FORMAT(C.MAX_DC_AMT , 0),'원 할인')
+		              END)     AS USE_CONDITION  /*사용조건*/
+		     , CASE WHEN C.CUST_PUB_LIMIT_QTY = 0 THEN ''
+		            ELSE CONCAT('1인당 최대',C.CUST_PUB_LIMIT_QTY,'매')
+		       END             AS ISSUE_CONDITION /*발급수량*/
+		     , CC.AVAIL_STDT                /*유효시작일자*/
+		     , CC.AVAIL_EDDT                /*유효종료일자*/
+		     , CC.CPN_CNT                   /*보유쿠폰수*/
+		     , CC.EXPIRE_YN                 /*만료여부*/
+		FROM   (
+		        SELECT CC.CPN_ID
+		             , DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d') AS AVAIL_STDT  /*유효시작일자*/
+		             , DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d') AS AVAIL_EDDT  /*유효종료일자*/
+		             , COUNT(*)                              AS CPN_CNT /*보유쿠폰수*/
+		             , MAX(CASE WHEN NOW() > CC.AVAIL_EDDT THEN 'Y'
+		                        ELSE 'N'
+		                   END)                              AS EXPIRE_YN /*만료여부*/
+		        FROM   TB_CUST_COUPON CC
+		        WHERE  1 = 1
+		        AND    CC.CUST_NO = #{custNo} /**P*/
+		        AND    CC.USED_DT IS NULL /*사용하지않은쿠폰만*/
+		        AND    CC.AVAIL_EDDT >= DATE_ADD(NOW(), INTERVAL -3 MONTH) /*최근3개월쿠폰만*/
+		        GROUP  BY CC.CPN_ID, DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i'), DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d %H:%i')
+		       ) CC
+		     , TB_COUPON C
+		WHERE  CC.CPN_ID = C.CPN_ID
+		AND    C.CPN_STAT = 'G232_11' /*진행중인쿠폰*/
+		AND    C.SITE_CD = #{siteCd}
+		<if test="quickYn != null and quickYn != ''">
+		AND    CC.CC.EXPIRE_YN = 'N'
+		</if>
+		ORDER  BY CC.EXPIRE_YN, CC.AVAIL_EDDT, DC_VAL DESC, MAX_DC_AMT DESC
+		<if test="quickYn != null and quickYn != ''">
+		LIMIT 30
+		</if>
 	</select>
 	
 	<select id="getMypageCouponInfo" resultType="Coupon" parameterType="Coupon">
@@ -601,44 +511,228 @@
 	
 	<select id="getCouponDetailInfo" resultType="Coupon" parameterType="Coupon">
 		/* TsfCoupon.getCouponDetailInfo -- custNo 변경 예정*/
-		SELECT A.CPN_ID
-		     ,A.CPN_NM
-		     ,A.CPN_DESC
-		     ,A.SITE_CD
-		     ,A.AF_LINK_CD
-		     ,A.CPN_TYPE
-		     ,A.APPLY_SCOPE
-		     ,A.DC_WAY
-		     ,A.DC_PVAL
-		     ,A.DC_MVAL
-		     ,A.DC_AVAL
-		     ,A.MAX_DC_AMT
-		     ,A.PD_GB
-		     ,DATE_FORMAT(A.AVAIL_STDT,'%Y-%m-%d') AS AVAIL_STDT
-		     ,DATE_FORMAT(A.AVAIL_EDDT,'%Y-%m-%d') AS AVAIL_EDDT
-		     ,A.AVAIL_DAYS
-		     ,A.CUST_PUB_LIMIT_QTY
-		     ,A.TOT_PUB_LIMIT_QTY
-		     ,A.ONE_PUB_QTY
-		     ,A.DN_GB
-		     ,A.DOWN_STDT
-		     ,A.DOWN_EDDT
-		     ,A.BUY_LIMIT_AMT
-		     ,A.PLAN_SQ
-		     ,A.REISSUANCE
-		     ,A.CPN_STAT
-		     ,A.END_ALIM_YN
-		     ,A.FIRST_ORD_YN
-		     ,A.DOWN_ABL_YN
-		     ,A.DC_CD_GB
-		     ,A.CUST_JOIN_STDT
-		     ,A.CUST_JOIN_EDDT
-		     ,A .BUY_STDT
-		     ,A.BUY_EDDT
-		     ,A.NEW_CUST_YN
-		FROM TB_COUPON A
-		WHERE 1=1
-		 AND A.CPN_ID = #{cpnId}
+		SELECT Z.CPN_ID                                /*쿠폰ID*/
+		     , Z.CPN_NM                                /*쿠폰명*/
+		     , Z.BUY_LIMIT_AMT                         /*구매제한금액*/
+		     , Z.MAX_DC_AMT                            /*최대할인금액*/
+		     , Z.DC_VAL                                /*할인값*/
+		     , Z.DC_WAY                                /*할인방법*/
+		     , Z.USE_CONDITION                         /*사용조건*/
+		     , Z.ISSUE_CONDITION                       /*발급조건*/
+		     , Z.AVAIL_STDT                            /*유효시작일자*/
+		     , Z.AVAIL_EDDT                            /*유효종료일자*/
+		     , Z.CPN_CNT                               /*보유쿠폰수*/
+		     , Z.EXPIRE_YN                             /*만료여부*/
+		     , GROUP_CONCAT(Z.TGT_CONDITION) AS TGT_CONDITION
+		FROM
+		(
+		WITH TAB_COUPON AS (
+		    SELECT CC.CPN_ID                          /*쿠폰ID*/
+		         , C.CPN_NM                           /*쿠폰명*/
+		         , C.BUY_LIMIT_AMT                    /*구매제한금액*/
+		         , C.MAX_DC_AMT                       /*최대할인금액*/
+		         , CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL
+		                WHEN #{frontGb} = 'M' THEN C.DC_MVAL
+		                WHEN #{frontGb} = 'A' THEN C.DC_AVAL
+		           END             AS DC_VAL          /*할인값*/
+		         , CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
+		                ELSE '%'
+		           END             AS DC_WAY          /*할인방법*/
+		         , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
+		                       ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
+		                  END
+		                 ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
+		                       ELSE CONCAT('최대 ',FORMAT(C.MAX_DC_AMT , 0),'원 할인')
+		                  END)     AS USE_CONDITION   /*사용조건*/
+		         , CASE WHEN C.CUST_PUB_LIMIT_QTY = 0 THEN ''
+		                ELSE CONCAT('1인당 최대',C.CUST_PUB_LIMIT_QTY,'매')
+		           END             AS ISSUE_CONDITION /*발급조건*/
+		         , CC.AVAIL_STDT                      /*유효시작일자*/
+		         , CC.AVAIL_EDDT                      /*유효종료일자*/
+		         , CC.CPN_CNT                         /*보유쿠폰수*/
+		         , CC.EXPIRE_YN                       /*만료여부*/
+		    FROM   (
+		            SELECT CC.CPN_ID
+		                 , DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i') AS AVAIL_STDT  /*유효시작일자*/
+		                 , DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d %H:%i') AS AVAIL_EDDT  /*유효종료일자*/
+		                 , COUNT(*)                              AS CPN_CNT /*보유쿠폰수*/
+		                 , MAX(CASE WHEN NOW() > CC.AVAIL_EDDT THEN 'Y'
+		                            ELSE 'N'
+		                       END)                              AS EXPIRE_YN /*만료여부*/
+		            FROM   TB_CUST_COUPON CC
+		            WHERE  1 = 1
+		            AND    CC.CUST_NO = #{custNo}
+		            AND    CC.USED_DT IS NULL /*사용하지않은쿠폰만*/
+		            AND    CC.AVAIL_EDDT >= DATE_ADD(NOW(), INTERVAL -3 MONTH) /*최근3개월쿠폰만*/
+		            GROUP  BY CC.CPN_ID, DATE_FORMAT(CC.AVAIL_STDT,'%Y.%m.%d %H:%i'), DATE_FORMAT(CC.AVAIL_EDDT,'%Y.%m.%d %H:%i')
+		           ) CC
+		         , TB_COUPON C
+		    WHERE  CC.CPN_ID = C.CPN_ID
+		    AND    C.CPN_STAT = 'G232_11' /*진행중인쿠폰*/
+		    AND    C.SITE_CD = #{siteCd}
+		)
+		, TAB_COUPON_REFVAL1 AS (
+		    SELECT CR.CPN_ID
+		         , CR.CPN_TARGET
+		         , CASE WHEN CR.CPN_TARGET = 'G260_10' /*상품*/ THEN (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CR.REF_VAL AND GOODS_STAT = 'G008_90')
+		                WHEN CR.CPN_TARGET = 'G260_11' /*카테고리*/ THEN
+		                    CASE WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL),0) > 0 THEN (SELECT CATE1_NM FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL LIMIT 1)
+		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL LIMIT 1)
+		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL LIMIT 1)
+		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL LIMIT 1)
+		                    END
+		                WHEN CR.CPN_TARGET = 'G260_12' /*브랜드*/ THEN (SELECT BRAND_KNM FROM TB_BRAND WHERE BRAND_CD = CR.REF_VAL AND USE_YN = 'Y')
+		                WHEN CR.CPN_TARGET = 'G260_13' /*업체*/ THEN (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = CR.REF_VAL AND USE_YN = 'Y' AND SUPPLY_STAT = 'G010_30')
+		           END AS REF_VAL
+		         , RANK() OVER(PARTITION BY CR.CPN_ID, CR.CPN_TARGET ORDER BY REF_VAL) AS RK
+		    FROM   TAB_COUPON C
+		         , TB_COUPON_REFVAL CR
+		    WHERE  C.CPN_ID = CR.CPN_ID
+		    AND    CR.CPN_TARGET != 'G260_14' /*제외상품아닌넘*/
+		)
+		, TAB_COUPON_REFVAL2 AS (
+		    SELECT CPN_ID
+		         , CPN_TARGET
+		         , GROUP_CONCAT(REF_VAL ORDER BY RK ASC SEPARATOR '/' ) AS REF_VAL
+		         , (SELECT COUNT(*)
+		            FROM   TAB_COUPON_REFVAL1
+		            WHERE  CPN_ID = CR.CPN_ID
+		            AND    CPN_TARGET = CR.CPN_TARGET)                  AS CNT
+		    FROM   TAB_COUPON_REFVAL1 CR
+		    WHERE  1 = 1
+		    AND    (
+		            (CPN_TARGET != 'G260_12' AND RK = 1) /*브랜드 외는 1개만 노출*/
+		            OR
+		            (CPN_TARGET = 'G260_12' AND RK <![CDATA[<=]]> 2) /*브랜드만 2개 노출*/
+		           )
+		    GROUP  BY CPN_ID, CPN_TARGET
+		)
+		SELECT C.CPN_ID                                /*쿠폰ID*/
+		     , C.CPN_NM                                /*쿠폰명*/
+		     , C.BUY_LIMIT_AMT                         /*구매제한금액*/
+		     , C.MAX_DC_AMT                            /*최대할인금액*/
+		     , C.DC_VAL                                /*할인값*/
+		     , C.DC_WAY                                /*할인방법*/
+		     , C.USE_CONDITION                         /*사용조건*/
+		     , C.ISSUE_CONDITION                       /*발급조건*/
+		     , C.AVAIL_STDT                            /*유효시작일자*/
+		     , C.AVAIL_EDDT                            /*유효종료일자*/
+		     , C.CPN_CNT                               /*보유쿠폰수*/
+		     , C.EXPIRE_YN                             /*만료여부*/
+		     , CONCAT(CR.REF_VAL,CASE WHEN CR.CPN_TARGET = 'G260_10' AND CR.CNT > 1 THEN ' 외'
+		                              WHEN CR.CPN_TARGET = 'G260_11' AND CR.CNT > 1 THEN ' 외'
+		                              WHEN CR.CPN_TARGET = 'G260_12' AND CR.CNT > 2 THEN ' 외'
+		                              WHEN CR.CPN_TARGET = 'G260_13' AND CR.CNT > 1 THEN ' 외'
+		                              ELSE ''
+		                         END) AS TGT_CONDITION /*대상조건*/
+		FROM   TAB_COUPON C
+		     , TAB_COUPON_REFVAL2 CR
+		WHERE  C.CPN_ID = CR.CPN_ID
+		AND C.CPN_ID = #{cpnId}
+		ORDER  BY C.EXPIRE_YN, C.AVAIL_EDDT
+		)Z
+	</select>
+	
+	<select id="getPlanCouponDetailInfo" resultType="Coupon" parameterType="Coupon">
+		/* TsfCoupon.getPlanCouponDetailInfo */
+		SELECT Z.CPN_ID                                /*쿠폰ID*/
+		     , Z.CPN_NM                                /*쿠폰명*/
+		     , Z.BUY_LIMIT_AMT                         /*구매제한금액*/
+		     , Z.MAX_DC_AMT                            /*최대할인금액*/
+		     , Z.DC_VAL                                /*할인값*/
+		     , Z.DC_WAY                                /*할인방법*/
+		     , Z.USE_CONDITION                         /*사용조건*/
+		     , Z.ISSUE_CONDITION                       /*발급조건*/
+		     , Z.AVAIL_STDT
+		     , Z.AVAIL_EDDT
+		     , GROUP_CONCAT(Z.TGT_CONDITION) AS TGT_CONDITION
+		FROM
+		(
+		WITH TAB_COUPON AS (
+		    SELECT C.CPN_ID                          /*쿠폰ID*/
+		         , C.CPN_NM                           /*쿠폰명*/
+		         , C.BUY_LIMIT_AMT                    /*구매제한금액*/
+		         , C.MAX_DC_AMT                       /*최대할인금액*/
+		         , DATE_FORMAT(C.AVAIL_STDT,'%Y.%m.%d %H:%i') AS AVAIL_STDT
+		         , DATE_FORMAT(C.AVAIL_EDDT,'%Y.%m.%d %H:%i') AS AVAIL_EDDT
+		         , CASE WHEN #{frontGb} = 'P' THEN C.DC_PVAL
+		                WHEN #{frontGb} = 'M' THEN C.DC_MVAL
+		                WHEN #{frontGb} = 'A' THEN C.DC_AVAL
+		           END             AS DC_VAL          /*할인값*/
+		         , CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
+		                ELSE '%'
+		           END             AS DC_WAY          /*할인방법*/
+		         , CONCAT(CASE WHEN C.BUY_LIMIT_AMT = 0 THEN ''
+		                       ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT , 0),'원 이상 구매 시 ')
+		                  END
+		                 ,CASE WHEN C.MAX_DC_AMT = 0 THEN ''
+		                       ELSE CONCAT('최대 ',FORMAT(C.MAX_DC_AMT , 0),'원 할인')
+		                  END)     AS USE_CONDITION   /*사용조건*/
+		         , CASE WHEN C.CUST_PUB_LIMIT_QTY = 0 THEN ''
+		                ELSE CONCAT('1인당 최대',C.CUST_PUB_LIMIT_QTY,'매')
+		           END             AS ISSUE_CONDITION /*발급조건*/
+		    FROM  TB_COUPON C
+		    WHERE C.CPN_STAT = 'G232_11' /*진행중인쿠폰*/
+		     AND    C.SITE_CD = #{siteCd}
+		)
+		, TAB_COUPON_REFVAL1 AS (
+		    SELECT CR.CPN_ID
+		         , CR.CPN_TARGET
+		         , CASE WHEN CR.CPN_TARGET = 'G260_10' /*상품*/ THEN (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CR.REF_VAL AND GOODS_STAT = 'G008_90')
+		                WHEN CR.CPN_TARGET = 'G260_11' /*카테고리*/ THEN
+		                    CASE WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL),0) > 0 THEN (SELECT CATE1_NM FROM TB_CATE_4SRCH WHERE CATE1_NO = CR.REF_VAL LIMIT 1)
+		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE2_NO = CR.REF_VAL LIMIT 1)
+		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE3_NO = CR.REF_VAL LIMIT 1)
+		                         WHEN IFNULL((SELECT COUNT(1) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL),0) > 0 THEN (SELECT CONCAT(CATE1_NM,' > ',CATE2_NM) FROM TB_CATE_4SRCH WHERE CATE4_NO = CR.REF_VAL LIMIT 1)
+		                    END
+		                WHEN CR.CPN_TARGET = 'G260_12' /*브랜드*/ THEN (SELECT BRAND_KNM FROM TB_BRAND WHERE BRAND_CD = CR.REF_VAL AND USE_YN = 'Y')
+		                WHEN CR.CPN_TARGET = 'G260_13' /*업체*/ THEN (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = CR.REF_VAL AND USE_YN = 'Y' AND SUPPLY_STAT = 'G010_30')
+		           END AS REF_VAL
+		         , RANK() OVER(PARTITION BY CR.CPN_ID, CR.CPN_TARGET ORDER BY REF_VAL) AS RK
+		    FROM   TAB_COUPON C
+		         , TB_COUPON_REFVAL CR
+		    WHERE  C.CPN_ID = CR.CPN_ID
+		    AND    CR.CPN_TARGET != 'G260_14' /*제외상품아닌넘*/
+		)
+		, TAB_COUPON_REFVAL2 AS (
+		    SELECT CPN_ID
+		         , CPN_TARGET
+		         , GROUP_CONCAT(REF_VAL ORDER BY RK ASC SEPARATOR '/' ) AS REF_VAL
+		         , (SELECT COUNT(*)
+		            FROM   TAB_COUPON_REFVAL1
+		            WHERE  CPN_ID = CR.CPN_ID
+		            AND    CPN_TARGET = CR.CPN_TARGET)                  AS CNT
+		    FROM   TAB_COUPON_REFVAL1 CR
+		    WHERE  1 = 1
+		    AND    (
+		            (CPN_TARGET != 'G260_12' AND RK = 1) /*브랜드 외는 1개만 노출*/
+		            OR
+		            (CPN_TARGET = 'G260_12' AND RK <![CDATA[<=]]> 2) /*브랜드만 2개 노출*/
+		           )
+		    GROUP  BY CPN_ID, CPN_TARGET
+		)
+		SELECT C.CPN_ID                                /*쿠폰ID*/
+		     , C.CPN_NM                                /*쿠폰명*/
+		     , C.BUY_LIMIT_AMT                         /*구매제한금액*/
+		     , C.MAX_DC_AMT                            /*최대할인금액*/
+		     , C.DC_VAL                                /*할인값*/
+		     , C.DC_WAY                                /*할인방법*/
+		     , C.USE_CONDITION                         /*사용조건*/
+		     , C.ISSUE_CONDITION                       /*발급조건*/
+		     , C.AVAIL_STDT
+		     , C.AVAIL_EDDT
+		     , CONCAT(CR.REF_VAL,CASE WHEN CR.CPN_TARGET = 'G260_10' AND CR.CNT > 1 THEN ' 외'
+		                              WHEN CR.CPN_TARGET = 'G260_11' AND CR.CNT > 1 THEN ' 외'
+		                              WHEN CR.CPN_TARGET = 'G260_12' AND CR.CNT > 2 THEN ' 외'
+		                              WHEN CR.CPN_TARGET = 'G260_13' AND CR.CNT > 1 THEN ' 외'
+		                              ELSE ''
+		                         END) AS TGT_CONDITION /*대상조건*/
+		FROM   TAB_COUPON C
+		     , TAB_COUPON_REFVAL2 CR
+		WHERE  C.CPN_ID = CR.CPN_ID
+		AND C.CPN_ID = #{cpnId}
+		)Z
+				
 	</select>
 	
 	<!-- 기획전 다운가능 쿠폰 정보 조회 -->

+ 42 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -83,6 +83,7 @@
 		    </when>
 		    <otherwise>
 		     , GTAB_SQ                                            /*GNB탭일련번호*/
+		     , CASE WHEN CONTENTS_TYPE = 'C' THEN (SELECT CONTENTS_TITLE FROM	TB_MAIN_LAYOUT WHERE CONTENTS_LOC = 'STAB003') ELSE '' END AS GTAB_BANNER_TITLE
 		FROM   TB_GNB_TAB A
 		    </otherwise>
 		</choose>
@@ -225,9 +226,12 @@
 		        <if test="cateNo != null and cateNo != ''">
 		        AND    A.CATE_NO = #{cateNo}
 		        </if>
-				<if test="brandGroupNo != null and brandGroupNo !=''">
-				AND    A.BRAND_GROUP_NO  = #{brandGroupNo}
-				</if>
+		        <if test="brandGroupNo != null and brandGroupNo !=''">
+		        AND    A.BRAND_GROUP_NO  = #{brandGroupNo}
+		        </if>
+		        <if test="contentsType != null and contentsType != ''">
+		        AND    A.CONTENTS_TYPE = #{contentsType}
+		        </if>
 		        <choose>
 		            <when test='preview != null and preview == "Y"'>
 		        AND    IFNULL((SELECT DISP_EDDT
@@ -923,5 +927,39 @@
 		FROM   TB_BRAND_GROUP
 		WHERE  BRAND_GROUP_NO = #{brandGroupNo}
 	</select>
-	
+
+	<!-- GNB TAB 기획전배너 조회 -->
+	<select id="getGnbTabBannerList" parameterType="Contents" resultType="Contents">
+		/* TsfDisplay.getGnbTabBannerList */
+		SELECT (SELECT CONTENTS_TITLE FROM TB_MAIN_LAYOUT WHERE 1=1 AND CONTENTS_LOC = 'STAB003') AS GNB_TAB_TITLE
+		      , Z.BANNER_GB
+		      , Z.IMG_PATH1
+		      , Z.STR_VAR1
+		      , Z.STR_TITLE1
+		      , Z.STR_TITLE2
+		FROM    (
+		            SELECT  'ADMIN' AS BANNER_GB
+		                  , IMG_PATH1
+		                  , STR_VAR1
+		                  , STR_TITLE1
+		                  , STR_TITLE2
+		            FROM    TB_CONTENTS
+		            WHERE   CONTENTS_LOC = #{contentsLoc}
+		            AND     CONTENTS_TYPE = #{cateNo}
+		            AND     USE_YN = 'Y'
+		            UNION ALL
+		            SELECT  'PLAN' AS BANNER_GB
+		                  , A.MAIN_PIMG AS IMG_PATH1
+		                  , CONCAT('/planning/detail/form?planSq=',A.PLAN_SQ) AS STR_VAR1
+		                  , A.PLAN_NM AS STR_TITLE1
+		                  , A.DTL_TITLE1 AS STR_TITLE2
+		            FROM  TB_PLAN A
+		            INNER JOIN TB_PLAN_CATE B ON A.PLAN_SQ = B.PLAN_SQ
+		            WHERE  1=1
+		              AND  B.CATE_NO = #{cateNo}
+		              AND  A.OPEN_YN = 'Y'
+		              AND  B.DISP_YN = 'Y'
+		        ) Z
+		LIMIT 2
+	</select>
 </mapper>

+ 14 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -1143,7 +1143,7 @@
 		/* TsfPlanning.saveAttendEntry */	
 		INSERT INTO TB_PLAN_ENTRY
 		        ( 
-		        , PLAN_SQ
+		         PLAN_SQ
 		        , ENTRY_CUST_NO
 		        , ENTRY_DT
 		        , ENTRY_VAL1
@@ -1185,7 +1185,9 @@
 		FROM TB_PLAN_ENTRY
 		WHERE 1=1 
 		 AND PLAN_SQ = #{planSq}
+		 <if test='entryAllYn == "N"'>
 		 AND DATE_FORMAT(ENTRY_DT, '%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
+		 </if>
 		 AND ENTRY_CUST_NO = #{custNo}
 	</select>
 	
@@ -1202,6 +1204,17 @@
 		AND ENTRY_CUST_NO = #{custNo}
 	</select>
 	
+	<select id="getAttendBenefitList" resultType="Plan" parameterType="Plan">
+		/* TsfPlanning.getAttendBenefitList */	
+		SELECT PLAN_SQ 
+		      ,BAS_DAYS 
+		      ,BENEFIT_GB 
+		      ,PNT_AMT 
+		      ,CPN_ID 
+		FROM TB_PLAN_ATTEND 
+		WHERE PLAN_SQ = #{planSq}	
+	</select>
+	
 	<!-- 댓글 리스트  (수정필)-->
 	<select id="getReplyList" resultType="Plan" parameterType="Plan">
 		/* TsfPlanning.getReplyList */	

+ 40 - 124
src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html

@@ -99,10 +99,8 @@
 				<div class="desc_status">예약판매 상품 - <em th:text="${goodsInfo.delvResDt}">2020.12.30</em> 출고예정</div>
 			</div>
 
-			<div class="inner">
+			<div class="inner" th:if="${goodsInfo.selfGoodsYn =='Y' and goodsInfo.goodsType =='G056_N'}"> <!-- 자사상품,일반상품 -->
 				<div class="option_box">
-					<th:block th:if="${goodsInfo.selfGoodsYn =='Y' }"> <!-- 자사상품 -->
-					<th:block th:if="${goodsInfo.goodsType =='G056_N' }">	<!-- 일반상품 -->
 					<div class="opt_color"  th:if="${goodsOption1List != null and !goodsOption1List.empty}">
 						<div class="opt_header">
 							<span class="title">컬러</span>
@@ -134,8 +132,6 @@
 						</div>
 					</div>
 					<div class="info_restock" style="display:none;"><a href="javascript:void(0);" id="btn_pushRestock_pop" class="btn_popup" th:onclick="cfGoodsInstockAlarmInfo([[${goodsInfo.goodsCd}]], [[${goodsInfo.colorCd}]])">재입고 알림 신청</a></div>
-					</th:block>
-					</th:block>
 				</div>
 			</div>
 
@@ -626,22 +622,7 @@
 						</div>
 						</th:block>
 						</th:block>
-						<th:block th:if="${goodsInfo.selfGoodsYn =='N' }"> <!--  입점상품 -->
-						<div class="opt_select">
-							<div class="form_wrap">
-								<div class="form_field">
-									<div class="select_custom option_open">
-										<div class="combo">
-											<div class="select">옵션을 선택해주세요</div>
-										</div>
-									</div>
-								</div>
-							</div>
-						</div>
-						<div class="opt_result">
-						</div>
-						</th:block>
-						<th:block th:if="${goodsInfo.goodsType =='G056_S' }">	<!-- 세트상품 -->
+						<th:block th:if="${goodsInfo.selfGoodsYn =='N' or goodsInfo.goodsType =='G056_S'}"> <!--  입점상품 -->
 						<div class="opt_select">
 							<div class="form_wrap">
 								<div class="form_field">
@@ -732,76 +713,32 @@
 								<!-- //일반상품일때 -->
 								<!-- 셋트상품일때 -->
 								<th:block th:if="${goodsInfo.goodsType =='G056_S' }">	<!-- 세트상품 -->
-								<div class="setOption">
-									<div class="form_wrap">
-										<div class="form_field">
-											<p class="title">슬림핏 마이크로 체크 네이비컬러 셋업수트 자켓</p>
-											<div class="select_custom item_opt1">
-												<div class="combo">
-													<div class="select">상품옵션01</div>
-													<ul class="list" style="display: none;">
-														<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-														<li class="">선택</li> 
-														<li class="selected">상품옵션01</li>
-														<li>상품옵션02</li>
-														<li>상품옵션03</li>
-														<li aria-disabled="true">상품옵션05</li>
-														<li>상품옵션06</li>
-														<li aria-disabled="true" data-soldout="true">상품옵션07</li>
-													</ul>
-												</div>
-											</div>
-										</div>
-										<div class="form_field">
-											<div class="select_custom item_opt2" disabled>
-												<div class="combo">
-													<div class="select">상품옵션12</div>
-													<ul class="list" style="display: none;">
-														<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-														<li class="">선택</li> 
-														<li class="">상품옵션11</li>
-														<li class="selected">상품옵션12</li>
-														<li>상품옵션13</li>
-														<li aria-disabled="true">상품옵션15</li>
-														<li>상품옵션16</li>
-														<li aria-disabled="true" data-soldout="true">상품옵션17</li>
-													</ul>
-												</div>
-											</div>
-										</div>
-									</div>
-									<div class="form_wrap">
+								<div class="setOption" th:if="${goodsComposeList != null and !goodsComposeList.empty}" >
+									<div class="form_wrap"  th:each="goodsCompose, status : ${goodsComposeList}">
 										<div class="form_field">
-											<p class="title">슬림핏 마이크로 체크 네이비컬러 셋업수트 바지</p>
-											<div class="select_custom item_opt1">
+											<p class="title" th:text="${goodsCompose.compsGoodsFullNm}">슬림핏</p>
+											<div class="select_custom item_opt1" th:classappend="${'item_opt1_'+status.count +' '+goodsCompose.compsGoodsCd}" 
+																				th:if="${goodsCompose.goodsOption1List != null and !goodsCompose.goodsOption1List.empty}" >
 												<div class="combo">
-													<div class="select">상품옵션01</div>
+													<div class="select">선택</div>
 													<ul class="list" style="display: none;">
-														<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-														<li class="">선택</li> 
-														<li class="selected">상품옵션01</li>
-														<li>상품옵션02</li>
-														<li>상품옵션03</li>
-														<li aria-disabled="true">상품옵션05</li>
-														<li>상품옵션06</li>
-														<li aria-disabled="true" data-soldout="true">상품옵션07</li>
+														<th:block th:each="goodsOption, optionStatus : ${goodsCompose.goodsOption1List}" >
+														<li class="selected" th:id="|selfGoodsOpt1${goodsCompose.compsGoodsCd}|" th:if=${optionStatus.first}>선택</li> 
+														<li th:onclick="fnOption2([[${status.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsCompose.qty}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]], [[${goodsOption.currPrice}]])"
+															th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}, data-soldout=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}"
+															th:text="${goodsOption.optCd1}">상품옵션
+															<input type="hidden" name="opt" th:attr="addPrice=${goodsOption.addPrice}, optCd1=${goodsOption.optCd1},optCd2=${goodsOption.optCd2}, optCd=${goodsOption.optCd}"/>
+														</li>
+														</th:block>
 													</ul>
 												</div>
 											</div>
 										</div>
 										<div class="form_field">
-											<div class="select_custom item_opt2" disabled>
+											<div class="select_custom item_opt2" th:classappend="${'item_opt2_'+status.count +' '+goodsCompose.compsGoodsCd}" disabled>
 												<div class="combo">
-													<div class="select">상품옵션12</div>
-													<ul class="list" style="display: none;">
-														<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
-														<li class="">선택</li> 
-														<li class="">상품옵션11</li>
-														<li class="selected">상품옵션12</li>
-														<li>상품옵션13</li>
-														<li aria-disabled="true">상품옵션15</li>
-														<li>상품옵션16</li>
-														<li aria-disabled="true" data-soldout="true">상품옵션17</li>
+													<div class="select">선택</div>
+													<ul class="list" th:id="|goodsOpt2${goodsCompose.compsGoodsCd}|">
 													</ul>
 												</div>
 											</div>
@@ -1077,7 +1014,8 @@
 			
 			fnSetTotalPrice();
 			
-			$('.pop_option_select').css("display", "none");
+			// 해야하나 말아야하나
+			//$('.pop_option_select').css("display", "none");
 			
 		}, "text");
 	}
@@ -1153,7 +1091,7 @@
 		let jsonData = JSON.stringify(data);
 		gagajf.ajaxJsonSubmit('/goods/detail/option1/list', jsonData, function(result) {
 			
-			if (result.dataList != null && result.dataList.length > 0) {
+			if (result.dataList != null && result.dataList.length > 0) {debugger;
 				let tag = "";
 				let $obj = null;
 				
@@ -1183,7 +1121,7 @@
 					tag += '</div>\n';
 					//------	
 				}
-
+debugger;
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
 						$obj = $('.pop_option_select .select_custom.item_opt1.item_opt1_1');	
@@ -1250,15 +1188,15 @@
 				
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
-						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_1');	
+						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_1');	
 					}else if (ridx == 2){
-						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_2');	
+						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_2');	
 					}else if (ridx == 3){
-						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_3');
+						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_3');
 					}else if (ridx == 4){
-						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_4');
+						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_4');
 					}else{
-						$obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_5');
+						$obj = $('.pop_option_select .select_custom.item_opt2.item_opt2_5');
 					}
 					
 				}else{
@@ -1307,19 +1245,19 @@
 				$obj.append(tag);
 				if (selfGoodsYn == "Y"){
 					if (ridx == 1){
-						var opt_selecter02_1 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_1');	
+						var opt_selecter02_1 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_1');	
 					}else if (ridx == 2){
-						var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');	
+						var opt_selecter02_2 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_2');	
 					}else if (ridx == 3){
-						var opt_selecter02_3 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_3');
+						var opt_selecter02_3 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_3');
 					}else if (ridx == 4){
-						var opt_selecter02_4 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_4');
+						var opt_selecter02_4 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_4');
 					}else{
-						var opt_selecter02_5 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_5');
+						var opt_selecter02_5 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_5');
 					}
 					
 				}else{
-					var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1');
+					var opt_selecter02 = new sCombo('.pop_option_select .select_custom.item_opt2.item_opt2_1');
 				}	
 			}
 			
@@ -1645,34 +1583,12 @@
 		params.contentsLoc = "tmtb";
 		fnGoodsLikeSearch(params);
 	
-		// selecter
-		$(function(){
-			//var item_opt01 = new sCombo('.pd .pop_option_select .item_opt1');
-			//var item_opt02 = new sCombo('.pd .pop_option_select .item_opt2');
-			var opt_select = new sCombo('.pd .op1 .opt_select .select_custom');
-		});
-
-		//옵션변경 셀렉트
-		var opt_selecter01 = new sCombo('.pd .pop_option_select .item_opt1');
-		$('.pd .pop_option_select .select_custom .combo .list > li').click(function(e) {
-			$(this).parents('.form_field').next('.form_field').find('.select_custom').attr('disabled', false);
-			return false;
-		});
-		var opt_selecter02 = new sCombo('.pd .pop_option_select .item_opt2');
-
-		var opt_selecter03 = new sCombo('.pd .pop_option_select .item_opt3');
-		$('.pd .pop_option_select .select_custom .combo .list > li').click(function(e) {
-			$(this).parents('.form_field').next('.form_field').find('.select_custom').attr('disabled', false);
-			return false;
-		});
-		var opt_selecter04 = new sCombo('.pd .pop_option_select .item_opt4');
-
-		var opt_selecter05 = new sCombo('.pd .pop_option_select .item_opt5');
-		$('.pd .pop_option_select .select_custom .combo .list > li').click(function(e) {
-			$(this).parents('.form_field').next('.form_field').find('.select_custom').attr('disabled', false);
-			return false;
-		});
-		var opt_selecter06 = new sCombo('.pd .pop_option_select .item_opt6');
+	
+		var opt_selecter01_1 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_1');
+		var opt_selecter01_2 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_2');
+		var opt_selecter01_3 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_3');
+		var opt_selecter01_4 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_4');
+		var opt_selecter01_5 = new sCombo('.pop_option_select .select_custom.item_opt1.item_opt1_5');
 
 		if (!gagajf.isNull([[${goodsInfo.socialSq}]])){
 			$('.timer_box').css('display', 'block');

+ 104 - 14
src/main/webapp/WEB-INF/views/web/common/fragments/FooterWeb.html

@@ -174,7 +174,7 @@
 			<li>
 				<button type="button" id="quick04" class="quick_btn04" data-tab="quick04">
 					<img src="/images/pc/ico_qk_coupon.png" alt="쿠폰"/>
-					<span class="count">100</span>
+					<span class="count">0</span>
 				</button>
 			</li>
 			<li>
@@ -489,16 +489,16 @@
 			</div>
 			<div class="coupon quick_con quick04"> <!-- 퀵메뉴_나의 쿠폰 -->
 				<div class="quick_head">
-					<h3><a href="">나의 쿠폰</a></h3>
+					<h3><a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_MYPAGE_COUPON);">나의 쿠폰</a></h3>
 				</div>
-				<div class="quick_body"> <!-- 비로그인 시 need_login 클래스 추가 -->
+				<div class="quick_body" id="couponList"> <!-- 비로그인 시 need_login 클래스 추가 -->
 					<div class="coupon_tab">
-						<a href="#coupon_type01" id="" class="">발급 가능 쿠폰</a>
-						<a href="#coupon_type02" id="" class="">보유 쿠폰</a>
+						<a href="#coupon_type01" onclick="issueCouponBtn()">발급 가능 쿠폰</a>
+						<a href="#coupon_type02" onclick="ownCouponBtn()">보유 쿠폰</a>
 					</div>
 					<div id="coupon_type01" class="coupon_area">
-						<div class="pop_cont">
-							<ul class="coupon_list">
+						<div class="pop_cont" id="issueCoupon">
+							<!-- <ul class="coupon_list">
 								<li>
 									<div class="coupon">
 										<div>
@@ -601,12 +601,14 @@
 										<button type="button" class="btn btn_dark btn_block btn_coupon_done" disabled=""><span>받기완료</span></button>
 									</div>
 								</li>
-							</ul>
+							</ul> -->
 						</div>
+						<a href="javascript:void(0);" class="more_btn" onclick="cfnGoToPage(_PAGE_EVENT_MAIN);">더 보기</a>_
 					</div>
+					
 					<div id="coupon_type02" class="coupon_area">
-						<div class="coupon_list">
-							<ul class="clear">
+						<div class="coupon_list" id="ownCoupon">
+							<!-- <ul class="clear">
 								<li>
 									<div class="cp_top">
 										<div class="cp_detail">
@@ -641,16 +643,17 @@
 										<button type="button" class="coupon_pop_btn"><span>사용안내</span></button>
 									</div>
 								</li>
-							</ul>
+							</ul> -->
 						</div>
+						<a href="javascript:void(0);" class="more_btn" onclick="cfnGoToPage(_PAGE_MYPAGE_COUPON);">더 보기</a>_
 					</div>
-					<a href="" class="more_btn">더 보기</a>
+					
 					<div class="login_con">
 						<div>
 							<p>로그인 후 이용 가능한 서비스입니다.</p>
-							<button type="button" class="btn btn_sm"><span>로그인</span></button>
+							<button type="button" class="btn btn_sm" onclick="cfnGoToPage(_PAGE_LOGIN);"><span>로그인</span></button>
 						</div>
-					</div>
+					</div> 
 				</div>
 			</div>
 			<div class="category quick_con quick05"> <!-- 퀵메뉴_카테고리 -->
@@ -861,6 +864,16 @@
 	<!-- //배송요청사항수정 팝업 -->
 	<!-- //2021.04.02 배송지변경팝업 공통화 작업 -->
 	
+	<!-- 쿠폰 사용 내역 팝업 -->
+	<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+               <!-- 쿠폰사용안내 팝업 내용 -->      
+		</div>
+	</div>
+	<a href="#close-modal" rel="modal:close" id="couponInfoPop_close" class="close-modal">Close</a>
+	</div>
+	
 <script th:inline="javascript">
 /*<![CDATA[*/
 	// 패밀리 사이트
@@ -1229,6 +1242,80 @@
 		}
 	}
 	
+	// 쿠폰리스트
+	let issueCouponBtn = function() {
+		if (!cfCheckLogin()) {
+			$('#couponList').addClass('need_login');
+			return false;
+		}else{
+			
+		}
+	}
+	
+	// 보유 쿠폰 클릭 시 
+	let ownCouponBtn = function() {
+		$.getJSON('/mypage/quick/own/coupon/list'
+				, function(result, status) {
+					if (status == 'success') {
+						if (result.length > 0) {
+							let tag = '';
+							tag += '<ul class="clear">';
+							$.each(result, function (idx, item) {
+								tag += '	<li>';
+								tag += '		<div class="cp_top">';
+								tag += '			<div class="cp_detail">';
+								tag += '				<p class="tit">'+item.cpnNm+'</p>';
+								if (item.dcWay == '%') {
+									tag += '				<strong class="sale_t won_t"><span>'+item.dcVal+'</span>%</strong>';
+								}else{
+									tag += '				<strong class="sale_t won_t"><span>'+item.dcVal+'</span>원</strong>';
+								}
+								
+								tag += '				<p class="cp_cont">'+item.useCondition+'</p>';
+								tag += '				<span class="cp_cnt"><span>'+item.cpnCnt+'</span>장 보유</span>';
+								tag += '			</div>';
+								tag += '			<span class="cp_shape"></span>';
+								tag += '		</div>';
+								tag += '		<div class="cp_date">';
+								tag += '			<span>'+item.availStdt+'</span> ~ <span>'+item.availEddt+'</span>';
+								tag += '		</div>';
+								tag += '		<div class="cp_info">';
+								tag += '			<button type="button" class="coupon_pop_btn" onclick="useInfoCoupon('+item.cpnId+')"><span>사용안내</span></button>';
+								tag += '		</div>';
+								tag += '	</li>';
+							});
+							tag += '<ul>';
+							
+							$('#ownCoupon').html(tag);
+						} else {
+							$('#ownCoupon').addClass('nodata');
+						}
+					}
+			});
+	}
+	
+	// 소유한 쿠폰 사용안내 모달
+	var useInfoCoupon = function (id) {
+		var data = {cpnId : id};
+		var jsonData = JSON.stringify(data);
+		
+		 $.ajax( {
+			type		: "POST",
+			url 		: '/mypage/coupon/detailPop',
+			data		: jsonData,
+			contentType: 'application/json',
+			dataType 	: 'html',
+			success 	: function(result) {
+				if (result != null) {
+					$("#couponInfoPop").html(result);
+					$("#couponInfoPop").modal("show");
+				}
+			}
+		});
+		
+		return false; 
+	}
+	
 	// 팝업
 	let fnGetPopup = function(){
 		let data = {viewPage : [[${viewPage}]]
@@ -1350,6 +1437,9 @@
 		// 팝업조회
 		fnGetPopup();
 		
+		// 쿠폰조회
+		$("#issueCouponBtn").trigger("click");	
+		
 		// Family Site
 		$('.family_link').on('click','.btn',function(e){
 			e.preventDefault();

+ 41 - 28
src/main/webapp/WEB-INF/views/web/common/fragments/GnbWeb.html

@@ -608,41 +608,53 @@
 				tag += '				</ul>\n';
 				tag += '			</div>\n';
 				tag += '		</div>\n';
+				tag += '	<div class="head_banner" id="id'+cate1.cate1No+'">\n';
+				tag += '	</div>';
 				tag += '	</div>\n';
 			}
-
-			// if (cate1.bannerList.length > 0) {
-			// 	tag += '	<div class="head_banner">\n';
-			// 	tag += '		<div class="tit">\n';
-			// 	tag += '			<p>가을의 신상 만나기</p>\n';
-			// 	tag += '		</div>\n';
-			// 	tag += '		<div class="list">\n';
-			// 	tag += '			<ul class="clear event_con">\n';
-			// 	tag += '				<li>\n';
-			// 	tag += '					<a href="">\n';
-			// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img01.jpg" alt="ATTENTION! 20FW HOLIDAY TBJ 주목할 홀리데이 TBJ 컬렉션"></div>\n';
-			// 	tag += '						<div class="txt">\n';
-			// 	tag += '							<p class="tit">2020 FALL COLLECTION 가을에는 이 컬러 2020 FALL COLLECTION 가을에는 이 컬러</p>\n';
-			// 	tag += '						</div>\n';
-			// 	tag += '					</a>\n';
-			// 	tag += '				</li>\n';
-			// 	tag += '				<li>\n';
-			// 	tag += '					<a href="">\n';
-			// 	tag += '						<div class="ev_img"><img src="/images/pc/thumb/ev_list_img02.jpg" alt="단 48시간, 퓨어캐시미어 최대 80%세일 PURE CASHMERE 48H POP-UP"></div>\n';
-			// 	tag += '						<div class="txt">\n';
-			// 	tag += '							<p class="tit">FALL NEW ARRIVAL</p>\n';
-			// 	tag += '						</div>\n';
-			// 	tag += '					</a>\n';
-			// 	tag += '				</li>\n';
-			// 	tag += '			</ul>\n';
-			// 	tag += '		</div>\n';
-			// 	tag += '	</div>\n';
-			// }
 			tag += '</li>\n';
 		}
 		return tag;
 	}
 
+	let fnGetGnbBanner = function (cateNo, title){
+		let actionUrl = '/display/gnb/tab/banner/list?cateNo='+cateNo;
+		let tag2 = '';
+		$.getJSON(actionUrl
+		, function(result, status){
+			var bannerImgUrl = [[${@environment.getProperty('domain.image')}]];
+			var planninImgUrl = [[${@environment.getProperty('upload.image.view')}]];
+			if(result.length>0){
+				tag2 += '		<div class="tit">\n';
+				tag2 += '			<p>'+title+'</p>\n';
+				tag2 += '		</div>\n';
+				tag2 += '		<div class="list">\n';
+				tag2 += '			<ul class="clear event_con">\n';
+				$.each(result, function (idx, item){
+					tag2 += '				<li>\n';
+					tag2 += '					<a href="javascript:void(0);" onclick="cfnGoToPage(\''+item.strVar1+'\')">\n';
+					if(item.bannerGb=='ADMIN'){
+						tag2 += '						<div class="ev_img"><img src="'+bannerImgUrl+''+item.imgPath1+'" alt=""></div>\n';
+					}else{
+						tag2 += '						<div class="ev_img"><img src="'+planninImgUrl+''+item.imgPath1+'" alt=""></div>\n';
+					}
+
+					tag2 += '						<div class="txt">\n';
+					tag2 += '							<p class="tit">'+item.strTitle1+'</p>\n';
+					// tag2 += '							<p class="tit">'+item.strTitle2+'</p>\n';
+					tag2 += '						</div>\n';
+					tag2 += '					</a>\n';
+					tag2 += '				</li>\n';
+				});
+				tag2 += '			</ul>\n';
+				tag2 += '		</div>\n';
+			}
+			$('#id'+cateNo).append(tag2);
+			return tag2;
+		});
+
+	}
+
 	// GNB탭 생성
 	let fnCreateGnbTab = function() {
 		$.getJSON('/display/gnb/tab/list'
@@ -658,6 +670,7 @@
 								$.each(allCate, function(allCateIdx, allCateItem) {
 									if (item.cate1No == allCateItem.cate1No) {
 										let gnbCate = fnGetGnbCategory(allCateItem);
+										fnGetGnbBanner(item.cate1No ,item.gtabBannerTitle);
 										$('#divGnbTab').append(gnbCate);
 										$('#ulGnbTab').append(gnbCate);
 									}

+ 1 - 5
src/main/webapp/WEB-INF/views/web/common/layout/PlanningLayoutWeb.html

@@ -14,7 +14,7 @@
 </div>
 	
 <th:block th:replace="~{web/common/fragments/VariablesWeb :: variables}"></th:block>
-
+<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
 
 <!-- GNB -->
 <th:block th:if="${brandGroupInfo == null }">
@@ -23,8 +23,6 @@
 <th:block th:if="${brandGroupInfo != null }">
 	<header id="header" th:replace="~{web/common/fragments/BrandGnbWeb :: gnb}"></header>
 </th:block>
-
-
 <!--// GNB -->
 
 <!-- CONTENT AREA -->
@@ -34,8 +32,6 @@
 <!-- Footer -->
 <footer id="footer" th:replace="~{web/common/fragments/FooterWeb :: footer}"></footer>
 
-<th:block th:replace="~{web/common/fragments/ScriptsWeb :: scripts}"></th:block>
-
 <script th:inline="javascript">
 /*<![CDATA[*/
 	$(document).ready(function() {

+ 65 - 7
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -37,18 +37,21 @@
 										<div class="swiper-slide">
 											<th:block th:if="${ContentsData.imgPath1!=null && ContentsData.imgPath1!=''}">
 												<div class="txtWrap">
+
 													<th:block th:if="${ContentsData.strVar5!=null && ContentsData.strVar5!=''}">
 														<p class="vrt_txt" th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></p>
-														<p class="vrt_txt" th:if="${ContentsData.strVar5!='P'}">EVENT</p>
+														<p class="vrt_txt" th:if="${ContentsData.strVar5!='P'}" >EVENT</p>
 													</th:block>
 													<dl th:class="${ContentsData.strVar7=='BLACK'?'':'w'}">
 														<dt th:if="${ContentsData.strVar5=='P'}" th:text="${ContentsData.planBrandGroupNm}"></dt>
 														<dt th:if="${ContentsData.strVar5!='P'}" >EVENT</dt>
-														<dd th:text="${ContentsData.strTitle1}"></dd>
-														<!--<dd>NEW ARRIVAL</dd>-->
+														<dd class="mainTitle">
+															<input type="hidden" name="mainTitlee" th:value="${ContentsData.strTitle1}"/>
+														</dd>
+<!--														<dd>NEW ARRIVAL</dd>-->
 														<dd class="txt_xs" th:text="${ContentsData.subText1}"></dd>
 													</dl>
-													<button type="button" class="btn"><span>자세히 보기</span></button>
+													<button type="button" class="btn" th:onclick="cfnGoToPage([[${ContentsData.strVar1}]]);"><span>자세히 보기</span></button>
 												</div>
 												<!--<img src="/images/pc/thumb/main_visual01.jpg" alt="">-->
 												<img th:src="${@environment.getProperty('domain.image')+ContentsData.imgPath1}">
@@ -140,8 +143,12 @@
 				<th:block th:if="${contentsLoc=='004'}">
 					<div class="content main_it">
 						<div class="cont_head">
-							<p class="displayH" th:text="${mainLayoutData.contentsTitle}"></p>
-							<a href="#none"><span>전체보기</span></a>
+							<p class="displayH" id="id004">
+								<input type="hidden" name="title" th:value="${mainLayoutData.contentsTitle}">
+							</p>
+							<th:block th:each="ContentsData, ContentsStat : ${mainLayoutData.ContentsList}">
+								<a href="javascript:void(0);" th:onclick="cfnGoToPage([[${ContentsData.strVar1}]]);"><span>전체보기</span></a>
+							</th:block>
 						</div>
 						<div class="cont_body">
 							<div class="it_nav">
@@ -177,6 +184,9 @@
 											</div>
 										</th:block>
 									</div>
+									<div class="swiper-controls">
+										<div class="swiper-scrollbar"></div>
+									</div>
 								</div>
 							</th:block>
 						</div>
@@ -218,7 +228,9 @@
 				<th:block th:if="${contentsLoc=='006'}">
 					<div class="content wide main_deal" th:if="${mainLayoutData.socialInfo != null}">
 						<div class="cont_head">
-							<p class="displayH" id="id006" th:text="${mainLayoutData.contentsTitle}">오늘만<br>이 가격에 만나요</p>
+							<p class="displayH" id="id006">
+								<input type="hidden" name="title" th:value="${mainLayoutData.contentsTitle}">
+							</p>
 							<a href="javascript:void(0);" onclick="cfnGoToPage(_PAGE_SOCIAL_MAIN);"><span>전체보기</span></a>
 							<div class="deal_progress">
 								<div class="bar_current" style="width:33.333%"><span>HERE</span></div>
@@ -1108,6 +1120,52 @@ var main_tv_slide = new Swiper ('.main_tv .post-tv', {
 		// var brCheck = "오늘만 <br> 이 가격@".split("<br>");
 		// console.log(brCheck[0]);
 		// console.log(brCheck[1]);
+
+		// 몰메인 <br> 태그
+		$('.mainTitle').each(function (){
+			let tag = '';
+			var brText = $(this).find("input[name=mainTitlee]").val();
+
+			if(brText.indexOf('<br>') > -1){
+				var reText = brText.split("<br>");
+				tag += reText[0];
+				tag += '<br>';
+				tag += reText[1];
+			}else{
+				tag += brText;
+			}
+			$(this).append(tag);
+		});
+
+		// 잇아이템 <br> 태그
+		var id004Text = $("#id004").find("input[name=title]").val();
+		if(id004Text.indexOf('<br>') > -1){
+			let tag = '';
+			var reText = id004Text.split("<br>");
+			tag += reText[0];
+			tag += '<br>';
+			tag += reText[1];
+			$("#id004").append(tag);
+		}else{
+			let tag = '';
+			tag += id004Text;
+			$("#id004").append(tag);
+		}
+
+		// 핫딜 <br> 태그
+		var id006Text = $("#id006").find("input[name=title]").val();
+		if(id006Text.indexOf('<br>') > -1){
+			let tag = '';
+			var reText = id006Text.split("<br>");
+			tag += reText[0];
+			tag += '<br>';
+			tag += reText[1];
+			$("#id006").append(tag);
+		}else{
+			let tag = '';
+			tag += id006Text;
+			$("#id006").append(tag);
+		}
 	});
 /*]]>*/
 </script>

+ 27 - 43
src/main/webapp/WEB-INF/views/web/mypage/MypageCouponDetailFormWeb.html

@@ -17,48 +17,32 @@
  *******************************************************************************
  -->
 <!-- 쿠폰 상세보기 팝업 -->
-<div class="modal-dialog" role="document">
-    <div class="modal-content">
-        <div class="modal-header">
-            <h5 class="modal-title" th:text="${couponDetailInfo.cpnNm}"></h5>
-        </div>
-        <div class="modal-body">
-            <div class="pop_cont">
-                <p th:if="${couponDetailInfo.buyLimitAmt < 1}"><strong>사용조건</strong>제한없음</p>
-                <p th:unless="${couponDetailInfo.buyLimitAmt < 1}"><strong>사용조건</strong>[[${#numbers.formatInteger(couponDetailInfo.buyLimitAmt,0,'COMMA')}]]원 이상 구매 시 최대 [[${#numbers.formatInteger(couponDetailInfo.maxDcAmt,0,'COMMA')}]]원 할인 </p>
-                <p th:if="${couponDetailInfo.custPubLimitQty < 1}"><strong>발급수량</strong>제한없음</p>
-                <p th:unless="${couponDetailInfo.custPubLimitQty < 1}"><strong>발급수량</strong>1인 최대 [[${#numbers.formatInteger(couponDetailInfo.custPubLimitQty,0,'COMMA')}]] 매</p>
-                <p><strong>유효기간</strong>[[${couponDetailInfo.availStdt}]] ~ [[${couponDetailInfo.availEddt}]]</p>
-             
-                <p><strong>브랜드</strong>
-                   <th:block th:each="BrandData, BrandStat : ${cpnDtlRefvalBrandList}">
-                		[[${BrandData.brandEnm}]],
-               		</th:block>
-                </p>
-                
-                <p><strong>카테고리</strong>
-                	<th:block th:each="CateData, CateStat : ${cpnDtlRefvalCateList}">
-                		[[${CateData.cateNm}]],
-                	</th:block>
-                </p>
-                
-                <p><strong>상품</strong>
-                	<th:block th:each="GoodsData, GoodsStat : ${cpnDtlRefvalApplyGoodsList}">
-                		[[${GoodsData.goodsNm}]],
-                	</th:block>
-                </p>
-                
-                <p><strong>제외상품</strong>
-                	<th:block th:each="ExceptData, ExceptStat : ${cpnDtlRefvalExceptGoodsList}">
-                		[[${ExceptData.goodsNm}]],
-               		</th:block>
-                </p>
-                
+<div class="modal-header">
+    <h5 class="modal-title" id="couponInfoLabel" th:text="${couponDetailInfo.cpnNm}"></h5>
+</div>
+<div class="modal-body">
+    <div class="pop_cont">
+        <dl>
+            <div>
+                <dt>사용조건</dt>
+                <dd  th:text="${couponDetailInfo.useCondition}"></dd>
+            </div>
+            <div>
+                <dt>발급수량</dt>
+                <dd th:if="${couponDetailInfo.issueCondition!=null && couponDetailInfo.issueCondition!=''}"th:text="${couponDetailInfo.issueCondition}"></dd>
+                <dd th:unless="${couponDetailInfo.issueCondition!=null && couponDetailInfo.issueCondition!=''}">제한없음</dd>
+            </div>
+            <div>
+                <dt>유효기간</dt>
+                <dd>
+                    <span th:text="${couponDetailInfo.availStdt}"></span>&nbsp;~&nbsp;<span th:text="${couponDetailInfo.availEddt}"></span>
+                </dd>
             </div>
-        </div>
-        <div class="modal-footer">
-            <p>본 쿠폰은 특정 상품&#47;행사에 적용되는 쿠폰이며,적용가능여부는 상품별 상이할 수 있습니다.</p>
-            <p>본 이벤트는 당사 사정에 따라 사전고지 없이 변경 또는 조기종료 될 수 있습니다.</p>
-        </div>
+            <div th:if="${couponDetailInfo.tgtCondition!=null}">
+                <dt>대상조건</dt>
+                <dd th:text="${couponDetailInfo.tgtCondition}"> 
+                </dd>
+            </div>
+        </dl>
     </div>
-</div>
+</div>

+ 29 - 15
src/main/webapp/WEB-INF/views/web/mypage/MypageCouponFormWeb.html

@@ -64,34 +64,36 @@
 											<li>
 												<!-- 쿠폰사용 기한 -->
 												<div
-													th:class="${CouponData.userYn == 'Y' ? 'coupon' : 'coupon disable'}">
+													th:class="${CouponData.expireYn == 'N' ? 'coupon' : 'coupon disable'}">
 													<div>
 														<p class="cp_name" th:text="${CouponData.cpnNm}"></p>
 														<p class="cp_cont">
-															<th:block th:if="${CouponData.dcWay == '할인율'}">
-																<span><em th:text="${CouponData.dcPval}"></em>%</span>
+															<th:block th:if="${CouponData.dcWay == '%'}">
+																<span><em th:text="${CouponData.dcVal}"></em>%</span>
 															</th:block>
-															<th:block th:unless="${CouponData.dcWay == '할인율'}">
+															<th:block th:unless="${CouponData.dcWay == '%'}">
 																<span><em
-																	th:text="${#numbers.formatInteger(CouponData.dcPval,0,'COMMA')}"></em>원</span>
+																	th:text="${#numbers.formatInteger(CouponData.dcVal,0,'COMMA')}"></em>원</span>
 															</th:block>
 
 														</p>
 														<p class="cp_condition">
-															[[${#numbers.formatInteger(CouponData.buyLimitAmt,0,'COMMA')}]]원
+															<!-- [[${#numbers.formatInteger(CouponData.buyLimitAmt,0,'COMMA')}]]원
 															이상 구매 시 최대
 															[[${#numbers.formatInteger(CouponData.maxDcAmt,0,'COMMA')}]]원
-															할인 <span><em class="tag primary_line"
-																th:text="${CouponData.cnt}+' 장 보유'"></em></span>
+															할인  -->
+															[[${CouponData.useCondition}]]
+															<span><em class="tag primary_line"
+																th:text="${CouponData.cpnCnt}+' 장 보유'"></em></span>
 														</p>
 													</div>
-													<th:block th:if="${CouponData.userYn == 'Y'}">
+													<th:block th:if="${CouponData.expireYn == 'Y'}">
 														<p class="cp_date">
 															<span th:text="${CouponData.availStdt}"></span>&nbsp;~&nbsp;<span
 																th:text="${CouponData.availEddt}"></span>
 														</p>
 													</th:block>
-													<th:block th:unless="${CouponData.userYn == 'Y'}">
+													<th:block th:unless="${CouponData.expireYn == 'Y'}">
 														<p class="cp_date">사용완료</p>
 													</th:block>
 
@@ -125,7 +127,14 @@
 		</div>
 		<!-- // CONT-BODY -->
 		<!-- 쿠폰 사용 내역 팝업 -->
-		<div class="modal fade dp_coupon_pop"  id="coupon_modal_02" tabindex="-1" role="dialog"	aria-labelledby="PopupBasicLabel" aria-hidden="true"></div>
+		<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+                <!-- 쿠폰사용안내 팝업 내용 -->      
+			</div>
+		</div>
+		<a href="#close-modal" rel="modal:close" id="couponInfoPop_close" class="close-modal">Close</a>
+		</div>
 
 		<!-- // container -->
 		<script th:inline="javascript">
@@ -134,14 +143,19 @@ let couponList = ([[${couponList}]]);
 
 // 사용안내 모달
 var useInfoCoupon = function (id) {
+	var data = {cpnId : id};
+	var jsonData = JSON.stringify(data);
+	
 	 $.ajax( {
-		type		: "GET",
-		url 		: '/mypage/coupon/detailPop?cpnId='+ id,
+		type		: "POST",
+		url 		: '/mypage/coupon/detailPop',
+		data		: jsonData,
+		contentType: 'application/json',
 		dataType 	: 'html',
 		success 	: function(result) {
 			if (result != null) {
-				$("#coupon_modal_02").html(result);
-				$("#coupon_modal_02").modal("show");
+				$("#couponInfoPop").html(result);
+				$("#couponInfoPop").modal("show");
 			}
 		}
 	});

+ 14 - 3
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -238,7 +238,13 @@
   </div>       
   
 
-<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true"></div>
+<div class="modal fade couponInfo_pop" id="couponInfoPop" tabindex="-1" role="dialog" aria-labelledby="couponInfoLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+                <!-- 쿠폰사용안내 팝업 내용 -->      
+			</div>
+		</div>
+</div>
 <form id="pollListForm" name="pollListForm" th:action="@{'/planning/event/poll/form'}" th:method="post">
 	<input type="hidden" name="planSq" th:value="${planInfo.planSq}"/>
 </form>
@@ -668,9 +674,14 @@ if(coupon.length>0){
 
 //사용안내 모달
 var useInfoCoupon = function (id) {
+	var data = {cpnId : id};
+	var jsonData = JSON.stringify(data);
+	
 	 $.ajax( {
-		type		: "GET",
-		url 		: '/planning/coupon/detail?cpnId='+ id,
+		type		: "POST",
+		url 		: '/planning/coupon/detailPop',
+		data		: jsonData,
+		contentType: 'application/json',
 		dataType 	: 'html',
 		success 	: function(result) {
 			if (result != null) {