moon hace 5 años
padre
commit
0afa529ca5
Se han modificado 21 ficheros con 2911 adiciones y 135 borrados
  1. 46 0
      src/main/java/com/style24/batch/biz/dao/TsbCjDeliveryDao.java
  2. 253 0
      src/main/java/com/style24/batch/biz/dao/TsbDeliveryDao.java
  3. 59 0
      src/main/java/com/style24/batch/biz/dao/TsbWmsDeliveryDao.java
  4. 86 0
      src/main/java/com/style24/batch/biz/job/delivery/TsbCjWithdrawInvoiceJob.java
  5. 78 0
      src/main/java/com/style24/batch/biz/job/delivery/TsbCjWithdrawInvoiceStatJob.java
  6. 174 31
      src/main/java/com/style24/batch/biz/job/delivery/TsbDeliveryOrderJob.java
  7. 2 1
      src/main/java/com/style24/batch/biz/job/delivery/TsbDeliveryOrderRsltJob.java
  8. 77 0
      src/main/java/com/style24/batch/biz/job/delivery/TsbSweetTrackerJob.java
  9. 1 1
      src/main/java/com/style24/batch/biz/job/delivery/TsbWithdrawExcRcvJob.java
  10. 77 0
      src/main/java/com/style24/batch/biz/job/delivery/TsbWithdrawRequestJob.java
  11. 88 0
      src/main/java/com/style24/batch/biz/service/TsbCjDeliveryService.java
  12. 551 58
      src/main/java/com/style24/batch/biz/service/TsbDeliveryService.java
  13. 94 1
      src/main/java/com/style24/batch/biz/service/TsbWmsDeliveryService.java
  14. 69 0
      src/main/java/com/style24/batch/biz/task/TsbDeliveryTask.java
  15. 48 0
      src/main/java/com/style24/batch/support/config/TsbMybatisCjConfig.java
  16. 78 15
      src/main/java/com/style24/persistence/domain/Delivery.java
  17. 54 0
      src/main/java/com/style24/persistence/mybatis/cj/TsbCjDelivery.xml
  18. 745 2
      src/main/java/com/style24/persistence/mybatis/shop/TsbDelivery.xml
  19. 292 25
      src/main/java/com/style24/persistence/mybatis/wms/TsbWmsDelivery.xml
  20. 15 1
      src/main/resources/config/application-locd.yml
  21. 24 0
      src/main/resources/persistence/mybatis-cj-config.xml

+ 46 - 0
src/main/java/com/style24/batch/biz/dao/TsbCjDeliveryDao.java

@@ -0,0 +1,46 @@
+package com.style24.batch.biz.dao;
+
+import java.util.Collection;
+import java.util.HashMap;
+
+import com.style24.core.support.annotation.CjDs;
+import com.style24.persistence.domain.Delivery;
+
+/**
+ * CJ Dao
+ *
+ * @author moon
+ * @since 2021. 04. 09
+ */
+@CjDs
+public interface TsbCjDeliveryDao {
+
+	/**
+	 * cj 회수 송장번호 조회 
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 12
+	 */
+	Collection<Delivery> getCjWdInvoiceList(HashMap<String, Object> map);
+	
+	/**
+	 * cj 회수 상태 조회  
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 12
+	 */
+	Collection<Delivery> getCjWdStatList(); 
+	
+	/**
+	 * cj 회수상태 수신 결과 업데이트 
+	 * @param Delivery
+	 * @return 
+	 * @author moon
+	 * @since 2021. 04. 12
+	 */
+	void updateCjWdStat(Delivery delivery);	
+	
+	
+}

+ 253 - 0
src/main/java/com/style24/batch/biz/dao/TsbDeliveryDao.java

@@ -22,6 +22,15 @@ public interface TsbDeliveryDao {
 	 */
 	void mergeDailyDeliveryZone(Delivery delivery);
 
+	/**
+	 * 총알배송 권역정보 갱신
+	 * @param 
+	 * @return
+	 * @author moon
+	 * @since 2020. 12. 08
+	 */
+	void deleteDailyDeliveryZone();
+	
 	/**
 	 * 회수예외 등록 -H
 	 * @param Delivery
@@ -194,4 +203,248 @@ public interface TsbDeliveryDao {
 	 */	
 	void insertShopStock(Delivery delivery);		
 	
+	/**
+	 * 출고대상 주문번호 조회 
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */
+	Collection<Delivery> getOrderNoList();	
+	
+	/**
+	 * 출고대상 주문상세번호 조회 
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */
+	Collection<Delivery> getOrderDtlNoList(Delivery ordNoData);	
+		
+	/**
+	 * 출고대상 주문상세아이템 조회 
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */
+	Collection<Delivery> getOrderDtlItemList(Delivery ordDtlNoData);			
+	
+	/**
+	 * 출고처 및 상품 제외 조회 
+	 * @param  Delivery
+	 * @return int
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */
+	int getDeliveryAssignBanGoods(Delivery ordDtlNoData);			
+	
+	/**
+	 * 출고처지정 등록 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */	
+	void insertTbDeliveryAssign(Delivery delivery);	
+	
+	/**
+	 * 출고처지정HST 등록 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */	
+	void insertTbDeliveryAssignHst(Delivery delivery);	
+	
+	/**
+	 * 주문상세 출고처지정
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */	
+	void updateTbOrderDtlAssign(Delivery delivery);	
+	
+	/**
+	 * 출고처 및 상품 제외 조회 (직송매장) 
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 06
+	 */
+	Delivery getDeliveryAssignBanGoodsShop(Delivery delivery);		
+	
+	/**
+	 * 출고처지정 임시 테이블 삭제
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 06
+	 */	
+	void deleteTbDeliveryLocTmp();	
+	
+	/**
+	 * 출고처지정 임시 테이블 등록 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 06
+	 */	
+	void insertTbDeliveryLocTmp(Delivery delivery);	
+	
+	/**
+	 * 출고처지정 임시 테이블 등록 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 07
+	 */	
+	void insertTbDeliveryLocSetTmp(Delivery delivery);	
+
+	
+	/**
+	 * 출고처 지정 임시테이블 조회(직송매장) 
+	 * @param  
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 04. 06
+	 */
+	Delivery getDeliveryLocTmp(Delivery delivery);
+	
+	
+	/**
+	 * 출고처 지정 임시테이블 세트상품갯수 max값 조회
+	 * @param  
+	 * @return int
+	 * @author moon
+	 * @since 2021. 04. 07
+	 */
+	int getDeliveryLocTmpGoodsSetMaxCnt();			
+	
+	/**
+	 * 출고처지정 임시 테이블 수정 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 07
+	 */	
+	void updateTbDeliveryLocSetTmp(Delivery delivery);		
+	
+	/**
+	 * 출고처지정 임시 테이블 세트상품갯수 초기화
+	 * @param 
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 07
+	 */	
+	void updateTbDeliveryLocSetTmpInit();
+	
+	/**
+	 *  WMS 출고요청 대상 주문번호 조회 
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 07
+	 */
+	Collection<Delivery> getWmsDeliveryOrdNoList();	
+	
+	/**
+	 *  WMS 출고요청 대상 조회
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 07
+	 */
+	Collection<Delivery> getWmsDeliveryList(Delivery ordNoData);	
+	
+	/**
+	 *  WMS 회수요청 대상 조회
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 08
+	 */
+	Collection<Delivery> getWithdrawRequestList();		
+	
+	/**
+	 * 주문변경상세 상태값 변경
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 08
+	 */	
+	void updateTbOrderChaneDetailStat(Delivery delivery);	
+	
+	/**
+	 * 회수송장번호없는 회수요청된 내역 조회  
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 09
+	 */
+	Collection<Delivery> getWithdrawInvcRcpList();		
+	
+	/**
+	 * 주문변경상세  반운송장번호 업데이트 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 12
+	 */	
+	void updateTbOrderChaneInvoc(Delivery delivery);	
+	
+	/**
+	 * 주문변경회수상태 업데이트 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 12
+	 */	
+	void updateTbOrderChangeStat(Delivery delivery);		
+	
+	/**
+	 * 주문변경상세상태 업데이트 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 12
+	 */	
+	void updateTbOrderChangeDtlStat(Delivery delivery);		
+	
+	/**
+	 * 주문변경 주문상세번호 조회
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 14
+	 */
+	Collection<Delivery> getOrdChgDtlNoList(Delivery delivery);
+	
+	/**
+	 * 배송추적 대상 조회     
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 15
+	 */
+	Collection<Delivery> getDelvTrackingList();
+	
+	/**
+	 * 주문 배송추적요청 완료 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 15
+	 */	
+	void updateSwtOrdInvcSendYn(Delivery delivery);	
+	
+	/**
+	 * 회수 배송추적요청 완료 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 15
+	 */	
+	void updateSwtWdInvcSendYn(Delivery delivery);	
 }

+ 59 - 0
src/main/java/com/style24/batch/biz/dao/TsbWmsDeliveryDao.java

@@ -187,8 +187,67 @@ public interface TsbWmsDeliveryDao {
 	 */
 	void updateWmsTbIfDeliveryInvoiceRslt(Delivery delivery);
 	
+	/**
+	 * 출고처지정 지연재고 등록 
+	 * @param 
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */
+	void insertWmsTbIfDelifixQty(Delivery delivery);
 	
+	/**
+	 * 출고처지정 지연재고 삭제 
+	 * @param 
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 04. 05
+	 */
+	void deleteWmsTbIfDelifixQty(Delivery delivery);	
+	
+	/**
+	 * 출고요청 M
+	 * @param 
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 04. 08
+	 */
+	void insertWmsTbIfDeliveryOrder(Delivery delivery);
+		
+	/**
+	 * 출고요청 D
+	 * @param 
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 04. 08
+	 */
+	void insertWmsTbIfDeliveryOrderItem(Delivery delivery);
 	
+	/**
+	 * 회수요청 M
+	 * @param 
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 04. 08
+	 */
+	void insertWmsRecallDelivery(Delivery delivery);
 	
+	/**
+	 * 회수요청 D
+	 * @param 
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 04. 08
+	 */
+	void insertWmsRecallDeliveryItem(Delivery delivery);
+		
+	/**
+	 * 회수 송장번호 등록 
+	 * @param 
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 04. 09
+	 */
+	void updateWmsRecallInvoice(Delivery delivery);
 	
 }

+ 86 - 0
src/main/java/com/style24/batch/biz/job/delivery/TsbCjWithdrawInvoiceJob.java

