瀏覽代碼

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

card007 5 年之前
父節點
當前提交
3b87c85e6f
共有 33 個文件被更改,包括 805 次插入411 次删除
  1. 0 7
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  2. 9 1
      src/main/java/com/style24/front/biz/service/TsfGoodsService.java
  3. 1 0
      src/main/java/com/style24/front/biz/web/TsfDisplayController.java
  4. 41 15
      src/main/java/com/style24/front/biz/web/TsfGoodsController.java
  5. 16 1
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  6. 12 48
      src/main/java/com/style24/front/biz/web/TsfPlanningController.java
  7. 7 0
      src/main/java/com/style24/persistence/domain/Goods.java
  8. 1 0
      src/main/java/com/style24/persistence/domain/GoodsCompose.java
  9. 2 0
      src/main/java/com/style24/persistence/domain/Plan.java
  10. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  11. 6 4
      src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml
  12. 21 18
      src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml
  13. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  14. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml
  15. 125 139
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  16. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfWishlist.xml
  17. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html
  18. 1 1
      src/main/webapp/WEB-INF/views/mob/goods/GoodsDetailFormMob.html
  19. 29 10
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html
  20. 0 21
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustPwdModifyFormMob.html
  21. 7 7
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSnsJoinInitPwdFormMob.html
  22. 8 7
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  23. 170 21
      src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html
  24. 54 19
      src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html
  25. 2 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsCouponFormWeb.html
  26. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  27. 28 2
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  28. 2 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustConfirmFormWeb.html
  29. 31 14
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html
  30. 115 54
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  31. 106 7
      src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html
  32. 0 1
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html
  33. 4 3
      src/main/webapp/biz/goods.js

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

