Selaa lähdekoodia

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

xodud lee 4 vuotta sitten
vanhempi
commit
cf4d33b690

+ 3 - 11
src/main/java/com/style24/admin/biz/dao/TsaOcmDao.java

@@ -8,9 +8,7 @@ import com.style24.persistence.domain.ExtmallNoti;
 import com.style24.persistence.domain.ExtmallOrder;
 import com.style24.persistence.domain.ExtmallOrigin;
 import com.style24.persistence.domain.ExtmallPriceSync;
-import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsStock;
-import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Payment;
 
 /**
@@ -262,15 +260,6 @@ public interface TsaOcmDao {
 	 */
 	int updateFreegiftValLeftQty(ExtmallOrder extmallOrder);
 
-	/**
-	 * 상품 정보 조회
-	 * @param goods
-	 * @return
-	 * @author xodud1202
-	 * @since 2021. 01. 28
-	 */
-	Goods getGoodsInfo(Goods goods);
-
 	/**
 	 * 상품 재고 조회
 	 * @param goodsStock
@@ -404,4 +393,7 @@ public interface TsaOcmDao {
 	 * @since 2021. 06. 17
 	 */
 	ExtmallOrder getExtmallOrderUploadResultInfo(ExtmallOrder extmallOrder);
+
+
+	void insertTestNotiInfo(ExtmallOrder extmallOrder);
 }

+ 319 - 266
src/main/java/com/style24/admin/biz/service/TsaOcmService.java

