jmh hace 4 años
padre
commit
071eb7ebb9

+ 21 - 0
src/main/java/com/style24/admin/biz/dao/TsaShoplinkerDao.java

@@ -209,6 +209,17 @@ public interface TsaShoplinkerDao {
 	 */
 	Collection<ShoplinkerOrder> getShoplinkerRegExtmallList();
 
+	/**
+	 * 제휴몰 대기상태건들 실패로 업데이트(오류로인해 성공/실패 처리가 안된건이 있을경우 대비용)
+	 *
+	 * @param
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 31
+	 */
+	void updateShoplinkerExtmallWaitList();
+
+
 	/**
 	 * 송장전송-전송 목록 건수
 	 *
@@ -239,6 +250,16 @@ public interface TsaShoplinkerDao {
 	 */
 	Collection<ShoplinkerInvoice> getShoplinkerInvoiceOrdDtlList(ShoplinkerInvoice shoplinkerInvoice);
 
+	/**
+	 * 재고-단품 등록
+	 *
+	 * @param shoplinkerGoods
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	void insertStockOption(ShoplinkerGoods shoplinkerGoods);
+
 	/**
 	 * 재고전송-목록 건수
 	 *

+ 38 - 26
src/main/java/com/style24/admin/biz/service/TsaOcmService.java

@@ -16,6 +16,7 @@ import com.style24.admin.biz.dao.TsaOcmDao;
 import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.env.TsaConstants.ExtmallUploadFailStat;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.service.TscKakaotalkService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Extmall;
@@ -41,6 +42,9 @@ public class TsaOcmService {
     @Autowired
     private TscMessageByLocale message;
 
+    @Autowired
+	private TscKakaotalkService kakaotalkService;
+
     @Autowired
 	private Environment env;
 
@@ -373,32 +377,40 @@ public class TsaOcmService {
 
 		}
 
-		// 8. 알림톡발송 (임시 히스토리 쌓음.)
-		if( !"style".equals(env.getProperty("spring.profiles.active").toLowerCase())){
-    		ExtmallOrder testNoti = new ExtmallOrder();
-    		testNoti.setExtmallId(order.getExtmallId());
-    		testNoti.setExtmallOrderId(order.getExtmallOrderId());
-    		if( "ALL_FAIL".equals(result.getString("sendNotiType"))) {
-    			// 전체실패 알림톡발송
-    			testNoti.setSku("미할당 전체품절 > 실패 총 "+result.getString("failCnt")+"건 / 재고실패 "+result.getString("stockFailCnt")+"건 ("+result.getString("failGoods")+")");
-    		}else if( "ALL_SUCCESS".equals(result.getString("sendNotiType"))) {
-    			// 전체성공 알림톡발송
-    			testNoti.setSku("전체성공");
-    		}else if( "PART_SUCCESS".equals(result.getString("sendNotiType"))) {
-
-    			if( !"".equals(result.getString("failGoods"))) {
-    				// 부분성공 알림톡발송
-	    			testNoti.setSku("부분결품 품절 > 실패 총 "+result.getString("failCnt")+"건 / 재고실패 "+result.getString("stockFailCnt")+"건 ("+result.getString("failGoods")+")");
-    			}else {
-    				// 전체성공알림톡
-	    			testNoti.setSku("성공 > 실패한건이 있지만, 재고로인한건이 아님.");
-    			}
-
-    		}else {
-    			// "NOT" 알림톡 발송안함. 이미 발송한건
-    			testNoti.setSku("알림톡 발송안함. 동일수집건 ");
-    		}
-    		ocmDao.insertTestNotiInfo(testNoti);
+		// 8. 알림톡발송 (임시 히스토리 쌓음. 로컬,개발인경우만)
+		if( "locd".equals(env.getProperty("spring.profiles.active").toLowerCase()) || "tsit".equals(env.getProperty("spring.profiles.active").toLowerCase())){
+			// Y:제휴몰에서발송, N:자사몰에서발송
+			if( "N".equals(order.getCnclsmsSendYn())) {
+
+				ExtmallOrder testNoti = new ExtmallOrder();
+	    		testNoti.setExtmallId(order.getExtmallId());
+	    		testNoti.setExtmallOrderId(order.getExtmallOrderId());
+	    		if( "ALL_FAIL".equals(result.getString("sendNotiType"))) {
+	    			// 알림톡발송-전체실패
+	    			testNoti.setCnclAllSoldoutYn("Y");
+	    			testNoti.setSku("미할당 전체품절 > 실패 총 "+result.getString("failCnt")+"건 / 재고실패 "+result.getString("stockFailCnt")+"건 ("+result.getString("failGoods")+")");
+
+	    		}else if( "ALL_SUCCESS".equals(result.getString("sendNotiType"))) {
+	    			// 전체성공
+	    			testNoti.setSku("전체성공");
+	    		}else if( "PART_SUCCESS".equals(result.getString("sendNotiType"))) {
+
+	    			if( !"".equals(result.getString("failGoods"))) {
+	    				// 부분성공 알림톡발송
+	    				testNoti.setCnclAllSoldoutYn("N");
+		    			testNoti.setSku("부분결품 품절 > 실패 총 "+result.getString("failCnt")+"건 / 재고실패 "+result.getString("stockFailCnt")+"건 ("+result.getString("failGoods")+")");
+	    			}else {
+	    				// 전체성공
+		    			testNoti.setSku("성공 > 실패한건이 있지만, 재고로인한건이 아님.");
+	    			}
+
+	    		}else {
+	    			// "NOT" 알림톡 발송안함. 이미 발송한건
+	    			testNoti.setSku("알림톡 발송안함. 동일수집건 ");
+	    		}
+	    		ocmDao.insertTestNotiInfo(testNoti);
+
+			}
 		}
     }
 

+ 56 - 30
src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java

@@ -27,7 +27,7 @@ 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 com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -56,6 +56,9 @@ public class TsaShoplinkerService {
 	@Autowired
 	private TsaOcmDao ocmDao;
 
+	@Autowired
+	private ObjectMapper mapper;
+
 	private String fileAddNm; // 유저번호_년월일시분초
 
 
@@ -866,15 +869,11 @@ public class TsaShoplinkerService {
 			shoplinkerUtil.makeRequestXmlFile(sbRequest.toString(), xmlPath);
 			String xmlUrl = GagaFileUtil.getConcatenationPath(map.getDomainUrl(), xmlFileName.toString());
 
-			// API 호출
+			// API 호출 URL
 			String apiUrl = GagaShoplinkerConstants.API_DOMAIN + map.getApiSubUrl() + URLEncoder.encode(xmlUrl);
-						// 테스트 URL
-						//apiUrl = GagaShoplinkerConstants.API_DOMAIN+"/Product/attribute_prod_insert.php?iteminfo_url="+"http://ts5000.ipdisk.co.kr:8999/shoplinker/goods_reg/option_1.xml";
-			String responseXmlData = shoplinkerUtil.callShoplinkerApiByGet(apiUrl, "");
 
-			log.info(map.getApiType()+" ####xmlUrl "+xmlUrl);
-			log.info(map.getApiType()+" ####apiUrl "+apiUrl);
-			//log.error(map.getApiType()+" ####responseXmlData n"+responseXmlData);
+			// 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);
@@ -886,10 +885,15 @@ public class TsaShoplinkerService {
 
 			if( "true".equals(resultMsg.getResult())){
 				succCnt = 1;
+
+				// 재고 단품 생성
+				if( "OPTION".equals(map.getApiType())) {
+					shoplinkerDao.insertStockOption(map);
+				}
 			}
 
 			// 생성 파일삭제
-			//GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(map.getXmlPath(), xmlFileName.toString()));
+			GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(map.getXmlPath(), xmlFileName.toString()));
 
 		} catch (Exception e) {
 			log.error("error", e);
@@ -1087,16 +1091,15 @@ public class TsaShoplinkerService {
 					rHeader = shoplinkerResult.getHeader();
 					rOrdList = shoplinkerResult.getOrder();
 
-					// 수집정보 없음
+					// 수집정보 존재
 					if( null != rHeader ) {
 						totalCount = rHeader.getTotalCount();
 						totalPage = rHeader.getTotalPage();
 						currentlyPage = rHeader.getCurrentlyPage();
-						ShoplinkerOrder slOrder = null;
+						ShoplinkerOrder slOrder;
 
 						for(Order ord : rOrdList) {
-							slOrder = new ShoplinkerOrder();
-							slOrder.setAllParams(ord);
+							slOrder = mapper.convertValue(ord, ShoplinkerOrder.class);
 							slOrder.setOrderIfIdx(commonService.getNextSequence("SEQ_SHHOPLINKER_ORD"));
 							currListCount ++;
 
@@ -1127,12 +1130,17 @@ public class TsaShoplinkerService {
 						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("false");
-						map.setApiMessage(shoplinkerOrder.getApiStDate() + " => 처리건 없음");
+						map.setApiResult(orderFailResultMsg.getResult());
+						map.setApiMessage(shoplinkerOrder.getApiStDate() + " => "+orderFailResultMsg.getMessage());
 						shoplinkerDao.insertShoplinerApiHst(map);
 					}
 
@@ -1149,10 +1157,11 @@ public class TsaShoplinkerService {
 			}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 = shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+regMap.getApiSubUrl()+URLEncoder.encode(xmlUrl), "");
+					responseXmlData = testOrderStr(); // shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+regMap.getApiSubUrl()+URLEncoder.encode(xmlUrl), "");
 									// shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+regMap.getApiSubUrl()+URLEncoder.encode(xmlUrl), "");
 									//testOrderStr();
 
@@ -1161,16 +1170,15 @@ public class TsaShoplinkerService {
 					rHeader = shoplinkerResult.getHeader();
 					rOrdList = shoplinkerResult.getOrder();
 
-					// 수집정보 없음
+					// 수집정보 존재
 					if( null != rHeader ) {
 						totalCount = rHeader.getTotalCount();
 						totalPage = rHeader.getTotalPage();
 						currentlyPage = rHeader.getCurrentlyPage();
-						ShoplinkerOrder slOrder = null;
+						ShoplinkerOrder slOrder;
 
 						for(Order ord : rOrdList) {
-							slOrder = new ShoplinkerOrder();
-							slOrder.setAllParams(ord);
+							slOrder = mapper.convertValue(ord, ShoplinkerOrder.class);
 							slOrder.setOrderIfIdx(commonService.getNextSequence("SEQ_SHHOPLINKER_ORD"));
 							currListCount ++;
 
@@ -1201,12 +1209,17 @@ public class TsaShoplinkerService {
 						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("false");
-						map.setApiMessage(shoplinkerOrder.getApiStDate() + " => 처리건 없음");
+						map.setApiResult(orderFailResultMsg.getResult());
+						map.setApiMessage(shoplinkerOrder.getApiStDate() + " => "+orderFailResultMsg.getMessage());
 						shoplinkerDao.insertShoplinerApiHst(map);
 					}
 
@@ -1224,7 +1237,7 @@ public class TsaShoplinkerService {
 			returnMap.setString("RESULT_TYPE", "TRUE");
 
 			// 생성 파일삭제
-			// GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(shoplinkerOrder.getXmlPath(), xmlFileName.toString()));
+			GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(shoplinkerOrder.getXmlPath(), xmlFileName.toString()));
 
 		}catch(Exception e) {
 			log.error("xml 생성오류 ", e);
@@ -1310,6 +1323,18 @@ public class TsaShoplinkerService {
 		}
 	}
 
+	/**
+	 * 샵링커주문수집-제휴몰 대기상태건들 실패로 업데이트(오류로인해 성공/실패 처리가 안된건이 있을경우 대비용)
+	 *
+	 * @param
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	public void updateShoplinkerExtmallWaitList() throws IOException {
+		shoplinkerDao.updateShoplinkerExtmallWaitList();
+	}
+
 	/**
 	 * 샵링커주문수집-validation 체크
 	 *
@@ -1324,9 +1349,10 @@ public class TsaShoplinkerService {
 		rMap.setString("RESULT_MSG", "FAIL");
 		rMap.setString("UploadStat", TsaConstants.ExtmallUploadStat.FAIL.value());
 
-		/*if( null != slOrder.getDeliveryInvoice() && !slOrder.getDeliveryInvoice().isEmpty()) {
-		    rMap.setString("UploadFailCd", "G022_70");
-			rMap.setString("UploadFailReason", "송장번호가 존재하는 주문건입니다. 제휴몰 주문업로드 불가");
+		// 테스트기간은 송장완료된 목록으로 가져옴
+		/*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;
 		}*/
 
@@ -1675,8 +1701,8 @@ public class TsaShoplinkerService {
 				+ "</header>\r\n"
 
 				+ "<order>\r\n"
-				+ "<shoplinker_order_id>1234-6</shoplinker_order_id>\r\n"
-				+ "<mall_order_id><![CDATA[1234-6]]></mall_order_id>\r\n"
+				+ "<shoplinker_order_id>1234-7</shoplinker_order_id>\r\n"
+				+ "<mall_order_id><![CDATA[1234-7]]></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"
@@ -1700,8 +1726,8 @@ public class TsaShoplinkerService {
 				+ "<sale_price>47600</sale_price>\r\n"
 				+ "<supply_price>36176</supply_price>\r\n"
 				+ "<sku><![CDATA[NA/160]]></sku>\r\n"
-				+ "<orderdate>20210622132721</orderdate>\r\n"
-				+ "<order_reg_date>20210622132721</order_reg_date>\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"

+ 44 - 26
src/main/java/com/style24/admin/biz/web/TsaShoplinkerController.java

@@ -3,11 +3,10 @@ package com.style24.admin.biz.web;
 import java.io.File;
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +24,7 @@ import org.springframework.web.servlet.ModelAndView;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.excel.GagaExcelUtil;
 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.rest.server.GagaResponse;
@@ -38,6 +38,7 @@ import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Extmall;
 import com.style24.persistence.domain.ShoplinkerGoods;
 import com.style24.persistence.domain.ShoplinkerInvoice;
@@ -162,7 +163,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 				shoplinkerService.saveCallApiRunable(slkSearch);
 
 				// 2. 엑셀데이터 확인 및 xml 관련 위치 확인
-				String[] goodsNames = {"goodsCd", "supplyCompCd"};
+				String[] goodsNames = {"goodsCd"};
 				ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, shoplinkerGoods.getExcelFileNm()), 0, goodsNames, 0);
 
 				if (ecxelGoodsList != null && ecxelGoodsList.size() > EXCEL_ROW_COUNT) {
@@ -231,10 +232,14 @@ public class TsaShoplinkerController extends TsaBaseController {
 		mav.addObject("extmallList", ocmService.getExtmallList(extmall));
 
 		// 업로드상태 콤보박스 목록
-		mav.addObject("uploadStatList", rendererService.getCommonCodeList("G021"));
+		CommonCode commoncode = new CommonCode();
+		commoncode.setCdGb("G021");
+		commoncode.setUseYn("Y");
+		mav.addObject("uploadStatList", rendererService.getCommonCodeList(commoncode));
 
 		// 업로드실패사유 콤보박스 목록
-		mav.addObject("uploadFailList", rendererService.getCommonCodeList("G022"));
+		commoncode.setCdGb("G022");
+		mav.addObject("uploadFailList", rendererService.getCommonCodeList(commoncode));
 
 		mav.setViewName("shoplinker/ShoplinkerOrderForm");
 
@@ -347,6 +352,9 @@ public class TsaShoplinkerController extends TsaBaseController {
 				shoplinkerService.updateCallApiRunable(slkSearch);
 				ocmService.createShoplinkerOrder("S");
 
+				// 5. 제휴몰 대기상태건들 실패로 업데이트(대기상태건들이 없는게 맞지만 오류로인해 성공/실패 처리가 안된건이 있을경우 대비용)
+				shoplinkerService.updateShoplinkerExtmallWaitList();
+
 			}catch (Exception e) {
 
 				log.error("TsaShoplinkerController.orderReceiveList => error \n"+e);
@@ -667,11 +675,6 @@ public class TsaShoplinkerController extends TsaBaseController {
 	@ResponseBody
 	public GagaResponse apiTest3(@RequestBody ShoplinkerGoods shoplinkerGoods) throws Exception {
 
-		Calendar cal = Calendar.getInstance();
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
-		String datestr = sdf.format(cal.getTime());
-		System.err.println("### 조회시작:: "+datestr);
-
 		int i=0;
 		System.out.println("############### test api ###############");
 		try {
@@ -809,32 +812,47 @@ System.out.println("####### : "+re.getResult());
 			com.gagaframework.shoplinker.domain.orderlist.Header rHeader;
 			com.gagaframework.shoplinker.domain.orderlist.Shoplinker shoplinkerOrdResult;
 
-			testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order_real.xml";
+			testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/order_time.xml";
 			responseXmlData =   shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+"/Order/orderlist.php?iteminfo_url="+testXmlUrl, "");
+
+
 			shoplinkerOrdResult = (com.gagaframework.shoplinker.domain.orderlist.Shoplinker)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.orderlist.Shoplinker.class, responseXmlData);
 			rHeader = shoplinkerOrdResult.getHeader();
 			rOrdList = shoplinkerOrdResult.getOrder();
+			if( null == rHeader) {
+				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();
+				System.out.println("\n### 주문실패 stat :: "+orderFailResultMsg.getResult());
+				System.out.println("### 주문실패 msg :: "+orderFailResultMsg.getMessage());
+
+			}else {
+				System.out.println("\n\n\n### 7.주문 result1 :: "+responseXmlData);
+
+				//System.out.println(" url chk:: "+GagaShoplinkerConstants.API_DOMAIN+"/Order/orderlist.php?iteminfo_url="+ testXmlUrl);
+				System.out.println("### 7.주문 result2 :: "+rHeader.toString());
+				System.out.println("### 7.주문 result22 :: "+rHeader.getTotalCount()); // 1233
+				System.out.println("### 7.주문 result23 :: "+rHeader.getTotalPage()); //3
+				System.out.println("### 7.주문 result24 :: "+rHeader.getCurrentlyPage()); //1
+				System.out.println("### 7.주문 result24 :: "+rHeader.getCurrentlyCount()); //500
+
+				//ExtmallOrder extmallOrder = mapper.convertValue(gagaMap, ExtmallOrder.class);
+				ShoplinkerOrder slOrder;
+				for(Order ord : rOrdList) {
+					slOrder = mapper.convertValue(ord, ShoplinkerOrder.class);
+					System.out.println("HMJ :: 00 "+slOrder);
+					System.out.println("HMJ :: 11 "+slOrder.getOrderFlag());
+				}
 
-			System.out.println(" url chk:: "+GagaShoplinkerConstants.API_DOMAIN+"/Order/orderlist.php?iteminfo_url="+ testXmlUrl);
+			}
 
-			//System.out.println("\n\n\n### 7.주문 result1 :: "+responseXmlData);
-			System.out.println("### 7.주문 result2 :: "+rHeader.toString());
-			System.out.println("### 7.주문 result22 :: "+rHeader.getTotalCount()); // 1233
-			System.out.println("### 7.주문 result23 :: "+rHeader.getTotalPage()); //3
-			System.out.println("### 7.주문 result24 :: "+rHeader.getCurrentlyPage()); //1
-			System.out.println("### 7.주문 result24 :: "+rHeader.getCurrentlyCount()); //500
-			System.out.println("### 7.주문 result order size :: "+rOrdList.size()); //500
 */
-			//99 주문수집 목록확인 끝
 
-			cal = Calendar.getInstance();
-			datestr = sdf.format(cal.getTime());
-			System.err.println(i+"개 ### 조회종료:: "+datestr);
+			//99 주문수집 목록확인 끝
 
 		}catch(Exception e) {
-			cal = Calendar.getInstance();
-			datestr = sdf.format(cal.getTime());
-			System.err.println(i+"개 ### 조회종료:: "+datestr);
 			System.out.println("error :: "+e);
 		}
 		return super.ok("");

+ 2 - 1
src/main/java/com/style24/admin/support/env/TsaConstants.java

@@ -111,7 +111,8 @@ public class TsaConstants {
 		WAIT("G021_00"),				// 대기
 		CHECK("G021_20"),				// 검증
 		SUCC("G021_30"),				// 성공
-		FAIL("G021_40");				// 실패
+		FAIL("G021_40"),				// 실패
+		NOT("G021_50");					// 미매핑
 
 		private String value;
 

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

@@ -69,6 +69,8 @@ public class ExtmallOrder extends TscBaseDomain {
 	private String supplyCompCd;		// 공급업체코드
 	private Integer totalOrdAmt;		// 총 주문금액
 	private Integer stockFailHstCnt;	// 주문업로드시 재고실패이력 cnt
+	private String cnclsmsSendYn; 		// 취소문자발송여부(Y:제휴몰에서발송, N:자사몰에서발송)
+	private String cnclAllSoldoutYn; 	// 전체품절취소여부
 
 	private String stDate;
 	private String edDate;

+ 7 - 78
src/main/java/com/style24/persistence/domain/ShoplinkerOrder.java

@@ -1,6 +1,5 @@
 package com.style24.persistence.domain;
 
-import com.gagaframework.shoplinker.domain.orderlist.Order;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 
@@ -19,7 +18,7 @@ public class ShoplinkerOrder extends TscBaseDomain {
 	// Request
 	private String customerId; 					// 고객사 코드(샵링커 가입코드)
 	private String shoplinkerId;
-	private String orderFlag;  //※ 테스트시에는 발주확인주문(007로 하고, 실제 적용시에는 000으로 교체)
+	private String orderFlag; 					// 주문타입 - 일반[신규OR발주]:000/ 발주확인:007/ 정산확정: 002/ 송장등록:003/ 송장전송완료:004
 	private String stDate;
 	private String edDate;
 	private Integer orderPageNo;
@@ -86,23 +85,20 @@ public class ShoplinkerOrder extends TscBaseDomain {
 	private String channelType; 				// 채널구분
 	private String shipRsvDate; 				// 배송예정일
 
-
 	private String profiles;
 	private String xmlPath;
 	private String domainUrl;					// 이미지 domain url
 	private String apiSubUrl;					// api url 하위 경로
 
-
 	private String vendorId;
 	private String extmallId;
 	private String extmallNm;
-
-	private String dtGb;			// 일자검색타입
-	private String uploadStat; 		// 외부몰 주문등록 업로드 상태
-	private String uploadFailCd;	// 외부몰 주문등록 업로드 실패코드
-	private String uploadFailReason;	// 외부몰 주문등록 업로드 실패사유 msg
-	private Integer ordNo;				// 주문번호(주문)
-	private Integer delvAddrSq;			// 배송지일련번호(배송지)
+	private String dtGb;						// 일자검색타입
+	private String uploadStat; 					// 외부몰 주문등록 업로드 상태
+	private String uploadFailCd;				// 외부몰 주문등록 업로드 실패코드
+	private String uploadFailReason;			// 외부몰 주문등록 업로드 실패사유 msg
+	private Integer ordNo;						// 주문번호(주문)
+	private Integer delvAddrSq;					// 배송지일련번호(배송지)
 	private String goodsCd;
 	private String optCd;
 
@@ -122,71 +118,4 @@ public class ShoplinkerOrder extends TscBaseDomain {
 
 	}
 
-	public void setAllParams(Order ord) {
-		//this.orderIfIdx = ord.getOrderIfIdx();
-		this.shoplinkerOrderId = ord.getShoplinkerOrderId();
-		this.mallOrderId = ord.getMallOrderId();
-		this.mallName = ord.getMallName();
-		this.baesongStatus = ord.getBaesongStatus();
-		this.orderName = ord.getOrderName();
-		this.orderTel = ord.getOrderTel();
-		this.orderCel = ord.getOrderCel();
-		this.orderEmail = ord.getOrderEmail();
-		this.receive = ord.getReceive();
-		this.receiveTel = ord.getReceiveTel();
-		this.receiveCel = ord.getReceiveCel();
-		this.receiveZipcode = ord.getReceiveZipcode();
-		this.receiveAddr = ord.getReceiveAddr();
-		this.baesongType = ord.getBaesongType();
-		this.baesongBi = ord.getBaesongBi();
-		this.deliveryMsg = ord.getDeliveryMsg();
-		this.orderProductId = ord.getOrderProductId();
-		this.shoplinkerProductId = ord.getShoplinkerProductId();
-		this.partnerProductId = ord.getPartnerProductId();
-		this.productName = ord.getProductName();
-		this.quantity = ord.getQuantity();
-		this.orderPrice = ord.getOrderPrice();
-		this.salePrice = ord.getSalePrice();
-		this.supplyPrice = ord.getSupplyPrice();
-		this.sku = ord.getSku();
-		this.orderdate = ord.getOrderdate();
-		this.orderRegDate = ord.getOrderRegDate();
-		this.deliveryInvoice = ord.getDeliveryInvoice();
-		this.orderSeq = ord.getOrderSeq();
-		this.totalCount = ord.getTotalCount();
-		this.totalPage = ord.getTotalPage();
-		this.totalStandardCount = ord.getTotalStandardCount();
-		this.currentlyPage = ord.getCurrentlyPage();
-		this.currentlyCount = ord.getCurrentlyCount();
-		this.sellerId = ord.getSellerId();
-		this.onlySku = ord.getOnlySku();
-		this.addSku = ord.getAddSku();
-		this.mallId = ord.getMallId();
-		this.disPriceMall = ord.getDisPriceMall();
-		this.disPriceSeller = ord.getDisPriceSeller();
-		this.disPriceCoupon = ord.getDisPriceCoupon();
-		this.disPricePoint = ord.getDisPricePoint();
-		this.distributionDelivery = ord.getDistributionDelivery();
-		this.skuMatchCode = ord.getSkuMatchCode();
-		this.skuBarcode = ord.getSkuBarcode();
-		this.orderCustomsNumber = ord.getOrderCustomsNumber();
-		this.orderInputType = ord.getOrderInputType();
-		this.supplyId = ord.getSupplyId();
-		this.delivery = ord.getDelivery();
-		this.orderUserId = ord.getOrderUserId();
-		this.crspikUse = ord.getCrspikUse();
-		this.shipNo = ord.getShipNo();
-		this.dealNo = ord.getDealNo();
-		this.exchangeOrderYn = ord.getExchangeOrderYn();
-		this.orderMainKey = ord.getOrderMainKey();
-		this.panType = ord.getPanType();
-		this.channelType = ord.getChannelType();
-		this.shipRsvDate = ord.getShipRsvDate();
-	}
-
-
-	/*
-	 * @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) private
-	 * String[] conditionList;
-	 */
 }

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

@@ -191,6 +191,8 @@
 			, IFNULL(A.RECIP_DTL_ADDR, '') AS RECIP_DTL_ADDR
 			, SUM(A.DELV_FEE) AS DELV_FEE
 			, SUM(A.ORD_AMT) AS REAL_ORD_SUM_AMT
+			, (SELECT CNCLSMS_SEND_YN FROM TB_EXTMALL S WHERE S.VENDOR_ID = A.VENDOR_ID
+				AND S.EXTMALL_ID = A.EXTMALL_ID AND S.USE_YN = 'Y') AS CNCLSMS_SEND_YN
 		FROM TB_EXTMALL_ORDER_UPLOAD A
 		WHERE A.UPLOAD_STAT = 'G021_00'
 		AND RECIP_BASE_ADDR IS NOT NULL AND RECIP_BASE_ADDR != ''

+ 48 - 15
src/main/java/com/style24/persistence/mybatis/shop/TsaShoplinker.xml

@@ -289,7 +289,7 @@
 
 	<!-- 상품등록-상품 목록 건수 -->
 	<select id="getGoodsSendListCount" parameterType="ShoplinkerSearch" resultType="int">
-		/* ShoplinkerGoods.getGoodsSendListCount */
+		/* TsaShoplinkerDao.getGoodsSendListCount */
 		SELECT COUNT(1) FROM
 		(
 			SELECT
@@ -306,7 +306,7 @@
 
 	<!-- 상품등록-상품 목록 -->
 	<select id="getGoodsSendList" parameterType="ShoplinkerSearch" resultType="ShoplinkerGoods">
-		/* ShoplinkerGoods.getGoodsSendList */
+		/* TsaShoplinkerDao.getGoodsSendList */
 		SELECT * FROM
 		(
 			SELECT
@@ -320,8 +320,8 @@
 		WHERE 1=1
 		<include refid="getListCondition_sql"/>
 
+		ORDER BY REG_DT DESC
 		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
-
 	</select>
 
 	<!-- 상품 목록 조건 정보 -->
@@ -435,6 +435,7 @@
 			, PAN_TYPE
 			, CHANNEL_TYPE
 			, SHIP_RSV_DATE
+			, ORDER_FLAG
 			, EXTMALL_REG_YN
 			, REG_DT
 		)
@@ -498,6 +499,7 @@
 			, #{panType}
 			, #{channelType}
 			, #{shipRsvDate}
+			, #{orderFlag}
 			, 'N'
 			, NOW()
 		FROM DUAL
@@ -515,18 +517,15 @@
 				, B.EXTMALL_ID
 				, B.EXTMALL_NM
 				, B.AGENT_ORDER_ID
-				, B.UPLOAD_STAT
+				, IFNULL(B.UPLOAD_STAT, 'G021_50') AS UPLOAD_STAT
 				, B.UPLOAD_FAIL_CD
 				, B.UPLOAD_FAIL_REASON
 				, IFNULL(B.ORD_NO, '') AS ORD_NO
 				, B.DELV_ADDR_SQ
 			FROM SHOPLINKER_ORDER A
-				INNER JOIN TB_EXTMALL_ORDER_UPLOAD B
+				LEFT OUTER JOIN TB_EXTMALL_ORDER_UPLOAD B
 					ON A.SHOPLINKER_ORDER_ID = B.AGENT_ORDER_ID
-					AND A.MALL_ORDER_ID = B.EXTMALL_ORDER_ID
-			WHERE A.SKU_MATCH_CODE IS NOT NULL
-			AND A.SKU_MATCH_CODE != ''
-			AND B.UPLOAD_GB = 'S'
+					AND A.MALL_ORDER_ID = B.EXTMALL_ORDER_ID AND B.UPLOAD_GB = 'S'
 		) A
 		WHERE 1=1
 		<include refid="getSlkOrderListCondition_sql"/>
@@ -544,21 +543,22 @@
 				, B.EXTMALL_ID
 				, B.EXTMALL_NM
 				, B.AGENT_ORDER_ID
-				, B.UPLOAD_STAT
+				, IFNULL(B.UPLOAD_STAT, 'G021_50') AS UPLOAD_STAT
 				, B.UPLOAD_FAIL_CD
 				, B.UPLOAD_FAIL_REASON
 				, IFNULL(B.ORD_NO, '') AS ORD_NO
 				, B.DELV_ADDR_SQ
 			FROM SHOPLINKER_ORDER A
-				INNER JOIN TB_EXTMALL_ORDER_UPLOAD B
+				LEFT OUTER JOIN TB_EXTMALL_ORDER_UPLOAD B
 					ON A.SHOPLINKER_ORDER_ID = B.AGENT_ORDER_ID
-					AND A.MALL_ORDER_ID = B.EXTMALL_ORDER_ID
-			WHERE A.SKU_MATCH_CODE IS NOT NULL
-			AND A.SKU_MATCH_CODE != ''
-			AND B.UPLOAD_GB = 'S'
+					AND A.MALL_ORDER_ID = B.EXTMALL_ORDER_ID AND B.UPLOAD_GB = 'S'
+			WHERE 1=1
+
+
 		) A
 		WHERE 1=1
 		<include refid="getSlkOrderListCondition_sql"/>
+
 		ORDER BY REG_DT DESC
 		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
 
@@ -657,6 +657,15 @@
 		ORDER BY A.MALL_ID, A.MALL_ORDER_ID, A.SHOPLINKER_ORDER_ID
 	</select>
 
+	<!-- 제휴몰 대기상태건들 실패로 업데이트(오류로인해 성공/실패 처리가 안된건이 있을경우 대비용) -->
+	<update id="updateShoplinkerExtmallWaitList">
+		UPDATE TB_EXTMALL_ORDER_UPLOAD
+			SET UPLOAD_FAIL_CD = 'G022_90'
+				, UPLOAD_FAIL_REASON = '관리자확인요망!! 성공/실패 결과 없음. 오류여부 확인요망'
+		WHERE VENDOR_ID = 'G003_V001'
+		AND UPLOAD_STAT = 'G021_00'
+		AND UPLOAD_GB = 'S'
+	</update>
 
 	<!-- 송장전송-전송 목록 건수 cnt -->
 	<select id="getSendInvoiceListCount" parameterType="ShoplinkerInvoice" resultType="int">
@@ -802,6 +811,30 @@
 	</sql>
 
 
+	<!-- 재고-단품 등록 -->
+	<insert id="insertStockOption" parameterType="ShoplinkerGoods">
+		/* TsaShoplinkerDao.insertStockOption */
+		INSERT INTO SHOPLINKER_STOCK (
+		    GOODS_CD
+			, OPT_CD
+			, STOCK_QTY
+			, SEND_YN
+			, SEND_DT
+			, REG_DT
+			, UPD_DT
+		)
+		VALUES (
+			#{goodsCd}
+			, #{optCd}
+			, #{quantity}
+			, 'Y'
+			, now()
+			, now()
+			, now()
+		) ON DUPLICATE KEY UPDATE
+		  	UPD_DT = now()
+	</insert>
+
 	<!-- 재고전송-목록 건수 -->
 	<select id="getStockListCount" parameterType="ShoplinkerSearch" resultType="int">
 		/* ShoplinkerGoods.getStockListCount */

+ 1 - 1
src/main/webapp/WEB-INF/views/ocm/ExtmallOrderRegisterForm.html

@@ -40,7 +40,7 @@
 
 				<ul class="panelBar padT20">
 					<li class="center">
-						<input type="button" class="btn btn-default btn-lg" id="btnExcelDown" onclick="cfnDownloadSampleFile('SF022');" value="제휴몰 주문등록양식 다운로드" />
+						<input type="button" class="btn btn-default btn-lg" id="btnExcelDown" onclick="cfnDownloadSampleFile('SF023');" value="제휴몰 주문등록양식 다운로드" />
 						<input type="button" class="btn btn-primary btn-lg" id="btnExcelUpload" value="엑셀업로드"/>
 						<input type="button" class="btn btn-success btn-lg" id="btnSaveExtmallOrderUpload" value="주문등록"/>
 						<input type="button" class="btn btn-danger btn-lg" id="btnSearchExtmallOrderUpload" value="결과확인"/>

+ 31 - 9
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerGoodsSendForm.html

@@ -136,18 +136,15 @@
 <script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
-
+	var sessRoleCd 		= [[${sessionInfo.roleCd}]];
 	var apiTypeValue = {"OPTION":"단품", "PRODUCT":"상품", "NOTI":"품목(고시)", "CERT":"인증", "IMAGE":"이미지" };
 	var procGbValue = {"true":"전송완료", "false":"전송실패", "error":"오류"};
 
-	//let vendorList = gagajf.convertToArray([[${vendorList}]]);
-	//let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
-
-	let columnDefs = [
+	let columnDefs1 = [
 		{headerName: "No", width: 60, cellClass: 'text-center',
 			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
 		},
-		{headerName: "샵링커 상품코드", field: "apiProductId", width: 150, cellClass: 'text-center'},
+		{headerName: "샵링커 상품코드", field: "apiProductId", width: 130, cellClass: 'text-center'},
 		{
 			headerName: "API구분", field: "apiType", width: 100, cellClass: 'text-center',
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(apiTypeValue, params.value); }
@@ -158,11 +155,9 @@
 		{headerName: "IF결과메세지", field: "apiMessage", width: 300, cellClass: 'text-left'},
 		{headerName: "자사 상품코드", field: "goodsCd", width: 150, cellClass: 'text-center'},
 		{headerName: "상품명", field: "goodsNm", width: 300, cellClass: 'text-left'},
-
 		{headerName: "xml", field: "xmlTxt", width: 100, cellClass: 'text-center', editable: true,
 			cellEditor: 'agLargeTextCellEditor',
 			cellRenderer: function(params) {
-				/* params.value = '<a href="javascript:void(0);">보기</a>'; */
 				params.value = '<button type="button"class="btn btn-success">보기</button>';
 				return params.value;
 			}
@@ -174,7 +169,34 @@
 		}
 	];
 
-	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	let columnDefs2 = [
+		{headerName: "No", width: 60, cellClass: 'text-center',
+			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
+		},
+		{headerName: "샵링커 상품코드", field: "apiProductId", width: 130, cellClass: 'text-center'},
+		{
+			headerName: "API구분", field: "apiType", width: 100, cellClass: 'text-center',
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(apiTypeValue, params.value); }
+		},
+		{headerName: "IF결과", field: "apiResult", width: 100, cellClass: 'text-center',
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(procGbValue, params.value); }
+		},
+		{headerName: "IF결과메세지", field: "apiMessage", width: 300, cellClass: 'text-left'},
+		{headerName: "자사 상품코드", field: "goodsCd", width: 150, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 300, cellClass: 'text-left'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
+		{
+			headerName: "전송일자", field: "regDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }
+		}
+	];
+
+	let gridOptions;
+	if (sessRoleCd == "G001_0000") { // SUPER관리자
+		gridOptions = gagaAgGrid.getGridOptions(columnDefs1);
+	} else {
+		gridOptions = gagaAgGrid.getGridOptions(columnDefs2);
+	}
 
 
 	//페이징

+ 110 - 109
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderDetailForm.html

@@ -179,116 +179,117 @@
 			</table>
 			<!-- //TABLE -->
 			<br>
-			<h4>제휴몰 업로드정보</h4>
-			<!-- TABLE -->
-			<table class="tableStyle">
-				<colgroup>
-					<col width="10%">
-					<col width="23%">
-					<col width="10%">
-					<col width="23%">
-					<col width="10%">
-					<col width="23%">
-				</colgroup>
-				<tbody>
-					<tr>
-						<th>업로드상태</th>
-						<td class="aL padL10" th:text="${extOrderInfo.uploadStatNm}"></td>
-
-						<th>업로드실패코드</th>
-						<td class="aL padL10" colspan="3" th:text="${extOrderInfo.uploadFailNm}"></td>
-					</tr>
-					<tr>
-						<th>업로드실패사유</th>
-						<td class="aL padL10" colspan="5" th:text="${extOrderInfo.uploadFailReason}"></td>
-					</tr>
-					<tr>
-						<th>벤더명</th>
-						<td class="aL padL10" th:text="${extOrderInfo.vendorNm}"></td>
-						<th>제휴몰ID</th>
-						<td class="aL padL10" th:text="${extOrderInfo.extmallId}"></td>
-						<th>제휴몰명</th>
-						<td class="aL padL10" th:text="${extOrderInfo.extmallNm}"></td>
-					</tr>
-					<tr>
-						<th>에이전트주문번호</th>
-						<td class="aL padL10" th:text="${extOrderInfo.agentOrderId}"></td>
-						<th>제휴몰주문번호<br>(쇼핑몰주문번호)</th>
-						<td class="aL padL10" th:text="${extOrderInfo.extmallOrderId}"></td>
-						<th>제휴몰상품ID</th>
-						<td class="aL padL10" th:text="${extOrderInfo.extmallProdId}"></td>
-					</tr>
-					<tr>
-						<th>제휴몰상품명</th>
-						<td class="aL padL10" th:text="${extOrderInfo.extmallProdNm}"></td>
-						<th>상품코드(상품)</th>
-						<td class="aL padL10" th:text="${extOrderInfo.goodsCd}"></td>
-						<th>옵션명</th>
-						<td class="aL padL10" th:text="${extOrderInfo.sku}"></td>
-					</tr>
-					<tr>
-						<th>현재판매가</th>
-						<td class="aL padL10" th:text="${extOrderInfo.currPrice}"></td>
-						<th>주문수량</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordQty}"></td>
-						<th>주문금액</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordAmt}"></td>
-					</tr>
-					<tr>
-						<th>쿠폰할인금액</th>
-						<td class="aL padL10" th:text="${extOrderInfo.cpnDcAmt}"></td>
-						<th>포인트할인금액</th>
-						<td class="aL padL10" th:text="${extOrderInfo.pntDcAmt}"></td>
-						<th>배송비</th>
-						<td class="aL padL10" th:text="${extOrderInfo.delvFee}"></td>
-					</tr>
-					<tr>
-						<th>주문수집일</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordRecvDt}"></td>
-						<th>주문일</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordDt}"></td>
-						<th>주문자명</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordNm}"></td>
-					</tr>
-					<tr>
-						<th>주문자휴대전화번호</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordPhnno}"></td>
-						<th>주문자전화번호</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordTelno}"></td>
-						<th>주문자이메일</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordEmail}"></td>
-					</tr>
-					<tr>
-						<th>수령자명</th>
-						<td class="aL padL10" th:text="${extOrderInfo.recipNm}"></td>
-						<th>수령자휴대전화번호</th>
-						<td class="aL padL10" th:text="${extOrderInfo.recipPhnno}"></td>
-						<th>수령자전화번호</th>
-						<td class="aL padL10" th:text="${extOrderInfo.recipTelno}"></td>
-					</tr>
-					<tr>
-						<th>수령자우편번호</th>
-						<td class="aL padL10" th:text="${extOrderInfo.recipZipcode}"></td>
-						<th>수령자기본주소</th>
-						<td class="aL padL10" th:text="${extOrderInfo.recipBaseAddr}"></td>
-						<th>수령자상세주소</th>
-						<td class="aL padL10" th:text="${extOrderInfo.recipDtlAddr}"></td>
-					</tr>
-					<tr>
-						<th>배송메모</th>
-						<td class="aL padL10" colspan="5" th:text="${extOrderInfo.delvMemo}"></td>
-					</tr>
-					<tr>
-						<th>주문번호</th>
-						<td class="aL padL10" th:text="${extOrderInfo.ordNo}"></td>
-						<th>등록자</th>
-						<td class="aL padL10" th:text="${extOrderInfo.regNm}"></td>
-						<th>등록일시</th>
-						<td class="aL padL10" th:text="${extOrderInfo.regDt}"></td>
-					</tr>
-				</tbody>
-			</table>
+			<div th:if="${extOrderInfo}">
+				<h4>제휴몰 업로드정보</h4>
+				<!-- TABLE -->
+				<table class="tableStyle">
+					<colgroup>
+						<col width="10%">
+						<col width="23%">
+						<col width="10%">
+						<col width="23%">
+						<col width="10%">
+						<col width="23%">
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>업로드상태</th>
+							<td class="aL padL10" th:text="${extOrderInfo.uploadStatNm}"></td>
 
