|
|
@@ -0,0 +1,1786 @@
|
|
|
+package com.style24.core.biz.service;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.io.IOException;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.core.env.Environment;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.gagaframework.shoplinker.GagaShoplinkertUtil;
|
|
|
+import com.gagaframework.shoplinker.domain.orderlist.Order;
|
|
|
+import com.gagaframework.shoplinker.env.GagaShoplinkerConstants;
|
|
|
+import com.gagaframework.web.parameter.GagaMap;
|
|
|
+import com.gagaframework.web.util.GagaDateUtil;
|
|
|
+import com.gagaframework.web.util.GagaFileUtil;
|
|
|
+import com.style24.core.biz.dao.TscOrderOcmDao;
|
|
|
+import com.style24.core.biz.dao.TscShoplinkerDao;
|
|
|
+import com.style24.core.support.env.TscConstants;
|
|
|
+import com.style24.core.support.message.TscMessageByLocale;
|
|
|
+import com.style24.persistence.domain.ExtmallOrder;
|
|
|
+import com.style24.persistence.domain.ShoplinkerGoods;
|
|
|
+import com.style24.persistence.domain.ShoplinkerInvoice;
|
|
|
+import com.style24.persistence.domain.ShoplinkerOrder;
|
|
|
+import com.style24.persistence.domain.ShoplinkerSearch;
|
|
|
+
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 영업망관리 샵링커 Service
|
|
|
+ *
|
|
|
+ * @author gagamel
|
|
|
+ * @since 2020. 11. 4
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+@SuppressWarnings("deprecation")
|
|
|
+public class TscShoplinkerService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private Environment env;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TscMessageByLocale message;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TscShoplinkerDao shoplinkerDao;
|
|
|
+
|
|
|
+ //@Autowired
|
|
|
+ //private TsaCommonService commonService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TscOrderOcmDao orderOcmDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ObjectMapper mapper;
|
|
|
+
|
|
|
+ private String fileAddNm; // 유저번호_년월일시분초
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 api 호출 가능여부
|
|
|
+ *
|
|
|
+ * @param
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 28
|
|
|
+ */
|
|
|
+ public ShoplinkerSearch getCallRunableInfo(ShoplinkerSearch slkSearch) {
|
|
|
+ ShoplinkerSearch result = shoplinkerDao.getCallRunableInfo(slkSearch);
|
|
|
+ if( null == result ) {
|
|
|
+ result = new ShoplinkerSearch();
|
|
|
+ result.setRunCnt(0);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 api 호출 가능여부 상태 저장
|
|
|
+ *
|
|
|
+ * @param shoplinkerOrder
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 28
|
|
|
+ */
|
|
|
+ public void saveCallApiRunable(ShoplinkerSearch slkSearch) {
|
|
|
+ shoplinkerDao.saveCallApiRunable(slkSearch);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 api 호출 가능여부 상태 수정
|
|
|
+ *
|
|
|
+ * @param shoplinkerOrder
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 28
|
|
|
+ */
|
|
|
+ public void updateCallApiRunable(ShoplinkerSearch slkSearch) {
|
|
|
+ shoplinkerDao.updateCallApiRunable(slkSearch);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 상품등록
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ public GagaMap createShoplinkerXml(Collection<GagaMap> ecxelGoodsList, ShoplinkerGoods shoplinkerGoods)throws IOException {
|
|
|
+ // 파일명 추가 네이밍 규칙
|
|
|
+ fileAddNm = shoplinkerGoods.getRegNo() +"_"+ GagaDateUtil.getTodayDateTime();
|
|
|
+
|
|
|
+ GagaMap rtnMap = new GagaMap();
|
|
|
+ int optionAll=0, optionSucc=0;
|
|
|
+ int excelCnt= ecxelGoodsList.size();
|
|
|
+ int tProdSucc = 0, productSucc=0, goodsNotiSucc=0, certSucc=0, imageSucc=0;
|
|
|
+
|
|
|
+ for (GagaMap gagaMap : ecxelGoodsList) {
|
|
|
+ if( !"".equals(gagaMap.getString("goodsCd").trim())) {
|
|
|
+ shoplinkerGoods.setGoodsCd(gagaMap.getString("goodsCd"));
|
|
|
+
|
|
|
+ // 1. 단품생성
|
|
|
+ rtnMap = createOptionRegisterXml(shoplinkerGoods);
|
|
|
+ optionAll += rtnMap.getInt("allCnt");
|
|
|
+ optionSucc += rtnMap.getInt("succCnt");
|
|
|
+
|
|
|
+ // 2. 상품생성
|
|
|
+ tProdSucc = createGoodsRegisterXml(shoplinkerGoods);
|
|
|
+ productSucc += tProdSucc;
|
|
|
+
|
|
|
+ // 3. 고시정보(품목정보)
|
|
|
+ goodsNotiSucc += createGoodsNotiRegisterXml(shoplinkerGoods);
|
|
|
+
|
|
|
+ // 4. 인증정보
|
|
|
+ certSucc += createCertRegisterXml(shoplinkerGoods);
|
|
|
+
|
|
|
+ // 5. 상품이미지정보
|
|
|
+ imageSucc += createImageRegisterXml(shoplinkerGoods);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ rtnMap = new GagaMap();
|
|
|
+ rtnMap.setInt("excelCnt", excelCnt);
|
|
|
+ rtnMap.setInt("optionAll", optionAll);
|
|
|
+ rtnMap.setInt("optionSucc", optionSucc);
|
|
|
+ rtnMap.setInt("productSucc", productSucc);
|
|
|
+ rtnMap.setInt("goodsNotiSucc", goodsNotiSucc);
|
|
|
+ rtnMap.setInt("certSucc", certSucc);
|
|
|
+ rtnMap.setInt("imageSucc", imageSucc);
|
|
|
+
|
|
|
+ return rtnMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 상품등록 - 1. 단품생성
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ private GagaMap createOptionRegisterXml(ShoplinkerGoods shoplinkerGoods) throws IOException {
|
|
|
+
|
|
|
+ GagaMap returnMap = new GagaMap();
|
|
|
+ ShoplinkerGoods regMap = new ShoplinkerGoods();
|
|
|
+ regMap.setApiType("OPTION");
|
|
|
+ regMap.setApiSubUrl(env.getProperty("shoplinker.url.option"));
|
|
|
+ regMap.setGoodsCd(shoplinkerGoods.getGoodsCd());
|
|
|
+ regMap.setRegNo(shoplinkerGoods.getRegNo());
|
|
|
+ regMap.setXmlPath(shoplinkerGoods.getXmlPath());
|
|
|
+ regMap.setDomainUrl(shoplinkerGoods.getDomainUrl());
|
|
|
+
|
|
|
+ int succCnt = 0;
|
|
|
+ int allCnt = 0;
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 옵션 목록조회
|
|
|
+ Collection<ShoplinkerGoods> list = shoplinkerDao.getOptionList(shoplinkerGoods);
|
|
|
+ if( null != list && !list.isEmpty()) {
|
|
|
+ allCnt = list.size();
|
|
|
+
|
|
|
+ StringBuilder sbRequest;
|
|
|
+ int opCnt = 0;
|
|
|
+ for (ShoplinkerGoods map : list) {
|
|
|
+ opCnt ++;
|
|
|
+
|
|
|
+ // xml 데이터 세팅
|
|
|
+ sbRequest = new StringBuilder();
|
|
|
+ sbRequest.append("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n");
|
|
|
+ sbRequest.append("<shoplinker>\n");
|
|
|
+ sbRequest.append(" <productInfo>\n");
|
|
|
+ sbRequest.append(" <product>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" <customer_id>").append(shoplinkerGoods.getCustomerId()).append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <partner_product_id><![CDATA[").append(map.getPartnerProductId()).append("]]></partner_product_id>\n");
|
|
|
+ sbRequest.append(" <attribute_code><![CDATA[").append("999999999").append("]]></attribute_code>\n");
|
|
|
+ sbRequest.append(" <product_name><![CDATA[").append(map.getOptCd1()+"_"+map.getOptCd2()).append("]]></product_name>\n");
|
|
|
+ sbRequest.append(" <quantity>").append(map.getQuantity()).append("</quantity>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" </product>\n");
|
|
|
+ sbRequest.append(" </productInfo>\n");
|
|
|
+ sbRequest.append("</shoplinker>\n");
|
|
|
+
|
|
|
+ regMap.setOptCd(map.getPartnerProductId());
|
|
|
+ regMap.setQuantity(map.getQuantity());
|
|
|
+
|
|
|
+ // api 호출 및 결과 history 저장
|
|
|
+ succCnt += callGoodsRegApi(regMap , sbRequest, "option_"+opCnt);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch(Exception e) {
|
|
|
+ log.error("xml 생성오류 ", e);
|
|
|
+ regMap.setApiResult("error");
|
|
|
+ regMap.setApiMessage("xml 생성오류");
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(regMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ returnMap.setInt("allCnt", allCnt);
|
|
|
+ returnMap.setInt("succCnt", succCnt);
|
|
|
+
|
|
|
+ return returnMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 상품등록 - 2. 상품생성
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ public int createGoodsRegisterXml(ShoplinkerGoods shoplinkerGoods) throws IOException {
|
|
|
+
|
|
|
+ ShoplinkerGoods regMap = new ShoplinkerGoods();
|
|
|
+ regMap.setApiType("PRODUCT");
|
|
|
+ regMap.setApiSubUrl(env.getProperty("shoplinker.url.product"));
|
|
|
+ regMap.setGoodsCd(shoplinkerGoods.getGoodsCd());
|
|
|
+ regMap.setRegNo(shoplinkerGoods.getRegNo());
|
|
|
+ regMap.setXmlPath(shoplinkerGoods.getXmlPath());
|
|
|
+ regMap.setDomainUrl(shoplinkerGoods.getDomainUrl());
|
|
|
+
|
|
|
+ int succCnt = 0;
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 상품기본정보
|
|
|
+ ShoplinkerGoods goodsMap = shoplinkerDao.getGoods(shoplinkerGoods);
|
|
|
+
|
|
|
+ // 상품상세(퍼블) 세팅
|
|
|
+ String detailDesc = this.setDetailDesc(shoplinkerGoods, goodsMap);
|
|
|
+
|
|
|
+ // xml 데이터 세팅
|
|
|
+ StringBuilder sbRequest = new StringBuilder();
|
|
|
+ sbRequest.append("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n");
|
|
|
+ sbRequest.append("<shoplinker>\n");
|
|
|
+ sbRequest.append(" <productInfo>\n");
|
|
|
+ sbRequest.append(" <product>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" <customer_id>").append(shoplinkerGoods.getCustomerId()).append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <partner_product_id>").append(goodsMap.getGoodsCd()).append("</partner_product_id>\n");
|
|
|
+ sbRequest.append(" <attribute_title_code>").append("999999999").append("</attribute_title_code>\n");
|
|
|
+ sbRequest.append(" <attribute_partner_product_id>").append(goodsMap.getAttributePartnerProductId()).append("</attribute_partner_product_id>\n");
|
|
|
+ sbRequest.append(" <product_name>").append(goodsMap.getProductName()).append("</product_name>\n");
|
|
|
+ sbRequest.append(" <detail_desc>").append(detailDesc).append("</detail_desc>\n");
|
|
|
+
|
|
|
+ // 가격연계
|
|
|
+ if( "Y".equals(goodsMap.getSyncYn())) {
|
|
|
+ //sbRequest.append(" <new_desc_top>").append(goodsMap.getNewDescTop()).append("</new_desc_top>\n");
|
|
|
+ //sbRequest.append(" <market_price>").append(goodsMap.getMarketPrice()).append("</market_price>\n");
|
|
|
+ sbRequest.append(" <sale_price>").append(goodsMap.getSalePrice()).append("</sale_price>\n");
|
|
|
+ sbRequest.append(" <supply_price>").append(goodsMap.getSupplyPrice()).append("</supply_price>\n");
|
|
|
+ //sbRequest.append(" <market_price_p>").append(goodsMap.getMarketPriceP()).append("</market_price_p>\n");
|
|
|
+ //sbRequest.append(" <sale_price_p>").append(goodsMap.getSalePriceP()).append("</sale_price_p>\n");
|
|
|
+ //sbRequest.append(" <supply_price_p>").append(goodsMap.getSupplyPriceP()).append("</supply_price_p>\n");
|
|
|
+ }else{
|
|
|
+ //sbRequest.append(" <new_desc_top>").append(goodsMap.getNewDescTop()).append("</new_desc_top>\n");
|
|
|
+ //sbRequest.append(" <market_price>").append(goodsMap.getMarketPrice()).append("</market_price>\n");
|
|
|
+ sbRequest.append(" <sale_price>").append(0).append("</sale_price>\n");
|
|
|
+ sbRequest.append(" <supply_price>").append(0).append("</supply_price>\n");
|
|
|
+ //sbRequest.append(" <market_price_p>").append(goodsMap.getMarketPriceP()).append("</market_price_p>\n");
|
|
|
+ //sbRequest.append(" <sale_price_p>").append(goodsMap.getSalePriceP()).append("</sale_price_p>\n");
|
|
|
+ //sbRequest.append(" <supply_price_p>").append(goodsMap.getSupplyPriceP()).append("</supply_price_p>\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ sbRequest.append(" <sale_status>").append("001").append("</sale_status>\n"); // 판매중
|
|
|
+ sbRequest.append(" <tax_yn>").append("001").append("</tax_yn>\n"); // 과세
|
|
|
+ sbRequest.append(" <salearea>전국</salearea>\n");
|
|
|
+ sbRequest.append(" <sex>").append(goodsMap.getSex()).append("</sex>\n");
|
|
|
+ sbRequest.append(" <model>").append(goodsMap.getModel()).append("</model>\n");
|
|
|
+ sbRequest.append(" <model_no>").append(goodsMap.getModelNo()).append("</model_no>\n");
|
|
|
+ sbRequest.append(" <brand>").append(goodsMap.getBrand()).append("</brand>\n");
|
|
|
+ sbRequest.append(" <auth_no>").append(goodsMap.getAuthNo()).append("</auth_no>\n");
|
|
|
+ sbRequest.append(" <expirydate>20991231</expirydate>\n");
|
|
|
+ sbRequest.append(" <maker>").append(goodsMap.getMaker()).append("</maker>\n");
|
|
|
+ sbRequest.append(" <origin>").append(goodsMap.getOrigin()).append("</origin>\n");
|
|
|
+ sbRequest.append(" <adult_info>").append(goodsMap.getAdultInfo()).append("</adult_info>\n");
|
|
|
+ sbRequest.append(" <ccategory_l>").append(goodsMap.getCcategoryL()).append("</ccategory_l>\n");
|
|
|
+ sbRequest.append(" <ccategory_m>").append(goodsMap.getCcategoryM()).append("</ccategory_m>\n");
|
|
|
+ sbRequest.append(" <ccategory_s>").append(goodsMap.getCcategoryS()).append("</ccategory_s>\n");
|
|
|
+ sbRequest.append(" <ccategory_d>").append(goodsMap.getCcategoryD()).append("</ccategory_d>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" </product>\n");
|
|
|
+ sbRequest.append(" </productInfo>\n");
|
|
|
+ sbRequest.append("</shoplinker>\n");
|
|
|
+
|
|
|
+ if( null != goodsMap.getShoplinkerItemkindNm()) {
|
|
|
+ // api 호출 및 결과 history 저장
|
|
|
+ succCnt = callGoodsRegApi(regMap , sbRequest, "product");
|
|
|
+
|
|
|
+ }else {
|
|
|
+ // 품목매핑정보 없음. 전송 안함
|
|
|
+ regMap.setXmlTxt(sbRequest.toString());
|
|
|
+ regMap.setApiResult("error");
|
|
|
+ regMap.setApiMessage("API 전송안함=>샵링커 품목매핑정보가 없습니다. (자사품목코드: "+goodsMap.getItemkindCd()+")");
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(regMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ }catch(Exception e) {
|
|
|
+ log.error("xml 생성오류 ", e);
|
|
|
+ regMap.setApiResult("error");
|
|
|
+ regMap.setApiMessage("xml 생성오류");
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(regMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ return succCnt;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 상품등록 - 상세내용 세팅
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ private String setDetailDesc(ShoplinkerGoods shoplinkerGoods, ShoplinkerGoods goodsMap) {
|
|
|
+
|
|
|
+ String htmlDesc = "";
|
|
|
+
|
|
|
+ // 상세폼신규사용여부 N: 기존 정보 / Y : html 형식
|
|
|
+ if( "N".equals(goodsMap.getTobeFormYn())){
|
|
|
+ String descStr = goodsMap.getDetailDesc();
|
|
|
+ descStr = descStr.replace("http://www.istyle24.com/Upload/", "http://image.istyle24.com/Local/")
|
|
|
+ .replace("/Upload", "http://image.istyle24.com/Local")
|
|
|
+ .replace("http://www.istyle24.com/Images", "http://image.istyle24.com/Statics/design/Images");
|
|
|
+
|
|
|
+ htmlDesc = descStr;
|
|
|
+
|
|
|
+ }else {
|
|
|
+
|
|
|
+ String imgPath = env.getProperty("upload.goods.view");
|
|
|
+ imgPath = imgPath.replace("/Upload", "/Local")
|
|
|
+ .replace("http://www.istyle24.com/Upload/", "http://image.istyle24.com/Local/")
|
|
|
+ .replace("http://www.istyle24.com/Images", "http://image.istyle24.com/Statics/design/Images");
|
|
|
+
|
|
|
+ Collection<ShoplinkerGoods> imgList = shoplinkerDao.getGoodsImageList(shoplinkerGoods);
|
|
|
+
|
|
|
+ String dColor = goodsMap.getMainColorEnm(); //대표컬러
|
|
|
+ String dImgFront = ""; //대표상품 앞판컷
|
|
|
+ String dImgBack = ""; //대표상품 뒷판컷
|
|
|
+ String dMaterial = ""; //대표상품 패브릭(소재컷?)
|
|
|
+ ArrayList<String> dImgModelList = new ArrayList<String>(); //대표상품 모델컷
|
|
|
+ ArrayList<String> dImgDetailList = new ArrayList<String>(); //대표상품 디테일컷(상세컷)
|
|
|
+ ArrayList<String> dLabelList = new ArrayList<String>(); //대표상품 케어라벨
|
|
|
+ ArrayList<String> dImgOtherList = new ArrayList<String>(); //상품외부몰용
|
|
|
+
|
|
|
+ // 이미지 정보
|
|
|
+ for(ShoplinkerGoods map : imgList) {
|
|
|
+
|
|
|
+ if( -1 < map.getSysImgNm().indexOf("_"+map.getColorCd()+"_01.jpg")) { //대표상품 앞판컷
|
|
|
+ dImgFront = imgPath +"/"+ map.getSysImgNm();
|
|
|
+ }
|
|
|
+ if( -1 < map.getSysImgNm().indexOf("_"+map.getColorCd()+"_02.jpg")) { //대표상품 뒷판컷
|
|
|
+ dImgBack = imgPath +"/"+ map.getSysImgNm();
|
|
|
+ }
|
|
|
+ if( -1 < map.getSysImgNm().indexOf("_"+map.getColorCd()+"_C")) { //대표상품 모델컷
|
|
|
+ dImgModelList.add(imgPath +"/"+ map.getSysImgNm());
|
|
|
+ }
|
|
|
+ if( -1 < map.getSysImgNm().indexOf("_"+map.getColorCd()+"_D")) { //대표상품 디테일컷(상세컷)
|
|
|
+ dImgDetailList.add(imgPath +"/"+ map.getSysImgNm());
|
|
|
+ }
|
|
|
+ if( -1 < map.getSysImgNm().indexOf("_"+map.getColorCd()+"_F")) { //대표상품 패브릭(소재컷?)
|
|
|
+ dMaterial = imgPath +"/"+ map.getSysImgNm();
|
|
|
+ }
|
|
|
+ if( -1 < map.getSysImgNm().indexOf("_"+map.getColorCd()+"_L")) { //대표상품 케어라벨
|
|
|
+ dLabelList.add(imgPath +"/"+ map.getSysImgNm());
|
|
|
+ }
|
|
|
+ if( -1 < map.getSysImgNm().indexOf("_"+map.getColorCd()+"_X")) { //대표상품 디테일컷(상세컷)
|
|
|
+ dImgOtherList.add(imgPath +"/"+ map.getSysImgNm());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 제대로된 정보 없을 경우, 기존 상세내용으로 보냄
|
|
|
+ if( "".equals(dImgFront) || "".equals(dImgBack)) {
|
|
|
+ String descStr = goodsMap.getDetailDesc();
|
|
|
+ descStr = descStr.replace("http://www.istyle24.com/Upload/", "http://image.istyle24.com/Local/")
|
|
|
+ .replace("/Upload", "http://image.istyle24.com/Local")
|
|
|
+ .replace("http://www.istyle24.com/Images", "http://image.istyle24.com/Statics/design/Images");
|
|
|
+
|
|
|
+ htmlDesc = descStr;
|
|
|
+
|
|
|
+ }else {
|
|
|
+
|
|
|
+ // 1) 상세내용 - 상품설명
|
|
|
+ htmlDesc = "<div class='st_descrp_box' style='max-height:1100px; overflow:hidden;'>";
|
|
|
+ htmlDesc += "<div class='st_desc_simple' style='position:relative; margin-top:0px; margin-left:auto; margin-right:auto;'>";
|
|
|
+ htmlDesc += "<span class='st_tit_desc' style='display:block; margin-bottom:10px; font-size:18px; font-weight:500; letter-spacing:-0.025em;'>"+goodsMap.getDetailDescNew10()+"</span>";
|
|
|
+ htmlDesc += "<p class='st_ptxt01' style='font-size:16px;font-weight:200;line-height:1.5;word-break:keep-all;color:#666666;'>";
|
|
|
+ htmlDesc += goodsMap.getDetailDescNew20();
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ htmlDesc += "<div class='st_desc_character' style='position:relative; margin-top:40px; margin-left:auto; margin-right:auto;'>";
|
|
|
+ htmlDesc += "<span class='st_tit_desc' style='display:block; margin-bottom:10px; font-size:18px; font-weight:500; letter-spacing:-0.025em;'>상품특징</span>";
|
|
|
+ htmlDesc += "<p class='st_ptxt01' style='font-size:16px;font-weight:200;line-height:1.5;word-break:keep-all;color:#666666;'>";
|
|
|
+ htmlDesc += goodsMap.getDetailDescNew30();
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+
|
|
|
+ // 2) 상세내용 - 상품옵션별 색상
|
|
|
+ String colorDesc = "";
|
|
|
+ shoplinkerGoods.setColorListYn("Y"); // 상품이미지정보 색상별
|
|
|
+ Collection<ShoplinkerGoods> imgColorList = shoplinkerDao.getGoodsImageList(shoplinkerGoods);
|
|
|
+ colorDesc = "<div class='st_view_option_box' style='margin-top: 100px;text-align: center;'>";
|
|
|
+ String tmpColor = "";
|
|
|
+ for(ShoplinkerGoods ic : imgColorList ) {
|
|
|
+
|
|
|
+ if( !tmpColor.equals(ic.getColorCd())) {
|
|
|
+ colorDesc += "<span class='st_tit_desc' style='display:block; margin-bottom:10px; font-size:18px; font-weight:500; letter-spacing:-0.025em;'>컬러 : ";
|
|
|
+ colorDesc += "<span>"+ ic.getColorKnm() +"</span></span>";
|
|
|
+ }
|
|
|
+ colorDesc += "<div class='st_view' style='margin-top: 40px;'>";
|
|
|
+ colorDesc += "<img src='"+ imgPath+"/"+ic.getSysImgNm()+"' alt='' style='max-width:100%;margin: 10px auto 0;margin-top: 0;display: block;'>";
|
|
|
+ colorDesc += "<img src='"+ imgPath+"/"+ic.getSysImgNm()+"' alt='' style='max-width:100%;display: block;margin: 10px auto 0;'>";
|
|
|
+ colorDesc += "</div>";
|
|
|
+ if( !tmpColor.equals(ic.getColorCd())) {
|
|
|
+ colorDesc += "<div style='height:100px;'></div>";
|
|
|
+ tmpColor = ic.getColorCd();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ colorDesc += "</div>";
|
|
|
+ htmlDesc += colorDesc;
|
|
|
+
|
|
|
+ // 3) 상세내용 - 모델 착용컷
|
|
|
+ String dtlDesc = "";
|
|
|
+ dtlDesc += "<div class='st_view_outfit_box' style='margin-top: 100px;text-align: center;'>";
|
|
|
+ dtlDesc += "<span class='st_tit_view' style='display: block;color: #222;font-size: 32px;font-weight: 300;text-align: center;'>OUTFIT VIEW</span>";
|
|
|
+ dtlDesc += "<span class='st_model_info' style='display: block;margin-top: 20px;color: #666;font-size: 16px;font-weight: 200;text-align: center;'>"+goodsMap.getModelInfo()+"</span>";
|
|
|
+ dtlDesc += "<div class='st_view' style='margin-top: 40px;'>";
|
|
|
+ for(String img : dImgModelList) {
|
|
|
+ dtlDesc += "<img src='"+ img +"' alt='' style='display: block;margin: 10px auto 0;'>";
|
|
|
+ }
|
|
|
+ dtlDesc += "</div>";
|
|
|
+ dtlDesc += "</div>";
|
|
|
+
|
|
|
+ // 4) 상세내용 - 상품컷
|
|
|
+ dtlDesc += "<div class='st_view_detail_box' style='margin-top: 100px;text-align: center;'>";
|
|
|
+ dtlDesc += "<span class='st_tit_view' style='display: block;color: #222;font-size: 32px;font-weight: 300;text-align: center;'>PRODUCT VIEW</span>";
|
|
|
+ dtlDesc += "<div class='st_view' style='margin-top: 40px;'>";
|
|
|
+ for(String img : dImgDetailList) {
|
|
|
+ dtlDesc += "<img src='"+ img +"' alt='' style='display: block;margin: 10px auto 0;'>";
|
|
|
+ }
|
|
|
+ dtlDesc += "</div>";
|
|
|
+ dtlDesc += " </div>";
|
|
|
+
|
|
|
+ // 5) 상세내용 - 원단
|
|
|
+ dtlDesc += "<div class='st_view_fabric_box' style='margin-top: 100px;text-align: center;'>";
|
|
|
+ dtlDesc += "<span class='st_tit_view' style='display: block;color: #222;font-size: 32px;font-weight: 300;text-align: center;'>FABRIC</span>";
|
|
|
+ dtlDesc += "<div class='st_view' style='margin-top: 40px;'>";
|
|
|
+ dtlDesc += "<img src='"+dMaterial +"' alt='' style='display: block;margin: 10px auto 0;margin-top: 0;'>";
|
|
|
+ dtlDesc += "</div>";
|
|
|
+ dtlDesc += "</div>";
|
|
|
+
|
|
|
+ // 6) 상세내용 - 라벨
|
|
|
+ dtlDesc += "<div class='st_view_label_box' style='margin-top: 100px;text-align: center;'>";
|
|
|
+ dtlDesc += "<span class='st_tit_view' style='display: block;color: #222;font-size: 32px;font-weight: 300;text-align: center;'>LABEL INFO</span>";
|
|
|
+ dtlDesc += "<div class='st_view' style='margin-top: 40px;'>";
|
|
|
+ dtlDesc += "<span style='display:inline-block;'>";
|
|
|
+ for(String img : dLabelList) {
|
|
|
+ dtlDesc += "<img src='"+ img +"' alt='' style='float:left; margin-top:0; margin-left:20px;'>";
|
|
|
+ }
|
|
|
+ dtlDesc += "</span>";
|
|
|
+ dtlDesc += "</div>";
|
|
|
+ dtlDesc += "</div>";
|
|
|
+ htmlDesc += dtlDesc;
|
|
|
+
|
|
|
+ // 7) 상세내용 - 사이즈
|
|
|
+ Collection<ShoplinkerGoods> sizeList = shoplinkerDao.getGoodsSizeList(shoplinkerGoods);
|
|
|
+ if (sizeList == null || sizeList.isEmpty()) {
|
|
|
+ //대표상품 실측정사이즈표 없을경우 > 브랜드 별 표준 이미지
|
|
|
+ htmlDesc += "<div class='st_view_size_box' style='margin-top: 100px;text-align: center;'>";
|
|
|
+ htmlDesc += "<span class='st_tit_view' style='display: block;color: #222;font-size: 32px;font-weight: 300;text-align: center;'>사이즈정보</span>";
|
|
|
+ htmlDesc += "<div class='st_view' style='margin-top: 40px;'>";
|
|
|
+
|
|
|
+ String brandSizeImg = env.getProperty("upload.image.view") + "/Upload/brandSizeImg/";
|
|
|
+ if( "Y".equals(goodsMap.getKidsYn())){
|
|
|
+ brandSizeImg += "kids/"+goodsMap.getBrandEnm() +".jpg";
|
|
|
+ htmlDesc += "<img src='"+ brandSizeImg +"' alt='ANDEW 표준 사이즈' style='display: block;margin: 10px auto 0;'>";
|
|
|
+ }else {
|
|
|
+ brandSizeImg += "casuals/"+goodsMap.getBrandEnm() +".jpg";
|
|
|
+ htmlDesc += "<img src='"+ brandSizeImg +"' alt='ANDEW 표준 사이즈' style='display: block;margin: 10px auto 0;'>";
|
|
|
+ }
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+
|
|
|
+ }else {
|
|
|
+
|
|
|
+ htmlDesc += "<div class='st_view_size_box' style='margin-top: 100px;text-align: center;'>";
|
|
|
+ htmlDesc += "<span class='st_tit_view' style='display: block;color: #222;font-size: 32px;font-weight: 300;text-align: center;'>사이즈정보</span>";
|
|
|
+ htmlDesc += "<div class='st_view' style='margin-top: 40px;'>";
|
|
|
+
|
|
|
+ htmlDesc += "<div class='st_tbl' style='padding:0; border-top:1px solid #000;'>";
|
|
|
+ htmlDesc += "<table style='margin:0;padding:0;border-collapse:collapse;border-spacing:0;width:100%;border-top:1px solid #000;word-break:keep-all;'>";
|
|
|
+ htmlDesc += "<thead style=''>";
|
|
|
+ htmlDesc += "<tr style=''>";
|
|
|
+
|
|
|
+ int cnt = 0;
|
|
|
+ for(ShoplinkerGoods size : sizeList) {
|
|
|
+
|
|
|
+ if( 0 == cnt ) {
|
|
|
+ if( "하의".equals(size.getSizeTypecd())) {
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'></th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>허리둘레(cm)</th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>밑위(cm)</th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>엉덩이둘레(cm)</th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>허벅지둘레(cm)</th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>총길이(cm)</th>";
|
|
|
+ }else {
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'></th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>가슴둘레(cm)</th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>어깨너비(cm)</th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>팔길이(cm)</th>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>총길이(cm)</th>";
|
|
|
+ }
|
|
|
+ htmlDesc += "</tr>";
|
|
|
+ htmlDesc += "</thead>";
|
|
|
+ htmlDesc += "<tbody style=''>";
|
|
|
+ }
|
|
|
+
|
|
|
+ htmlDesc += "<tr style=''>";
|
|
|
+ htmlDesc += "<th style='position:relative;padding:20px 0;border-bottom:1px solid #ddd;font-weight:500;font-size:16px;letter-spacing:-0.025em;text-align:center;'>"+ size.getOptCd2() +"</th>";
|
|
|
+ htmlDesc += "<td style='position:relative; padding:20px 0; border-bottom:1px solid #ddd; font-weight:200; font-size:16px; letter-spacing:-0.025em; text-align:center;'>"+ size.getSizeValue1() +"</td>";
|
|
|
+ htmlDesc += "<td style='position:relative; padding:20px 0; border-bottom:1px solid #ddd; font-weight:200; font-size:16px; letter-spacing:-0.025em; text-align:center;'>"+ size.getSizeValue2() +"</td>";
|
|
|
+ htmlDesc += "<td style='position:relative; padding:20px 0; border-bottom:1px solid #ddd; font-weight:200; font-size:16px; letter-spacing:-0.025em; text-align:center;'>"+ size.getSizeValue3() +"</td>";
|
|
|
+ htmlDesc += "<td style='position:relative; padding:20px 0; border-bottom:1px solid #ddd; font-weight:200; font-size:16px; letter-spacing:-0.025em; text-align:center;'>"+ size.getSizeValue4() +"</td>";
|
|
|
+ if( "하의".equals(size.getSizeTypecd())) {
|
|
|
+ htmlDesc += "<td style='position:relative; padding:20px 0; border-bottom:1px solid #ddd; font-weight:200; font-size:16px; letter-spacing:-0.025em; text-align:center;'>"+ size.getSizeValue5() +"</td>";
|
|
|
+ }
|
|
|
+ cnt ++;
|
|
|
+ }
|
|
|
+
|
|
|
+ htmlDesc += "</tbody>";
|
|
|
+ htmlDesc += "</table>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ htmlDesc += " </div>";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 8) 상세내용 - 상품필수정보
|
|
|
+ ShoplinkerGoods certInfo = shoplinkerDao.getCert(shoplinkerGoods);
|
|
|
+ if( null != certInfo) {
|
|
|
+ if( "G083_1".equals(certInfo.getCertTargetGb())) { // 인증대상
|
|
|
+
|
|
|
+ if( "".equals(certInfo.getCertNum())) {
|
|
|
+
|
|
|
+ htmlDesc += "<div class='st_required_box' style='margin-bottom:80px;'>";
|
|
|
+ htmlDesc += "<div class='st_area_kcl' style='color:#222;display:block; position:relative; min-height:160px; margin-top:100px; padding:40px 40px 40px 160px; box-sizing:border-box; background:#f5f5f5;'>";
|
|
|
+ htmlDesc += "<i class='st_ico_kcl' style='position:absolute;left:64px;top:50%;transform:translateY(-50%);z-index:2;background-image: url(/images/pc/ico_kcl.png);width: 32px;height: 50px;display: inline-block;vertical-align: middle;background-repeat: no-repeat;background-size: contain;background-position: 0% 0%;'></i>";
|
|
|
+ htmlDesc += "<p class='st_tit' style='margin-top:0;color:#222;font-size:16px;font-weight:300;line-height:1;letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += certInfo.getCertTargetNm() +"/"+ certInfo.getCertOrganName();
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "<p style='margin-top:20px; color:#222; font-size:13px; font-weight: 300; line-height:1; letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += certInfo.getCertDiv();
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "<p class='st_dot_info' style='color: #888888;position:relative;margin-top:20px;font-size:13px;font-weight:300;line-height:1;letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += "<span style='color: #888888 !important;background: #888888 !important;display: inline-block;width: 2px;height: 2px;position: relative;top: -4px;left: 0px;margin-right: 4px;'></span>";
|
|
|
+ htmlDesc += "해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.";
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ }else {
|
|
|
+ htmlDesc += "<div class='st_required_box' style='margin-bottom:80px;'>";
|
|
|
+ htmlDesc += "<div class='st_area_kcl' style='display:block; position:relative; min-height:160px; margin-top:100px; padding:40px 40px 40px 160px; box-sizing:border-box; background:#f5f5f5;'>";
|
|
|
+ htmlDesc += "<i class='st_ico_kcl' style='position:absolute;left:64px;top:50%;transform:translateY(-50%);z-index:2;background-image: url(/images/pc/ico_kcl.png);width: 32px;height: 50px;display: inline-block;vertical-align: middle;background-repeat: no-repeat;background-size: contain;background-position: 0% 0%;'></i>";
|
|
|
+ htmlDesc += "<p class='st_tit' style='margin-top:0;color:#222;font-size:16px;font-weight:300;line-height:1;letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += certInfo.getCertDiv() +"/"+ certInfo.getCertOrganName();
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "<p style='margin-top:20px; color:#222; font-size:13px; font-weight: 300; line-height:1; letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += "인증번호: "+ certInfo.getCertNum();
|
|
|
+ htmlDesc += "<a href='http://www.safetykorea.kr/search/searchPop?certNum=XX00000-0000' target='_blank' class='st_linktxt3' style='margin-left:20px; color:#888; font-weight:200; text-decoration:none !important;'>상세보기</a>";
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "<p class='st_dot_info' style='color: #888888;position:relative;margin-top:20px;font-size:13px;font-weight:300;line-height:1;letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += "<span style='color: #888888 !important;background: #888888 !important;display: inline-block;width: 2px;height: 2px;position: relative;top: -4px;left: 0px;margin-right: 4px;'></span>";
|
|
|
+ htmlDesc += "해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.";
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ }
|
|
|
+
|
|
|
+ }else if( "G083_3".equals(certInfo.getCertTargetGb())) { // 상세설명별도표기
|
|
|
+ htmlDesc += "<div class='st_required_box' style='margin-bottom:80px;'>";
|
|
|
+ htmlDesc += "<div class='st_area_kcl st_no-mark' style='display:block;position:relative;min-height:160px;margin-top:100px;padding:40px 40px 40px 160px;box-sizing:border-box;background:#f5f5f5;padding-left:65px;'>";
|
|
|
+ htmlDesc += "<p class='st_tit' style='margin-top:0;color:#222;font-size:16px;font-weight:300;line-height:1;letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += certInfo.getCertTargetNm();
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "<p style='margin-top:20px; color:#222; font-size:13px; font-weight: 300; line-height:1; letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += "제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.";
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "<p class='st_dot_info' style='color: #888888;position:relative;margin-top:20px;font-size:13px;font-weight:300;line-height:1;letter-spacing:-0.025em;'>";
|
|
|
+ htmlDesc += "<span style='color: #888888 !important;background: #888888 !important;display: inline-block;width: 2px;height: 2px;position: relative;top: -4px;left: 0px;margin-right: 4px;'></span>";
|
|
|
+ htmlDesc += "해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.";
|
|
|
+ htmlDesc += "</p>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ htmlDesc += "</div>";
|
|
|
+ }else {
|
|
|
+ // G083_2 - 인증대상아님
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return htmlDesc;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 상품등록 - 3. 품목(고시)정보
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ private int createGoodsNotiRegisterXml(ShoplinkerGoods shoplinkerGoods) throws IOException {
|
|
|
+
|
|
|
+ ShoplinkerGoods regMap = new ShoplinkerGoods();
|
|
|
+ regMap.setApiType("NOTI");
|
|
|
+ regMap.setApiSubUrl(env.getProperty("shoplinker.url.good_noti"));
|
|
|
+ regMap.setGoodsCd(shoplinkerGoods.getGoodsCd());
|
|
|
+ regMap.setRegNo(shoplinkerGoods.getRegNo());
|
|
|
+ regMap.setXmlPath(shoplinkerGoods.getXmlPath());
|
|
|
+ regMap.setDomainUrl(shoplinkerGoods.getDomainUrl());
|
|
|
+
|
|
|
+ int succCnt = 0;
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ Collection<ShoplinkerGoods> list = shoplinkerDao.getGoodsNotiList(shoplinkerGoods);
|
|
|
+
|
|
|
+ if(null != list ) {
|
|
|
+ if( 0 < list.size()) {
|
|
|
+
|
|
|
+ // xml 데이터 세팅
|
|
|
+ StringBuilder sbRequest = new StringBuilder();
|
|
|
+ sbRequest.append("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n");
|
|
|
+ sbRequest.append("<openMarket>\n");
|
|
|
+ sbRequest.append(" <goodsinfo>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" <customer_id>").append(shoplinkerGoods.getCustomerId()).append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <product_id />\n");
|
|
|
+
|
|
|
+ int cnt = 0;
|
|
|
+ for (ShoplinkerGoods map : list) {
|
|
|
+ if( 0 == cnt) {
|
|
|
+ sbRequest.append(" <partner_product_id>").append(map.getPartnerProductId()).append("</partner_product_id>\n");
|
|
|
+ sbRequest.append(" <lclass_id>").append(map.getLclassId()).append("</lclass_id>\n");
|
|
|
+ }
|
|
|
+ cnt ++;
|
|
|
+
|
|
|
+ sbRequest.append(" <item>\n");
|
|
|
+ sbRequest.append(" <item_seq>").append(map.getItemSeq()).append("</item_seq>\n");
|
|
|
+ sbRequest.append(" <item_info><![CDATA[").append(map.getItemInfo()).append("]]></item_info>\n");
|
|
|
+ sbRequest.append(" </item>\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ sbRequest.append(" </goodsinfo>\n");
|
|
|
+ sbRequest.append("</openMarket>\n");
|
|
|
+
|
|
|
+ // api 호출 및 결과 history 저장
|
|
|
+ succCnt = callGoodsRegApi(regMap , sbRequest, "goods");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }catch(Exception e) {
|
|
|
+ log.error("xml 생성오류 ", e);
|
|
|
+ regMap.setApiResult("error");
|
|
|
+ regMap.setApiMessage("xml 생성오류");
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(regMap);
|
|
|
+ }
|
|
|
+ return succCnt;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 상품등록 - 4. 인증정보
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ private int createCertRegisterXml(ShoplinkerGoods shoplinkerGoods) throws IOException {
|
|
|
+
|
|
|
+ ShoplinkerGoods regMap = new ShoplinkerGoods();
|
|
|
+ regMap.setApiType("CERT");
|
|
|
+ regMap.setApiSubUrl(env.getProperty("shoplinker.url.cert"));
|
|
|
+ regMap.setGoodsCd(shoplinkerGoods.getGoodsCd());
|
|
|
+ regMap.setRegNo(shoplinkerGoods.getRegNo());
|
|
|
+ regMap.setXmlPath(shoplinkerGoods.getXmlPath());
|
|
|
+ regMap.setDomainUrl(shoplinkerGoods.getDomainUrl());
|
|
|
+
|
|
|
+ int succCnt = 0;
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ ShoplinkerGoods map = shoplinkerDao.getCert(shoplinkerGoods);
|
|
|
+
|
|
|
+ if(null == map ) {
|
|
|
+ map = new ShoplinkerGoods();
|
|
|
+ map.setPartnerProductId(shoplinkerGoods.getGoodsCd());
|
|
|
+ map.setCertNo("");
|
|
|
+ map.setCertOrgan(".");
|
|
|
+ }
|
|
|
+
|
|
|
+ // xml 데이터 세팅
|
|
|
+ StringBuilder sbRequest = new StringBuilder();
|
|
|
+ sbRequest.append("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n");
|
|
|
+ sbRequest.append("<shoplinker>\n");
|
|
|
+ sbRequest.append(" <product>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" <customer_id>").append(shoplinkerGoods.getCustomerId()).append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <partner_product_id>").append(map.getPartnerProductId()).append("</partner_product_id>\n");
|
|
|
+ sbRequest.append(" <certinfo>\n");
|
|
|
+ sbRequest.append(" <cert>\n");
|
|
|
+
|
|
|
+ //cert_item 의 경우 인증코드 값이 있으면 'C011', 없으면 'C010'
|
|
|
+ if("".equals(map.getCertNo())){
|
|
|
+ sbRequest.append(" <cert_item>").append("C010").append("</cert_item>\n");
|
|
|
+ }else {
|
|
|
+ sbRequest.append(" <cert_item>").append("C011").append("</cert_item>\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ sbRequest.append(" <cert_organ><![CDATA[").append(map.getCertOrgan()).append("]]></cert_organ>\n");
|
|
|
+ sbRequest.append(" <cert_no><![CDATA[").append(map.getCertNo()).append("]]></cert_no>\n");
|
|
|
+ sbRequest.append(" </cert>\n");
|
|
|
+ sbRequest.append(" </certinfo>\n");
|
|
|
+ sbRequest.append(" </product>\n");
|
|
|
+ sbRequest.append("</shoplinker>\n");
|
|
|
+
|
|
|
+ // api 호출 및 결과 history 저장
|
|
|
+ succCnt = callGoodsRegApi(regMap , sbRequest, "cert");
|
|
|
+
|
|
|
+ }catch(Exception e) {
|
|
|
+ log.error("xml 생성오류 ", e);
|
|
|
+ regMap.setApiResult("error");
|
|
|
+ regMap.setApiMessage("xml 생성오류");
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(regMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ return succCnt;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 상품등록 - 5. 상품이미지정보
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ private int createImageRegisterXml(ShoplinkerGoods shoplinkerGoods) throws IOException {
|
|
|
+
|
|
|
+ ShoplinkerGoods regMap = new ShoplinkerGoods();
|
|
|
+ regMap.setApiType("IMAGE");
|
|
|
+ regMap.setApiSubUrl(env.getProperty("shoplinker.url.image"));
|
|
|
+ regMap.setGoodsCd(shoplinkerGoods.getGoodsCd());
|
|
|
+ regMap.setRegNo(shoplinkerGoods.getRegNo());
|
|
|
+ regMap.setXmlPath(shoplinkerGoods.getXmlPath());
|
|
|
+ regMap.setDomainUrl(shoplinkerGoods.getDomainUrl());
|
|
|
+
|
|
|
+ int succCnt = 0;
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ // 상품이미지정보
|
|
|
+ shoplinkerGoods.setExtmallImgYn("Y");
|
|
|
+ Collection<ShoplinkerGoods> list = shoplinkerDao.getGoodsImageList(shoplinkerGoods);
|
|
|
+
|
|
|
+ if(null != list) {
|
|
|
+
|
|
|
+ String imgUrl = "";
|
|
|
+ for (ShoplinkerGoods map : list) {
|
|
|
+ imgUrl = map.getSysImgNm();
|
|
|
+ // extmall_yn 이미지를 가져오되, 없는 경우 default 이미지를 가져온다.
|
|
|
+ if( "Y".equals(map.getExtmallImgYn()) && !"".equals(map.getSysImgNm())){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // xml 데이터 세팅
|
|
|
+ StringBuilder sbRequest = new StringBuilder();
|
|
|
+ sbRequest.append("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n");
|
|
|
+ sbRequest.append("<Shoplinker>\n");
|
|
|
+ sbRequest.append(" <product>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" <customer_id>").append(shoplinkerGoods.getCustomerId()).append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <partner_product_id>").append(shoplinkerGoods.getGoodsCd()).append("</partner_product_id>\n");
|
|
|
+ sbRequest.append(" <image_type><![CDATA[").append("URL").append("]]></image_type>\n");
|
|
|
+ sbRequest.append(" <image_info>\n");
|
|
|
+ sbRequest.append(" <image>\n");
|
|
|
+ sbRequest.append(" <image_kind><![CDATA[").append("IMG1").append("]]></image_kind>\n");
|
|
|
+
|
|
|
+ String img_url = env.getProperty("upload.goods.view");
|
|
|
+ if( img_url.toLowerCase().indexOf("http") < 0) {
|
|
|
+ img_url = img_url.replace("//image", "http://image");
|
|
|
+ }
|
|
|
+ sbRequest.append(" <image_content>").append(img_url+"/"+imgUrl).append("</image_content>\n");
|
|
|
+ sbRequest.append(" </image>\n");
|
|
|
+ sbRequest.append(" </image_info>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" </product>\n");
|
|
|
+ sbRequest.append("</Shoplinker>\n");
|
|
|
+
|
|
|
+ // api 호출 및 결과 history 저장
|
|
|
+ succCnt = callGoodsRegApi(regMap , sbRequest, "image");
|
|
|
+ }
|
|
|
+
|
|
|
+ }catch(Exception e) {
|
|
|
+ log.error("xml 생성오류 ", e);
|
|
|
+ regMap.setApiResult("error");
|
|
|
+ regMap.setApiMessage("xml 생성오류");
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(regMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ return succCnt;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커 상품등록 - 공통 api 호출 & 결과 확인
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ private int callGoodsRegApi(ShoplinkerGoods map, StringBuilder sbRequest, String fileNm) throws IOException {
|
|
|
+
|
|
|
+ int succCnt = 0;
|
|
|
+ com.gagaframework.shoplinker.domain.goods.result.Shoplinker shoplinkerResult;
|
|
|
+ com.gagaframework.shoplinker.domain.goods.result.ResultMessage resultMsg;
|
|
|
+
|
|
|
+ try {
|
|
|
+ GagaShoplinkertUtil shoplinkerUtil = new GagaShoplinkertUtil("MS949");
|
|
|
+
|
|
|
+ // XML 파일 생성
|
|
|
+ StringBuilder xmlFileName = new StringBuilder();
|
|
|
+ xmlFileName.append(fileNm+"_"+fileAddNm).append(".xml");
|
|
|
+ String xmlPath = GagaFileUtil.getConcatenationPath(map.getXmlPath(), xmlFileName.toString());
|
|
|
+ shoplinkerUtil.makeRequestXmlFile(sbRequest.toString(), xmlPath);
|
|
|
+ String xmlUrl = GagaFileUtil.getConcatenationPath(map.getDomainUrl(), xmlFileName.toString());
|
|
|
+
|
|
|
+ // API 호출 URL
|
|
|
+ String apiUrl = GagaShoplinkerConstants.API_DOMAIN + map.getApiSubUrl() + URLEncoder.encode(xmlUrl);
|
|
|
+
|
|
|
+ // API 호출결과
|
|
|
+ String responseXmlData = shoplinkerUtil.callShoplinkerApiByGet(apiUrl, "");
|
|
|
+
|
|
|
+ // response 결과
|
|
|
+ shoplinkerResult = (com.gagaframework.shoplinker.domain.goods.result.Shoplinker)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.goods.result.Shoplinker.class, responseXmlData);
|
|
|
+ resultMsg = shoplinkerResult.getResultMessage();
|
|
|
+
|
|
|
+ String slFolder = GagaFileUtil.getConcatenationPath(env.getProperty("shoplinker.xml.path"));
|
|
|
+ File slPath = new File(slFolder);
|
|
|
+
|
|
|
+ map.setXmlTxt(slPath.exists()+"\n"+xmlPath+"\n"+xmlUrl+"\n\n"+sbRequest.toString());
|
|
|
+ map.setApiProductId(resultMsg.getProductId());
|
|
|
+ map.setApiResult(resultMsg.getResult());
|
|
|
+ map.setApiMessage(resultMsg.getMessage());
|
|
|
+
|
|
|
+ if( "true".equals(resultMsg.getResult())){
|
|
|
+ succCnt = 1;
|
|
|
+
|
|
|
+ // 재고 단품 생성
|
|
|
+ if( "OPTION".equals(map.getApiType())) {
|
|
|
+ shoplinkerDao.insertStockOption(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 생성 파일삭제
|
|
|
+ // GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(map.getXmlPath(), xmlFileName.toString()));
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("error", e);
|
|
|
+ // 임시
|
|
|
+ StringBuilder xmlFileName = new StringBuilder();
|
|
|
+ xmlFileName.append(fileNm+"_"+fileAddNm).append(".xml");
|
|
|
+ String xmlPath = GagaFileUtil.getConcatenationPath(map.getXmlPath(), xmlFileName.toString());
|
|
|
+ String xmlUrl = GagaFileUtil.getConcatenationPath(map.getDomainUrl(), xmlFileName.toString());
|
|
|
+ String slFolder = GagaFileUtil.getConcatenationPath(env.getProperty("shoplinker.xml.path"));
|
|
|
+ File slPath = new File(slFolder);
|
|
|
+ map.setXmlTxt(slPath.exists()+"\n"+xmlPath+"\n"+xmlUrl+"\n\n"+sbRequest.toString());
|
|
|
+ //map.setXmlTxt(sbRequest.toString());
|
|
|
+ map.setApiResult("error");
|
|
|
+ map.setApiMessage("API 통신오류");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 전송이력 저장
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(map);
|
|
|
+
|
|
|
+ return succCnt;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 상품등록-상품 목록 건수
|
|
|
+ *
|
|
|
+ * @param getGoodsSendListCount
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public int getGoodsSendListCount(ShoplinkerSearch shoplinkerSearch) {
|
|
|
+ return shoplinkerDao.getGoodsSendListCount(shoplinkerSearch);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 상품등록-상품 목록
|
|
|
+ *
|
|
|
+ * @param getGoodsSendList
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public Collection<ShoplinkerGoods> getGoodsSendList(ShoplinkerSearch shoplinkerSearch) {
|
|
|
+ return shoplinkerDao.getGoodsSendList(shoplinkerSearch);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커주문수집-목록 건수
|
|
|
+ *
|
|
|
+ * @param getGoodsSendListCount
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public int getShoplinkerOrderListCount(ShoplinkerOrder shoplinkerOrder) {
|
|
|
+ return shoplinkerDao.getShoplinkerOrderListCount(shoplinkerOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커주문수집-목록
|
|
|
+ *
|
|
|
+ * @param getGoodsSendList
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public Collection<ShoplinkerOrder> getShoplinkerOrderList(ShoplinkerOrder shoplinkerOrder) {
|
|
|
+ return shoplinkerDao.getShoplinkerOrderList(shoplinkerOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커주문수집-상세
|
|
|
+ *
|
|
|
+ * @param
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 28
|
|
|
+ */
|
|
|
+ public ShoplinkerOrder getShoplinkerOrderInfo(ShoplinkerOrder shoplinkerOrder) {
|
|
|
+ return shoplinkerDao.getShoplinkerOrderInfo(shoplinkerOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커주문수집-주문수집등록 페이지별 호출
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ public GagaMap insertShoplinkerOrderStep1(ShoplinkerOrder shoplinkerOrder) throws IOException {
|
|
|
+ ShoplinkerSearch slkSearch = new ShoplinkerSearch();
|
|
|
+ slkSearch.setSid(shoplinkerOrder.getSid());
|
|
|
+ slkSearch.setRunStat("RUN");
|
|
|
+
|
|
|
+ // 파일명 뒤에 붙일 시간
|
|
|
+ fileAddNm = GagaDateUtil.getTodayDateTime();
|
|
|
+
|
|
|
+ int totalPage = 0;
|
|
|
+ int totalCount = 0;
|
|
|
+ int currentlyPage = 1;
|
|
|
+ int currListCount = 0;
|
|
|
+
|
|
|
+ // 1. 첫번째 호출
|
|
|
+ shoplinkerOrder.setOrderPageNo(currentlyPage);
|
|
|
+ GagaMap map = this.insertShoplinkerOrderStep1Xml(shoplinkerOrder);
|
|
|
+ totalPage = map.getInt("totalPage");
|
|
|
+ totalCount = map.getInt("totalCount");
|
|
|
+ currentlyPage = map.getInt("currentlyPage");
|
|
|
+ currListCount = map.getInt("currListCount");
|
|
|
+
|
|
|
+ slkSearch.setTxt(shoplinkerOrder.getApiStDate()+ " 총페이지: "+totalPage+ "("+totalCount+"건) || "+currentlyPage);
|
|
|
+ updateCallApiRunable(slkSearch);
|
|
|
+
|
|
|
+ if( currentlyPage < 1 ) currentlyPage = 1;
|
|
|
+ currentlyPage ++; // 두번째 호출 페이지 수
|
|
|
+
|
|
|
+ // 2. 페이지번호가 존재할 경우, n번째까지 호출(주문수집)
|
|
|
+ //totalPage = 2;
|
|
|
+ for( int i=currentlyPage; i<= totalPage; i++) {
|
|
|
+
|
|
|
+ slkSearch.setTxt("=>"+i);
|
|
|
+ updateCallApiRunable(slkSearch);
|
|
|
+
|
|
|
+ shoplinkerOrder.setOrderPageNo(i);
|
|
|
+ map = this.insertShoplinkerOrderStep1Xml(shoplinkerOrder);
|
|
|
+ currListCount += map.getInt("currListCount");
|
|
|
+ }
|
|
|
+
|
|
|
+ map.setInt("currListCount", currListCount);
|
|
|
+
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커주문수집-주문수집등록
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ public GagaMap insertShoplinkerOrderStep1Xml(ShoplinkerOrder shoplinkerOrder) throws IOException {
|
|
|
+
|
|
|
+ GagaMap returnMap = new GagaMap();
|
|
|
+ ShoplinkerGoods regMap = new ShoplinkerGoods();
|
|
|
+ regMap.setApiSubUrl(env.getProperty("shoplinker.url.order"));
|
|
|
+ regMap.setDomainUrl(shoplinkerOrder.getDomainUrl());
|
|
|
+
|
|
|
+ int totalPage = 0;
|
|
|
+ int currentlyPage = 0; // 샵링커 header 현재 호출된 페이지번호
|
|
|
+ int totalCount = 0; // 샵링커 header 총 주문건수
|
|
|
+ int currListCount = 0; // for문안 목록 건수 건건이
|
|
|
+ try {
|
|
|
+
|
|
|
+ // xml 데이터 세팅
|
|
|
+ String responseXmlData;
|
|
|
+ com.gagaframework.shoplinker.domain.orderlist.Shoplinker shoplinkerResult;
|
|
|
+
|
|
|
+ List<Order> rOrdList;
|
|
|
+ com.gagaframework.shoplinker.domain.orderlist.Header rHeader;
|
|
|
+ StringBuilder sbRequest;
|
|
|
+
|
|
|
+ sbRequest = new StringBuilder();
|
|
|
+ sbRequest.append("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n");
|
|
|
+ sbRequest.append("<Shoplinker>\n");
|
|
|
+ sbRequest.append(" <OrderInfo>\n");
|
|
|
+ sbRequest.append(" <Order>\n");
|
|
|
+
|
|
|
+ /*
|
|
|
+ sbRequest.append(" <customer_id>").append(shoplinkerOrder.getCustomerId()).append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <shoplinker_id><![CDATA[").append(shoplinkerOrder.getShoplinkerId()).append("]]></shoplinker_id>\n");
|
|
|
+ */
|
|
|
+ sbRequest.append(" <customer_id>").append("a0021915").append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <shoplinker_id><![CDATA[").append("yes2424").append("]]></shoplinker_id>\n");
|
|
|
+ sbRequest.append(" <order_flag>004</order_flag>\n");// 테스트용
|
|
|
+ sbRequest.append(" <st_date>").append(shoplinkerOrder.getApiStDate().replace("-", "")).append("</st_date>\n");
|
|
|
+ sbRequest.append(" <ed_date>").append(shoplinkerOrder.getApiStDate().replace("-", "")).append("</ed_date>\n");
|
|
|
+ sbRequest.append(" <page_no>").append(shoplinkerOrder.getOrderPageNo()).append("</page_no>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" </Order>\n");
|
|
|
+ sbRequest.append(" </OrderInfo>\n");
|
|
|
+ sbRequest.append("</Shoplinker>\n");
|
|
|
+ log.info("\n\n###################"+ sbRequest.toString());
|
|
|
+
|
|
|
+
|
|
|
+ GagaShoplinkertUtil shoplinkerUtil = new GagaShoplinkertUtil("MS949");
|
|
|
+
|
|
|
+ // XML 파일 생성
|
|
|
+ StringBuilder xmlFileName = new StringBuilder();
|
|
|
+ xmlFileName.append("order"+"_"+fileAddNm).append(".xml");
|
|
|
+ String xmlPath = GagaFileUtil.getConcatenationPath(shoplinkerOrder.getXmlPath(), xmlFileName.toString());
|
|
|
+ shoplinkerUtil.makeRequestXmlFile(sbRequest.toString(), xmlPath);
|
|
|
+ String xmlUrl = GagaFileUtil.getConcatenationPath(shoplinkerOrder.getDomainUrl(), xmlFileName.toString());
|
|
|
+
|
|
|
+ if (!"locd".equals(shoplinkerOrder.getProfiles())) { // 로컬이 아닐때
|
|
|
+ try {
|
|
|
+ // API 호출
|
|
|
+ responseXmlData = shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+regMap.getApiSubUrl()+URLEncoder.encode(xmlUrl), "");
|
|
|
+
|
|
|
+ // response 결과
|
|
|
+ shoplinkerResult = (com.gagaframework.shoplinker.domain.orderlist.Shoplinker)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.orderlist.Shoplinker.class, responseXmlData);
|
|
|
+ rHeader = shoplinkerResult.getHeader();
|
|
|
+ rOrdList = shoplinkerResult.getOrder();
|
|
|
+
|
|
|
+ // 수집정보 존재
|
|
|
+ if( null != rHeader ) {
|
|
|
+ totalCount = rHeader.getTotalCount();
|
|
|
+ totalPage = rHeader.getTotalPage();
|
|
|
+ currentlyPage = rHeader.getCurrentlyPage();
|
|
|
+ ShoplinkerOrder slOrder;
|
|
|
+
|
|
|
+ for(Order ord : rOrdList) {
|
|
|
+ slOrder = mapper.convertValue(ord, ShoplinkerOrder.class);
|
|
|
+ //slOrder.setOrderIfIdx(commonService.getNextSequence("SEQ_SHHOPLINKER_ORD"));
|
|
|
+ slOrder.setOrderIfIdx(shoplinkerDao.getNextOrderIfIdx());
|
|
|
+
|
|
|
+ currListCount ++;
|
|
|
+
|
|
|
+ //1. 샵링커 주문등록
|
|
|
+ try {
|
|
|
+ //***** 테스트 기간동안은 연락처 모두 가공 ************************//
|
|
|
+ slOrder.setOrderTel("011-0000-0000");
|
|
|
+ slOrder.setOrderCel("011-0000-0000");
|
|
|
+ slOrder.setReceiveTel("011-0000-0000");
|
|
|
+ slOrder.setReceiveCel("011-0000-0000");
|
|
|
+ //***** 테스트 기간동안은 연락처 모두 가공 ************************//
|
|
|
+
|
|
|
+ shoplinkerDao.insertShoplinkerOrder(slOrder);
|
|
|
+ }catch(Exception e) {
|
|
|
+ ShoplinkerGoods map = new ShoplinkerGoods();
|
|
|
+ String chkParams = "";
|
|
|
+ chkParams += "SHOPLINKER_ORDER_ID="+ord.getShoplinkerOrderId() +",MALL_ORDER_ID="+ord.getMallOrderId()
|
|
|
+ + ",ORDER_NAME="+ord.getOrderName() + ",ORDER_TEL="+ord.getOrderTel() + ",ORDER_CEL="+ord.getOrderCel()
|
|
|
+ + ",RECEIVE="+ord.getReceive() + ",RECEIVE_TEL="+ord.getReceiveTel() + ",RECEIVE_CEL="+ord.getReceiveCel()
|
|
|
+ + ",RECEIVE_ADDR="+ord.getReceiveAddr() + ",DELIVERY_MSG="+ord.getDeliveryMsg() + ",PRODUCT_NAME="+ord.getProductName()
|
|
|
+ + ",SKU="+ord.getSku() + ",SUPPLY_ID="+ord.getSupplyId() + ",DELIVERY="+ord.getDelivery() + ",ORDER_USER_ID="+ord.getOrderUserId()
|
|
|
+ + ",SCRSPIK_USE="+ord.getCrspikUse() + ",DEAL_NO="+ord.getDealNo() + ",ORDER_MAIN_KEY="+ord.getOrderMainKey()
|
|
|
+ + ",PAN_TYPE="+ord.getPanType() + ",SCHANNEL_TYPE="+ord.getChannelType() + ",SHIP_NO="+ord.getShipNo();
|
|
|
+ map.setApiType("ORDER");
|
|
|
+ map.setXmlTxt(chkParams);
|
|
|
+ map.setApiResult("error");
|
|
|
+ map.setApiMessage("샵링커 주문생성 오류");
|
|
|
+
|
|
|
+ // 오류이력 저장
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ log.debug("Shoplinker API Call: success");
|
|
|
+ log.debug("responseXmlData {}", responseXmlData);
|
|
|
+ }else {
|
|
|
+ // 수집정보 존재안함.
|
|
|
+ com.gagaframework.shoplinker.domain.goods.result.Shoplinker orderFailResult;
|
|
|
+ com.gagaframework.shoplinker.domain.goods.result.ResultMessage orderFailResultMsg;
|
|
|
+ orderFailResult = (com.gagaframework.shoplinker.domain.goods.result.Shoplinker)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.goods.result.Shoplinker.class, responseXmlData);
|
|
|
+ orderFailResultMsg = orderFailResult.getResultMessage();
|
|
|
+
|
|
|
+ ShoplinkerGoods map = new ShoplinkerGoods();
|
|
|
+ map.setApiType("ORDER");
|
|
|
+ map.setXmlTxt(responseXmlData);
|
|
|
+ map.setApiResult(orderFailResultMsg.getResult());
|
|
|
+ map.setApiMessage(shoplinkerOrder.getApiStDate() + " => "+orderFailResultMsg.getMessage());
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("error", e);
|
|
|
+ ShoplinkerGoods map = new ShoplinkerGoods();
|
|
|
+ map.setApiType("ORDER");
|
|
|
+ map.setXmlTxt(sbRequest.toString());
|
|
|
+ map.setApiResult("error");
|
|
|
+ map.setApiMessage("API 통신오류 =>"+StringUtils.abbreviate(e.getMessage(), 0 , 120));
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ // 테스트용
|
|
|
+ xmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/0409/order_real_"+shoplinkerOrder.getOrderPageNo()+".xml";
|
|
|
+ xmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/order_time.xml";
|
|
|
+
|
|
|
+ try {
|
|
|
+ // API 호출
|
|
|
+ responseXmlData = testOrderStr(); // shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+regMap.getApiSubUrl()+URLEncoder.encode(xmlUrl), "");
|
|
|
+ // shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+regMap.getApiSubUrl()+URLEncoder.encode(xmlUrl), "");
|
|
|
+ //testOrderStr();
|
|
|
+
|
|
|
+ // response 결과
|
|
|
+ shoplinkerResult = (com.gagaframework.shoplinker.domain.orderlist.Shoplinker)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.orderlist.Shoplinker.class, responseXmlData);
|
|
|
+ rHeader = shoplinkerResult.getHeader();
|
|
|
+ rOrdList = shoplinkerResult.getOrder();
|
|
|
+
|
|
|
+ // 수집정보 존재
|
|
|
+ if( null != rHeader ) {
|
|
|
+ totalCount = rHeader.getTotalCount();
|
|
|
+ totalPage = rHeader.getTotalPage();
|
|
|
+ currentlyPage = rHeader.getCurrentlyPage();
|
|
|
+ ShoplinkerOrder slOrder;
|
|
|
+
|
|
|
+ for(Order ord : rOrdList) {
|
|
|
+ slOrder = mapper.convertValue(ord, ShoplinkerOrder.class);
|
|
|
+ //slOrder.setOrderIfIdx(commonService.getNextSequence("SEQ_SHHOPLINKER_ORD"));
|
|
|
+ slOrder.setOrderIfIdx(shoplinkerDao.getNextOrderIfIdx());
|
|
|
+ currListCount ++;
|
|
|
+
|
|
|
+ //1. 샵링커 주문등록
|
|
|
+ try {
|
|
|
+ //***** 테스트 기간동안은 연락처 모두 가공 ************************//
|
|
|
+ slOrder.setOrderTel("011-0000-0000");
|
|
|
+ slOrder.setOrderCel("011-0000-0000");
|
|
|
+ slOrder.setReceiveTel("011-0000-0000");
|
|
|
+ slOrder.setReceiveCel("011-0000-0000");
|
|
|
+ //***** 테스트 기간동안은 연락처 모두 가공 ************************//
|
|
|
+
|
|
|
+ shoplinkerDao.insertShoplinkerOrder(slOrder);
|
|
|
+ }catch(Exception e) {
|
|
|
+ ShoplinkerGoods map = new ShoplinkerGoods();
|
|
|
+ String chkParams = "";
|
|
|
+ chkParams += "SHOPLINKER_ORDER_ID="+ord.getShoplinkerOrderId() +",MALL_ORDER_ID="+ord.getMallOrderId()
|
|
|
+ + ",ORDER_NAME="+ord.getOrderName() + ",ORDER_TEL="+ord.getOrderTel() + ",ORDER_CEL="+ord.getOrderCel()
|
|
|
+ + ",RECEIVE="+ord.getReceive() + ",RECEIVE_TEL="+ord.getReceiveTel() + ",RECEIVE_CEL="+ord.getReceiveCel()
|
|
|
+ + ",RECEIVE_ADDR="+ord.getReceiveAddr() + ",DELIVERY_MSG="+ord.getDeliveryMsg() + ",PRODUCT_NAME="+ord.getProductName()
|
|
|
+ + ",SKU="+ord.getSku() + ",SUPPLY_ID="+ord.getSupplyId() + ",DELIVERY="+ord.getDelivery() + ",ORDER_USER_ID="+ord.getOrderUserId()
|
|
|
+ + ",SCRSPIK_USE="+ord.getCrspikUse() + ",DEAL_NO="+ord.getDealNo() + ",ORDER_MAIN_KEY="+ord.getOrderMainKey()
|
|
|
+ + ",PAN_TYPE="+ord.getPanType() + ",SCHANNEL_TYPE="+ord.getChannelType() + ",SHIP_NO="+ord.getShipNo();
|
|
|
+ map.setApiType("ORDER");
|
|
|
+ map.setXmlTxt(chkParams);
|
|
|
+ map.setApiResult("error");
|
|
|
+ map.setApiMessage("샵링커 주문생성 오류");
|
|
|
+
|
|
|
+ // 오류이력 저장
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ log.debug("Shoplinker API Call: success");
|
|
|
+ log.debug("responseXmlData {}", responseXmlData);
|
|
|
+ }else {
|
|
|
+ // 수집정보 존재안함.
|
|
|
+ com.gagaframework.shoplinker.domain.goods.result.Shoplinker orderFailResult;
|
|
|
+ com.gagaframework.shoplinker.domain.goods.result.ResultMessage orderFailResultMsg;
|
|
|
+ orderFailResult = (com.gagaframework.shoplinker.domain.goods.result.Shoplinker)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.goods.result.Shoplinker.class, responseXmlData);
|
|
|
+ orderFailResultMsg = orderFailResult.getResultMessage();
|
|
|
+
|
|
|
+ ShoplinkerGoods map = new ShoplinkerGoods();
|
|
|
+ map.setApiType("ORDER");
|
|
|
+ map.setXmlTxt(responseXmlData);
|
|
|
+ map.setApiResult(orderFailResultMsg.getResult());
|
|
|
+ map.setApiMessage(shoplinkerOrder.getApiStDate() + " => "+orderFailResultMsg.getMessage());
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("error", e);
|
|
|
+ ShoplinkerGoods map = new ShoplinkerGoods();
|
|
|
+ map.setApiType("ORDER");
|
|
|
+ map.setXmlTxt(sbRequest.toString());
|
|
|
+ map.setApiResult("error");
|
|
|
+ map.setApiMessage("API 통신오류 =>"+StringUtils.abbreviate(e.getMessage(), 0 , 120));
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ returnMap.setString("RESULT_TYPE", "TRUE");
|
|
|
+
|
|
|
+ // 생성 파일삭제
|
|
|
+ GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(shoplinkerOrder.getXmlPath(), xmlFileName.toString()));
|
|
|
+
|
|
|
+ }catch(Exception e) {
|
|
|
+ log.error("xml 생성오류 ", e);
|
|
|
+ returnMap.setString("RESULT_TYPE", "error");
|
|
|
+ returnMap.setString("RESULT_MSG", "xml 생성오류");
|
|
|
+ }
|
|
|
+
|
|
|
+ returnMap.setInt("currListCount", currListCount);
|
|
|
+ returnMap.setInt("totalCount", totalCount); // 총 주문건수
|
|
|
+ returnMap.setInt("totalPage", totalPage);
|
|
|
+ returnMap.setInt("currentlyPage", currentlyPage);
|
|
|
+
|
|
|
+ return returnMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커주문수집-제휴몰 주문등록
|
|
|
+ *
|
|
|
+ * @param shoplinkerOrder
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ public void insertShoplinkerOrderStep2(ShoplinkerOrder shoplinkerOrder) throws IOException {
|
|
|
+
|
|
|
+ // 1. 외부몰 미등록 목록 가져옴
|
|
|
+ Collection<ShoplinkerOrder> slkOrdList = shoplinkerDao.getShoplinkerRegExtmallList();
|
|
|
+
|
|
|
+ ExtmallOrder extmallOrder;
|
|
|
+ GagaMap addrMap; //주소 분리
|
|
|
+ GagaMap checkMap;
|
|
|
+ for(ShoplinkerOrder slOrder : slkOrdList) {
|
|
|
+
|
|
|
+ extmallOrder = new ExtmallOrder();
|
|
|
+ extmallOrder.setVendorId(TscConstants.VendorId.SHOPLINKER.value()); // 샵링커
|
|
|
+ extmallOrder.setUploadStat(TscConstants.ExtmallUploadStat.WAIT.value()); // 대기
|
|
|
+ extmallOrder.setUploadGb("S"); // 업로드구분(샵링커:S, 엑셀:E)
|
|
|
+ extmallOrder.setRegNo(shoplinkerOrder.getRegNo());
|
|
|
+ extmallOrder.setBasicParams(slOrder); // 기본세팅파람
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ extmallOrder.setDetailParams(slOrder); // 상세파람
|
|
|
+
|
|
|
+ if( null != slOrder.getDisPriceCoupon() && !slOrder.getDisPriceCoupon().isEmpty()) {
|
|
|
+ extmallOrder.setCpnDcAmt(Integer.parseInt(slOrder.getDisPriceCoupon()));
|
|
|
+ }else {
|
|
|
+ extmallOrder.setCpnDcAmt(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ if( null != slOrder.getDisPricePoint() && !slOrder.getDisPricePoint().isEmpty()) {
|
|
|
+ extmallOrder.setPntDcAmt(Integer.parseInt(slOrder.getDisPricePoint()));
|
|
|
+ }else {
|
|
|
+ extmallOrder.setPntDcAmt(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // validation 체크
|
|
|
+ checkMap = getRegOrderValidation(slOrder);
|
|
|
+ if( "FAIL".equals(checkMap.getString("RESULT_MSG"))) {
|
|
|
+ extmallOrder.setUploadStat(checkMap.getString("UploadStat")); //실패
|
|
|
+ extmallOrder.setUploadFailCd(checkMap.getString("UploadFailCd"));
|
|
|
+ extmallOrder.setUploadFailReason(checkMap.getString("UploadFailReason")); // 실패사유
|
|
|
+
|
|
|
+ }else {
|
|
|
+ // 주소분리
|
|
|
+ addrMap = this.returnChangeAddr(slOrder.getReceiveAddr());
|
|
|
+ extmallOrder.setRecipBaseAddr(addrMap.getString("addrBase"));
|
|
|
+ extmallOrder.setRecipDtlAddr(addrMap.getString("addrDtl"));
|
|
|
+ }
|
|
|
+
|
|
|
+ orderOcmDao.insertExtmallOrder(extmallOrder);
|
|
|
+
|
|
|
+ }catch(Exception e) {
|
|
|
+ log.error("TsaShoplinkerService.insertShoplinkerOrderStep2 Error : "+e);
|
|
|
+ extmallOrder.setUploadStat(TscConstants.ExtmallUploadStat.FAIL.value()); //실패
|
|
|
+ extmallOrder.setUploadFailCd(TscConstants.ExtmallUploadFailStat.ETC.value());
|
|
|
+ extmallOrder.setUploadFailReason("제휴몰 등록오류 :: "+StringUtils.abbreviate(e.getMessage(), 0 , 120)); // 실패사유
|
|
|
+ orderOcmDao.insertExtmallOrder(extmallOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 제휴몰등록여부 업데이트
|
|
|
+ shoplinkerDao.updateShoplinkerOrder(slOrder);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커주문수집-제휴몰 대기상태건들 실패로 업데이트(오류로인해 성공/실패 처리가 안된건이 있을경우 대비용)
|
|
|
+ *
|
|
|
+ * @param
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ public void updateShoplinkerExtmallWaitList() throws IOException {
|
|
|
+ shoplinkerDao.updateShoplinkerExtmallWaitList();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 샵링커주문수집-validation 체크
|
|
|
+ *
|
|
|
+ * @param shoplinkerOrder
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ public GagaMap getRegOrderValidation(ShoplinkerOrder slOrder) {
|
|
|
+
|
|
|
+ GagaMap rMap = new GagaMap();
|
|
|
+ rMap.setString("RESULT_MSG", "FAIL");
|
|
|
+ rMap.setString("UploadStat", TscConstants.ExtmallUploadStat.FAIL.value());
|
|
|
+
|
|
|
+ // 테스트기간은 송장완료된 목록으로 가져옴
|
|
|
+ /*if( !"000".equals(slOrder.getOrderFlag()) && !"007".equals(slOrder.getOrderFlag()) ) {
|
|
|
+ rMap.setString("UploadFailCd", TsaConstants.ExtmallUploadFailStat.ETC.value());
|
|
|
+ rMap.setString("UploadFailReason", "주문타입 실패. 주문타입:"+slOrder.getOrderFlag()+"(정산확정:002/송장등록:003/송장전송완료:004)");
|
|
|
+ return rMap;
|
|
|
+ }*/
|
|
|
+
|
|
|
+ if( null == slOrder.getReceiveAddr() || slOrder.getReceiveAddr().isEmpty()) {
|
|
|
+ rMap.setString("UploadFailCd", TscConstants.ExtmallUploadFailStat.ETC.value());
|
|
|
+ rMap.setString("UploadFailReason", "주소정보 없음.");
|
|
|
+ return rMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ rMap.setString("RESULT_MSG", "SUCCESS");
|
|
|
+
|
|
|
+ return rMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 제휴몰 주문수집 상세
|
|
|
+ *
|
|
|
+ * @param
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 28
|
|
|
+ */
|
|
|
+ public ExtmallOrder getExtmallOrderInfo(String extmallOrder) {
|
|
|
+ return shoplinkerDao.getExtmallOrderInfo(extmallOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 송장전송-전송
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ public void createShoplinkerInvoiceXml(ShoplinkerInvoice shoplinkerInvoice) throws IOException {
|
|
|
+ // 파일명 뒤에 붙일 시간
|
|
|
+ fileAddNm = GagaDateUtil.getTodayDateTime();
|
|
|
+
|
|
|
+ ShoplinkerGoods apiHstMap = new ShoplinkerGoods();
|
|
|
+
|
|
|
+ ShoplinkerGoods regMap = new ShoplinkerGoods();
|
|
|
+ regMap.setApiType("INVOICE");
|
|
|
+ regMap.setApiSubUrl(env.getProperty("shoplinker.url.invoice"));
|
|
|
+ regMap.setRegNo(0);
|
|
|
+ regMap.setXmlPath(shoplinkerInvoice.getXmlPath());
|
|
|
+ regMap.setDomainUrl(shoplinkerInvoice.getDomainUrl());
|
|
|
+
|
|
|
+ StringBuilder sbRequest;
|
|
|
+ com.gagaframework.shoplinker.domain.invoice.ResultMessage resultMsg;
|
|
|
+
|
|
|
+ Collection<ShoplinkerInvoice> sendList = shoplinkerDao.getShoplinkerInvoiceOrdDtlList(shoplinkerInvoice);
|
|
|
+
|
|
|
+ if( null != sendList && !sendList.isEmpty()) {
|
|
|
+ for(ShoplinkerInvoice info : sendList) {
|
|
|
+ apiHstMap = new ShoplinkerGoods();
|
|
|
+
|
|
|
+ // xml 데이터 세팅
|
|
|
+ sbRequest = new StringBuilder();
|
|
|
+ sbRequest.append("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n");
|
|
|
+ sbRequest.append("<Shoplinker>\n");
|
|
|
+ sbRequest.append(" <Delivery>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" <customer_id>").append(shoplinkerInvoice.getCustomerId()).append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <order_id>").append(info.getAgentOrderId()).append("</order_id>\n");
|
|
|
+ sbRequest.append(" <delivery_name><![CDATA[").append(info.getDeliveryName()).append("]]></delivery_name>\n");
|
|
|
+ sbRequest.append(" <delivery_invoice><![CDATA[").append(info.getDeliveryInvoice()).append("]]></delivery_invoice>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" </Delivery>\n");
|
|
|
+ sbRequest.append("</Shoplinker>\n");
|
|
|
+
|
|
|
+ // api 호출 및 결과 history 저장
|
|
|
+ try {
|
|
|
+
|
|
|
+ GagaShoplinkertUtil shoplinkerUtil = new GagaShoplinkertUtil("MS949");
|
|
|
+
|
|
|
+ // XML 파일 생성
|
|
|
+ StringBuilder xmlFileName = new StringBuilder();
|
|
|
+ xmlFileName.append("invoice_"+info.getOrdDtlNo()+"_"+fileAddNm).append(".xml");
|
|
|
+ String xmlPath = GagaFileUtil.getConcatenationPath(shoplinkerInvoice.getXmlPath(), xmlFileName.toString());
|
|
|
+ shoplinkerUtil.makeRequestXmlFile(sbRequest.toString(), xmlPath);
|
|
|
+ String xmlUrl = GagaFileUtil.getConcatenationPath(shoplinkerInvoice.getDomainUrl(), xmlFileName.toString());
|
|
|
+
|
|
|
+ // API 호출
|
|
|
+ String apiUrl = GagaShoplinkerConstants.API_DOMAIN + regMap.getApiSubUrl() + URLEncoder.encode(xmlUrl);
|
|
|
+ String responseXmlData = shoplinkerUtil.callShoplinkerApiByGet(apiUrl, "");
|
|
|
+
|
|
|
+ log.info(shoplinkerInvoice.getApiType()+" ####xmlUrl "+xmlUrl);
|
|
|
+ log.info(shoplinkerInvoice.getApiType()+" ####apiUrl "+apiUrl);
|
|
|
+
|
|
|
+ // response 결과
|
|
|
+ resultMsg = (com.gagaframework.shoplinker.domain.invoice.ResultMessage)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.invoice.ResultMessage.class, responseXmlData);
|
|
|
+
|
|
|
+ apiHstMap.setApiType("INVOICE");
|
|
|
+ apiHstMap.setXmlTxt(sbRequest.toString());
|
|
|
+ apiHstMap.setOrdDtlNo(info.getOrdDtlNo());
|
|
|
+ apiHstMap.setApiResult(resultMsg.getResult());
|
|
|
+ apiHstMap.setApiMessage(resultMsg.getMessage());
|
|
|
+
|
|
|
+ // 생성 파일삭제
|
|
|
+ GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(shoplinkerInvoice.getXmlPath(), xmlFileName.toString()));
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("error", e);
|
|
|
+ apiHstMap.setApiType("INVOICE");
|
|
|
+ apiHstMap.setXmlTxt(sbRequest.toString());
|
|
|
+ apiHstMap.setOrdDtlNo(info.getOrdDtlNo());
|
|
|
+ apiHstMap.setApiResult("error");
|
|
|
+ apiHstMap.setApiMessage("API 통신오류");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 전송이력 저장
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(apiHstMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 송장전송-전송 (엑셀용)
|
|
|
+ *
|
|
|
+ * @param shoplinkerGoods
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2021. 5. 20
|
|
|
+ */
|
|
|
+ /*********************************************************************************************
|
|
|
+ public void createShoplinkerInvoiceXml(Collection<GagaMap> ecxelGoodsList, ShoplinkerInvoice shoplinkerInvoice) throws IOException {
|
|
|
+ // 파일명 뒤에 붙일 시간
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmss");
|
|
|
+ fileAddNm = sdf.format(cal.getTime());
|
|
|
+
|
|
|
+ ShoplinkerGoods apiHstMap = new ShoplinkerGoods();
|
|
|
+
|
|
|
+ GagaMap returnMap = new GagaMap();
|
|
|
+ ShoplinkerGoods regMap = new ShoplinkerGoods();
|
|
|
+ regMap.setApiType("INVOICE");
|
|
|
+ regMap.setApiSubUrl(env.getProperty("shoplinker.url.invoice"));
|
|
|
+ regMap.setRegNo(shoplinkerInvoice.getRegNo());
|
|
|
+ regMap.setXmlPath(shoplinkerInvoice.getXmlPath());
|
|
|
+ regMap.setDomainUrl(shoplinkerInvoice.getDomainUrl());
|
|
|
+
|
|
|
+ StringBuilder sbRequest;
|
|
|
+ com.gagaframework.shoplinker.domain.invoice.ResultMessage resultMsg_tmp;
|
|
|
+
|
|
|
+ for (GagaMap gagaMap : ecxelGoodsList) {
|
|
|
+ if( !"".equals(gagaMap.getString("ordNo").trim())) {
|
|
|
+ shoplinkerInvoice.setOrdNo(gagaMap.getInt("ordNo"));
|
|
|
+
|
|
|
+ Collection<ShoplinkerInvoice> list = shoplinkerDao.getShoplinkerInvoiceOrdDtlList(shoplinkerInvoice);
|
|
|
+ for(ShoplinkerInvoice info : list) {
|
|
|
+ apiHstMap = new ShoplinkerGoods();
|
|
|
+
|
|
|
+ // xml 데이터 세팅
|
|
|
+ sbRequest = new StringBuilder();
|
|
|
+ sbRequest.append("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n");
|
|
|
+ sbRequest.append("<Shoplinker>\n");
|
|
|
+ sbRequest.append(" <Delivery>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" <customer_id>").append(shoplinkerInvoice.getCustomerId()).append("</customer_id>\n");
|
|
|
+ sbRequest.append(" <order_id>").append(info.getAgentOrderId()).append("</order_id>\n");
|
|
|
+ sbRequest.append(" <delivery_name><![CDATA[").append(info.getDeliveryName()).append("]]></delivery_name>\n");
|
|
|
+ sbRequest.append(" <delivery_invoice><![CDATA[").append(info.getDeliveryInvoice()).append("]]></delivery_invoice>\n");
|
|
|
+
|
|
|
+ sbRequest.append(" </Delivery>\n");
|
|
|
+ sbRequest.append("</Shoplinker>\n");
|
|
|
+
|
|
|
+ // api 호출 및 결과 history 저장
|
|
|
+ try {
|
|
|
+
|
|
|
+ GagaShoplinkertUtil shoplinkerUtil = new GagaShoplinkertUtil("MS949");
|
|
|
+
|
|
|
+ // XML 파일 생성
|
|
|
+ StringBuilder xmlFileName = new StringBuilder();
|
|
|
+ xmlFileName.append("invoice_"+info.getOrdDtlNo()+"_"+fileAddNm).append(".xml");
|
|
|
+ String xmlPath = GagaFileUtil.getConcatenationPath(shoplinkerInvoice.getXmlPath(), xmlFileName.toString());
|
|
|
+ shoplinkerUtil.makeRequestXmlFile(sbRequest.toString(), xmlPath);
|
|
|
+ String xmlUrl = GagaFileUtil.getConcatenationPath(shoplinkerInvoice.getDomainUrl(), xmlFileName.toString());
|
|
|
+
|
|
|
+ // API 호출
|
|
|
+ xmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/invoice.xml";
|
|
|
+ String apiUrl = GagaShoplinkerConstants.API_DOMAIN + regMap.getApiSubUrl() + URLEncoder.encode(xmlUrl);
|
|
|
+ String responseXmlData = shoplinkerUtil.callShoplinkerApiByGet(apiUrl, "");
|
|
|
+
|
|
|
+ log.info(shoplinkerInvoice.getApiType()+" ####xmlUrl "+xmlUrl);
|
|
|
+ log.info(shoplinkerInvoice.getApiType()+" ####apiUrl "+apiUrl);
|
|
|
+
|
|
|
+ // response 결과
|
|
|
+ com.style24.admin.support.util.ResultMessage22 resultMsg;
|
|
|
+ resultMsg = (com.style24.admin.support.util.ResultMessage22)shoplinkerUtil.unmarshal(com.style24.admin.support.util.ResultMessage22.class, responseXmlData);
|
|
|
+ System.out.println(" ##### invoice2 : "+resultMsg);
|
|
|
+ System.out.println(" ##### invoice3 : "+resultMsg.getResult());
|
|
|
+ System.out.println(" ##### invoice4 : "+resultMsg.getMessage());
|
|
|
+ System.out.println(" ##### invoice5 : "+resultMsg.getId());
|
|
|
+
|
|
|
+ //resultMsg = (com.gagaframework.shoplinker.domain.invoice.ResultMessage)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.invoice.ResultMessage.class, responseXmlData);
|
|
|
+ apiHstMap.setApiType("INVOICE");
|
|
|
+ apiHstMap.setXmlTxt(sbRequest.toString());
|
|
|
+ apiHstMap.setOrdDtlNo(info.getOrdDtlNo());
|
|
|
+ apiHstMap.setApiResult(resultMsg.getResult());
|
|
|
+ apiHstMap.setApiMessage(resultMsg.getMessage());
|
|
|
+
|
|
|
+ // 생성 파일삭제
|
|
|
+ GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(shoplinkerInvoice.getXmlPath(), xmlFileName.toString()));
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("error", e);
|
|
|
+ apiHstMap.setApiType("INVOICE");
|
|
|
+ apiHstMap.setXmlTxt(sbRequest.toString());
|
|
|
+ apiHstMap.setOrdDtlNo(info.getOrdDtlNo());
|
|
|
+ apiHstMap.setApiResult("error");
|
|
|
+ apiHstMap.setApiMessage("API 통신오류");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 전송이력 저장
|
|
|
+ shoplinkerDao.insertShoplinerApiHst(apiHstMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ *******************************************************************************************/
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 송장전송-목록 건수
|
|
|
+ *
|
|
|
+ * @param getGoodsSendListCount
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public int getSendInvoiceListCount(ShoplinkerInvoice shoplinkerInvoice) {
|
|
|
+ return shoplinkerDao.getSendInvoiceListCount(shoplinkerInvoice);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 송장전송-목록
|
|
|
+ *
|
|
|
+ * @param getGoodsSendList
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public Collection<ShoplinkerInvoice> getSendInvoiceList(ShoplinkerInvoice shoplinkerInvoice) {
|
|
|
+ return shoplinkerDao.getSendInvoiceList(shoplinkerInvoice);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 재고전송-목록 건수
|
|
|
+ *
|
|
|
+ * @param getStockListCount
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public int getStockListCount(ShoplinkerSearch shoplinkerSearch) {
|
|
|
+ return shoplinkerDao.getStockListCount(shoplinkerSearch);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 재고전송-목록
|
|
|
+ *
|
|
|
+ * @param getStockListList
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public Collection<ShoplinkerGoods> getStockListList(ShoplinkerSearch shoplinkerSearch) {
|
|
|
+ return shoplinkerDao.getStockListList(shoplinkerSearch);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 제휴몰 주문등록 주소분리
|
|
|
+ *
|
|
|
+ * @param addrStr
|
|
|
+ * @return
|
|
|
+ * @author jmh
|
|
|
+ * @since 2020. 5. 21
|
|
|
+ */
|
|
|
+ public GagaMap returnChangeAddr(String addrStr) {
|
|
|
+ GagaMap rtnMap = new GagaMap();
|
|
|
+
|
|
|
+ String tmpStr = "";
|
|
|
+ String addrBase = "";
|
|
|
+ String addrDtl = "";
|
|
|
+
|
|
|
+ if( -1 < addrStr.indexOf(" ")) {
|
|
|
+ // 공백 있음!
|
|
|
+ String[] addr = addrStr.split(" ");
|
|
|
+ if( addrStr.getBytes().length <= 100) {
|
|
|
+ addrBase = addr[0];
|
|
|
+ addrDtl = addrStr.replace(addr[0], "").trim();
|
|
|
+ }else {
|
|
|
+
|
|
|
+ for( int i=0; i< addr.length; i++) {
|
|
|
+ tmpStr = addrBase + addr[i];
|
|
|
+ if( 100 < tmpStr.getBytes().length) {
|
|
|
+ break;
|
|
|
+ }else {
|
|
|
+ addrBase += addr[i]+" ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ addrBase = addrBase.trim();
|
|
|
+ addrDtl = addrStr.replace(addrBase, "").trim();
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ // 공백 없음! 무작위로 자르기!!
|
|
|
+ if( addrStr.getBytes().length <= 100) {
|
|
|
+ addrBase = addrStr;
|
|
|
+ addrDtl = null;
|
|
|
+ }else {
|
|
|
+
|
|
|
+ tmpStr = addrStr.substring(0, addrStr.length()/2);
|
|
|
+ if( 100 < tmpStr.getBytes().length ) {
|
|
|
+ tmpStr = tmpStr.substring(0, tmpStr.length()/2);
|
|
|
+ }
|
|
|
+ // 숫자를 기준으로 자름
|
|
|
+ for (char c : tmpStr.toCharArray()) {
|
|
|
+ if (Character.isDigit(c)) {
|
|
|
+ break;
|
|
|
+ }else {
|
|
|
+ addrBase += c;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ addrBase = addrBase.trim();
|
|
|
+ addrDtl = addrStr.replace(addrBase, "").trim();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ rtnMap.put("addrBase", addrBase);
|
|
|
+ rtnMap.put("addrDtl", addrDtl);
|
|
|
+
|
|
|
+ return rtnMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 테스트데이터
|
|
|
+ private String testOrderStr() {
|
|
|
+ // 성공 "<partner_product_id>NNW13QPM69</partner_product_id>\r\n"
|
|
|
+ // "<sku_match_code><![CDATA[12112927-3]]></sku_match_code>\r\n"
|
|
|
+ // 실패 "<partner_product_id>MNM0NZNN40</partner_product_id>\r\n"
|
|
|
+ // "<sku_match_code><![CDATA[10727258-2]]></sku_match_code>\r\n"
|
|
|
+ String bbb = "<?xml version=\"1.0\" encoding=\"euc-kr\"?>"
|
|
|
+ + "<Shoplinker>\r\n"
|
|
|
+ + "<header>\r\n"
|
|
|
+ + "<total_count>1</total_count>\r\n"
|
|
|
+ + "<total_page>1</total_page>\r\n"
|
|
|
+ + "<currently_page>1</currently_page>\r\n"
|
|
|
+ + "<currently_count>1</currently_count>\r\n"
|
|
|
+ + "</header>\r\n"
|
|
|
+
|
|
|
+ + "<order>\r\n"
|
|
|
+ + "<shoplinker_order_id>1234-9</shoplinker_order_id>\r\n"
|
|
|
+ + "<mall_order_id><![CDATA[1234-9]]></mall_order_id>\r\n"
|
|
|
+ + "<mall_name><![CDATA[(주)현대홈쇼핑]]></mall_name>\r\n"
|
|
|
+ + "<baesong_status><![CDATA[송장전송완료]]></baesong_status>\r\n"
|
|
|
+ + "<order_name><![CDATA[조민혜]]></order_name>\r\n"
|
|
|
+ + "<order_tel><![CDATA[010-1234-5678]]></order_tel>\r\n"
|
|
|
+ + "<order_cel><![CDATA[010-1234-5678]]></order_cel>\r\n"
|
|
|
+ + "<order_email><![CDATA[]]></order_email>\r\n"
|
|
|
+ + "<receive><![CDATA[조민혜]]></receive>\r\n"
|
|
|
+ + "<receive_tel><![CDATA[010-1234-5678]]></receive_tel>\r\n"
|
|
|
+ + "<receive_cel><![CDATA[010-1234-5678]]></receive_cel>\r\n"
|
|
|
+ + "<receive_zipcode><![CDATA[21387]]></receive_zipcode>\r\n"
|
|
|
+ + "<receive_addr><![CDATA[인천 부평구 부흥로로로 1234]]></receive_addr>\r\n"
|
|
|
+ + "<baesong_type><![CDATA[쇼핑몰확인요망]]></baesong_type>\r\n"
|
|
|
+ + "<baesong_bi>0</baesong_bi>\r\n"
|
|
|
+ + "<delivery_msg><![CDATA[조심조심]]></delivery_msg>\r\n"
|
|
|
+ + "<order_product_id>2118602667</order_product_id>\r\n"
|
|
|
+ + "<shoplinker_product_id>prd143809490</shoplinker_product_id>\r\n"
|
|
|
+ + "<partner_product_id>MNM0NZNN40</partner_product_id>\r\n"
|
|
|
+ + "<product_name><![CDATA[[나이키 조던 키즈] 윙스MA-1 재킷B NNW13QPM69 (주니어)]]></product_name>\r\n"
|
|
|
+ + "<quantity>1</quantity>\r\n"
|
|
|
+ + "<order_price>47600</order_price>\r\n"
|
|
|
+ + "<sale_price>47600</sale_price>\r\n"
|
|
|
+ + "<supply_price>36176</supply_price>\r\n"
|
|
|
+ + "<sku><![CDATA[NA/160]]></sku>\r\n"
|
|
|
+ + "<orderdate>20210623132721</orderdate>\r\n"
|
|
|
+ + "<order_reg_date>20210623132721</order_reg_date>\r\n"
|
|
|
+ + "<delivery_invoice>339382561300</delivery_invoice>\r\n"
|
|
|
+ + "<order_flag>004</order_flag>\r\n"
|
|
|
+ + "<seller_id>hs009583</seller_id>\r\n"
|
|
|
+ + "<only_sku><![CDATA[]]></only_sku>\r\n"
|
|
|
+ + "<add_sku><![CDATA[]]></add_sku>\r\n"
|
|
|
+ + "<mall_id><![CDATA[APISHOP_0015]]></mall_id>\r\n"
|
|
|
+ + "<dis_price_mall><![CDATA[]]></dis_price_mall>\r\n"
|
|
|
+ + "<dis_price_seller><![CDATA[]]></dis_price_seller>\r\n"
|
|
|
+ + "<dis_price_coupon><![CDATA[]]></dis_price_coupon>\r\n"
|
|
|
+ + "<dis_price_point><![CDATA[]]></dis_price_point>\r\n"
|
|
|
+ + "<distribution_delivery><![CDATA[001]]></distribution_delivery>\r\n"
|
|
|
+ + "<sku_match_code><![CDATA[10727258-2]]></sku_match_code>\r\n"
|
|
|
+ + "<sku_barcode><![CDATA[]]></sku_barcode>\r\n"
|
|
|
+ + "<order_main_key><![CDATA[]]></order_main_key>\r\n"
|
|
|
+ + "<order_customs_number><![CDATA[]]></order_customs_number>\r\n"
|
|
|
+ + "<order_input_type><![CDATA[001]]></order_input_type>\r\n"
|
|
|
+ + "<supply_id><![CDATA[]]></supply_id>\r\n"
|
|
|
+ + "<delivery><![CDATA[delv0094]]></delivery>\r\n"
|
|
|
+ + "<order_user_id><![CDATA[]]></order_user_id>\r\n"
|
|
|
+ + "<crspik_use><![CDATA[]]></crspik_use>\r\n"
|
|
|
+ + "<ship_no>20210129292734</ship_no>\r\n"
|
|
|
+ + "<pan_type><![CDATA[]]></pan_type>\r\n"
|
|
|
+ + "<exchange_order_yn></exchange_order_yn>\r\n"
|
|
|
+ + "<channel_type>현대Hmall</channel_type>\r\n"
|
|
|
+ + "<ship_rsv_date></ship_rsv_date>\r\n"
|
|
|
+ + "</order>\r\n"
|
|
|
+
|
|
|
+ + "</Shoplinker>\r\n";
|
|
|
+ return bbb;
|
|
|
+ }
|
|
|
+}
|