@@ -135,261 +135,271 @@ public class TsaOcmService {
      * TscOrderService.createPreOrder 참조
      * 샵링커 주문수집으로 외부몰주문등록된 건 중 '대기'상태인 것들에 대해 주문등록처리를 한다.
      */
-    @Transactional("shopTxnManager")
     public void createShoplinkerOrder(String uploadGb) {
-
     	Collection<ExtmallOrder> orderList = this.sortOrderList(uploadGb);
 
     	if (orderList != null && !orderList.isEmpty()) {
 	    	for( ExtmallOrder order : orderList ) {
+	    		createShoplinkerOrderSub(order);
+	        }
+    	}
+    }
 
-	    		String ordCheckMsg = this.orderValidationCheck(order);
-
-	    		// ALL_SUCCESS 전체성공,  ALL_FAIL 전체실패, PART_SUCCESS 일부성공, NOT 이미 등록된 주문건
-	    		if("ALL_SUCCESS".equals(ordCheckMsg) || "PART_SUCCESS".equals(ordCheckMsg)) {
-	    			// 일부 또는 전체 성공
-
-	    			// 1. 주문기본정보등록
-	                ocmDao.createOrder(order);
-
-	                // 2. 주문배송정보등록
-	                ocmDao.createDeliveryAddr(order);
-
-	                // 3. 주문배송비정보등록
-	                ocmDao.createDeliveryFee(order);
-
-					// 4. 주문상세정보등록
-	                String dtlNos = "";			// 주문상세번호
-	                String cancelGoodsNms = ""; // 콤마로 구분
-	                int cancelAmt = 0;
-	                int payAmt = 0;
-	                GagaMap vdMap;
-	    			for( ExtmallOrder orderDetail : order.getOrderDetailList()) {
-
-	    				vdMap = this.saveGoodsInfo(orderDetail);
-
-	    				orderDetail.setOrdNo(order.getOrdNo());
-	    				orderDetail.setDelvAddrSq(order.getDelvAddrSq());
-
-
-	    				if (!"SUCCESS".equals(vdMap.get("message").toString())) {
-	    					cancelGoodsNms += orderDetail.getGoodsNm()+",";
-	    					cancelAmt += orderDetail.getOrdAmt();
-
-	    					orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.FAIL.value());	// 실패
-	    					orderDetail.setOrdNo(null);
-	    					orderDetail.setUploadFailCd(vdMap.getString("uploadFailCd"));
-	    					orderDetail.setUploadFailReason(vdMap.getString("message"));
-	    					ocmDao.updateExtmallOrder(orderDetail);
-
-	    				}else {
-
-	    					orderDetail.setOrdNo(order.getOrdNo());
-	    					orderDetail.setDelvAddrSq(order.getDelvAddrSq());
-
-	    					// TODO 총알배송, 구매대행상품여부 체크
-	                        ocmDao.createOrderDetail(orderDetail); // 주문상세정보등록
-
-	                        ocmDao.createOrderDetailHst(orderDetail); // 주문상세이력정보등록
-
-	                        Collection<ExtmallOrder> orderDetailItemList = ocmDao.getOrderDetailItem(orderDetail); // 주문상세단품정보조회
-
-	                        // 주문상세단품단위 금액 등록
-	                        int length				= orderDetailItemList.size();
-	                        int index				= 1;
-	                        int leftOrdAmt 			= orderDetail.getOrdAmt();
-	                        int leftCpn1DcAmt 		= orderDetail.getCpn1DcAmt();
-	                        int leftTmtb1DcAmt 		= orderDetail.getTmtb1DcAmt();
-	                        int leftTmtb2DcAmt 		= orderDetail.getTmtb2DcAmt();
-	                        int leftGoodsCpnDcAmt 	= orderDetail.getGoodsCpnDcAmt();
-	                        int leftCartCpnDcAmt 	= orderDetail.getCartCpnDcAmt();
-	                        int leftPntDcAmt 		= orderDetail.getPntDcAmt();
-	                        int leftPrePntDcAmt 	= orderDetail.getPrePntDcAmt();
-	                        int leftSavePntAmt 		= orderDetail.getSavePntAmt();
-	                        int leftRealOrdAmt 		= orderDetail.getRealOrdAmt();
-	                        int leftGfcdUseAmt 		= orderDetail.getGfcdUseAmt();
-
-	                        for (ExtmallOrder orderDetailItem : orderDetailItemList) {
-	                            int itemPrice 		= orderDetailItem.getItemPrice();
-	                            int optAddPrice 	= orderDetailItem.getOptAddPrice();
-	                            int itemQty 		= orderDetailItem.getItemQty();
-	                            double currPrice	= orderDetailItem.getCurrPrice();
-	                            double itemOrdAmt	= (itemPrice + optAddPrice) * itemQty;
-	                            double tempDivD		= (itemOrdAmt / currPrice) * 100;
-	                            int tempDiv 		= Integer.parseInt(String.valueOf(Math.round(tempDivD)));
-
-	                            if (index == length) {
-	                                orderDetailItem.setOrdAmt(leftOrdAmt);
-	                                orderDetailItem.setCpn1DcAmt(leftCpn1DcAmt);
-	                                orderDetailItem.setTmtb1DcAmt(leftTmtb1DcAmt);
-	                                orderDetailItem.setTmtb2DcAmt(leftTmtb2DcAmt);
-	                                orderDetailItem.setGoodsCpnDcAmt(leftGoodsCpnDcAmt);
-	                                orderDetailItem.setCartCpnDcAmt(leftCartCpnDcAmt);
-	                                orderDetailItem.setPntDcAmt(leftPntDcAmt);
-	                                orderDetailItem.setPrePntDcAmt(leftPrePntDcAmt);
-	                                orderDetailItem.setSavePntAmt(leftSavePntAmt);
-	                                orderDetailItem.setRealOrdAmt(leftRealOrdAmt);
-	                                orderDetailItem.setGfcdUseAmt(leftGfcdUseAmt);
-	                            } else {
-	                                orderDetailItem.setOrdAmt((orderDetail.getOrdAmt() * tempDiv) / 100);
-	                                orderDetailItem.setCpn1DcAmt((orderDetail.getCpn1DcAmt() * tempDiv) / 100);
-	                                orderDetailItem.setTmtb1DcAmt((orderDetail.getTmtb1DcAmt() * tempDiv) / 100);
-	                                orderDetailItem.setTmtb2DcAmt((orderDetail.getTmtb2DcAmt() * tempDiv) / 100);
-	                                orderDetailItem.setGoodsCpnDcAmt((orderDetail.getGoodsCpnDcAmt() * tempDiv) / 100);
-	                                orderDetailItem.setCartCpnDcAmt((orderDetail.getCartCpnDcAmt() * tempDiv) / 100);
-	                                orderDetailItem.setPntDcAmt((orderDetail.getPntDcAmt() * tempDiv) / 100);
-	                                orderDetailItem.setPrePntDcAmt((orderDetail.getPrePntDcAmt() * tempDiv) / 100);
-	                                orderDetailItem.setSavePntAmt((orderDetail.getSavePntAmt() * tempDiv) / 100);
-	                                orderDetailItem.setRealOrdAmt((orderDetail.getRealOrdAmt() * tempDiv) / 100);
-	                                orderDetailItem.setGfcdUseAmt((orderDetail.getGfcdUseAmt() * tempDiv) / 100);
-
-	                                leftOrdAmt 			= leftOrdAmt 			- ((orderDetail.getOrdAmt() * tempDiv) / 100);
-	                                leftCpn1DcAmt 		= leftCpn1DcAmt 		- ((orderDetail.getCpn1DcAmt() * tempDiv) / 100);
-	                                leftTmtb1DcAmt 		= leftTmtb1DcAmt 		- ((orderDetail.getTmtb1DcAmt() * tempDiv) / 100);
-	                                leftTmtb2DcAmt 		= leftTmtb2DcAmt 		- ((orderDetail.getTmtb2DcAmt() * tempDiv) / 100);
-	                                leftGoodsCpnDcAmt 	= leftGoodsCpnDcAmt 	- ((orderDetail.getGoodsCpnDcAmt() * tempDiv) / 100);
-	                                leftCartCpnDcAmt 	= leftCartCpnDcAmt 		- ((orderDetail.getCartCpnDcAmt() * tempDiv) / 100);
-	                                leftPntDcAmt 		= leftPntDcAmt 			- ((orderDetail.getPntDcAmt() * tempDiv) / 100);
-	                                leftPrePntDcAmt 	= leftPrePntDcAmt 		- ((orderDetail.getPrePntDcAmt() * tempDiv) / 100);
-	                                leftSavePntAmt 		= leftSavePntAmt 		- ((orderDetail.getSavePntAmt() * tempDiv) / 100);
-	                                leftRealOrdAmt 		= leftRealOrdAmt 		- ((orderDetail.getRealOrdAmt() * tempDiv) / 100);
-	                                leftGfcdUseAmt 		= leftGfcdUseAmt 		- ((orderDetail.getGfcdUseAmt() * tempDiv) / 100);
-	                            }
-
-	                            // 2021.05.06 옵션금액 단품 추가
-	                            orderDetailItem.setOptAddPrice(optAddPrice);
-	                            orderDetailItem.setCustNo(order.getCustNo());
-
-	                            ocmDao.createOrderDetailItem(orderDetailItem); // 주문상세단품정보등록
-
-	                            ocmDao.createOrderDetailItemHst(orderDetailItem); // 주문상세단품이력정보등록
-
-	                            index++;
-
-
-	                            // 5. 재고등록(샵링커 주문목록을 보면 동일한 몰 주문번호에 동일한 상품(sku)이 수량이 아닌 개별로 있는 데이터가 존재하므로 > 주문번호로 한번에 처리가 아닌 개별로 처리 함)
-	            				orderDetail.setSellGb(TscConstants.SellGb.ORDER.value());			// 판매구분(10:주문(-),
-	            				ocmDao.createSellQty(orderDetail);
-
-	                            // 외부몰 정보 업데이트
-	            				orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.SUCC.value());	// 성공
-	        					ocmDao.updateExtmallOrder(orderDetail);
-
-	        					dtlNos += orderDetail.getOrdDtlNo()+",";
-	        				}
-	    				}
-	            	}
-
-
-	    			// 6. 주문사은품정보등록
-	        		dtlNos = dtlNos.substring(0, dtlNos.length()-1);
-	    	        String [] dtlNdsArr = dtlNos.split(",");	// 주문상세번호
-	    	        order.setItemCdArr(dtlNdsArr);
-	    			order.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value());		//주문상세상태 - 결제완료처리
-					GagaMap giftMap = this.getOrderFreegift(order);
-
-	    	        if( null != giftMap) {
-	    		        if( null != giftMap.get("freegiftList")) {
-	    		        	if( !"".equals(giftMap.get("freegiftList"))) {
-
-	    		    			// 상품코드
-	    		        		String dtlGoodsCds = "";	// 사은품관련 상품코드. 콤마로구분
-	    		        		String[] dtlGoodsCdsArr;
-	    		        		Collection<ExtmallOrder> freegiftApplyAmtList = (Collection<ExtmallOrder>) giftMap.get("freegiftApplyAmtList");
-
-	    		        		for(ExtmallOrder ftMap : freegiftApplyAmtList ) {
-	    		        			dtlGoodsCds += ftMap.getGoodsCd() +",";
-	    		        		}
-
-	    		        		dtlGoodsCds = dtlGoodsCds.substring(0, dtlGoodsCds.length()-1);
-	    		        		dtlGoodsCdsArr = dtlGoodsCds.split(",");
-	    		        		order.setFreegiftGoodsArr(dtlGoodsCdsArr);
-
-	    		        		Collection<ExtmallOrder> freegiftList = (Collection<ExtmallOrder>) giftMap.get("freegiftList");
-	    		                ArrayList<Integer> fitValSqArr = new ArrayList<Integer>();
-	    		                for(ExtmallOrder ftMap : freegiftList ) {
-	    		                	fitValSqArr.add(ftMap.getFreegiftValSq());
-	    		                }
-	    		                int[] freegiftValArr = new int[fitValSqArr.size()];
-	    		                for( int i=0; i<fitValSqArr.size(); i++) {
-	    		                	freegiftValArr[i] = fitValSqArr.get(i);
-	    		                }
-
-	    		                order.setFreegiftValArr(freegiftValArr);
-	    		                order.setCustNo(0);
-	    		                if(order.getFreegiftValArr() != null && order.getFreegiftValArr().length > 0) {
-	    		                    ocmDao.createOrdFreegift(order);
-
-	    		                    // 6. 주문사은품 상품 정보 등록
-	    		                    ocmDao.createOrdFreegiftVal(order);
-
-	    		                    // 7. 주문사은품 주문상세정보 등록
-	    		                    for(ExtmallOrder ftMap : freegiftApplyAmtList ) {
-	    			    		    	order.setFreegiftSq(ftMap.getFreegiftSq());
-	    				    			order.setGoodsCd(ftMap.getGoodsCd());
-	    				    			ocmDao.createOrdFreegiftDtl(order);
-	    			    		    }
-	    		                }
-
-	    		                // 14. 사은품 수량 차감 로직 TB_FREEGIFT_VAL LEFT_QTY
-	    		                ocmDao.updateFreegiftValLeftQty(order);
-
-	    		        	}
-	    		        }
-	    	        }
-
-	    			// 7. 결제 TB_PAYMENT
-	                Payment payment = new Payment();
-	                payment.setOrdNo(order.getOrdNo());
-	                payment.setPayMeans(TscConstants.PayMeans.EXTMALL.value());					// 결제수단
-	                payAmt = order.getRealOrdSumAmt() + order.getDelvFee() - cancelAmt;			// 결제금액 = 실결제금액 + 배송비 - 취소금액
-	                payment.setPayAmt(payAmt);
-	                payment.setPgCpnAmt(0);														// PG쿠폰금액
-	                payment.setNpayPntAmt(0);   												// 네이버페이포인트금액
-	                payment.setPayGb("O");														// 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
-	                payment.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());		// 결제상태 - 결제완료
-	                payment.setRegNo(0);
-	                payment.setUpdNo(0);
-
-	                ocmDao.insertPayment(payment);
-
-
-	                // 8. 알림톡 발송
-	                if( 0 == cancelAmt ) {
-	                	// 전체성공
-	                	System.out.println(" ######  :: 전체성공 !! ");
-
-	                }else {
-	                	// 부분품절 - 제휴몰에서 자동 취소 문자 발송을 하지 않는 경우에만 발송
-	                	// coupang, WEMAPE, ST11TH, GMARKET, AUCTION, Fashion Plus, 판다코리아, 예스24, 홈플러스, LOTTE ON
-	                	cancelGoodsNms = cancelGoodsNms.substring(0, cancelGoodsNms.length()-1);
-	                	System.out.println(" ######  :: 부분성공  (실패 상품명 : "+cancelGoodsNms);
-	                }
-
-
-	    		}else {
-	    			System.out.println("### 전체실패 :: "+ordCheckMsg);
-	    			if( "ALL_FAIL".equals(ordCheckMsg) ) {	// NOT = 이미 등록된 주문건
-	    				// 전체실패 일때만 알림톡 발송
-	    				// 제휴몰에서 자동 취소 문자 발송을 하지 않는 경우에만 발송
-	        			// coupang, WEMAPE, ST11TH, GMARKET, AUCTION, Fashion Plus, 판다코리아, 예스24, 홈플러스, LOTTE ON
-	    			}
-
-    				// 외부몰 주문등록 상태 업데이트
-    				GagaMap vdMap;
-    				for( ExtmallOrder orderDetail : order.getOrderDetailList()) {
-    					System.out.println("### 전체실패2 :: "+ordCheckMsg);
-    					vdMap = this.saveGoodsInfo(orderDetail);
-    					orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.FAIL.value());	// 실패
-    					orderDetail.setOrdNo(vdMap.getInt("ordNo"));	// 실패
-    					orderDetail.setUploadFailCd(vdMap.getString("uploadFailCd"));
-    					orderDetail.setUploadFailReason(vdMap.getString("message"));
+    @SuppressWarnings("unchecked")
+    @Transactional("shopTxnManager")
+    public void createShoplinkerOrderSub(ExtmallOrder order) {
+
+		GagaMap result = this.orderValidationCheck(order);
+
+		// validation 체크 값
+		Collection<ExtmallOrder> newOrderDetailList = (Collection<ExtmallOrder>) result.get("orderDetailList");
+
+		if ("SUCCESS".equals(result.get("message").toString())) {
+			// 1. 주문기본정보등록
+            ocmDao.createOrder(order);
+
+            // 2. 주문배송정보등록
+            ocmDao.createDeliveryAddr(order);
+
+            // 3. 주문배송비정보등록
+            ocmDao.createDeliveryFee(order);
+
+			// 4. 주문상세정보등록
+            String dtlNos = "";			// 주문상세번호
+            String cancelGoodsNms = ""; // 콤마로 구분
+            int cancelAmt = 0;
+            int payAmt = 0;
+            GagaMap vdMap;
+			for( ExtmallOrder orderDetail : newOrderDetailList) {
+
+				//vdMap = this.checkGoodsInfo(orderDetail);
+				orderDetail.setOrdNo(order.getOrdNo());
+				orderDetail.setDelvAddrSq(order.getDelvAddrSq());
+
+
+				if (!"SUCCESS".equals(orderDetail.getUploadFailReason())){
+					cancelGoodsNms += orderDetail.getGoodsNm()+",";
+					cancelAmt += orderDetail.getOrdAmt();
+
+					orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.FAIL.value());	// 실패
+					orderDetail.setOrdNo(null);
+					orderDetail.setUploadFailCd(orderDetail.getUploadFailCd());
+					orderDetail.setUploadFailReason(orderDetail.getUploadFailReason());
+					ocmDao.updateExtmallOrder(orderDetail);
+
+				}else {
+
+					orderDetail.setOrdNo(order.getOrdNo());
+					orderDetail.setDelvAddrSq(order.getDelvAddrSq());
+
+					// TODO 총알배송, 구매대행상품여부 체크
+                    ocmDao.createOrderDetail(orderDetail); // 주문상세정보등록
+
+                    ocmDao.createOrderDetailHst(orderDetail); // 주문상세이력정보등록
+
+                    Collection<ExtmallOrder> orderDetailItemList = ocmDao.getOrderDetailItem(orderDetail); // 주문상세단품정보조회
+
+                    // 주문상세단품단위 금액 등록
+                    int length				= orderDetailItemList.size();
+                    int index				= 1;
+                    int leftOrdAmt 			= orderDetail.getOrdAmt();
+                    int leftCpn1DcAmt 		= orderDetail.getCpn1DcAmt();
+                    int leftTmtb1DcAmt 		= orderDetail.getTmtb1DcAmt();
+                    int leftTmtb2DcAmt 		= orderDetail.getTmtb2DcAmt();
+                    int leftGoodsCpnDcAmt 	= orderDetail.getGoodsCpnDcAmt();
+                    int leftCartCpnDcAmt 	= orderDetail.getCartCpnDcAmt();
+                    int leftPntDcAmt 		= orderDetail.getPntDcAmt();
+                    int leftPrePntDcAmt 	= orderDetail.getPrePntDcAmt();
+                    int leftSavePntAmt 		= orderDetail.getSavePntAmt();
+                    int leftRealOrdAmt 		= orderDetail.getRealOrdAmt();
+                    int leftGfcdUseAmt 		= orderDetail.getGfcdUseAmt();
+
+                    for (ExtmallOrder orderDetailItem : orderDetailItemList) {
+                        int itemPrice 		= orderDetailItem.getItemPrice();
+                        int optAddPrice 	= orderDetailItem.getOptAddPrice();
+                        int itemQty 		= orderDetailItem.getItemQty();
+                        double currPrice	= orderDetailItem.getCurrPrice();
+                        double itemOrdAmt	= (itemPrice + optAddPrice) * itemQty;
+                        double tempDivD		= (itemOrdAmt / currPrice) * 100;
+                        int tempDiv 		= Integer.parseInt(String.valueOf(Math.round(tempDivD)));
+
+                        if (index == length) {
+                            orderDetailItem.setOrdAmt(leftOrdAmt);
+                            orderDetailItem.setCpn1DcAmt(leftCpn1DcAmt);
+                            orderDetailItem.setTmtb1DcAmt(leftTmtb1DcAmt);
+                            orderDetailItem.setTmtb2DcAmt(leftTmtb2DcAmt);
+                            orderDetailItem.setGoodsCpnDcAmt(leftGoodsCpnDcAmt);
+                            orderDetailItem.setCartCpnDcAmt(leftCartCpnDcAmt);
+                            orderDetailItem.setPntDcAmt(leftPntDcAmt);
+                            orderDetailItem.setPrePntDcAmt(leftPrePntDcAmt);
+                            orderDetailItem.setSavePntAmt(leftSavePntAmt);
+                            orderDetailItem.setRealOrdAmt(leftRealOrdAmt);
+                            orderDetailItem.setGfcdUseAmt(leftGfcdUseAmt);
+                        } else {
+                            orderDetailItem.setOrdAmt((orderDetail.getOrdAmt() * tempDiv) / 100);
+                            orderDetailItem.setCpn1DcAmt((orderDetail.getCpn1DcAmt() * tempDiv) / 100);
+                            orderDetailItem.setTmtb1DcAmt((orderDetail.getTmtb1DcAmt() * tempDiv) / 100);
+                            orderDetailItem.setTmtb2DcAmt((orderDetail.getTmtb2DcAmt() * tempDiv) / 100);
+                            orderDetailItem.setGoodsCpnDcAmt((orderDetail.getGoodsCpnDcAmt() * tempDiv) / 100);
+                            orderDetailItem.setCartCpnDcAmt((orderDetail.getCartCpnDcAmt() * tempDiv) / 100);
+                            orderDetailItem.setPntDcAmt((orderDetail.getPntDcAmt() * tempDiv) / 100);
+                            orderDetailItem.setPrePntDcAmt((orderDetail.getPrePntDcAmt() * tempDiv) / 100);
+                            orderDetailItem.setSavePntAmt((orderDetail.getSavePntAmt() * tempDiv) / 100);
+                            orderDetailItem.setRealOrdAmt((orderDetail.getRealOrdAmt() * tempDiv) / 100);
+                            orderDetailItem.setGfcdUseAmt((orderDetail.getGfcdUseAmt() * tempDiv) / 100);
+
+                            leftOrdAmt 			= leftOrdAmt 			- ((orderDetail.getOrdAmt() * tempDiv) / 100);
+                            leftCpn1DcAmt 		= leftCpn1DcAmt 		- ((orderDetail.getCpn1DcAmt() * tempDiv) / 100);
+                            leftTmtb1DcAmt 		= leftTmtb1DcAmt 		- ((orderDetail.getTmtb1DcAmt() * tempDiv) / 100);
+                            leftTmtb2DcAmt 		= leftTmtb2DcAmt 		- ((orderDetail.getTmtb2DcAmt() * tempDiv) / 100);
+                            leftGoodsCpnDcAmt 	= leftGoodsCpnDcAmt 	- ((orderDetail.getGoodsCpnDcAmt() * tempDiv) / 100);
+                            leftCartCpnDcAmt 	= leftCartCpnDcAmt 		- ((orderDetail.getCartCpnDcAmt() * tempDiv) / 100);
+                            leftPntDcAmt 		= leftPntDcAmt 			- ((orderDetail.getPntDcAmt() * tempDiv) / 100);
+                            leftPrePntDcAmt 	= leftPrePntDcAmt 		- ((orderDetail.getPrePntDcAmt() * tempDiv) / 100);
+                            leftSavePntAmt 		= leftSavePntAmt 		- ((orderDetail.getSavePntAmt() * tempDiv) / 100);
+                            leftRealOrdAmt 		= leftRealOrdAmt 		- ((orderDetail.getRealOrdAmt() * tempDiv) / 100);
+                            leftGfcdUseAmt 		= leftGfcdUseAmt 		- ((orderDetail.getGfcdUseAmt() * tempDiv) / 100);
+                        }
+
+                        // 2021.05.06 옵션금액 단품 추가
+                        orderDetailItem.setOptAddPrice(optAddPrice);
+                        orderDetailItem.setCustNo(order.getCustNo());
+
+                        ocmDao.createOrderDetailItem(orderDetailItem); // 주문상세단품정보등록
+
+                        ocmDao.createOrderDetailItemHst(orderDetailItem); // 주문상세단품이력정보등록
+
+                        index++;
+
+
+                        // 5. 재고등록(샵링커 주문목록을 보면 동일한 몰 주문번호에 동일한 상품(sku)이 수량이 아닌 개별로 있는 데이터가 존재하므로 > 주문번호로 한번에 처리가 아닌 개별로 처리 함)
+        				orderDetail.setSellGb(TscConstants.SellGb.ORDER.value());			// 판매구분(10:주문(-),
+        				ocmDao.createSellQty(orderDetail);
+
+                        // 외부몰 정보 업데이트
+        				orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.SUCC.value());	// 성공
     					ocmDao.updateExtmallOrder(orderDetail);
-    				}
 
-	    		}
+    					dtlNos += orderDetail.getOrdDtlNo()+",";
+    				}
+				}
+        	}
+
+
+			// 6. 주문사은품정보등록
+    		dtlNos = dtlNos.substring(0, dtlNos.length()-1);
+	        String [] dtlNdsArr = dtlNos.split(",");	// 주문상세번호
+	        order.setItemCdArr(dtlNdsArr);
+			order.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value());		//주문상세상태 - 결제완료처리
+			GagaMap giftMap = this.getOrderFreegift(order);
+
+	        if( null != giftMap) {
+		        if( null != giftMap.get("freegiftList")) {
+		        	if( !"".equals(giftMap.get("freegiftList"))) {
+
+		    			// 상품코드
+		        		String dtlGoodsCds = "";	// 사은품관련 상품코드. 콤마로구분
+		        		String[] dtlGoodsCdsArr;
+		        		Collection<ExtmallOrder> freegiftApplyAmtList = (Collection<ExtmallOrder>) giftMap.get("freegiftApplyAmtList");
+
+		        		for(ExtmallOrder ftMap : freegiftApplyAmtList ) {
+		        			dtlGoodsCds += ftMap.getGoodsCd() +",";
+		        		}
+
+		        		dtlGoodsCds = dtlGoodsCds.substring(0, dtlGoodsCds.length()-1);
+		        		dtlGoodsCdsArr = dtlGoodsCds.split(",");
+		        		order.setFreegiftGoodsArr(dtlGoodsCdsArr);
+
+		        		Collection<ExtmallOrder> freegiftList = (Collection<ExtmallOrder>) giftMap.get("freegiftList");
+		                ArrayList<Integer> fitValSqArr = new ArrayList<Integer>();
+		                for(ExtmallOrder ftMap : freegiftList ) {
+		                	fitValSqArr.add(ftMap.getFreegiftValSq());
+		                }
+		                int[] freegiftValArr = new int[fitValSqArr.size()];
+		                for( int i=0; i<fitValSqArr.size(); i++) {
+		                	freegiftValArr[i] = fitValSqArr.get(i);
+		                }
+
+		                order.setFreegiftValArr(freegiftValArr);
+		                order.setCustNo(0);
+		                if(order.getFreegiftValArr() != null && order.getFreegiftValArr().length > 0) {
+		                    ocmDao.createOrdFreegift(order);
+
+		                    // 6. 주문사은품 상품 정보 등록
+		                    ocmDao.createOrdFreegiftVal(order);
+
+		                    // 7. 주문사은품 주문상세정보 등록
+		                    for(ExtmallOrder ftMap : freegiftApplyAmtList ) {
+			    		    	order.setFreegiftSq(ftMap.getFreegiftSq());
+				    			order.setGoodsCd(ftMap.getGoodsCd());
+				    			ocmDao.createOrdFreegiftDtl(order);
+			    		    }
+		                }
+
+		                // 14. 사은품 수량 차감 로직 TB_FREEGIFT_VAL LEFT_QTY
+		                ocmDao.updateFreegiftValLeftQty(order);
+
+		        	}
+		        }
 	        }
