Sfoglia il codice sorgente

Merge branch 'develop' into eskim

eskim 5 anni fa
parent
commit
b360d9ac5a
24 ha cambiato i file con 919 aggiunte e 608 eliminazioni
  1. 19 19
      src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java
  2. 352 228
      src/main/java/com/style24/front/biz/service/TsfOrderService.java
  3. 24 2
      src/main/java/com/style24/front/biz/web/TsfOrderController.java
  4. 4 2
      src/main/java/com/style24/persistence/domain/Goods.java
  5. 1 0
      src/main/java/com/style24/persistence/domain/Social.java
  6. 6 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  7. 50 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  8. 4 12
      src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml
  9. 12 5
      src/main/webapp/WEB-INF/views/mob/display/CategoryGoodsListFormMob.html
  10. 39 0
      src/main/webapp/WEB-INF/views/mob/error/PaymentFailMob.html
  11. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html
  12. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreCancelDetailFormMob.html
  13. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreExchangeDetailFormMob.html
  14. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCreReturnDetailFormMob.html
  15. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageExchangeFormMob.html
  16. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReturnFormMob.html
  17. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/NoMemberCancelFormMob.html
  18. 2 2
      src/main/webapp/WEB-INF/views/mob/mypage/NoMemberCreExchangeDetailFormMob.html
  19. 1 1
      src/main/webapp/WEB-INF/views/mob/mypage/NoMemberCreReturnDetailFormMob.html
  20. 3 10
      src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html
  21. 5 0
      src/main/webapp/WEB-INF/views/mob/planning/PlanningShotGuideFormMob.html
  22. 43 2
      src/main/webapp/WEB-INF/views/mob/social/SocialMainFormMob.html
  23. 278 281
      src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html
  24. 68 31
      src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

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

@@ -3,25 +3,7 @@ package com.style24.front.biz.dao;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.CardPromotion;
-import com.style24.persistence.domain.Cate4Srch;
-import com.style24.persistence.domain.Delivery;
-import com.style24.persistence.domain.Freegift;
-import com.style24.persistence.domain.Goods;
-import com.style24.persistence.domain.GoodsCompose;
-import com.style24.persistence.domain.GoodsDesc;
-import com.style24.persistence.domain.GoodsImg;
-import com.style24.persistence.domain.GoodsNotiInfo;
-import com.style24.persistence.domain.GoodsSafeNo;
-import com.style24.persistence.domain.GoodsSearch;
-import com.style24.persistence.domain.GoodsStock;
-import com.style24.persistence.domain.GoodsVideo;
-import com.style24.persistence.domain.GoodsViewHst;
-import com.style24.persistence.domain.Measurement;
-import com.style24.persistence.domain.Notice;
-import com.style24.persistence.domain.ReinboundInform;
-import com.style24.persistence.domain.SizeInfo;
-import com.style24.persistence.domain.Tmtb;
+import com.style24.persistence.domain.*;
 import com.style24.persistence.domain.searchengine.SearchEngine;
 
 /**
@@ -82,6 +64,24 @@ public interface TsfGoodsDao {
 	 */
 	Goods getGoodsInfo(Goods goods);
 
