|
|
@@ -1159,52 +1159,47 @@ public class TsfOrderService {
|
|
|
sb.append("\t\t<name>").append("<![CDATA[").append(item.getGoodsNm()).append("]]>").append("</name>\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<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[] optCds = item.getOptCd().split(","); // 옵션코드
|
|
|
- String[] itemCds = item.getItemCd().split(","); // 상품코드
|
|
|
-
|
|
|
// 세트상품 manageCode 정렬 (optCd ASC)
|
|
|
Goods option = new Goods();
|
|
|
- option.setArrGoodsCd(itemCds);
|
|
|
- option.setSizeArr(optCds);
|
|
|
+ option.setArrGoodsCd(item.getItemCd().split(","));
|
|
|
+ option.setSizeArr(item.getOptCd().split(","));
|
|
|
List<Goods> optionList = (ArrayList<Goods>) goodsDao.getOrderGoodsOptionList(option);
|
|
|
|
|
|
StringBuilder manageCode = new StringBuilder();
|
|
|
+ int k = 0;
|
|
|
for(Goods opt : optionList) {
|
|
|
+ if(k++ > 0) manageCode.append("/");
|
|
|
manageCode.append(opt.getOptCd());
|
|
|
}
|
|
|
|
|
|
// 옵션 정보
|
|
|
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"); //<!-- 옵션관리코드 -->
|
|
|
+ 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 글자. 넘어갈경우 뒤에 ".." 붙여서 글자수 맞출것.
|
|
|
+ // 구성상품별 옵션 세팅
|
|
|
+ int i = 1;
|
|
|
+ for(Goods opt : optionList) {
|
|
|
+ // 상품명, 컬러, 사이즈 확인(최대 50자) ==> 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) + "..";}
|
|
|
+ if(opt.getGoodsNm().length() > 24) {opt.setGoodsNm(opt.getGoodsNm().substring(0, 21) + "..");}
|
|
|
+ if(opt.getOptCd2().length() > 12) {opt.setOptCd2(opt.getOptCd2().substring(0, 9) + "..");}
|
|
|
+ if(opt.getColorNm().length() > 12) {opt.setColorNm(opt.getColorNm().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>구성상품").append(i + 1).append("</name>\n"); //<!-- 옵션명 -->
|
|
|
+ sb.append("\t\t\t\t<type>SELECT</type>\n"); //<!-- 옵션유형 -->
|
|
|
+ sb.append("\t\t\t\t<name>구성상품").append(i++).append("</name>\n"); //<!-- 옵션명 -->
|
|
|
sb.append("\t\t\t\t<value>\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\t<id>").append(opt.getOptCd()).append("</id>\n"); //<!-- 옵션 -->
|
|
|
+ sb.append("\t\t\t\t\t<text>").append(opt.getGoodsNm()).append("/").append(opt.getColorNm()).append("/").append(opt.getOptCd2()).append("</text>\n");//<!-- 옵션명 -->
|
|
|
sb.append("\t\t\t\t</value>\n");
|
|
|
sb.append("\t\t\t</selectedItem>\n");
|
|
|
- }*/
|
|
|
+ }
|
|
|
|
|
|
sb.append("\t\t</option>\n");
|
|
|
} else if("Y".equals(item.getSelfGoodsYn())) { // 세트상품 제외 자사상품
|
|
|
@@ -1315,6 +1310,28 @@ public class TsfOrderService {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ private String getCombinationXml(String manageCode, int addPrice, int stockQty, int size) {
|
|
|
+ String[] optCd = manageCode.split("/");
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.append("\t\t\t<combination>\n");
|
|
|
+ sb.append("\t\t\t\t<manageCode>").append(manageCode).append("</manageCode>\n");
|
|
|
+ sb.append("\t\t\t\t<price>").append(addPrice).append("</price>\n");
|
|
|
+ sb.append("\t\t\t\t<stockQuantity>").append(stockQty).append("</stockQuantity>\n");
|
|
|
+ sb.append("\t\t\t\t<status>true</status>\n");
|
|
|
+
|
|
|
+ // 옵션 옵션조합정보 색상
|
|
|
+ for(int i = 0 ; i < size ; i++) {
|
|
|
+ sb.append("\t\t\t\t<options>\n");
|
|
|
+ sb.append("\t\t\t\t\t<name>구성상품").append(i + 1).append("</name>\n");
|
|
|
+ sb.append("\t\t\t\t\t<id>").append(optCd[i]).append("</id>\n");
|
|
|
+ sb.append("\t\t\t\t</options>\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ sb.append("\t\t\t</combination>\n");
|
|
|
+
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 네이버페이 주문 정보 송부
|
|
|
* @param sb
|
|
|
@@ -1514,63 +1531,160 @@ public class TsfOrderService {
|
|
|
// 옵션정보 지원여부 true
|
|
|
sb.append("\t\t<optionSupport>true</optionSupport>\n");
|
|
|
|
|
|
- // 옵션 정보
|
|
|
- sb.append("\t\t<option>\n");
|
|
|
-
|
|
|
// 세트상품 정보 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>();
|
|
|
+ Collection<Goods> compsInfoList = goodsDao.getCompsGoodsList(goods);
|
|
|
|
|
|
+ // 옵션 정보
|
|
|
+ sb.append("\t\t<option>\n");
|
|
|
+ int combCnt = 0; // 옵션 조합 총 수량
|
|
|
// 옵션 아이템정보 구성상품
|
|
|
- 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");
|
|
|
-
|
|
|
- // 옵션 아이템정보 색상
|
|
|
- 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.get(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 (Goods comps : compsInfoList) {
|
|
|
+ sb.append("\t\t\t<optionItem>\n");
|
|
|
+ sb.append("\t\t\t\t<type>SELECT</type>\n");
|
|
|
+ sb.append("\t\t\t\t<name>구성상품").append(comps.getRnum()).append("</name>\n");
|
|
|
|
|
|
- // 옵션 정보 전체 송부
|
|
|
- for (GoodsCompose comps : compsInfoList) {
|
|
|
+ // 구성상품별 옵션 정보
|
|
|
+ String[] optCds = comps.getOptCd().split(",");
|
|
|
+ String[] optCd2s = comps.getOptCd2().split(",");
|
|
|
+ String[] colorNms = comps.getColorNm().split(",");
|
|
|
+ combCnt *= optCds.length;
|
|
|
|
|
|
- }
|
|
|
+ for(int j = 0 ; j < optCds.length ; i++) {
|
|
|
+ if(comps.getGoodsNm().length() > 24) {comps.setGoodsNm(comps.getGoodsNm().substring(0, 21) + "..");}
|
|
|
+ if(optCd2s[j].length() > 12) {optCd2s[j] = optCd2s[j].substring(0, 9) + "..";}
|
|
|
+ if(colorNms[j].length() > 12) {colorNms[j] = colorNms[j].substring(0, 9) + "..";}
|
|
|
|
|
|
+ sb.append("\t\t\t\t<value>\n");
|
|
|
+ sb.append("\t\t\t\t\t<id>").append(optCds[j]).append("</id>\n");
|
|
|
+ sb.append("\t\t\t\t\t<text>").append(comps.getGoodsNm()).append("/").append(colorNms[j]).append("/").append(optCd2s[j]).append("</text>\n");//<!-- 옵션명 -->
|
|
|
+ sb.append("\t\t\t\t</value>\n");
|
|
|
+ }
|
|
|
|
|
|
+ sb.append("\t\t\t</optionItem>\n");
|
|
|
+ }
|
|
|
|
|
|
sb.append("\t\t</option>\n");
|
|
|
|
|
|
+ // 세트 구성상품 모든 옵션 경우의 수 조회 > 상품코드 오름차순, OPTCD 오름차순으로 정확히 보낼것 > 주문요청된 manageCode가 같아야함.
|
|
|
+ for (Goods comps1 : compsInfoList) {
|
|
|
+ if(comps1.getRnum() == 1) {
|
|
|
+ // 구성상품별 옵션 정보
|
|
|
+ String[] goods1optCds = comps1.getOptCd().split(",");
|
|
|
+ String[] goods1addPrices = comps1.getItemStockQty().split(",");
|
|
|
+ String[] goods1stockQty = comps1.getItemStockQty().split(",");
|
|
|
+
|
|
|
+ for(int g1 = 0 ; g1 < goods1optCds.length ; g1++) {
|
|
|
+ StringBuilder manageCode = new StringBuilder(goods1optCds[g1]); // 옵션코드 조합
|
|
|
+ int addPrice = Integer.parseInt(goods1addPrices[g1]); // 추가금액 합계
|
|
|
+ int stockQty = Integer.parseInt(goods1stockQty[g1]); // 상품 주문 최소 재고(구성상품 최소)
|
|
|
+
|
|
|
+ if(compsInfoList.size() == 2) { // 조합 상품 최대치 계산 (세트상품은 최대 5개까지 등록 가능)
|
|
|
+ for (Goods comps2 : compsInfoList) {
|
|
|
+ if(comps2.getRnum() == 2) {
|
|
|
+ // 구성상품별 옵션 정보
|
|
|
+ String[] goods2optCds = comps2.getOptCd().split(",");
|
|
|
+ String[] goods2addPrices = comps2.getItemStockQty().split(",");
|
|
|
+ String[] goods2stockQty = comps2.getItemStockQty().split(",");
|
|
|
+
|
|
|
+ // 기존 정보 저장 (다시 돌아올 경우 이전 번호까지의 정보로 리셋하기 위함)
|
|
|
+ String manageCodeSave2 = goods1optCds[g1];
|
|
|
+ int addPriceSave2 = Integer.parseInt(goods1addPrices[g1]);
|
|
|
+ int stockQtySave2 = Integer.parseInt(goods1stockQty[g1]);
|
|
|
+
|
|
|
+ for(int g2 = 0 ; g2 < goods2optCds.length ; g2++) {
|
|
|
+ manageCode = new StringBuilder(manageCodeSave2); // String 참조변수 인식 방지(사라지지 않음)를 위한 객체 재생성
|
|
|
+ manageCode.append("/").append(goods2optCds[g2]);
|
|
|
+ addPrice = addPriceSave2 + Integer.parseInt(goods2addPrices[g2]);
|
|
|
+ if(stockQtySave2 < Integer.parseInt(goods2stockQty[g2])) stockQty = Integer.parseInt(goods2stockQty[g2]);
|
|
|
+
|
|
|
+ if(compsInfoList.size() == 3) { // 조합 상품 최대치 계산 (세트상품은 최대 5개까지 등록 가능)
|
|
|
+ for (Goods comps3 : compsInfoList) {
|
|
|
+ if (comps3.getRnum() == 3) {
|
|
|
+ // 구성상품별 옵션 정보
|
|
|
+ String[] goods3optCds = comps3.getOptCd().split(",");
|
|
|
+ String[] goods3addPrices = comps3.getItemStockQty().split(",");
|
|
|
+ String[] goods3stockQty = comps3.getItemStockQty().split(",");
|
|
|
+
|
|
|
+ // 기존 정보 저장 (다시 돌아올 경우 이전 번호까지의 정보로 리셋하기 위함)
|
|
|
+ String manageCodeSave3 = manageCodeSave2;
|
|
|
+ int addPriceSave3 = addPriceSave2;
|
|
|
+ int stockQtySave3 = stockQtySave2;
|
|
|
+
|
|
|
+ for(int g3 = 0 ; g3 < goods3optCds.length ; g3++) {
|
|
|
+ manageCode = new StringBuilder(manageCodeSave3); // String 참조변수 인식 방지(사라지지 않음)를 위한 객체 재생성
|
|
|
+ manageCode.append("/").append(goods3optCds[g3]);
|
|
|
+ addPrice = addPriceSave3 + Integer.parseInt(goods3addPrices[g3]);
|
|
|
+ if(stockQtySave3 < Integer.parseInt(goods3stockQty[g3])) stockQty = Integer.parseInt(goods3stockQty[g3]);
|
|
|
+
|
|
|
+ if(compsInfoList.size() == 4) { // 조합 상품 최대치 계산 (세트상품은 최대 5개까지 등록 가능)
|
|
|
+ for (Goods comps4 : compsInfoList) {
|
|
|
+ if (comps4.getRnum() == 4) {
|
|
|
+ // 구성상품별 옵션 정보
|
|
|
+ String[] goods4optCds = comps4.getOptCd().split(",");
|
|
|
+ String[] goods4addPrices = comps4.getItemStockQty().split(",");
|
|
|
+ String[] goods4stockQty = comps4.getItemStockQty().split(",");
|
|
|
+
|
|
|
+ // 기존 정보 저장 (다시 돌아올 경우 이전 번호까지의 정보로 리셋하기 위함)
|
|
|
+ String manageCodeSave4 = manageCodeSave3;
|
|
|
+ int addPriceSave4 = addPriceSave3;
|
|
|
+ int stockQtySave4 = stockQtySave3;
|
|
|
+
|
|
|
+ for(int g4 = 0 ; g4 < goods4optCds.length ; g4++) {
|
|
|
+ manageCode = new StringBuilder(manageCodeSave4); // String 참조변수 인식 방지(사라지지 않음)를 위한 객체 재생성
|
|
|
+ manageCode.append("/").append(goods4optCds[g4]);
|
|
|
+ addPrice = addPriceSave4 + Integer.parseInt(goods4addPrices[g4]);
|
|
|
+ if(stockQtySave4 < Integer.parseInt(goods4stockQty[g4])) stockQty = Integer.parseInt(goods4stockQty[g4]);
|
|
|
+
|
|
|
+ if(compsInfoList.size() == 5) { // 조합 상품 최대치 계산 (세트상품은 최대 5개까지 등록 가능)
|
|
|
+ for (Goods comps5 : compsInfoList) {
|
|
|
+ if (comps5.getRnum() == 5) {
|
|
|
+ // 구성상품별 옵션 정보
|
|
|
+ String[] goods5optCds = comps5.getOptCd().split(",");
|
|
|
+ String[] goods5addPrices = comps5.getItemStockQty().split(",");
|
|
|
+ String[] goods5stockQty = comps5.getItemStockQty().split(",");
|
|
|
+
|
|
|
+ // 기존 정보 저장 (다시 돌아올 경우 이전 번호까지의 정보로 리셋하기 위함)
|
|
|
+ String manageCodeSave5 = manageCodeSave4;
|
|
|
+ int addPriceSave5 = addPriceSave4;
|
|
|
+ int stockQtySave5 = stockQtySave4;
|
|
|
+
|
|
|
+ for(int g5 = 0 ; g5 < goods5optCds.length ; g5++) {
|
|
|
+ manageCode = new StringBuilder(manageCodeSave5); // String 참조변수 인식 방지(사라지지 않음)를 위한 객체 재생성
|
|
|
+ manageCode.append("/").append(goods5optCds[g5]);
|
|
|
+ addPrice = addPriceSave5 + Integer.parseInt(goods5addPrices[g5]);
|
|
|
+ if (stockQtySave5 < Integer.parseInt(goods5stockQty[g5])) stockQty = Integer.parseInt(goods5stockQty[g5]);
|
|
|
+
|
|
|
+ // 세트상품은 최대 5개이므로 마무리.
|
|
|
+ sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sb.append(getCombinationXml(manageCode.toString(), addPrice, stockQty, compsInfoList.size()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 10. 배송정보조회
|
|
|
// 5.2.1 업체별 기본배송비, 무료배송비
|
|
|
String delvFeeCd = "";
|