-    	}
+
+			// 7. 결제 TB_PAYMENT
+            Payment payment = new Payment();
+            payment.setOrdNo(order.getOrdNo());
+            payment.setPayMeans(TscConstants.PayMeans.EXTMALL.value());					// 결제수단
+            payAmt = order.getRealOrdSumAmt() + order.getDelvFee() - cancelAmt;			// 결제금액 = 실결제금액 + 배송비 - 취소금액
+            payment.setPayAmt(payAmt);
+            payment.setPgCpnAmt(0);														// PG쿠폰금액
+            payment.setNpayPntAmt(0);   												// 네이버페이포인트금액
+            payment.setPayGb("O");														// 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
+            payment.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());		// 결제상태 - 결제완료
+            payment.setRegNo(0);
+            payment.setUpdNo(0);
+
+            ocmDao.insertPayment(payment);
+
+		}else {
+
+			// 주문등록 전체실패시 상태 업데이트
+			GagaMap vdMap;
+			for( ExtmallOrder orderDetail : order.getOrderDetailList()) {
+				vdMap = this.checkGoodsInfo(orderDetail);
+				orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.FAIL.value());	// 실패
+				orderDetail.setOrdNo(vdMap.getInt("ordNo"));	// 실패
+				orderDetail.setUploadFailCd(vdMap.getString("uploadFailCd"));
+				orderDetail.setUploadFailReason(vdMap.getString("message"));
+				ocmDao.updateExtmallOrder(orderDetail);
+			}
+
+		}
+
+		// 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);
+		}
     }
 
     /**
@@ -475,44 +485,71 @@ public class TsaOcmService {
 	 * @author jsh77b
 	 * @since 2021. 03. 09
 	 */
