Przeglądaj źródła

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

xodud1202 5 lat temu
rodzic
commit
7fcf77e6d7

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

@@ -53,7 +53,7 @@ public interface TsfGoodsDao {
 	 * @author eskim
 	 * @date 2021. 2. 9
 	 */
-	Collection<GoodsImg> getGoodsImgList(String goodsCd);
+	Collection<GoodsImg> getGoodsImgList(Goods goods);
 
 	/**
 	 * 상품 동영상정보
@@ -193,4 +193,14 @@ public interface TsfGoodsDao {
 	 */
 	Collection<LookbookGoods> getLookbookBannerGoodsList(Lookbook lookbook);
 
+	/**
+	 * 상품 사이즈 선택 시 재고수량 가져오기
+	 *
+	 * @param goodsStock
+	 * @return
+	 * @author eskim
+	 * @since 2021. 3. 3
+	 */
+	int getGoodsStockQty(GoodsStock goodsStock);
+	
 }

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

@@ -109,7 +109,7 @@ public class TsfCustomerService {
 	 */
 	@Transactional("shopTxnManager")
 	public void saveCustomerPassword(Customer customer) {
-		customer.setEncodedPasswd(passwordEncoder.encode(customer.getPasswd()));
+		customer.setEncodedPasswd(passwordEncoder.encodeSha256(customer.getPasswd()));
 		coreCustomerService.saveCustomerPassword(customer);
 	}
 
@@ -278,7 +278,7 @@ public class TsfCustomerService {
 		// 1. validation
 		customer.setHypenCellPhone();
 		customer.encryptData();
-		customer.setEncodedPasswd(passwordEncoder.encode(customer.getPasswd()));
+		customer.setEncodedPasswd(passwordEncoder.encodeSha256(customer.getPasswd()));
 
 		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
 		customer.setCustGb(TscConstants.CustGb.NORMAL.value());

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

@@ -181,9 +181,8 @@ public class TsfGoodsService {
 	 * @author eskim
 	 * @since 2021. 2. 9
 	 */
-	public Collection<GoodsImg> getGoodsImgList(String goodsCd) {
-		log.info("aa\\ {}  ", goodsDao.getGoodsImgList(goodsCd));
-		return goodsDao.getGoodsImgList(goodsCd);
+	public Collection<GoodsImg> getGoodsImgList(Goods goods) {
+		return goodsDao.getGoodsImgList(goods);
 	}
 
 	/**
@@ -383,5 +382,26 @@ public class TsfGoodsService {
 		return lookbookBannerList;
 	}
 
+	/**
+	 * 상품 사이즈 선택 시 재고수량 가져오기
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 7. 9
+	 */
+	public int getGoodsStockQty(GoodsStock goodsStock) {
+		int result = 0;
+		// 예약상품 여부 확인
+		//int goodsResSellCount = goodsDao.getGoodsResSellCount(stock.getGoodsCd());
+
+		//if ("N".equals(stock.getSelfGoodsYn()) || goodsResSellCount > 0) {
+			result = goodsDao.getGoodsStockQty(goodsStock);
+		//} else {
+		//	result = goodsDao.getGoodsStoreStockQty(stock);
+		//}
 
+		return result;
+
+	}
 }

+ 36 - 9
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -7,6 +7,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 import com.style24.core.biz.service.TscEnvsetService;
@@ -18,6 +19,7 @@ import com.style24.front.support.env.TsfConstants;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.CardPromotion;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.Lookbook;
 
 import lombok.extern.slf4j.Slf4j;
@@ -72,13 +74,18 @@ public class TsfGoodsController extends TsfBaseController {
 
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
 		setGoods(paramsGoods);
-
+		
+		
 		String mobileYn = paramsGoods.getMobileYn();
 		if ("Y".equals(mobileYn)) {
 			paramsGoods.setFrontGb("M");
 		}
 
 		Goods goods = goodsService.getGoodsInfo(paramsGoods);
+		// 조회색상이 없으면 메인컬러 설정
+		if(StringUtils.isEmpty(paramsGoods.getColorCd())) {
+			paramsGoods.setColorCd(goods.getMainColorCd());
+		}
 
 		if (goods == null || goods.getGoodsCd().isEmpty()) {
 			if (StringUtils.isBlank(afLinkCd)) {
@@ -108,25 +115,29 @@ public class TsfGoodsController extends TsfBaseController {
 		paramsGoods.setCateGb("G032_101"); 		//by item
 		mav.addObject("goodsNavigation", goodsService.getGoodsNavigation(paramsGoods));
 		// 상품 이미지정보
-		mav.addObject("goodsImgList", goodsService.getGoodsImgList(paramsGoods.getGoodsCd()));
+		mav.addObject("goodsImgList", goodsService.getGoodsImgList(paramsGoods));
 		// 상품 동영상정보
 		mav.addObject("goodsVideoList", goodsService.getVideoList(paramsGoods.getGoodsCd()));
 
-		if ("D".equals(goods.getGoodsType())) {	// 딜상품
+		if ("G056_D".equals(goods.getGoodsType())) {	// 딜상품
 			// 딜 구성상품 정보
 			paramsGoods.setGoodsComposeSearchYn("Y");
 			mav.addObject("goodsExtendList", goodsService.getGoodsDealComposeList(paramsGoods));
 		} else {
-			if ("N".equals(goods.getGoodsType())) {	// 일반상품
-				// 상품 옵션1(색상) 정보
-				mav.addObject("goodsOption1List", goodsService.getGoodsOption1List(paramsGoods));
-				// 상품 옵션2(사이즈) 정보
-				mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
+			if ("G056_N".equals(goods.getGoodsType())) {	// 일반상품
+				if ("Y".equals(goods.getSelfGoodsYn()) ) {  // 자사상품
+					// 상품 옵션1(색상) 정보
+					mav.addObject("goodsOption1List", goodsService.getGoodsOption1List(paramsGoods));
+					// 상품 옵션2(사이즈) 정보
+					mav.addObject("goodsOption2List", goodsService.getGoodsOption2List(paramsGoods));
+				}else {
+					//mav.addObject("goodsOptionList", goodsService.getGoodsOptionList(paramsGoods));
+				}
 
 //				// 상품 고시정보
 				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 
-			} else if ("S".equals(goods.getGoodsType())) {		// 셋트상품
+			} else if ("G056_S".equals(goods.getGoodsType())) {		// 셋트상품
 //				mav.addObject("goodsExtendList", goodsService.getGoodsSetExtendList(paramsGoods));
 			}
 			// 상품쿠폰
@@ -164,6 +175,7 @@ public class TsfGoodsController extends TsfBaseController {
 		//기존쿠키 가져오기
 		setTodayGoodsCd(paramsGoods);
 
+		
 		mav.addObject("params", paramsGoods);
 
 		if ("D".equals(goods.getGoodsType())) {
@@ -270,4 +282,19 @@ public class TsfGoodsController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("goods/CardPrmtForm"));
 		return mav;
 	}
+	
+	/**
+	 * 상품 사이즈 선택 시 재고수량 가져오기
+	 * 
+	 * @return
+	 * @author eskim
+	 * @since 2021. 3. 4
+	 */
+	@GetMapping("/detail/ajaxGoodsStockQty")
+	@ResponseBody
+	public int getAjaxGoodsStockQty(GoodsStock goodsStock) {
+		int stockQty = 0;
+		stockQty = goodsService.getGoodsStockQty(goodsStock);
+		return stockQty;
+	}
 }

+ 2 - 2
src/main/java/com/style24/front/support/security/TsfAuthenticationProvider.java

@@ -82,8 +82,8 @@ public class TsfAuthenticationProvider implements AuthenticationProvider {
 
 		/// SNS로그인이 아닌 일반로그인 이면
 		if (!loginId.startsWith(TsfConstants.SNSLOGIN_PREFIX)) {
-			log.info("encoded password: {}", passwordEncoder.encode(passwd));
-			boolean isMatch = passwordEncoder.matches(passwd, loginInfo.getPasswd());
+			log.info("encoded password: {}", passwordEncoder.encodeSha256(passwd));
+			boolean isMatch = passwordEncoder.matchesSha256(passwd, loginInfo.getPasswd());
 			log.info("Password is match?: {}", isMatch);
 
 			if (!isMatch) {

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

@@ -72,7 +72,7 @@ public class Goods extends TscBaseDomain {
 	private String adultYn;		//성인용품여부
 
 	private String colorCd;		//색상코드
-	private String colorNM;		//색상코드명
+	private String colorNm;		//색상코드명
 	private String brandnm;		//브랜드명
 	private Integer brandGroupNo;	//브랜드그룹번호
 	private String brandGroupNm;	//브랜드그룹명

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

@@ -31,5 +31,6 @@ public class GoodsStock extends TscBaseDomain {
 	private String sysImgNm;		// 상품이미지 명
 	private int goodsQty;			// 안전재고
 	private int stockQty;			// 상품 재고
-
+	private String selfGoodsYn;		// 자사상품구분
+	
 }

+ 83 - 21
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -122,9 +122,8 @@
 		     , G.GOODS_TYPE
 		     , G.CHANGEABLE_YN
 		     , G.RETURNABLE_YN
-		     , (SELECT CATE1_NO FROM TB_SITE_BRAND WHERE  BRAND_CD = G.BRAND_CD AND SITE_CD = #{siteCd} AND USE_YN = 'Y') AS BRAND_CATE1_NO
 		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(#{colorCd}, IFNULL(G.MAIN_COLOR_CD,'XX')) AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
-		     /*, (SELECT ) AS COLOR_NM*/
+		     , (SELECT COLOR_KNM FROM tb_color C WHERE COLOR_CD = IFNULL(NULLIF(#{colorCd},'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y') AS COLOR_NM
 		     , BP.CURR_PRICE AS BENEFIT_PRICE
 		     , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
 		     , (CASE WHEN G.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
@@ -205,8 +204,8 @@
 		LIMIT 1
 	</select>
 	
-	<!-- 상품 옵션1 목록 -->
-	<select id="getGoodsOption1List" parameterType="Goods" resultType="GoodsStock">
+	<!-- 상품 옵션1 목록  - 자사용 -->
+	<select id="getGoodsOption1List_ORG" parameterType="Goods" resultType="GoodsStock">
 		/* TsfGoods.getGoodsOption1List */
 		SELECT GOODS_CD
 		     , OPT_CD1
@@ -239,7 +238,7 @@
 		                      WHERE DISP_YN = 'Y'
 		                      GROUP BY GOODS_CD, OPT_CD1) S ON G.GOODS_CD = S.GOODS_CD 
 		                                                    AND O.OPT_CD1 = S.OPT_CD1
-		     WHERE G.GOODS_CD = #{goodsCd})
+		     WHERE G.GOODS_CD = #{goodsCd}
 		     AND G.GOODS_TYPE = 'G056_N' -- 일반상품
 		     ORDER BY O.DISP_ORD
 		) Z
@@ -257,8 +256,61 @@
 		ORDER BY DISP_ORD
 	</select>
 	
-	<!-- 상품 옵션2 목록-->
+	<!-- 상품 옵션1 목록 - 자사용 -->
+	<select id="getGoodsOption1List" parameterType="Goods" resultType="GoodsStock">
+		/* TsfGoods.getGoodsOption1List */
+		SELECT *
+		FROM (
+		      SELECT G.GOODS_CD
+		           , G.SELF_GOODS_YN
+		           , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IF(G.SELF_GOODS_YN ='Y', O.OPT_CD1, 'XX') AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
+		           , O.OPT_CD1
+		           , O.DISP_ORD
+		           , RANK() OVER(PARTITION BY O.GOODS_CD , O.OPT_CD1 ORDER BY O.DISP_ORD) ROWNUM
+		      FROM TB_GOODS G
+		      INNER JOIN TB_OPTION O ON G.GOODS_CD = O.GOODS_CD
+		                             AND O.DISP_YN = 'Y' 
+		      WHERE G.GOODS_CD =  #{goodsCd}
+		      AND G.GOODS_TYPE = 'G056_N' -- 일반상품
+		) A
+		WHERE ROWNUM = 1
+	</select>
+		
+	<!-- 상품 옵션2 목록  - 자사용-->
 	<select id="getGoodsOption2List" parameterType="Goods" resultType="GoodsStock">
+		/* TsfGoods.getGoodsOption2List */
+		SELECT GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , ADD_PRICE 
+		     , (CASE WHEN STOCK_QTY - MIN_ORD_QTY >= 0 THEN STOCK_QTY
+		             ELSE 0
+		        END ) AS STOCK_QTY
+		     , SOLDOUT_YN
+		     , DISP_ORD
+		FROM (
+		      SELECT O.GOODS_CD
+		           , O.OPT_CD
+		           , O.OPT_CD1
+		           , O.OPT_CD2
+		           , O.ADD_PRICE 
+		           , VS.CURR_STOCK_QTY AS STOCK_QTY
+		           , O.SOLDOUT_YN
+		           , O.DISP_ORD
+		           , (SELECT MIN_ORD_QTY FROM TB_GOODS WHERE GOODS_CD = O.GOODS_CD ) AS MIN_ORD_QTY
+		      FROM TB_OPTION O 
+		      INNER JOIN VW_STOCK VS ON O.GOODS_CD = VS.GOODS_CD
+		                          AND O.OPT_CD = VS.OPT_CD
+		      WHERE O.GOODS_CD = #{goodsCd}
+		      AND O.OPT_CD1 = #{colorCd}
+		      AND O.DISP_YN = 'Y'
+		     ) B
+		ORDER BY DISP_ORD
+	</select>
+	
+	<!-- 상품 옵션2 목록  - 자사용-->
+	<select id="getGoodsOption2List_ORG" parameterType="Goods" resultType="GoodsStock">
 		/* TsfGoods.getGoodsOption2List */
 		SELECT GOODS_CD
 		     , OPT_CD
@@ -282,23 +334,14 @@
 		               , OPT_CD
 		               , OPT_CD1
 		               , OPT_CD2
-		               , STOCK_QTY
+		               , CURR_STOCK_QTY AS STOCK_QTY
 		               , SOLDOUT_YN
 		               , DISP_ORD
 		               , (SELECT MIN_ORD_QTY FROM TB_GOODS WHERE GOODS_CD = A.GOODS_CD ) AS MIN_ORD_QTY
-		          FROM (
-		                SELECT GOODS_CD
-		                     , OPT_CD
-		                     , OPT_CD1
-		                     , OPT_CD2
-		                     , CURR_STOCK_QTY AS STOCK_QTY
-		                     , SOLDOUT_YN
-		                     , DISP_ORD
-		                FROM VW_STOCK
-		                WHERE GOODS_CD = #{goodsCd}
-		                AND DISP_YN ='Y'
-		                AND OPT_CD2 IS NOT NULL
-		               ) A
+		          FROM VW_STOCK A
+		          WHERE GOODS_CD = #{goodsCd}
+		          AND COLOR = #{colorCd}
+		          AND DISP_YN = 'Y'
 		        ) B
 		     ) Z
 		WHERE 1 = 1
@@ -346,7 +389,7 @@
 	</select>
 		
 	<!-- 상품 이미지 정보 -->
-	<select id="getGoodsImgList" parameterType="String" resultType="GoodsImg">
+	<select id="getGoodsImgList" parameterType="Goods" resultType="GoodsImg">
 		/* TsfGoods.getGoodsImgList */
 		SELECT GOODS_CD
 		     , COLOR_CD
@@ -356,6 +399,7 @@
 		     , MOUSEOVER_IMG_YN
 		FROM TB_GOODS_IMG
 		WHERE GOODS_CD = #{goodsCd}
+		AND COLOR_CD = #{colorCd}
 		ORDER BY DISP_ORD
 	</select>
 	
@@ -603,4 +647,22 @@
 		) Z
 	</select>
 	
+	<!-- 상품 사이즈 선택 시 재고수량 가져오기 -->
+	<select id="getGoodsStockQty"  parameterType="GoodsStock" resultType="int">
+		/* TsfGoods.getGoodsStockQty */
+		SELECT (CASE WHEN STOCK_QTY - MIN_ORD_QTY >= 0 THEN STOCK_QTY
+		             ELSE 0
+		        END ) AS STOCK_QTY
+		FROM ( 
+		    SELECT CASE WHEN A.SOLDOUT_YN = 'Y' THEN 0
+		                ELSE A.CURR_STOCK_QTY
+		           END AS STOCK_QTY
+		           , B.MIN_ORD_QTY
+		    FROM  VW_STOCK A
+		    INNER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
+		    WHERE A.GOODS_CD = #{goodsCd}
+		    AND A.OPT_CD = #{optCd}
+		) Z
+	</select>
+	
 </mapper>

+ 58 - 55
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -26,65 +26,67 @@
 	<!-- 적립예정 포인트조회-->
 	<select id="getExpectedPointInfo" parameterType="Point" resultType="Point">
 	/* TsfPoint.getExpectedPointInfo */
-		SELECT IFNULL(SUM(GV_PNT_AMT),0) AS expectedPntAmt
-		FROM   TB_CUST_POINT
+		SELECT IFNULL(SUM(PNT_AMT),0) AS expectedPntAmt
+		FROM   tb_cust_point_hst
 		WHERE  CUST_NO = #{custNo}
-		AND    EXP_BE_DT <![CDATA[>]]> NOW()
+		AND    PNT_UPLOAD_STAT = 'G070_10'
+		AND    PNT_AMT <![CDATA[>]]> 0
+		AND    SWITCH_DUE_DT <![CDATA[>]]> NOW()
 	</select>
 	
 	<!-- 한달 이내 소멸예정 포인트조회-->
 	<select id="getExtinctPointInfo" parameterType="Point" resultType="Point">
 	/* TsfPoint.getExtinctPointInfo */
-		SELECT IFNULL(SUM(PNT_AMT),0) AS expectedExpirePntAmt
-		FROM   tb_cust_point_hst
-		WHERE  PNT_UPLOAD_STAT = 'G070_10'
-		AND    CUST_NO = #{custNo}
-		AND    SWITCH_DUE_DT <![CDATA[>]]> NOW()
+		SELECT IFNULL(SUM(RM_PNT_AMT),0) AS expectedExpirePntAmt
+		FROM   TB_CUST_POINT
+		WHERE  CUST_NO = #{custNo}
+		AND    NOW()  BETWEEN DATE_ADD(EXP_BE_DT,INTERVAL -1 MONTH ) AND EXP_BE_DT;
 	</select>
 	
 	<!-- 적립내역 조회-->
 	<select id="getAccumulatePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAccumulatePointList */
-		SELECT
-		CASE   TCC.CD_NM
-		WHEN   '예정포인트적립' THEN '상품 구매'
-		WHEN   '상품평승인' THEN '리뷰'
-		WHEN   '온라인이벤트' THEN '이벤트'
-		WHEN   '기타' THEN '관리자'
+	SELECT
+		CASE   TCHP.OCCUR_GB
+		WHEN   'G069_12' THEN '상품 구매'
+		WHEN   'G069_20' THEN '리뷰'
+		WHEN   'G069_30' THEN '이벤트'
+		WHEN   'G069_90' THEN '관리자'
 		END AS OCCUR_GB ,	
-		CASE   TCC.CD  	
+		CASE   TCHP.OCCUR_GB  	
 		WHEN   'G069_12' THEN TG.GOODS_NM 
 		WHEN   'G069_20' THEN TG.GOODS_NM 
 		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
 		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-		END AS OCCUR_DTL_DESC
-			 , TCHP.PNT_AMT AS pntAmt
-			 , TCHP.UPD_DT  AS pntUploadDt
+		END AS  OCCUR_DTL_DESC
+			  , TCHP.PNT_AMT AS pntAmt
+			  , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
-		INNER JOIN TB_COMMON_CODE TCC
-		ON TCC.CD = TCHP.OCCUR_GB
-		INNER JOIN TB_ORDER_DETAIL TOD
+		LEFT JOIN TB_ORDER_DETAIL TOD
 		ON TOD.ORD_NO = TCHP.ORD_NO
-		INNER JOIN TB_GOODS TG 
+		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
+		LEFT JOIN TB_GOODS TG 
 		ON TG.GOODS_CD = TOD.GOODS_CD 
 		WHERE TCHP.CUST_NO = #{custNo}
 		AND TCHP.OCCUR_GB IN ('G069_12','G069_20','G069_30','G069_90')
+		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
 		AND TCHP.PNT_AMT <![CDATA[>]]> 0
-		GROUP BY CD_NM, PNT_AMT, GOODS_NM, CD,OCCUR_DTL_DESC, TCHP.UPD_DT
-		ORDER BY TCHP.UPD_DT DESC;
+		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+	ORDER BY TCHP.UPD_DT DESC
 	</select>
 	
 	<!-- 사용내역 조회-->
 	<select id="getUsePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getUsePointList */
-		SELECT
-		CASE   TCC.CD_NM
-		WHEN   '포인트사용' THEN '구매 사용'
-		WHEN   '상품평승인취소' THEN '구매 취소'
-		WHEN   '기타' THEN '관리자'
-		WHEN   '포인트소멸' THEN '소멸'
+	SELECT
+		CASE   TCHP.OCCUR_GB
+		WHEN   'G069_10' THEN '구매 사용'
+		WHEN   'G069_21' THEN '구매 취소'
+		WHEN   'G069_90' THEN '관리자'
+		WHEN   'G069_99' THEN '소멸'
 		END AS OCCUR_GB ,	
-		CASE   TCC.CD  	
+		CASE   TCHP.OCCUR_GB	
 		WHEN   'G069_10' THEN TG.GOODS_NM 
 		WHEN   'G069_21' THEN TG.GOODS_NM 
 		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
@@ -93,34 +95,34 @@
 			 , TCHP.PNT_AMT AS pntAmt
 			 , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
-		INNER JOIN TB_COMMON_CODE TCC
-		ON TCC.CD = TCHP.OCCUR_GB
-		INNER JOIN TB_ORDER_DETAIL TOD
+		LEFT JOIN TB_ORDER_DETAIL TOD
 		ON TOD.ORD_NO = TCHP.ORD_NO
-		INNER JOIN TB_GOODS TG 
+		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
+		LEFT JOIN TB_GOODS TG 
 		ON TG.GOODS_CD = TOD.GOODS_CD 
 		WHERE TCHP.CUST_NO = #{custNo}
 		AND TCHP.OCCUR_GB IN ('G069_10','G069_21','G069_90','G069_99')
+		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
 		AND 0 <![CDATA[>]]> TCHP.PNT_AMT
-		GROUP BY CD_NM, PNT_AMT, GOODS_NM, CD,OCCUR_DTL_DESC, TCHP.UPD_DT
-		ORDER BY TCHP.UPD_DT DESC;
+		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY  TCHP.OCCUR_GB, PNT_AMT, GOODS_NM,  TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+	ORDER BY TCHP.UPD_DT DESC;
 	</select>
 	
 	<!-- 전체내역 조회-->
 	<select id="getAllPointList" parameterType="Point" resultType="Point">
 		/* TsfPoint.getAllPointList */
-		SELECT
-		CASE   TCC.CD_NM
-		WHEN   '포인트사용' THEN '구매 사용'
-		WHEN   '상품평승인취소' THEN '구매 취소'
-		WHEN   '기타' THEN '관리자'
-		WHEN   '포인트소멸' THEN '소멸'
-		WHEN   '예정포인트적립' THEN '상품 구매'
-		WHEN   '상품평승인' THEN '리뷰'
-		WHEN   '온라인이벤트' THEN '이벤트'
-		WHEN   '기타' THEN '관리자'
+	SELECT
+		CASE   TCHP.OCCUR_GB
+		WHEN   'G069_10' THEN '구매 사용'
+		WHEN   'G069_12' THEN '상품 구매'
+		WHEN   'G069_20' THEN '리뷰'	
+		WHEN   'G069_21' THEN '구매 취소'
+		WHEN   'G069_30' THEN '이벤트'
+		WHEN   'G069_90' THEN '관리자'
+		WHEN   'G069_99' THEN '소멸'
 		END AS OCCUR_GB ,	
-		CASE   TCC.CD  	
+		CASE   TCHP.OCCUR_GB
 		WHEN   'G069_10' THEN TG.GOODS_NM
 		WHEN   'G069_12' THEN TG.GOODS_NM 
 		WHEN   'G069_20' THEN TG.GOODS_NM 
@@ -132,15 +134,16 @@
 			 , TCHP.PNT_AMT AS pntAmt
 			 , TCHP.UPD_DT  AS pntUploadDt
 		FROM TB_CUST_POINT_HST TCHP
-		INNER JOIN TB_COMMON_CODE TCC
-		ON TCC.CD = TCHP.OCCUR_GB
-		INNER JOIN TB_ORDER_DETAIL TOD
+		LEFT JOIN TB_ORDER_DETAIL TOD
 		ON TOD.ORD_NO = TCHP.ORD_NO
-		INNER JOIN TB_GOODS TG 
+		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
+		LEFT JOIN TB_GOODS TG 
 		ON TG.GOODS_CD = TOD.GOODS_CD 
-		WHERE TCHP.CUST_NO =  #{custNo}
+		WHERE TCHP.CUST_NO = #{custNo}
 		AND TCHP.OCCUR_GB IN ('G069_10','G069_12','G069_20','G069_21','G069_30','G069_90','G069_99')
-		GROUP BY CD_NM, PNT_AMT, GOODS_NM, CD,OCCUR_DTL_DESC, TCHP.UPD_DT
-		ORDER BY TCHP.UPD_DT DESC;
+		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
+		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
+	ORDER BY TCHP.UPD_DT DESC;
 	</select>
 </mapper>

+ 1 - 1
src/main/webapp/WEB-INF/views/web/customer/JoinFormWeb.html

@@ -126,7 +126,7 @@
 					<div class="form_field">
 						<label class="input_label sr-only">휴대폰번호</label>
 						<div class="input_wrap form_full">
-							<input type="text" id="cellPhnno" name="cellPhnno" placeholder="휴대폰 인증 해주세요." class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
+							<input type="text" id="cellPhnno" name="cellPhnno" placeholder="휴대폰 인증 해주세요." class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰" readonly="readonly"/>
 							<!-- case (휴대폰번호 형식이 맞지 않을경우,이미 가입되어있는 핸드폰번호일경우) -->
 							<div class="help_block">
 								<!-- 휴대폰번호 형식이 맞지 않을경우 -->

+ 2 - 1
src/main/webapp/WEB-INF/views/web/goods/CardPrmtFormWeb.html

@@ -17,7 +17,7 @@
 <div class="modal-dialog" role="document">
 	<div class="modal-content">
 		<div class="modal-header">
-			<h5 class="modal-title" id="bnfCardLabel">카드혜택111111</h5>
+			<h5 class="modal-title" id="bnfCardLabel">카드혜택</h5>
 		</div>
 		<div class="modal-body" th:if="${cardInfoList != null and !cardInfoList.empty}">
 			<div class="pop_cont">
@@ -94,4 +94,5 @@
 		</div>
 	</div>
 </div>	
+<a href="#close-modal" rel="modal:close" onclick="cfCloseLayer('layer_card_benefit')" class="close-modal">Close</a>
 </html>

+ 233 - 101
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -60,7 +60,10 @@
 					<input type="hidden" name="contentsLoc" th:value="${params.contentsLoc}" />
 					<input type="hidden" name="ithrCd"  th:value="${params.ithrCd}" />
 					<input type="hidden" name="planDtlSq" th:value="${params.planDtlSq}" />
-					<input type="hidden" name="sizeCd" />
+					<input type="hidden" name="optCd" />
+					<input type="hidden" name="optCd1" />
+					<input type="hidden" name="optCd2" />
+					<input type="hidden" name="addPrice" />
 					<input type="hidden" name="ordQty" />
 					<input type="hidden" name="stock" />
 					<input type="hidden" name="minOrdQty"/>
@@ -102,11 +105,11 @@
 										<span class="sale_percent" th:if="${goodsInfo.dcRate > 0}" th:text="|${goodsInfo.dcRate}%|">
 											5%
 										</span>
-										<span class="sale_price" th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}">
-											<em>134,100</em>원
+										<span class="sale_price" >
+											<em th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}">134,100</em>원
 										</span>
-										<del class="org_price" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">
-											149,000원
+										<del class="org_price" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" >
+											<em th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</em>
 										</del>
 										<span class="save_point">
 											스타일포인트 <th:block th:text="${#numbers.formatInteger(goodsInfo.pntAmt, 0,'COMMA')}"></th:block>P 적립예정
@@ -144,92 +147,43 @@
 								</dl>
 							</div>
 							<div class="option_box">
-								<div class="opt_color">
+								<th:block th:if="${goodsInfo.selfGoodsYn =='Y' }">
+								<div class="opt_color"  th:if="${goodsOption1List != null and !goodsOption1List.empty}" >
 									<div class="opt_header">
 										<span class="title">컬러</span>
-										<span class="color">그레이</span>
+										<span class="color" th:text="${goodsInfo.colorNm}">그레이</span>
 									</div>
-									<ul>
-										<li>
-											<a href="" class="on">  <!-- 해당 컬러 상품페이지로 이동 -->
-												<img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="그레이">
-											</a>
-										</li>
-										<li>
-											<a href="">
-												<img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="베이지">
-											</a>
-										</li>
-										<li>
-											<a href="">
-												<img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="그린">
-											</a>
-										</li>
-										<li>
-											<a href="">
-												<img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="핑크">
-											</a>
-										</li>
-										<li>
-											<a href="">
-												<img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="민트">
-											</a>
-										</li>
-										<li>
-											<a href="">
-												<img src="/images/pc/thumb/tmp_cartColor1.jpg" alt="블랙">
+									<ul >
+										<li th:each="goodsOption1, status : ${goodsOption1List}">
+											<a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])">  <!-- 해당 컬러 상품페이지로 이동 -->
+												<img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm}" alt="">
 											</a>
 										</li>
 									</ul>
 								</div>
-								<div class="opt_size">
+								<div class="opt_size"  th:if="${goodsOption2List != null and !goodsOption2List.empty}" >
 									<div class="opt_header">
 										<span class="title">사이즈</span>
 										<span class="size">
-											<em>95</em>
-											<em>(+1,000원)</em>
+											<em id="selectOptCd1"></em>
+											<em id="selectOptCd1addPrice"></em>
 										</span>
 										<button type="button" id="btn_infoSize_pop" class="btn_popup"><span>사이즈정보</span></button>
 									</div>
 									<div class="form_field">
-										<div>
+										<!-- <div>
 											<input type="radio" name="rdi-optsize" id="rdi-optsize1" value="" checked="">
 											<label for="rdi-optsize1"><span>90</span></label>
-										</div>
-										<div>
-											<input type="radio" name="rdi-optsize" id="rdi-optsize2" value="" disabled="">
-											<label for="rdi-optsize2"><span>95</span></label>
-										</div>
-										<div>
-											<input type="radio" name="rdi-optsize" id="rdi-optsize3" value="">
-											<label for="rdi-optsize3"><span>100</span></label>
-										</div>
-										<div>
-											<input type="radio" name="rdi-optsize" id="rdi-optsize4" value="">
-											<label for="rdi-optsize4"><span>105</span></label>
-										</div>
-										<div>
-											<input type="radio" name="rdi-optsize" id="rdi-optsize5" value="">
-											<label for="rdi-optsize5"><span>110</span></label>
-										</div>
-										<div>
-											<input type="radio" name="rdi-optsize" id="rdi-optsize6" value="">
-											<label for="rdi-optsize6"><span>115</span></label>
-										</div>
-										<div>
-											<input type="radio" name="rdi-optsize" id="rdi-optsize7" value="">
-											<label for="rdi-optsize7"><span>free</span></label>
-										</div>
-										<div>
-											<input type="radio" name="rdi-optsize" id="rdi-optsize8" value="">
-											<label for="rdi-optsize8"><span>size1</span></label>
-										</div>
-										<div>
-											<input type="radio" name="rdi-optsize" id="rdi-optsize9" value="">
-											<label for="rdi-optsize9"><span>size2</span></label>
+										</div> -->
+										<div  th:each="goodsOption2, status : ${goodsOption2List}">
+											<input type="radio" name="rdi-optsize"  th:disabled="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}" 
+													th:attr="addPrice=${goodsOption2.addPrice}, optCd1=${goodsOption2.optCd1}, optCd=${goodsOption2.optCd}">
+											<label th:for="${goodsInfo.goodsCd + '-'+ goodsInfo.colorCd + '-' +goodsOption2.optCd2}"><span th:text="${goodsOption2.optCd2}" th:onclick="jfViewStock(this, [[${goodsInfo.goodsCd}]],[[${goodsOption2.optCd1}]],[[${goodsOption2.optCd2}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]] )">100</span></label>
 										</div>
 									</div>
 								</div>
+								</th:block>
+								<th:block th:if="${goodsInfo.selfGoodsYn =='N' }">
 								<div class="opt_select">
 									<form class="form_wrap">
 										<div class="form_field">
@@ -255,12 +209,12 @@
 												</div>
 											</div>
 										</div>
-										<div class="form_field">
+										<!-- <div class="form_field">
 											<div class="select_custom item_opt2" disabled="">
 												<div class="combo">
 													<div class="select">선택</div>
 													<ul class="list">
-														<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가  -->
+														선택처리 class="selected" / 선택불가 aria-disabled="true" / 품절표기 data-soldout="true" 추가 
 														<li class="selected">선택</li> 
 														<li>상품옵션11</li>
 														<li>상품옵션12</li>
@@ -277,15 +231,16 @@
 													</ul>
 												</div>
 											</div>
-										</div>
+										</div> -->
 									</form>
-								</div>					  
+								</div>
+								</th:block>
 								<!-- 해당 상품 품절시 노출 -->
 								<div class="info_restock">
 									<a href="" id="btn_pushRestock_pop" class="btn_popup">재입고 시 알림을 받아보세요</a>
 								</div>
 								<!-- //해당 상품 품절시 노출 -->
-								<div class="opt_result">
+								<!-- <div class="opt_result">
 									<div class="result_item">
 										<div class="opt_header">
 											<span class="item_name">[상품1] 남성 테이퍼드핏 기모면 올밴딩 팬트</span>
@@ -316,41 +271,44 @@
 										</div>
 										<button type="button" class="btn_delete_item"><span>삭제</span></button>
 									</div>
-								</div>
+								</div> -->
 								<div class="opt_count">
 									<div class="opt_header">
 										<span class="title">수량</span>
 									</div>
 									<div class="number_count">
-										<span class="minus"><em class="sr-only">감소</em></span>
-										<input type="text" name="" maxlength="3" style="ime-mode:disabled" value="1">
-										<span class="plus"><em class="sr-only">추가</em></span>
+										<span class="minus" onclick="jfAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></a></span>
+										<input type="text" name="cea" maxlength="3" style="ime-mode:disabled" th:value="${goodsInfo.minOrdQty}" onblur="jfChangeOrderEa(this)" data-valid-type="numeric">
+										<input type="hidden" name="coption" value=""   th:attr="price=${goodsInfo.currPrice}">
+										<span class="plus" onclick="jfAdjustOrderEa(this);" adjust="+"><em class="sr-only">추가</em></span>
 									</div>
 								</div>
 							</div>
 							<div class="price_box">
 								<p class="number">
-									총&nbsp;<span>99</span>개
+									총&nbsp;<span id="goodsTotalQty">0</span>개
 								</p>
 								<p class="price">
 									<span>
-										99,999,999<em>원</em>
+										<b id="goodsTotalPrice">0</b><em>원</em>
 									</span>
 								</p>
 							</div>
 							<div class="btn_box">
 								<div class="btn_group_block ui_row">
+								<th:block  th:if="${goodsInfo.stockQty > 0}">
 									<div class="ui_col_6">
-										<button id="btn_add_cart" class="btn btn_dark btn_block"><span>쇼핑백</span></button>
+										<button id="btn_add_cart" class="btn btn_dark btn_block" onclick="jfAddCart('C');"><span>쇼핑백</span></button>
 									</div>
 									<div class="ui_col_6">
-										<button class="btn btn_primary btn_block" id=""><span>바로구매</span></button>
+										<button class="btn btn_primary btn_block" onclick="jfAddCart('O');"><span>바로구매</span></button>
 									</div>
-								</div>
-								<div class="btn_group_block ui_row">
+								</th:block>
+								<th:block  th:unless="${goodsInfo.stockQty > 0}">
 									<div class="ui_col_12">
 										<button class="btn btn_dark btn_block" id="" disabled=""><span>SOLD OUT</span></button>
 									</div>
+								</th:block>
 								</div>
 							</div>
 							<div class="npay_box">
@@ -3455,20 +3413,8 @@
 		setInterval(function() { promotionTimer(); }, 1000);
 
 		/* 상품옵션변경 팝업 > 수량조절 */
-		$(document).on('click','.option_box .opt_count .number_count .minus',function(e){
-			var $input = $(this).parent().find('input');
-			var count = parseInt($input.val()) - 1;
-			count = count < 1 ? 1 : count;
-			$input.val(count);
-			$input.change();
-			return false;
-		}).on('click','.option_box .opt_count .number_count .plus',function(e){
-			var $input = $(this).parent().find('input');
-			$input.val(parseInt($input.val()) + 1);
-			$input.change();
-			return false;
-		});
-
+//		
+		
 		//스타일링 추천 picker	
 		$(document).on('mouseenter','.pd_recommend .area_slider .item_picker button',function(e){
 			$(this).parents('.item_picker').find('.pick_descr').show();
@@ -3746,6 +3692,192 @@
 		});
 
 	});
+	
+	//사이즈 클릭시
+	var jfViewStock = function(obj, goodsCd, optCd1, optCd2,  minOrdQty, maxOrdQty) {
+		let $obj = $(obj);
+
+		var $target = $obj.parent().parent().children('input[name="rdi-optsize"]');
+		$target.prop("checked",true);
+		var addPrice  = $target.attr("addPrice");
+		var optCd  = $target.attr("optCd");
+		$("#selectOptCd1").html(optCd2);
+		if (Number(addPrice) > 0) $("#selectOptCd1addPrice").html("(+" + addPrice.addComma() + ")");
+		$("#cartForm  input[name=optCd]").val(optCd);
+		$("#cartForm  input[name=optCd1]").val(optCd1);
+		$("#cartForm  input[name=optCd2]").val(optCd2);
+		$("#cartForm  input[name=addPrice]").val(addPrice);
+		$("#cartForm  input[name=ordQty]").val("");
+		var selfGoodsYn = $("#cartForm  input[name=selfGoodsYn]").val();
+
+		var maxCnt = maxOrdQty;
+		var params = new Object();
+		params.goodsCd = goodsCd;
+		params.optCd = optCd;
+		params.optCd1 = optCd1;
+		params.optCd2 = optCd2;
+		params.selfGoodsYn = selfGoodsYn;
+
+		$.get("/goods/detail/ajaxGoodsStockQty", $.param(params), function(result) {
+			var itemCnt = eval(result); //해당 아이템에 선택되어진 사이즈의 수량
+
+			if (maxCnt > itemCnt) {
+				maxCnt = itemCnt;
+			}
+
+			if (minOrdQty > itemCnt) {
+				$target.prop("disabled", true);
+			}else{
+				$("#cartForm  input[name=ordQty]").val(minOrdQty);
+				$("#cartForm  input[name=maxOrdQty]").val(maxCnt);
+				$("#cartForm  input[name=minOrdQty]").val(minOrdQty);
+				$("#cartForm  input[name=cea]").val(minOrdQty);
+				$("#cartForm  input[name=cea]").attr("readonly",false);
+				$("#cartForm  input[name=stock]").val(itemCnt);
+
+				jfSetTotalPrice();
+			}
+
+		}, "text");
+	}
+	
+	// 수량 변경 클릭
+	var jfAdjustOrderEa = function(obj) {
+
+		if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
+			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
+				mcxDialog.alert("사이즈를 선택하세요.");
+				return false;
+			}
+		}else{
+			// 세트작업시 작업요망 eskim
+			/* var targetSize=$('.sizelist').length;	//구성품 갯수;
+			var itemSize = $('.option').find('.item').find('input[type=radio]:checked').length;	//사이즈 선택 상품수
+			if (targetSize > itemSize){
+				mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+				return false;
+			} */
+		}
+
+		var $obj = $(obj);
+		var $target = $obj.parent().children('input[name="cea"]');
+		var minOrdQty = parseInt($("#cartForm  input[name=minOrdQty]").val());
+		var ea =parseInt($target.val());
+
+		if ($obj.attr('adjust') == '-') --ea;
+		else ++ea;
+
+		//var maxOrdQty = $("#cartForm  input[name=maxOrdQty]").val();
+
+		//if (maxOrdQty && ea > maxOrdQty) ea = maxOrdQty;
+		if (ea.toString().length > parseInt($target.attr('maxlength'))) --ea;
+		if (ea < 1) ea = minOrdQty;
+
+		$target.val(ea);
+
+		jfChangeOrderEa();
+	}
+
+	//옵션 갯수 변경
+	var jfChangeOrderEa = function() {
+
+		if("G056_N" == $("#cartForm  input[name=goodsType]").val()){
+			if(gagajf.isNull($("#cartForm  input[name=optCd2]").val())){
+				mcxDialog.alert("사이즈를 선택하세요.");
+				return false;
+			}
+		}else{
+			// 세트작업시 작업요망 eskim
+			/* var targetSize=$('.sizelist').length;	//구성품 갯수;
+			var itemSize = $('.option').find('.item').find('input[type=radio]:checked').length;	//사이즈 선택 상품수
+			if (targetSize > itemSize){
+				mcxDialog.alert("구성상품들의 사이즈를 선택하세요.");
+				return false;
+			} */
+		}
+
+		var f = document.cartForm;
+		var ea = parseInt($("#cartForm  input[name=cea]").val());
+		var buymin = parseInt($("#cartForm  input[name=minOrdQty]").val());
+		var buymax = parseInt($("#cartForm  input[name=maxOrdQty]").val());
+		var alertMsg = '';
+		if (ea < buymin) {
+			alertMsg ="최소 주문 가능 수량은 "+buymin+"개 입니다.";
+			ea = buymin;
+		}
+
+		if (ea > buymax) {
+			alertMsg = "최대 주문 가능 수량은 "+buymax+"개 입니다.";
+			ea = buymax;
+		}
+
+		$("#cartForm  input[name=cea]").val(ea);
+		$("#cartForm  input[name=ordQty]").val(ea);
+
+		if (alertMsg != ''){
+			mcxDialog.alert(alertMsg);
+			//return;
+		}
+
+		jfSetTotalPrice();
+
+	}
+	
+	//합계 계산
+	var jfSetTotalPrice = function() {
+		var f = document.cartForm;
+
+		var totalEa = 0;
+		var totalPrice = 0;
+
+		$('input[name="cea"]').each(function() {
+			var ea = parseInt($(this).val());
+			var addPrice = parseInt($("#cartForm  input[name=addPrice]").val());
+			var goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
+
+			totalEa += ea;
+			if (goodsPrice > 0) {
+				totalPrice += ((goodsPrice+addPrice) * ea);
+			}
+		});
+
+		$('#goodsTotalQty').html(totalEa.addComma());
+		$('#goodsTotalPrice').html(totalPrice.addComma());
+		
+	}
+	
+	//장바구니담기
+	var jfAddCart = function(btnType){
+		var params = [];
+		var goodsType = $("#cartForm  input[name=goodsType]").val();
+
+		if (goodsType == 'G056_N'){
+			if (gagajf.isNull($("#cartForm  input[name=optCd2]").val())) {
+				
+				return;
+			}
+		
+			var obj = new Object();
+			obj.goodsCd = $("#cartForm  input[name=goodsCd]").val();
+			obj.optCd = $("#cartForm  input[name=optCd]").val();
+			obj.goodsQty = $("#cartForm  input[name=ordQty]").val();
+			obj.goodsType = $("#cartForm  input[name=goodsType]").val();
+			//obj.dealGoodsCd = $("#cartForm  input[name=goodsType]").val();
+			obj.cartGb = btnType;
+			obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
+			obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
+			obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
+			obj.planDtlSq =$("#cartForm  input[name=planDtlSq]").val();
+			params.push(obj);
+
+		}else if (goodsType == 'G056_S'){  //수정요
+			alert("작업필요");
+		}
+		// 장바구니담기
+		cfnAddCart(params);
+	}
+
+	
 /*]]>*/
 </script>
 </th:block>

+ 93 - 34
src/main/webapp/WEB-INF/views/web/mypage/MypagePointFormWeb.html

@@ -37,17 +37,22 @@
 							</div>
 							<div class="my_tab coupon_tab">
 								<ul>
-									<li><a href="javascript:void(0);" id="fnSetSearchFullHistory">전체내역</a></li>
-									<li><a href="javascript:void(0);" class="on" id="fnSetSearchCollectHistory">적립내역</a></li>
-									<li><a href="javascript:void(0);" id="fnSetSearchUsedHistory">사용내역</a></li>
+									<li><a href="javascript:void(0);" id="SearchFullHistory">전체내역</a></li>
+									<li><a href="javascript:void(0);" id="SearchCollectHistory">적립내역</a></li>
+									<li><a href="javascript:void(0);" id="SearchUsedHistory">사용내역</a></li>
 								</ul>
+<!-- 								<div class="form_field"> -->
+<!-- 									<select id="searchDt" name="searchDt" onchange="fnSearchDate(this);"> -->
+<!-- 									</select>  -->
+<!-- 								</div> -->
 								<div class="form_field">
-									<select id="mounth" name="searchDt">
-										<option value="hide">2020년 10월</option>
-										<option value="Test_SELECT_OPTION_1" rel="icon-temperature">2020년 9월</option>
-										<option value="Test_SELECT_OPTION_2">2020년 8월</option>
-										<option value="Test_SELECT_OPTION_3">2020년 7월</option>
-									</select> 
+									<div class="select_custom type1">
+										<div class="combo">
+											<div class="select"></div> <!-- 셀렉박스 -->
+												<ul id="searchDt" class="list" style="width:200px; margin:0 auto">
+												</ul>
+										</div>
+									</div>
 								</div>
 							</div>
 							<div class="order_list">
@@ -78,18 +83,66 @@
 					</div>
 <script th:inline="javascript">
 
+		// select 날짜 생성
+		var date = new Date();
+		var year = date.getFullYear();
+		var month = date.getMonth() + 1;
+		
+		var oneYearAgo = year -1;
+		var yearMonth = year;
+		var oneYearLater = year +1;
+		
+		for(var i = 1;i <= 12; i++){
+			if(i < 10 && i != month){
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + 0 + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+			}
+			else if(i < 10 && i == month){
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + 0 + i +"'>" + yearMonth + "년" + " " + i + "월" +"</li>");
+			}
+			else if(i > 9 && i != month){
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+			}
+			else if(i > 9 && i == month){
+				$("#searchDt").append("<li onclick='fnChangeDate(this);' class='selected' value='"+ yearMonth + "" + i +"'>"+ yearMonth + "년" + " " + i + "월" +"</li>");
+			}
+		}
+		
+	// 날짜변경 이벤트
+	var fnChangeDate = function(parm) {
+		
+		let url = '/mypage/allpoint/list';		
+		let data = {};
+				
+		data.searchDt = $('#searchDt').find('.selected').val();
+		console.log(data);
+
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+			
+			if($("#SearchFullHistory").hasClass("on")){
+				$("#SearchFullHistory").click();
+			}else if($("#SearchCollectHistory").hasClass("on")){
+				$("#SearchCollectHistory").click();
+			}else if($("#SearchUsedHistory").hasClass("on")){
+				$("#SearchUsedHistory").click();
+			}
+		});
+	}
+
+		
 	// 전체내역 조회
-	$("#fnSetSearchFullHistory").click(function(){
-		// Class제거 추가
-		$("#fnSetSearchCollectHistory").removeClass("on");
-		$("#fnSetSearchUsedHistory").removeClass("on");
-		$("#fnSetSearchFullHistory").addClass("on");
+	$("#SearchFullHistory").click(function(){
+		// class제거 추가
+		$("#SearchCollectHistory").removeClass("on");
+		$("#SearchUsedHistory").removeClass("on");
+		$("#SearchFullHistory").addClass("on");
 		$("#plusMinus").text("증감/차감");
 		
 		let data = {};
 		
-		data.searchDt = $('select[name=searchDt]').val();
+		data.searchDt = $('#searchDt').find('.selected').val();
 		
+		console.log(data);
 		var jsonData = JSON.stringify(data);
 		
 		$.ajax(
@@ -100,13 +153,15 @@
 					contentType: 'application/json',
   					dataType : 'json',
 					success  : function(result){
-						fnPointAllListInfo(result);
+						PointAllListInfo(result);
 					}
 				}
 		)
 	});
 	
-	function fnPointAllListInfo(result) {
+
+	
+	function PointAllListInfo(result) {
 		
 		let allPointList = result.allPointList;
 		
@@ -126,13 +181,14 @@
 		}
 		$("#pointAjaxList").html(tmtbHtml);
 	}
+
 	
 	// 적립내역 조회
-	$("#fnSetSearchCollectHistory").click(function(){
+	$("#SearchCollectHistory").click(function(){
 		// Class제거 추가
-		$("#fnSetSearchFullHistory").removeClass("on");
-		$("#fnSetSearchUsedHistory").removeClass("on");
-		$("#fnSetSearchCollectHistory").addClass("on");
+		$("#SearchFullHistory").removeClass("on");
+		$("#SearchUsedHistory").removeClass("on");
+		$("#SearchCollectHistory").addClass("on");
 		
 		// 적립내역 포인트 블루
 		$("#pntAmt").removeClass("c_primary");
@@ -141,7 +197,7 @@
 		
 		let data = {};
 		
-		data.searchDt = $('select[name=searchDt]').val();
+		data.searchDt = $('#searchDt').find('.selected').val();
 		
 		let jsonData = JSON.stringify(data);
 		
@@ -153,13 +209,13 @@
 					contentType: 'application/json',
   					dataType : 'json',
 					success  : function(result){
-						fnPointCollectListInfo(result);
+						PointCollectListInfo(result);
 					}
 				}
 		)
 	});
 	
-	function fnPointCollectListInfo(result) {
+	function PointCollectListInfo(result) {
 		
 		let pointList = result.accumulatePointList;
 		
@@ -177,11 +233,11 @@
 	}
 	
 	// 사용내역 조회
-	$("#fnSetSearchUsedHistory").click(function(){
+	$("#SearchUsedHistory").click(function(){
 		// Class제거 추가
-		$("#fnSetSearchCollectHistory").removeClass("on");
-		$("#fnSetSearchFullHistory").removeClass("on");
-		$("#fnSetSearchUsedHistory").addClass("on");
+		$("#SearchCollectHistory").removeClass("on");
+		$("#SearchFullHistory").removeClass("on");
+		$("#SearchUsedHistory").addClass("on");
 		
 		// 사용내역 포인트 블루
 		$("#pntAmt").removeClass("c_blue");
@@ -190,7 +246,7 @@
 		
 		let data = {};
 		
-		data.searchDt = $('select[name=searchDt]').val();
+		data.searchDt = $('#searchDt').find('.selected').val();
 		
 		let jsonData = JSON.stringify(data);
 		
@@ -202,16 +258,15 @@
 					contentType: 'application/json',
   					dataType : 'json',
 					success  : function(result){
-						fnUsePointListInfo(result);
+						UsePointListInfo(result);
 					}
 				}
 		)
 	});
 	
-	function fnUsePointListInfo(result) {
+	function UsePointListInfo(result) {
 		
 		let usePointList = result.usePointList;
-		console.log(usePointList);
 		let tmtbHtml = "";
 		for(let i=0; i<usePointList.length; i++){
 			let usePoint = usePointList[i];
@@ -233,8 +288,12 @@
 		fnSetMypageLocation('STYLE24 포인트', '_PAGE_MYPAGE_POINT');
 		
 		// 전체내역
-		$("#fnSetSearchFullHistory").trigger('click');
-
+		$("#SearchFullHistory").trigger('click');
+		
+		// 셀렉트박스 활성화
+		$('.select_custom.type1').each(function(index) {
+			var selecter01 = new sCombo($(this));
+		});
 	});
 
 </script>

+ 24 - 4
src/main/webapp/ux/style24_link.js

@@ -145,9 +145,9 @@ var cfnOpenIpinCertify = function (redirectUrl) {
 /**
  * @type   : function
  * @access : public
- * @desc   : 장바구니 등록
+ * @desc   : 장바구니 등록  temp.cartGb :C 장바구니, O:바로구매
  * <pre>
- *		cfnOpenIpinCertify(cartList);
+ *		cfnAddCart(cartList);
  *		cartList는 Array로 등록해주셔야합니다.
  *		ex) 일반 & deal 상품 장바구니 등록 (일반&딜 상품도 배열에 담아서 전송해주세요.)
  *			let compsList = [];
@@ -293,8 +293,9 @@ var cfnLoginYes24 = function (requestGb, chkRememberMe) {
  * @since  : 2021/03/02
  * @author : eskim
  */
-var cfnGoToGoodsDetail = function (goodsCd, ithrCd, contentsLoc, planDtlSq) {
+var cfnGoToGoodsDetail = function (goodsCd, colorCd, ithrCd, contentsLoc, planDtlSq) {
 	var params = goodsCd;
+	params += "&colorCd=" + colorCd;
 	if (typeof (ithrCd) != 'undefined') params += "&ithrCd=" + ithrCd;
 	if (typeof (contentsLoc) != 'undefined' && contentsLoc != "") params += "&contentsLoc=" + contentsLoc;
 	if (typeof (planDtlSq) != 'undefined') params += "&planDtlSq=" + planDtlSq;
@@ -323,7 +324,7 @@ function cfOpenLayer(page, tgt, oParam, callbackFnc) {
             $('#' + tgt).html(result);
             $('#' + tgt).modal("show");
             //$('#' + tgt).show();
-            layerPop_resize(tgt);
+            //layerPop_resize(tgt);
             if (callbackFnc && $.isFunction(callbackFnc))
                 callbackFnc();
         }
@@ -346,6 +347,25 @@ function layerPop_resize(tgt) {
     $("#" + tgt).find(".modal").css('top', thisT + 'px');
 }
 
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 공통 레이어 닫기(레이어 숨기기)
+ * <pre>
+ *     cfCloseLayer("layer_card_benefit");
+ * </pre>
+ * @param  : tgt - 숨길 레이어 ID(예, div 태크의 ID). 필수
+ */
+function cfCloseLayer(tgt) {
+	if (_frontGb == "M"){
+		btnClose(tgt);
+	}else{
+		$('#' + tgt).hide();
+		$('#' + tgt).remove();
+	}
+	return false;
+}
+
 /**
 * @type   : function
 * @access : public