+	/**
+	 * 상품 간단 조회
+	 * @param goods
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 05. 24
+	 */
+	Goods getGoodsSimpleInfo(Goods goods);
+
+	/**
+	 * 세트상품 구성 상품 정보 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 05. 24
+	 */
+	Collection<Goods> getOrderGoodsOptionList(Goods param);
+
 	/**
 	 * 사은품 구성 상품 정보 조회
 	 * @param goods

+ 352 - 228
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -6,17 +6,14 @@ import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
+import java.util.*;
 
 import javax.net.ssl.HttpsURLConnection;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.style24.persistence.domain.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -38,16 +35,6 @@ import com.style24.front.biz.dao.TsfGoodsDao;
 import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.front.biz.dao.TsfRendererDao;
 import com.style24.front.support.security.session.TsfSession;
-import com.style24.persistence.domain.Cart;
-import com.style24.persistence.domain.Coupon;
-import com.style24.persistence.domain.Delivery;
-import com.style24.persistence.domain.GiftCard;
-import com.style24.persistence.domain.Goods;
-import com.style24.persistence.domain.GoodsStock;
-import com.style24.persistence.domain.KakaoPay;
-import com.style24.persistence.domain.NaverPay;
-import com.style24.persistence.domain.Order;
-import com.style24.persistence.domain.Payment;
 import com.usafe.guarantee.InsuranceInfo;
 import com.usafe.guarantee.InsuranceManager;
 
@@ -1170,64 +1157,56 @@ public class TsfOrderService {
 				sb.append("\t\t<id>").append(item.getGoodsCd()).append("</id>\n");								//<!-- 상품코드 -->
 				sb.append("\t\t<ecMallProductId>").append(item.getGoodsCd()).append("</ecMallProductId>\n");	//<!-- 상품코드 -->
 				sb.append("\t\t<name>").append("<![CDATA[").append(item.getGoodsNm()).append("]]>").append("</name>\n");	//<!-- 상품명 -->
-				sb.append("\t\t<basePrice>").append(item.getCurrPrice() + item.getOptAddPrice()).append("</basePrice>\n");		//<!-- 상품금액 -->
+				sb.append("\t\t<basePrice>").append(item.getCurrPrice()).append("</basePrice>\n");				//<!-- 상품금액 -->
 				// TODO http: 부분 운영 프로토콜 확인 후 수정 필요(운영 상품상세가 HTTPS일 경우 분기처리 필요(개발서버, 운영 구분))
 				sb.append("\t\t<infoUrl>").append("<![CDATA[https:").append(param.getGoodsUrl()).append(item.getGoodsCd()).append("]]>").append("</infoUrl>\n");	//<!-- 상품상세페이지 URL -->
 				sb.append("\t\t<imageUrl>").append("<![CDATA[https:").append(goodsImgUrl).append("/").append(item.getSysImgNm()).append("]]>").append("</imageUrl>\n");	//<!-- 상품원본이미지 URL -->
+
+				// 세트상품은 single quantity를 입력해야한다
+				/*sb.append("\t\t<single>\n");
+				sb.append("\t\t\t<quantity>").append(item.getGoodsQty()).append("</quantity>\n");
+				sb.append("\t\t</single>\n");*/
 				if(TscConstants.GoodsType.SET.value().equals(item.getGoodsType())) {		// 세트상품
 					// 구성상품 옵션정보 split
-					String[] itemNms  = item.getItemNm().split("!@!");		// 구성상품명
-					String[] optCds   = item.getOptCd().split(",");			// 옵션코드
-					String[] colorNms = item.getColorNm().split(",");			// 컬러명
-					String[] optCd1s  = item.getOptCd1().split(",");			// 칼라코드
-					String[] optCd2s  = item.getOptCd2().split(",");			// 사이즈
-					String[] itemCds  = item.getItemCd().split(",");			// 상품코드
-
-					// 상품명, 컬러, 사이즈 확인 ==> 20200517 정지혜과장님 확인 :: 상품명=25,OPT1=13,OPT2=12 글자. 넘어갈경우 뒤에 ".." 붙여서 글자수 맞출것.
-					// 상품명/컬러/사이즈 이므로 가운데 / 를 위해 24, 12, 12로 진행
-					for(int i = 0 ; i < itemNms.length ; i++) {
-						if(itemNms[i].length() > 50)	{itemNms[i]  = itemNms[i].substring(0, 47) + "..";}
-						/*if(optCd2s[i].length() > 12)	{optCd2s[i]  = optCd2s[i].substring(0, 9)  + "..";}
-						if(colorNms[i].length() > 12)	{colorNms[i] = colorNms[i].substring(0, 9) + "..";}*/
-
-						// 옵션 정보
-						sb.append("\t\t<option>\n");
-						sb.append("\t\t\t<quantity>").append(item.getGoodsQty()).append("</quantity>\n");	//<!-- 옵션수량-->
-						sb.append("\t\t\t<price>").append(item.getOptAddPrice()).append("</price>\n");		//<!-- 옵션금액 -->
-						sb.append("\t\t\t<manageCode>").append(itemCds[i]).append("_").append(optCds[i]).append("</manageCode>\n");	//<!-- 옵션관리코드 -->
-
-						// 구성상품코드
-						sb.append("\t\t\t<selectedItem>\n");
-						sb.append("\t\t\t\t<type>SELECT</type>\n");//<!-- 옵션유형 -->
-						sb.append("\t\t\t\t<name>상품</name>\n");//<!-- 옵션명 -->
-						sb.append("\t\t\t\t<value>\n");
-						sb.append("\t\t\t\t\t<id>").append(itemCds[i]).append("</id>\n");//<!-- 옵션 -->
-						sb.append("\t\t\t\t\t<text>").append(itemNms[i]).append("</text>\n");//<!-- 옵션명 -->
-						sb.append("\t\t\t\t</value>\n");
-						sb.append("\t\t\t</selectedItem>\n");
+					String[] optCds        = item.getOptCd().split(",");			// 옵션코드
+					String[] itemCds       = item.getItemCd().split(",");			// 상품코드
+
+					// 세트상품 manageCode 정렬 (optCd ASC)
+					Goods option = new Goods();
+					option.setArrGoodsCd(itemCds);
+					option.setSizeArr(optCds);
+					List<Goods> optionList = (ArrayList<Goods>) goodsDao.getOrderGoodsOptionList(option);
+
+					StringBuilder manageCode = new StringBuilder();
+					for(Goods opt : optionList) {
+						manageCode.append(opt.getOptCd());
+					}
 
-						// 칼라코드
-						sb.append("\t\t\t<selectedItem>\n");
-						sb.append("\t\t\t\t<type>SELECT</type>\n");//<!-- 옵션유형 -->
-						sb.append("\t\t\t\t<name>색상</name>\n");//<!-- 옵션명 -->
-						sb.append("\t\t\t\t<value>\n");
-						sb.append("\t\t\t\t\t<id>").append(optCd1s[i]).append("</id>\n");//<!-- 옵션 -->
-						sb.append("\t\t\t\t\t<text>").append(colorNms[i]).append("</text>\n");//<!-- 옵션명 -->
-						sb.append("\t\t\t\t</value>\n");
-						sb.append("\t\t\t</selectedItem>\n");
+					// 옵션 정보
+					sb.append("\t\t<option>\n");
+					sb.append("\t\t\t<quantity>").append(item.getGoodsQty()).append("</quantity>\n");    //<!-- 옵션수량-->
+					sb.append("\t\t\t<price>").append(item.getOptAddPrice()).append("</price>\n");			//<!-- 옵션금액 -->
+					sb.append("\t\t\t<manageCode>").append(manageCode).append("</manageCode>\n");	//<!-- 옵션관리코드 -->
+
+					// 칼라코드
+					/*for(int i = 0 ; i < itemNms.length ; i++) {
+						// 상품명, 컬러, 사이즈 확인 ==> 20200517 정지혜과장님 확인 :: 상품명=25,OPT1=13,OPT2=12 글자. 넘어갈경우 뒤에 ".." 붙여서 글자수 맞출것.
+						// 상품명/컬러/사이즈 이므로 가운데 / 를 위해 24, 12, 12로 진행
+						if(itemNms[i].length() > 24)	{itemNms[i]  = itemNms[i].substring(0, 21) + "..";}
+						if(optCd2s[i].length() > 12)	{optCd2s[i]  = optCd2s[i].substring(0, 9)  + "..";}
+						if(colorNms[i].length() > 12)	{colorNms[i] = colorNms[i].substring(0, 9) + "..";}
 
-						// 사이즈
 						sb.append("\t\t\t<selectedItem>\n");
-						sb.append("\t\t\t\t<type>SELECT</type>\n");//<!-- 옵션유형 -->
-						sb.append("\t\t\t\t<name>사이즈</name>\n");//<!-- 옵션명 -->
+						sb.append("\t\t\t\t<type>SELECT</type>\n");		//<!-- 옵션유형 -->
+						sb.append("\t\t\t\t<name>구성상품").append(i + 1).append("</name>\n");	//<!-- 옵션명 -->
 						sb.append("\t\t\t\t<value>\n");
-						sb.append("\t\t\t\t\t<id>").append(optCd2s[i]).append("</id>\n");//<!-- 옵션 -->
-						sb.append("\t\t\t\t\t<text>").append(optCd2s[i]).append("</text>\n");//<!-- 옵션명 -->
+						sb.append("\t\t\t\t\t<id>").append(itemCds[i]).append("/").append(optCds[i]).append("</id>\n");//<!-- 옵션 -->
+						sb.append("\t\t\t\t\t<text>").append(itemNms[i]).append("/").append(colorNms[i]).append("/").append(optCd2s[i]).append("</text>\n");//<!-- 옵션명 -->
 						sb.append("\t\t\t\t</value>\n");
 						sb.append("\t\t\t</selectedItem>\n");
+					}*/
 
-						sb.append("\t\t</option>\n");
-					}
+					sb.append("\t\t</option>\n");
 				} else if("Y".equals(item.getSelfGoodsYn())) {								// 세트상품 제외 자사상품
 					// 옵션 정보
 					sb.append("\t\t<option>\n");
@@ -1472,99 +1451,93 @@ public class TsfOrderService {
 
 			for (int i=0; i<goodsCdArr.length; i++) {
 				Order item = new Order();
-
-				item.setGoodsCd(goodsCdArr[i]);
-
-				// 9.상품 옵션
+				item.setGoodsCd(goodsCdArr[i]);		// 상품코드
 				String optionManageCode = coreOrderService.simpleDecode(optionManageCodesArr[i]);
-				item.setOptCd(optionManageCode);
-
-				// 주문 상품 옵션 정보 조회
-				GoodsStock opt = new GoodsStock();
-				opt.setGoodsCd(item.getGoodsCd());
-				opt.setOptCd(item.getOptCd());
-				opt = goodsDao.getGoodsStockInfo(opt);
-
-				// 주문 상품 정보 조회
-				Goods goods = new Goods();
-				goods.setGoodsCd(item.getGoodsCd());
-				goods.setOptCd(item.getOptCd());
-				goods.setColorCd(opt.getOptCd1());
-				goods.setFrontGb(TsfSession.getFrontGb());
-				goods.setSiteCd(TscConstants.Site.STYLE24.value());
-				goods.setAdminYn("Y");			// 상품 상태에 관계 없이 조회하기 위함
-				goods = goodsDao.getGoodsInfo(goods);
-
-				// 상품 상태 확인
-				String goodsStat = "";
-				if(TscConstants.GoodsStat.APPR.value().equals(goods.getGoodsStat())) {
-					goodsStat = "ON_SALE";		// 판매중
-				} else if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
-					goodsStat = "SOLD_OUT";		// 품절
-				} else {
-					goodsStat = "NOT_SALE";		// 주매불가
-				}
+				item.setOptCd(optionManageCode);	// 상품 옵션
+
+				// 이 포인트에서 세트상품, 일반 상품 분리 조회 필요 (재고 파악 로직이 다름)
+				Goods simpleInfo = new Goods();
+				simpleInfo.setGoodsCd(item.getGoodsCd());
+				simpleInfo = goodsDao.getGoodsSimpleInfo(simpleInfo);
+
+				// 세트상품일 경우
+				if(TscConstants.GoodsType.SET.value().equals(simpleInfo.getGoodsType())) {
+					// 주문 상품 정보 조회
+					Goods goods = new Goods();
+					goods.setGoodsCd(item.getGoodsCd());
+					goods.setOptCd(item.getOptCd());
+					goods.setFrontGb(TsfSession.getFrontGb());
+					goods.setSiteCd(TscConstants.Site.STYLE24.value());
+					goods.setAdminYn("Y");			// 상품 상태에 관계 없이 조회하기 위함
+					goods = goodsDao.getGoodsInfo(goods);
+
+					// 상품 상태 확인
+					String goodsStat = "";
+					if(TscConstants.GoodsStat.APPR.value().equals(goods.getGoodsStat())) {
+						goodsStat = "ON_SALE";		// 판매중
+					} else if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
+						goodsStat = "SOLD_OUT";		// 품절
+					} else {
+						goodsStat = "NOT_SALE";		// 구매불가
+					}
 
-				// 반송지 정보
-				Delivery rtnInfo = goodsDao.getGoodsDeliveryInfo(goods.getGoodsCd());
+					// 반송지 정보
+					Delivery rtnInfo = goodsDao.getGoodsDeliveryInfo(goods.getGoodsCd());
+
+					sb.append("\t<product>\n");
+					sb.append("\t\t<id>").append(item.getGoodsCd()).append("</id>\n");
+					sb.append("\t\t<merchantProductId>").append(item.getGoodsCd()).append("</merchantProductId>\n");
+					sb.append("\t\t<ecMallProductId>").append(item.getGoodsCd()).append("</ecMallProductId>\n");
+					sb.append("\t\t<name>").append(goods.getGoodsNm()).append("</name>\n");
+					sb.append("\t\t<status>").append(goodsStat).append("</status>\n");
+					sb.append("\t\t<basePrice>").append(goods.getCurrPrice()).append("</basePrice>\n");
+					// TODO http: 부분 운영 프로토콜 확인 후 수정 필요(운영 상품상세가 HTTPS일 경우 분기처리 필요(개발서버, 운영 구분))
+					sb.append("\t\t<infoUrl>").append("http:" + domain + "/goods/detail/form?goodsCd=" + goods.getGoodsCd()).append("</infoUrl>\n");
+					sb.append("\t\t<imageUrl>").append("http:" + goodsImgUrl + "/" + goods.getSysImgNm()).append("</imageUrl>\n");
+
+					// 12.반품주소
+					if (rtnInfo != null && rtnInfo.getRtnLocZipcode() != null && !"".equals(rtnInfo.getRtnLocZipcode())) {
+						// 2.1 반품정보
+						sb.append("\t\t<returnInfo>\n");
+						sb.append("\t\t\t<zipcode>").append(rtnInfo.getRtnLocZipcode()).append("</zipcode>\n");
+						sb.append("\t\t\t<address1>").append(rtnInfo.getRtnLocBaseAddr()).append("</address1>\n");
+						sb.append("\t\t\t<address2>").append(rtnInfo.getRtnLocDtlAddr()).append("</address2>\n");
+						sb.append("\t\t\t<sellername>").append(rtnInfo.getRtnLocNm()).append("</sellername>\n");
+						sb.append("\t\t\t<contact1>").append(rtnInfo.getRtnLocTelno()).append("</contact1>\n");
+						sb.append("\t\t</returnInfo>\n");
+
+						// 반품배송비, 교환배송비
+						sb.append("\t\t<returnShippingFee>").append(goods.getRtnDelvFee()).append("</returnShippingFee>\n");
+						sb.append("\t\t<exchangeShippingFee>").append(goods.getDelvFee() + goods.getRtnDelvFee()).append("</exchangeShippingFee>\n");
+					}
 
-				sb.append("\t<product>\n");
-				sb.append("\t\t<id>").append(goodsCdArr[i]).append("</id>\n");
-				sb.append("\t\t<merchantProductId>").append(goodsCdArr[i]).append("</merchantProductId>\n");
-				sb.append("\t\t<ecMallProductId>").append(goodsCdArr[i]).append("</ecMallProductId>\n");
-				sb.append("\t\t<name>").append(goods.getGoodsNm()).append("</name>\n");
-				sb.append("\t\t<status>").append(goodsStat).append("</status>\n");
-				sb.append("\t\t<basePrice>").append(goods.getCurrPrice() + opt.getAddPrice()).append("</basePrice>\n");
-				// TODO http: 부분 운영 프로토콜 확인 후 수정 필요(운영 상품상세가 HTTPS일 경우 분기처리 필요(개발서버, 운영 구분))
-				sb.append("\t\t<infoUrl>").append("http:" + domain + "/goods/detail/form?goodsCd=" + goods.getGoodsCd()).append("</infoUrl>\n");
-				sb.append("\t\t<imageUrl>").append("http:" + goodsImgUrl + "/" + goods.getSysImgNm()).append("</imageUrl>\n");
-
-				// 12.반품주소
-				if (rtnInfo != null && rtnInfo.getRtnLocZipcode() != null && !"".equals(rtnInfo.getRtnLocZipcode())) {
-					// 2.1 반품정보
-					sb.append("\t\t<returnInfo>\n");
-					sb.append("\t\t\t<zipcode>").append(rtnInfo.getRtnLocZipcode()).append("</zipcode>\n");
-					sb.append("\t\t\t<address1>").append(rtnInfo.getRtnLocBaseAddr()).append("</address1>\n");
-					sb.append("\t\t\t<address2>").append(rtnInfo.getRtnLocDtlAddr()).append("</address2>\n");
-					sb.append("\t\t\t<sellername>").append(rtnInfo.getRtnLocNm()).append("</sellername>\n");
-					sb.append("\t\t\t<contact1>").append(rtnInfo.getRtnLocTelno()).append("</contact1>\n");
-					sb.append("\t\t</returnInfo>\n");
-
-					// 반품배송비, 교환배송비
-					sb.append("\t\t<returnShippingFee>").append(goods.getRtnDelvFee()).append("</returnShippingFee>\n");
-					sb.append("\t\t<exchangeShippingFee>").append(goods.getDelvFee() + goods.getRtnDelvFee()).append("</exchangeShippingFee>\n");
-				}
+					// 옵션정보 지원여부 true
+					sb.append("\t\t<optionSupport>true</optionSupport>\n");
 
-				// 옵션정보 지원여부 true
-				sb.append("\t\t<optionSupport>true</optionSupport>\n");
-
-				// 상품 옵션 전체 정보 조회
-				Collection<GoodsStock> optList = goodsDao.getGoodsOptionInfoList(opt);
-
-				String[] colorNmList = new String[optList.size()];
-				String[] colorList = new String[optList.size()];
-				String[] sizeList = new String[optList.size()];
-				int count = 0;
-				for(GoodsStock optInfo : optList) {
-					colorNmList[count] = optInfo.getColorNm();
-					colorList[count] = optInfo.getOptCd1();
-					sizeList[count] = optInfo.getOptCd2();
-					count++;
-				}
+					// 옵션 정보
+					sb.append("\t\t<option>\n");
 
-				colorNmList = new HashSet<String>(Arrays.asList(colorNmList)).toArray(new String[0]);
-				colorList = new HashSet<String>(Arrays.asList(colorList)).toArray(new String[0]);
-				sizeList = new HashSet<String>(Arrays.asList(sizeList)).toArray(new String[0]);
+					// 세트상품 정보  getGoodsSetComposeList
+					goods.setSiteCd(TscConstants.Site.STYLE24.value());
+					Collection<GoodsCompose> compsInfoList = goodsDao.getGoodsSetComposeList(goods);
+					List<String> colorNmList = new ArrayList<String>();
+					List<String> colorList = new ArrayList<String>();
+					List<String> sizeList = new ArrayList<String>();
 
-				// 옵션 정보
-				sb.append("\t\t<option>\n");
+					// 옵션 아이템정보 구성상품
+					sb.append("\t\t\t<optionItem>\n");
+					sb.append("\t\t\t\t<type>SELECT</type>\n");
+					sb.append("\t\t\t\t<name>상품</name>\n");
+					for (GoodsCompose comps : compsInfoList) {
+						sb.append("\t\t\t\t<value>\n");
+						sb.append("\t\t\t\t\t<id>").append(comps.getGoodsCd()).append("</id>\n");
+						if(comps.getCompsGoodsNm().length() > 50)	{comps.setCompsGoodsNm(comps.getCompsGoodsNm().substring(0, 47) + "..");}
+						sb.append("\t\t\t\t\t<text>").append(comps.getCompsGoodsNm()).append("</text>\n");
+						sb.append("\t\t\t\t</value>\n");
+					}
+					sb.append("\t\t\t</optionItem>\n");
 
-				if(TscConstants.GoodsType.SET.value().equals(goods.getGoodsType())) {
-					// 세트상품 정보
-					// 세트 구성 상품 조회 후 로직 작성 예정.
-				} else if("Y".equals(goods.getSelfGoodsYn())) {
-					// 자사 일반 상품 정보
-					// 9.1 옵션 아이템정보 색상
+					// 옵션 아이템정보 색상
 					sb.append("\t\t\t<optionItem>\n");
 					sb.append("\t\t\t\t<type>SELECT</type>\n");
 					sb.append("\t\t\t\t<name>색상</name>\n");
@@ -1572,12 +1545,12 @@ public class TsfOrderService {
 					for (String color : colorList) {
 						sb.append("\t\t\t\t<value>\n");
 						sb.append("\t\t\t\t\t<id>").append(color).append("</id>\n");
-						sb.append("\t\t\t\t\t<text>").append(colorNmList[j++]).append("</text>\n");
+						sb.append("\t\t\t\t\t<text>").append(colorNmList.get(j++)).append("</text>\n");
 						sb.append("\t\t\t\t</value>\n");
 					}
 					sb.append("\t\t\t</optionItem>\n");
 
-					// 9.1 옵션 아이템정보 사이즈
+					// 옵션 아이템정보 사이즈
 					sb.append("\t\t\t<optionItem>\n");
 					sb.append("\t\t\t\t<type>SELECT</type>\n");
 					sb.append("\t\t\t\t<name>사이즈</name>\n");
@@ -1589,96 +1562,247 @@ public class TsfOrderService {
 					}
 					sb.append("\t\t\t</optionItem>\n");
 
-					// 9.3 옵션 옵션조합정보
-					for(GoodsStock optInfo : optList) {
-						sb.append("\t\t\t<combination>\n");
-						sb.append("\t\t\t\t<manageCode>").append(optInfo.getOptCd()).append("</manageCode>\n");
-						sb.append("\t\t\t\t<price>").append(optInfo.getAddPrice()).append("</price>\n");
-						sb.append("\t\t\t\t<stockQuantity>").append(optInfo.getStockQty()).append("</stockQuantity>\n");
-						sb.append("\t\t\t\t<status>true</status>\n");
-
-						// 9.3.1  옵션 옵션조합정보 색상
-						sb.append("\t\t\t\t<options>\n");
-						sb.append("\t\t\t\t\t<name>색상</name>\n");
-						sb.append("\t\t\t\t\t<id>").append(optInfo.getOptCd1()).append("</id>\n");
-						sb.append("\t\t\t\t</options>\n");
-
-						// 9.3.2  옵션 옵션조합정보 사이즈
-						sb.append("\t\t\t\t<options>\n");
-						sb.append("\t\t\t\t\t<name>사이즈</name>\n");
-						sb.append("\t\t\t\t\t<id>").append(optInfo.getOptCd2()).append("</id>\n");
-						sb.append("\t\t\t\t</options>\n");
-
-						sb.append("\t\t\t</combination>\n");
+					// 옵션 정보 전체 송부
+					for (GoodsCompose comps : compsInfoList) {
+
+					}
+
+
+
+					sb.append("\t\t</option>\n");
+
+					// 10. 배송정보조회
+					// 5.2.1 업체별 기본배송비, 무료배송비
+					String delvFeeCd = "";
+					if("Y".equals(goods.getSelfGoodsYn())) {
+						delvFeeCd = "WMS";
+					} else {
+						delvFeeCd = goods.getDelvFeeCd();
+					}
+					String delvFeeCrite = "CHARGE";
+					int delvFee = goods.getDelvFee();
+					String feePayType = "PREPAYED";
+					// 배송비 조건
+					if(TscConstants.DelvFeeCrite.NORMAL.value().equals(goods.getDelvFeeCrite())) {
+						delvFeeCrite = "CONDITIONAL_FREE";		// 조건부 무료(배송비 조건이 무료이거나 배송 방법이 착불일때만 배송비는 0원으로 변경)
+					} else if(TscConstants.DelvFeeCrite.FREE.value().equals(goods.getDelvFeeCrite())) {
+						delvFeeCrite = "FREE";
+						feePayType = "FREE";
+						delvFee = 0;
+					}
+
+					sb.append("\t\t<shippingPolicy>\n");
+					sb.append("\t\t\t<groupId>").append(delvFeeCd).append("</groupId>\n");
+					sb.append("\t\t\t<method>").append("DELIVERY").append("</method>\n");
+					sb.append("\t\t\t<feeType>").append(delvFeeCrite).append("</feeType>\n");
+					sb.append("\t\t\t<feePayType>").append(feePayType).append("</feePayType>\n");
+					sb.append("\t\t\t<feePrice>").append(delvFee).append("</feePrice>\n");
+					if(!"FREE".equals(delvFeeCrite)) {
+						sb.append("\t\t\t<conditionalFree>\n");
+						sb.append("\t\t\t\t<basePrice>").append(goods.getMinOrdAmt()).append("</basePrice>\n");
+						sb.append("\t\t\t</conditionalFree>\n");
 					}
+
+					sb.append("\t\t</shippingPolicy>\n");
+
+					sb.append("\t</product>\n");
 				} else {
-					// 입점업체 상품 정보
-					// 9.1 옵션 아이템정보 색상
-					sb.append("\t\t\t<optionItem>\n");
-					sb.append("\t\t\t\t<type>SELECT</type>\n");
-					sb.append("\t\t\t\t<name>옵션</name>\n");
-					for(GoodsStock optInfo : optList) {
-						sb.append("\t\t\t\t<value>\n");
-						sb.append("\t\t\t\t\t<id>").append(optInfo.getOptCd()).append("</id>\n");
-						sb.append("\t\t\t\t\t<text>").append(optInfo.getOptCd1()).append("/").append(optInfo.getOptCd2()).append("</text>\n");
-						sb.append("\t\t\t\t</value>\n");
+					// 주문 상품 옵션 정보 조회
+					GoodsStock opt = new GoodsStock();
+					opt.setGoodsCd(item.getGoodsCd());
+					opt.setOptCd(item.getOptCd());
+					opt = goodsDao.getGoodsStockInfo(opt);
+
+					// 주문 상품 정보 조회
+					Goods goods = new Goods();
+					goods.setGoodsCd(item.getGoodsCd());
+					goods.setOptCd(item.getOptCd());
+					goods.setColorCd(opt.getOptCd1());
+					goods.setFrontGb(TsfSession.getFrontGb());
+					goods.setSiteCd(TscConstants.Site.STYLE24.value());
+					goods.setAdminYn("Y");			// 상품 상태에 관계 없이 조회하기 위함
+					goods = goodsDao.getGoodsInfo(goods);
+
+					// 상품 상태 확인
+					String goodsStat = "";
+					if(TscConstants.GoodsStat.APPR.value().equals(goods.getGoodsStat())) {
+						goodsStat = "ON_SALE";		// 판매중
+					} else if (TscConstants.GoodsStat.SOLDOUT.value().equals(goods.getGoodsStat())) {
+						goodsStat = "SOLD_OUT";		// 품절
+					} else {
+						goodsStat = "NOT_SALE";		// 구매불가
 					}
-					sb.append("\t\t\t</optionItem>\n");
 
-					// 9.3 옵션 옵션조합정보
+					// 반송지 정보
+					Delivery rtnInfo = goodsDao.getGoodsDeliveryInfo(goods.getGoodsCd());
+
+					sb.append("\t<product>\n");
+					sb.append("\t\t<id>").append(goodsCdArr[i]).append("</id>\n");
+					sb.append("\t\t<merchantProductId>").append(goodsCdArr[i]).append("</merchantProductId>\n");
+					sb.append("\t\t<ecMallProductId>").append(goodsCdArr[i]).append("</ecMallProductId>\n");
+					sb.append("\t\t<name>").append(goods.getGoodsNm()).append("</name>\n");
+					sb.append("\t\t<status>").append(goodsStat).append("</status>\n");
+					sb.append("\t\t<basePrice>").append(goods.getCurrPrice()).append("</basePrice>\n");
+					// TODO http: 부분 운영 프로토콜 확인 후 수정 필요(운영 상품상세가 HTTPS일 경우 분기처리 필요(개발서버, 운영 구분))
+					sb.append("\t\t<infoUrl>").append("http:" + domain + "/goods/detail/form?goodsCd=" + goods.getGoodsCd()).append("</infoUrl>\n");
+					sb.append("\t\t<imageUrl>").append("http:" + goodsImgUrl + "/" + goods.getSysImgNm()).append("</imageUrl>\n");
+
+					// 12.반품주소
+					if (rtnInfo != null && rtnInfo.getRtnLocZipcode() != null && !"".equals(rtnInfo.getRtnLocZipcode())) {
+						// 2.1 반품정보
+						sb.append("\t\t<returnInfo>\n");
+						sb.append("\t\t\t<zipcode>").append(rtnInfo.getRtnLocZipcode()).append("</zipcode>\n");
+						sb.append("\t\t\t<address1>").append(rtnInfo.getRtnLocBaseAddr()).append("</address1>\n");
+						sb.append("\t\t\t<address2>").append(rtnInfo.getRtnLocDtlAddr()).append("</address2>\n");
+						sb.append("\t\t\t<sellername>").append(rtnInfo.getRtnLocNm()).append("</sellername>\n");
+						sb.append("\t\t\t<contact1>").append(rtnInfo.getRtnLocTelno()).append("</contact1>\n");
+						sb.append("\t\t</returnInfo>\n");
+
+						// 반품배송비, 교환배송비
+						sb.append("\t\t<returnShippingFee>").append(goods.getRtnDelvFee()).append("</returnShippingFee>\n");
+						sb.append("\t\t<exchangeShippingFee>").append(goods.getDelvFee() + goods.getRtnDelvFee()).append("</exchangeShippingFee>\n");
+					}
+
+					// 옵션정보 지원여부 true
+					sb.append("\t\t<optionSupport>true</optionSupport>\n");
+
+					// 옵션 정보
+					sb.append("\t\t<option>\n");
+
+					// 상품 옵션 전체 정보 조회
+					Collection<GoodsStock> optList = goodsDao.getGoodsOptionInfoList(opt);
+
+					String[] colorNmList = new String[optList.size()];
+					String[] colorList = new String[optList.size()];
+					String[] sizeList = new String[optList.size()];
+					int count = 0;
+
+					// 중복제거
 					for(GoodsStock optInfo : optList) {
-						sb.append("\t\t\t<combination>\n");
-						sb.append("\t\t\t\t<manageCode>").append(optInfo.getOptCd()).append("</manageCode>\n");
-						sb.append("\t\t\t\t<price>").append(optInfo.getAddPrice()).append("</price>\n");
-						sb.append("\t\t\t\t<stockQuantity>").append(optInfo.getStockQty()).append("</stockQuantity>\n");
-						sb.append("\t\t\t\t<status>true</status>\n");
-
-						// 9.3.1  옵션 옵션조합정보 색상
-						sb.append("\t\t\t\t<options>\n");
-						sb.append("\t\t\t\t\t<name>옵션</name>\n");
-						sb.append("\t\t\t\t\t<id>").append(optInfo.getOptCd()).append("</id>\n");
-						sb.append("\t\t\t\t</options>\n");
-						sb.append("\t\t\t</combination>\n");
+						colorNmList[count] = optInfo.getColorNm();
+						colorList[count] = optInfo.getOptCd1();
+						sizeList[count] = optInfo.getOptCd2();
+						count++;
+					}
+					colorNmList = new HashSet<String>(Arrays.asList(colorNmList)).toArray(new String[0]);
+					colorList = new HashSet<String>(Arrays.asList(colorList)).toArray(new String[0]);
+					sizeList = new HashSet<String>(Arrays.asList(sizeList)).toArray(new String[0]);
+
+					if("Y".equals(goods.getSelfGoodsYn())) {
+						// 자사 일반 상품 정보
+						// 옵션 아이템정보 색상
+						sb.append("\t\t\t<optionItem>\n");
+						sb.append("\t\t\t\t<type>SELECT</type>\n");
+						sb.append("\t\t\t\t<name>색상</name>\n");
+						int j = 0;
+						for (String color : colorList) {
+							sb.append("\t\t\t\t<value>\n");
+							sb.append("\t\t\t\t\t<id>").append(color).append("</id>\n");
+							sb.append("\t\t\t\t\t<text>").append(colorNmList[j++]).append("</text>\n");
+							sb.append("\t\t\t\t</value>\n");
+						}
+						sb.append("\t\t\t</optionItem>\n");
+
+						// 옵션 아이템정보 사이즈
+						sb.append("\t\t\t<optionItem>\n");
+						sb.append("\t\t\t\t<type>SELECT</type>\n");
+						sb.append("\t\t\t\t<name>사이즈</name>\n");
+						for (String size : sizeList) {
+							sb.append("\t\t\t\t<value>\n");
+							sb.append("\t\t\t\t\t<id>").append(size).append("</id>\n");
+							sb.append("\t\t\t\t\t<text>").append(size).append("</text>\n");
+							sb.append("\t\t\t\t</value>\n");
+						}
+						sb.append("\t\t\t</optionItem>\n");
+
+						// 옵션 옵션조합정보
+						for(GoodsStock optInfo : optList) {
+							sb.append("\t\t\t<combination>\n");
+							sb.append("\t\t\t\t<manageCode>").append(optInfo.getOptCd()).append("</manageCode>\n");
+							sb.append("\t\t\t\t<price>").append(optInfo.getAddPrice()).append("</price>\n");
+							sb.append("\t\t\t\t<stockQuantity>").append(optInfo.getStockQty()).append("</stockQuantity>\n");
+							sb.append("\t\t\t\t<status>true</status>\n");
+
+							// 옵션 옵션조합정보 색상
+							sb.append("\t\t\t\t<options>\n");
+							sb.append("\t\t\t\t\t<name>색상</name>\n");
+							sb.append("\t\t\t\t\t<id>").append(optInfo.getOptCd1()).append("</id>\n");
+							sb.append("\t\t\t\t</options>\n");
+
+							// 옵션 옵션조합정보 사이즈
+							sb.append("\t\t\t\t<options>\n");
+							sb.append("\t\t\t\t\t<name>사이즈</name>\n");
+							sb.append("\t\t\t\t\t<id>").append(optInfo.getOptCd2()).append("</id>\n");
+							sb.append("\t\t\t\t</options>\n");
+
+							sb.append("\t\t\t</combination>\n");
+						}
+					} else {// 입점업체 상품 정보
+						// 옵션 아이템정보 색상
+						sb.append("\t\t\t<optionItem>\n");
+						sb.append("\t\t\t\t<type>SELECT</type>\n");
+						sb.append("\t\t\t\t<name>옵션</name>\n");
+						for(GoodsStock optInfo : optList) {
+							sb.append("\t\t\t\t<value>\n");
+							sb.append("\t\t\t\t\t<id>").append(optInfo.getOptCd()).append("</id>\n");
+							sb.append("\t\t\t\t\t<text>").append(optInfo.getOptCd1()).append("/").append(optInfo.getOptCd2()).append("</text>\n");
+							sb.append("\t\t\t\t</value>\n");
+						}
+						sb.append("\t\t\t</optionItem>\n");
+
+						// 옵션 옵션조합정보
+						for(GoodsStock optInfo : optList) {
+							sb.append("\t\t\t<combination>\n");
+							sb.append("\t\t\t\t<manageCode>").append(optInfo.getOptCd()).append("</manageCode>\n");
+							sb.append("\t\t\t\t<price>").append(optInfo.getAddPrice()).append("</price>\n");
+							sb.append("\t\t\t\t<stockQuantity>").append(optInfo.getStockQty()).append("</stockQuantity>\n");
+							sb.append("\t\t\t\t<status>true</status>\n");
+							sb.append("\t\t\t\t<options>\n");
+							sb.append("\t\t\t\t\t<name>옵션</name>\n");
+							sb.append("\t\t\t\t\t<id>").append(optInfo.getOptCd()).append("</id>\n");
+							sb.append("\t\t\t\t</options>\n");
+							sb.append("\t\t\t</combination>\n");
+						}
 					}
-				}
 
-				sb.append("\t\t</option>\n");
+					sb.append("\t\t</option>\n");
 
-				// 10. 배송정보조회
-				// 5.2.1 업체별 기본배송비, 무료배송비
-				String delvFeeCd = "";
-				if("Y".equals(goods.getSelfGoodsYn())) {
-					delvFeeCd = "WMS";
-				} else {
-					delvFeeCd = goods.getDelvFeeCd();
-				}
-				String delvFeeCrite = "CHARGE";
-				int delvFee = goods.getDelvFee();
-				String feePayType = "PREPAYED";
-				// 배송비 조건
-				if(TscConstants.DelvFeeCrite.NORMAL.value().equals(goods.getDelvFeeCrite())) {
-					delvFeeCrite = "CONDITIONAL_FREE";		// 조건부 무료(배송비 조건이 무료이거나 배송 방법이 착불일때만 배송비는 0원으로 변경)
-				} else if(TscConstants.DelvFeeCrite.FREE.value().equals(goods.getDelvFeeCrite())) {
-					delvFeeCrite = "FREE";
-					feePayType = "FREE";
-					delvFee = 0;
-				}
+					// 10. 배송정보조회
+					// 5.2.1 업체별 기본배송비, 무료배송비
+					String delvFeeCd = "";
+					if("Y".equals(goods.getSelfGoodsYn())) {
+						delvFeeCd = "WMS";
+					} else {
+						delvFeeCd = goods.getDelvFeeCd();
+					}
+					String delvFeeCrite = "CHARGE";
+					int delvFee = goods.getDelvFee();
+					String feePayType = "PREPAYED";
+					// 배송비 조건
+					if(TscConstants.DelvFeeCrite.NORMAL.value().equals(goods.getDelvFeeCrite())) {
+						delvFeeCrite = "CONDITIONAL_FREE";		// 조건부 무료(배송비 조건이 무료이거나 배송 방법이 착불일때만 배송비는 0원으로 변경)
+					} else if(TscConstants.DelvFeeCrite.FREE.value().equals(goods.getDelvFeeCrite())) {
+						delvFeeCrite = "FREE";
+						feePayType = "FREE";
+						delvFee = 0;
+					}
 
-				sb.append("\t\t<shippingPolicy>\n");
-				sb.append("\t\t\t<groupId>").append(delvFeeCd).append("</groupId>\n");
-				sb.append("\t\t\t<method>").append("DELIVERY").append("</method>\n");
-				sb.append("\t\t\t<feeType>").append(delvFeeCrite).append("</feeType>\n");
-				sb.append("\t\t\t<feePayType>").append(feePayType).append("</feePayType>\n");
-				sb.append("\t\t\t<feePrice>").append(delvFee).append("</feePrice>\n");
-				if(!"FREE".equals(delvFeeCrite)) {
-					sb.append("\t\t\t<conditionalFree>\n");
-					sb.append("\t\t\t\t<basePrice>").append(goods.getMinOrdAmt()).append("</basePrice>\n");
-					sb.append("\t\t\t</conditionalFree>\n");
-				}
+					sb.append("\t\t<shippingPolicy>\n");
+					sb.append("\t\t\t<groupId>").append(delvFeeCd).append("</groupId>\n");
+					sb.append("\t\t\t<method>").append("DELIVERY").append("</method>\n");
+					sb.append("\t\t\t<feeType>").append(delvFeeCrite).append("</feeType>\n");
+					sb.append("\t\t\t<feePayType>").append(feePayType).append("</feePayType>\n");
+					sb.append("\t\t\t<feePrice>").append(delvFee).append("</feePrice>\n");
+					if(!"FREE".equals(delvFeeCrite)) {
+						sb.append("\t\t\t<conditionalFree>\n");
+						sb.append("\t\t\t\t<basePrice>").append(goods.getMinOrdAmt()).append("</basePrice>\n");
+						sb.append("\t\t\t</conditionalFree>\n");
+					}
 
-				sb.append("\t\t</shippingPolicy>\n");
+					sb.append("\t\t</shippingPolicy>\n");
 
-				sb.append("\t</product>\n");
+					sb.append("\t</product>\n");
+				}
 			}
 			sb.append("</products>\n");
 			//for end

+ 24 - 2
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -1276,11 +1276,17 @@ public class TsfOrderController extends TsfBaseController {
 	 */
 	@RequestMapping(value = "/naver/payment/request")
 	@ResponseBody
-	public ModelAndView naverPaymentRequest(@RequestParam(value = "paymentId", required = false) String paymentId) {
+	public ModelAndView naverPaymentRequest(@RequestParam(value = "paymentId", required = false) String paymentId, @RequestParam(value = "resultCode", required = false) String resultCode) {
 		ModelAndView mav = new ModelAndView();
 		mav.addObject("paymentId", paymentId);
 		mav.addObject("ordNo", TsfSession.getAttribute("ordNo"));
-		mav.setViewName(super.getDeviceViewName("pg/NaverPaymentRequest"));
+
+		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb()) && StringUtils.isNotBlank(resultCode) && "Fail".equals(resultCode)) {
+			mav.setViewName(super.getDeviceViewName("error/PaymentFail"));
+		} else {
+			mav.setViewName(super.getDeviceViewName("pg/NaverPaymentRequest"));
+		}
+
 		return mav;
 	}
 
@@ -1455,4 +1461,20 @@ public class TsfOrderController extends TsfBaseController {
 		
 		return mav;
 	}
+
+	/**
+	 * 결제 실패 화면
+	 *
+	 * @return ModelAndView
+	 * @author card007
+	 * @since 2021. 05. 25
+	 */
+	@RequestMapping(value = "/payment/fail")
+	public ModelAndView paymentFail() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName(super.getDeviceViewName("error/PaymentFail"));
+
+		return mav;
+	}
 }

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

@@ -172,6 +172,8 @@ public class Goods extends TscBaseDomain {
 	private String optCd1Nm;
 	private int qty;				// 세트 상품 구성 수량
 	private String itemCd;			// 단품코드
+	private String itemNm;			// 단품명
+	private String itemStockQty;	// 단품 재고 수량(1,2,1,0)
 
 	private String mobileYn;
 	private String delvResDt;		// 예약판매 출고예정일
@@ -201,9 +203,9 @@ public class Goods extends TscBaseDomain {
 	private String[] arrGoodsCd;		// 상품코드
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private Integer[] arrTmtbSq;			// 다다익선 번호
+	private Integer[] arrTmtbSq;		// 다다익선 번호
 
-	private String goodsSql;	// 오늘본상품SQL
+	private String goodsSql;		// 오늘본상품SQL
 
 	private String likeIt;			// 위시리스트에담긴상품
 	private String videoVal;

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

@@ -66,6 +66,7 @@ public class Social extends TscBaseDomain{
 		private String optCd;
 		private String goodsType;
 		private String brandGroupNm;	//브랜드 그룹명
+		private String compsGoodsCd;
 		
 		
 		// 고객

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

@@ -937,8 +937,8 @@
 	<select id="selectCartGoodsColorList" parameterType="Cart" resultType="Cart">
 		/* TsfCart.selectCartGoodsColorList : 장바구니 상품 컬러 정보 조회 */
 		SELECT A.*
-		     , IFNULL((CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = A.CART_OPT_CD1)
-		                    ELSE A.CART_OPT_CD1 END), A.CART_OPT_CD1) AS CART_COLOR_NM
+		     , IFNULL(CASE WHEN SELF_GOODS_YN = 'Y' THEN C.COLOR_KNM
+		                   ELSE A.CART_OPT_CD1 END, A.CART_OPT_CD1) AS CART_COLOR_NM
 		FROM   (SELECT ST.GOODS_CD
 		             , MAX(CASE WHEN SELF_GOODS_YN = 'Y' THEN (SELECT COLOR_KNM FROM TB_COLOR WHERE COLOR_CD = ST.OPT_CD1)
 		                        ELSE ST.OPT_CD1 END) AS COLOR_NM
@@ -969,7 +969,10 @@
 		                , ST.OPT_CD1
 		                , G.SELF_GOODS_YN
 		                , G.MAIN_COLOR_CD ) A
-		ORDER  BY DISP_ORD
+		LEFT   OUTER JOIN TB_COLOR C
+		ON     A.CART_OPT_CD1 = C.COLOR_CD
+		AND    C.USE_YN = 'Y'
+		ORDER  BY NULLIF(C.COLOR_KNM, A.CART_OPT_CD1)
 	</select>
 
 	<!-- 장바구니 상품 사이즈 정보 조회 -->

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

@@ -522,7 +522,20 @@
 		</if>
 		LIMIT 200
 	</select>
-	
+
+	<!-- 상품 정보 조회 -->
+	<select id="getGoodsSimpleInfo" parameterType="Goods" resultType="Goods">
+		/* TsfGoods.getGoodsSimpleInfo */
+		SELECT GOODS_CD
+		     , GOODS_TYPE
+		     , CASE WHEN NOW() BETWEEN SELL_STDT AND SELL_EDDT THEN GOODS_STAT
+		            ELSE 'G008_95' END AS GOODS_STAT
+		     , SELF_GOODS_YN
+		     , SELF_MALL_YN
+		FROM   TB_GOODS
+		WHERE  GOODS_CD = #{goodsCd}
+	</select>
+
 	<!-- 구성 상품 정보 -->
 	<select id="getGoodsCompsInfo" parameterType="Goods" resultType="Goods">
 		/* TsfGoods.getGoodsCompsInfo */
@@ -560,6 +573,34 @@
 		 WHERE VS.GOODS_CD = #{goodsCd}
 		   AND VS.OPT_CD = #{optCd}
 	</select>
+
+	<!-- 주문 상품 옵션 정보 조회 -->
+	<select id="getOrderGoodsOptionList" parameterType="GoodsStock" resultType="GoodsStock">
+		/* TsfGoods.getOrderGoodsOptionList */
+		SELECT G.GOODS_CD
+		     , G.GOODS_STAT
+		     , G.GOODS_NM
+		     , VS.OPT_CD
+		     , VS.OPT_CD1
+		     , VS.OPT_CD2
+		     , CASE WHEN VS.SOLDOUT_YN = 'Y' THEN 0 ELSE VS.CURR_STOCK_QTY END AS STOCK_QTY
+		     , IFNULL((SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(VS.OPT_CD1,'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y'), VS.OPT_CD1) AS COLOR_NM
+		FROM   TB_GOODS G
+		INNER  JOIN VW_STOCK VS
+		ON     G.GOODS_CD = VS.GOODS_CD
+		WHERE  1=1
+		AND    VS.GOODS_CD IN
+		<foreach collection="arrGoodsCd" item="item" index="index"  open="(" close=")" separator=",">
+			#{item}
+		</foreach>
+		<if test="sizeArr != null and sizeArr.length > 0">
+		AND    VS.OPT_CD IN
+			<foreach collection="sizeArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		ORDER  BY VS.OPT_CD ASC
+	</select>
 	
 	<!-- 무이자 혜택안내 -->
 	<select id="getCardPromotionList" parameterType="CardPromotion" resultType="CardPromotion">
@@ -687,7 +728,8 @@
 	<!-- 상품  배송안내정보  -->
 	<select id="getGoodsDeliveryInfo"  parameterType="String" resultType="Delivery">
 		/* TsfGoods.getGoodsDeliveryInfo */
-		SELECT G.GOODS_CD 
+		SELECT G.GOODS_CD
+		     , G.GOODS_TYPE
 		     , A.DELV_FEE_CD 
 		     , A.SUPPLY_COMP_CD 
 		     , A.DELV_FEE 
@@ -762,6 +804,12 @@
 		                                 AND GS.STOCK_QTY > 0
 		    WHERE NOW() BETWEEN A.TMTB_ST_DT AND A.TMTB_ED_DT
 		    AND A.TMTB_STAT ='G232_11'
+		    <if test="arrTmtbSq != null and arrTmtbSq.length > 0">
+		    AND A.TMTB_SQ IN
+				<foreach collection="arrTmtbSq" item="item" index="index"  open="(" close=")" separator=",">
+			#{item}
+				</foreach>
+			</if>
 		     <![CDATA[
 		    AND A.TMTB_SQ IN (SELECT TMTB_SQ FROM TB_TMTB_APPLY_GOODS WHERE GOODS_CD = #{goodsCd} AND DEL_YN = 'N' AND GOODS_GB IN ( 'G800_10', 'G800_20')) -- 기본과 적용상품
 		    AND A.TMTB_SQ NOT IN (SELECT TMTB_SQ FROM TB_TMTB_APPLY_GOODS WHERE GOODS_CD = #{goodsCd} AND DEL_YN = 'N' AND GOODS_GB = 'G800_30') -- 제외상품

+ 4 - 12
src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml

@@ -102,9 +102,10 @@
 		     --  , COMPS_GOODS_CD
 		         , SUM(case WHEN SOLDOUT_YN = 'Y' THEN 0
 		              ELSE CURR_STOCK_QTY END ) AS STOCK_QTY_SUM
-		           , GROUP_CONCAT(DISTINCT CONCAT(OPT_CD ,':' ,CASE WHEN SOLDOUT_YN = 'Y' THEN 'Y'
+		         , GROUP_CONCAT(DISTINCT OPT_CD) AS OPT_CD
+		           <!-- , GROUP_CONCAT(DISTINCT CONCAT(OPT_CD ,':' ,CASE WHEN SOLDOUT_YN = 'Y' THEN 'Y'
 		                          ELSE CASE WHEN CURR_STOCK_QTY > 0 THEN 'N' ELSE 'Y' END
-		                          END) ) AS OPT_CD
+		                          END) ) AS OPT_CD -->
 		    FROM (
 		             SELECT G.GOODS_CD
 		                  , GC.COMPS_GOODS_CD
@@ -124,16 +125,6 @@
 		         ) Z
 		    WHERE  NUMB = 1
 		    GROUP BY GOODS_CD
-		   <!--  SELECT G.GOODS_CD
-		         , SUM(caSE WHEN S.SOLDOUT_YN = 'Y' THEN 0
-		                    ELSE S.CURR_STOCK_QTY - S.BASE_STOCK_QTY END ) AS STOCK_QTY_SUM
-		         , MIN(CASE WHEN S.SOLDOUT_YN = 'N' THEN S.OPT_CD ELSE 'XXX' END) AS OPT_CD 
-		    FROM   TAB_GOODS G
-		         , VW_STOCK_COMPOSE S
-		    WHERE  G.GOODS_CD = S.GOODS_CD
-		    AND    G.GOODS_TYPE != 'G056_N'
-		    AND    S.DISP_YN = 'Y' /*노출하는상품만*/
-		    GROUP  BY G.GOODS_CD		 -->
 		    )
 		SELECT G.BRAND_GROUP_NM
 		     , G.GOODS_CD
@@ -152,6 +143,7 @@
 		     , S.STOCK_QTY_SUM
 		     , S.OPT_CD
 		     , G.MIN_ORD_QTY 
+		     , (SELECT GROUP_CONCAT(COMPS_GOODS_CD)  FROM TB_GOODS_COMPOSE WHERE GOODS_CD = G.GOODS_CD) AS COMPS_GOODS_CD  
 		     <choose>
 		         <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
 		     , IF(W.GOODS_CD IS NULL,'','likeit')                                                           AS LIKE_IT       /*위시리스트담긴상품*/

+ 12 - 5
src/main/webapp/WEB-INF/views/mob/display/CategoryGoodsListFormMob.html

@@ -63,15 +63,22 @@
 					</div>
 
 					<div id="infiniteContainer">
-						<div id="listBoxOuter" class="itemsGrp">
-							<ul class="productlist quarter" >
+						<div id="listBoxOuter">
+							<ul id="listBox" class="itemsGrp">
 							</ul>
 						</div>
 					</div>
 
-					<div class="itemsGrp" id="listBox"> <!-- itemsGrp rank hot deal -->
+<!--					<div id="infiniteContainer">-->
+<!--						<div id="listBoxOuter" class="itemsGrp">-->
+<!--							<ul class="productlist quarter" >-->
+<!--							</ul>-->
+<!--						</div>-->
+<!--					</div>-->
 
-					</div>
+<!--					<div class="itemsGrp" id="listBox"> &lt;!&ndash; itemsGrp rank hot deal &ndash;&gt;-->
+
+<!--					</div>-->
 					<div class="list_last" id="endPage" style="display:none;">마지막페이지 입니다.</div>
 				</div>
 				<!-- //상품리스트 -->
@@ -1075,7 +1082,7 @@
 					// fnCategoryGoodsInfiniteScrollInit();
 					console.log('here*'+historyData.scroll);
 					// $('html, body').animate({scrollTop: $('#'+scrollLoc).offset().top}, 'slow');
-					$('html, body').animate({scrollTop: historyData.scroll}, 'slow');
+					// $('html, body').animate({scrollTop: historyData.scroll}, 'slow');
 					fnGoodsListSearch();
 				}
 			}else{

File diff suppressed because it is too large
+ 39 - 0
src/main/webapp/WEB-INF/views/mob/error/PaymentFailMob.html


+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/MypageCancelFormMob.html

@@ -43,7 +43,7 @@
 					<th:block th:if="${cancelList.cancelList}" th:each="cancel, status : ${cancelList.cancelList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 						<div class="goods_section">
 							<div class="goods_detail">
-								<a href="">
+								<a href="javascript:void(0)" th:attr="goodsCd=${cancel.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 									<div class="thumb_box">
 										<img th:src="${imageUrl + '/' + cancel.sysImgNm}" width="100%" alt="">
 									</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/MypageCreCancelDetailFormMob.html

@@ -44,7 +44,7 @@
 							<p class="dlvr_desc" 	th:text="|${cancelDtl.chgDate} ${cancelDtl.chgTime}|"></p>
 						</div>
 						<div class="goods_detail">
-							<a href="">
+							<a href="javascript:void(0)" th:attr="goodsCd=${cancelDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 								<div class="thumb_box">
 									<img th:src="${imageUrl + '/' + cancelDtl.sysImgNm}" width="100%" alt="">
 								</div>

+ 2 - 2
src/main/webapp/WEB-INF/views/mob/mypage/MypageCreExchangeDetailFormMob.html

@@ -51,7 +51,7 @@
 							<p class="dlvr_desc" th:text="|${exchangeDtl.chgDate} ${exchangeDtl.chgTime}|"></p>
 						</div>
 						<div class="goods_detail">
-							<a href="">
+							<a href="javascript:void(0)" th:attr="goodsCd=${exchangeDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 								<div class="thumb_box">
 									<img th:src="${imageUrl + '/' + exchangeDtl.sysImgNm}" width="100%" alt="">
 								</div>
@@ -62,7 +62,7 @@
 											<div class="badge_wrap">
 												<em class="tag primary" th:if="${exchangeDtl.shotDelvYn == 'Y'}">총알배송</em>
 												<em class="tag" 		th:if="${exchangeDtl.shotDelvYn == 'N' and exchangeDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
-												<em class="tag" 		th:if="${exchangeDtl.selfGoodsYn == 'N'}">업체직배송</span>
+												<em class="tag" 		th:if="${exchangeDtl.selfGoodsYn == 'N'}">업체직배송</em>
 											</div>
 										</div>
 										<div class="name" th:text="${exchangeDtl.goodsNm}"></div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/MypageCreReturnDetailFormMob.html

@@ -60,7 +60,7 @@
 											<div class="badge_wrap">
 												<em class="tag primary" th:if="${returnDtl.shotDelvYn == 'Y'}">총알배송</em>
 												<em class="tag" 		th:if="${returnDtl.shotDelvYn == 'N' and returnDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
-												<em class="tag" 		th:if="${returnDtl.selfGoodsYn == 'N'}">업체직배송</span>
+												<em class="tag" 		th:if="${returnDtl.selfGoodsYn == 'N'}">업체직배송</em>
 											</div>
 										</div>
 										<div class="name" th:text="${returnDtl.goodsNm}"></div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/MypageExchangeFormMob.html

@@ -40,7 +40,7 @@
 					<th:block th:if="${exchangeList.returnList}" th:each="exchange, status : ${exchangeList.returnList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 						<div class="goods_section">
 							<div class="goods_detail">
-								<a href="">
+								<a href="javascript:void(0)" th:attr="goodsCd=${exchange.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 									<div class="thumb_box">
 										<img th:src="${imageUrl + '/' + exchange.sysImgNm}" width="100%" alt="">
 									</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/MypageReturnFormMob.html

@@ -44,7 +44,7 @@
 					<th:block th:if="${returnList.returnList}" th:each="return, status : ${returnList.returnList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 						<div class="goods_section">
 							<div class="goods_detail">
-								<a href="">
+								<a href="javascript:void(0)" th:attr="goodsCd=${return.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 									<div class="thumb_box">
 										<img th:src="${imageUrl + '/' + return.sysImgNm}" width="100%" alt="">
 									</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/NoMemberCancelFormMob.html

@@ -42,7 +42,7 @@
 					<th:block th:if="${cancelList.cancelList}" th:each="cancel, status : ${cancelList.cancelList}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
 						<div class="goods_section">
 							<div class="goods_detail">
-								<a href="">
+								<a href="javascript:void(0)" th:attr="goodsCd=${cancel.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 									<div class="thumb_box">
 										<img th:src="${imageUrl + '/' + cancel.sysImgNm + '?RS=90'}" width="100%" alt="">
 									</div>

+ 2 - 2
src/main/webapp/WEB-INF/views/mob/mypage/NoMemberCreExchangeDetailFormMob.html

@@ -46,7 +46,7 @@
 							<p class="dlvr_desc" th:text="|${exchangeDtl.chgDate} ${exchangeDtl.chgTime}|"></p>
 						</div>
 						<div class="goods_detail">
-							<a href="">
+							<a href="javascript:void(0)" th:attr="goodsCd=${exchangeDtl.goodsCd}" onclick="fnGoToGoodsDetail(this)">
 								<div class="thumb_box">
 									<img th:src="${imageUrl + '/' + exchangeDtl.sysImgNm + '?RS=90'}" width="100%" alt="">
 								</div>
@@ -57,7 +57,7 @@
 											<div class="badge_wrap">
 												<em class="tag primary" th:if="${exchangeDtl.shotDelvYn == 'Y'}">총알배송</em>
 												<em class="tag" 		th:if="${exchangeDtl.shotDelvYn == 'N' and exchangeDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
-												<em class="tag" 		th:if="${exchangeDtl.selfGoodsYn == 'N'}">업체직배송</span>
+												<em class="tag" 		th:if="${exchangeDtl.selfGoodsYn == 'N'}">업체직배송</em>
 											</div>
 										</div>
 										<div class="name" th:text="${exchangeDtl.goodsNm}"></div>

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/mypage/NoMemberCreReturnDetailFormMob.html

@@ -55,7 +55,7 @@
 											<div class="badge_wrap">
 												<em class="tag primary" th:if="${returnDtl.shotDelvYn == 'Y'}">총알배송</em>
 												<em class="tag" 		th:if="${returnDtl.shotDelvYn == 'N' and returnDtl.selfGoodsYn == 'Y'}">STYLE24 일반배송</em>
-												<em class="tag" 		th:if="${returnDtl.selfGoodsYn == 'N'}">업체직배송</span>
+												<em class="tag" 		th:if="${returnDtl.selfGoodsYn == 'N'}">업체직배송</em>
 											</div>
 										</div>
 										<div class="name" th:text="${returnDtl.goodsNm}"></div>

+ 3 - 10
src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html

@@ -336,8 +336,8 @@
 			<div class="inner wide">
 				<div class="btn_group btn_group_flex">
 					<div>
-						<button type="button" class="btn btn_primary">
-							동의 후 <span class="total_price" id="btn_payment">0</span>원 결제하기
+						<button type="button" class="btn btn_primary" id="btn_payment">
+							동의 후 <span class="total_price">0</span>원 결제하기
 						</button>
 					</div>
 				</div>
@@ -354,13 +354,6 @@
 <div id="couponSelectPop02" class="popup_box couponSelectPop couponSelectPop02"></div>
 <!-- //배송비 쿠폰선택_팝업 -->
 
-<!-- 카카오페이 iframe -->
-<iframe name="kakaoPayiFrame" id="kakaoPayiFrame" style="display:block; width:100vw; height:100vh;"></iframe>
-<!-- //카카오페이 iframe -->
-<!-- 네이버페이 iframe -->
-<iframe name="naverPayiFrame" id="naverPayiFrame" style="display:block; width:100vw; height:100vh;"></iframe>
-<!-- //네이버페이 iframe -->
-
 <script th:inline="javascript">
 // 배송관련정보 변수선언
 var cartGoodsList		= [[${cartGoodsList}]]			// 배송목록
@@ -2360,7 +2353,7 @@ var custCpnSumAmtCal = function() {
 	$("#realOrdAmt").text(realOrdSumAmt.addComma()); 					// 총 결제 예정 금액
 	$("#orderForm .realOrdAmt").text(realOrdSumAmt.addComma()); 		// 총 결제 예정 금액
 	$("#orderForm .orgGoodsSumAmt").text(orgGoodsSumAmt.addComma());
-	$("#orderForm #btn_payment").text(realOrdSumAmt.addComma());		// 총 결제 예정 금액
+	$("#orderForm #btn_payment span").text(realOrdSumAmt.addComma());	// 총 결제 예정 금액
 	$("#orderForm .dcSumAmt").text(totDcSumAmt.addComma());				// 할인금액합계
 	
 	var tempSavePnt			= savePntSumAmt - prePntDcAmt;

+ 5 - 0
src/main/webapp/WEB-INF/views/mob/planning/PlanningShotGuideFormMob.html

@@ -387,6 +387,11 @@ $(document).ready(function(){
             $(this).addClass('on');
 		});
 	});
+  	//210510_추가 : 토스트 팝업 button 클릭 시 팝업 닫기.
+	$(document).on('click','.popup_box.odDatePop .button_list button',function(){
+		$(this).parents('.popup_box.odDatePop').hide().removeClass('active');
+		$("body").css({"overflow":"visible"});
+	})
     
     $("#bulletShipPop_close").click(function() {
         $.modal.close();

+ 43 - 2
src/main/webapp/WEB-INF/views/mob/social/SocialMainFormMob.html

@@ -87,6 +87,36 @@ var socialAddCart = function (obj) {
 	} 
 }
 
+var socialSetAddCart = function (obj) {
+
+	let cartGoodsList = [];
+	var optCdArr = $(obj).attr("optCd").split(",");
+	var compsGoodsCdArr = $(obj).attr("compsGoodsCd").split(",");
+	
+	let compsList = [];
+	let goodsList = {
+	cartCompsList : new Array()
+	}
+
+	for(let j = 0 ; j <  optCdArr.length ; j++) { 
+		let temp = new Object;
+		temp.goodsCd = $(obj).attr("goodsCd");
+		temp.optCd = optCdArr[j];
+		temp.goodsQty = $(obj).attr("minOrdQty");
+		temp.goodsType = "G056_S";
+		temp.itemCd =  compsGoodsCdArr[j];
+		temp.cartGb = "C";
+		temp.afLinkCd = $(obj).attr("afLinkCd");
+		temp.ithrCd = "";
+		temp.contentsLoc = "";
+		temp.planDtlSq = "";
+		compsList.push(temp);
+	}  
+
+	goodsList.cartCompsList = compsList;
+	cartGoodsList.push(goodsList);
+	cfnAddCart(cartGoodsList);
+}
 
 let fnGetSocialList = function(result) {
 	var html = '';
@@ -124,7 +154,14 @@ let fnGetSocialList = function(result) {
 		
 		html += '		</a>';
 		html += '			<div class="shopBag">';
-		html += '				<button class="btn btn_default" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'"><span>쇼핑백담기</span></button>';
+		if (item.goodsType == 'G056_N') {
+			html += '				<button class="btn btn_default" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'"><span>쇼핑백담기</span></button>';
+		}else if(item.goodsType == 'G056_D'){
+			html += '<button class="btn btn_default"  onclick="socialGoodsDeal()"><span>쇼핑백담기</span></button>';
+		}else{
+			html += '<button class="btn btn_default" onclick="socialSetAddCart(this)" compsGoodsCd=\''+item.compsGoodsCd+'\',goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'"><span>쇼핑백담기</span></button>';
+		}
+		
 		html += '			</div>';
 		html += '	</div>';
 		html += '</div>';
@@ -133,7 +170,11 @@ let fnGetSocialList = function(result) {
 	return html;
 }
 
-
+//딜상품일 경우 alert
+var socialGoodsDeal = function() {
+	mcxDialog.alert("해당 상품은 옵션 선택 후 쇼핑백 담기가 가능합니다.");
+	return;
+}
 
 var fnSocialListSearch = function() {
 	fnSocialInfiniteScrollInit();

+ 278 - 281
src/main/webapp/WEB-INF/views/web/planning/PlanningDetailFormWeb.html

@@ -256,23 +256,23 @@ let planCornerList = [[${planCornerList}]];
 if(planCornerList.length>0){
 	var html = '';
 	
-	html += '<div class="cont_head">';
-	html += '     <div class="sticky_nav">';
-	html += '         <ul>    ';
+	html += '<div class="cont_head">\n';
+	html += '     <div class="sticky_nav">\n';
+	html += '         <ul>\n    ';
 	$.each(planCornerList, function(idx, item)  {
-		html += '             <li><a href="#brand'+(idx+1)+'">'+item.cornerNm+'</a></li>';
+		html += '             <li><a href="#brand'+(idx+1)+'">'+item.cornerNm+'</a></li>\n';
 	})
 	
-	html += '         </ul>';
-	html += '     </div>';
-	html += '</div>';
-	html += '<div class="cont_body">';
-	html += '     <div class="list_content">';
+	html += '         </ul>\n';
+	html += '     </div>\n';
+	html += '</div>\n';
+	html += '<div class="cont_body">\n';
+	html += '     <div class="list_content">\n';
 	$.each(planCornerList, function(idx, item)  {
-		html += '         <div id="brand'+(idx+1)+'" class="dp_item_list">';
-		html += '             <div class="item_header">';
-		html += '                 <h4>'+item.cornerNm+'</h4>';
-		html += '             </div>';
+		html += '         <div id="brand'+(idx+1)+'" class="dp_item_list">\n';
+		html += '             <div class="item_header">\n';
+		html += '                 <h4>'+item.cornerNm+'</h4>\n';
+		html += '             </div>\n';
 		html += '             <div class="itemsGrp';
 		if (item.cornerDispType == 'G045_1') {
 			html += ' cut1';
@@ -285,35 +285,35 @@ if(planCornerList.length>0){
 		}else if(item.cornerDispType == 'G045_5'){
 			html += ' cut5';
 		}
-		html += '">';
+		html += '">\n';
 		$.each(planCornerGoodsList, function(idx2, item2)  {
 			if (item2.cornerNm == item.cornerNm) {
-				html += '                 <div class="item_prod">';
-				html += '                     <div class="item_state">';
+				html += '                 <div class="item_prod">\n';
+				html += '                     <div class="item_state">\n';
 				html += '		<button type="button" class="itemLike';
 				if(item2.likeIt == 'likeit'){
 					html += ' likeit';
 				}
 				html += ' "';
-				html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+				html += ' onClick="cfnPutWishList(this);" goodsCd=\''+item2.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>\n';
 				
-				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="'+ _uploadGoodsUrl +'/'+item2.sysImgNm +'">';
-				html += '                             </div>';
-				html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>';
-				html += '                             <div class="itemName">'+item2.goodsNm+'</div>';
+				html += '                         <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\'' + item2.goodsCd + '\')" class="itemLink">\n';
+				html += '                             <div class="itemPic">\n';
+				html += '                                 <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item2.sysImgNm +'">\n';
+				html += '                             </div>\n';
+				html += '                             <p class="itemBrand">'+item2.brandGroupNm+'</p>\n';
+				html += '                             <div class="itemName">'+item2.goodsNm+'</div>\n';
 				html += '                             <p class="itemPrice">'+item2.currPrice.addComma();
 				if (item2.currPrice != item2.listPrice) {
-					html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>';
+					html += '                                 <span class="itemPrice_original">'+item2.listPrice.addComma()+'</span>\n';
 				}
 				if (item2.dcRate != 0) {
-					html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>';
+					html += '                                 <span class=" itemPercent">'+item2.dcRate.addComma()+'%</span>\n';
 				}
 				
 				
-				html += '                             </p>';
-				html += '                             <div class="itemcolorchip">';
+				html += '                             </p>\n';
+				html += '                             <div class="itemcolorchip">\n';
 				if(!gagajf.isNull(item2.colorChips)){
 					var colorArr = item2.colorChips.split(",");
 					var colorCd = '';
@@ -323,42 +323,40 @@ if(planCornerList.length>0){
 						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>';
+							html += '	<span class="chip_color" style="background-color: '+rgbColor+';border:1px solid #aaa;" value="'+colorCd+'">'+colorCd+'</span>\n';
 						}else{
-							html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>';
+							html += '	<span class="chip_color" style="background-color: '+rgbColor+'" value="'+colorCd+'">'+colorCd+'</span>\n';
 						}
 					}
 				}
-				html += '                             </div>';
+				html += '                             </div>\n';
 				if(!gagajf.isNull(item2.icon)){
 					var iconArr = item2.icon.split(",");
 					var iconGb = '';
 					var iconNm = '';
-					html += '	<p class="itemBadge">';
+					html += '	<p class="itemBadge">\n';
 					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 += '	<span class="badge13" value="'+iconGb+'">'+iconNm+' </span>\n';
 					}
-					html += '	</p>';
+					html += '	</p>\n';
 				}
 				if(item2.goodsTnm != null){
-					html += '			<div class="itemComment">'+item2.goodsTnm+'</div>';
+					html += '			<div class="itemComment">'+item2.goodsTnm+'</div>\n';
 				}
-				html += '                         </a>';
-				html += '                     </div>';
-				html += '                 </div>';
+				html += '                         </a>\n';
+				html += '                     </div>\n';
+				html += '                 </div>\n';
 			}
 			
 		})
-		html += '             </div>';
-		html += '         </div>';
+		html += '             </div>\n';
+		html += '         </div>\n';
 	})
-	
-	html += '     </div>';
-	html += ' </div>';
-	
+	html += '     </div>\n';
+	html += ' </div>\n';
 	
 	$("#cornerList").append(html);
 	
@@ -368,68 +366,68 @@ if(review.length>0){
 	
 	var html = '';
 	
-	html += ' <div class="cont_head">';
-	html += ' 	<div>';
-	html += '		<h4>'+review[0].title+'</h4>';
-	html += ' 	</div>';
-	html += '	<div class="cont_body">';
-	html += ' 		<div class="review_list">';
+	html += ' <div class="cont_head">\n';
+	html += ' 	<div>\n';
+	html += '		<h4>'+review[0].title+'</h4>\n';
+	html += ' 	</div>\n';
+	html += '	<div class="cont_body">\n';
+	html += ' 		<div class="review_list">\n';
 	$.each(review, function(idx, item)  {
-		html += '		<div class="reviw_box">'
-		html += '			<div class="best_review">';
+		html += '		<div class="reviw_box">\n'
+		html += '			<div class="best_review">\n';
 		if(item.reviewSysImg!= null){
-			html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">';
+			html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'Y\', \'Y\',\''+item.reviewSq+'\');">\n';
 		}else{
-			html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'N\',\''+item.reviewSq+'\');">';
+			html += '				<a href="javascript:void();" id="btn_pdBestReview_pop" onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'Y\', \'N\',\''+item.reviewSq+'\');">\n';
 		}
 		
-		html += '					<div class="pic">';
+		html += '					<div class="pic">\n';
 		if(item.reviewSysImg!= null){
 			if (item.fileGb == 'M') { 
-				html += '								<span class="thumb mov" style="background-image: url('+ _uploadImageUrl+item.reviewSysImg +');"></span>';	
+				html += '								<span class="thumb mov" style="background-image: url('+ _uploadImageUrl+item.reviewSysImg +');"></span>\n';	
 			}else{
-				html += '								<span class="thumb" style="background-image: url('+ _uploadImageUrl +item.reviewSysImg +');"></span>';			
+				html += '								<span class="thumb" style="background-image: url('+ _uploadImageUrl +item.reviewSysImg +');"></span>\n';			
 			}
 		}else{
-			html += '								<span class="thumb" style="background-image: url('+ _uploadGoodsUrl+'/'+item.sysImgNm +');"></span>';	
+			html += '								<span class="thumb" style="background-image: url('+ _uploadGoodsUrl+'/'+item.sysImgNm +');"></span>\n';	
 		}
 		
-		html += '                   </div>';
-		html += '                  <div class="star_score">';
-		html += '                      <span class="star">';
-		html += '                          <em class="progbar" style="width:'+(item.score*20)+'%;"></em> <!-- 평점 style로 표기 -->';
-		html += '                      </span>';
+		html += '                   </div>\n';
+		html += '                  <div class="star_score">\n';
+		html += '                      <span class="star">\n';
+		html += '                          <em class="progbar" style="width:'+(item.score*20)+'%;"></em>\n';
+		html += '                      </span>\n';
 		if(item.bestYn == 'Y'){
-			html += '<em class="ico ico_besttag"></em>';	
+			html += '<em class="ico ico_besttag"></em>\n';	
 		}
-		html += '                  </div>';
-		html += '                  <div class="txt_best_review">';
-		html += '                      <p>'+item.reviewContent+'</p>';
-		html += '                  </div>';
-		html += '                  <div class="info_writer">';
-		html += '                      <span class="wr_id">'+item.maskingCustId+'</span>';
-		html += '                      <span class="wr_date">'+item.regDt+'</span>';
-		html += '                  </div>';
-		html += '              </a>';
-		html += '          </div>';
-		html += '          <div class="review_item">';
-		html += '              <div class="item_prod">';
-		html += '                  <div class="item_state">';
-		html += '                      <a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" class="itemLink">';
-		html += '                          <div class="itemPic">';
-		html += '                            	<img alt="" class="vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'">';
-		html += '                          </div>';
-		html += '                          <div class="itemName">'+item.goodsNm+'</div>';
-		html += '                          <p class="itemPrice">'+item.currPrice.addComma()+'</p>';
-		html += '                      </a>';
-		html += '                  </div>';
-		html += '              </div>';
-		html += '          </div>';
-		html += '      </div>  ';
+		html += '                  </div>\n';
+		html += '                  <div class="txt_best_review">\n';
+		html += '                      <p>'+item.reviewContent+'</p>\n';
+		html += '                  </div>\n';
+		html += '                  <div class="info_writer">\n';
+		html += '                      <span class="wr_id">'+item.maskingCustId+'</span>\n';
+		html += '                      <span class="wr_date">'+item.regDt+'</span>\n';
+		html += '                  </div>\n';
+		html += '              </a>\n';
+		html += '          </div>\n';
+		html += '          <div class="review_item">\n';
+		html += '              <div class="item_prod">\n';
+		html += '                  <div class="item_state">\n';
+		html += '                      <a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" class="itemLink">\n';
+		html += '                          <div class="itemPic">\n';
+		html += '                            	<img alt="" class="vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'">\n';
+		html += '                          </div>\n';
+		html += '                          <div class="itemName">'+item.goodsNm+'</div>\n';
+		html += '                          <p class="itemPrice">'+item.currPrice.addComma()+'</p>\n';
+		html += '                      </a>\n';
+		html += '                  </div>\n';
+		html += '              </div>\n';
+		html += '          </div>\n';
+		html += '      </div>\n';
 	});
-	html += '       </div>                    ';
-	html += '	 </div>';
-	html += '</div>';
+	html += '       </div>\n                    ';
+	html += '	 </div>\n';
+	html += '</div>\n';
 
 	$("#G082_10").append(html);
 }
@@ -437,27 +435,27 @@ if(review.length>0){
 if(image.length>0){
 	var html = '';
 	
-	html += '<div class="cont_body">     ';
-	html += '    <div class="mid_banner">';
-	html += '        <div class="swiper-container">';
-	html += '            <div class="swiper-wrapper">';
+	html += '<div class="cont_body">\n     ';
+	html += '    <div class="mid_banner">\n';
+	html += '        <div class="swiper-container">\n';
+	html += '            <div class="swiper-wrapper">\n';
 	for (var i = 0; i < image.length; i++) {
-		html += '                	<div class="swiper-slide">';
+		html += '                	<div class="swiper-slide">\n';
 		if (image[i].linkOpenGb == 'M') {
-			html += '                    	<a href="'+image[i].linkUrl+'" target="_self">><img alt="" src="'+ _uploadImageUrl + image[i].itemVal +'"></a>';
+			html += '                    	<a href="'+image[i].linkUrl+'" target="_self">><img alt="" src="'+ _uploadImageUrl + image[i].itemVal +'"></a>\n';
 		}else{
-			html += '                    	<a href="'+image[i].linkUrl+'" target="_blank">><img alt="" src="'+ _uploadImageUrl + image[i].itemVal +'"></a>';
+			html += '                    	<a href="'+image[i].linkUrl+'" target="_blank">><img alt="" src="'+ _uploadImageUrl + image[i].itemVal +'"></a>\n';
 		}
 		
-		html += '                	</div>';
+		html += '                	</div>\n';
 	}
-	html += '            </div>';
-	html += '        </div>';
-	html += '        <div class="swiper-button-prev"></div>';
-	html += '        <div class="swiper-button-next"></div>';
-	html += '        <div class="swiper-pagination"></div>';
-	html += '    </div>';
-	html += '</div>';
+	html += '            </div>\n';
+	html += '        </div>\n';
+	html += '        <div class="swiper-button-prev"></div>\n';
+	html += '        <div class="swiper-button-next"></div>\n';
+	html += '        <div class="swiper-pagination"></div>\n';
+	html += '    </div>\n';
+	html += '</div>\n';
 	
 	
 	$("#G082_30").append(html);
@@ -476,55 +474,55 @@ if(goods1.length>0){
 	for (var i = 0; i < template.length; i++) {
 		var html = '';
 		if(template[i].tmplType == 'G082_50' && array[0] == template[i].planContSq && typeof array[0] != 'undefined') {
-			html += '<div class="cont_head">';
-			html += '	<div>';
-			html += '        <h4>';
+			html += '<div class="cont_head">\n';
+			html += '	<div>\n';
+			html += '        <h4>\n';
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 				if (template[i].linkOpenGb == 'M') { //본창
-					html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>\n';
 				}else{
-					html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>\n';
 				}
 				
 			}else{
-				html += '        <a href="javascript:void(0)">'+template[i].title+'</a>';
+				html += '        <a href="javascript:void(0)">'+template[i].title+'</a>\n';
 			}
-			html += '		</h4>';
-			html += '    </div>';
-			html += '</div>';
-			html += '<div class="cont_body">';
-			html += '    <div class="dp_listItems_cont type1">';
-			html += '        <ul>';
+			html += '		</h4>\n';
+			html += '    </div>\n';
+			html += '</div>\n';
+			html += '<div class="cont_body">\n';
+			html += '    <div class="dp_listItems_cont type1">\n';
+			html += '        <ul>\n';
 		$.each(goods1, function(idx, item)  {
 			if (item.planContSq == template[i].planContSq) {
-				html += '            <li>';
-				html += '                <div class="dp_listItems">';
-				html += '                    <div class="dp_listItems_img">';
-				html += '                        <img src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'" alt="">';
-				html += '                    </div>';
-				html += '                    <div class="dp_listItems_info">';
-				html += '                        <div class="dp_listItems_brand">'+item.brandGroupNm+'</div>';
-				html += '                        <div class="dp_listItems_name">'+item.goodsNm+'<br></div>';
-				html += '                        <div class="dp_listItems_price">';
-				html += '                            <span class="price">'+item.currPrice.addComma()+'</span>';
+				html += '            <li>\n';
+				html += '                <div class="dp_listItems">\n';
+				html += '                    <div class="dp_listItems_img">\n';
+				html += '                        <img src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'" alt="">\n';
+				html += '                    </div>\n';
+				html += '                    <div class="dp_listItems_info">\n';
+				html += '                        <div class="dp_listItems_brand">'+item.brandGroupNm+'</div>\n';
+				html += '                        <div class="dp_listItems_name">'+item.goodsNm+'<br></div>\n';
+				html += '                        <div class="dp_listItems_price">\n';
+				html += '                            <span class="price">'+item.currPrice.addComma()+'</span>\n';
 				if (item.currPrice != item.listPrice) {
-					html += '                            <del>'+item.listPrice.addComma()+'</del>';
-					html += '                            <span class="percent">'+Math.floor(item.dcRate)+'%</span>';
+					html += '                            <del>'+item.listPrice.addComma()+'</del>\n';
+					html += '                            <span class="percent">'+Math.floor(item.dcRate)+'%</span>\n';
 				}
-				html += '                        </div>';
+				html += '                        </div>\n';
 				if(item.goodsTnm != null){
-					html += '                        <div class="itemComment">'+item.goodsTnm+'</div>';
+					html += '                        <div class="itemComment">'+item.goodsTnm+'</div>\n';
 				}
-				html += '                        <div class="ui_row">';
-				html += '                            <button type="button" class="btn btn_default" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')"><span>자세히 보기</span></button>';
-				html += '                        </div>';
-				html += '                    </div>';
-				html += '                </div>';
-				html += '            </li>';
+				html += '                        <div class="ui_row">\n';
+				html += '                            <button type="button" class="btn btn_default" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')"><span>자세히 보기</span></button>\n';
+				html += '                        </div>\n';
+				html += '                    </div>\n';
+				html += '                </div>\n';
+				html += '            </li>\n';
 			}
 		});
-		html += '        </ul>';
-		html += '    </div>       ';
+		html += '        </ul>\n';
+		html += '    </div>\n       ';
 		html += '</div>';
 		$("#G082_50" +array[0]).append(html);
 	}
@@ -546,58 +544,58 @@ if(goods2.length>0){
 		var html = '';
 		
 		if(template[i].tmplType == 'G082_51' && array[0] == template[i].planContSq && typeof array[0] != 'undefined'){
-			html += '<div class="cont_head">';
-			html += '	<div>';
-			html += '        <h4>';
+			html += '<div class="cont_head">\n';
+			html += '	<div>\n';
+			html += '        <h4>\n';
 				if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 					if (template[i].linkOpenGb == 'M') { //본창
-						html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+						html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>\n';
 					}else{
-						html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+						html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>\n';
 					}
 				}else{
-					html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
+					html+='            <a href="javascript:void(0)">'+template[i].title+'</a>\n';
 				}
-			html += '        </h4>';
-			html += '    </div>';
-			html += '</div>';
-			html += '<div class="cont_body">';
-			html += '    <div class="dp_listItems_cont type2">';
-			html += '        <div class="swiper-container">';
-			html += '            <div class="swiper-wrapper">';
+			html += '        </h4>\n';
+			html += '    </div>\n';
+			html += '</div>\n';
+			html += '<div class="cont_body">\n';
+			html += '    <div class="dp_listItems_cont type2">\n';
+			html += '        <div class="swiper-container">\n';
+			html += '            <div class="swiper-wrapper">\n';
 			$.each(goods2, function(idx, item) {
 				if (item.planContSq == template[i].planContSq) {
-					html += '                <div class="swiper-slide">';
-					html += '                    <div class="item_prod">';
-					html += '                        <div class="item_state">';
-					html += '                            <a onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" class="itemLink">';
-					html += '                                <div class="itemPic">';
-					html += '                                    <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'">';
-					html += '                                </div>';
-					html += '                                <p class="itemBrand">'+item.brandGroupNm+'</p>';
-					html += '                                <div class="itemName">'+item.goodsNm+'</div>';
+					html += '                <div class="swiper-slide">\n';
+					html += '                    <div class="item_prod">\n';
+					html += '                        <div class="item_state">\n';
+					html += '                            <a onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" class="itemLink">\n';
+					html += '                                <div class="itemPic">\n';
+					html += '                                    <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'">\n';
+					html += '                                </div>\n';
+					html += '                                <p class="itemBrand">'+item.brandGroupNm+'</p>\n';
+					html += '                                <div class="itemName">'+item.goodsNm+'</div>\n';
 					html += '                                <p class="itemPrice">'+item.currPrice.addComma();
 					if (item.currPrice != item.listPrice) {
-						html+='                                    <span class="itemPrice_original">'+item.listPrice.addComma()+'</span>';
-						html+='                                    <span class=" itemPercent">'+Math.floor(item.dcRate)+'%</span>';
+						html+='                                    <span class="itemPrice_original">'+item.listPrice.addComma()+'</span>\n';
+						html+='                                    <span class=" itemPercent">'+Math.floor(item.dcRate)+'%</span>\n';
 					}
-					html += '                                </p>';
+					html += '                                </p>\n';
 					if(item.goodsTnm != null){
-						html += '                        <div class="itemComment">'+item.goodsTnm+'</div>';
+						html += '                        <div class="itemComment">'+item.goodsTnm+'</div>\n';
 					}
-					html += '                            </a>';
-					html += '                        </div>';
-					html += '                    </div>';
-					html += '                </div>           ';
+					html += '                            </a>\n';
+					html += '                        </div>\n';
+					html += '                    </div>\n';
+					html += '                </div>\n           ';
 				}
 			});
-			html += '            </div>';
-			html += '        </div>';
-			html += '        <div class="swiper-button-prev"></div>';
-			html += '        <div class="swiper-button-next"></div>';
-			html += '        <div class="swiper-pagination"></div>';
-			html += '    </div>       ';
-			html += '</div>';
+			html += '            </div>\n';
+			html += '        </div>\n';
+			html += '        <div class="swiper-button-prev"></div>\n';
+			html += '        <div class="swiper-button-next"></div>\n';
+			html += '        <div class="swiper-pagination"></div>\n';
+			html += '    </div>\n       ';
+			html += '</div>\n';
 			$("#G082_51" +array[0]).append(html);
 		}
 		
@@ -618,59 +616,58 @@ if(goods4.length>0){
 	for (var i = 0; i < template.length; i++) {
 		var html = '';
 		if(template[i].tmplType == 'G082_52' && array[0] == template[i].planContSq && typeof array[0] != 'undefined'){
-			html += '<div class="cont_head">';
-			html += '<div>';
-			html += '        <h4>';
+			html += '<div class="cont_head">\n';
+			html += '<div>\n';
+			html += '        <h4>\n';
 			if (template[i].linkUrl != null && template[i].linkUrl != '') { /* 링크 변경 예정 */
 				if (template[i].linkOpenGb == "M") { //본창
-					html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					html += '        <a href="'+template[i].linkUrl+'" target="_self">'+template[i].title+' <i class="ico_arrow"></i></a>\n';
 				}else{
-					html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>';
+					html += '        <a href="'+template[i].linkUrl+'" target="_blank">'+template[i].title+' <i class="ico_arrow"></i></a>\n';
 				}
 			}else{
-				html+='            <a href="javascript:void(0)">'+template[i].title+'</a>';
+				html+='            <a href="javascript:void(0)">'+template[i].title+'</a>\n';
 			}
-			html += '        </h4>';
-			html += '    </div>';
-			html += '</div>';
-			html += '<div class="cont_body">';
-			html += '    <!-- 상품 노출 4열 type3 -->';
-			html += '    <div class="dp_listItems_cont type3">';
-			html += '        <div class="swiper-container">';
-			html += '            <div class="swiper-wrapper">';
+			html += '        </h4>\n';
+			html += '    </div>\n';
+			html += '</div>\n';
+			html += '<div class="cont_body">\n';
+			html += '    <div class="dp_listItems_cont type3">\n';
+			html += '        <div class="swiper-container">\n';
+			html += '            <div class="swiper-wrapper">\n';
 			$.each(goods4, function(idx, item) {
 				if (item.planContSq == template[i].planContSq) {
-					html += '                <div class="swiper-slide">';
-					html += '                    <div class="item_prod">';
-					html += '                        <div class="item_state">';
-					html += '                            <a onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" class="itemLink">';
-					html += '                                <div class="itemPic">';
-					html += '                                    <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'">';
-					html += '                                </div>';
-					html += '                                <p class="itemBrand">'+item.brandGroupNm+'</p>';
-					html += '                                <div class="itemName">'+item.goodsNm+'</div>';
+					html += '                <div class="swiper-slide">\n';
+					html += '                    <div class="item_prod">\n';
+					html += '                        <div class="item_state">\n';
+					html += '                            <a onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" class="itemLink">\n';
+					html += '                                <div class="itemPic">\n';
+					html += '                                    <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'">\n';
+					html += '                                </div>\n';
+					html += '                                <p class="itemBrand">'+item.brandGroupNm+'</p>\n';
+					html += '                                <div class="itemName">'+item.goodsNm+'</div>\n';
 					html += '                                <p class="itemPrice">'+item.currPrice.addComma();
 					if (item.currPrice != item.listPrice) {
-						html+='                                    <span class="itemPrice_original">'+item.listPrice.addComma()+'</span>';
-						html+='                                    <span class=" itemPercent">'+Math.floor(item.dcRate)+'%</span>';
+						html+='                                    <span class="itemPrice_original">'+item.listPrice.addComma()+'</span>\n';
+						html+='                                    <span class=" itemPercent">'+Math.floor(item.dcRate)+'%</span>\n';
 					}
-					html += '                                </p>';
+					html += '                                </p>\n';
 					if(item.goodsTnm != null){
-						html += '                        <div class="itemComment">'+item.goodsTnm+'</div>';
+						html += '                        <div class="itemComment">'+item.goodsTnm+'</div>\n';
 					}
-					html += '                            </a>';
-					html += '                        </div>';
-					html += '                    </div>';
-					html += '                </div>';
+					html += '                            </a>\n';
+					html += '                        </div>\n';
+					html += '                    </div>\n';
+					html += '                </div>\n';
 				}
 			});
-			html += '            </div>';
-			html += '        </div>';
-			html += '        <div class="swiper-button-prev"></div>';
-			html += '        <div class="swiper-button-next"></div>';
-			html += '        <div class="swiper-pagination"></div>';
-			html += '    </div>       ';
-			html += '</div>';
+			html += '            </div>\n';
+			html += '        </div>\n';
+			html += '        <div class="swiper-button-prev"></div>\n';
+			html += '        <div class="swiper-button-next"></div>\n';
+			html += '        <div class="swiper-pagination"></div>\n';
+			html += '    </div>\n       ';
+			html += '</div>\n';
 			$("#G082_52" +array[0]).append(html);
 			
 		}
@@ -683,58 +680,58 @@ if(goods4.length>0){
 if(coupon.length>0){
 	var html = '';
 	 
-	html += '<div class="cont_head">';
-	html += '	<div>';
-	html += '		<h4>'+coupon[0].title+'</h4>';
-	html += '	</div>';
-	html += '</div>';
-	html += '<div class="cont_body">';
-	html += '	<div class="coupon_list">';
-	html += '		<ul>';
+	html += '<div class="cont_head">\n';
+	html += '	<div>\n';
+	html += '		<h4>'+coupon[0].title+'</h4>\n';
+	html += '	</div>\n';
+	html += '</div>\n';
+	html += '<div class="cont_body">\n';
+	html += '	<div class="coupon_list">\n';
+	html += '		<ul>\n';
 	$.each(coupon, function(idx, item) {
-		html += '			<li>';
-		html += '				<div class="coupon">';
-		html += '					<div>';
-		html += '						<p class="cp_name">'+item.cpnNm+'</p>';
-		html += '						<p class="cp_cont">';
-		html += '							<span><em>'+item.dcVal.addComma()+'</em>'+item.dcWay+'</span>';
-		html += '						</p>';
+		html += '			<li>\n';
+		html += '				<div class="coupon">\n';
+		html += '					<div>\n';
+		html += '						<p class="cp_name">'+item.cpnNm+'</p>\n';
+		html += '						<p class="cp_cont">\n';
+		html += '							<span><em>'+item.dcVal.addComma()+'</em>'+item.dcWay+'</span>\n';
+		html += '						</p>\n';
 		html += '						<p class="cp_condition">'+item.useCondition;
-		html += '								<span>'+item.issueCondition+'</span>';	
-		html += '						</p>';
-		html += '					</div>';
+		html += '								<span>'+item.issueCondition+'</span>\n';	
+		html += '						</p>\n';
+		html += '					</div>\n';
 		if (item.couponStat == '쿠폰받기') {
-			html += '					<button type="button" id="coupon_'+item.cpnId+'" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">'; 
-			html += '						<span>쿠폰받기</span>';								
-			html += '					</button>';			
+			html += '					<button type="button" id="coupon_'+item.cpnId+'" class="btn btn_dark btn_block btn_coupon_down" onclick="fnPlanCouponDown('+item.cpnId+')">\n'; 
+			html += '						<span>쿠폰받기</span>\n';								
+			html += '					</button>\n';			
 		}else{
 			html += '					<button type="button"';
-			html += '						class="btn btn_dark btn_block btn_coupon_done" disabled>';  
-			html += '						<span>받기완료</span>';								
-			html += '					</button>';			
+			html += '						class="btn btn_dark btn_block btn_coupon_done" disabled>\n';  
+			html += '						<span>받기완료</span>\n';								
+			html += '					</button>\n';			
 		}
-		html += '				</div>';
-		html += '				<button type="button" class="btn_underline"	id="btn_couponInfo_pop" onclick="usePlanInfoCoupon('+item.cpnId+')">';
-		html += '					<span>사용안내</span>';
-		html += '				</button>';
-		html += '			</li>';
+		html += '				</div>\n';
+		html += '				<button type="button" class="btn_underline"	id="btn_couponInfo_pop" onclick="usePlanInfoCoupon('+item.cpnId+')">\n';
+		html += '					<span>사용안내</span>\n';
+		html += '				</button>\n';
+		html += '			</li>\n';
 	});
-	html += '		</ul>';
-	html += '	</div>';
-	html += '</div>';
-	html += '<div class="content dp_announce line">                                                 ';
-	html += '    <div class="cont_head">                                                       ';
-	html += '        <div>                                                                     ';
-	html += '            <h4>유의사항</h4>                                                         ';
-	html += '        </div>                                                                    ';
-	html += '    </div>                                                                        ';
-	html += '    <div class="cont_body">                                                       ';
-	html += '        <div class="announce_txt">                                                ';
-	html += '            <div class="note_txt">                                                ';
-	html += '                <img src="/images/pc/ico_content_find.png" alt="유의사항">            ';
-	html += '                <p>유의사항</p>                                                       ';
-	html += '            </div>                                                                ';
-	html += '            <div class="announce_list">                                           ';
+	html += '		</ul>\n';
+	html += '	</div>\n';
+	html += '</div>\n';
+	html += '<div class="content dp_announce line">\n                                                 ';
+	html += '    <div class="cont_head">\n                                                       ';
+	html += '        <div>\n                                                                     ';
+	html += '            <h4>유의사항</h4>\n                                                         ';
+	html += '        </div>\n                                                                    ';
+	html += '    </div>\n                                                                        ';
+	html += '    <div class="cont_body">\n                                                       ';
+	html += '        <div class="announce_txt">\n                                                ';
+	html += '            <div class="note_txt">\n                                                ';
+	html += '                <img src="/images/pc/ico_content_find.png" alt="유의사항">\n            ';
+	html += '                <p>유의사항</p>\n                                                       ';
+	html += '            </div>\n                                                                ';
+	html += '            <div class="announce_list">\n                                           ';
 	html += coupon[0].note;
 	html += '            </div>                                                                '; 
 	html += '        </div>                                                                    '; 
@@ -819,44 +816,44 @@ var fnSearchCallback = function (result) {
 	 $("#replyList").html('');
 	 if (result!=null) {
 		 var html = '';
-		 html += '<div class="cmt_list_tit">';
-		 html += '	<strong>댓글</strong><span class="cnt">('+result.replyCount.addComma()+')</span>';
-		 html += '</div>';
+		 html += '<div class="cmt_list_tit">\n';
+		 html += '	<strong>댓글</strong><span class="cnt">('+result.replyCount.addComma()+')</span>\n';
+		 html += '</div>\n';
 		 if (result.replyList.length>0) {
-			 html += '<ul class="cmt_list">';
+			 html += '<ul class="cmt_list">\n';
 			 $.each(result.replyList, function (idx, item) {
-				 html += '	<li>';
-				 html += '		<div class="cmt_top">';
-				 html += '			<span class="writer">'+item.maskingCustId+'</span>';
-				 html += '			<span class="date">'+item.entryDt+'</span>';
-				 html += '		</div>';
-				 html += '		<div class="cmt_cont">';
-				 html += '			<div class="img_wrap clear" onclick="fnImgAttach(this)">';
+				 html += '	<li>\n';
+				 html += '		<div class="cmt_top">\n';
+				 html += '			<span class="writer">'+item.maskingCustId+'</span>\n';
+				 html += '			<span class="date">'+item.entryDt+'</span>\n';
+				 html += '		</div>\n';
+				 html += '		<div class="cmt_cont">\n';
+				 html += '			<div class="img_wrap clear" onclick="fnImgAttach(this)">\n';
 				 if (result.replyAttachList.length>0) {
 					for (var i = 0; i < result.replyAttachList.length; i++) {
 						if(result.replyAttachList[i].planEntrySq == item.planEntrySq){
-							html += '				<span class="pics"><img class="picsThumbs" src="'+ _uploadImageUrl +'/'+result.replyAttachList[i].sysFileNm +'"></span>';
+							html += '				<span class="pics"><img class="picsThumbs" src="'+ _uploadImageUrl +'/'+result.replyAttachList[i].sysFileNm +'"></span>\n';
 						}
 					}	
 				 }
 				
-				 html += '			</div>';
-				 html += '			<p>'+item.entryVal1.escapeHtml()+'</p>';
+				 html += '			</div>\n';
+				 html += '			<p>'+item.entryVal1.escapeHtml()+'</p>\n';
 				 if (item.entryCustNo == result.custNo) {
-					 html += '			<button class="btn btn_default btn_del" value="'+item.planEntrySq+'" onclick="fnDelReply(this.value)"><span>삭제</span></button>';
+					 html += '			<button class="btn btn_default btn_del" value="'+item.planEntrySq+'" onclick="fnDelReply(this.value)"><span>삭제</span></button>\n';
 				 }
-				 html += '		</div>';
-				 html += '	</li>';
+				 html += '		</div>\n';
+				 html += '	</li>\n';
 			 });
-			 html += '</ul>';
+			 html += '</ul>\n';
 		}else{
-			html += '<div class="nodata" id="replyNoData"> ';
-			html += '	<div class="txt_box">             ';
+			html += '<div class="nodata" id="replyNoData">\n';
+			html += '	<div class="txt_box">\n             ';
 			html += '		<p>                           ';
 			html += '			등록된 댓글이 없습니다.             ';
 			html += '		</p>                          ';
-			html += '	</div>                            ';
-			html += '</div>                                ';
+			html += '	</div>\n                            ';
+			html += '</div>\n                                ';
 		}
 		 
 	 }

+ 68 - 31
src/main/webapp/WEB-INF/views/web/social/SocialMainFormWeb.html

@@ -102,65 +102,102 @@ var socialAddCart = function (obj) {
 	} 
 }
 
+var socialSetAddCart = function (obj) {
+
+	let cartGoodsList = [];
+	var optCdArr = $(obj).attr("optCd").split(",");
+	var compsGoodsCdArr = $(obj).attr("compsGoodsCd").split(",");
+
+	let compsList = [];
+	let goodsList = {
+	cartCompsList : new Array()
+	}
+
+	for(let j = 0 ; j <  optCdArr.length ; j++) { 
+		let temp = new Object;
+		temp.goodsCd = $(obj).attr("goodsCd");
+		temp.optCd = optCdArr[j];
+		temp.goodsQty = $(obj).attr("minOrdQty");
+		temp.goodsType = "G056_S";
+		temp.itemCd =  compsGoodsCdArr[j];
+		temp.cartGb = "C";
+		temp.afLinkCd = $(obj).attr("afLinkCd");
+		temp.ithrCd = "";
+		temp.contentsLoc = "";
+		temp.planDtlSq = "";
+		compsList.push(temp);
+	}  
+
+	goodsList.cartCompsList = compsList;
+	cartGoodsList.push(goodsList);
+	cfnAddCart(cartGoodsList);
+}
+
 let fnGetSocialList = function(result) {
 	var html = '';
 
 	$.each(result.dataList, function(idx, item) {
 		
-		html += ' <div class="item_prod">';
+		html += ' <div class="item_prod">\n';
 		if (item.stockQtySum > 0 || item.stockQtySum == null) {
-			html += '    <div class="item_state"> ';
+			html += '    <div class="item_state">\n';
 		}else{
-			html += '    <div class="item_state soldout"> ';
+			html += '    <div class="item_state soldout">\n';
 		}
 		if (item.likeIt == 'likeit') {
-			html += '        <button type="button" class="itemLike active" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+			html += '        <button type="button" class="itemLike active" onclick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>\n';
 		}else{
-			html += '        <button type="button" class="itemLike" onclick="cfnPutWishList(this);" onClick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>';
+			html += '        <button type="button" class="itemLike" onclick="cfnPutWishList(this);" goodsCd=\''+item.goodsCd+'\', ithrCd=\'\', contentsLoc=\'\', planDtlSq=\'\'>관심상품 추가</button>\n';
 		}
 		
-		html += '        <a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\')" >';
-		html += '            <div class="itemPic">';
-		html += '                <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'?RS=550">';
-		html += '            </div>';
-		html += '            <div class="itemSpecialPrice"><span>특가</span></div>';
-		html += '            <p class="itemBrand">'+item.brandGroupNm+'</p>';
-		html += '            <div class="itemName">'+item.goodsNm+'</div>';
-		html += '            <p class="itemPrice">';
+		html += '        <a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\''+item.goodsCd+'\')" >\n';
+		html += '            <div class="itemPic">\n';
+		html += '                <img alt="BLUE-a" class=" vLHTC pd_img" src="'+ _uploadGoodsUrl +'/'+item.sysImgNm +'?RS=550">\n';
+		html += '            </div>\n';
+		html += '            <div class="itemSpecialPrice"><span>특가</span></div>\n';
+		html += '            <p class="itemBrand">'+item.brandGroupNm+'</p>\n';
+		html += '            <div class="itemName">'+item.goodsNm+'</div>\n';
+		html += '            <p class="itemPrice">\n';
 		html += item.currPrice.addComma() +'원';
 		if (item.currPrice != item.listPrice) {
-			html += '                <span class="itemPrice_original">'+item.listPrice.addComma()+'원</span>';
+			html += '                <span class="itemPrice_original">'+item.listPrice.addComma()+'원</span>\n';
 		}
 		if (item.dcRate != 0) {
-			html += '                                 <span class=" itemPercent">'+item.dcRate.addComma()+'%</span>';
+			html += '                                 <span class=" itemPercent">'+item.dcRate.addComma()+'%</span>\n';
 		}
-		html += '            </p>';
+		html += '            </p>\n';
 		if(item.goodsTnm != null){
-			html += '           <div class="itemComment">'+item.goodsTnm+'</div>';
+			html += '           <div class="itemComment">'+item.goodsTnm+'</div>\n';
 		}
-		html += '        </a>';
+		html += '        </a>\n';
 		if (item.goodsType == 'G056_N') {
-			html += '        	 <div class="shopBagBtn">';
-			html += '                <button type="button" class="btn btn_defalt" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'">';
-			html += '                    <span>쇼핑백 담기</span>';
-			html += '                </button>';
-			html += '            </div>';
+			html += '        	 <div class="shopBagBtn">\n';
+			html += '                <button type="button" class="btn btn_defalt" onclick="socialAddCart(this)" goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'">\n';
+			html += '                    <span>쇼핑백 담기</span>\n';
+			html += '                </button>\n';
+			html += '            </div>\n';
 		}else if(item.goodsType == 'G056_D'){
-			html += '        	 <div class="shopBagBtn">';
-			html += '                <button type="button" class="btn btn_defalt" onclick="socialGoodsDeal()">';
-			html += '                    <span>쇼핑백 담기</span>';
-			html += '                </button>';
-			html += '            </div>';
+			html += '        	 <div class="shopBagBtn">\n';
+			html += '                <button type="button" class="btn btn_defalt" onclick="socialGoodsDeal()">\n';
+			html += '                    <span>쇼핑백 담기</span>\n';
+			html += '                </button>\n';
+			html += '            </div>\n';
+		}else{
+			html += '        	 <div class="shopBagBtn">\n';
+			html += '                <button type="button" class="btn btn_defalt" onclick="socialSetAddCart(this)" compsGoodsCd=\''+item.compsGoodsCd+'\', goodsCd=\''+item.goodsCd+'\', minOrdQty=\''+item.minOrdQty+'\', goodsType=\''+item.goodsType+'\', optCd=\''+item.optCd+'\'">\n';
+			html += '                    <span>쇼핑백 담기</span>\n';
+			html += '                </button>\n';
+			html += '            </div>\n';
 		}
-		html += '    </div>';
-		html += '</div>';
+		html += '    </div>\n';
+		html += '</div>\n';
 	});
 	return html;
 	
 }
 // 딜상품일 경우 alert
 var socialGoodsDeal = function() {
-	mcxDialog.alert("해당 상품은 딜상품!");
+	mcxDialog.alert("해당 상품은 옵션 선택 후 쇼핑백 담기가 가능합니다.");
 	return;
 }
 

Some files were not shown because too many files changed in this diff