+							<th>업로드실패코드</th>
+							<td class="aL padL10" colspan="3" th:text="${extOrderInfo.uploadFailNm}"></td>
+						</tr>
+						<tr>
+							<th>업로드실패사유</th>
+							<td class="aL padL10" colspan="5" th:text="${extOrderInfo.uploadFailReason}"></td>
+						</tr>
+						<tr>
+							<th>벤더명</th>
+							<td class="aL padL10" th:text="${extOrderInfo.vendorNm}"></td>
+							<th>제휴몰ID</th>
+							<td class="aL padL10" th:text="${extOrderInfo.extmallId}"></td>
+							<th>제휴몰명</th>
+							<td class="aL padL10" th:text="${extOrderInfo.extmallNm}"></td>
+						</tr>
+						<tr>
+							<th>에이전트주문번호</th>
+							<td class="aL padL10" th:text="${extOrderInfo.agentOrderId}"></td>
+							<th>제휴몰주문번호<br>(쇼핑몰주문번호)</th>
+							<td class="aL padL10" th:text="${extOrderInfo.extmallOrderId}"></td>
+							<th>제휴몰상품ID</th>
+							<td class="aL padL10" th:text="${extOrderInfo.extmallProdId}"></td>
+						</tr>
+						<tr>
+							<th>제휴몰상품명</th>
+							<td class="aL padL10" th:text="${extOrderInfo.extmallProdNm}"></td>
+							<th>상품코드(상품)</th>
+							<td class="aL padL10" th:text="${extOrderInfo.goodsCd}"></td>
+							<th>옵션명</th>
+							<td class="aL padL10" th:text="${extOrderInfo.sku}"></td>
+						</tr>
+						<tr>
+							<th>현재판매가</th>
+							<td class="aL padL10" th:text="${extOrderInfo.currPrice}"></td>
+							<th>주문수량</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordQty}"></td>
+							<th>주문금액</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordAmt}"></td>
+						</tr>
+						<tr>
+							<th>쿠폰할인금액</th>
+							<td class="aL padL10" th:text="${extOrderInfo.cpnDcAmt}"></td>
+							<th>포인트할인금액</th>
+							<td class="aL padL10" th:text="${extOrderInfo.pntDcAmt}"></td>
+							<th>배송비</th>
+							<td class="aL padL10" th:text="${extOrderInfo.delvFee}"></td>
+						</tr>
+						<tr>
+							<th>주문수집일</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordRecvDt}"></td>
+							<th>주문일</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordDt}"></td>
+							<th>주문자명</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordNm}"></td>
+						</tr>
+						<tr>
+							<th>주문자휴대전화번호</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordPhnno}"></td>
+							<th>주문자전화번호</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordTelno}"></td>
+							<th>주문자이메일</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordEmail}"></td>
+						</tr>
+						<tr>
+							<th>수령자명</th>
+							<td class="aL padL10" th:text="${extOrderInfo.recipNm}"></td>
+							<th>수령자휴대전화번호</th>
+							<td class="aL padL10" th:text="${extOrderInfo.recipPhnno}"></td>
+							<th>수령자전화번호</th>
+							<td class="aL padL10" th:text="${extOrderInfo.recipTelno}"></td>
+						</tr>
+						<tr>
+							<th>수령자우편번호</th>
+							<td class="aL padL10" th:text="${extOrderInfo.recipZipcode}"></td>
+							<th>수령자기본주소</th>
+							<td class="aL padL10" th:text="${extOrderInfo.recipBaseAddr}"></td>
+							<th>수령자상세주소</th>
+							<td class="aL padL10" th:text="${extOrderInfo.recipDtlAddr}"></td>
+						</tr>
+						<tr>
+							<th>배송메모</th>
+							<td class="aL padL10" colspan="5" th:text="${extOrderInfo.delvMemo}"></td>
+						</tr>
+						<tr>
+							<th>주문번호</th>
+							<td class="aL padL10" th:text="${extOrderInfo.ordNo}"></td>
+							<th>등록자</th>
+							<td class="aL padL10" th:text="${extOrderInfo.regNm}"></td>
+							<th>등록일시</th>
+							<td class="aL padL10" th:text="${extOrderInfo.regDt}"></td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
 
 		</div>
 	</div>

+ 1 - 1
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderForm.html

@@ -47,7 +47,7 @@
 				<p class="cRed">※ 샵링커 주문수집 => 제휴몰 주문등록 => (제휴몰 주문등록 성공목록만) STYLE24에 주문등록이 됩니다.</p>
 				<p class="cRed">※ 샵링커 주문수집 시 동일한 목록은 '제휴몰 주문등록'이 되지 않습니다. </p>
 				<p class="cRed">※ 주문수집 건수가 많아질 수록 대기시간이 오래걸리므로 하루씩 수집합니다.</p>
-				<p class="cRed">※ 옵션코드가없는 상품(딜상품)은 결과목록에서 제외됩니다.</p>
+				<p class="cRed">※ [제휴몰 주문등록 상태]가 '미매핑'건은 옵션정보가 없는것으로 딜상품입니다.</p>
 			</div>
 		</form>