-	public String orderValidationCheck(ExtmallOrder order) {
-		String resultStr	= "SUCCESS";
+	public GagaMap orderValidationCheck(ExtmallOrder order) {
+		GagaMap result = new GagaMap();
+		String failGoods = "";
 
 		// 1. 주문상세체크
 		Collection<ExtmallOrder> orderDetailList = order.getOrderDetailList();
 
 		int dtlCnt = orderDetailList.size();
 		int succCnt = 0;
+		int stockFailCnt = 0;
 		for (ExtmallOrder orderDetail : orderDetailList) {
 
-			GagaMap resultMap = this.saveGoodsInfo(orderDetail);
+			GagaMap resultMap = this.checkGoodsInfo(orderDetail);
+
+			orderDetail.setUploadFailCd(resultMap.getString("uploadFailCd"));
+			orderDetail.setUploadFailReason(resultMap.getString("message"));
 
 			if ("SUCCESS".equals(resultMap.get("message").toString())) {
 				succCnt ++;
+			}else {
+				// 알림톡 발송 할 목록
+				if("Y".equals(resultMap.get("sendNotiYn"))){
+					failGoods += resultMap.get("goodsNm") + ",";
+					stockFailCnt ++;
+				}
 			}
+		}
 
-			// 동일한 주문건이 있을경우, 전체 중지 (이미 알림톡 결과발송을 했으므로)
-			if (ExtmallUploadFailStat.ORDER.value().equals(resultMap.get("uploadFailCd").toString())) {
-				succCnt = -1;	// 알림톡 발송도 안함.
-				break;
-			}
+		result.set("orderDetailList", orderDetailList);
+
+		// 주문생성 여부
+		if( 0 < succCnt ) {
+			// 주문등록
+			result.put("message", "SUCCESS");
+		}else {
+			// 주문등록 안함.
+			result.put("message", "FAIL");
 		}
 
+		// 알림톡 발송타입
 		if( succCnt < 0 ) {
-			// 전체실패 - 알림톡발송 안함
-			resultStr = "NOT";
+			result.put("sendNotiType", "NOT");				// 알림톡 미발송-이미처리된 건(동일날짜 주문수집시)
+		}else if( 0 == succCnt ) {	// 전체실패
+
+			if( 0 == stockFailCnt ) {
+				result.put("sendNotiType", "NOT");			// 알림톡 미발송- 일반실패 또는 이미처리된 건(동일날짜 주문수집시)
+			}else if(dtlCnt == stockFailCnt) {
+				result.put("sendNotiType", "ALL_FAIL");		// 알림톡발송 - 재고관련 전체실패
+			}else {
+				result.put("sendNotiType", "PART_SUCCESS");	// 알림톡발송 - 부분성공
+			}
 
-		}else if( 0 == succCnt ) {
-			// 전체실패
-			resultStr = "ALL_FAIL";
 		}else if( dtlCnt == succCnt ) {
-			// 전체성공
-			resultStr = "ALL_SUCCESS";
+			result.put("sendNotiType", "ALL_SUCCESS");		// 알림톡발송 - 전체성공
 		}else {
-			// 일부성공
-			resultStr = "PART_SUCCESS";
+			result.put("sendNotiType", "PART_SUCCESS");		// 알림톡발송 - 부분성공
 		}
-		return resultStr;
+
+		// 실패상품목록
+		if( 0 < failGoods.length()) failGoods = failGoods.substring(0, failGoods.length()-1);
+		result.put("failGoods", failGoods);			// 실패상품목록
+		result.put("failCnt", dtlCnt - succCnt );	// 총 실패건수
+		result.put("stockFailCnt", stockFailCnt );	// 재고로인한 실패건수
+
+		return result;
 	}
 
 	/**
@@ -521,8 +558,7 @@ public class TsaOcmService {
 	 * 세트 : goodsCd,
 	 * @param params
 	 */
-	@Transactional("shopTxnManager")
-	public GagaMap saveGoodsInfo(ExtmallOrder param) {
+	public GagaMap checkGoodsInfo(ExtmallOrder param) {
 		GagaMap result = new GagaMap();
 		result.put("message", "SUCCESS");
 
@@ -530,37 +566,52 @@ public class TsaOcmService {
 		ExtmallOrder dtlOrd = ocmDao.getExtmallOrderInfo(param);
 
 		if( null == dtlOrd) {
+			result.put("sendNotiYn", "N");	// 알림톡발송 x
 			result.put("uploadFailCd", ExtmallUploadFailStat.ETC.value());	// 값이 무조건 존재해야함
 			result.put("message", "오류입니다. 관리자확인요청>"+param.getAgentOrderId());
 			return result;
 
 		}else if( null != dtlOrd.getOrdNo() ){
+			result.put("sendNotiYn", "N");	// 알림톡발송 x
 			result.put("uploadFailCd", ExtmallUploadFailStat.ORDER.value());
 			result.put("ordNo", dtlOrd.getOrdNo());
 			result.put("message", "동일한 주문건이 존재합니다.");
 			return result;
 
+		}else if( 0 < dtlOrd.getStockFailHstCnt() ){
+			result.put("sendNotiYn", "N");	// 알림톡발송 x
+			result.put("uploadFailCd", ExtmallUploadFailStat.STOCK.value());
+			result.put("message", "이미 재고 부족으로 인한 고객 알림 발송이 완료된 건입니다.(동일수집 실패)");
+			return result;
+
 		} else if( null == dtlOrd.getExtmallId()) {
+			result.put("sendNotiYn", "N");	// 알림톡발송 x
 			result.put("uploadFailCd", ExtmallUploadFailStat.STORE.value());
 			result.put("message", "제휴몰ID 정보가 잘못되었습니다.");
 			return result;
 
 		} else if( null == dtlOrd.getGoodsCd()) {
+			result.put("sendNotiYn", "N");	// 알림톡발송 x
 			result.put("uploadFailCd", ExtmallUploadFailStat.GOODS.value());
 			result.put("message", "상품코드가 잘못되었습니다.");
 			return result;
 
 		} else if( null == dtlOrd.getOptCd()) {
+			result.put("sendNotiYn", "N");	// 알림톡발송 x
 			result.put("uploadFailCd", ExtmallUploadFailStat.SIZE.value());
 			result.put("message", "옵션코드가 잘못되었습니다.");
 			return result;
 
 		} else if (TscConstants.GoodsStat.SOLDOUT.value().equals(dtlOrd.getGoodsStat())) {
+			result.put("goodsNm", dtlOrd.getGoodsNm());
+			result.put("sendNotiYn", "Y");	// 알림톡발송 o
 			result.put("uploadFailCd", ExtmallUploadFailStat.STOCK.value());
 			result.put("message", "품절입니다.");
 			return result;
 
 		} else if (!TscConstants.GoodsStat.SOLDOUT.value().equals(dtlOrd.getGoodsStat()) && !TscConstants.GoodsStat.APPR.value().equals(dtlOrd.getGoodsStat())) {
+			result.put("goodsNm", dtlOrd.getGoodsNm());
+			result.put("sendNotiYn", "Y");	// 알림톡발송 o
 			result.put("uploadFailCd", ExtmallUploadFailStat.STOCK.value());
 			result.put("message", "판매중인 상품이 아닙니다.");
 			return result;
@@ -576,6 +627,8 @@ public class TsaOcmService {
 		String stockResult = this.getCheckStock(checkParam);
 
 		if (!"SUCCESS".equals(stockResult)) {
+			result.put("goodsNm", dtlOrd.getGoodsNm());
+			result.put("sendNotiYn", "Y");	// 알림톡발송 o
 			result.put("uploadFailCd", ExtmallUploadFailStat.STOCK.value());
 			result.put("message", stockResult);
 			return result;

+ 176 - 15
src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java

@@ -1,6 +1,7 @@
 package com.style24.admin.biz.service;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -9,8 +10,10 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscOrderChangeService;
+import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.biz.service.TscWmsService;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.WmsDelivery;
 
@@ -37,6 +40,9 @@ public class TsaOrderChangeService {
 	
 	@Autowired
 	private TscWmsService coreWmsService;
+	
+	@Autowired
+	private TscOrderRefundService coreOrderRefundService;
 
 	/**
 	 * 반품 TO 교환 처리
@@ -47,41 +53,196 @@ public class TsaOrderChangeService {
 	 */
 	@Transactional("shopTxnManager")
 	public void returnToExchange(OrderChange orderChange) {
-		Integer ordChgSq = orderChange.getOrdChgSq();
-		Integer ordNo = orderChange.getOrdNo();
+		int userNo = orderChange.getUserNo();
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+
 		// 1. 반품 철회 처리
-		GagaMap map = new GagaMap();
-		map.setInt("ordChgSq", ordChgSq);
-		map.setInt("ordNo", ordNo);
+		this.returnCancel(orderChange);
+
+		// 2. WMS 회수지시 여부 체크 후 회시지시대상여부 컬럼 정보 설정
+		orderChange.setWdTargetYn(this.getWdTargetYnInfo(orderChange));
+
+		// 3. WMS 반품 정보 삭제 처리
+		coreWmsService.updateWmsRecallCancel(orderChange.getOrdNo(), orderChange.getOrdChgSq());
+
+		// 4. 회수송장정보 설정
+		orderChange = this.setWdInvoiceInfo(orderChange);
+
+		// 5. 교환 접수 처리
+		coreOrderChangeService.exchReq(orderChange);
+	}
+
+	/**
+	 * 반품 TO 반품 처리
+	 *
+	 * @param orderChange
+	 * @author card007
+	 * @since 2021. 06. 21
+	 */
+	@Transactional("shopTxnManager")
+	public void returnToReturn(OrderChange orderChange) {
+		int userNo = orderChange.getUserNo();
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+
+		// 1. 반품 철회 처리
+		this.returnCancel(orderChange);
+
+		// 2. WMS 회수지시 여부 체크 후 회시지시대상여부 컬럼 정보 설정
+		orderChange.setWdTargetYn(this.getWdTargetYnInfo(orderChange));
 
+		// 3. WMS 반품 정보 삭제 처리
+		coreWmsService.updateWmsRecallCancel(orderChange.getOrdNo(), orderChange.getOrdChgSq());
+
+		// 4. 회수송장정보 설정
+		orderChange = this.setWdInvoiceInfo(orderChange);
+
+		// 5. 반품 사전 정보 설정
+		GagaMap map = this.getReturnInfo(orderChange);
+		
+		// 6. 반품 접수 처리
+		coreOrderChangeService.returnRequest(map);
+	}
+
+	/**
+	 * 교환 TO 교환 처리
+	 *
+	 * @param orderChange
+	 * @author card007
+	 * @since 2021. 06. 21
+	 */
+	@Transactional("shopTxnManager")
+	public void exchangeToExchange(OrderChange orderChange) {
 		int userNo = orderChange.getUserNo();
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
 
-		coreOrderChangeService.rtnReqCancel(map, userNo);
+		// 1. 교환 철회 처리
+		this.exchangeCancel(orderChange);
 
 		// 2. WMS 회수지시 여부 체크 후 회시지시대상여부 컬럼 정보 설정
-		orderChange.setWdTargetYn("Y");
+		orderChange.setWdTargetYn(this.getWdTargetYnInfo(orderChange));
+
+		// 3. WMS 교환 정보 삭제 처리
+		coreWmsService.updateWmsRecallCancel(orderChange.getOrdNo(), orderChange.getOrdChgSq());
+
+		// 4. 회수송장정보 설정
+		orderChange = this.setWdInvoiceInfo(orderChange);
+
+		// 5. 교환 접수 처리
+		coreOrderChangeService.exchReq(orderChange);
+	}
+
+	/**
+	 * 반품 철회 처리
+	 * 
+	 * @param OrderChange
+	 * @author card007
+	 * @since 2021. 06. 21
+	 */
+	private void returnCancel(OrderChange orderChange) {
+		GagaMap map = new GagaMap();
+		map.setInt("ordChgSq", orderChange.getOrdChgSq());
+		map.setInt("ordNo", orderChange.getOrdNo());
+
+		coreOrderChangeService.rtnReqCancel(map, orderChange.getUserNo());
+	}
+
+	/**
+	 * 교환 철회 처리
+	 * 
+	 * @param OrderChange
+	 * @author card007
+	 * @since 2021. 06. 21
+	 */
+	private void exchangeCancel(OrderChange orderChange) {
+		coreOrderChangeService.exchangeCancel(orderChange);
+	}
+
+	/**
+	 * 회시지시대상여부 컬럼 정보 설정
+	 * 
+	 * @param OrderChange
+	 * @return String
+	 * @author card007
+	 * @since 2021. 06. 21
+	 */
+	private String getWdTargetYnInfo(OrderChange orderChange) {
+		String wdTargetYn = "Y";
 
 		WmsDelivery wmsDelivery = new WmsDelivery();
-		wmsDelivery.setOrderExceptionNo(ordChgSq);
+		wmsDelivery.setOrderExceptionNo(orderChange.getOrdChgSq());
 		Collection<WmsDelivery> list = coreWmsService.getWmsWithdrawRequestInfo(wmsDelivery);
 
 		if (list != null && list.size() > 0) {
 			String ifStat = list.iterator().next().getIfStat();
 			if (!"0".equals(ifStat)) {
-				orderChange.setWdTargetYn("N");
+				wdTargetYn = "N";
 			}
 		}
+		
+		return wdTargetYn;
+	}
 
-		// 3. WMS 반품 정보 삭제 처리
-		coreWmsService.updateWmsRecallCancel(ordNo, ordChgSq);
-
-		// 4. 교환 접수 처리
+	/**
+	 * 회수송장번호 설정
+	 * 
+	 * @param OrderChange
+	 * @return OrderChange
+	 * @author card007
+	 * @since 2021. 06. 21
+	 */
+	private OrderChange setWdInvoiceInfo(OrderChange orderChange) {
 		Collection<OrderChange> orderChangeDetailInfoList = coreOrderChangeService.getOrderChangeDetailInfo(orderChange);
 		if (orderChangeDetailInfoList != null && orderChangeDetailInfoList.size() > 0) {
 			orderChange.setWdInvoiceNo(orderChangeDetailInfoList.iterator().next().getWdInvoiceNo());
 			orderChange.setWdInvoiceSendYn(orderChangeDetailInfoList.iterator().next().getWdInvoiceSendYn());
 		}
-		
-		coreOrderChangeService.exchReq(orderChange);
+
+		return orderChange;
+	}
+
+	/**
+	 * 반품 정보 설정
+	 * 
+	 * @param OrderChange
+	 * @author card007
+	 * @since 2021. 06. 21
+	 */
+	@SuppressWarnings("unchecked")
+	private GagaMap getReturnInfo(OrderChange orderChange) {
+		// 1. 환불 사전 정보 조회
+		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo(orderChange);
+		List<Order> returnReqList = (List<Order>)refundPreInfo.get("cnclReqList");
+		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
+		String supplyCompCd = refundPreInfo.getString("supplyCompCd");
+
+		// 2. 환불금액계산
+		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(returnReqList);
+
+		// 3. 주문변경 기본정보 설정
+		result.set("ordNo", orderChange.getOrdNo());					// 주문번호
+		result.setInt("custNo", orderChange.getCustNo());				// 고객번호
+		// result.set("ordChgSq", orderChange.getOrdChgSq());			// 주문변경번호
+		result.set("chgReason", orderChange.getChgReason());			// 변경사유
+		result.set("chgMemo", orderChange.getChgMemo());				// 변경메모
+		result.set("accountNo", orderChange.getAccountNo());			// 환불계좌번호
+		result.set("accountNm", orderChange.getAccountNm());			// 환불계좌예금주명
+		result.set("bankCd", orderChange.getBankCd());					// 환불계좌은행코드
+		result.setString("allLastCanYn", allLastCanYn);					// 전체 마지막 취소 여부
+		result.set("isCustomer", orderChange.getIsCustomer());			// 변경사유 (고객, 회사)
+		result.set("wdGb", orderChange.getWdGb());						// 회수방법
+		result.set("wdInvoiceNo", orderChange.getWdInvoiceNo());		// 회수송장번호
+		result.set("chgerNm", orderChange.getChgerNm());				// 변경자명
+		result.set("chgerEmail", orderChange.getChgerEmail());			// 변경자이메일주소
+		result.set("chgerZipcode", orderChange.getChgerZipcode());		// 회수지우편번호
+		result.set("chgerBaseAddr", orderChange.getChgerBaseAddr());	// 회수지기본주소
+		result.set("chgerDtlAddr", orderChange.getChgerDtlAddr());		// 회수지상세주소
+		result.set("chgerPhnno", orderChange.getChgerPhnno());			// 변경자핸드폰번호
+		result.set("chgerTelno", orderChange.getChgerTelno());			// 변경자전화번호
+		result.set("chgerRtnMemo", orderChange.getChgerRtnMemo());		// 반품메모
+
+		return result;
 	}
 }

+ 3 - 0
src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java

@@ -214,6 +214,9 @@ public class TsaShoplinkerService {
 					sbRequest.append("	</productInfo>\n");
 					sbRequest.append("</shoplinker>\n");
 
+					regMap.setOptCd(map.getPartnerProductId());
+					regMap.setQuantity(map.getQuantity());
+
 					// api 호출 및 결과 history 저장
 					succCnt += callGoodsRegApi(regMap , sbRequest, "option_"+opCnt);
 				}

+ 2 - 8
src/main/java/com/style24/admin/biz/web/TsaBusinessController.java

@@ -872,21 +872,15 @@ public class TsaBusinessController extends TsaBaseController {
 	@PostMapping("/account/check")
 	@ResponseBody
 	public GagaMap getAccountCheck(@RequestBody CustAccount custAccount) {
-		custAccount.setIpAddress(TscSession.getIpAddress());
 		boolean isValid = false;
 
-		String fileEncoding = System.getProperty("file.encoding");
-		log.info("fileEncoding ::: {}", fileEncoding);
-
-		log.info("custAccount.getAccountNm() ::: {}", custAccount.getAccountNm());
-		log.info("custAccount.getBankCd() ::: {}",custAccount.getBankCd());
-		log.info("custAccount.getAccountNo() ::: {}",custAccount.getAccountNo());
 		GagaMap result = coreKcpService.checkAccount(custAccount);
+
 		if ("0000".equals(result.get("resCd"))) {
 			isValid = true;
 		}
 
-		result.set("isValid", isValid);
+		result.setBoolean("isValid", isValid);
 		return result;
 	}
 }

+ 10 - 1
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -246,6 +246,14 @@ public class TsaOrderChangeController extends TsaBaseController {
 			result = coreOrderChangeService.partialCancel(map, userNo);
 		}
 		
+		// 2021.06.21 교환TO취소 교환배송비 취소처리
+		if (cnclReq.getAddPayCost() > 0) {
+			cnclReq.setUserNo(userNo);
+			cnclReq.setRegNo(userNo);
+			cnclReq.setUpdNo(userNo);
+			coreOrderChangeService.addPayCostCncl(cnclReq);
+		}
+		
 		// 5. 취소 알림톡 및 메일 발송
 		int ordChgSq = result.getInt("ordChgSq");
 
@@ -311,6 +319,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		if (order.getOrdChgSq() > 0) {
 			Collection<Order> exchangeInfoList = coreOrderChangeService.getExchangeInfo(order);
 			mav.addObject("exchangeInfoList"		, exchangeInfoList);											// 교환정보
+			mav.addObject("ordChgGb"				, order.getOrdChgGb());											// 주문변경요쳥변경구분
 		}
 		
 		String chgStat = "";
@@ -329,7 +338,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		mav.addObject("delvFeeCd"					, order.getDelvFeeCd());										// 배송정책코드
 		mav.addObject("delvFeeCdGrp"				, order.getDelvFeeCdGrp());										// 배송정책그룹코드
 		mav.addObject("orderChangeDetailList"		, orderChangeDetailList);										// 변경신청목록 (취소/반품/교환)
-		mav.addObject("orderDelvRtnAddrInfo"		, coreOrderService.getDeliveryAddrList(order));						// 배송정보
+		mav.addObject("orderDelvRtnAddrInfo"		, coreOrderService.getDeliveryAddrList(order));					// 배송정보
 		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));				// 전화번호국번
 		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));				// (휴대전화)번호국번
 		mav.addObject("chgStat"						, chgStat);														// 변경상태

+ 5 - 4
src/main/java/com/style24/admin/biz/web/TsaShoplinkerController.java

@@ -8,6 +8,7 @@ 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;
@@ -344,13 +345,13 @@ public class TsaShoplinkerController extends TsaBaseController {
 				rtnMap = shoplinkerService.insertShoplinkerOrderStep1(shoplinkerOrder);
 
 				// 3. 제휴몰 주문등록
-				slkSearch.setTxt("=>제휴몰 등록중");
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				slkSearch.setTxt("=>제휴몰");
+				shoplinkerService.updateCallApiRunable(slkSearch);
 				shoplinkerService.insertShoplinkerOrderStep2(shoplinkerOrder);
 
 				// 4. 스타일24 주문등록 (제휴몰 - 대기상태인 것들)
-				slkSearch.setTxt("=>스타일24 주문등록 중");
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				slkSearch.setTxt("=>스타일24");
+				shoplinkerService.updateCallApiRunable(slkSearch);
 				ocmService.createShoplinkerOrder("S");
 
 			}catch (Exception e) {

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

@@ -68,6 +68,7 @@ public class ExtmallOrder extends TscBaseDomain {
 	private String warningYn;			// 주의여부(엑셀업로드 결과표시관련)
 	private String supplyCompCd;		// 공급업체코드
 	private Integer totalOrdAmt;		// 총 주문금액
+	private Integer stockFailHstCnt;	// 주문업로드시 재고실패이력 cnt
 
 	private String stDate;
 	private String edDate;

+ 4 - 1
src/main/java/com/style24/persistence/domain/Poll.java

@@ -99,7 +99,7 @@ public class Poll extends TscBaseDomain{
 
 	// Masking
 	public String getMaskingCustId() {
-		return TsaSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.id(this.custId) : this.custId;
+		return TsaSession.getInfo().getMaskingYn().equals("Y") ? MaskingUtils.id(custId) : custId;
 	}
 	public String getMaskingCustNm() {
 		return TsaSession.getInfo().getMaskingYn().equals("Y") ? MaskingUtils.name(getCustNm()) : getCustNm();
@@ -107,4 +107,7 @@ public class Poll extends TscBaseDomain{
 	
 	
 
+	
+	
+
 }

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

@@ -50,6 +50,8 @@ public class ShoplinkerSearch extends TscBaseDomain {
 	private String apiResult;
 	private String apiStDate;
 
+	private Integer remainExtCnt;		// 주문수집시-제휴몰주문업로드 남은수
+	private Integer remainStyleCnt;		// 주문수집시-스타일24주문업로드 남은수
 
 	//@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	//private String[] siteCd;

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

@@ -183,7 +183,7 @@
 								  INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON B.ORD_DTL_NO   = ODI.ORD_DTL_NO
 							      INNER JOIN TB_GOODS C               ON ODI.ITEM_CD    = C.GOODS_CD
 							      INNER JOIN TB_DELIVERY_ADDR D       ON B.DELV_ADDR_SQ = D.DELV_ADDR_SQ
-								  INNER JOIN TB_PAYMENT       P       ON A.ORD_NO       = P.ORD_NO  AND P.PAY_STAT = 'G016_30'
+								  INNER JOIN TB_PAYMENT       P       ON A.ORD_NO       = P.ORD_NO  AND P.PAY_STAT = 'G016_30' AND P.PAY_GB = 'O'
 							 LEFT OUTER JOIN TB_CUST_ACCOUNT  T       ON A.CUST_NO      = T.CUST_NO AND T.DEFAULT_YN = 'Y' AND T.DEL_YN = 'N'
 							WHERE 1=1 
 							  AND B.GOODS_TYPE NOT IN ('G056_S')
@@ -1042,7 +1042,7 @@
 		       , DELV_LOC_CD
 		       , LOC_QTY AS STOCK_QTY
 		       , (SELECT DELV_LOC_CLSF FROM TB_DELIVERY_LOC WHERE DELV_LOC_CD = A.DELV_LOC_CD AND SUPPLY_COMP_CD = #{supplyCompCd} ) AS DELV_LOC_CLSF
-		       , IFNULL((SELECT CASE WHEN DELV_AR_GB ='N' THEN 'Y' ELSE 'N' END FROM TB_DELIVERY_ASSIGN WHERE DELV_LOC_CD = A.DELV_LOC_CD AND  ORD_DTL_NO = #{ordDtlNo}),'N') AS DELV_AR_GB
+		       , IFNULL((SELECT CASE WHEN MAX(DELV_AR_GB) ='N' THEN 'Y' ELSE 'N' END FROM TB_DELIVERY_ASSIGN WHERE DELV_LOC_CD = A.DELV_LOC_CD AND  ORD_DTL_NO = #{ordDtlNo}),'N') AS DELV_AR_GB
 		  FROM TB_DELIVERY_LOC_TMP A
 		 WHERE USE_GB        = #{useGb}
 		   AND GOODS_LOC_CNT = #{goodsLocCnt}

+ 23 - 141
src/main/java/com/style24/persistence/mybatis/shop/TsaOcm.xml

@@ -389,6 +389,7 @@
 			, A.EXTMALL_ORDER_ID
 			, B.EXTMALL_ID
 			, GS.GOODS_CD
+			, GS.GOODS_NM
 			, GS.GOODS_STAT
 			, GS.CURR_PRICE
 			, GS.LIST_PRICE
@@ -397,7 +398,9 @@
 			, OP.SOLDOUT_YN
 			, (SELECT MAX(ORD_NO) FROM TB_ORDER_DETAIL OD WHERE A.VENDOR_ID = OD.VENDOR_ID AND A.EXTMALL_ID = OD.EXTMALL_ID
 				AND A.AGENT_ORDER_ID = OD.AGENT_ORDER_ID AND A.EXTMALL_ORDER_ID = OD.EXTMALL_ORDER_ID) AS ORD_NO
-
+			, (SELECT COUNT(UPLOAD_STAT) FROM TB_EXTMALL_ORDER_UPLOAD S WHERE A.VENDOR_ID = S.VENDOR_ID
+				AND A.EXTMALL_ID = S.EXTMALL_ID AND A.AGENT_ORDER_ID = S.AGENT_ORDER_ID AND A.EXTMALL_ORDER_ID = S.EXTMALL_ORDER_ID
+				AND S.UPLOAD_STAT = 'G021_40' AND UPLOAD_FAIL_CD = 'G022_60') AS STOCK_FAIL_HST_CNT
 		FROM TB_EXTMALL_ORDER_UPLOAD A
 			LEFT OUTER JOIN TB_EXTMALL B ON A.EXTMALL_ID = B.EXTMALL_ID AND B.USE_YN = 'Y'
 			LEFT OUTER JOIN TB_GOODS GS ON A.GOODS_CD = GS.GOODS_CD
@@ -1214,125 +1217,6 @@
 		AND    FV.DEL_YN = 'N'
 	</update>
 
-	<!-- 상품 정보 -->
-	<select id="getGoodsInfo" parameterType="Goods" resultType="Goods">
-		/* TsaOcm.getGoodsInfo */
-		SELECT Z.*
-		     , 100 - ROUND((CURR_PRICE / LIST_PRICE) * 100 ,0) AS DC_RATE
-		     , ((PNT_RATE * CURR_PRICE) / 100) AS PNT_AMT
-		     , FN_GET_GOODS_NM(GOODS_NM,GOODS_GB,FOREIGN_BUY_YN,PARALLEL_IMPORT_YN,ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/
-		FROM (
-		SELECT G.GOODS_CD
-		     , G.GOODS_NM
-		     , G.GOODS_TNM
-		     , G.GOODS_GB
-		     , G.FOREIGN_BUY_YN
-		     , G.PARALLEL_IMPORT_YN
-		     , G.ORDER_MADE_YN
-		     , G.BRAND_CD
-		     , (CASE WHEN D.DISP_NM_LANG = 'EN' THEN D.BRAND_GROUP_ENM ELSE D.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
-		     , D.BRAND_GROUP_NO
-		     , B.LOGO_FILE_NM
-		     , G.ITEMKIND_CD
-		     , G.FORMAL_GB
-		     , G.LIST_PRICE
-		     , FN_GET_APPLY_CPN1_PRICE(G.GOODS_CD, #{shoplinkerFrontGb})  AS CURR_PRICE
-		     , G.SELF_GOODS_YN
-		     , G.GOODS_STAT
-		     , (CASE WHEN #{shoplinkerFrontGb} = 'P' THEN G.PNT_PRATE ELSE G.PNT_MRATE END) AS PNT_RATE
-		     , (CASE WHEN #{shoplinkerFrontGb} = 'P' THEN G.PRE_PPNT_USABLE_YN ELSE G.PRE_MPNT_USABLE_YN END) AS PRE_PNT_USABLE_YN
-		     , G.MIN_ORD_QTY
-		     , G.MAX_ORD_QTY
-		     , G.DAY_MAX_ORD_QTY
-		     , G.SEX_GB
-		     , FN_GET_CODE_NM('G007',G.SEX_GB) AS SEX_NM
-		     , E.DELV_FEE
-		     , E.RTN_DELV_FEE
-		     , E.MIN_ORD_AMT
-		     , E.DELV_FEE_CRITE
-		     , FN_GET_CODE_NM('G073',G.GOODS_GB) AS GOODS_GB_NM
-		     , (SELECT NI_CLSF_CD
-		        FROM TB_ITEMKIND
-		        WHERE ITEMKIND_CD = G.ITEMKIND_CD) AS NI_CLSF_CD
-		     , G.MAIN_COLOR_CD
-		     , (IFNULL(NULLIF(#{shoplinkerColorCd},'') , G.MAIN_COLOR_CD )) AS COLOR_CD
-		     , G.SUPPLY_COMP_CD
-		     , G.SELF_MALL_YN
-		     , G.AGE_GRP_CD
-		     , G.GIFT_PACK_YN
-		     , G.NEW_CUST_ORD_YN
-		     , G.ADULT_YN
-		     , G.GOODS_TYPE
-		     , G.CHANGEABLE_YN
-		     , G.RETURNABLE_YN
-		     , G.ORIGIN_CD
-		     , G.TOBE_FORM_YN
-		     , FN_GET_CODE_NM('G076',G.ORIGIN_CD) AS ORIGIN_NM
-		     , FN_GET_CODE_NM('G008',G.GOODS_STAT) AS GOODS_STAT_NM
-		     , DATE_FORMAT(G.REG_DT ,'%Y%m%d%H%i%S') AS REG_DT
-		     , DATE_FORMAT(G.UPD_DT ,'%Y%m%d%H%i%S') AS UPD_DT
-		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = IFNULL(#{shoplinkerColorCd}, IFNULL(G.MAIN_COLOR_CD,'XX')) AND DEFAULT_IMG_YN = 'Y') AS SYS_IMG_NM
-		     , (SELECT COLOR_KNM FROM TB_COLOR C WHERE COLOR_CD = IFNULL(NULLIF(#{shoplinkerColorCd},'') , G.MAIN_COLOR_CD ) AND USE_YN  = 'Y') AS COLOR_NM
-		     -- , BP.CURR_PRICE AS BENEFIT_PRICE
-		     , (CASE WHEN W.GOODS_CD IS NULL THEN 'N' ELSE 'Y' END) AS WISH_YN
-		     , (CASE WHEN G.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
-		                                                               ELSE CURR_STOCK_QTY
-		                                                               END) ,0)
-		                                                FROM  VW_STOCK
-		                                                WHERE GOODS_CD = G.GOODS_CD
-		                                                AND OPT_CD1 =  (CASE WHEN G.SELF_GOODS_YN = 'N' THEN OPT_CD1
-		                                                                    ELSE  IFNULL(#{shoplinkerColorCd}, IFNULL(G.MAIN_COLOR_CD,'XX')) END)
-		                                                GROUP BY GOODS_CD )
-		            ELSE (SELECT IFNULL(MAX(CASE WHEN SOLDOUT_YN = 'Y' THEN 0
-		                                      ELSE CURR_STOCK_QTY
-		                                      END) ,0)
-		                  FROM  VW_STOCK_COMPOSE
-		                  WHERE GOODS_CD= G.GOODS_CD
-		                  GROUP BY GOODS_CD )
-		            END) AS STOCK_QTY
-		     , (CASE WHEN G.SELF_GOODS_YN ='Y' AND IFNULL(DS.GOODS_CD, 'Y') = 'Y' THEN 'Y' ELSE 'N' END ) AS QUIK_DELV_YN
-		     , GS.REVIEW_REG_CNT
-		     , GS.SCORE
-		     , GS.SCORE_SIZE1
-		     , GS.SCORE_SIZE2
-		     , GS.SCORE_SIZE3
-		     , GS.SCORE_COLOR1
-		     , GS.SCORE_COLOR2
-		     , GS.SCORE_COLOR3
-		     , GS.SCORE_FIT1
-		     , GS.SCORE_FIT2
-		     , GS.SCORE_FIT3
-		     , GS.SCORE_THICK1
-		     , GS.SCORE_THICK2
-		     , GS.SCORE_THICK3
-		     , GS.SCORE_WEIGHT1
-		     , GS.SCORE_WEIGHT2
-		     , GS.SCORE_WEIGHT3
-		     , GS.SCORE_BALL1
-		     , GS.SCORE_BALL2
-		     , GS.SCORE_BALL3
-		     , GS.GOODS_QNA_CNT
-		     , (SELECT TI.SIZE_GB FROM TB_ITEMKIND TI WHERE TI.ITEMKIND_CD = G.ITEMKIND_CD) AS SIZE_GB
-		FROM TB_GOODS G
-		INNER JOIN TB_GOODS_SUMMARY GS ON G.GOODS_CD = GS.GOODS_CD
-		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		                      AND B.USE_YN = 'Y'
-		INNER JOIN TB_SITE_BRAND SB ON B.BRAND_CD  = SB.BRAND_CD
-		                            AND SB.USE_YN = 'Y'
-		                            AND SB.SITE_CD = #{siteCd}
-		INNER JOIN TB_BRAND_GROUP D ON B.BRAND_GROUP_NO = D.BRAND_GROUP_NO
-		                            AND D.USE_YN = 'Y'
-		INNER JOIN TB_DELV_FEE_POLICY E ON G.SUPPLY_COMP_CD = E.SUPPLY_COMP_CD
-		                                     AND G.DELV_FEE_CD =  E.DELV_FEE_CD
-		LEFT OUTER JOIN TB_WISHLIST W ON G.GOODS_CD = W.GOODS_CD
-		                              AND IFNULL(#{shoplinkerCustNo}, 0) = W.CUST_NO
-		LEFT OUTER JOIN TB_GOODS_SHOT_DELV_SKIP DS ON G.GOODS_CD =DS.GOODS_CD
-		WHERE G.GOODS_CD = #{goodsCd}
-		AND NOW() BETWEEN SELL_STDT AND SELL_EDDT	/*판매기간 확인*/
-
-		) Z
-	</select>
-
 	<!-- 상품 재고 조회 -->
 	<select id="getGoodsStockInfo" parameterType="GoodsStock" resultType="GoodsStock">
 		/* TsaOcm.getGoodsStockInfo */
@@ -1752,7 +1636,7 @@
 					ROW_NUMBER() OVER(PARTITION BY A.VENDOR_ID, A.EXTMALL_ID, A.AGENT_ORDER_ID, A.EXTMALL_ORDER_ID ORDER BY A.REG_DT DESC) AS RANKING
 					, A.VENDOR_ID
 					, A.EXTMALL_ID
-					, A.EXTMALL_NM
+					, (SELECT S.EXTMALL_NM FROM TB_EXTMALL S WHERE S.EXTMALL_ID = A.EXTMALL_ID) AS EXTMALL_NM
 					, A.AGENT_ORDER_ID
 					, A.EXTMALL_ORDER_ID
 					, A.EXTMALL_PROD_ID
@@ -1783,7 +1667,8 @@
 					, A.UPLOAD_FAIL_CD
 					, FN_GET_CODE_NM('G022', A.UPLOAD_FAIL_CD) AS UPLOAD_FAIL_NM
 					, A.UPLOAD_FAIL_REASON
-					, A.ORD_NO
+					, (SELECT MAX(ORD_NO) FROM TB_ORDER_DETAIL OD WHERE A.VENDOR_ID = OD.VENDOR_ID AND A.EXTMALL_ID = OD.EXTMALL_ID
+						AND A.AGENT_ORDER_ID = OD.AGENT_ORDER_ID AND A.EXTMALL_ORDER_ID = OD.EXTMALL_ORDER_ID) AS ORD_NO
 					, A.DELV_ADDR_SQ
 					, A.OPT_CD
 					, A.UPLOAD_GB
@@ -1828,24 +1713,21 @@
 		) A  WHERE A.RANKING = 1
 	</select>
 
-	<!-- 외부몰주문업로드 선처리 -->
-	<update id="updateExtmallOrderUploadPrehandle" parameterType="ExtmallOrder">
-		/* TsaOcm.updateExtmallOrderUploadPrehandle */
-		UPDATE TB_EXTMALL_ORDER_UPLOAD
-		SET    UPLOAD_STAT = '20' --유효성검증
-		WHERE  VENDOR_ID = #{vendorId}
-		AND    REG_NO = #{regNo}
-		AND    UPLOAD_GB = 'E'
-		<choose>
-		    <when test="agentOrderId != null and agentOrderId != '' and extmallOrderId != null and extmallOrderId != ''"> <!-- 주문수집 출고 수작업 처리 시 -->
-		AND    AGENT_ORDER_ID = #{agentOrderId}
-		AND    EXTMALL_ORDER_ID = #{extmallOrderId}
-		AND    UPLOAD_STAT = '40' --실패
-		    </when>
-		    <otherwise>
-		AND    UPLOAD_STAT = '00' --대기
-		    </otherwise>
-		</choose>
-	</update>
+	<insert id="insertTestNotiInfo" parameterType="ExtmallOrder">
+		INSERT INTO TEST_SHOPLINKER_NOTI_HST (
+		       EXTMALL_ID
+		     , EXTMALL_ORDER_ID
+		     , NOTI_INFO
+		     , REG_DT
+		)
+		VALUES (
+		     #{extmallId}
+		     , #{extmallOrderId}
+		     , #{sku}
+		     , NOW()
+		)
+
+	</insert>
+
 
 </mapper>

+ 53 - 52
src/main/java/com/style24/persistence/mybatis/shop/TsaShoplinker.xml

@@ -45,6 +45,8 @@
 			, RUN_EDDT
 			, TXT
 			, (SELECT COUNT(1) FROM SHOPLINKER_RUNABLE S WHERE S.API_TYPE = A.API_TYPE AND S.RUN_EDDT IS NULL ) AS RUN_CNT
+			, (SELECT COUNT(1) FROM SHOPLINKER_ORDER S WHERE S.EXTMALL_REG_YN = 'N' AND S.SKU_MATCH_CODE != '') AS REMAIN_EXT_CNT
+			, (SELECT COUNT(1) FROM TB_EXTMALL_ORDER_UPLOAD WHERE UPLOAD_STAT = 'G021_00' AND UPLOAD_GB = 'S') AS REMAIN_STYLE_CNT
 		FROM SHOPLINKER_RUNABLE A
 		WHERE A.API_TYPE = #{apiType}
 		ORDER BY RUN_STDT DESC
@@ -659,32 +661,31 @@
 		/* ShoplinkerGoods.getSendInvoiceListCount */
 		select count(1) from (
 			SELECT
-				B.ORD_NO
-				, B.ORD_DTL_NO
-				, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = B.SHIP_COMP_CD ) AS SHIP_COMP_NM
-				, B.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
-				, B.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
-
-				, B.VENDOR_ID -- 외부몰벤더ID
-				, B.EXTMALL_ID -- 외부몰ID(외부몰)
-				, B.AGENT_ORDER_ID -- 에이전트주문번호
-				, B.EXTMALL_ORDER_ID -- 외부몰주문번호
-				, B.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
-				, B.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
-				, B.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
-				, FN_GET_CODE_NM('G013', B.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
-
-				, A.API_RESULT
-				, A.API_MESSAGE
-				, A.XML_TXT
-				, A.REG_DT
-				, FN_GET_USER_NM(A.REG_NO) AS REG_NM
+				OD.ORD_NO
+				, OD.ORD_DTL_NO
+				, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = OD.SHIP_COMP_CD ) AS SHIP_COMP_NM
+				, OD.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
+				, OD.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
+
+				, OD.VENDOR_ID -- 외부몰벤더ID
+				, OD.EXTMALL_ID -- 외부몰ID(외부몰)
+				, OD.AGENT_ORDER_ID -- 에이전트주문번호
+				, OD.EXTMALL_ORDER_ID -- 외부몰주문번호
+				, OD.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
+				, OD.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
+				, OD.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
+				, FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+				, OD.DELV_STDT
+
+				, SL.API_RESULT
+				, SL.API_MESSAGE
+				, SL.XML_TXT
+				, FN_GET_USER_NM(SL.REG_NO) AS REG_NM
 			FROM
-				SHOPLINKER_SYNC_HST A
-				, TB_ORDER_DETAIL B
-			WHERE A.API_PRODUCT_ID = B.ORD_DTL_NO
-			AND A.API_TYPE = 'INVOICE'
-			ORDER BY B.ORD_NO, B.ORD_DTL_NO
+				TB_ORDER_DETAIL OD
+				LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
+			WHERE OD.VENDOR_ID = 'G003_V001'
+			ORDER BY OD.ORD_NO, OD.ORD_DTL_NO
 		) A
 		WHERE 1=1
 		<include refid="getSlkInvoiceCondition_sql"/>
@@ -697,32 +698,31 @@
 		SELECT * FROM
 		(
 			SELECT
-				B.ORD_NO
-				, B.ORD_DTL_NO
-				, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = B.SHIP_COMP_CD ) AS SHIP_COMP_NM
-				, B.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
-				, B.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
-
-				, B.VENDOR_ID -- 외부몰벤더ID
-				, B.EXTMALL_ID -- 외부몰ID(외부몰)
-				, B.AGENT_ORDER_ID -- 에이전트주문번호
-				, B.EXTMALL_ORDER_ID -- 외부몰주문번호
-				, B.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
-				, B.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
-				, B.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
-				, FN_GET_CODE_NM('G013', B.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
-
-				, A.API_RESULT
-				, A.API_MESSAGE
-				, A.XML_TXT
-				, A.REG_DT
-				, FN_GET_USER_NM(A.REG_NO) AS REG_NM
+				OD.ORD_NO
+				, OD.ORD_DTL_NO
+				, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = OD.SHIP_COMP_CD ) AS SHIP_COMP_NM
+				, OD.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
+				, OD.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
+
+				, OD.VENDOR_ID -- 외부몰벤더ID
+				, OD.EXTMALL_ID -- 외부몰ID(외부몰)
+				, OD.AGENT_ORDER_ID -- 에이전트주문번호
+				, OD.EXTMALL_ORDER_ID -- 외부몰주문번호
+				, OD.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
+				, OD.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
+				, OD.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
+				, FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+				, OD.DELV_STDT
+
+				, SL.API_RESULT
+				, SL.API_MESSAGE
+				, SL.XML_TXT
+				, FN_GET_USER_NM(SL.REG_NO) AS REG_NM
 			FROM
-				SHOPLINKER_SYNC_HST A
-				, TB_ORDER_DETAIL B
-			WHERE A.API_PRODUCT_ID = B.ORD_DTL_NO
-			AND A.API_TYPE = 'INVOICE'
-			ORDER BY B.ORD_NO, B.ORD_DTL_NO
+				TB_ORDER_DETAIL OD
+				LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
+			WHERE OD.VENDOR_ID = 'G003_V001'
+			ORDER BY OD.ORD_NO, OD.ORD_DTL_NO
 		) A
 		WHERE 1=1
 		<include refid="getSlkInvoiceCondition_sql"/>
@@ -760,6 +760,7 @@
 	 	and B.INVOICE_NO is not null
 	 	and B.ORD_DTL_STAT = 'G013_50' -- 배송중
 		and DATE_FORMAT(B.DELV_STDT, '%Y-%m-%d' ) between DATE_FORMAT(#{stDate}, '%Y-%m-%d') and DATE_FORMAT(#{edDate}, '%Y-%m-%d')
+		and DATE_SUB(NOW(), INTERVAL 14 DAY) <![CDATA[ < ]]> DELV_STDT
 		and NOT EXISTS(SELECT 1 FROM SHOPLINKER_SYNC_HST s
 			where s.API_TYPE = 'INVOICE' and s.ord_dtl_no = B.ord_dtl_no
 			and api_result = 'true'
@@ -771,11 +772,11 @@
 	<sql id="getSlkInvoiceCondition_sql">
 
 			<if test="stDate != null and stDate != ''">
-	        AND REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+	        AND DELV_STDT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
             </if>
             <if test="edDate != null and edDate != ''">
             <![CDATA[
-	        AND REG_DT < DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+	        AND DELV_STDT < DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
             ]]>
             </if>
 

+ 0 - 21
src/main/webapp/WEB-INF/views/delivery/ExchangeDelvFailListForm.html

@@ -194,27 +194,6 @@ var fnCancelRequest = function (paramData, ordChgSq) {
 	
 	return false;
 };
-
-// 교환요청
-var fnExchangeRequest = function (paramData, ordChgSq) {
-	console.log(paramData);
-	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
-	if (ordChgSq == null) {
-		ordChgSq = 0;
-	}
-	
-	var paramArr 	= paramData.split("@");
-	var param 		= "";
-	param += "&ordNo=" 			+ paramArr[0];
-	param += "&ordDtlNo=" 		+ paramArr[1];
-	param += "&delvFeeCd="		+ paramArr[2];
-	param += "&delvFeeCdGrp="	+ paramArr[3];
-	param += "&ordChgSq=" 		+ ordChgSq;
-	
-	var actionUrl = "/orderChange/exchange/request/form?" + param;
-	cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
-};
-
 /*]]>*/
 </script>
 </html>

+ 28 - 9
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('SF003');" value="제휴몰 주문등록양식 다운로드" />
+						<input type="button" class="btn btn-default btn-lg" id="btnExcelDown" onclick="cfnDownloadSampleFile('SF022');" 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="결과확인"/>
@@ -62,10 +62,12 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+	var click_bool = true;
 	var columnDefs = [
 		{headerName: "업로드상태",			field: "uploadStatNm",			width: 150, cellClass: 'text-center'},
 		{headerName: "업로드실패사유",		field: "uploadFailNm",			width: 150, cellClass: 'text-center'},
 		{headerName: "업로드실패사유상세",	field: "uploadFailReason",		width: 200, cellClass: 'text-center'},
+		{headerName: "주문번호",			field: "ordNo",					width: 130, cellClass: 'text-center'},
 		{headerName: "제휴몰ID",			field: "extmallId",				width: 130, cellClass: 'text-center'},
 		{headerName: "제휴몰명",			field: "extmallNm",				width: 130, cellClass: 'text-center'},
 		{headerName: "쇼핑몰주문번호",		field: "extmallOrderId",		width: 150, cellClass: 'text-center'},
@@ -89,8 +91,7 @@
 		{headerName: "수령자우편번호",		field: "recipZipcode",			width: 130, cellClass: 'text-center'},
 		{headerName: "수령자기본주소",		field: "recipBaseAddr",			width: 300, cellClass: 'text-center'},
 		{headerName: "수령자상세주소",		field: "recipDtlAddr",			width: 200, cellClass: 'text-center'},
-		{headerName: "배송메모",			field: "delvMemo",				width: 200, cellClass: 'text-center'},
-		{headerName: "주문번호",			field: "ordNo",					width: 130, cellClass: 'text-center'}
+		{headerName: "배송메모",			field: "delvMemo",				width: 200, cellClass: 'text-center'}
 		// {headerName: "수집일시",		field: "regDt",					width: 150, cellClass: 'text-center'},
 		// {headerName: "주문일시",		field: "ordDt",					width: 150, cellClass: 'text-center'},
 		// {headerName: "결제일시",		field: "payDt",					width: 150, cellClass: 'text-center'},
@@ -113,21 +114,39 @@
 
 	//엑셀업로드 클릭 시
 	$('#btnExcelUpload').on('click', function() {
-		cfnExcelUploadPopup('createExtmallOrder', 'createExtmallOrder');
+		if( click_bool ){
+			cfnExcelUploadPopup('createExtmallOrder', 'createExtmallOrder');
+		}else{
+			mcxDialog.alert("주문등록 처리중입니다. 잠시후 시도해주세요.");
+		}
 	});
 
 	//주문등록 클릭 시
 	$('#btnSaveExtmallOrderUpload').on('click', function() {
-		var jsonData = JSON.stringify($('#extmallOrderForm').serializeObject());
-		gagajf.ajaxJsonSubmit('/ocm/extmallorder/save', jsonData);
+		if( click_bool ){
+			click_bool = false;
+			var jsonData = JSON.stringify($('#extmallOrderForm').serializeObject());
+			gagajf.ajaxJsonSubmit('/ocm/extmallorder/save', jsonData, fnExtmallOrderSaveCallBack);
+			// gagajf.ajaxJsonSubmit('/ocm/extmallorder/save', jsonData);
+		}else{
+			mcxDialog.alert("주문등록 처리중입니다. 잠시후 시도해주세요.");
+		}
 	});
 
 	$('#btnSearchExtmallOrderUpload').on('click', function() {
-		var url = '/ocm/extmallorder/upload/second/list';
-		gagaAgGrid.fetch(url, gridOptions, 'extmallOrderForm');
-		gridOptions.columnApi.setColumnsVisible(['uploadStatNm','uploadFailNm','uploadFailReason','ordAmt','ordNo'], true);
+		if( click_bool ){
+			var url = '/ocm/extmallorder/upload/second/list';
+			gagaAgGrid.fetch(url, gridOptions, 'extmallOrderForm');
+			gridOptions.columnApi.setColumnsVisible(['uploadStatNm','uploadFailNm','uploadFailReason','ordAmt','ordNo'], true);
+		}else{
+			mcxDialog.alert("주문등록 처리중입니다. 잠시후 시도해주세요.");
+		}
 	});
 
+	var fnExtmallOrderSaveCallBack = function(result){
+		click_bool = true;
+	}
+
 	var createExtmallOrder = function(result){
 		var data = {procJob : result.procJob
 					,excelFileNm : result.excelFileNm

+ 29 - 7
src/main/webapp/WEB-INF/views/order/CnclReqForm.html

@@ -239,7 +239,9 @@ var payGb 						= orderInfoList[0].payGb;						// 결제수단
 var payMeans 					= orderInfoList[0].payMeans;					// 결제방법
 var chgReason					= "";											// 변경사유코드
 var chgMemo						= "";											// 변경사유메모
-var chgStat						= cancelRequestTargetList[0].chgStat			// 변경상태
+var chgStat						= cancelRequestTargetList[0].chgStat			// 변경상태(교환출고실패 취소처리)
+var wdGb						= cancelRequestTargetList[0].wdGb				// 회수구분(교환출고실패 취소처리)
+var addPayCost					= cancelRequestTargetList[0].addPayCost			// 추가결제비용(교환출고실패 취소처리)
 
 // 변경요청정보 승인, 철회
 if (ordChgSq > 0 && chgStat != 'G685_40') {
@@ -1122,6 +1124,8 @@ var fnCnclReq = function (reqGbn) {
 		,"ordPhnno"					: ordPhnno
 		,"delvFeeCd"				: delvFeeCd
 		,"chgStat"					: chgStat
+		,"wdGb"						: wdGb
+		,"addPayCost"				: addPayCost
 	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
@@ -1135,8 +1139,14 @@ var fnCnclReq = function (reqGbn) {
 				cnclUrl
 				, jsonData
 				, function() {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
+					// 2021.06.21 교환품절취소가 아닐때 주문상세화면 다시 로딩하지 않음
+					if (chgStat == 'G685_40') {
+						// 교환배송 취소대상목록 조회 실행
+						$('#btnSearch').trigger("click");
+					} else {
+						uifnPopupClose('popupOrderDetail');
+						fnReOpenOrderDetailPopup();
+					}
 					uifnPopupClose('popupCancelRequestForm');
 				}
 			);
@@ -1199,11 +1209,16 @@ $(document).ready(function() {
 	
 	// 5. 취소신청, 취소완료, 취소승인, 취소철회 버튼 제어
 	if (ordChgSq > 0 && chgStat != 'G685_40') {
-		$("#cnclReqBtn").css("display", "none");
-		$("#cnclCompleteBtn").css("display", "none");
+		$("#cnclReqBtn").css("display"			, "none");
+		$("#cnclCompleteBtn").css("display"		, "none");
 	} else {
-		$("#cnclReqCompleteBtn").css("display", "none");
-		$("#cnclReqCancelBtn").css("display", "none");
+		$("#cnclReqCompleteBtn").css("display"	, "none");
+		$("#cnclReqCancelBtn").css("display"	, "none");
+		
+		// 교환배송미출고대상
+		if (chgStat == 'G685_40') {
+			$("#cnclReqBtn").css("display", "none");
+		}
 	}
 
 	// 네이버페이 주문형일 경우 취소 접수, 완료 버튼 hide
@@ -1221,6 +1236,13 @@ $(document).ready(function() {
 		fnChangeChgReason(chgReason);															// 귀책사유
 	}
 	
+	// 2021.06.21 교환배송미출고대상
+	if (ordChgSq > 0 && chgStat == 'G685_40') {
+		$("select[name='selectChgReason']").val("G686_30");
+		$("select[name='selectChgReason']").attr("disabled", "true");							// 변경사유 비활성화
+		fnChangeChgReason(chgReason);															// 귀책사유
+	}
+	
 	// debug mode 해제
 	if (temp3) {
 		$("#h4OrderCancelRequestToBeList").css("display", "none");

+ 6 - 5
src/main/webapp/WEB-INF/views/order/RtnReqForm.html

@@ -136,7 +136,7 @@
 				</table>
 				
 				<!--  회수지정보 -->
-				<div id="chgerAdress">
+				<div id="chgerAddress">
 					<h4>회수지 정보</h4>
 					<table class="frmStyle">
 						<colgroup>
@@ -244,6 +244,7 @@ var orderChangeDetailList 	= [[${orderChangeDetailList}]];					// 취소/반품/
 var chgStat					= [[${chgStat}]];								// 변경상태
 var payGb 					= orderInfoList[0].payGb;						// 결제수단
 var payMeans 				= orderInfoList[0].payMeans;					// 결제방법
+var pgGb					= orderInfoList[0].pgGb;						// PG구분
 var chgReason				= "";											// 변경사유코드
 var chgMemo					= "";											// 변경사유메모
 var wdGb					= "";											// 회수방법
@@ -1285,9 +1286,9 @@ var fnChangeWdGb = function(param) {
 	
 	// 회수지정보 히든 처리
 	if (wdGb == 'D') {
-		$('#chgerAdress').css('display', 'none');
+		$('#chgerAddress').css('display', 'none');
 	} else {
-		$('#chgerAdress').css('display', '');
+		$('#chgerAddress').css('display', '');
 	}
 	
 	// 환불예정금액 계산
@@ -1359,13 +1360,13 @@ $(document).ready(function() {
 		}
 		
 		// 반품TO교환 버튼
-		if (chgStat != "G685_50" && chgStat != "G685_51" && chgStat != "G685_30") {
+		if ((chgStat != "G685_50" && chgStat != "G685_51" && chgStat != "G685_30") || pgGb == 'NAVER_ORDER') {
 			$("#rtnToExcBtn").css("display", "none");
 		}
 		
 		// 직접발송일때 회수지정보 숨김처리
 		if (wdGb == "D") {
-			$("#chgerAdress").css("display", "none");
+			$("#chgerAddress").css("display", "none");
 		}
 	} else {
 		$("#rtnReqCompleteBtn").css("display", "none");

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

@@ -93,6 +93,7 @@
 						<!-- <button type="button" class="btn btn-primary btn-lg" id="btnInvoiceUpload">엑셀업로드</button> -->
 					</li>
 				</ul>
+				<p class="cRed">※ 송장전송클릭시 > 약 10분 후 결과를 조회해주세요.(처리할 수량에 따라 소요시간이 늘어날 수 있습니다.)</p>
 
 			</div>
 			<!-- 검색조건 영역 -->
@@ -283,7 +284,8 @@
 			return;
 		}
 
-		mcxDialog.confirm("배송시작일자 기준으로 송장전송이 진행됩니다. 진행하시겠습니까?", {
+		var alertMsg = "배송시작일자 기준으로 송장전송이 진행됩니다.<br>(현재기준 2주전 목록은 제외됩니다.)<br>진행하시겠습니까?";
+		mcxDialog.confirm(alertMsg, {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {

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

@@ -352,6 +352,8 @@
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);
 
+		fnGetCallRunableInfo();
+
 	});
 
 
@@ -363,8 +365,8 @@
 		}
 
 		var testDate = Number($("#orderCollectionForm input[name=apiStDate]").val().replaceAll("-", ""));
-		if( testDate < 20210401 || 20210510 < testDate){
-			mcxDialog.alert("※ 테스트 주문수집시 ※<br>실제운영 주문건을 가져오므로 4월부터 ~ 5/10 사이 날짜로 조회해주세요.");
+		if( testDate < 20210401 || 20210515 < testDate){
+			mcxDialog.alert("※ 테스트 주문수집시 ※<br>실제운영 주문건을 가져오므로 4월부터 ~ 5/5 사이 날짜로 조회해주세요.");
 			return;
 		}
 
@@ -384,7 +386,6 @@
 						setTimeout(function(){
 							fnGetCallRunableInfo();
 						}, 20000 );
-
 					}else{
 						mcxDialog.alert(result.runStdt+"에 호출한 건이 현재 실행중입니다.<br>"+result.txt);
 					}
@@ -394,19 +395,25 @@
 	});
 
 	// 진행상태 확인
-	var fnGetCallRunableInfo = function(){
-
-		gagajf.ajaxFormSubmit($('#orderCollectionForm').prop('action'), '#orderCollectionForm', function(result) {
-
-			$(".runable_info").html(result.txt);
-
-			if( 0 == result.runCnt){
-				// 재호출 안함.
-			}else{
-				// 현재 진행중
-				setTimeout(function(){
-					fnGetCallRunableInfo();
-				}, 20000 );
+	function fnGetCallRunableInfo(){
+
+		var jsonData = JSON.stringify({apiType : "ORDER"});
+		gagajf.ajaxJsonSubmit('/shoplinker/check/api_runable', jsonData, function(result) {
+
+			if( null != result  ){
+				if( 0 == result.runCnt){
+					// 재호출 안함.
+				}else{
+					// 현재 진행중
+					var resultTxt = result.txt;
+					resultTxt = resultTxt.replace("제휴몰", "제휴몰남은수 "+result.remainExtCnt);
+					resultTxt = resultTxt.replace("스타일24", "스타일24남은수 "+result.remainStyleCnt )
+					$(".runable_info").html(resultTxt);
+
+					setTimeout(function(){
+						fnGetCallRunableInfo();
+					}, 20000 );
+				}
 			}
 		});
 	}