@@ -837,13 +837,6 @@ public class TsfCustomerService {
 
 		// 2. 계좌정보 수정여부 체크
 		if ("Y".equals(customer.getAccountModifyYn())) {
-			// 계좌 유효성 체크
-			String resultCode = "000";
-			if (!"000".equals(resultCode)) {
-				result.setBoolean("isSuccess", false);
-				result.setString("resultType", "INVALID_ACCOUNT");
-				return result;
-			}
 			CustAccount custAccount = new CustAccount();
 			custAccount.setCustNo(custNo);
 			custAccount.setRegNo(custNo);

+ 9 - 1
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -79,7 +79,7 @@ public class TsfGoodsService {
 			} else {
 				goodsViewHst.setReferer(referer);
 			}
-		}
+		} 
 
 		if (TsfSession.getInfo() != null) {
 			goodsViewHst.setCustNo(TsfSession.getInfo().getCustNo());
@@ -702,6 +702,8 @@ public class TsfGoodsService {
 			goodsExtend.setGoodsNotiList(goodsDao.getGoodsNotiList(tmpGoods));
 			// 이미지 정보
 			goodsExtend.setGoodsImgList(goodsDao.getGoodsImgList(tmpGoods));
+			// 상품 안전인증 정보
+			goodsExtend.setGoodsSafeNo(goodsDao.getGoodsSafeNo(tmpGoods));
 
 		}
 		return getGoodsSetComposeList;
@@ -795,6 +797,12 @@ public class TsfGoodsService {
 			goodsSearch.setMaxRow(cate.getMaxRow());
 			goodsSearch.setContentsLoc(cate.getContentsLoc());
 			goodsList = displayDao.getCategoryGoodsList(goodsSearch);
+			
+			for(Goods temp : goodsList){
+				temp.setSizeArr(temp.getSizes().split(","));
+				temp.setColorArr(temp.getColorChips().split(","));
+				temp.setBenefitArr(temp.getIcon().split(","));
+			}
 		} else {
 			goodsList = goodsDao.getContentsCategoryGoodsList(cate);
 		}

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

@@ -333,6 +333,7 @@ public class TsfDisplayController extends TsfBaseController {
 		mav.addObject("viewDt", paramMap.get("viewDt"));
 		mav.addObject("viewPage", "G037_31");
 		mav.addObject("popupCateNo", paramMap.get("brandGroupNo"));
+		mav.addObject("brandGroupNo", paramMap.get("brandGroupNo"));
 
 		//log.info("brandMainLayoutList::{}", brandMainLayoutList);
 		mav.addObject("brandMainLayoutList", brandMainLayoutList);

+ 41 - 15
src/main/java/com/style24/front/biz/web/TsfGoodsController.java

@@ -180,8 +180,6 @@ public class TsfGoodsController extends TsfBaseController {
 		// 상품 공지
 		mav.addObject("goodsNoticeList", goodsService.getGoodsNoticeList(paramsGoods));
 		
-		
-				
 		int goodsReviewCnt = 0;
 		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) {	// 딜상품
 
@@ -240,15 +238,18 @@ public class TsfGoodsController extends TsfBaseController {
 				mav.addObject("goodsNotiList", goodsService.getGoodsNotiList(goods));
 				// 상품 안전인증 정보
 				mav.addObject("goodsSafeNo", goodsService.getGoodsSafeNo(goods));
-				// 룩북
-				Lookbook lookbook = new Lookbook();
-				lookbook.setGoodsCd(paramsGoods.getGoodsCd());
-				lookbook.setCustNo(paramsGoods.getCustNo());
-				mav.addObject("lookbookList", coreLookbookService.getLookbookListForGoods(lookbook));
+				
 
 			} else if (TscConstants.GoodsType.SET.value().equals(goods.getGoodsType())) {		// 셋트상품
 				mav.addObject("goodsComposeList", goodsService.getGoodsSetComposeList(paramsGoods));
 			}
+			
+			// 룩북
+			Lookbook lookbook = new Lookbook();
+			lookbook.setGoodsCd(paramsGoods.getGoodsCd());
+			lookbook.setCustNo(paramsGoods.getCustNo());
+			mav.addObject("lookbookList", coreLookbookService.getLookbookListForGoods(lookbook));
+			
 			// 상품쿠폰
 			paramsGoods.setMaxRownum(1);
 			mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
@@ -615,10 +616,10 @@ public class TsfGoodsController extends TsfBaseController {
 		paramsGoods.setMaxRownum(1);
 		mav.addObject("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
 		// 다다익선
-		paramsGoods.setMaxRownum(1);
+		paramsGoods.setMaxRownum(0);
 		mav.addObject("tmtbList", goodsService.getTmtbList(paramsGoods));
 		// 사은품
-		paramsGoods.setMaxRownum(1);
+		paramsGoods.setMaxRownum(0);
 		mav.addObject("freeGoodsList", goodsService.getFreeGoodsList(paramsGoods));
 
 		// 상품 기본정보 --즉시할인정보
@@ -1125,19 +1126,44 @@ public class TsfGoodsController extends TsfBaseController {
 	 */
 	@PostMapping(value = "/coupon/download")
 	@ResponseBody
-	public GagaMap createGoodsCoupon(@RequestBody Goods goods) throws Exception {
+	public GagaMap createGoodsCoupon(@RequestBody Goods paramsGoods) throws Exception {
 
 		GagaMap result = new GagaMap();
 
 		// 상품관련 기본값 설정(회원 등급, 앱, PC/모바일 등)
-		setGoods(goods);
+		setGoods(paramsGoods);
+		log.info("createGoodsCoupon  paramsGoods {}", paramsGoods);
+
+		// 일반상품과 딜상품 구분
+		Goods goods = goodsService.getGoodsInfo(paramsGoods);
+		if (goods == null || StringUtils.isBlank(goods.getGoodsCd())) {
+			result.set("message", "발급가능 쿠폰이 없습니다.");
+			result.set("status", "200");
+			result.set("params", paramsGoods);
+			return result;
+		}
+		
 		log.info("createGoodsCoupon  goods {}", goods);
+		if (TscConstants.GoodsType.DEAL.value().equals(goods.getGoodsType())) { 
+			Collection<Goods> goodsDealComposeList = goodsService.getGoodsDealComposeList(paramsGoods);
+			// 상품쿠폰
+			if (goodsDealComposeList != null && !goodsDealComposeList.isEmpty()) {
+
+				ArrayList<String> arrGoodsList = new ArrayList<>();
+				for (Goods goodsCompose : goodsDealComposeList) {
+					arrGoodsList.add(goodsCompose.getCompsGoodsCd());
+				}
 
+				String[] arrGoodsCd = arrGoodsList.stream().toArray(String[]::new);
+				paramsGoods.setArrGoodsCd(arrGoodsCd);
+			}
+		}
+		
 		// 쿠폰발급
 		// ERROR_10: 발급가능 쿠폰없음, 20: 발급완료 쿠폰, 30: 발급받은 쿠폰
 		//죄송합니다. 쿠폰이 모두 소진되었습니다
 		//죄송합니다. 해당 쿠폰은 다운로드가 불가합니다.
-		String couponResult = goodsService.createGoodsCoupon(goods);
+		String couponResult = goodsService.createGoodsCoupon(paramsGoods);
 
 		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
@@ -1148,7 +1174,7 @@ public class TsfGoodsController extends TsfBaseController {
 		} else if ("ERROR_30".equals(couponResult)) {
 			result.set("message", "죄송합니다. 쿠폰이 모두 소진되었습니다.");
 		} else {
-			if (goods.getArrCpnId() != null && goods.getArrCpnId().length > 0) {
+			if (paramsGoods.getArrCpnId() != null && paramsGoods.getArrCpnId().length > 0) {
 				result.set("message", couponResult + "개 쿠폰이 발급되었습니다.");
 			} else {
 				result.set("message", "쿠폰이 발급되었습니다.");
@@ -1156,8 +1182,8 @@ public class TsfGoodsController extends TsfBaseController {
 
 		}
 		result.set("status", "200");
-		result.set("params", goods);
-		result.set("goodsCouponList", couponService.getGoodsCouponList(goods));
+		result.set("params", paramsGoods);
+		result.set("goodsCouponList", couponService.getGoodsCouponList(paramsGoods));
 		return result;
 	}
 

+ 16 - 1
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1904,6 +1904,21 @@ public class TsfMypageController extends TsfBaseController {
 	@PostMapping("/customer/info/save")
 	@ResponseBody
 	public GagaMap updateCustomerInfo(@RequestBody Customer customer) {
+		CustAccount custAccount = new CustAccount();
+		custAccount.setIpAddress(TsfSession.getIpAddress());
+		custAccount.setAccountNm(customer.getAccountNm());
+		custAccount.setAccountNo(customer.getAccountNo());
+		custAccount.setBankCd(customer.getBankCd());
+
+		if ("Y".equals(customer.getAccountModifyYn())) {
+			GagaMap result = coreKcpService.checkAccount(custAccount);
+			if (!"0000".equals(result.get("resCd"))) {
+				result.setBoolean("isSuccess", false);
+				result.setString("resultType", "INVALID_ACCOUNT");
+				return result;
+			}
+		}
+
 		return customerService.saveCustomerInfo(customer);
 	}
 
@@ -1916,7 +1931,7 @@ public class TsfMypageController extends TsfBaseController {
 	 */
 	@RequestMapping("/account/check")
 	@ResponseBody
-	public GagaMap getAccountCheck(@RequestBody CustAccount custAccount) throws Exception {
+	public GagaMap getAccountCheck(@RequestBody CustAccount custAccount) {
 		custAccount.setIpAddress(TsfSession.getIpAddress());
 		boolean isValid = false;
 		GagaMap result = coreKcpService.checkAccount(custAccount);

+ 12 - 48
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -203,11 +203,9 @@ public class TsfPlanningController extends TsfBaseController {
 		
 		// 코너 목록
 		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
-		mav.addObject("planCornerListLength", planningService.getPlanCornerList(plan).size());
-		
 		// 코너 상품
 		mav.addObject("planCornerGoodsList", planningService.getPlanningCornerGoodsList(plan));
-
+		//mav.addObject("planCornerListLength", planningService.getPlanCornerList(plan).size());
 
 		// Popup Parameter
 		mav.addObject("preview", plan.getPreview());
@@ -463,47 +461,7 @@ public class TsfPlanningController extends TsfBaseController {
 		mav.setViewName(super.getDeviceViewName("planning/PlanningEventPollForm"));
 		return mav;
 	}
-	
-//	/**
-//	 * 이벤트 설문조사 접근확인
-//	 * @param 
-//	 * @return
-//	 * @author sowon
-//	 * @since 2021. 4. 3
-//	 */
-//	@PostMapping("/event/poll/access")
-//	@ResponseBody
-//	public GagaMap planningEventPollAccess(@RequestBody Plan plan) {
-//		
-//		GagaMap result = new GagaMap();
-//		Poll poll = new Poll();
-//		plan.setSiteCd(TscConstants.Site.STYLE24.value());
-//		plan.setFrontGb(TsfSession.getFrontGb());
-//		plan.setCustNo(TsfSession.getInfo().getCustNo());
-//		
-//		poll = planningService.getPollQuestionInfo(plan);
-//		String partYn = poll.getDupPartiYn(); 
-//		String comYn = poll.getFstComYn();
-//		int partiCnt = poll.getPartiCnt();
-//		// 중복참여가 아닌경우
-//		if(partYn.equals("N")) {
-//			int count = planningService.getCustAnswerCount(plan);
-//			if (count>0) {
-//				result.set("msg","이미 응모하셨습니다.");
-//				result.set("status","1");
-//			}
-//		}
-//		else if (comYn.equals("Y")) {
-//			int count = planningService.getCustAnswerPartiCount(poll);
-//			if (count>=partiCnt) {
-//				result.set("msg","선착순 응모가 마감되었습니다.");
-//				result.set("status","2");
-//			}
-//			
-//		}
-//		return result;
-//	}
-	
+
 
 	
 	/**
@@ -530,7 +488,7 @@ public class TsfPlanningController extends TsfBaseController {
 	 * @since 2021. 3. 30
 	 */
 	@GetMapping("/shot/delivery/guide/form")
-	public ModelAndView planningShotDeliveryForm(Plan plan) throws Exception {
+	public ModelAndView planningShotDeliveryForm(@RequestParam(value="planSq")Integer planSq ,Plan plan) throws Exception {
 		ModelAndView mav = new ModelAndView();
 		CustDeliveryAddr addr = new CustDeliveryAddr();
 		Integer custNo = null;
@@ -544,11 +502,17 @@ public class TsfPlanningController extends TsfBaseController {
 			customer = coreCustomerService.getCustomerInfo(customer);
 			mav.addObject("customerInfo", customer);
 		}
-		
+		plan.setFrontGb(TsfSession.getFrontGb());
+		plan.setSiteCd(TscConstants.Site.STYLE24.value());
+		plan.setCustGb(TsfSession.getCustGb());
+		// 코너 목록
+		mav.addObject("planCornerList", planningService.getPlanCornerList(plan));
+		// 코너 상품
+		mav.addObject("planCornerGoodsList", planningService.getPlanningCornerGoodsList(plan));
 
 		addr.setCustNo(custNo);
-		plan.setSiteCd(TscConstants.Site.STYLE24.value());
-		plan.setFrontGb(TsfSession.getFrontGb());
+		
+		
 		mav.addObject("custAddr", planningService.getCustAddrInfo(addr));
 		mav.addObject("shotHtml", planningService.getShotDeliveryHtml(plan));
 		mav.setViewName(super.getDeviceViewName("planning/PlanningShotGuideForm"));

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

@@ -209,4 +209,11 @@ public class Goods extends TscBaseDomain {
 	private String sizes;
 	private String icon;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] sizeArr;		// 상품사이즈
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] colorArr;		// 상품컬러
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] benefitArr;		// 상품혜택
+
 }

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

@@ -50,6 +50,7 @@ public class GoodsCompose extends TscBaseDomain {
 	private Collection<GoodsNotiInfo> goodsNotiList;
 	private Collection<GoodsStock> goodsSizeList;
 	private Collection<GoodsImg> goodsImgList;
+	private GoodsSafeNo goodsSafeNo;
 
 	//상품상세 구분(10:상품타이틀,20:상품타이틀내용,30:상품특징,40:상위컨텐츠,50:하위컨텐츠,60:상위컨텐츠-모바일,70:하위컨텐츠-모바일,80:상품상세(as-is,입점))
 	private String goodsTitle; 			// 10:상품타이틀

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

@@ -109,6 +109,8 @@ public class Plan extends TscBaseDomain {
 	private String cateNm;			// 카테고리명
 	private Integer cateNo;			// 카테고리번호
 	private String brandGroupNm;	// 브랜드 그룹 이름
+	private String colorChips;
+	private String icon;
 
 	// 고객등급
 	private String custGradeName;	// 접근가능고객 등급 네임

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

@@ -654,7 +654,7 @@
 		                        GROUP  BY  A.CART_SQ
 		               ) STOCK
 		        ON     C.CART_SQ = STOCK.CART_SQ
-		        LEFT   OUTER JOIN TB_GOODS_QUICK_DELEVERY_SKIP GQDS
+		        LEFT   OUTER JOIN TB_GOODS_SHOT_DELV_SKIP GQDS
 		        ON     G.GOODS_CD = GQDS.GOODS_CD
 		        WHERE  1=1
 		        <if test="custNo == 0">

+ 6 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -201,13 +201,13 @@
 		     , A.FIRST_ORD_YN
 		     , A.BUY_STDT
 		     , A.BUY_EDDT
-		     , A.CURR_PRICE
+		    -- , A.CURR_PRICE
 		     , DATE_FORMAT(A.AVAIL_EDDT, '%Y-%m-%d') AS AVAIL_EDDT
 		     , IFNULL((SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = A.CPN_ID AND CUST_NO = #{custNo}),0) AS CUST_COUPON_CNT
 		     , (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = A.CPN_ID) AS TOT_COUPON_CNT
 		     , RNUM
 		FROM (
-		SELECT   CPN_ID
+		SELECT  DISTINCT CPN_ID
 		       , CPN_NM
 		       , DC_AMT
 		       , DC_VAL
@@ -226,7 +226,7 @@
 		       , FIRST_ORD_YN
 		       , BUY_STDT
 		       , BUY_EDDT
-		       , CURR_PRICE
+		      -- , CURR_PRICE
 		       , RANK() OVER(ORDER BY DC_AMT DESC)  AS RNUM   -- 할인금액순
 		FROM   (
 		        SELECT CP.CPN_ID                                              -- 쿠폰ID
@@ -749,11 +749,13 @@
 		        WHERE 1=1
 		        AND CUST_NO = #{custNo}
 		        AND NOW() BETWEEN AVAIL_STDT AND AVAIL_EDDT 
-		        AND NOW() BETWEEN DATE_ADD(AVAIL_EDDT , INTERVAL -7 DAY) AND AVAIL_EDDT ) AS EXPIRE_COUPON_CNT
+		        AND NOW() BETWEEN DATE_ADD(AVAIL_EDDT , INTERVAL -7 DAY) AND AVAIL_EDDT 
+		        AND USED_DT IS NULL) AS EXPIRE_COUPON_CNT
 		FROM TB_CUST_COUPON 
 		WHERE 1=1
 		  AND CUST_NO = #{custNo}
 		  AND NOW() BETWEEN AVAIL_STDT AND AVAIL_EDDT
+		  AND USED_DT IS NULL
 	</select>
 	
 	<select id="getCouponDetailInfo" resultType="Coupon" parameterType="Coupon">

+ 21 - 18
src/main/java/com/style24/persistence/mybatis/shop/TsfDisplay.xml

@@ -648,7 +648,9 @@
 		      , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
 		             WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
 		             WHEN GB.BENEFIT_GB = '30' THEN '사은품'
-		             WHEN GB.BENEFIT_GB = '40' THEN '신상' ELSE '' END AS FILTER_NM
+		             WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		             WHEN GB.BENEFIT_GB = '50' THEN '총알배송'
+		             ELSE '' END AS FILTER_NM
 		FROM	TB_GOODS_BENEFIT GB
 		INNER JOIN TB_CATE_GOODS CG ON GB.GOODS_CD = CG.GOODS_CD
 		WHERE	1=1
@@ -715,14 +717,14 @@
 		                  , G.GOODS_TNM                                                                          /*상품타이틀명*/
 		                  , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
 		                  , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
-		                  , CASE WHEN 'P' = 'P' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                  WHEN 'P' = 'M' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                  WHEN 'P' = 'A' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                  WHEN 'P' = 'P' AND GBP.CUST_GB != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                  WHEN 'P' = 'M' AND GBP.CUST_GB != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                  WHEN 'P' = 'A' AND GBP.CUST_GB != 'G100_20' THEN GBP.APP_CURR_PRICE
-		                  ELSE G.CURR_PRICE
-		                  END                                                   AS CURR_PRICE       /*현재판매가*/
+		                  , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		                         WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		                         WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		                         WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
+		                         WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
+		                         WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		                         ELSE G.CURR_PRICE
+		                    END                                                   AS CURR_PRICE       /*현재판매가*/
 		                  , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
 		                  , G.FORMAL_GB /*정상이월구분*/
 		                  , G.REG_DT                                                                             /*등록일시*/
@@ -890,14 +892,14 @@
 		                         , G.GOODS_TNM                                                                          /*상품타이틀명*/
 		                         , G.MAIN_COLOR_CD                                                                      /*대표색상코드*/
 		                         , G.LIST_PRICE                                                                         /*정상가(최초판매가)*/
-		                         , CASE WHEN 'P' = 'P' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
-		                         WHEN 'P' = 'M' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
-		                         WHEN 'P' = 'A' AND GBP.CUST_GB = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
-		                         WHEN 'P' = 'P' AND GBP.CUST_GB != 'G100_20' THEN GBP.PC_CURR_PRICE
-		                         WHEN 'P' = 'M' AND GBP.CUST_GB != 'G100_20' THEN GBP.MO_CURR_PRICE
-		                         WHEN 'P' = 'A' AND GBP.CUST_GB != 'G100_20' THEN GBP.APP_CURR_PRICE
-		                         ELSE G.CURR_PRICE
-		                         END                                                   AS CURR_PRICE       /*현재판매가*/
+		                         , CASE WHEN #{frontGb} = 'P' AND #{custGb} = 'G100_20' THEN GBP.STAFF_PC_CURR_PRICE
+		                                WHEN #{frontGb} = 'M' AND #{custGb} = 'G100_20' THEN GBP.STAFF_MO_CURR_PRICE
+		                                WHEN #{frontGb} = 'A' AND #{custGb} = 'G100_20' THEN GBP.STAFF_APP_CURR_PRICE
+		                                WHEN #{frontGb} = 'P' AND #{custGb} != 'G100_20' THEN GBP.PC_CURR_PRICE
+		                                WHEN #{frontGb} = 'M' AND #{custGb} != 'G100_20' THEN GBP.MO_CURR_PRICE
+		                                WHEN #{frontGb} = 'A' AND #{custGb} != 'G100_20' THEN GBP.APP_CURR_PRICE
+		                                ELSE G.CURR_PRICE
+		                           END                                                   AS CURR_PRICE       /*현재판매가*/
 		                         , G.MIN_ORD_AMT                                                                        /*최수주문금액*/
 		                         , G.FORMAL_GB /*정상이월구분*/
 		                         , G.REG_DT                                                                             /*등록일시*/
@@ -1096,7 +1098,8 @@
 		                , CASE WHEN GB.BENEFIT_GB = '10' THEN '쿠폰할인'
 		                       WHEN GB.BENEFIT_GB = '20' THEN '무료배송'
 		                       WHEN GB.BENEFIT_GB = '30' THEN '사은품'
-		                       ELSE '신상' END AS BENEFIT_NM
+		                       WHEN GB.BENEFIT_GB = '40' THEN '신상'
+		                       ELSE '총알배송' END AS BENEFIT_NM
 		                , RANK() OVER(ORDER BY GB.BENEFIT_GB, GB.GOODS_CD) AS NUMB
 		                FROM   TB_GOODS_BENEFIT GB
 		                WHERE  GB.GOODS_CD = G.GOODS_CD

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

@@ -187,7 +187,7 @@
 		                                     AND G.DELV_FEE_CD =  E.DELV_FEE_CD
 		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
 		                              AND IFNULL(#{custNo}, 0) = W.CUST_NO
-		LEFT OUTER JOIN TB_GOODS_QUICK_DELEVERY_SKIP DS ON G.GOODS_CD =DS.GOODS_CD
+		LEFT OUTER JOIN TB_GOODS_SHOT_DELV_SKIP DS ON G.GOODS_CD =DS.GOODS_CD
 		WHERE G.GOODS_CD = #{goodsCd}
 		AND NOW() BETWEEN SELL_STDT AND SELL_EDDT	/*판매기간 확인*/
 		<if test='adminYn == null or adminYn != "Y"'>

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

@@ -818,7 +818,7 @@
 	<select id="getPlanGoodsDisplayList" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanGoodsDisplayList */
 		SELECT Z.*
-		      ,100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE 
+		      ,(CASE WHEN Z.LIST_PRICE > 0 THEN 100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
 		FROM
 		(
 		WITH TAB_PLAN_GOODS AS (
@@ -933,7 +933,7 @@
 	<select id="getPlanningCornerGoodsList" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanningCornerGoodsList */
 		SELECT Z.*
-		     , 100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE
+		     ,(CASE WHEN Z.LIST_PRICE > 0 THEN 100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
 		FROM   (
 		        WITH TAB_PLAN_GOODS AS (
 		            SELECT P.PLAN_SQ                                                /*기획전번호*/

+ 125 - 139
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -41,167 +41,153 @@
 		FROM   TB_CUST_POINT
 		WHERE  CUST_NO = #{custNo}
 		AND    EXP_BE_DT > NOW()
-		AND    EXP_BE_DT <![CDATA[<]]> DATE_ADD(NOW(),INTERVAL 30 DAY)
+		AND    EXP_BE_DT <![CDATA[<]]> DATE_ADD(NOW(),INTERVAL 31 DAY)
 	</select>
 	
 	<!-- 적립내역 조회-->
 	<select id="getAccumulatePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAccumulatePointList */
-		SELECT CASE TCHP.OCCUR_GB
+		SELECT  CASE CPH.OCCUR_GB
+					WHEN 'G069_11' THEN '구매 취소'
 		            WHEN 'G069_12' THEN '상품 구매'
-		            WHEN 'G069_20' THEN '상품평'
+		            WHEN 'G069_20' THEN '리뷰'
 		            WHEN 'G069_30' THEN '이벤트'
 		            WHEN 'G069_31' THEN '회원가입'
-		            WHEN 'G069_32' THEN '생일축하'
-		            WHEN 'G069_35' THEN 'APP다운'
-		            WHEN 'G069_36' THEN '사은품구매'
+		            WHEN 'G069_32' THEN '생일'
+		            WHEN 'G069_35' THEN 'APP'
 		            WHEN 'G069_37' THEN '이벤트'
+		            WHEN 'G069_41' THEN '구매 취소'
+		            WHEN 'G069_43' THEN '구매 취소'
+		            WHEN 'G069_44' THEN '관리자'
 		            WHEN 'G069_90' THEN '관리자'
 		       END                                          AS OCCUR_GB
-		     , 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_31' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_32' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_35' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_36' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_37' THEN TCHP.OCCUR_DTL_DESC
-		            WHEN 'G069_90' THEN TCHP.OCCUR_DTL_DESC
+		    , CASE CPH.OCCUR_GB
+					WHEN 'G069_11' THEN G.GOODS_NM
+		            WHEN 'G069_12' THEN G.GOODS_NM
+		            WHEN 'G069_20' THEN G.GOODS_NM
+		            WHEN 'G069_30' THEN '이벤트'
+		            WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_37' THEN '출석체크'
+		            WHEN 'G069_41' THEN G.GOODS_NM
+		            WHEN 'G069_43' THEN G.GOODS_NM
+		            WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
 		       END                                          AS  OCCUR_DTL_DESC
-		      , TCHP.PNT_AMT                                AS PNT_AMT
-		      , TCHP.UPD_DT                                 AS PNT_UPLOAD_DT
-		FROM TB_CUST_POINT_HST TCHP
-		LEFT JOIN
-		    (
-		     SELECT REVIEW_SQ
-		          , ORD_NO
-		          , ORD_DTL_NO
-		          , GOODS_CD
-		     FROM   TB_REVIEW TR
-		     WHERE  TR.PNT_GIVE_STAT = 'G043_30'            /* 리뷰조건 : 포인트지급반영*/
-		    ) TR
-		ON TCHP.REVIEW_SQ = TR.REVIEW_SQ
-		AND (TCHP.ORD_NO = TR.ORD_NO AND TCHP.ORD_DTL_NO = TR.ORD_DTL_NO)
-		LEFT JOIN TB_ORDER_DETAIL TOD
-		ON TCHP.ORD_NO = TOD.ORD_NO
-		AND TCHP.ORD_DTL_NO = TOD.ORD_DTL_NO
-		LEFT JOIN TB_GOODS TG
-		ON (TG.GOODS_CD = TOD.GOODS_CD OR TG.GOODS_CD = TR.GOODS_CD)
-		WHERE TCHP.CUST_NO = #{custNo}
-		<!-- AND CASE WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NULL THEN 1
-		         WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NOT NULL AND NULLIF(TR.REVIEW_SQ, 0) IS NOT NULL THEN 1 /* 상품평조건 */
-		    END > 0 -->
-		AND TCHP.OCCUR_GB IN ('G069_12','G069_20','G069_30','G069_31','G069_32','G069_35','G069_36','G069_37','G069_90')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
-		AND TCHP.PNT_AMT <![CDATA[>]]> 0
-		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY TCHP.REVIEW_SQ,TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
-		ORDER BY TCHP.UPD_DT DESC;
+		     , CPH.PNT_AMT
+		     , CPH.REG_DT AS PNT_UPLOAD_DT
+		FROM TB_CUST_POINT_HST CPH
+		LEFT JOIN TB_ORDER_DETAIL OD
+		ON  CPH.ORD_NO = OD.ORD_NO
+		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		LEFT JOIN TB_GOODS G
+		ON  OD.GOODS_CD = G.GOODS_CD
+		WHERE CPH.CUST_NO = #{custNo}
+		AND CPH.PNT_AMT > 0
+		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY CPH.REG_DT
 	</select>
 	
 	<!-- 사용내역 조회-->
 	<select id="getUsePointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getUsePointList */
-	SELECT
-		CASE   TCHP.OCCUR_GB
-			WHEN   'G069_13' THEN '구매 취소'
-			WHEN   'G069_40' THEN '구매 사용'
-			WHEN   'G069_42' THEN '사은품'
-			WHEN   'G069_90' THEN '관리자'
-			WHEN   'G069_99' THEN '소멸'
-		END AS OCCUR_GB ,	
-		CASE   TCHP.OCCUR_GB	
-			WHEN   'G069_13' THEN TG.GOODS_NM
-			WHEN   'G069_40' THEN TG.GOODS_NM 
-			WHEN   'G069_42' THEN TG.GOODS_NM
-			WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-			WHEN   'G069_99' THEN '유효기간 경과 소멸'
-		END AS OCCUR_DTL_DESC
-			 , TCHP.PNT_AMT AS pntAmt
-			 , TCHP.UPD_DT  AS pntUploadDt
-		FROM TB_CUST_POINT_HST TCHP
-		LEFT JOIN TB_ORDER_DETAIL TOD																/* 주문상세 */
-		ON TOD.ORD_NO = TCHP.ORD_NO
-		AND TOD.ORD_DTL_NO = TCHP.ORD_DTL_NO
-		LEFT JOIN TB_ORD_FREEGIFT TOF																/* 사은품 */
-		ON TOD.ORD_NO = TOF.ORD_NO
-		LEFT JOIN TB_GOODS TG																		/* 상품품 */
-		ON TG.GOODS_CD = TOD.GOODS_CD 
-		WHERE TCHP.CUST_NO = #{custNo}
-		AND TCHP.OCCUR_GB IN ('G069_13','G069_40','G069_42','G069_90','G069_99')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'														/* 공통코드 : 반영완료 */
-		AND 0 <![CDATA[>]]> TCHP.PNT_AMT
-		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  CASE CPH.OCCUR_GB
+		            WHEN 'G069_10' THEN '상품 구매'
+		            WHEN 'G069_13' THEN '구매 취소'
+		            WHEN 'G069_21' THEN '리뷰'
+		            WHEN 'G069_36' THEN '상품 구매'
+		            WHEN 'G069_40' THEN '상품 구매'
+		            WHEN 'G069_42' THEN '상품 구매'
+		            WHEN 'G069_46' THEN '적립취소'
+		            WHEN 'G069_90' THEN '관리자'
+		            WHEN 'G069_99' THEN '소멸'
+		       END                                          AS OCCUR_GB
+		     , CASE CPH.OCCUR_GB
+		            WHEN 'G069_10' THEN G.GOODS_NM
+		            WHEN 'G069_13' THEN G.GOODS_NM
+		            WHEN 'G069_21' THEN G.GOODS_NM
+		            WHEN 'G069_36' THEN G.GOODS_NM
+		            WHEN 'G069_40' THEN G.GOODS_NM
+		            WHEN 'G069_42' THEN G.GOODS_NM
+		            WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_99' THEN '유효기간 경과 소멸'
+		       END                                          AS  OCCUR_DTL_DESC
+		     , CPH.PNT_AMT
+		     , CPH.REG_DT
+		FROM TB_CUST_POINT_HST CPH
+		LEFT JOIN TB_ORDER_DETAIL OD
+		ON  CPH.ORD_NO = OD.ORD_NO
+		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		LEFT JOIN TB_GOODS G
+		ON  OD.GOODS_CD = G.GOODS_CD
+		WHERE CPH.CUST_NO = #{custNo}
+		AND CPH.PNT_AMT <![CDATA[<]]> 0
+		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY CPH.ORD_NO, CPH.REG_DT
 	</select>
 	
 	<!-- 전체내역 조회-->
 	<select id="getAllPointList" parameterType="Point" resultType="Point">
 	/* TsfPoint.getAllPointList */
-	SELECT
-		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_12' THEN '상품 구매'
-		WHEN   'G069_13' THEN '구매 취소'
-		WHEN   'G069_20' THEN '상품평'	
-		WHEN   'G069_30' THEN '이벤트'
-		WHEN   'G069_31' THEN '회원가입'
-		WHEN   'G069_32' THEN '생일축하'
-		WHEN   'G069_35' THEN 'APP다운'
-		WHEN   'G069_36' THEN '사은품구매'
-		WHEN   'G069_37' THEN '이벤트'
-		WHEN   'G069_40' THEN '구매 사용'
-		WHEN   'G069_42' THEN '사은품'
-		WHEN   'G069_90' THEN '관리자'
-		WHEN   'G069_99' THEN '소멸'
-		END AS OCCUR_GB ,	
-		CASE   TCHP.OCCUR_GB
-		WHEN   'G069_12' THEN TG.GOODS_NM 
-		WHEN   'G069_13' THEN TG.GOODS_NM 
-		WHEN   'G069_20' THEN TG.GOODS_NM
-		WHEN   'G069_30' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_31' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_32' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_35' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_36' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_37' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_40' THEN TG.GOODS_NM 
-		WHEN   'G069_42' THEN TG.GOODS_NM
-		WHEN   'G069_90' THEN TCHP.OCCUR_DTL_DESC
-		WHEN   'G069_99' THEN '유효기간 경과 소멸'
-		END AS OCCUR_DTL_DESC
-			 , TCHP.PNT_AMT AS pntAmt
-			 , TCHP.UPD_DT  AS pntUploadDt
-		FROM TB_CUST_POINT_HST TCHP
-		LEFT JOIN 
-		(
-			SELECT REVIEW_SQ
-				 , ORD_NO 
-				 , ORD_DTL_NO 
-		         , GOODS_CD
-			FROM TB_REVIEW TR
-			WHERE TR.PNT_GIVE_STAT = 'G043_30'
-		) TR
-		ON TCHP.REVIEW_SQ = TR.REVIEW_SQ
-		AND (TCHP.ORD_NO = TR.ORD_NO AND TCHP.ORD_DTL_NO = TR.ORD_DTL_NO)
-		LEFT JOIN TB_ORDER_DETAIL TOD
-		ON TCHP.ORD_NO = TOD.ORD_NO
-		AND TCHP.ORD_DTL_NO = TOD.ORD_DTL_NO
-		LEFT JOIN TB_ORD_FREEGIFT TOF
-		ON TOD.ORD_NO = TOF.ORD_NO
-		LEFT JOIN TB_GOODS TG 
-		ON (TG.GOODS_CD = TOD.GOODS_CD OR TG.GOODS_CD = TR.GOODS_CD)
-		WHERE TCHP.CUST_NO = #{custNo}
-		<!-- AND CASE
-			WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NULL THEN 1
-			WHEN NULLIF(TCHP.REVIEW_SQ, 0) IS NOT NULL AND NULLIF(TR.REVIEW_SQ, 0) IS NOT NULL THEN 1
-		END <![CDATA[>]]> 0		 -->
-		AND TCHP.OCCUR_GB IN  ('G069_12','G069_13','G069_20','G069_30','G069_31','G069_32','G069_35','G069_36','G069_37','G069_40','G069_42','G069_90','G069_99')
-		AND TCHP.PNT_UPLOAD_STAT = 'G070_30'
-		AND DATE_FORMAT(TCHP.UPD_DT,'%Y%m') = #{searchDt}
-		GROUP BY TCHP.REVIEW_SQ, TCHP.OCCUR_GB, PNT_AMT, GOODS_NM, TCHP.OCCUR_DTL_DESC, TCHP.UPD_DT
-	ORDER BY TCHP.UPD_DT DESC;
+		SELECT  CASE CPH.OCCUR_GB
+		            WHEN 'G069_10' THEN '상품 구매'
+		            WHEN 'G069_11' THEN '구매 취소'
+		            WHEN 'G069_12' THEN '상품 구매'
+		            WHEN 'G069_13' THEN '구매 취소'
+		            WHEN 'G069_20' THEN '리뷰'
+		            WHEN 'G069_21' THEN '리뷰'
+		            WHEN 'G069_30' THEN '이벤트'
+		            WHEN 'G069_31' THEN '회원가입'
+		            WHEN 'G069_32' THEN '생일'
+		            WHEN 'G069_35' THEN 'APP'
+		            WHEN 'G069_36' THEN '상품 구매'
+		            WHEN 'G069_37' THEN '이벤트'
+		            WHEN 'G069_40' THEN '상품 구매'
+		            WHEN 'G069_41' THEN '구매 취소'
+		            WHEN 'G069_42' THEN '상품 구매'
+		            WHEN 'G069_43' THEN '구매 취소'
+		            WHEN 'G069_44' THEN '관리자'
+		            WHEN 'G069_45' THEN '관리자'
+		            WHEN 'G069_46' THEN '적립취소'
+		            WHEN 'G069_90' THEN '관리자'
+		            WHEN 'G069_99' THEN '소멸'
+		       END                                          AS OCCUR_GB
+     , CASE CPH.OCCUR_GB
+                    WHEN 'G069_10' THEN G.GOODS_NM
+		            WHEN 'G069_11' THEN G.GOODS_NM
+		            WHEN 'G069_12' THEN G.GOODS_NM
+		            WHEN 'G069_13' THEN G.GOODS_NM
+		            WHEN 'G069_20' THEN G.GOODS_NM
+		            WHEN 'G069_21' THEN G.GOODS_NM
+		            WHEN 'G069_30' THEN '이벤트'
+		            WHEN 'G069_31' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_32' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_35' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_36' THEN G.GOODS_NM
+		            WHEN 'G069_37' THEN '출석체크'
+		            WHEN 'G069_40' THEN G.GOODS_NM
+		            WHEN 'G069_41' THEN G.GOODS_NM
+		            WHEN 'G069_42' THEN G.GOODS_NM
+		            WHEN 'G069_43' THEN G.GOODS_NM
+		            WHEN 'G069_44' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_45' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_46' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_90' THEN CPH.OCCUR_DTL_DESC
+		            WHEN 'G069_99' THEN '유효기간 경과 소멸'
+		       END                                          AS  OCCUR_DTL_DESC
+		     , CPH.PNT_AMT
+		     , CPH.REG_DT AS PNT_UPLOAD_DT
+		FROM TB_CUST_POINT_HST CPH
+		LEFT JOIN TB_ORDER_DETAIL OD
+		ON  CPH.ORD_NO = OD.ORD_NO
+		AND CPH.ORD_DTL_NO = OD.ORD_DTL_NO
+		LEFT JOIN TB_GOODS G
+		ON  OD.GOODS_CD = G.GOODS_CD
+		WHERE CPH.CUST_NO = #{custNo}
+		AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
+		GROUP BY CPH.REG_DT
 	</select>
 
 	<!-- 고객 포인트 내역 -->

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

@@ -29,7 +29,7 @@
 	<select id="getWishListGoodsList" parameterType="WishList" resultType="Goods">
 		/* TsfWishlist.getWishListGoodsList*/
 		SELECT Z.*
-			      ,100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) AS DC_RATE 
+			      ,(CASE WHEN Z.LIST_PRICE > 0 THEN 100 - ROUND((Z.CURR_PRICE / Z.LIST_PRICE) * 100 ,0) ELSE 0 END ) AS DC_RATE
 			      ,DATE_FORMAT(Z.REG_DT,'%Y.%m') AS REG_DT_MONTH 
 			FROM
 			(

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/goods/GoodsDealDetailFormMob.html

@@ -101,7 +101,7 @@
 							</th:block>
 							<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 							<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
+							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></span>
 							<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 						</dd>
 					</dl>

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

@@ -154,7 +154,7 @@
 							</th:block>
 							<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 							<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
+							<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></span>
 							<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 						</dd>
 					</dl>

+ 29 - 10
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html

@@ -216,8 +216,9 @@
 	let authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
 
 	let orgCustInfo;
-	let orgAccountInfo;
 	let accountCheck = false;
+	let orgBankCd;
+	let orgAccountNo;
 
 	// 고객정보
 	var fnGetCustInfo = function () {
@@ -247,8 +248,6 @@
 		fnDisplayEmailAgree(custInfo.emailAgreeYn);
 		fnDisplaySmsAgree(custInfo.smsAgreeYn);
 
-		// 회원(고객) 계좌 조회
-		fnGetCustAccountInfo();
 	}
 
 	// 이메일 수신동의
@@ -283,8 +282,8 @@
 		orgAccountInfo = {};
 		var $accountNm = $('#custModiFyForm input[name=accountNm]');
 		if (!gagajf.isNull(result)) {
-			orgAccountInfo.accountNo = result.accountNo;
-			orgAccountInfo.bankCd = result.bankCd;
+			orgAccountNo = result.accountNo;
+			orgBankCd = result.bankCd;
 			//1. 고객명과 환불계좌 예금주가 다른 경우 현재 고객명을 적어주고 계좌번호, 은행코드 초기화 처리
 			let $bankCd = '';
 			if ($accountNm.val() === result.accountNm) {
@@ -298,8 +297,8 @@
 			}
 			$($bankCd).trigger('click'); // 셀렉트 박스 트리거
 		} else {
-			orgAccountInfo.accountNo = '';
-			orgAccountInfo.bankCd ='';
+			orgAccountNo = '';
+			orgBankCd ='';
 		}
 	}
 
@@ -371,6 +370,17 @@
 					$('#custModiFyForm input[name=email]').focus();
 				}
 			});
+			return;
+		}
+
+		if (!fnCheckValidationEmail(custModiFy.email)) {
+			mcxDialog.alertC('이메일 형식에 맞게 입력해주세요.',{
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#custModiFyForm input[name=email]').focus();
+				}
+			});
+			return;
 		}
 
 		if (orgCustInfo.email !== custModiFy.email) {
@@ -383,11 +393,11 @@
 
 
 		// 은행코드가 바꼈는지
-		if (orgAccountInfo.bankCd !== $bankCd.val()) {
+		if (orgBankCd !== $bankCd.val()) {
 			accountModifyYn = 'Y';
 		}
 
-		if (orgAccountInfo.accountNo !== $accountNo.val()) {
+		if (orgAccountNo !== $accountNo.val()) {
 			accountModifyYn = 'Y';
 		}
 
@@ -434,12 +444,18 @@
 
 	// 수정 콜백
 	var fnSaveCustomerInfoCallback = function (result) {
+		accountCheck = false;
 		if (result.isSuccess) {
 			mcxDialog.alert("회원정보가 수정되었습니다.");
 			fnGetCustInfo();
+			fnGetCustAccountInfo();
 			return;
 		} else {
-			mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
+			let msg = '실패하였습니다.<br/>고객센터에 문의하시 바랍니다.'
+			if (result.resultType === 'INVALID_ACCOUNT') {
+				msg = '환불 계좌정보를 다시 확인하시고 계좌인증을 해주세요.'
+			}
+			mcxDialog.alert(msg);
 			return;
 		}
 	}
@@ -510,6 +526,9 @@
 		// 회원(고객) 조회
 		fnGetCustInfo();
 
+		// 회원(고객) 계좌 조회
+		fnGetCustAccountInfo();
+
 		//버튼 색
 		$(document).on('click','.popup_box .button_list button',function(){
 			$('.popup_box .button_list button').removeClass('on');

+ 0 - 21
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustPwdModifyFormMob.html

@@ -264,27 +264,6 @@
 		}
 	};
 
-	var fnDataInit = function () {
-		const $firstFailed = $('#firstFailed');
-		const $secondFailed = $('#secondFailed');
-		const $thirdFailed = $('#thirdFailed');
-		const $avlPwd = $('#avlPwd');
-		const $misPwd = $('#misPwd');
-		const $avlConPwd = $('#avlConPwd');
-
-		const gray = 'c_gray';
-		$firstFailed.attr('class', gray);
-		$secondFailed.attr('class', gray);
-		$thirdFailed.attr('class', gray);
-		$avlPwd.hide();
-		$misPwd.hide();
-		$avlConPwd.hide();
-
-		checkPwd = '';
-		checkConfirmPwd = '';
-		$('#pwdModifyForm .form_control').val('');
-	}
-
 	$(document).ready(function() {
 
 	});

+ 7 - 7
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustSnsJoinInitPwdFormMob.html

@@ -18,11 +18,11 @@
  * 1.0  2021.04.26   jsshin      최초 작성
  *******************************************************************************
  -->
+<body>
+<th:block layout:fragment="content">
 <style>
 .hide{display:none}
 </style>
-<body>
-<th:block layout:fragment="content">
 <main class="container my">
 	<section class="content my_page">
 		<div class="inner">
@@ -39,10 +39,10 @@
 								<!-- 사용불가 비밀번호일경우 -->
 								<p class="mt10">
 									<span id="firstFailed" class="c_gray">
-										<i class="ico ico_check black mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)<br/>
+										<i class="ico ico_check gray mr5"></i>영문(대/소문자), 숫자, 특수문자 중 2가지 이상 조합(8~20자)<br/>
 									</span>
 									<span id="secondFailed" class="c_gray">
-										<i class="ico ico_check red mr5"></i>4개이상 연속되거나 동일한 문자/숫자 제외<br/>
+										<i class="ico ico_check gray mr5"></i>4개이상 연속되거나 동일한 문자/숫자 제외<br/>
 									</span>
 									<span id="thirdFailed" class="c_gray">
 										<i class="ico ico_check gray mr5"></i>아이디 제외
@@ -89,7 +89,7 @@
 							</button>
 						</div>
 						<div>
-							<button type="button" id="btnSavePassword" class="btn btn_dark btn_block" disabled="disabled">
+							<button type="button" id="btnSavePassword" class="btn btn_dark btn_block">
 								<span>확인</span>
 							</button>
 						</div>
@@ -184,11 +184,11 @@
 		if (sameConfirmPwd) {
 			$misPwd.hide();
 			$avlConPwd.show();
-			$btnSavePassword.attr('disabled', false);
+			//$btnSavePassword.attr('disabled', false);
 		} else {
 			$avlConPwd.hide();
 			$misPwd.show();
-			$btnSavePassword.attr('disabled', true);
+			//$btnSavePassword.attr('disabled', true);
 		}
 	};
 

+ 8 - 7
src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html

@@ -354,14 +354,15 @@
 													<span class=" itemPercent" th:if="${goodsData.currPrice != goodsData.listPrice}" th:text="${(goodsData.listPrice == 0 ? 0 : #numbers.formatDecimal((goodsData.listPrice - goodsData.currPrice) / (goodsData.listPrice * 1.0) * 100, 1, 0)) + '%'}">10%</span>
 												</p>
 												<div class="itemcolorchip">
-													<span class="chip_color35" value="ABM">BEIGE</span>
-													<span class="chip_color54" value="BDS">BLACK</span>
-													<span class="chip_color40" value="YBR">WHITE</span>
+													<th:block th:each="option, idx : ${goodsData.colorArr}" th:with="colorArray=${#strings.arraySplit(idx.current,':')}">
+														<span th:if="${colorArray[1]=='#FFFFFF'}" th:style="${'background-color:'+colorArray[1]+';border:1px solid #aaa;'}" class="chip_color" th:value="${colorArray[0]}"></span>
+														<span th:if="${colorArray[1]!='#FFFFFF'}" th:style="${'background-color:'+colorArray[1]+';'}" class="chip_color" th:value="${colorArray[0]}"></span>
+													</th:block>
 												</div>
 												<p class="itemBadge">
-													<span class="badge13">쿠폰할인</span>
-													<span class="badge13">단독특가</span>
-													<span class="badge13">무료배송</span>
+													<th:block th:each="option, idx : ${goodsData.benefitArr}" th:with="iconArray=${#strings.arraySplit(idx.current,':')}" >
+														<span class="badge13" th:if="${idx.index<3}" th:value="${iconArray[0]}" th:text="${iconArray[1]}"></span>
+													</th:block>
 												</p>
 												<div class="itemComment" th:text="${goodsData.goodsTnm}">#가을느낌 물씬!</div>
 											</a>
@@ -370,7 +371,7 @@
 								</th:block>
 							</div>
 							<div class="btn_wrap">
-								<button type="button" class="btn btn_md"><span>더 많은 상품보기</span></button>
+								<button type="button" class="btn btn_md" th:onclick="cfnGoToGoodsList([[${brandGroupInfo.brandGroupNo}]],[[${brandGroupInfo.cateGb}]]);"><span>더 많은 상품보기</span></button>
 							</div>
 						</div>
 					</div>

+ 170 - 21
src/main/webapp/WEB-INF/views/web/display/CategoryGoodsListFormWeb.html

@@ -500,6 +500,7 @@
 							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\',\'\',\'\',\'\',\'\',\'\',\''+formalGb+'\');">전체</a></li>\n');
 							navNm += '<li class="bread_2depth" id="navNm">아울렛</li><li class="bread_2depth" id="navNm1">전체</li>';
 						}else{
+							$("#navNm").hide();
 							$('#ulAllCate').append('<li><a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\''+cateGb+'\');">전체</a></li>\n');
 							navNm += '<li class="bread_2depth" id="navNm1">전체</li>';
 						}
@@ -522,9 +523,9 @@
 							});
 						}else{
 							$.each(result, function(idx, item) {
-								$.each(allCate, function(allCateIdx, allCateItem) {
-									if (item.cate1No == allCateItem.cate1No) {
-										$('#ulAllCate').append(fnGetCategoryList(allCateItem));
+								$.each(allCate, function(brandCateIdx, brandCateItem) {
+									if (item.cate1No == brandCateItem.cate1No) {
+										$('#ulAllCate').append(fnGetBrandCategoryList(item));
 									}
 								});
 							});
@@ -533,6 +534,136 @@
 					//}
 				});
 		}
+		
+		let fnGetBrandCategoryList = function (cate1){
+			var brandGroupNo = [[${cateInfo.brandGroupNo}]];
+			var cateGb =  [[${cateInfo.cateGb}]];
+			var formalGb = [[${cateInfo.formalGb}]];
+			var cate1No = [[${cateInfo.cate1No}]];
+			var cate2No = [[${cateInfo.cate2No}]];
+			var cate3No = [[${cateInfo.cate3No}]];
+			var cate4No = [[${cateInfo.cate4No}]];
+			
+			var navNm = "";
+			var formTitle = "";
+			let tag = '';
+			
+			console.log('cate1No>>>'+cate1No);
+		
+			if(cate1 != null){
+				tag += '<li';
+				if (cate1.cate1No == cate1No) {
+					tag += ' class="on"';
+				}
+				tag += '>\n';
+				tag += '	<a href="javascript:javascript:void(0);"';
+				if (cate1.cate1No == cate1No && cate2No == null) {
+					tag += ' class="on"';
+					formTitle = cate1.cate1Nm;
+					$("#formTitle").text(formTitle);
+					$("#navNm").hide();
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					$("#navHome").attr('onclick', 'cfnGoToBrandMain(' + brandGroupNo + ');');
+					$("#navArea").append(navNm);
+				}else if(cate1.cate1No == cate1No && cate3No == null){
+					$("#navNm").hide();
+					navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+					$("#navArea").append(navNm);
+				}else if(cate3No != null){
+					$("#navNm").hide();
+				}
+				tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ');" >' + cate1.cate1Nm + '</a>\n';
+				
+				
+				if (cate1.leafYn == 'N' && cate1.cate2List.length > 0) {
+					tag += '<div class="sub_cate" style="display: block;">\n';
+					tag += '	<ul>\n';
+					$.each(cate1.cate2List, function (idx2, cate2) {
+						tag += '		<li';
+						if (cate2.cate2No == cate2No && cate3No == null) {
+							tag += ' class="on"';
+						}
+						tag += '		>\n';
+						tag += '		<a href="javascript:javascript:void(0);" ';
+						if (cate2.cate2No == cate2No && cate3No == null) {
+							tag += ' class="on"';
+							navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li>';
+							$("#navArea").append(navNm);
+							$("#formTitle").text(cate2.cate2Nm);
+						}else if(cate2.cate2No == cate2No){
+							navNm += '<li class="bread_2depth" id="navNm1">' + cate1.cate1Nm + '</li>';
+							$("#navArea").append(navNm);
+						}
+						tag += '	onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ');">' + cate2.cate2Nm + '</a>\n';
+						
+						if (cate2.leafYn == 'N' && cate2.cate3List != null && cate2.cate3List.length > 0) {
+							tag += '<div class="sub_cate"';
+							if (cate2.cate2No == cate2No) {
+								tag += ' style="display: block;"';
+							}
+							tag += '>\n';
+							tag += '	<ul>\n';
+							$.each(cate2.cate3List, function (idx3, cate3) {
+								tag += '<li';
+								if (cate3.cate3No == cate3No && cate4No == null) {
+									tag += ' class="on"';
+								}
+								tag += '>';
+								tag += '		<a href="javascript:javascript:void(0);" ';
+								if (cate3.cate3No == cate3No && cate4No == null) {
+									tag += ' class="on"';
+									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
+									$("#navArea").append(navNm);
+									$("#formTitle").text(cate3.cate3Nm);
+								}else if(cate3.cate3No == cate3No){
+									navNm = '<li class="bread_2depth" id="navNm2">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li>';
+								}
+								tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ');">' + cate3.cate3Nm + '</a>';
+								
+								if (cate3.leafYn == 'N' && cate3.cate4List != null && cate3.cate4List.length > 0) {
+									tag += '<div class="sub_cate"';
+									if (cate3.cate3No == cate3No) {
+										tag += ' style="display: block;"';
+									}
+									tag += '>\n';
+									tag += '	<ul>\n';
+									$.each(cate3.cate4List, function (idx4, cate4) {
+										tag += '<li';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+										}
+										tag += '>';
+										tag += '		<a href="javascript:javascript:void(0);" ';
+										if (cate4.cate4No == cate4No) {
+											tag += ' class="on"';
+											navNm = '<li class="bread_2depth" id="navNm3">' + cate2.cate2Nm + '</li><li class="bread_2depth" id="navNm3">' + cate3.cate3Nm + '</li><li class="bread_2depth" id="navNm3">' + cate4.cate4Nm + '</li>';
+											$("#navArea").append(navNm);
+											$("#formTitle").text(cate4.cate4Nm);
+										}
+										if (formalGb == 'G009_20') {
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ',\'\',\'' + formalGb + '\');">' + cate4.cate4Nm + '</a>';
+										} else {
+											tag += ' onclick="cfnGoToGoodsList(' + brandGroupNo + ',\'' + cateGb + '\',' + cate1.cate1No + ',' + cate2.cate2No + ',' + cate3.cate3No + ',' + cate4.cate4No + ');">' + cate4.cate4Nm + '</a>';
+										}
+									});
+									tag += '</ul>\n';
+									tag += '</div>\n';
+								}
+								tag += '</li>';
+							});
+							tag += '</ul>\n';
+							tag += '</div>\n';
+						}
+						
+						tag += '</li>';
+					});
+					tag += '</ul>';
+					tag += '</div>';
+				}
+			}
+			
+			return tag;
+		}
 
 		let fnGetCategoryList = function (cate1){
 			var brandGroupNo = [[${cateInfo.brandGroupNo}]];
@@ -688,49 +819,60 @@
 		}
 
 		var fnImgOnoff = function (){
+			var nowFocus = $('.dp .itemPic');
 			var nowMov = $('.itemPic').children('.pd_mov');
 			var nowImg = $('.itemPic').children('.pd_img');
 			var ogrSrc;
 			var overSrc;
 			var srcName = nowImg.attr('src');
 			overSrc = srcName.substring(0, srcName.lastIndexOf('.'));
+			
+			var srcImg;
+			var srcdat;
 
-			var img1;
-			var img2;
-
-			$(nowMov).on('mouseover', function() {
+			$(nowFocus).on('mouseover', function() {
 				// [on] size opt
-				$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
 				// [on] mov none
-				$(this).css("opacity","0");
+				//$(this).css("opacity","0");
 				// return false;
+				$(this).children('.pd_mov').siblings(".itemOpt").addClass('on');
+				$(this).children('.pd_mov').css("opacity","0");
 			});
-			$(nowMov).on('mouseleave', function() {
+			$(nowFocus).on('mouseleave', function() {
 				// [off] size opt
-				$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
 				// [off] mov block
-				$(this).css("opacity","1");
+				//$(this).css("opacity","1");
 				// return false;
+				$(this).children('.pd_mov').siblings(".itemOpt").removeClass('on');
+				$(this).children('.pd_mov').css("opacity","1");
 			});
-			$(nowImg).on('mouseover', function() {
-				img1 = $(this).attr('src');
-				img2 = $(this).attr('data-img');
+			$(nowFocus).on('mouseover', function() {
+				//img1 = $(this).attr('src');
+				//img2 = $(this).attr('data-img');
 				// [on] size opt
-				$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": 0}, 400,"swing");
 				// [on] re-Name
 				// ogrSrc = $(this).attr('src').substring(0, srcName.lastIndexOf('.'));
 				// overSrc = $(this).attr('src').substring(0, srcName.lastIndexOf('.'));
 				// $(this).attr('src', overSrc+ '_onhover.' + /[^.]+$/.exec(srcName));
-				$(this).attr('src',img2);
+				//$(this).attr('src',img2);
 				// return false;
+				$(this).children('.pd_img').siblings(".itemOpt").addClass('on');
+				srcImg = $(this).children('.pd_img').attr('src');
+				srcdat = $(this).children('.pd_img').attr('data-img');
+				$(this).children('.pd_img').attr('src',srcdat);
 			});
-			$(nowImg).on('mouseleave', function() {
+			$(nowFocus).on('mouseleave', function() {
 				// [off] size opt
-				$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
+				//$(this).siblings(".itemOpt").stop().animate({"bottom": -120}, 400,"swing");
 				// [off] re-Name
 				// $(this).attr('src', overSrc + '.' + /[^.]+$/.exec(srcName));
-				$(this).attr('src', img1);
+				//$(this).attr('src', img1);
 				// return false;
+				$(this).children('.pd_img').siblings(".itemOpt").removeClass('on');
+				$(this).children('.pd_img').attr('src', srcImg);
 			});
 		}
 
@@ -804,8 +946,15 @@
 	<script>
 		//(진행 중)
 		$(document).ready( function() {
-
+			
 		});
+		
+		/* 210427_수정 : err 이미지 스크립트 */
+		function noneImg(noneSrc){
+			$(noneSrc).parents('.itemPic').css({'background':'url(/images/pc/thumb/bg_item_none.png)'});
+			$(noneSrc).css({'opacity':'0'});
+			//$(noneSrc).attr("src", no_src);
+		}
 	</script>
 
 </th:block>

+ 54 - 19
src/main/webapp/WEB-INF/views/web/display/MallMainFormWeb.html

@@ -836,11 +836,11 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 100,
-
-		// initialSlide: 0,
+		
+		// initialSlide: 0, 
 		// 초기 슬라이드의 색인 번호입니다
 		centeredSlides: true,
-		// slidesOffsetBefore: 250,
+		// slidesOffsetBefore: 250, 
 		// 컨테이너 시작 부분 (모든 슬라이드 이전)에 슬라이드 오프셋 추가 (픽셀 단위)
 		speed : 1000,
 		// Navigation arrows
@@ -865,11 +865,11 @@ if ( (navigator.appName == 'Netscape' && agent.indexOf('trident') != -1) || (age
 		loop: true,
 		slidesPerView: 'auto',
 		spaceBetween: 70,
-
-		// initialSlide: 0,
+		
+		// initialSlide: 0, 
 		// 초기 슬라이드의 색인 번호입니다
 		centeredSlides: true,
-		// slidesOffsetBefore: 250,
+		// slidesOffsetBefore: 250, 
 		// 컨테이너 시작 부분 (모든 슬라이드 이전)에 슬라이드 오프셋 추가 (픽셀 단위)
 		speed : 1000,
 		// Navigation arrows
@@ -929,22 +929,22 @@ var main_trendy_slide = new Swiper('.main_trendy .post-trendy', {
 main_trendy_slide.on('slideChange', function () {
 	var newitemIndex = main_trendy_slide.activeIndex;
 	var slideWidth = $(".main_trendy .swiper-slide-visible").eq(0).width() + 22;
-
+	
 	$(".main_trendy .swiper-slide").removeClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(0).addClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(3).addClass('scaleBig');
-
+	
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 });
 
 main_trendy_slide.on('reachEnd', function () {
 	var newitemIndex = main_trendy_slide.activeIndex + 1;
 	var slideWidth = $(".main_trendy .swiper-slide-visible").eq(0).width() + 22;
-
+	
 	$(".main_trendy .swiper-slide").removeClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(1).addClass('scaleBig');
 	$(".main_trendy .swiper-slide-visible").eq(4).addClass('scaleBig');
-
+	
 	$(".main_trendy .swiper-wrapper").css("transform","translateX(-"+ (slideWidth * newitemIndex) +"px)");
 	function l(n) {
 		if (n.direction !== "none")
@@ -1095,9 +1095,9 @@ $(".main_recomm .tag_list .btn").click(function(){
 	$('#'+recommActive).addClass('active');
 });
 function init(){
-
+	
 	if(main_recomm_slide != null) main_recomm_slide.destroy();
-
+	
 	var main_recomm_slide = new Swiper ('.main_recomm .post-recomm', {
 		slidesPerView: 5,
 		slidesPerGroup: 5,
@@ -1120,9 +1120,10 @@ function init(){
 init();
 
 /* SLIDE - MAIN_FORYOU */
+var cntNum = 0;
 var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container', {
 	allowTouchMove: false,
-	loop: true,
+	loop: false,
 	effect: 'fade',
 	autoHeight: false,
 	autoplay: {
@@ -1133,7 +1134,28 @@ var main_foryou_slide = new Swiper ('.main_foryou .post-sug .swiper-container',
 		el: '.post-sug .swiper-pagination',
 		clickable: true,
 	},
+	on : {
+		slideChange: function(){
+			$(".fy_nav .swiper-slide li").children('.btn_shape').removeClass('active');
+			$(".fy_nav .swiper-slide-next li").eq(0).children('.btn_shape').addClass('active');
+			$(".fy_nav .swiper-slide-prev li").eq(0).children('.btn_shape').addClass('active');
+			foryouIndex = -1;
+			if(cntNum === 0){
+				$('.fy_item').removeClass('active');
+				$('#fy6').addClass('active');
+				cntNum = 1;
+			} else {
+				$('.fy_item').removeClass('active');
+				$('#fy1').addClass('active');
+				cntNum = 0;
+			}
+			
+			clearInterval(ti);
+			ti = startTimeInterval();
+		}
+	},
 });
+
 function foryouInterval(_foryouIndex) {
 	var foryouCateItems = $(".main_foryou .fy_nav .swiper-slide-active ul li .btn_shape");
 	$(foryouCateItems[(_foryouIndex + 1) % 5]).addClass("active");
@@ -1147,13 +1169,19 @@ function foryouFy_item(_Fy_itemIndex) {
 	// $(".fy_item").addClass('active');
 	$('#'+fyActive).addClass('active');
 }
+
 var foryouIndex = 0;
-setInterval(function () {
-	foryouInterval(foryouIndex);
-	foryouFy_item();
-	if (foryouIndex >= 5) foryouIndex = 0;
-	foryouIndex++;
-}, 5000);
+var ti;
+function startTimeInterval() {
+	return setInterval(function () {
+		$(".fy_nav .btn_shape").removeClass('active');
+		$(".fy_item").removeClass('active');
+		foryouInterval(foryouIndex);
+		foryouFy_item();
+		if (foryouIndex >= 5) foryouIndex = 0;
+		foryouIndex++;
+	}, 5000);
+}
 $(".fy_nav .btn_shape").click(function(){
 	var fyActive = $(this).attr('data-tab');
 	$(".fy_nav .btn_shape").removeClass('active');
@@ -1162,6 +1190,13 @@ $(".fy_nav .btn_shape").click(function(){
 	$('#'+fyActive).addClass('active');
 });
 
+$(".fy_nav ul li").click(function(){
+	foryouIndex = $(this).index();
+	clearInterval(ti);
+	ti = startTimeInterval();
+});
+
+ti = startTimeInterval();
 
 /* SLIDE - MAIN_TV */
 var main_tv_slide = new Swiper ('.main_tv .post-tv', {

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

@@ -112,7 +112,7 @@
 		//00개 쿠폰이 발급되었습니다.
 		let couponDownAbleYn = "N";
 		let arrCpnId = [];
-		$('.btn_coupon_down').each(function(){
+		$('#goodsCouponForm').find('.btn_coupon_down').each(function(){
 			if (!$(this).attr('disabled')){
 				couponDownAbleYn = "Y";
 				arrCpnId.push($(this).attr('cpnId'));
@@ -135,7 +135,7 @@
 			let list = result.goodsCouponList;
 
 			list.forEach(function(coupon){
-				$('.btn_coupon_down').each(function(){
+				$('#goodsCouponForm').find('.btn_coupon_down').each(function(){
 					if (!$(this).attr('disabled')){
 						let cpnId = $(this).attr('cpnId');
 						if (coupon.cpnId == cpnId){

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

@@ -140,7 +140,7 @@
 												</span>
 												<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 												<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
+												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></th:block></span>
 												<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 											</dd>
 									</div>

+ 28 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -197,7 +197,7 @@
 												</span>
 												<span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
 												<th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
-												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="외 택1"></th:block></span>
+												<th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'Y'}" th:text="${'외 택1'}"></th:block></span>
 												<button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
 											</dd>
 									</div>
@@ -612,7 +612,7 @@
 						</div>
 						</th:block>
 					</div>
-					<div class="area_kcl" th:if="${goodsSafeNo != null}">
+					<div class="area_kcl" th:if="${goodsInfo.goodsType == 'G056_N' and goodsSafeNo != null}">
 						<i class="ico ico_kcl"></i>
 						<th:block th:if="${not #strings.contains(goodsSafeNo.certNum, '해당')}" >
 						<p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">
@@ -632,6 +632,32 @@
 							해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
 						</p>
 					</div>
+					<th:block th:if="${goodsInfo.goodsType == 'G056_S'}">
+					<th:block th:each="goodsCompose, status : ${goodsComposeList}">
+					<th:block th:if="${goodsCompose.goodsSafeNo != null}">
+						<div class="area_kcl" >
+						<i class="ico ico_kcl"></i>
+						<th:block th:if="${not #strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
+						<p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certDiv + ' / ' + goodsCompose.goodsSafeNo.certOrganName}">
+							어린이제품 안전인증 / 한국건설생활시험연구원(KCL)
+						</p>
+						</th:block>
+						<p class="normal" >
+							<th:block th:if="${#strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
+							해당 없음 
+							</th:block>
+							<th:block th:unless="${#strings.contains(goodsCompose.goodsSafeNo.certNum, '해당')}" >
+							인증번호: <th:block th:text="${goodsCompose.goodsSafeNo.certNum}"></th:block>
+							<a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsCompose.goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
+							</th:block>
+						</p>
+						<p class="t_info dot_info">
+							해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
+						</p>
+					</div>
+					</th:block>
+					</th:block>
+					</th:block>
 					<div class="area_infotbl">
 						<span class="title">상품기본정보</span>
 						<th:block th:if="${goodsInfo.goodsType == 'G056_N'} ">

+ 2 - 2
src/main/webapp/WEB-INF/views/web/mypage/MypageCustConfirmFormWeb.html

@@ -82,10 +82,10 @@
 						</div>
 					</div>
 					<div class="btn_footer_area">
-						<button type="button" class="btn btn_default cancle_btn" onclick="cfnGoToPage(_PAGE_MAIN);">
+						<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MAIN);">
 							<span>취소</span>
 						</button>
-						<button type="button" id="btnConfirm" class="btn btn_dark submit_btn">
+						<button type="button" id="btnConfirm" class="btn btn_dark btn_md">
 							<span>확인</span>
 						</button>
 					</div>

+ 31 - 14
src/main/webapp/WEB-INF/views/web/mypage/MypageCustModifyFormWeb.html

@@ -98,7 +98,7 @@
 											<td>
 												<div class="form_field">
 													<div class="input_wrap">
-														<input type="text" id="email" name="email" class="form_control"/>
+														<input type="text" id="email" name="email" data-valid-type="email" class="form_control"/>
 													</div>
 												</div>
 											</td>
@@ -235,11 +235,14 @@
 			</div>
 		</div>
 	</div>
+<script th:src="@{'/biz/customer.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/customer.js"></script>
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	let orgCustInfo;
-	let orgAccountInfo;
 	let accountCheck = false;
+	let orgAccountNo;
+	let orgBankCd;
+
 
 	// 고객정보
 	var fnGetCustInfo = function () {
@@ -269,8 +272,6 @@
 		fnDisplayEmailAgree(custInfo.emailAgreeYn);
 		fnDisplaySmsAgree(custInfo.smsAgreeYn);
 
-		// 회원(고객) 계좌 조회
-		fnGetCustAccountInfo();
 	}
 
 	// 이메일 수신동의
@@ -302,11 +303,10 @@
 
 	// 고객계좌 정보 데이터
 	var fnGetCustAccountInfoCallback = function (result) {
-		orgAccountInfo = {};
 		var $accountNm = $('#custModiFyForm input[name=accountNm]');
 		if (!gagajf.isNull(result)) {
-			orgAccountInfo.accountNo = result.accountNo;
-			orgAccountInfo.bankCd = result.bankCd;
+			orgAccountNo = result.accountNo;
+			orgBankCd = result.bankCd;
 			//1. 고객명과 환불계좌 예금주가 다른 경우 현재 고객명을 적어주고 계좌번호, 은행코드 초기화 처리
 			let $bankCd = '';
 			if ($accountNm.val() === result.accountNm) {
@@ -320,8 +320,8 @@
 			}
 			$($bankCd).trigger('click'); // 셀렉트 박스 트리거
 		} else {
-			orgAccountInfo.accountNo = '';
-			orgAccountInfo.bankCd ='';
+			orgAccountNo = '';
+			orgBankCd ='';
 		}
 	}
 
@@ -393,6 +393,17 @@
 					$('#custModiFyForm input[name=email]').focus();
 				}
 			});
+			return;
+		}
+
+		if (!fnCheckValidationEmail(custModiFy.email)) {
+			mcxDialog.alertC('이메일 형식에 맞게 입력해주세요.',{
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#custModiFyForm input[name=email]').focus();
+				}
+			});
+			return;
 		}
 
 		if (orgCustInfo.email !== custModiFy.email) {
@@ -404,11 +415,11 @@
 		}
 
 		// 은행코드가 바꼈는지
-		if (orgAccountInfo.bankCd !== $bankCd.val()) {
+		if (orgBankCd !== $bankCd.val()) {
 			accountModifyYn = 'Y';
 		}
 
-		if (orgAccountInfo.accountNo !== $accountNo.val()) {
+		if (orgAccountNo !== $accountNo.val()) {
 			accountModifyYn = 'Y';
 		}
 
@@ -455,12 +466,18 @@
 
 	// 수정 콜백
 	var fnSaveCustomerInfoCallback = function (result) {
+		accountCheck = false;
 		if (result.isSuccess) {
 			mcxDialog.alert("회원정보가 수정되었습니다.");
 			fnGetCustInfo();
+			fnGetCustAccountInfo();
 			return;
 		} else {
-			mcxDialog.alert("실패하였습니다.<br/>고객센터에 문의하시 바랍니다.");
+			let msg = '실패하였습니다.<br/>고객센터에 문의하시 바랍니다.'
+			if (result.resultType === 'INVALID_ACCOUNT') {
+				msg = '환불 계좌정보를 다시 확인하시고 계좌인증을 해주세요.'
+			}
+			mcxDialog.alert(msg);
 			return;
 		}
 	}
@@ -519,13 +536,13 @@
 		// 회원(고객) 조회
 		fnGetCustInfo();
 
+		// 회원(고객) 계좌 조회
+		fnGetCustAccountInfo();
 
 
 	});
 
 
-
-
 	/*]]>*/
 </script>
 </th:block>

+ 115 - 54
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -146,58 +146,8 @@
 			</th:block>            
             
             <!-- 관련상품 리스트 -->
-			<div class="content sticky_nav_list" th:if="${planCornerListLength>0}">
-				<div class="cont_head">
-                    <div class="sticky_nav">
-                        <ul>    
-                        	<th:block th:each="cornerData, CornerStat : ${planCornerList}">
-                            <li><a th:href="${'#brand' +CornerStat.index}" th:text="${cornerData.cornerNm}"></a></li> <!-- 섹션이동 -->
-                            </th:block>
-                        </ul>
-                    </div>
-				</div>
-				<div class="cont_body">
-                    <div class="list_content">
-                    	<th:block th:each="cornerData, CornerStat : ${planCornerList}">
-                        <div th:id="${'brand' +CornerStat.index}">
-                            <div class="item_header"> <!-- 섹션이동 -->
-                                <h4 th:text="${cornerData.cornerNm}"></h4>
-                            </div>
-                            <div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
-                            	<th:block th:each="cornerGoodsData, CornerGoodsStat : ${planCornerGoodsList}" th:if="${cornerGoodsData.cornerNm == cornerData.cornerNm}">
-                       
-                                <div class="item_prod">
-                                    <div class="item_state">
-                                        <button type="button" th:class="${cornerGoodsData.likeIt == 'likeit'}? 'itemLike likeit' : 'itemLike'" onclick="cfnPutWishList(this);" th:attr="goodsCd=${cornerGoodsData.goodsCd}, ithrCd='', contentsLoc='', planDtlSq=''">관심상품 추가</button>
-                                        <a href="javascript:void(0);" th:onclick="cfnGoToGoodsDetail([[${cornerGoodsData.goodsCd}]])" class="itemLink">
-                                            <!-- <div class="rank ranker"><span>1</span></div> -->
-                                            <div class="itemPic">
-                                                <img alt="BLUE-a" class=" vLHTC pd_img" th:src="${goodsView + '/' +cornerGoodsData.sysImgNm}">
-                                            </div>
-                                            <p class="itemBrand" th:text="${cornerGoodsData.brandGroupNm}"></p>
-                                            <div class="itemName" th:text="${cornerGoodsData.goodsNm}"></div>
-                                            <p class="itemPrice">[[${#numbers.formatInteger(cornerGoodsData.currPrice,0,'COMMA')}]]
-                                                <span class="itemPrice_original" th:if="${cornerGoodsData.currPrice != cornerGoodsData.listPrice}" th:text="${#numbers.formatInteger(cornerGoodsData.listPrice,0,'COMMA')}"></span>
-                                                <span class=" itemPercent" th:if="${cornerGoodsData.dcRate != '0'}" th:text="|${#numbers.formatDecimal(cornerGoodsData.dcRate,0,0)}%|"></span>
-                                            </p>
-                                            <div class="itemcolorchip">
-                                                <span class="chip_color35" value="ABM">BEIGE</span>
-                                                <span class="chip_color54" value="BDS">BLACK</span>
-                                                <span class="chip_color40" value="YBR">WHITE</span>
-                                            </div>
-                                            <p class="itemBadge">
-                                                <span class="badge13">베스트 </span>
-                                            </p>
-                                            <div class="itemComment" th:if="${cornerGoodsData.goodsTnm != null}" th:text="${cornerGoodsData.goodsTnm}"></div>
-                                        </a>
-                                    </div>
-                                </div>  
-                                </th:block>          
-                          	</div>
-                          </div>
-                      </th:block>
-                  </div>         
-              </div>
+			<div class="content sticky_nav_list" id="cornerList">
+
           </div>
 		  
             <!-- //관련상품 리스트 -->  
@@ -289,9 +239,109 @@ let template =[[${templateOrd}]];
 let replyList = [[${replyList}]];
 let replyCount = [[${replyCount}]];
 let replyAttachList = [[${replyAttachList}]];
+let planCornerGoodsList = [[${planCornerGoodsList}]];
+let planCornerList = [[${planCornerList}]];
 let _mall = [[${@environment.getProperty('domain.front')}]];
 let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
 let imgUrl=[[${@environment.getProperty('upload.image.view')}]];
+console.log(planCornerList);
+console.log(planCornerGoodsList);
+if(planCornerList.length>0){
+	var html = '';
+	
+	html += '<div class="cont_head">';
+	html += '     <div class="sticky_nav">';
+	html += '         <ul>    ';
+	$.each(planCornerList, function(idx, item)  {
+		html += '             <li><a href="#brand'+idx+'">'+item.cornerNm+'</a></li>';
+	})
+	
+	html += '         </ul>';
+	html += '     </div>';
+	html += '</div>';
+	html += '<div class="cont_body">';
+	html += '     <div class="list_content">';
+	$.each(planCornerList, function(idx, item)  {
+		html += '         <div id="brand'+idx+'">';
+		html += '             <div class="item_header">';
+		html += '                 <h4>'+item.cornerNm+'</h4>';
+		html += '             </div>';
+		html += '             <div class="itemsGrp">';
+		$.each(planCornerGoodsList, function(idx2, item2)  {
+			html += '                 <div class="item_prod">';
+			html += '                     <div class="item_state">';
+			html += '		<button type="button" class="itemLike';
+			if(item.likeIt == 'likeit'){
+				html += ' likeit';
+			}
+			html += ' "';
+			html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+			
+			html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
+			html += '                             <div class="itemPic">';
+			html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
+			html += '                             </div>';
+			html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
+			html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
+			html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
+			if (item2.currPrice != item2.listPrice) {
+				html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
+			}
+			if (item2.dcRate != 0) {
+				html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
+			}
+			
+			
+			html += '                             </p>';
+			html += '                             <div class="itemcolorchip">';
+			if(!gagajf.isNull(item2.colorChips)){
+				var colorArr = item2.colorChips.split(",");
+				var colorCd = '';
+				var rgbColor = '';
+				for(let i=0; i<colorArr.length; i++){
+					var colorInfo = colorArr[i].split(":");
+					colorCd = colorInfo[0];
+					rgbColor = colorInfo[1];
+					if(rgbColor=='#FFFFFF'){
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+					}else{
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+					}
+				}
+			}
+			html += '                             </div>';
+			if(!gagajf.isNull(item2.icon)){
+				var iconArr = item2.icon.split(",");
+				var iconGb = '';
+				var iconNm = '';
+				html += '	<p class="itemBadge">';
+				for(let i=0; i<iconArr.length; i++){
+					var iconInfo = iconArr[i].split(":");
+					iconGb = iconInfo[0];
+					iconNm = iconInfo[1];
+					html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+				}
+				html += '	</p>';
+			}
+			if(item2.goodsTnm != null){
+				html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+			}
+			html += '                         </a>';
+			html += '                     </div>';
+			html += '                 </div>';
+		})
+
+		html += '             </div>';
+		html += '         </div>';
+	})
+	
+	html += '     </div>';
+	html += ' </div>';
+	
+	
+	$("#cornerList").append(html);
+	
+}
 
 if(review.length>0){
 	
@@ -409,7 +459,6 @@ if(goods1.length>0){
 			html += '	<div>';
 			html += '        <h4>';
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
-				console.log("template[i].linkOpenGb"+ template[i].linkOpenGb);
 				if (template[i].linkOpenGb == 'M') { //본창
 					html += '        <a href="http://'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
 				}else{
@@ -777,7 +826,7 @@ var fnSearchCallback = function (result) {
 				 }
 				
 				 html += '			</div>';
-				 html += '			<p>'+item.entryVal1+'</p>';
+				 html += '			<p>'+escapeHtml(item.entryVal1)+'</p>';
 				 if (item.entryCustNo == result.custNo) {
 					 html += '			<button class="btn btn_default btn_del" value="'+item.planEntrySq+'" onclick="fnDelReply(this.value)"><span>삭제</span></button>';
 				 }
@@ -802,6 +851,18 @@ var fnSearchCallback = function (result) {
 	gagaPaging.createPagination(result.paging.pageable);
 }
 
+function escapeHtml(str) {
+	var map = {
+		'&': '&amp;',
+		'<': '&lt;',
+		'>': '&gt;',
+		'"': '&quot;',
+		"'": '&#039;'
+	};
+	return str.replace(/[&<>"']/g, function(m) { return map[m]; });
+}
+
+
 // 댓글 삭제
 var fnDelReply = function(obj) {
 	

+ 106 - 7
src/main/webapp/WEB-INF/views/web/planning/PlanningShotGuideFormWeb.html

@@ -57,21 +57,21 @@
                 </div>
 		    </div>
             <!-- 총알배송 가능 상품 리스트 -->
-			<div class="content sticky_nav_list">
-				<div class="cont_head">
+			<div class="content sticky_nav_list" id="cornerList">
+<!-- 				<div class="cont_head">
                     <div class="sticky_nav">
                         <ul>    
-                            <li><a href="#brand01">모이몰른</a></li> <!-- 섹션이동 -->
+                            <li><a href="#brand01">모이몰른</a></li> 섹션이동
                         </ul>
                     </div>
 				</div>
 				<div class="cont_body">
                     <div class="list_content">
                         <div id="brand01">
-                            <div class="item_header"> <!-- 섹션이동 -->
+                            <div class="item_header"> 섹션이동
                                 <h4>모이몰른</h4>
                             </div>
-                            <div class="itemsGrp"> <!-- itemsGrp rank hot deal -->
+                            <div class="itemsGrp"> itemsGrp rank hot deal
                                 <div class="item_prod">
                                     <div class="item_state">
                                         <button type="button" class="itemLike">관심상품 추가</button>
@@ -101,7 +101,7 @@
                             </div>
                         </div>
                      </div>
-                </div>
+                </div> -->
 		    </div>
             <!-- //총알배송 가능 상품 리스트 -->  
         </div>
@@ -141,8 +141,107 @@
 /*<![CDATA[*/
 let custAddr = [[${custAddr}]];
 let customerInfo = [[${customerInfo}]];
-
+let goodsView =[[${@environment.getProperty('upload.goods.view')}]]
+let planCornerList = [[${planCornerList}]];
+let planCornerGoodsList = [[${planCornerGoodsList}]];
 // 로그인 확인
+if(planCornerList.length>0){
+	var html = '';
+	
+	html += '<div class="cont_head">';
+	html += '     <div class="sticky_nav">';
+	html += '         <ul>    ';
+	$.each(planCornerList, function(idx, item)  {
+		html += '             <li><a href="#brand'+idx+'">'+item.cornerNm+'</a></li>';
+	})
+	
+	html += '         </ul>';
+	html += '     </div>';
+	html += '</div>';
+	html += '<div class="cont_body">';
+	html += '     <div class="list_content">';
+	$.each(planCornerList, function(idx, item)  {
+		html += '         <div id="brand'+idx+'">';
+		html += '             <div class="item_header">';
+		html += '                 <h4>'+item.cornerNm+'</h4>';
+		html += '             </div>';
+		html += '             <div class="itemsGrp">';
+		$.each(planCornerGoodsList, function(idx2, item2)  {
+			html += '                 <div class="item_prod">';
+			html += '                     <div class="item_state">';
+			html += '		<button type="button" class="itemLike';
+			if(item.likeIt == 'likeit'){
+				html += ' likeit';
+			}
+			html += ' "';
+			html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+			
+			html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">';
+			html += '                             <div class="itemPic">';
+			html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ goodsView +'/'+item2.sysImgNm +'">';
+			html += '                             </div>';
+			html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
+			html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
+			html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
+			if (item2.currPrice != item2.listPrice) {
+				html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
+			}
+			if (item2.dcRate != 0) {
+				html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
+			}
+			
+			
+			html += '                             </p>';
+			html += '                             <div class="itemcolorchip">';
+			if(!gagajf.isNull(item2.colorChips)){
+				var colorArr = item2.colorChips.split(",");
+				var colorCd = '';
+				var rgbColor = '';
+				for(let i=0; i<colorArr.length; i++){
+					var colorInfo = colorArr[i].split(":");
+					colorCd = colorInfo[0];
+					rgbColor = colorInfo[1];
+					if(rgbColor=='#FFFFFF'){
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>';
+					}else{
+						html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+					}
+				}
+			}
+			html += '                             </div>';
+			if(!gagajf.isNull(item2.icon)){
+				var iconArr = item2.icon.split(",");
+				var iconGb = '';
+				var iconNm = '';
+				html += '	<p class="itemBadge">';
+				for(let i=0; i<iconArr.length; i++){
+					var iconInfo = iconArr[i].split(":");
+					iconGb = iconInfo[0];
+					iconNm = iconInfo[1];
+					html += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>';
+				}
+				html += '	</p>';
+			}
+			if(item2.goodsTnm != null){
+				html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+			}
+			html += '                         </a>';
+			html += '                     </div>';
+			html += '                 </div>';
+		})
+
+		html += '             </div>';
+		html += '         </div>';
+	})
+	
+	html += '     </div>';
+	html += ' </div>';
+	
+	
+	$("#cornerList").append(html);
+	
+}
+
 var shotBody = function () {
 	if (!cfCheckLogin() || (custAddr == null && custAddr == '')) {
 		html = '';

+ 0 - 1
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -87,7 +87,6 @@
     </div>   
 <script th:inline="javascript">
 var socialInfo = [[${socialInfo}]];
-console.log(socialInfo);
 var socialAddCart = function (obj) {
 	let btnType = "C";
 	let params = [];

+ 4 - 3
src/main/webapp/biz/goods.js

@@ -191,12 +191,13 @@ var fnCreateGoodsList = function(result, ithrCd, contentLoc, goodsUrl, lastPage,
 			}
 			if(videoGb=='Y'){
 				tag += '<iframe id="child" class="pd_mov" src="https://www.youtube.com/embed/'+videoUrl+'"></iframe>';
+				//tag += '<iframe id="pdThumbVideo" class="pd_mov" src="http://v.kr.kollus.com/164MyIiv?enable_initialize_focus=false&autoplay&mute&controls_activation=none" allow="fullscreen" allowFullScreen></iframe>';
 			}else{
-				tag += '<iframe id="child" class="pd_mov" src="http://v.kr.kollus.com/'+videoUrl+'?enable_initialize_focus=false&autoplay=true" frameborder="0" allowfullscreen></iframe>';
+				tag += '<iframe id="child" class="pd_mov" src="http://v.kr.kollus.com/'+videoUrl+'?enable_initialize_focus=false&autoplay&mute&controls_activation=none" allow="fullscreen" allowFullScreen></iframe>';
 			}
 		}
-		tag += '		<img class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'" data-img="'+goodsUrl+'/'+item.sysImgNm2+'">';
-		if(!gagajf.isNull(item.sizes) && gagajf.isNull(item.videoVal)){
+		tag += '		<img class=" vLHTC pd_img" src="'+goodsUrl+'/'+item.sysImgNm+'" data-img="'+goodsUrl+'/'+item.sysImgNm2+'" onerror="noneImg(this)">';
+		if(!gagajf.isNull(item.sizes)){
 			var sizeArr = item.sizes.split(",");
 			var minSize;
 			var maxSize;