@@ -0,0 +1,86 @@
+package com.style24.batch.biz.job.delivery;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbDeliveryService;
+import com.style24.batch.biz.service.TsbWmsDeliveryService;
+import com.style24.batch.biz.service.TsbCjDeliveryService;
+import com.style24.persistence.domain.Delivery;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 회수예외 수신 (wmsif to mall) 
+ *
+ * @author moon
+ * @since 2021. 04. 09
+ */
+@Component
+@Slf4j
+public class TsbCjWithdrawInvoiceJob extends TsbAbstractJob<Collection<Delivery>, Collection<Delivery>, Collection<Delivery>> {
+
+	@Autowired
+	private TsbDeliveryService deliveryService;
+
+	@Autowired
+	private TsbWmsDeliveryService wmsDeliveryService;
+	
+	@Autowired
+	private TsbCjDeliveryService cjDeliveryService;
+	
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Collection<Delivery> read() throws Exception {
+
+		// 2. cj   회수 송장번호 조회 
+		Collection<Delivery> invcRcpList = deliveryService.getWithdrawInvcRcpList();
+		return invcRcpList;
+	}
+
+	@Override
+	public Collection<Delivery> process(Collection<Delivery> invcRcpList) throws Exception {
+		succCnt = 0;
+		failCnt = 1;
+		/**
+		 * 1. mall 회수 송장번호 없는  회수요청된 내역 조회 
+		 * 2. cj   회수 송장번호 조회 
+		 * 3. wms  회수요청 테이블에 등록! 
+		 * 4. mall tb_order_change 테이블  update 
+		 * */
+		
+		
+		// 2. cj   회수 송장번호 조회 
+		Collection<Delivery> invcList = cjDeliveryService.getCjWdInvoiceList(invcRcpList);
+		
+		// 3. wms  회수요청 테이블에 등록!
+		wmsDeliveryService.updateWmsRecallInvoice(invcList);
+		
+		// 4. mall tb_order_change 테이블  update 
+		deliveryService.updateTbOrderChaneInvoc(invcList);
+		
+		
+		succCnt = 1;
+		failCnt = 0;
+		
+		return invcRcpList;
+	}
+
+	@Override
+	public Collection<Delivery> write(Collection<Delivery> invcRcpList) throws Exception {
+
+		return invcRcpList;
+	}
+
+	@Override
+	public void notify(Collection<Delivery> invcRcpList) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 78 - 0
src/main/java/com/style24/batch/biz/job/delivery/TsbCjWithdrawInvoiceStatJob.java

@@ -0,0 +1,78 @@
+package com.style24.batch.biz.job.delivery;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbCjDeliveryService;
+import com.style24.batch.biz.service.TsbDeliveryService;
+import com.style24.persistence.domain.Delivery;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * CJ 회수상태 수신
+ *
+ * @author moon
+ * @since 2021. 04. 12
+ */
+@Component
+@Slf4j
+public class TsbCjWithdrawInvoiceStatJob extends TsbAbstractJob<Collection<Delivery>, Collection<Delivery>, Collection<Delivery>> {
+
+	@Autowired
+	private TsbDeliveryService deliveryService;
+
+	@Autowired
+	private TsbCjDeliveryService cjDeliveryService;
+	
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Collection<Delivery> read() throws Exception {
+		// 1. cj  회수 상태 조회 
+		Collection<Delivery> statList = cjDeliveryService.getCjWdStatList();
+		return statList;
+	}
+
+	@Override
+	public Collection<Delivery> process(Collection<Delivery> statList) throws Exception {
+		succCnt = 0;
+		failCnt = 1;
+		/**
+		 * 1. cj  회수 상태 조회 
+		 * 2. mall tb_order_change 상태값 업뎃 , tb_order_change_detail 변경상태 업데이트
+		 * 3. cj  완료 업데이트
+		 * */
+
+		 for(Delivery data : statList) {
+			 
+			 // 2. mall tb_order_change 상태값 업뎃 , tb_order_change_detail 변경상태 업데이트 (배송완료일경우)
+			 deliveryService.updateTbOrderChangeStat(data);
+			 
+			 // 3. cj  완료 업데이트
+			 cjDeliveryService.updateCjWdStat(data);
+		 }
+		
+		succCnt = 1;
+		failCnt = 0;
+		
+		return statList;
+	}
+
+	@Override
+	public Collection<Delivery> write(Collection<Delivery> statList) throws Exception {
+
+		return statList;
+	}
+
+	@Override
+	public void notify(Collection<Delivery> statList) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 174 - 31
src/main/java/com/style24/batch/biz/job/delivery/TsbDeliveryOrderJob.java

@@ -9,7 +9,8 @@ import com.style24.batch.biz.job.TsbAbstractJob;
 import com.style24.batch.biz.service.TsbDeliveryService;
 import com.style24.batch.biz.service.TsbWmsDeliveryService;
 import com.style24.persistence.domain.Delivery;
-
+import com.style24.persistence.domain.ErpStock;
+import com.style24.persistence.domain.WmsDelivery;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -20,68 +21,210 @@ import lombok.extern.slf4j.Slf4j;
  */
 @Component
 @Slf4j
-public class TsbDeliveryOrderJob extends TsbAbstractJob<Delivery, Delivery, Delivery> {
+public class TsbDeliveryOrderJob extends TsbAbstractJob<Collection<Delivery>, Collection<Delivery>, Collection<Delivery>> {
 
 	@Autowired
 	private TsbDeliveryService deliveryService;
 
 	@Autowired
-	private TsbWmsDeliveryService wmsDeliveryService
+	private TsbWmsDeliveryService wmsDeliveryService;
+	
 	
-	;
 	private int succCnt = 0;
 	private int failCnt = 0;
 
 	@Override
-	public Delivery read() throws Exception {
+	public Collection<Delivery> read() throws Exception {
 
-		Delivery delivery = new Delivery();
-		return delivery;
+		Collection<Delivery> ordnoList = deliveryService.getOrderNoList();
+		return ordnoList;
 	}
 
 	@Override
-	public Delivery process(Delivery delivery) throws Exception {
+	public Collection<Delivery> process(Collection<Delivery> ordnoList) throws Exception {
 		succCnt = 0;
 		failCnt = 1;
-		
-		/** 1안 
-		 * 1. mall: 배송(출고)지시대상 조회
-		 * 2. 출고처 지정 (재고체크[wms]- 재고체크[매장],  출고처,상태 update ) 
-		 * 3. mall:  배송준비중  상태값 update 
-		 * 4. wmsif: 배송(출고)지시 등록 
+
+		/**
+		 * for(배송지시 대상조회 ){
 		 * 
-		 * */
-		
-		/** 2안 
-		 * 1. 출고처지정 대상 조회
-		 * 2. 출고처 지정(재고체크[창고, 매장] ) ->  출고처및 상태 update(35)  
-		 * 3. 배송(출고)지시 대상 조회 
-		 * 4. 상태 update  (배송준비중 : 40)
-		 * 4. 배송(출고)지시  -> WMS_IF insert 
+		 *  @  재고 체크 후 출고처지정 	=>  출고처 지정에 따른      구분값 생성 (매장 , 창고) / 출고처지정 Y / N(재고 없는경우)  
+		 *     tb_delivery_assign, tb_delivery_assign_hst  /  tb_order_detail , tb_order_detail_hst  출고처, 상태값  update  TB_SELL_QTY 재고차감 
+		 * 
+		 *  @  리턴받아    wmsif: 배송(출고)지시 등록     TB_IF_DELIFIX_QTY  지연고정 재고 
 		 * 
 		 * 
+		 * }
 		 * 
+		 * 
+		 *  출고시   wms 출고처지정   --> 재고(-) 정보 등록
+		 *        매장 출고처지정    --> 재고(-) 정보 등록
+		 *  
+		 *  삭제시    wms 출고처 지정건 ->  재고(-) 정보 등록  삭제  
+		 *        매장 출고처 지정건   ->  재고(-) 정보 등록  삭제   
+		 *        
+		 *        
+		 *        
 		 * */
 		
-		// 1. wms_if: TB_IF_DailyDeliveryZone 조회 
-		Collection<Delivery> dailyDeliZoneList = wmsDeliveryService.getWmsIfDailyDeliveryZoneList();
 		
-		// 2. mall: TB_DailyDeliveryZone merge 
-		deliveryService.mergeDailyDeliveryZone(dailyDeliZoneList);
-		succCnt = 1;
-		failCnt = 0;
+		 String ShopYn = "N";
+		 // WMS 창고 출고처 지정 
+		 for(Delivery ordNoData : ordnoList) {
+			 
+			 // 주문상세번호 조회  
+			 Collection<Delivery> ordDtlNoList = deliveryService.getOrderDtlNoList(ordNoData);
+			 for(Delivery ordDtlNoData : ordDtlNoList) {
+				 
+				 // 주문상세아이템 조회  
+				 Collection<Delivery> itemList = deliveryService.getOrderDtlItemList(ordDtlNoData);
+				 int chkCnt = 0;
+				 for(Delivery item : itemList) {
+					 // WMS 재고체크 
+					 WmsDelivery wmsStock = deliveryService.getWmsRealStockChk(item);
+					 if(wmsStock !=null) {
+						 if(wmsStock.getLocQty() >= item.getOrdQty()) {
+							 chkCnt = chkCnt+1;
+						 }
+					 }
+				 }
+				 if(chkCnt == itemList.size()) {
+					 ordDtlNoData.setDelvLocCd("DL001");
+
+					 // 출고처등록  및 history 등록   (TB_DELIVERY_ASSIGN & TB_DELIVERY_ASSIGN_HST) 
+					 ordDtlNoData.setDelvArGb("Y"); // 수락  
+					 deliveryService.saveDeliveryAssign(ordDtlNoData);
+					 
+					 // 주문상태변경 및 출고처코드 등록 (TB_ORDER_DETAIL & TB_ORDER_DETAIL_HST)
+					 ordDtlNoData.setOrdDtlStat("G013_35");  // 출고처지정 
+					 ordDtlNoData.setDelvAssignStat("Y");    // 출고처지정상태 
+					 deliveryService.updateTbOrderDtlAssign(ordDtlNoData);
+					 
+					 // wms 재고차감 등록(TB_SELL_QTY)  
+					 for(Delivery data : itemList) {	
+					    wmsDeliveryService.insertWmsTbIfDelifixQty(data);
+					 }
+					 
+				 } else { // WMS 재고 부족일때  직송매장 재고체크 
+					 ShopYn = "Y";
+				 }
+			 }
+			 
+			// WMS 창고 출고처 지정 못한 주문상세건이 존재 
+			 if("Y".equals(ShopYn)) {
+				 
+				 Collection<Delivery> shopOrdDtlNoList = deliveryService.getOrderDtlNoList(ordNoData);
+				 
+				 // 출고처지정 임시 테이블 초기화 
+				 deliveryService.deleteTbDeliveryLocTmp();
+				 
+				 for(Delivery shopOrdDtlNoData : shopOrdDtlNoList) {
+					 
+					 // 주문상세아이템 조회  
+					 Collection<Delivery> shopItemList = deliveryService.getOrderDtlItemList(shopOrdDtlNoData);
+					 
+					 if("G056_S".equals(shopOrdDtlNoData.getGoodsType())) {
+						 deliveryService.getShopRealStockSetChk(shopItemList, shopOrdDtlNoData.getOrdDtlNo());
+					 } else {
+						 deliveryService.getShopRealStockChk(shopItemList);
+					 }
+				 }
+				 
+				 /**
+				  * 1. 합포장매장이 존재시   :  합포장가능매장이면서 매장출고순위가 높고   재고가 많은곳 
+				  * 2. 합포장매장이 미존재시 :  가능한 많은 합포장이 되는매장 이면서  매장출고순위가 높고 재고가 많은곳  예) 한주문에 5개상품(주문상세번호5개)  5개가 다 있는 매장 우선  없으면 4개가 있는 매장 이런순으로.... 
+				  *    
+				  * */
+				 // 출고처지정 임시테이블 조회 
+				 int toTalOrdDtlCnt = shopOrdDtlNoList.size();
+				 for(int i=toTalOrdDtlCnt; i >= 1; i--) {
+					 Delivery temp = deliveryService.getDeliveryLocTmp(toTalOrdDtlCnt);
+					 if(temp != null) {
+						 if(toTalOrdDtlCnt == temp.getGoodsLocCnt()) {
+							 
+							 String[] ordDtlNoArr = temp.getOrdDtlNoList().split(",");
+							 for(int j=0; j<ordDtlNoArr.length; j++) {
+
+								 // 출고처등록  및 history 등록   (TB_DELIVERY_ASSIGN & TB_DELIVERY_ASSIGN_HST) 
+								 Delivery saveData = new Delivery();
+								 saveData.setOrdNo(ordNoData.getOrdNo());
+								 saveData.setOrdDtlNo(Integer.parseInt(ordDtlNoArr[i]));
+								 saveData.setDelvLocCd(temp.getDelvLocCd());
+								 saveData.setLocQty(temp.getLocQty());
+								
+								 saveData.setDelvArGb("Y"); // 수락  
+								 deliveryService.saveDeliveryAssign(saveData);
+								 
+								 // 주문상태변경 및 출고처코드 등록 (TB_ORDER_DETAIL & TB_ORDER_DETAIL_HST)
+								 saveData.setOrdDtlStat("G013_35");  // 출고처지정 
+								 saveData.setDelvAssignStat("Y");    // 출고처지정상태 
+								 deliveryService.updateTbOrderDtlAssign(saveData);
+								 
+								 // 한세드림 ERP 재고차감 API 호출 
+							 }
+
+							 break;
+						 } else if(toTalOrdDtlCnt > temp.getGoodsLocCnt()){
+							 toTalOrdDtlCnt = toTalOrdDtlCnt- temp.getGoodsLocCnt();
+							
+							 String[] ordDtlNoArr = temp.getOrdDtlNoList().split(",");
+							 for(int j=0; j<ordDtlNoArr.length; j++) {
+
+								 // 출고처등록  및 history 등록   (TB_DELIVERY_ASSIGN & TB_DELIVERY_ASSIGN_HST) 
+								 Delivery saveData = new Delivery();
+								 saveData.setOrdNo(ordNoData.getOrdNo());
+								 saveData.setOrdDtlNo(Integer.parseInt(ordDtlNoArr[i]));
+								 saveData.setDelvLocCd(temp.getDelvLocCd());
+								 saveData.setLocQty(temp.getLocQty());
+								
+								 saveData.setDelvArGb("P"); // 대기  
+								 deliveryService.saveDeliveryAssign(saveData);
+								 
+								 // 주문상태변경 및 출고처코드 등록 (TB_ORDER_DETAIL & TB_ORDER_DETAIL_HST)
+								 saveData.setOrdDtlStat("G013_35");  // 출고처지정 
+								 saveData.setDelvAssignStat("P");    // 출고처지정상태 대기  
+								 deliveryService.updateTbOrderDtlAssign(saveData);
+								 
+								 // 한세드림 ERP 재고차감 API 호출 
+							 }
+						 } else {
+							 break;
+						 }
+					 } else {
+						 break;
+					 }
+				 }
+			 }
+		 } // for(Delivery ordNoData : ordnoList)
+
+		 // wms 출고처 지정 대상 조회 
+		 // 사은품 조회  차후 작업!!!! 
+		 Collection<Delivery> ordList = deliveryService.getWmsDeliveryOrdNoList();
+		 for(Delivery ordData : ordList) {
+			 // wms 출고 정보 조회(mall_DB) 
+			 Collection<Delivery> wmsDelvList = deliveryService.getWmsDeliveryList(ordData);
+			 // wms 출고 정보 등록 (wms_DB)
+			 wmsDeliveryService.insertWmsDelivery(wmsDelvList);
+			 
+			 // 주문상세상태 변경  상품준비중~
+			 String statGb = "PREPARE";
+			 deliveryService.updateTbOrderDtlStat(wmsDelvList, statGb);
+		 }
+		 
+		 succCnt = 1;
+		 failCnt = 0;
 		
-		return delivery;
+		 return ordnoList;
 	}
 
 	@Override
-	public Delivery write(Delivery delivery) throws Exception {
+	public Collection<Delivery> write(Collection<Delivery> delivery) throws Exception {
 
 		return delivery;
 	}
 
 	@Override
-	public void notify(Delivery delivery) throws Exception {
+	public void notify(Collection<Delivery> delivery) throws Exception {
 		super.printResult(succCnt, failCnt);
 	}
 

+ 2 - 1
src/main/java/com/style24/batch/biz/job/delivery/TsbDeliveryOrderRsltJob.java

@@ -56,7 +56,8 @@ public class TsbDeliveryOrderRsltJob extends TsbAbstractJob<Delivery, Delivery,
 		
 		
 		// 2. mall 출고결과 반영
-		deliveryService.updateTbOrderDtlStat(list);
+		String statGb = "SHIPPING";
+		deliveryService.updateTbOrderDtlStat(list, statGb);
 		
 		// 3. wms  출고결과 수신완료 update 
 		wmsDeliveryService.updateWmsIfDeliveryOrdRslt(list);

+ 77 - 0
src/main/java/com/style24/batch/biz/job/delivery/TsbSweetTrackerJob.java

@@ -0,0 +1,77 @@
+package com.style24.batch.biz.job.delivery;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbDeliveryService;
+import com.style24.batch.biz.service.TsbWmsDeliveryService;
+import com.style24.persistence.domain.Delivery;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 스윗트래커 송장 조회 
+ *
+ * @author moon
+ * @since 2021. 04. 13
+ */
+@Component
+@Slf4j
+public class TsbSweetTrackerJob extends TsbAbstractJob<Collection<Delivery>, Collection<Delivery>, Collection<Delivery>> {
+
+	@Autowired
+	private TsbDeliveryService deliveryService;
+
+	
+	
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Collection<Delivery> read() throws Exception {
+
+		Collection<Delivery> invcList = deliveryService.getDelvTrackingList();
+		return invcList;
+	}
+
+	@Override
+	public Collection<Delivery> process(Collection<Delivery> invcList) throws Exception {
+		succCnt = 0;
+		failCnt = 1;
+		/**
+		 * 배송추적 대상 조회   주문건 + 회수건 
+		 * 스윗트래커 api 추적요청 
+		 * 주문건: tb_order_detail_invoice 업데이트 , 회수건  tb_order_change 에 업데이트 
+		 * 
+		 * */
+		
+		for(Delivery data : invcList) {
+			GagaMap rtn = deliveryService.sweetTrackerInvcSend(data);
+			if("S".equals(rtn.getString("success"))) {
+				deliveryService.updateOrdInvcSendYn(data);
+			}
+		}
+		
+//		GagaMap rtn = deliveryService.sweetTrackerInvcSendTest();
+//		log.info(""+rtn.getString("success"));
+		 succCnt = 1;
+		 failCnt = 0;
+		
+		 return invcList;
+	}
+
+	@Override
+	public Collection<Delivery> write(Collection<Delivery> delivery) throws Exception {
+
+		return delivery;
+	}
+
+	@Override
+	public void notify(Collection<Delivery> delivery) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 1 - 1
src/main/java/com/style24/batch/biz/job/delivery/TsbWithdrawExcRcvJob.java

@@ -50,7 +50,7 @@ public class TsbWithdrawExcRcvJob extends TsbAbstractJob<Delivery, Delivery, Del
 		 * wms  회수예외 update 
 		 *  
 		 * */
-		
+
 		// 1.wms  회수예외 조회 
 		// 1-1. wms_if: TB_IF_RecallException  - select 
 		Collection<Delivery> excList = wmsDeliveryService.getWmsIfWithdrawExcList();

+ 77 - 0
src/main/java/com/style24/batch/biz/job/delivery/TsbWithdrawRequestJob.java

@@ -0,0 +1,77 @@
+package com.style24.batch.biz.job.delivery;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbDeliveryService;
+import com.style24.batch.biz.service.TsbWmsDeliveryService;
+import com.style24.persistence.domain.Delivery;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * WMS 회시요청 송신 (mall to wms) 
+ *
+ * @author moon
+ * @since 2021. 04. 08
+ */
+@Component
+@Slf4j
+public class TsbWithdrawRequestJob extends TsbAbstractJob<Collection<Delivery>, Collection<Delivery>, Collection<Delivery>> {
+
+	@Autowired
+	private TsbDeliveryService deliveryService;
+
+	@Autowired
+	private TsbWmsDeliveryService wmsDeliveryService
+	
+	;
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Collection<Delivery> read() throws Exception {
+
+		// 1.mall 회수대상 조회
+		Collection<Delivery> reqList = deliveryService.getWithdrawRequestList();
+		return reqList;
+	}
+
+	@Override
+	public Collection<Delivery> process(Collection<Delivery> reqList) throws Exception {
+		succCnt = 0;
+		failCnt = 1;
+		/**
+		 * 1.mall 회수대상 조회  
+		 * 2.wms  회수정보 등록 
+		 * 3.mall 회수상태 업데이트   G685_30 -- 회수요청 , 
+		 *  
+		 * */
+
+		// 2.wms  회수정보 등록 
+		wmsDeliveryService.insertWmsRecallDelivery(reqList);
+		
+		// 3.mall 회수상태 업데이트   G685_30 -- 회수요청
+		deliveryService.updateTbOrderChaneDetailStat(reqList);
+		
+		succCnt = 1;
+		failCnt = 0;
+		
+		return reqList;
+	}
+
+	@Override
+	public Collection<Delivery> write(Collection<Delivery> reqList) throws Exception {
+
+		return reqList;
+	}
+
+	@Override
+	public void notify(Collection<Delivery> reqList) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 88 - 0
src/main/java/com/style24/batch/biz/service/TsbCjDeliveryService.java

@@ -0,0 +1,88 @@
+package com.style24.batch.biz.service;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.batch.biz.dao.TsbCjDeliveryDao;
+import com.style24.batch.support.env.TsbConstants;
+import com.style24.persistence.domain.Delivery;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * CJ Service
+ *
+ * @author moon
+ * @since  2021. 04. 09
+ */
+@Service
+@Slf4j
+public class TsbCjDeliveryService {
+
+	@Autowired
+	private TsbCjDeliveryDao cjDeliveryDao;
+
+
+	/**
+	 * cj 회수 송장번호 조회
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 09
+	 */
+	//@Transactional("cjTxnManager")
+	public Collection<Delivery> getCjWdInvoiceList(Collection<Delivery> list) {
+
+		if(list !=null && list.size() >0) {
+			int totCnt = list.size();
+			List<String> custUseNoList = new ArrayList<String>();
+			int cnt = 0;
+			Collection<Delivery> invcList = new ArrayList<Delivery>();
+			for(Delivery data : list) {
+				custUseNoList.add(data.getOrdChgSq()+"");
+				if ((cnt > 0 && cnt % 500 == 0) || cnt == totCnt - 1) {
+					HashMap<String, Object> map = new HashMap<String, Object>();
+					map.put("custUseNoList", custUseNoList);
+					Collection<Delivery> tmpRtnList = cjDeliveryDao.getCjWdInvoiceList(map);
+					invcList.addAll(tmpRtnList);
+					custUseNoList.clear();
+				}
+				cnt++;
+			}
+			return invcList ;
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * cj 회수 상태 조회  
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 12
+	 */
+	//@Transactional("cjTxnManager")
+	public Collection<Delivery> getCjWdStatList() {
+		return cjDeliveryDao.getCjWdStatList();
+	}
+	
+	/**
+	 * cj 회수상태 수신 결과 업데이트   
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 12
+	 */
+	//@Transactional("cjTxnManager")
+	public void updateCjWdStat(Delivery delivery) {
+		cjDeliveryDao.updateCjWdStat(delivery);
+	}
+}

+ 551 - 58
src/main/java/com/style24/batch/biz/service/TsbDeliveryService.java

@@ -5,6 +5,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import com.google.gson.JsonObject;
+
+
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -13,20 +19,29 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.client.RestTemplate;
 import com.gagaframework.web.parameter.GagaMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.util.LinkedMultiValueMap;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.reflect.TypeToken;
 import com.style24.batch.biz.dao.TsbDeliveryDao;
+import com.style24.core.biz.dao.TscOrderChangeDao;
+import com.style24.core.biz.dao.TscOrderDao;
+import com.style24.core.biz.service.TscErpService;
+import com.style24.core.biz.service.TscWmsService;
 import com.style24.batch.support.env.TsbConstants;
 import com.style24.persistence.domain.Delivery;
 import com.style24.persistence.domain.ErpStock;
+import com.style24.persistence.domain.WmsDelivery;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 import com.style24.core.support.env.TscConstants.OrderDetailStat;
 import com.style24.core.support.env.TscConstants.OrderChangeStat;
-import com.style24.core.biz.dao.TscOrderDao;
-import com.style24.core.biz.service.TscErpService;
-import com.style24.core.biz.service.TscWmsService;
-import com.style24.persistence.domain.Order;
-import com.style24.persistence.domain.WmsDelivery;
+import com.style24.core.support.env.TscConstants.OrderChangeGb;
+
+
+
+
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -56,10 +71,13 @@ public class TsbDeliveryService {
 	
 	@Autowired
 	private TscWmsService wmsService;
-
+	
 	@Autowired
 	private TscErpService erpService;	
 	
+	@Autowired
+	private TscOrderChangeDao orderChangeDao;
+	
 	/**
 	 * 총알배송 권역정보 갱신 
 	 * @param  Collection<Delivery>
@@ -70,6 +88,8 @@ public class TsbDeliveryService {
 	@Transactional("shopTxnManager")
 	public void mergeDailyDeliveryZone(Collection<Delivery> dailyDeliZoneList) {
         
+		deliveryDao.deleteDailyDeliveryZone();
+		
 		for(Delivery delivery : dailyDeliZoneList) {
 			deliveryDao.mergeDailyDeliveryZone(delivery);
 		}
@@ -162,11 +182,15 @@ public class TsbDeliveryService {
 	 * @since  2021. 03. 09
 	 */
 	@Transactional("shopTxnManager")
-	public void updateTbOrderDtlStat(Collection<Delivery> list ) {
+	public void updateTbOrderDtlStat(Collection<Delivery> list, String  statGb) {
         
 		// 출고예외 등록 -H
 		for(Delivery data : list) {
-			data.setOrdDtlStat(OrderDetailStat.SHIPPING.value());
+			if("SHIPPING".equals(statGb)) {
+				data.setOrdDtlStat(OrderDetailStat.SHIPPING.value());
+			} else if("PREPARE".equals(statGb)) {
+				data.setOrdDtlStat(OrderDetailStat.GOODS_PREPARE.value());
+			}
 			data.setUpdNo(TsbConstants.REG_NO);
 			deliveryDao.updateTbOrderDtlStat(data);
 			
@@ -227,6 +251,17 @@ public class TsbDeliveryService {
 		deliveryDao.updateTbOrderChange(delivery);
 		// TB_ORDER_CHANGE_DETAIL
 		deliveryDao.updateTbOrderChangeDetail(delivery);
+		
+		// 교환일경우 상태값 변경되어 이력 등록 
+		if(OrderChangeGb.EXCHANGE.value().equals(delivery.getChgGb())) {  //chgGb
+			// 주문상세변경 이력 
+			OrderChange ordChg = new OrderChange();
+			ordChg.setRegNo(0);
+			ordChg.setUpdNo(0);
+			ordChg.setOrdChgSq(delivery.getOrdChgSq()); 
+			ordChg.setOrdDtlNo(delivery.getOrderdtlno()); 
+			orderChangeDao.createOrderChangeDetailHst(ordChg);
+		}
 	}	
 	
 	/**
@@ -297,56 +332,6 @@ public class TsbDeliveryService {
 		}
 	}	
 	
-	/**	
-	 * 실시간 재고조회(WMS&ERP)
-	 * @param  Delivery
-	 * @return Collection<WmsDelivery> stockLoc:WH-wms 외 매장코드   locQty: 수량
-	 * @author moon
-	 * @since  2021. 03. 28
-	 */
-	public Collection<WmsDelivery> getRealStock(Integer productNo, String skuCode, String styleCd, String colorCd, String sizeCd)  {
-		
-		////  임시 
-//		productNo = 14475554;
-//		skuCode   = "13096364-5"; // "13096364-5"
-//		styleCd = "COF0GABL02";
-//		colorCd = "CE"; //"CE"
-//		sizeCd = "150";
-		//////
-		
-		Collection<WmsDelivery> list = new ArrayList();
-		String chk1 = "N";
-		String chk2 = "N";
-		
-		
-		WmsDelivery  wmsRtn = wmsService.getWmsRealStock(productNo, skuCode);
-		
-		Collection<ErpStock> erpRtnList = erpService.getErpRealStock(styleCd, colorCd, sizeCd);
-		
-		if(wmsRtn != null ) {
-			list.add(wmsRtn);
-		} 
-		else {
-			chk1 = "Y";
-		}
-		
-		if(!"".equals(erpRtnList) && erpRtnList != null) {
-			for(ErpStock data : erpRtnList) {
-				WmsDelivery tmp = new WmsDelivery();
-				tmp.setStockLoc(data.getStockLoc());
-				tmp.setLocQty(data.getLocQty());
-				list.add(tmp);
-			}
-		}  else {
-			chk2 = "Y";
-		}
-		
-		if("Y".equals(chk1) && "Y".equals(chk2)) {
-			list = null;
-		}
-		
-		return list;
-	}
 	
 	/**	
 	 * ERP 매장상품재고 조회 및 등록  
@@ -398,4 +383,512 @@ public class TsbDeliveryService {
 
 	}
 	
+	
+	/**
+	 * 출고대상 주문번호 조회 
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	public Collection<Delivery> getOrderNoList() {
+
+		Collection<Delivery> list = deliveryDao.getOrderNoList();
+		return list ;
+	}	
+	
+	/**
+	 * 출고대상 주문상세번호 조회 
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	public Collection<Delivery> getOrderDtlNoList(Delivery ordNoData) {
+
+		Collection<Delivery> list = deliveryDao.getOrderDtlNoList(ordNoData);
+		return list ;
+	}		
+	
+	/**
+	 * 출고대상 주문상세번호 조회 
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	public Collection<Delivery> getOrderDtlItemList(Delivery ordDtlNoData) {
+
+		Collection<Delivery> list = deliveryDao.getOrderDtlItemList(ordDtlNoData);
+		return list ;
+	}	
+	
+	/**
+	 * WMS 재고체크 
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	public WmsDelivery getWmsRealStockChk(Delivery item) {
+
+		WmsDelivery wmsStock = wmsService.getWmsRealStock(item.getProductno(), item.getOptCd());
+		
+		if(wmsStock != null) {
+			item.setDelvLocCd("DL001");
+			// 출고처지정 거부 주문 또는 출고거부상품이 존재시  재고를 0으로 만든다.
+			log.info("getOrdNo: "+item.getOrdNo());
+			log.info("getOrdDtlNo: "+item.getOrdDtlNo());
+			log.info("getDelvLocCd: "+item.getDelvLocCd());
+			log.info("getOptCd: "+item.getOptCd());
+			log.info("getOptCd1: "+item.getOptCd1());
+			log.info("getOptCd2: "+item.getOptCd2());
+			
+			
+			
+			int rtnCnt = deliveryDao.getDeliveryAssignBanGoods(item);
+			if(rtnCnt != 0) {
+				wmsStock.setLocQty(0);
+			}
+		}
+		return wmsStock ;
+	}		
+	
+	/**
+	 * 직송매장 재고체크
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	public void getShopRealStockChk(Collection<Delivery> itemList) {
+		
+		for(Delivery item : itemList) {
+			
+			Collection<ErpStock> shopStockList = erpService.getErpRealStock(item.getOptCd(), item.getOptCd1(), item.getOptCd2());
+			
+			if(shopStockList != null) {
+				for(ErpStock shop :shopStockList) {
+					item.setDelvLocCd(shop.getStockLoc());
+					item.setLocQty(shop.getLocQty());
+					if(shop.getLocQty() >= item.getOrdQty()) {
+						Delivery rtn = deliveryDao.getDeliveryAssignBanGoodsShop(item);
+						if(rtn != null) {
+							deliveryDao.insertTbDeliveryLocTmp(rtn);
+						} else {log.info(" getDeliveryAssignBanGoodsShop rtn = null");}
+					}
+				}
+			} else { log.info("getErpRealStock shopStockList = null");}
+		}
+	}	
+	
+	/**
+	 * 직송매장 재고체크(세트)
+	 * @param  Collection<Delivery>, Integer (주문상세번호)
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 07
+	 */
+	public void getShopRealStockSetChk(Collection<Delivery> itemList, Integer ordDtlNo) {
+		
+		for(Delivery item : itemList) {
+
+			Collection<ErpStock> shopStockList = erpService.getErpRealStock(item.getOptCd(), item.getOptCd1(), item.getOptCd2());
+			
+			if(shopStockList != null) {
+				for(ErpStock shop :shopStockList) {
+					item.setDelvLocCd(shop.getStockLoc());
+					item.setLocQty(shop.getLocQty());
+					if(shop.getLocQty() >= item.getOrdQty()) {
+						Delivery rtn = deliveryDao.getDeliveryAssignBanGoodsShop(item);
+						if(rtn != null) {
+							deliveryDao.insertTbDeliveryLocSetTmp(rtn);
+						} else {log.info(" getDeliveryAssignBanGoodsShop rtn = null");}
+					}
+				}
+			} else { log.info("getErpRealStock shopStockList = null");}
+		}
+		// 임시테이블 MAX(GOODS_LOC_SET_CNT) 조회 
+		int setCnt = deliveryDao.getDeliveryLocTmpGoodsSetMaxCnt();
+		
+		// 임시테이블  세트갯수 비교  세트 있는 모든 매장 업데이트
+		if(itemList.size() == setCnt ) {
+			Delivery tmp = new Delivery();
+			tmp.setOrdDtlNo(ordDtlNo);
+			tmp.setGoodsLocSetCnt(setCnt);
+			deliveryDao.updateTbDeliveryLocSetTmp(tmp);
+		}
+		
+		// 임시테이블 셋트 카운트 초기화 
+		deliveryDao.updateTbDeliveryLocSetTmpInit();
+	}	
+	
+	/**	
+	 * ERP 매장상품재고 조회 및 등록  
+	 * @param  Delivery
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	public void saveDeliveryAssign(Delivery delivery)  {
+		delivery.setRegNo(TsbConstants.REG_NO);
+		deliveryDao.insertTbDeliveryAssign(delivery);
+		deliveryDao.insertTbDeliveryAssignHst(delivery);
+	}
+	
+	/**	
+	 * ERP 매장상품재고 조회 및 등록  
+	 * @param  Delivery
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	public void updateTbOrderDtlAssign(Delivery delivery)  {
+		
+		delivery.setRegNo(TsbConstants.REG_NO);
+		
+		deliveryDao.updateTbOrderDtlAssign(delivery);
+		
+		// 주문상세이력
+		Order order = new Order();
+		order.setOrdDtlNo(delivery.getOrdDtlNo());
+		order.setUpdNo(TsbConstants.REG_NO);
+		order.setRegNo(TsbConstants.REG_NO);
+		orderDao.createOrderDetailHst(order);					
+	}
+
+	/**
+	 * 출고처지정 임시 테이블 삭제
+	 * @param  
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 06
+	 */	
+	public void deleteTbDeliveryLocTmp() {
+		deliveryDao.deleteTbDeliveryLocTmp();
+	}
+	
+	/**
+	 * 출고처지정 임시 테이블 조회 
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 06
+	 */	
+	public Delivery getDeliveryLocTmp(int ordDtlCnt) {
+		
+		int totalCnt = ordDtlCnt;
+		Delivery rtn = null;
+		for(int i=totalCnt; i >= 1; i-- ) {
+			Delivery chk = new Delivery();
+			chk.setGoodsLocCnt(i); 
+			rtn = deliveryDao.getDeliveryLocTmp(chk);
+			if(rtn != null) {
+				break;
+			}
+		}
+
+		return rtn;
+	}
+	
+	/**
+	 * WMS 출고요청 대상 주문번호 조회 
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 08
+	 */	
+	public Collection<Delivery> getWmsDeliveryOrdNoList(){
+		Collection<Delivery> rtn = deliveryDao.getWmsDeliveryOrdNoList();
+		return rtn;
+	}
+	
+	/**
+	 * WMS 출고요청 대상 조회
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 08
+	 */	
+	public Collection<Delivery> getWmsDeliveryList(Delivery delivery){
+		Collection<Delivery> rtn = deliveryDao.getWmsDeliveryList(delivery);
+		return rtn;
+	}	
+
+	/**
+	 * 출고결과 반영 (상품상태)
+	 * @param  Collection<Delivery>
+	 * @return 
+	 * @author moon
+	 * @since  2021. 03. 09
+	 */
+	@Transactional("shopTxnManager")
+	public void updateTbOrderDtlStat(Collection<Delivery> list ) {
+        
+		// 출고예외 등록 -H
+		for(Delivery data : list) {
+			data.setOrdDtlStat(OrderDetailStat.GOODS_PREPARE.value());
+			data.setUpdNo(TsbConstants.REG_NO);
+			deliveryDao.updateTbOrderDtlStat(data);
+			
+			// 주문상세이력
+			Order order = new Order();
+			order.setOrdDtlNo(data.getOrderdtlno());
+			order.setUpdNo(TsbConstants.REG_NO);
+			order.setRegNo(TsbConstants.REG_NO);
+			orderDao.createOrderDetailHst(order);	
+			
+		}	
+	}	
+	
+	/**
+	 * 회수요청 대상 조회 
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 08 
+	 */
+	public Collection<Delivery> getWithdrawRequestList() {
+
+		Collection<Delivery> list = deliveryDao.getWithdrawRequestList();
+		return list ;
+	}	
+	
+	/**
+	 * 주문변경상세 상태값 변경
+	 * @param  Collection<Delivery>
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 08
+	 */
+	@Transactional("shopTxnManager")
+	public void updateTbOrderChaneDetailStat(Collection<Delivery> list ) {
+		
+		for(Delivery data : list) {
+			data.setUpdNo(TsbConstants.REG_NO);
+			data.setChgStat(OrderChangeStat.WITHDRAW.value()); // 회수요청 
+			deliveryDao.updateTbOrderChaneDetailStat(data);
+			
+			// 주문상세변경 이력 
+			OrderChange ordChg = new OrderChange();
+			ordChg.setRegNo(0);
+			ordChg.setUpdNo(0);
+			ordChg.setOrdChgSq(data.getOrderexceptionno()); 
+			ordChg.setOrdDtlNo(data.getOrderdtlno()); 
+			orderChangeDao.createOrderChangeDetailHst(ordChg);
+		}
+	}
+	
+	/**
+	 * 회수송장번호없는 회수요청된 내역 조회  
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 09 
+	 */
+	public Collection<Delivery> getWithdrawInvcRcpList() {
+
+		Collection<Delivery> list = deliveryDao.getWithdrawInvcRcpList();
+		return list ;
+	}
+	
+	/**
+	 * 주문변경상세  반운송장번호 업데이트 
+	 * @param  Collection<Delivery>
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 12
+	 */
+	@Transactional("shopTxnManager")
+	public void updateTbOrderChaneInvoc(Collection<Delivery> list ) {
+		
+		for(Delivery data : list) {
+			data.setUpdNo(TsbConstants.REG_NO);
+			data.setShipCompCd("29");
+			deliveryDao.updateTbOrderChaneInvoc(data);
+		}
+	}
+	
+	/**
+	 * 주문변경회수상태 및 상세상태 업데이트 
+	 * @param  Delivery
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 12
+	 */
+	@Transactional("shopTxnManager")
+	public void updateTbOrderChangeStat(Delivery delivery ) {
+		
+		delivery.setUpdNo(TsbConstants.REG_NO);
+		deliveryDao.updateTbOrderChangeStat(delivery);
+		
+		if("91".equals(delivery.getCrgSt())) {
+			delivery.setChgStat(OrderChangeStat.WITHDRAW_GOODS_CHECK.value()); // 상품검수중
+			deliveryDao.updateTbOrderChangeDtlStat(delivery);
+			
+			Collection<Delivery> list = deliveryDao.getOrdChgDtlNoList(delivery);
+			
+			for(Delivery data : list) {
+				// 주문상세변경 이력 
+				OrderChange ordChg = new OrderChange();
+				ordChg.setRegNo(0);
+				ordChg.setUpdNo(0);
+				ordChg.setOrdChgSq(data.getOrdChgSq());   
+				ordChg.setOrdDtlNo(data.getOrdDtlNo()); 
+				orderChangeDao.createOrderChangeDetailHst(ordChg);
+			}
+		}
+	}
+	
+	/**
+	 * 배송추적 대상 조회   
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 14 
+	 */
+	public Collection<Delivery> getDelvTrackingList() {
+
+		Collection<Delivery> list = deliveryDao.getDelvTrackingList();
+		return list ;
+	}
+	
+	/**
+	 * 스윗트래커 배송추적 요청    
+	 * @param Delivery
+	 * @return GagaMap
+	 * @author moon
+	 * @since  2021. 04. 15 
+	 */
+	public GagaMap sweetTrackerInvcSend(Delivery delivery) {
+		GagaMap result = new GagaMap();
+		
+		String swtTrurl = env.getProperty("sweet.api.url");
+		String root     = env.getProperty("domain.scm"); 
+		String subUrl   = "/delivery/sweettracker/response";
+		String tier     = env.getProperty("sweet.api.tier"); 
+		String key      = env.getProperty("sweet.api.key"); 
+		
+		
+		String callBackUrl = root+subUrl;
+		
+		log.info("swtTrurl: "+swtTrurl);
+		
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
+		params.add("num",          delivery.getInvoiceno());
+		params.add("code",         delivery.getShipCompCd());
+		params.add("fid",          delivery.getShipCompCd()+delivery.getInvoiceno());
+		params.add("callback_url", callBackUrl);
+		params.add("callback_type","json");
+		params.add("tier",         tier);
+		params.add("key",          key);
+		params.add("type",         "json");
+
+		HttpHeaders headers = new HttpHeaders();
+		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+		
+		HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(params, headers);
+		URI url = URI.create(swtTrurl);
+		// POST방식으로 호출
+		ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+		
+		log.debug("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+		
+		String jsonResult = responseEntity.getBody();
+		log.debug("responseEntity.getBody(): {} ", jsonResult);
+
+		Gson gson = new GsonBuilder().create();
+
+		GagaMap rtn = gson.fromJson(jsonResult, GagaMap.class);
+		
+		log.info("==============================================================");
+		log.info("rtn: fid "+rtn.getString("fid"));
+		log.info("rtn: success "+rtn.getBoolean("success"));
+		log.info("rtn: num "+rtn.getString("num"));
+		log.info("==============================================================");
+		if(rtn.getBoolean("success")) {
+			result.set("success", "S");
+		} else {
+			result.set("success", "F");
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * 배송추적 요청 완료  
+	 * @param  Delivery
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 12
+	 */
+	@Transactional("shopTxnManager")
+	public void updateOrdInvcSendYn(Delivery data ) {
+		
+		if("O".equals(data.getGb())) {      // 주문 
+			deliveryDao.updateSwtOrdInvcSendYn(data);
+		} else if("W".equals(data.getGb())){ // 회수 
+			deliveryDao.updateSwtWdInvcSendYn(data);
+		}
+	}
+	
+	public GagaMap sweetTrackerInvcSendTest() {
+		GagaMap result = new GagaMap();
+		
+		String swtTrurl = env.getProperty("sweet.api.url");
+		String root     = env.getProperty("sweet.api.domain.scm"); 
+		String subUrl   = "/delivery/sweettracker/response";
+		String tier     = env.getProperty("sweet.api.tier"); 
+		String key      = env.getProperty("sweet.api.key"); 
+		
+		
+		String callBackUrl = root+subUrl;
+		
+		log.info("swtTrurl: "+swtTrurl);
+		log.info("tier: "+tier);
+		log.info("key: "+key);
+		log.info("callBackUrl: "+callBackUrl);
+		
+		
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
+		params.add("num",          "354043625751");
+		params.add("code",         "04");
+		params.add("fid",          "04354043625751");
+		params.add("callback_url", callBackUrl);
+		params.add("callback_type","json");
+		params.add("tier",         tier);
+		params.add("key",          key);
+		params.add("type",         "json");
+
+		HttpHeaders headers = new HttpHeaders();
+		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+		
+		HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(params, headers);
+		URI url = URI.create(swtTrurl);
+		// POST방식으로 호출
+		ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+		
+		log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+		
+		String jsonResult = responseEntity.getBody();
+		log.info("responseEntity.getBody(): {} ", jsonResult);
+
+		Gson gson = new GsonBuilder().create();
+
+		GagaMap rtn = gson.fromJson(jsonResult, GagaMap.class);
+		
+		log.info("==============================================================");
+		log.info("rtn: fid "+rtn.getString("fid"));
+		log.info("rtn: success "+rtn.getBoolean("success"));
+		log.info("rtn: num "+rtn.getString("num"));
+		log.info("==============================================================");
+		if(rtn.getBoolean("success")) {
+			result.set("success", "S");
+		} else {
+			result.set("success", "F");
+		}
+		
+		return result;
+	}
+	
 }

+ 94 - 1
src/main/java/com/style24/batch/biz/service/TsbWmsDeliveryService.java

@@ -1,7 +1,7 @@
 package com.style24.batch.biz.service;
 
 import java.util.Collection;
-
+import java.util.UUID;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -290,5 +290,98 @@ public class TsbWmsDeliveryService {
 	
 	
 	
+	/**
+	 * 출고처지정 지연재고 등록 
+	 * 
+	 * @param Delivery
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	@Transactional("wmsTxnManager")
+	public void insertWmsTbIfDelifixQty(Delivery delivery) {
+
+		wmsDeliveryDao.insertWmsTbIfDelifixQty(delivery);
+	}	
+		
+	/**
+	 * 출고처지정 지연재고 등록 
+	 * 
+	 * @param Delivery
+	 * @author moon
+	 * @since  2021. 04. 05
+	 */
+	@Transactional("wmsTxnManager")
+	public void deleteWmsTbIfDelifixQty(Delivery delivery) {
+
+		wmsDeliveryDao.deleteWmsTbIfDelifixQty(delivery);
+	}	
+	
+	/**
+	 * WMS_IF 출고요청 등록
+	 * @param Collection<Delivery>
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 08
+	 */
+	@Transactional("wmsTxnManager")
+	public void insertWmsDelivery(Collection<Delivery> list) {
+
+		// TB_IF_DeliveryOrder
+		String uuid = UUID.randomUUID().toString();
+		Delivery dataM = list.iterator().next();	
+
+		dataM.setOrderguid(uuid);
+		Integer delvOrdSeq = dataM.getDeliveryorderno();
+		
+		
+		wmsDeliveryDao.insertWmsTbIfDeliveryOrder(dataM);
+		
+		for (Delivery data : list) {
+			// TB_IF_DeliveryOrderItem
+			data.setDeliveryorderno(delvOrdSeq);
+			wmsDeliveryDao.insertWmsTbIfDeliveryOrderItem(data);
+		}
+	}			
+	
+	
+	/**
+	 * WMS_IF 출고요청 등록
+	 * @param Collection<Delivery>
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 08
+	 */
+	@Transactional("wmsTxnManager")
+	public void insertWmsRecallDelivery(Collection<Delivery> list) {
+		
+		Integer recallNo = 0;
+		String ordChgSq  = "";
+		for(Delivery data : list) {
+			if(!ordChgSq.equals(data.getOrdChgSq()+"") ) {
+				
+				wmsDeliveryDao.insertWmsRecallDelivery(data);
+				ordChgSq = data.getOrdChgSq()+"";
+				recallNo = data.getRecallno();		
+			}
+			
+			data.setRecallno(recallNo);
+			wmsDeliveryDao.insertWmsRecallDeliveryItem(data);
+		}
+	}
+	
+	/**
+	 * 회수 송장번호 등록 
+	 * @param Collection<Delivery>
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 09
+	 */
+	@Transactional("wmsTxnManager")
+	public void updateWmsRecallInvoice(Collection<Delivery> list) {
+		
+		for(Delivery data : list) {
+			wmsDeliveryDao.updateWmsRecallInvoice(data);
+		}
+	}
 	
 }

+ 69 - 0
src/main/java/com/style24/batch/biz/task/TsbDeliveryTask.java

@@ -14,6 +14,12 @@ import com.style24.batch.biz.job.delivery.TsbWithdrawExcRsltJob;
 import com.style24.batch.biz.job.delivery.TsbWithdrawRsltJob;
 import com.style24.batch.biz.job.delivery.TsbInvoiceNoRcvJob;
 import com.style24.batch.biz.job.delivery.TsbShopGoodsStockJob;
+import com.style24.batch.biz.job.delivery.TsbWithdrawRequestJob;
+import com.style24.batch.biz.job.delivery.TsbCjWithdrawInvoiceJob;
+import com.style24.batch.biz.job.delivery.TsbCjWithdrawInvoiceStatJob;
+import com.style24.batch.biz.job.delivery.TsbSweetTrackerJob;
+
+
 
 
 
@@ -55,6 +61,20 @@ public class TsbDeliveryTask {
 	@Autowired
 	private TsbShopGoodsStockJob tsbShopGoodsStockJob;
 	
+	@Autowired
+	private TsbWithdrawRequestJob tsbWithdrawRequestJob;
+	
+	@Autowired
+	private TsbCjWithdrawInvoiceJob tsbCjWithdrawInvoiceJob;
+	
+	@Autowired
+	private TsbCjWithdrawInvoiceStatJob tsbCjWithdrawInvoiceStatJob;
+	
+	@Autowired
+	private TsbSweetTrackerJob tsbSweetTrackerJob;
+	
+	
+	
 	/**
 	 * 초 분 시 일 월 주(년)
 	 * 0 0 12 * * ?"             : 아무 요일, 매월, 매일 12:00:00
@@ -187,6 +207,55 @@ public class TsbDeliveryTask {
 		tsbShopGoodsStockJob.run("cron.delivery.tsbShopGoodsStockJob");
 	}
 	
+	/**
+	 * WMS 회수요청
+	 *
+	 * @throws Exception
+	 */
+	//@Scheduled(cron = "${cron.delivery.tsbWithdrawRequestJob}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async 
+	public void tsbWithdrawRequestJob() throws Exception {
+		tsbWithdrawRequestJob.run("cron.delivery.tsbWithdrawRequestJob");
+	}	
+	
+	/**
+	 * CJ 회수송장번호 수신
+	 *
+	 * @throws Exception
+	 */
+	//@Scheduled(cron = "${cron.delivery.tsbCjWithdrawInvoiceJob}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async 
+	public void tsbCjWithdrawInvoiceJob() throws Exception {
+		tsbCjWithdrawInvoiceJob.run("cron.delivery.tsbCjWithdrawInvoiceJob");
+	}	
+	
+	/**
+	 * CJ 회수상태 수신
+	 *
+	 * @throws Exception
+	 */
+	//@Scheduled(cron = "${cron.delivery.tsbCjWithdrawInvoiceStatJob}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async 
+	public void tsbCjWithdrawInvoiceStatJob() throws Exception {
+		tsbCjWithdrawInvoiceStatJob.run("cron.delivery.tsbCjWithdrawInvoiceStatJob");
+	}	
+	
+	/**
+	 * 스윗트래커  배송 추적 요청
+	 *
+	 * @throws Exception
+	 */
+	//@Scheduled(cron = "${cron.delivery.tsbSweetTrackerJob}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async 
+	public void tsbSweetTrackerJob() throws Exception {
+		tsbSweetTrackerJob.run("cron.delivery.tsbSweetTrackerJob");
+	}	
+	
+	
 	
 	
 }

+ 48 - 0
src/main/java/com/style24/batch/support/config/TsbMybatisCjConfig.java

@@ -0,0 +1,48 @@
+package com.style24.batch.support.config;
+
+import javax.sql.DataSource;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.style24.core.support.annotation.CjDs;
+import com.style24.core.support.env.TscConstants;
+
+/**
+ * cjDs용 Mybatis Configuration
+ * 
+ * @author moon
+ * @since 2021. 04. 09
+ */
+@Configuration
+@MapperScan(basePackages = TscConstants.BASE_PACKAGE, annotationClass = CjDs.class, sqlSessionFactoryRef = "cjSqlSessionFactory")
+public class TsbMybatisCjConfig {
+
+	@Autowired
+	private ApplicationContext applicationContext;
+
+	@Bean(name = "cjSqlSessionFactory")
+	public SqlSessionFactory cjSqlSessionFactory(@Qualifier("cjDataSource") DataSource dataSource) throws Exception {
+		SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+
+		sessionFactoryBean.setDataSource(dataSource);
+		sessionFactoryBean.setTypeAliasesPackage(TscConstants.DOMAIN_PACKAGE);
+		sessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:persistence/mybatis-cj-config.xml"));
+		sessionFactoryBean.setMapperLocations(applicationContext.getResources(TscConstants.MAPPER_LOCATION_PATH + "/cj/*.xml"));
+
+		return sessionFactoryBean.getObject();
+	}
+
+	@Bean(name = "cjSqlSessionTemplate")
+	public SqlSessionTemplate cjSqlSessionTemplate(@Qualifier("cjSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
+		return new SqlSessionTemplate(sqlSessionFactory);
+	}
+
+}

+ 78 - 15
src/main/java/com/style24/persistence/domain/Delivery.java

@@ -2,6 +2,7 @@ package com.style24.persistence.domain;
 
 import java.util.Collection;
 import java.util.List;
+import com.fasterxml.jackson.annotation.JsonFormat;
 
 import com.style24.persistence.TscBaseDomain;
 
@@ -86,8 +87,56 @@ public class Delivery extends TscBaseDomain {
 	private String dateship;				
 	private String addinvoiceyn;		
 	private String datefirstcreated;		
-	
-	
+	private String supplyCompCd;
+	private String cdStyle;
+	private String cdColor;
+	private String cdSize;
+	private String cdShop;
+	private String goodsType;
+	private String delvLocCd;
+	private String delvArGb;
+	private String delvAssignStat;
+	private String formalGb;
+	private String useGb;
+	private String ordDtlNoList;
+    private String orderguid;			
+    private String deliverytypecd;		
+    private String issuetypecd;			
+    private int deliveryunitno;		
+    private String dateissued;			
+    private String datereceived;						
+    private String loginid;						
+    private String dateordered;			
+    private String grade;						
+    private String deliverymemo;			
+    private String productsummary;		
+    private String exceptiondesc;			
+    private String iscancel;				
+    private String ischangeaddress;		
+    private String isreorder;				
+    private String istransfercompleted;	
+    private String orderpath;				
+    private String shippingtypecd;		
+    private String exchangeno;			
+    private String isbeautydelivery;		
+    private String vendororderno;	    
+    private String producttypecd;			// 상품 타입
+    private String stockmgmttypecd;			// 재고관리 타입
+    private String giftyn;					// 사은품여부
+    private String setproductcode;			// 세트상품코드
+    private String setproductyn;			// 세트상품여부
+    private String setproductname;			// 세트상품명
+    private String isdeleted;				// 삭제 여부
+    private String datedeleted;				// 삭제일
+	private String brandCd;
+    private String shipCompCd;
+	private String crgSt;
+	private String noCldvRsnCd;
+	private String deliveryDt;
+	private String detailRsn;
+	private String custId;
+	private String gb;
+    
 	private Integer recallexceptionno;
 	private Integer recallexceptionitemno;
 	private Integer recallexceptionmemono;
@@ -100,29 +149,43 @@ public class Delivery extends TscBaseDomain {
 	private Integer deliveryexceptionitemno;
 	private Integer deliveryExceptionSq;
 	private Integer deliveryExceptionItemSq;
-	private Integer recallno;			// 반품 번호
-	private Integer orderexceptionno;	// 주문 예외 번호
-	private Integer ordChgSq;           // 주문변경 번호 
+	private Integer recallno;					// 반품 번호
+	private Integer orderexceptionno;			// 주문 예외 번호
+	private Integer ordChgSq;           		// 주문변경 번호 
 	private Integer ordNo;
 	private Integer ordDtlNo;
 	private Integer chgOrdDtlNo; 
 	private Integer recallitemno;
 	private Integer invoicenoseq;	
-	
+	private Integer delvAssignSq;
+	private Integer delvAssignHstSq;
+	private Integer providerno;					// 공급자 번호
 	
 	private int chargeamount;
 	private int qty;
 	private int exceptionqty;
-	private int recallqty;				// 수량
-	
-	
-	private String supplyCompCd;
-	private String cdStyle;
-	private String cdColor;
-	private String cdSize;
-	private String cdShop;
+	private int recallqty;						// 수량
 	private int qtStock;
-	
+	private int ordQty;
+	private int locQty;
+	private int delvAssignOrd;
+	private int ordDtlCnt;
+	private int ordDtlItemCnt;
+	private int ordDtlQty; 
+	private int itemQty;   
+    private int goodsLocSetCnt;
+    private int goodsLocCnt;
+    private int unitprice;						// 단가(판매가)
+    private int cqty;							// 취소수량
+    private int enclosefee;						// 동봉비
+    private int serial;
+    
+    
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] custUseNoList;			
+
+ 
+    
 }
 
 

+ 54 - 0
src/main/java/com/style24/persistence/mybatis/cj/TsbCjDelivery.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.batch.biz.dao.TsbCjDeliveryDao">
+	
+	
+	<!-- cj 회수 송장번호 조회    -->	
+	<select id="getCjWdInvoiceList" resultType="Delivery">
+		/*TsbWmsDelivery.getCjWdInvoiceList*/
+		SELECT 
+		      INVC_NO     AS RECALLINVOICENO 
+		    , #{ordChgSq} AS ORD_CHG_SQ
+		    , #{ordNo}    AS ORD_NO
+		    , TO_DATE(SCAN_YMD||SCAN_HOUR,'YYYYMMDDHH24MISS')   AS DELIVERY_DT
+		  FROM V_TRACE_ISTYLE020
+		 WHERE CUST_ID = '0010046850'  -- 고객번호 
+		   AND RCPT_DV = '02' -- 반품 
+		   AND CUST_USE_NO IN 
+	    	<foreach item="custUseNoList" index="index" collection="custUseNoList" open="(" separator="," close=")">
+				#{custUseNoList}
+			</foreach>
+					   
+		 GROUP BY INVC_NO
+	</select>
+	
+	<!-- cj 회수 상태 조회    -->	
+	<select id="getCjWdStatList" resultType="Delivery">
+		/*TsbWmsDelivery.getCjWdStatList*/
+		SELECT
+			  SERIAL
+			, INVC_NO     AS RECALLINVOICENO
+			, CUST_USE_NO AS ORD_CHG_SQ
+			, CRG_ST
+			, NO_CLDV_RSN_CD
+			, TO_DATE(SCAN_YMD||SCAN_HOUR,'YYYYMMDDHH24MISS')   AS DELIVERY_DT
+			, DETAIL_RSN
+		  FROM V_TRACE_ISTYLE020 
+		 WHERE CUST_ID = '0010046850'
+		   AND RCPT_DV ='02'
+		   AND EAI_PRGS_ST = '01'
+		 ORDER BY CUST_USE_NO, CRG_ST
+	</select>
+	
+	<!-- cj 회수상태 수신 결과 업데이트   -->	
+	<update id="updateCjWdStat" parameterType="Delivery">
+		/*TsbWmsDelivery.updateCjWdStat*/
+		UPDATE V_TRACE_ISTYLE020 SET
+			  EAI_PRGS_ST = '03'
+			, MODI_EMP_ID = 'ISTYLE24'
+			, MODI_DTIME  = SYSDATE
+		WHERE SERIAL      = #{serial}
+		  AND EAI_PRGS_ST ='01'
+		
+	</update>	
+</mapper>

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

@@ -43,6 +43,11 @@
             , DATELASTUPDATE        = NOW()
 	</insert>
 	
+	<!-- 총알배송 권역정보 삭제  -->
+	<delete id="deleteDailyDeliveryZone" parameterType="Delivery" >
+		DELETE FROM TB_DAILY_DELIVERY_ZONE 
+	</delete>	
+	
 	<!-- 회수예외 등록 마스터   -->
 	<insert id="insertTbOrderRecallException" parameterType="Delivery" >
 		/*TsbDelivery.insertTbOrderRecallException*/
@@ -274,7 +279,7 @@
 			, C.OPT_CD2 
 			, D.ORD_CHG_SQ 
 			, D.CHG_ORD_DTL_NO
-			, B.ORD_EXCH_GB  
+			, B.ORD_EXCH_GB     -- 주문교환구분(O:주문,E:교환)
 			, B.SELL_STORE_CD
 			, E.CHG_GB          -- 변경구분 
 			, E.WD_GB           -- 회수구분 (W:회수요청, D:직접배송)
@@ -288,7 +293,7 @@
 		   AND C.PRODUCT_NO   = #{productno}
 		   AND C.PRODUCT_CODE = #{productcode}
 		   AND D.DEL_YN       = 'N'
-		   AND D.CHG_STAT NOT IN ('G685_31','G685_41')
+		   AND D.CHG_STAT NOT IN ('G685_49','G685_69') -- 교환철회 반품철회 제외 
 	</select>
 
 	<!-- 회수결과 등록  -->
@@ -515,7 +520,745 @@
 		)
 	</insert>		
 
+	<!-- 출고대상 주문번호 조회  -->	
+	<select id="getOrderNoList" resultType="Delivery">
+		/*TsbDelivery.getOrderNoList*/
+	<![CDATA[	
+		SELECT DISTINCT ORD_NO
+		FROM (
+			SELECT A.ORD_NO /* 주문 상품 */
+			  FROM TB_ORDER        A
+			  JOIN TB_ORDER_DETAIL B ON A.ORD_NO = B.ORD_NO 
+			  JOIN TB_GOODS        C ON B.GOODS_CD = C.GOODS_CD 
+			 WHERE C.SELF_GOODS_YN = 'Y'       -- 자사 
+			   AND B.ORD_DTL_STAT  = 'G013_20' -- 결제완료 
+			   AND B.ORD_EXCH_GB   = 'O'       -- 주문
+			   AND A.ORD_DT >= DATE_ADD(DATE_FORMAT(CONCAT(STR_TO_DATE(NOW(), '%Y-%m-%d'),' 10:00:00'),'%Y%m%d%H%i%S') , INTERVAL -1 DAY)
+			   AND NOT EXISTS (SELECT '1' FROM TB_GOODS_RES_SELL WHERE GOODS_CD = B.GOODS_CD AND USE_YN ='Y') 
+			 GROUP BY A.ORD_NO
+			
+			UNION ALL /* 교환  상품 */
+			
+			SELECT A.ORD_NO 
+			  FROM TB_ORDER        A
+			  JOIN TB_ORDER_DETAIL B        ON A.ORD_NO = B.ORD_NO 
+			  JOIN TB_GOODS        C        ON B.GOODS_CD = C.GOODS_CD 
+			  JOIN TB_ORDER_CHANGE_DETAIL D ON B.ORG_ORD_DTL_NO = D.ORD_DTL_NO 
+			  JOIN TB_ORDER_CHANGE        E ON D.ORD_CHG_SQ = E.ORD_CHG_SQ 
+			 WHERE C.SELF_GOODS_YN = 'Y'       -- 자사 
+			   AND B.ORD_DTL_STAT  = 'G013_20' -- 결제완료 
+			   AND B.ORD_EXCH_GB   = 'E'       -- 교환 
+			   AND D.CHG_STAT     IN ('G685_30','G685_32')
+			   AND DATE_ADD(DATE_FORMAT(CONCAT(STR_TO_DATE(NOW(), '%Y-%m-%d'),' 10:00:00'),'%Y%m%d%H%i%S') , INTERVAL -1 DAY) 
+			       <= CASE WHEN E.WD_BF_SEND_YN = 'Y' THEN B.REG_DT ELSE D.COMPLETE_DT END
+			 GROUP BY A.ORD_NO
+			 
+			UNION ALL  
+			   
+			SELECT A.ORD_NO /* 예약상품    */
+			  FROM TB_ORDER          A
+			  JOIN TB_ORDER_DETAIL   B ON A.ORD_NO = B.ORD_NO 
+			  JOIN TB_GOODS          C ON B.GOODS_CD = C.GOODS_CD 
+			  JOIN TB_GOODS_RES_SELL D ON B.GOODS_CD = D.GOODS_CD 
+			 WHERE C.SELF_GOODS_YN = 'Y'       -- 자사 
+			   AND B.ORD_DTL_STAT  = 'G013_20' -- 결제완료 
+			   AND D.DELV_RES_DT  <= NOW()
+			   AND DATE_ADD(DATE_FORMAT(CONCAT(STR_TO_DATE(NOW(), '%Y-%m-%d'),' 10:00:00'),'%Y%m%d%H%i%S') , INTERVAL -1 DAY)
+			       < CASE WHEN  A.ORD_DT < D.DELV_RES_DT THEN D.DELV_RES_DT ELSE A.ORD_DT END 
+			 GROUP BY A.ORD_NO
+			
+		) A
+		ORDER BY ORD_NO
+		]]>
+	</select>
+		
+	<!-- 출고대상 주문상세번호 조회  -->	
+	<select id="getOrderDtlNoList" resultType="Delivery">
+		/*TsbDelivery.getOrderDtlNoList*/
+		SELECT 
+				  A.ORD_NO 
+				, B.ORD_DTL_NO 
+				, B.GOODS_TYPE 
+				, B.ORD_QTY - B.CNCL_RTN_QTY AS ORD_QTY
+		  FROM TB_ORDER A
+		  JOIN TB_ORDER_DETAIL B ON A.ORD_NO = B.ORD_NO 
+		 WHERE A.ORD_NO = #{ordNo}
+		   AND B.ORD_DTL_STAT = 'G013_20' -- 결제완료건 
+		   AND NOT EXISTS (SELECT '1' FROM TB_GOODS_RES_SELL WHERE GOODS_CD = B.GOODS_CD AND USE_YN ='Y' AND DELV_RES_DT > NOW()) -- 예약상품건 제외   
+		 ORDER BY B.ORD_DTL_NO		
+	</select>
+		
+	<!-- 출고대상 주문상세아이템 조회  -->	
+	<select id="getOrderDtlItemList" resultType="Delivery">
+		/*TsbDelivery.getOrderDtlItemList*/
+		SELECT 
+			  A.ORD_NO 
+			, B.ORD_DTL_NO 
+			, B.GOODS_CD 
+			, C.ITEM_CD 
+			, C.OPT_CD 
+			, C.OPT_CD1 
+			, C.OPT_CD2 
+		    , (B.ORD_QTY - B.CNCL_RTN_QTY) * C.ITEM_QTY  AS ORD_QTY
+		    , (B.ORD_QTY - B.CNCL_RTN_QTY)               AS ORD_DTL_QTY
+		    , C.ITEM_QTY                                 AS ITEM_QTY
+		    , B.GOODS_TYPE 
+		    , C.PRODUCT_NO 
+    		, B.FORMAL_GB  
+    		, B.SUPPLY_COMP_CD 
+    		, D.BRAND_CD
+		  FROM TB_ORDER             A
+		  JOIN TB_ORDER_DETAIL      B ON A.ORD_NO = B.ORD_NO 
+		  JOIN TB_ORDER_DETAIL_ITEM C ON B.ORD_NO = C.ORD_NO AND B.ORD_DTL_NO = C.ORD_DTL_NO 
+		  JOIN TB_GOODS             D ON B.GOODS_CD = D.GOODS_CD 
+		 WHERE B.ORD_DTL_NO = #{ordDtlNo}
+		 
+	</select>
+		
+	<!-- 출고처 및 상품 제외 조회  -->	
+	<select id="getDeliveryAssignBanGoods" resultType="int">
+		/*TsbDelivery.getDeliveryAssignBanGoods*/
+		<![CDATA[
+		SELECT SUM(CNT) AS CNT 
+		  FROM (
+				 SELECT COUNT(*) CNT 
+				   FROM TB_DELIVERY_ASSIGN
+				  WHERE ORD_NO      = #{ordNo}
+				    AND ORD_DTL_NO  = #{ordDtlNo}
+				    AND DELV_LOC_CD = #{delvLocCd}
+				    AND DELV_AR_GB  = 'N'  -- 출고수락  거부 
+				UNION ALL 
+				SELECT COUNT(*) CNT 
+				  FROM TB_DELIVERY_BAN_GOODS
+				 WHERE DELV_LOC_CD    = #{delvLocCd}
+				   AND GOODS_CD       = #{optCd}
+				   AND OPT_CD1        = #{optCd1}
+				   AND OPT_CD2        = #{optCd2}
+				   AND DELV_BAN_STDT <= NOW()
+				   AND DELV_BAN_EDDT >= NOW()
+				   AND DEL_YN         = 'N'
+			   ) A
+		 ]]>
+	</select>		
+		
+	<!-- 출고처지정 등록    -->
+	<insert id="insertTbDeliveryAssign" parameterType="Delivery" keyProperty="delvAssignSq" >
+		/*TsbDelivery.insertTbDeliveryAssign*/
+		INSERT INTO TB_DELIVERY_ASSIGN
+		(
+			  DELV_ASSIGN_SQ    --	출고지정일련번호
+			, ORD_NO	 		--	주문번호
+			, ORD_DTL_NO	 	--	주문상세번호
+			, DELV_LOC_CD	    --	출고처코드
+			, ASSIGN_QTY	    --	지정수량
+			, DELV_AR_GB	    --	출고수락거부구분(P:대기, Y:수락, N:거부)
+			, REG_NO	 	    --	등록자NO
+			, REG_DT	 	    --	등록일시
+			, UPD_NO	 	    --	수정자NO
+			, UPD_DT	 	    --	수정일시
+		)
+		VALUES
+		(
+			  #{delvAssignSq}	--	출고지정일련번호
+			, #{ordNo}	 		--	주문번호
+			, #{ordDtlNo}	 	--	주문상세번호
+			, #{delvLocCd}	    --	출고처코드
+			, #{locQty}	        --	지정수량
+			, #{delvArGb}	    --	출고수락거부구분(P:대기, Y:수락, N:거부)
+			, #{regNo}	 	    --	등록자NO
+			, NOW()	 		    --	등록일시
+			, #{regNo}	 	    --	수정자NO
+			, NOW()	            --	수정일시
+		)		
+	</insert>
+   
+	<!-- 출고처지정HST 등록    -->
+	<insert id="insertTbDeliveryAssignHst" parameterType="Delivery" keyProperty="delvAssignHstSq"  >
+		/*TsbDelivery.insertTbDeliveryAssignHst*/
+		INSERT INTO TB_DELIVERY_ASSIGN_HST
+		(
+			  DELV_ASSIGN_SQ  --  출고지정일련번호
+			, ORD_NO	 	  --  주문번호
+			, ORD_DTL_NO	  --  주문상세번호
+			, DELV_LOC_CD	  --  출고처코드
+			, ASSIGN_QTY	  --  지정수량
+			, DELV_AR_GB	  --  출고수락거부구분(P:대기, Y:수락, N:거부)
+			, REG_NO	 	  --  등록자NO
+			, REG_DT	 	  --  등록일시
+			, UPD_NO	 	  --  수정자NO
+			, UPD_DT	 	  --  수정일시
+			, HST_REG_DT      --  이력등록일시
+		)
+		VALUES
+		(
+			  #{delvAssignSq}	--	출고지정일련번호
+			, #{ordNo}	 		--	주문번호
+			, #{ordDtlNo}	 	--	주문상세번호
+			, #{delvLocCd}	    --	출고처코드
+			, #{locQty}	        --	지정수량
+			, #{delvArGb}	    --	출고수락거부구분(P:대기, Y:수락, N:거부)
+			, #{regNo}	 	    --	등록자NO
+			, NOW()	 		    --	등록일시
+			, #{regNo}	 	    --	수정자NO
+			, NOW()	            --	수정일시
+			, NOW()	            --	수정일시
+		)
+	</insert>
+		
+	<!-- 주문상세 출고처지정   -->
+	<update id="updateTbOrderDtlAssign" parameterType="Delivery" >
+		/*TsbDelivery.updateTbOrderDtlAssign*/
+		UPDATE TB_ORDER_DETAIL SET
+			  ORD_DTL_STAT     = #{ordDtlStat}
+			, DELV_LOC_CD      = #{delvLocCd}
+			, DELV_ASSIGN_DT   = NOW()
+			, DELV_ASSIGN_STAT = #{delvAssignStat} 
+			, UPD_NO           = #{regNo}
+			, UPD_DT           = NOW()
+		WHERE ORD_DTL_NO   = #{ordDtlNo}
+		  AND ORD_NO       = #{ordNo}
+		  AND ORD_DTL_STAT = 'G013_20'
+	</update>
+			
+	<!-- 출고처 직송매장 체크   -->	
+	<select id="getDeliveryAssignBanGoodsShop" resultType="Delivery">
+		/*TsbDelivery.getDeliveryAssignBanGoodsShop*/
+		<![CDATA[
+			SELECT 
+				  'PRC' AS USE_GB
+				, A.DELV_LOC_CD 
+				, A.DELV_ASSIGN_ORD
+				, #{locQty} AS LOC_QTY
+				, #{ordDtlNo} AS ORD_DTL_NO
+				, #{optCd}    AS OPT_CD
+				, #{optCd1}   AS OPT_CD1
+				, #{optCd2}   AS OPT_CD2
+				, #{goodsType} AS GOODS_TYPE
+			  FROM TB_DELIVERY_LOC A
+			  JOIN TB_STOCK_SYNC_BASE B ON A.DELV_LOC_CD = B.DELV_LOC_CD 
+			 WHERE A.USE_YN          = 'Y'
+			   AND B.DELV_SYNC_YN    = 'Y'
+			   AND B.BRAND_CD        = #{brandCd}
+			   AND B.FORMAL_GB       = #{formalGb}
+			   AND A.SUPPLY_COMP_CD  = #{supplycompCd}
+			   AND A.DELV_LOC_CD     = #{delvLocCd}
+			   AND NOT EXISTS (
+			                SELECT 1
+			                  FROM TB_DELIVERY_ASSIGN
+			                 WHERE ORD_NO      = #{ordNo}
+			                   AND ORD_DTL_NO  = #{ordDtlNo}
+			                   AND DELV_LOC_CD = A.DELV_LOC_CD
+			                   AND DELV_AR_GB  = 'N'
+			              )
+			   AND NOT EXISTS (
+			                    SELECT 1
+			                      FROM TB_DELIVERY_BAN_GOODS
+			                     WHERE DELV_LOC_CD    = A.DELV_LOC_CD
+								   AND GOODS_CD       = #{optCd}
+								   AND OPT_CD1        = #{optCd1}
+								   AND OPT_CD2        = #{optCd2}
+			                       AND DELV_BAN_STDT <= NOW()
+			                       AND DELV_BAN_EDDT >= NOW()
+			                       AND DEL_YN         = 'N'
+			                  ) 
+		 ]]>
+	</select>	
+			
+	<!-- 출고처지정 임시 테이블 삭제    -->
+	<delete id="deleteTbDeliveryLocTmp" parameterType="Delivery"  >
+		/*TsbDelivery.deleteTbDeliveryLocTmp*/
+		DELETE FROM TB_DELIVERY_LOC_TMP WHERE USE_GB ='PRC'
+	</delete>		
+	
+	<!-- 출고처지정 임시 테이블 등록   -->
+	<insert id="insertTbDeliveryLocTmp" parameterType="Delivery"  >
+		/*TsbDelivery.insertTbDeliveryLocTmp*/
+		INSERT INTO TB_DELIVERY_LOC_TMP
+		(
+			  USE_GB
+			, DELV_LOC_CD
+			, DELV_ASSIGN_ORD
+			, LOC_QTY
+			, GOODS_LOC_CNT
+			, ORD_DTL_NO_LIST
+		)
+		VALUES
+		(
+			  #{useGb}
+			, #{delvLocCd}
+			, #{delvAssignOrd}
+			, #{locQty}
+			, 1
+			, #{ordDtlNo}
+		) ON DUPLICATE KEY
+		UPDATE 
+			GOODS_LOC_CNT = GOODS_LOC_CNT+1
+		  , ORD_DTL_NO_LIST = CONCAT(ORD_DTL_NO_LIST,',',#{ordDtlNo})
+		  , LOC_QTY = CASE WHEN  LOC_QTY > #{locQty} THEN  #{locQty} ELSE LOC_QTY END 
+				
+	</insert>		
+	
+	<!-- 출고처 지정 임시테이블 조회    -->	
+	<select id="getDeliveryLocTmp" resultType="Delivery">
+		/*TsbDelivery.getDeliveryLocTmp*/
+		SELECT A.*
+		  FROM(
+				SELECT 
+					  DELV_LOC_CD
+					, ORD_DTL_NO_LIST
+					, LOC_QTY
+					, GOODS_LOC_CNT
+					, RANK() OVER( ORDER BY GOODS_LOC_CNT DESC, DELV_ASSIGN_ORD, LOC_QTY DESC, DELV_LOC_CD) AS RNK
+				  FROM TB_DELIVERY_LOC_TMP
+				 WHERE USE_GB        = 'PRC' 
+				   AND GOODS_LOC_CNT = #{goodsLocCnt}
+		  ) A WHERE RNK = 1
+	</select>
+	
+	<!-- 출고처지정 임시 테이블 등록   -->
+	<insert id="insertTbDeliveryLocSetTmp" parameterType="Delivery"  >
+		/*TsbDelivery.insertTbDeliveryLocSetTmp*/
+		INSERT INTO TB_DELIVERY_LOC_TMP
+		(
+			  USE_GB
+			, DELV_LOC_CD
+			, DELV_ASSIGN_ORD
+			, LOC_QTY
+			, GOODS_LOC_CNT
+			, GOODS_LOC_SET_CNT
+		)
+		VALUES
+		(
+			  #{useGb}
+			, #{delvLocCd}
+			, #{delvAssignOrd}
+			, #{locQty}
+			, 0
+			, 1
+		) ON DUPLICATE KEY
+		UPDATE 
+			GOODS_LOC_SET_CNT = A.GOODS_LOC_SET_CNT+1
+		  ,	LOC_QTY = CASE WHEN LOC_QTY > #{locQty} THEN #{locQty} ELSE LOC_QTY END 
+	</insert>			
 		
+	<!-- 출고처 지정 임시테이블 세트상품갯수 max값 조회      -->	
+	<select id="getDeliveryLocTmpGoodsSetMaxCnt" resultType="int">
+		/*TsbDelivery.getDeliveryLocTmpGoodsSetMaxCnt*/
+		SELECT CASE WHEN MAX(GOODS_LOC_SET_CNT) IS NULL THEN 0 ELSE MAX(GOODS_LOC_SET_CNT)  END  AS CNT 
+		  FROM TB_DELIVERY_LOC_TMP
+		 WHERE USE_GB = 'PRC'
+	</select>		
+	
+	<!-- 출고처지정 임시 테이블 수정   -->
+	<update id="updateTbDeliveryLocSetTmp" parameterType="Delivery"  >
+		/*TsbDelivery.updateTbDeliveryLocSetTmp*/
+		UPDATE TB_DELIVERY_LOC_TMP SET
+		      GOODS_LOC_CNT = GOODS_LOC_CNT + 1
+		    , ORD_DTL_NO_LIST =  CASE WHEN ORD_DTL_NO_LIST IS NULL THEN #{ordDtlNo} ELSE CONCAT(ORD_DTL_NO_LIST,',',#{ordDtlNo}) END
+		WHERE USE_GB = 'PRC' AND GOODS_LOC_SET_CNT = #{goodsLocSetCnt}		
+	</update>	
+	
+	<!-- 출고처지정 임시 테이블 세트상품갯수 초기화   -->
+	<update id="updateTbDeliveryLocSetTmpInit" parameterType="Delivery"  >
+		/*TsbDelivery.updateTbDeliveryLocSetTmpInit*/
+		UPDATE TB_DELIVERY_LOC_TMP SET
+			GOODS_LOC_SET_CNT = 0
+		WHERE USE_GB = 'PRC'		
+	</update>	
+			
+	<!-- WMS 출고요청 대상 주문번호 조회      -->	
+	<select id="getWmsDeliveryOrdNoList" resultType="Delivery">
+		/*TsbDelivery.getWmsDeliveryOrdNoList*/
+		SELECT 
+		  	   A.ORD_NO 
+		  FROM TB_ORDER A
+		  JOIN TB_ORDER_DETAIL B ON A.ORD_NO = B.ORD_NO 
+		  JOIN TB_DELIVERY_LOC C ON B.DELV_LOC_CD = C.DELV_LOC_CD AND B.SUPPLY_COMP_CD = C.SUPPLY_COMP_CD 
+		  JOIN TB_GOODS        D ON B.GOODS_CD = D.GOODS_CD 
+		 WHERE B.ORD_DTL_STAT  = 'G013_35' -- 출고처지정 
+		   AND C.DELV_LOC_CLSF = 'G024_10' -- 물류창고
+		   AND D.SELF_GOODS_YN = 'Y' -- 자사상품
+		 GROUP BY A.ORD_NO
+	
+	</select>	
+	
+	<!-- WMS 출고요청 대상 조회      -->	
+	<select id="getWmsDeliveryList" resultType="Delivery">
+		/*TsbDelivery.getWmsDeliveryList*/
+		SELECT 
+			  A.ORD_NO                            AS OrderNo
+			, 'WMS'                               AS  DeliveryTypeCd
+			, '정상'                               AS  IssueTypeCd
+			, '10'                                AS StatusCd -- 배송지시
+			, D.CUST_ID                           AS LoginId
+			, A.ORD_NM                            AS CustomerName
+			, A.ORD_DT                            AS DateOrdered
+			, FN_GET_CODE_NM('G110',D.CUST_GRADE) AS  Grade 
+			, E.RECIP_NM                          AS Receiver
+			, E.RECIP_TELNO                       AS ReceiverTelNum
+			, E.RECIP_PHNNO                       AS ReceiverCellNum
+			, E.RECIP_ZIPCODE                     AS DeliveryPostalCode
+			, E.RECIP_BASE_ADDR                   AS DeliveryAddr1
+			, E.RECIP_DTL_ADDR                    AS DeliveryAddr2
+			, CASE WHEN B.SHOT_DELV_YN ='Y' THEN '13' ELSE '05' END                               AS LogisticsNo
+			, CASE WHEN B.SHOT_DELV_YN ='Y' THEN '디디로직스'  ELSE 'CJ 대한통운' END                  AS LogisticsName
+			, E.DELV_MEMO                         AS DeliveryMemo
+			, CONCAT(F.GOODS_NM,' 외  ', (SELECT COUNT(*) -1 FROM TB_ORDER_DETAIL WHERE ORD_NO = A.ORD_NO) , '건')  AS ProductSummary
+			,  0                                  AS IsCancel
+			,  0                                  AS IsChangeAddress
+			,  0                                  AS IsReOrder
+			, CASE WHEN A.MALL_GB = 'G011_20' THEN B.EXTMALL_ID ELSE 'APISHOP_0054' END                  AS OrderPath -- 주문경로 (확인필요!)
+			, CASE WHEN B.SHOT_DELV_YN ='Y' THEN '20' ELSE '10' END                                 	 AS DeliveryClassCd 
+			, CASE WHEN B.ORD_EXCH_GB ='O'  THEN '10' ELSE '20' END                                 	 AS ShippingTypeCd
+			, B.GIFT_PACK_YN                      AS IsBeautyDelivery
+			, ''                                                                                         AS DeliveryAddrNew  -- 도로명 주소 (확인필요!)
+			, (SELECT PROVIDER_NO FROM TB_SUPPLY_COMPANY BB WHERE BB.SUPPLY_COMP_CD = B.SUPPLY_COMP_CD ) AS ProviderNo
+			, C.PRODUCT_NO                        AS ProductNo
+			, C.PRODUCT_CODE                      AS ProductCode
+			, (SELECT CC.GOODS_NM FROM TB_GOODS CC WHERE CC.GOODS_CD = C.ITEM_CD) AS ProductName    -- 상품명 
+			, CASE WHEN B.GOODS_TYPE = 'G056_S' THEN '세트' ELSE '일반' END         AS ProductTypeCd  	-- 상품타입
+			, C.OPT_CD                            AS SKUCode       
+			, CONCAT(C.OPT_CD1,'/',C.OPT_CD2)     AS SKUValue
+			, B.CURR_PRICE + B.OPT_ADD_PRICE      AS UnitPrice
+			, (B.ORD_QTY -B.CNCL_RTN_QTY) * C.ITEM_QTY  AS Qty
+			, 'WMS'                               AS StockMgmtTypeCd
+			, 'N'                                 AS GiftYn  -- 사은품여부 
+			, CASE WHEN B.GOODS_TYPE = 'G056_S' THEN B.GOODS_CD ELSE '' END  AS SetProductCode -- 세트상품코드 
+			, CASE WHEN B.GOODS_TYPE = 'G056_S' THEN 'Y' ELSE 'N' END        AS SetProductYn   -- 세트상품여부 
+			, CASE WHEN B.GOODS_TYPE = 'G056_S' THEN F.GOODS_NM ELSE '' END  AS SetproductName -- 세트상품명 
+			, B.ORD_DTL_NO                        AS OrderDtlNo
+			, 0                                   AS Cqty
+		  FROM TB_ORDER              A 
+		  JOIN TB_ORDER_DETAIL       B ON A.ORD_NO = B.ORD_NO 
+		  JOIN TB_ORDER_DETAIL_ITEM  C ON B.ORD_NO = C.ORD_NO AND B.ORD_DTL_NO = C.ORD_DTL_NO 
+		  LEFT JOIN TB_CUSTOMER      D ON A.CUST_NO = D.CUST_NO 
+		  JOIN TB_DELIVERY_ADDR      E ON B.DELV_ADDR_SQ = E.DELV_ADDR_SQ 
+		  JOIN TB_GOODS              F ON B.GOODS_CD = F.GOODS_CD 
+		  JOIN TB_DELIVERY_LOC       G ON B.DELV_LOC_CD = G.DELV_LOC_CD AND B.SUPPLY_COMP_CD = G.SUPPLY_COMP_CD
+		 WHERE A.ORD_NO        = #{ordNo} 
+		   AND B.ORD_DTL_STAT  = 'G013_35' -- 출고처지정
+		   AND G.DELV_LOC_CLSF = 'G024_10' -- 물류창고
+		  ORDER BY B.ORD_DTL_NO 
+		   
+	</select>			
+	
+	<!-- WMS 회수요청 대상 조회      -->	
+	<select id="getWithdrawRequestList" resultType="Delivery">
+		/*TsbDelivery.getWithdrawRequestList*/
+		SELECT
+			  A.ORD_CHG_SQ                                          AS OrderExceptionNo -- 주문변경번호 
+			, CASE WHEN A.CHG_GB ='G680_30' THEN '10' ELSE '20' END AS RecallTypeCd
+			, A.CHGER_NM                                            AS Receiver
+			, A.CHGER_TELNO                                         AS ReceiverTelNum
+			, A.CHGER_PHNNO                                         AS ReceiverCellNum
+			, A.CHGER_ZIPCODE                                       AS DeliveryPostalCode
+			, A.CHGER_BASE_ADDR                                     AS DeliveryAddr1
+			, A.CHGER_DTL_ADDR                                      AS DeliveryAddr2
+			, G.ORD_NO                                              AS OrderNo
+			, G.ORD_NM                                              AS CustomerName
+			, (SELECT CC.CUST_ID FROM TB_CUSTOMER CC WHERE CC.CUST_NO = G.CUST_NO) AS LoginId
+			, A.CHG_MEMO                                            AS CSMemo
+			, A.UPD_DT                                              AS DateCSMemoUpdated
+			, 0                                                     AS IsDeleted
+			, ''                                                    AS DeliveryAddrNew 
+			, CASE WHEN A.WD_GB ='W' THEN 'Y' ELSE 'N' END          AS RecallRequestYn
+			, '0'                                                   AS IfStat
+			, D.PRODUCT_NO                                          AS ProductNo
+			, D.PRODUCT_CODE                                        AS ProductCode
+			, E.GOODS_NM                                            AS ProductName
+			, D.OPT_CD                                              AS SKUCode
+			, CONCAT(D.OPT_CD1,'/',D.OPT_CD2)                       AS SKUValue
+			, B.CHG_QTY * D.ITEM_QTY                                AS RecallQty
+			, '입고대기'                                         	    AS StatusCd
+			, (SELECT SS.SHIP_COMP_NM FROM TB_SHIP_COMPANY SS WHERE SS.SHIP_COMP_CD = A.SHIP_COMP_CD  ) AS LogisticsName
+			, A.SHIP_COMP_CD                                        AS LogisticsCode
+			, A.WD_INVOICE_NO                                       AS RecallInvoiceNo
+			, C.ORD_DTL_NO                                          AS OrderDtlNo
+			, C.INVOICE_NO                                          AS InvoiceNo
+		  FROM TB_ORDER_CHANGE        A 
+		  JOIN TB_ORDER_CHANGE_DETAIL B ON A.ORD_CHG_SQ = B.ORD_CHG_SQ 
+		  JOIN TB_ORDER_DETAIL        C ON B.ORD_DTL_NO = C.ORD_DTL_NO 
+		  JOIN TB_ORDER_DETAIL_ITEM   D ON C.ORD_DTL_NO = D.ORD_DTL_NO 
+		  JOIN TB_GOODS               E ON C.GOODS_CD   = E.GOODS_CD
+		  JOIN TB_ORDER               G ON C.ORD_NO     = G.ORD_NO 
+		 WHERE A.CHG_GB         = 'G680_30' -- 반품요청
+		   AND B.CHG_STAT       = 'G685_30' -- 회수요청 
+		   AND B.DEL_YN         = 'N' 
+		   AND E.SELF_GOODS_YN  = 'Y' -- 자사상품 
+		   AND E.RETURNABLE_YN  = 'Y' -- 반품가능여부 
+		   AND G.MALL_GB        = 'G011_10' -- 자사몰
+		
+		UNION ALL 
+		
+		SELECT 
+			  A.ORD_CHG_SQ                                          AS OrderExceptionNo -- 주문변경번호 
+			, CASE WHEN A.CHG_GB ='G680_30' THEN '10' ELSE '20' END AS RecallTypeCd
+			, A.CHGER_NM                                            AS Receiver
+			, A.CHGER_TELNO                                         AS ReceiverTelNum
+			, A.CHGER_PHNNO                                         AS ReceiverCellNum
+			, A.CHGER_ZIPCODE                                       AS DeliveryPostalCode
+			, A.CHGER_BASE_ADDR                                     AS DeliveryAddr1
+			, A.CHGER_DTL_ADDR                                      AS DeliveryAddr2
+			, G.ORD_NO                                              AS OrderNo
+			, G.ORD_NM                                              AS CustomerName
+			, (SELECT CC.CUST_ID FROM TB_CUSTOMER CC WHERE CC.CUST_NO = G.CUST_NO) AS LoginId
+			, A.CHG_MEMO                                            AS CSMemo
+			, A.UPD_DT                                              AS DateCSMemoUpdated
+			, 0                                                     AS IsDeleted
+			, ''                                                    AS DeliveryAddrNew 
+			, CASE WHEN A.WD_GB ='W' THEN 'Y' ELSE 'N' END          AS RecallRequestYn
+			, '0'                                                   AS IfStat
+			, D.PRODUCT_NO                                          AS ProductNo
+			, D.PRODUCT_CODE                                        AS ProductCode
+			, E.GOODS_NM                                            AS ProductName
+			, D.OPT_CD                                              AS SKUCode
+			, CONCAT(D.OPT_CD1,'/',D.OPT_CD2)                       AS SKUValue
+			, B.CHG_QTY * D.ITEM_QTY                                AS RecallQty
+			, '입고대기'                                         	    AS StatusCd
+			, (SELECT SS.SHIP_COMP_NM FROM TB_SHIP_COMPANY SS WHERE SS.SHIP_COMP_CD = A.SHIP_COMP_CD  ) AS LogisticsName
+			, A.SHIP_COMP_CD                                        AS LogisticsCode
+			, A.WD_INVOICE_NO                                       AS RecallInvoiceNo
+			, C.ORD_DTL_NO                                          AS OrderDtlNo
+			, C.INVOICE_NO                                          AS InvoiceNo
+		  FROM TB_ORDER_CHANGE        A 
+		  JOIN TB_ORDER_CHANGE_DETAIL B ON A.ORD_CHG_SQ = B.ORD_CHG_SQ 
+		  JOIN TB_ORDER_DETAIL        C ON B.ORD_DTL_NO = C.ORD_DTL_NO 
+		  JOIN TB_ORDER_DETAIL_ITEM   D ON C.ORD_DTL_NO = D.ORD_DTL_NO 
+		  JOIN TB_GOODS               E ON C.GOODS_CD   = E.GOODS_CD
+		  JOIN TB_ORDER               G ON C.ORD_NO     = G.ORD_NO 
+		 WHERE A.CHG_GB         = 'G680_40' -- 교환요청
+		   AND B.CHG_STAT       = 'G685_30' -- 회수요청
+		   AND B.DEL_YN         = 'N'
+		   AND E.SELF_GOODS_YN  = 'Y' -- 자사상품
+		   AND E.CHANGEABLE_YN  = 'Y' -- 교환가능여부
+		   AND G.MALL_GB        = 'G011_10' -- 자사몰 
 		
+		UNION ALL 
+		
+		SELECT 
+			  A.ORD_CHG_SQ                                          AS OrderExceptionNo -- 주문변경번호 
+			, CASE WHEN A.CHG_GB ='G680_30' THEN '10' ELSE '20' END AS RecallTypeCd
+			, A.CHGER_NM                                            AS Receiver
+			, A.CHGER_TELNO                                         AS ReceiverTelNum
+			, A.CHGER_PHNNO                                         AS ReceiverCellNum
+			, A.CHGER_ZIPCODE                                       AS DeliveryPostalCode
+			, A.CHGER_BASE_ADDR                                     AS DeliveryAddr1
+			, A.CHGER_DTL_ADDR                                      AS DeliveryAddr2
+			, G.ORD_NO                                              AS OrderNo
+			, G.ORD_NM                                              AS CustomerName
+			, (SELECT CC.CUST_ID FROM TB_CUSTOMER CC WHERE CC.CUST_NO = G.CUST_NO) AS LoginId
+			, A.CHG_MEMO                                            AS CSMemo
+			, A.UPD_DT                                              AS DateCSMemoUpdated
+			, 0                                                     AS IsDeleted
+			, ''                                                    AS DeliveryAddrNew 
+			, CASE WHEN A.WD_GB ='W' THEN 'Y' ELSE 'N' END          AS RecallRequestYn
+			, '0'                                                   AS IfStat
+			, D.PRODUCT_NO                                          AS ProductNo
+			, D.PRODUCT_CODE                                        AS ProductCode
+			, E.GOODS_NM                                            AS ProductName
+			, D.OPT_CD                                              AS SKUCode
+			, CONCAT(D.OPT_CD1,'/',D.OPT_CD2)                       AS SKUValue
+			, B.CHG_QTY * D.ITEM_QTY                                AS RecallQty
+			, '입고대기'                                         	    AS StatusCd
+			, (SELECT SS.SHIP_COMP_NM FROM TB_SHIP_COMPANY SS WHERE SS.SHIP_COMP_CD = A.SHIP_COMP_CD  ) AS LogisticsName
+			, A.SHIP_COMP_CD                                        AS LogisticsCode
+			, A.WD_INVOICE_NO                                       AS RecallInvoiceNo
+			, C.ORD_DTL_NO                                          AS OrderDtlNo
+			, C.INVOICE_NO                                          AS InvoiceNo
+		  FROM TB_ORDER_CHANGE        A 
+		  JOIN TB_ORDER_CHANGE_DETAIL B ON A.ORD_CHG_SQ = B.ORD_CHG_SQ 
+		  JOIN TB_ORDER_DETAIL        C ON B.ORD_DTL_NO = C.ORD_DTL_NO 
+		  JOIN TB_ORDER_DETAIL_ITEM   D ON C.ORD_DTL_NO = D.ORD_DTL_NO 
+		  JOIN TB_GOODS               E ON C.GOODS_CD   = E.GOODS_CD
+		  JOIN TB_EXTMALL             F ON C.VENDOR_ID  = F.VENDOR_ID AND C.EXTMALL_ID = F.EXTMALL_ID 
+		  JOIN TB_ORDER               G ON C.ORD_NO     = G.ORD_NO 
+		 WHERE A.CHG_GB         = 'G680_30' -- 반품요청
+		   AND B.CHG_STAT       = 'G685_30' -- 회수요청 
+		   AND B.DEL_YN         = 'N'
+		   AND F.DWDP_YN        = 'N' -- N:자사몰에서 회수 
+		   AND E.SELF_GOODS_YN  = 'Y' -- 자사상품 
+		   AND E.RETURNABLE_YN  = 'Y' -- 반품가능여부 
+		   AND G.MALL_GB        = 'G011_20' -- 제휴몰 
+		
+		UNION ALL 
+		
+		SELECT 
+			  A.ORD_CHG_SQ                                          AS OrderExceptionNo -- 주문변경번호 
+			, CASE WHEN A.CHG_GB ='G680_30' THEN '10' ELSE '20' END AS RecallTypeCd
+			, A.CHGER_NM                                            AS Receiver
+			, A.CHGER_TELNO                                         AS ReceiverTelNum
+			, A.CHGER_PHNNO                                         AS ReceiverCellNum
+			, A.CHGER_ZIPCODE                                       AS DeliveryPostalCode
+			, A.CHGER_BASE_ADDR                                     AS DeliveryAddr1
+			, A.CHGER_DTL_ADDR                                      AS DeliveryAddr2
+			, G.ORD_NO                                              AS OrderNo
+			, G.ORD_NM                                              AS CustomerName
+			, (SELECT CC.CUST_ID FROM TB_CUSTOMER CC WHERE CC.CUST_NO = G.CUST_NO) AS LoginId
+			, A.CHG_MEMO                                            AS CSMemo
+			, A.UPD_DT                                              AS DateCSMemoUpdated
+			, 0                                                     AS IsDeleted
+			, ''                                                    AS DeliveryAddrNew 
+			, CASE WHEN A.WD_GB ='W' THEN 'Y' ELSE 'N' END          AS RecallRequestYn
+			, '0'                                                   AS IfStat
+			, D.PRODUCT_NO                                          AS ProductNo
+			, D.PRODUCT_CODE                                        AS ProductCode
+			, E.GOODS_NM                                            AS ProductName
+			, D.OPT_CD                                              AS SKUCode
+			, CONCAT(D.OPT_CD1,'/',D.OPT_CD2)                       AS SKUValue
+			, B.CHG_QTY * D.ITEM_QTY                                AS RecallQty
+			, '입고대기'                                         	    AS StatusCd
+			, (SELECT SS.SHIP_COMP_NM FROM TB_SHIP_COMPANY SS WHERE SS.SHIP_COMP_CD = A.SHIP_COMP_CD  ) AS LogisticsName
+			, A.SHIP_COMP_CD                                        AS LogisticsCode
+			, A.WD_INVOICE_NO                                       AS RecallInvoiceNo			
+			, C.ORD_DTL_NO                                          AS OrderDtlNo
+			, C.INVOICE_NO                                          AS InvoiceNo
+		  FROM TB_ORDER_CHANGE        A 
+		  JOIN TB_ORDER_CHANGE_DETAIL B ON A.ORD_CHG_SQ = B.ORD_CHG_SQ 
+		  JOIN TB_ORDER_DETAIL        C ON B.ORD_DTL_NO = C.ORD_DTL_NO 
+		  JOIN TB_ORDER_DETAIL_ITEM   D ON C.ORD_DTL_NO = D.ORD_DTL_NO 
+		  JOIN TB_GOODS               E ON C.GOODS_CD   = E.GOODS_CD
+		  JOIN TB_EXTMALL             F ON C.VENDOR_ID  = F.VENDOR_ID AND C.EXTMALL_ID = F.EXTMALL_ID 
+		  JOIN TB_ORDER               G ON C.ORD_NO     = G.ORD_NO 
+		 WHERE A.CHG_GB         = 'G680_40' -- 교환요청
+		   AND B.CHG_STAT       = 'G685_30' -- 회수요청
+		   AND B.DEL_YN         = 'N'
+		   AND F.DWDP_YN        = 'N' -- N:자사몰에서 회수 
+		   AND E.SELF_GOODS_YN  = 'Y' -- 자사상품
+		   AND E.CHANGEABLE_YN  = 'Y' -- 교환가능여부
+		   AND G.MALL_GB        = 'G011_20' -- 제휴몰 		
+	</select>	
+		
+	<!-- 주문변경상세 상태값 변경   -->
+	<update id="updateTbOrderChaneDetailStat" parameterType="Delivery"  >
+		/*TsbDelivery.updateTbOrderChaneDetailStat*/
+		UPDATE TB_ORDER_CHANGE_DETAIL SET
+			  CHG_STAT = #{chgStat}
+			, UPD_NO   = #{updNo}
+			, UPD_DT   = NOW()
+		WHERE ORD_CHG_SQ = #{orderexceptionno}
+		  AND ORD_DTL_NO = #{orderdtlno}	
+	</update>			
+		
+	<!-- WMS 회수  송장번호 조회 대상       -->	
+	<select id="getWithdrawInvcRcpList" resultType="Delivery">
+		/*TsbDelivery.getWithdrawInvcRcpList*/
+		SELECT ORD_CHG_SQ, ORD_NO
+		  FROM(
+				SELECT A.ORD_CHG_SQ, (SELECT MAX(D.ORD_NO) FROM TB_ORDER_DETAIL D WHERE D.ORD_DTL_NO = B.ORD_DTL_NO) AS ORD_NO
+				  FROM TB_ORDER_CHANGE A
+				  JOIN TB_ORDER_CHANGE_DETAIL B ON A.ORD_CHG_SQ = B.ORD_CHG_SQ 
+				 WHERE B.DEL_YN ='N'
+				   AND A.WD_INVOICE_NO IS NULL 
+				   AND A.WD_GB = 'W'
+				   AND A.CHG_GB IN('G680_30','G680_40')
+				   AND A.REG_DT > STR_TO_DATE('2021-03-15 00:00:00','%Y-%m-%d %H:%i:%S')
+		  ) A 
+		 GROUP BY ORD_CHG_SQ, ORD_NO
+		
+	</select>
+  		
+	<!-- 주문변경상세  반운송장번호 업데이트   -->
+	<update id="updateTbOrderChaneInvoc" parameterType="Delivery"  >
+		/*TsbDelivery.updateTbOrderChaneInvoc*/
+		UPDATE TB_ORDER_CHANGE SET
+			  WD_STDT        = #{deliveryDt}
+			, WD_INVOICE_NO  = #{recallinvoiceno}
+			, SHIP_COMP_CD   = #{shipCompCd}
+			, UPD_NO         = #{updNo}
+			, UPD_DT         = NOW()
+		WHERE ORD_CHG_SQ = #{ordChgSq}	
+	</update>
+  		
+	<!-- 주문변경회수상태 업데이트   -->
+	<update id="updateTbOrderChangeStat" parameterType="Delivery"  >
+		/*TsbDelivery.updateTbOrderChangeStat*/
+		UPDATE TB_ORDER_CHANGE SET 
+			  WD_SHIP_STATE   = #{crgSt}
+			, WD_REASON_CD    = #{noCldvRsnCd} 
+			<if test='crgSt == "91"'>
+			, WD_EDDT         = #{deliveryDt}
+			</if>
+			, WD_STATE_DT     = NOW()
+			, UPD_NO          = #{updNo}
+			, UPD_DT          = NOW()
+		WHERE ORD_CHG_SQ = #{ordChgSq}
+	</update>	
+  		
+	<!-- 주문변경상태 업데이트   -->
+	<update id="updateTbOrderChangeDtlStat" parameterType="Delivery"  >
+		/*TsbDelivery.updateTbOrderChangeDtlStat*/
+		UPDATE TB_ORDER_CHANGE_DETAIL SET
+			  CHG_STAT = #{chgStat}
+			, UPD_NO   = #{updNo}
+			, UPD_DT   = NOW()
+		WHERE ORD_CHG_SQ = #{ordChgSq}
+		  AND CHG_STAT  = 'G685_30'
+		  AND DEL_YN    = 'N'
+	</update>	
+  		
+	<!-- 주문변경 주문상세번호 조회        -->	
+	<select id="getOrdChgDtlNoList" resultType="Delivery">
+		/*TsbDelivery.getOrdChgDtlNoList*/
+		SELECT ORD_CHG_SQ
+		     , ORD_DTL_NO 
+		  FROM TB_ORDER_CHANGE_DETAIL 
+		 WHERE ORD_CHG_SQ = #{ordChgSq} 
+		   AND CHG_STAT   = 'G685_30' 
+		   AND DEL_YN     = 'N'
+	</select>  		
+	
+	
+	<!-- 배송추적 대상 조회             -->	
+	<select id="getDelvTrackingList" resultType="Delivery">
+		/*TsbDelivery.getDelvTrackingList*/
+		SELECT 'O' AS GB
+		     , A.INVOICE_NO
+		     , (SELECT SWT_SHIP_COMP_CD FROM TB_SHIP_COMPANY C WHERE C.SHIP_COMP_CD = A.SHIP_COMP_CD) AS SHIP_COMP_CD
+		     , NULL AS ORD_CHG_SQ 
+		  FROM TB_ORDER_DETAIL A 
+		 WHERE A.INVOICE_NO IS NOT NULL 
+		   AND A.ORD_DTL_STAT  IN ('G013_40','G013_50','G013_55') -- 배송준비중 배송중 출고완료 
+		   AND NOT EXISTS (SELECT 1 FROM TB_ORDER_DETAIL_INVOICE B WHERE A.ORD_NO = B.ORD_NO AND A.ORD_DTL_NO = B.ORD_DTL_NO AND A.INVOICE_NO = B.INVOICE_NO AND B.SWT_TRC_SEND_YN ='Y')
+		 GROUP BY A.INVOICE_NO, A.SHIP_COMP_CD   
+		   
+		UNION ALL 
+		 
+		SELECT 'W' AS GB
+		     , A.WD_INVOICE_NO
+		     , (SELECT SWT_SHIP_COMP_CD FROM TB_SHIP_COMPANY C WHERE C.SHIP_COMP_CD = A.SHIP_COMP_CD) AS SHIP_COMP_CD
+		     , A.ORD_CHG_SQ 
+		  FROM TB_ORDER_CHANGE A
+		  JOIN TB_ORDER_CHANGE_DETAIL B ON A.ORD_CHG_SQ = B.ORD_CHG_SQ AND B.DEL_YN ='N'
+		 WHERE A.WD_INVOICE_NO IS NOT NULL 
+		   AND A.CHG_GB IN('G680_30','G680_40')   -- 반품요청 교환요청
+		   AND A.SWT_TRC_SEND_YN = 'N'
+		   AND B.CHG_STAT IN('G685_30','G685_31') --  회수요청 상품검수중
+		 GROUP BY A.WD_INVOICE_NO, A.SHIP_COMP_CD, A.ORD_CHG_SQ 
+	</select>
+	
+	
+	<!-- 주문 배송추적요청 완료   -->
+	<update id="updateSwtOrdInvcSendYn" parameterType="Delivery"  >
+		/*TsbDelivery.updateSwtOrdInvcSendYn*/
+		UPDATE TB_ORDER_DETAIL_INVOICE A SET
+			  SWT_TRC_SEND_YN = 'Y'
+			, UPD_NO          = #{updNo}
+			, UPD_DT          = NOW()
+		WHERE EXISTS (SELECT 1 FROM TB_ORDER_DETAIL B 
+		                      WHERE B.ORD_NO = A.ORD_NO AND B.ORD_DTL_NO = A.ORD_DTL_NO AND B.INVOICE_NO = A.INVOICE_NO 
+		                        AND B.INVOICE_NO   = #{invoiceNo}
+		                        AND B.SHIP_COMP_CD = #{shipCompCd} )
+	</update>		
+	
+	<!-- 회수 배송추적요청 완료   -->
+	<update id="updateSwtWdInvcSendYn" parameterType="Delivery"  >
+		/*TsbDelivery.updateSwtWdInvcSendYn*/
+		UPDATE TB_ORDER_CHANGE SET
+			  SWT_TRC_SEND_YN = 'Y'
+			, UPD_NO          = #{updNo}
+			, UPD_DT          = NOW() 
+		WHERE ORD_CHG_SQ = #{ordChgSq}
+	</update>		
+	
 	
 </mapper>

+ 292 - 25
src/main/java/com/style24/persistence/mybatis/wms/TsbWmsDelivery.xml

@@ -17,7 +17,7 @@
 	
 	<!-- WMS_IF 총알배송 권역정보 조회   -->	
 	<select id="getWmsIfDailyDeliveryZoneList" resultType="Delivery">
-	/*TsbWmsDelivery.getWmsIfDailyDeliveryZoneList*/
+		/*TsbWmsDelivery.getWmsIfDailyDeliveryZoneList*/
 		SELECT
 			  ZIP_NO	
 			, PND_BRAN	
@@ -32,14 +32,14 @@
 			, DELIVERYCLASSCD	 
 			, CASE WHEN ISUSE = 0 THEN 'N' ELSE 'Y' END AS ISUSE
 
-		FROM TB_IF_DAILYDELIVERYZONE
-	   WHERE ISUSE = 0
+		FROM iSTYLE24_WmsIf.DBO.TB_IF_DAILYDELIVERYZONE
+	   WHERE ISUSE = 1
 	/*	WHERE DATELASTUPDATE > CONVERT(datetime,'20200311'+' 00:00:00') */
 	</select>
 	
 	<!-- WMS_IF 회수예외 목록  -H -->	
 	<select id="getWmsIfWithdrawExcList" resultType="Delivery">
-	/*TsbWmsDelivery.getWmsIfWithdrawExcList*/
+		/*TsbWmsDelivery.getWmsIfWithdrawExcList*/
 		SELECT 
 			  RecallExceptionNo
 			, DeliveryOrderNo
@@ -61,13 +61,13 @@
 		  FROM iSTYLE24_WmsIf.DBO.TB_IF_RecallException
 		WHERE 1=1
 		  -- AND IfStat = '0'
-		  -- AND StatusCd = '대기'
-		  AND DateCreated > CONVERT(datetime,'20200101'+' 00:00:00') -- 임시임 
+		  AND StatusCd = '대기'
+		  AND DateCreated > CONVERT(datetime,'20200201'+' 00:00:00') -- 임시임 
 	</select>
 	
 	<!-- WMS_IF 회수예외 목록 -D -->	
 	<select id="getWmsIfWithdrawExcItemList" resultType="Delivery">
-	/*TsbWmsDelivery.getWmsIfWithdrawExcItemList*/
+		/*TsbWmsDelivery.getWmsIfWithdrawExcItemList*/
 		SELECT 
 			  A.RecallExceptionItemNo
 			, A.RecallExceptionNo
@@ -85,14 +85,14 @@
 		  FROM iSTYLE24_WmsIf.DBO.TB_IF_RecallExceptionItem A, iSTYLE24_WmsIf.DBO.TB_IF_RecallException B
 		 WHERE A.RecallExceptionNo = B.RecallExceptionNo
 		   -- AND A.IfStat = 0
-		   -- AND B.StatusCd = '대기'
-		   AND B.DateCreated > CONVERT(datetime,'20200101'+' 00:00:00') -- 임시임 
+		   AND B.StatusCd = '대기'
+		   AND B.DateCreated > CONVERT(datetime,'20210201'+' 00:00:00') -- 임시임 
 	</select>
 	
 	
 	<!-- WMS_IF 회수예외 목록  -M -->	
 	<select id="getWmsIfWithdrawExcMemoList" resultType="Delivery">
-	/*TsbWmsDelivery.getWmsIfWithdrawExcMemoList*/
+		/*TsbWmsDelivery.getWmsIfWithdrawExcMemoList*/
 		SELECT   
 			  A.RecallExceptionMemoNo
 			, A.RecallExceptionNo
@@ -106,8 +106,8 @@
 		  FROM iSTYLE24_WmsIf.DBO.TB_IF_RecallExceptionMemo A, iSTYLE24_WmsIf.DBO.TB_IF_RecallException B
 		 WHERE A.RecallExceptionNo = B.RecallExceptionNo
 		   -- AND A.IfStat = 0
-		   -- AND B.StatusCd = '대기'
-		   AND B.DateCreated > CONVERT(datetime,'20200101'+' 00:00:00') -- 임시임 
+		   AND B.StatusCd = '대기'
+		   AND B.DateCreated > CONVERT(datetime,'20210201'+' 00:00:00') -- 임시임 
 	</select>
 	
 	
@@ -115,8 +115,8 @@
 	<update id="updateWmsIfWithdrawExcList" parameterType="Delivery" >
 		/*TsbWmsDelivery.updateWmsIfWithdrawExcList*/
 		UPDATE iSTYLE24_WmsIf.DBO.TB_IF_RecallException SET 
-			--   IfStat = # { ifstate }
-			-- , IfDate = GETDATE()
+			   IfStat = #{ifstat}
+			 , IfDate = GETDATE()
 		WHERE RecallExceptionNo = #{recallexceptionno}
 		
 	</update>
@@ -125,20 +125,18 @@
 	<update id="updateWmsIfWithdrawExcItemList" parameterType="Delivery" >
 		/*TsbWmsDelivery.updateWmsIfWithdrawExcItemList*/
 		UPDATE iSTYLE24_WmsIf.DBO.TB_IF_RecallExceptionItem SET 
-			DeliveryOrderItemNo = DeliveryOrderItemNo
-			--  IfStat = # { ifstate }
-			-- , IfDate = GETDATE()
+			   IfStat = #{ifstat}
+			 , IfDate = GETDATE()
 		WHERE RecallExceptionNo = #{recallexceptionno}
 	</update>
 	
 	<!-- 회수예외 수정 -M   -->
 	<update id="updateWmsIfWithdrawExcMemoList" parameterType="Delivery" >
 		/*TsbWmsDelivery.updateWmsIfWithdrawExcMemoList*/
-	UPDATE iSTYLE24_WmsIf.DBO.TB_IF_RecallExceptionMemo SET 
-		MemoType = MemoType
-		--   IfStat = # { ifstate }
-		-- , IfDate = GETDATE()
-	WHERE RecallExceptionNo = #{recallexceptionno}
+		UPDATE iSTYLE24_WmsIf.DBO.TB_IF_RecallExceptionMemo SET 
+			   IfStat = #{ifstat}
+			 , IfDate = GETDATE()
+		WHERE RecallExceptionNo = #{recallexceptionno}
 	</update>
 			
 	<!-- WMS_IF 출고예외 목록  -H -->	
@@ -283,7 +281,7 @@
 		/*TsbWmsDelivery.updateWmsIFRecallDeliveryRslt*/
 			UPDATE istyle24_Wmsif.dbo.TB_IF_RECALLDELIVERY SET
 			  IfStat = #{ifstat}
-			, IfDate = NOW()
+			, IfDate = GETDATE()
 			WHERE RecallNo = #{recallno}
 			  AND IfStat = '1'
 	</update>	
@@ -293,7 +291,7 @@
 		/*TsbWmsDelivery.updateWmsIFRecallDeliveryItemRslt*/
 		UPDATE istyle24_Wmsif.dbo.TB_IF_RECALLDELIVERYITEM SET
 			  IfStat = #{ifstat}
-			, IfDate = NOW()
+			, IfDate = GETDATE()
 		WHERE RecallNo     = #{recallno}
 		  AND RecallItemNo = #{recallitemno}
 		  AND IfStat       = '1'
@@ -323,8 +321,277 @@
 		/*TsbWmsDelivery.updateWmsTbIfDeliveryInvoiceRslt*/
 		UPDATE istyle24_Wmsif.dbo.TB_IF_DELIVERYINVOICE  SET
 			  IfYn   = #{ifyn}
-			, IfDate = NOW()
+			, IfDate = GETDATE()
 		WHERE InvoiceNoSeq = #{invoicenoseq}
 	</update>		
+	
+	<!-- 출고처지정 지연재고 등록     -->
+	<insert id="insertWmsTbIfDelifixQty" parameterType="Delivery" >
+		/*TsbWmsDelivery.insertWmsTbIfDelifixQty*/
+		INSERT INTO iSTYLE24_WmsIf.dbo.TB_IF_DELIFIX_QTY
+		(
+			  OrderNo
+			, OrderDtlNo
+			, SKUCode
+			, ProductNo
+			, Qty
+			, DateCreated
+		)
+		VALUES
+		(
+			  #{ordNo}
+			, #{ordDtlNo}
+			, #{optCd}
+			, #{productno}
+			, #{ordQty}
+			, GETDATE()
+		)
+	</insert>	
+	
+	<!-- 출고처지정 지연재고 삭제     -->
+	<insert id="deleteWmsTbIfDelifixQty" parameterType="Delivery" >
+		/*TsbWmsDelivery.deleteWmsTbIfDelifixQty*/
+		DELETE FROM iSTYLE24_WmsIf.dbo.TB_IF_DELIFIX_QTY 
+		WHERE OrderNo    = #{ordNo}
+		  AND OrderDtlNo = #{ordDtlNo}
+	</insert>
+		
+	<!-- 출고요청 M     -->
+	<insert id="insertWmsTbIfDeliveryOrder" parameterType="Delivery" keyProperty="deliveryorderno">
+		/*TsbWmsDelivery.insertWmsTbIfDeliveryOrder*/
+		INSERT INTO iSTYLE24_WmsIf.dbo.TB_IF_DeliveryOrder
+		(
+			  OrderGUID				-- 주문서 고유번호
+			, OrderNo				-- 주문번호
+			, DeliveryTypeCd		-- 배송타입형태
+			, IssueTypeCd			-- 주문타입
+			, DeliveryUnitNo		-- 물류단위 번호
+			, DateIssued			-- 배송 데이터 수집일
+			, StatusCd				-- 배송 상태
+			, LoginId				-- 로그인 아이디
+			, CustomerName			-- 주문자 명
+			, DateOrdered			-- 주문 일
+			, Grade					-- 회원 등급
+			, Receiver				-- 주문자
+			, ReceiverTelNum		-- 주문자 전화번호
+			, ReceiverCellNum		-- 주문자 핸드폰 번호
+			, DeliveryPostalCode	-- 우편번호
+			, DeliveryAddr1			-- 기본 주소
+			, DeliveryAddr2			-- 상세 주소
+			, LogisticsNo			-- 택배사 고유번호
+			, LogisticsName			-- 택배사 명
+			, DeliveryMemo			-- 배송 메모
+			, ProductSummary		-- 상품명
+			, IsCancel				-- 배송 취소 여부
+			, IsChangeAddress		-- 배송지 변경 여부
+			, IsReOrder				-- 재주문 여부
+			, OrderPath				-- 주문 경로
+			, DeliveryClassCd		-- 배송 형태 (당일)
+			, ShippingTypeCd		-- 출고 구분
+			, IsBeautyDelivery		-- 선물 포장 여부
+			, DeliveryAddrNew		-- 도로명 주소
+			, IfYn					-- I/F여부
+		)
+		VALUES
+		(
+			  #{orderguid}
+			, #{orderno}				
+			, #{deliverytypecd}		
+			, #{issuetypecd}			
+			, 0	
+			, GETDATE()				
+			, #{statuscd}				
+			, #{loginid}				
+			, #{customername}			
+			, #{dateordered}			
+			, #{grade}					
+			, #{receiver}				
+			, #{receivertelnum}		
+			, #{receivercellnum}		
+			, #{deliverypostalcode}	
+			, #{deliveryaddr1}			
+			, #{deliveryaddr2}			
+			, #{logisticsno}			
+			, #{logisticsname}			
+			, #{deliverymemo}			
+			, #{productsummary}				
+			, #{iscancel}				
+			, #{ischangeaddress}		
+			, #{isreorder}				
+			, #{orderpath}				
+			, #{deliveryclasscd}		
+			, #{shippingtypecd}				
+			, CASE WHEN #{isbeautydelivery} = 'N' THEN 0 ELSE 1 END 		    
+			, #{deliveryaddrnew}	
+			, 'N'					
+		)
+	</insert>		
+	
+	<!-- 출고요청 D     -->
+	<insert id="insertWmsTbIfDeliveryOrderItem" parameterType="Delivery" keyProperty="deliveryorderitemno" >
+		/*TsbWmsDelivery.insertWmsTbIfDeliveryOrderItem*/
+		INSERT INTO iSTYLE24_WmsIf.dbo.TB_IF_DeliveryOrderItem
+		(
+			  DeliveryOrderNo		-- 배송번호
+			, ProviderNo			-- 공급자 번호
+			, ProductNo				-- 상품 번호
+			, ProductCode			-- 상품 코드
+			, ProductName			-- 상품 명
+			, ProductTypeCd			-- 상품 타입
+			, SKUCode				-- 옵션 코드
+			, SKUValue				-- 옵션 값
+			, UnitPrice				-- 단가(판매가)
+			, Qty					-- 수량
+			, StatusCd				-- 배송상태
+			, DateLastModified		-- 수정일
+			, IsCancel				-- 취소
+			, StockMgmtTypeCd		-- 재고관리 타입
+			, GiftYn				-- 사은품여부
+			, SetProductCode		-- 세트상품코드
+			, SetProductYn			-- 세트상품여부
+			, SetproductName		-- 세트상품명
+			, OrderDtlNo			-- 주문상세번호
+			, IfYn					-- I/F여부
+			, IfDate				-- I/F일자
+			, Cqty					-- 취소수량
+		)
+		VALUES 
+		(
+			  #{deliveryorderno}		-- 배송번호
+			, #{providerno}				-- 공급자 번호
+			, #{productno}				-- 상품 번호
+			, #{productcode}			-- 상품 코드
+			, #{productname}			-- 상품 명
+			, #{producttypecd}			-- 상품 타입
+			, #{skucode}				-- 옵션 코드
+			, #{skuvalue}				-- 옵션 값
+			, #{unitprice}				-- 단가(판매가)
+			, #{qty}					-- 수량
+			, #{statuscd}				-- 배송상태
+			, GETDATE()						-- 수정일
+			, #{iscancel}				-- 취소
+			, #{stockmgmttypecd}		-- 재고관리 타입
+			, #{giftyn}					-- 사은품여부
+			, #{setproductcode}			-- 세트상품코드
+			, #{setproductyn}			-- 세트상품여부
+			, #{setproductname}			-- 세트상품명
+			, #{orderdtlno}				-- 주문상세번호
+			, #{ifyn}					-- I/F여부
+			, #{ifdate}					-- I/F일자
+			, #{cqty}					-- 취소수량
+		)		
+	</insert>		
+	
+	
+	<!-- 회수요청 M     -->
+	<insert id="insertWmsRecallDelivery" parameterType="Delivery" keyProperty="recallno" >
+		/*TsbWmsDelivery.insertWmsRecallDelivery*/
+		INSERT INTO iSTYLE24_WmsIf.dbo.TB_IF_RecallDelivery
+		(
+			  RecallNo				-- 반품 번호
+			, OrderExceptionNo		-- 주문 예외 번호
+			, RecallTypeCd			-- 반품 타입
+			, Receiver				-- 받는자
+			, ReceiverTelNum		-- 받는자 전화번호
+			, ReceiverCellNum		-- 받는자 핸드폰 번호
+			, DeliveryPostalCode	-- 우편 번호
+			, DeliveryAddr1			-- 기본 주소
+			, DeliveryAddr2			-- 상세 주소
+			, OrderNo				-- 주문 번호
+			, OrderGUID				-- 주문 고유 번호
+			, CustomerName			-- 주문자
+			, LoginId				-- 아이디
+			, CSMemo				-- CS 메모
+			, DateCSMemoUpdated		-- CS 메모 변경일
+			, DateCreated			-- 생성일
+			, IsDeleted				-- 삭제 여부
+			, DeliveryAddrNew		-- 도로명 주소
+			, RecallRequestYn		-- 회수요청여부
+			, IfStat				-- I/F상태
+			, encloseFee			-- 동봉비
+		)
+		VALUES 
+		(
+			  #{recallno}			-- 반품 번호
+			, #{orderexceptionno}	-- 주문 예외 번호
+			, #{recalltypecd}		-- 반품 타입
+			, #{receiver}			-- 받는자
+			, #{receivertelnum}		-- 받는자 전화번호
+			, #{receivercellnum}	-- 받는자 핸드폰 번호
+			, #{deliverypostalcode}	-- 우편 번호
+			, #{deliveryaddr1}		-- 기본 주소
+			, #{deliveryaddr2}		-- 상세 주소
+			, #{orderno}			-- 주문 번호
+			, (SELECT AA.OrderGUID FROM iSTYLE24_WmsIf.dbo.TB_IF_DeliveryOrder AA WHERE AA.OrderNo = OrderNo) -- 주문 고유 번호
+			, #{customername}		-- 주문자
+			, #{loginid}			-- 아이디S
+			, #{csmemo}				-- cs 메모
+			, #{datecsmemoupdated}	-- cs 메모 변경일
+			, #{datecreated}		-- 생성일
+			, #{isdeleted}			-- 삭제 여부
+			, #{deliveryaddrnew}	-- 도로명 주소
+			, #{recallrequestyn}	-- 회수요청여부
+			, #{ifstat}				-- i/f상태
+			, 0						-- 동봉비
+		)
+	</insert>
+	
+	<!-- 회수요청 D     -->
+	<insert id="insertWmsRecallDeliveryItem" parameterType="Delivery" keyProperty="recallitemno" >
+		/*TsbWmsDelivery."insertWmsRecallDeliveryItem"*/
+		INSERT INTO iSTYLE24_WmsIf.dbo.TB_IF_RecallDeliveryItem
+		(
+			  RecallItemNo		-- 반품 항목 번호
+			, RecallNo			-- 반품 번호
+			, ProductNo			-- 상품 번호
+			, ProductCode		-- 상품 코드
+			, ProductName		-- 상품명
+			, SKUCode			-- 옵션 코드
+			, SKUValue			-- 옵션 내용
+			, RecallQty			-- 수량
+			, StatusCd			-- 상태
+			, DateCompleted		-- 완료일
+			, LogisticsName		-- 택배사 명
+			, LogisticsCode     -- 택배사 코드 
+			, RecallInvoiceNo	-- 반품 명세서(회수운송장번호)
+			, OrderDtlNo		-- 주문상세번호
+			, InvoiceNo			-- 원운송장번호
+			, IfStat			-- I/F상태
+		)
+		VALUES
+		(
+			  #{recallitemno}		-- 반품 항목 번호
+			, #{recallno}			-- 반품 번호
+			, #{productno}			-- 상품 번호
+			, #{productcode}		-- 상품 코드
+			, #{productname}		-- 상품명
+			, #{skucode}			-- 옵션 코드
+			, #{skuvalue}			-- 옵션 내용
+			, #{recallqty}			-- 수량
+			, #{statuscd}			-- 상태
+			, #{datecompleted}		-- 완료일
+			, #{logisticsname}		-- 택배사 명
+			, #{logisticscode}      -- 택배사 코드 
+			, #{recallinvoiceno}	-- 반품 명세서(회수운송장번호)
+			, #{orderdtlno}			-- 주문상세번호
+			, #{invoiceno}			-- 원운송장번호
+			, #{ifstat}				-- i/f상태
+			, #{ifdate}				-- i/f일자
+		)
+
+	</insert>
 		
+	<!-- 회수 송장번호 업데이트    -->
+	<update id="updateWmsRecallInvoice" parameterType="Delivery" >
+		/*TsbWmsDelivery.updateWmsRecallInvoice*/
+		UPDATE istyle24_Wmsif.dbo.TB_IF_RECALLDELIVERYITEM  SET
+			  LogisticsName     = 'CJ 대한통운'
+			, RecallInvoiceNo   = #{recallinvoiceno}
+			, LogisticsCode     = '29'
+			, IfDate            = GETDATE()
+		WHERE RecallNo = (SELECT MAX(RecallNo) FROM istyle24_Wmsif.dbo.TB_IF_RECALLDELIVERY A WHERE A.OrderExceptionNo = #{ordChgSq} AND A.OrderNo = #{ordNo} )	
+	</update>
+		
+		
+	
 </mapper>

+ 15 - 1
src/main/resources/config/application-locd.yml

@@ -39,6 +39,17 @@ erp:
        stock.url: http://erp.hansaemk.com:96/api/hsdr/Shop/GoodsInfo
        goods.url: http://erp.hansaemk.com:96/api/hsdr/Shop
 
+# 스윗트래커
+sweet:
+      api:
+          tier: istyle24
+          key: 0C48PI6KnOVVKGHWXyggMA
+          url: http://trace-api-dev.sweettracker.net:8102/add_invoice # 개발
+         # url: http://trace-api.sweettracker.net/add_invoice # 운영
+          domain:
+                 scm: http://ts5000.ipdisk.co.kr
+
+
 # Schedule
 cron:
     #모니터링
@@ -84,7 +95,10 @@ cron:
         tsbWithdrawRsltJob: 2 22 2 29 2 ? # WMS 회수입고결과 수신
         tsbInvoiceNoRcvJob: 2 22 2 29 2 ? # WMS 운송장번호 수신
         tsbShopGoodsStockJob: 2 22 2 29 2 ? # ERP 매장재고 수신
-        tsbWithdrawSendJob: 2 22 2 29 2 ? # WMS 회수요청 송신
+        tsbWithdrawRequestJob: 2 22 2 29 2 ? # WMS 회수요청
+        tsbCjWithdrawInvoiceJob: 2 22 2 29 2 ? # CJ 회수송장번호 수신
+        tsbCjWithdrawInvoiceStatJob: 2 22 2 29 2 ? # CJ 회수상태 수신
+        tsbSweetTrackerJob: 2 22 2 29 2 ? # 스윗트래커 송장상태조회 
 
     #회원(고객)
     customer:

+ 24 - 0
src/main/resources/persistence/mybatis-cj-config.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "HTTP://mybatis.org/dtd/mybatis-3-config.dtd">
+
+<configuration>
+
+	<settings>
+		<setting name="cacheEnabled" value="false" /> <!-- 설정에서 각 매퍼에 설정된 캐시를 전역적으로 사용할지 말지에 대한 여부 (default true)-->
+		<!-- <setting name="lazyLoadingEnabled" value="true" /> --> <!-- 지연로딩을 사용할지에 대한 여부. 사용하지 않는다면 모두 즉시 로딩 (default true) -->
+		<!-- <setting name="multipleResultSetsEnabled" value="true" /> --> <!-- 한개의 구문에서 여러개의 ResultSet을 허용할지의 여부 (default true) -->
+		<!-- <setting name="useGeneratedKeys" value="true" /> --> <!-- 생성키를 강제로 생성 (default false) -->
+		<setting name="defaultExecutorType" value="REUSE" /> <!-- 디폴트 실행자(executor) 설정. PreparedStatement를 재사용 (default SIMPLE)-->
+		<setting name="defaultStatementTimeout" value="25" /> <!-- 데이터베이스로의 응답을 얼마나 오래 기다릴지를 판단하는 타임아웃(초)를 설정 -->
+		<setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 데이터베이스 칼럼명 형태인 A_COLUMN을 CamelCase 형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 (default false) -->
+		<setting name="logImpl" value="NO_LOGGING" /> <!-- 마이바티스가 사용할 로깅 구현체를 명시. 이 설정을 사용하지 않으면 마이바티스가 사용할 로깅 구현체를 자동으로 찾는다. -->
+		<setting name="jdbcTypeForNull" value="NULL"/> <!-- JDBC 타입을 파라미터에 제공하지 않을 때 null 값을 처리한 JDBC 타입을 명시 -->
+		<setting name="callSettersOnNulls" value="true"/> <!-- 가져온 값이 null일때 setter나 맵의 put 메소드를 호출할지를 명시 (default false) -->
+		<setting name="returnInstanceForEmptyRow" value="true"/> <!-- 모든 컬럼이 null이면 row를 null 인스턴스로 리턴 (default false: row를 null로 리턴) -->
+	</settings>
+	
+	<typeAliases>
+		<typeAlias alias="paramMap" type="com.gagaframework.web.parameter.GagaMap" />
+	</typeAliases>
+
+</configuration>