Procházet zdrojové kódy

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

xodud lee před 5 roky
rodič
revize
0a51912592

+ 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

+ 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;

+ 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') -- 제외상품