Просмотр исходного кода

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

card007 5 лет назад
Родитель
Сommit
4127e23cff

+ 129 - 19
src/main/java/com/style24/batch/biz/dao/TsbDeliveryDao.java

@@ -94,6 +94,16 @@ public interface TsbDeliveryDao {
 	 */
 	void insertTbOrderDeliveryExceptionItem(Delivery delivery);	
 	
+	/**
+	 * 품절 사은품 재고 0 업데이트 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 05. 03
+	 */
+	void updateTbFreegiftValSoldout(Delivery delivery);	
+	
+	
 	/**
 	 * 출고결과 반영
 	 * @param Delivery
@@ -175,6 +185,15 @@ public interface TsbDeliveryDao {
 	 */	
 	void insertTbOrdDtlInvoice(Delivery delivery);	
 	
+	/**
+	 * 주문상세번호 조회 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 26
+	 */
+	Delivery getOrdDtlno(Delivery delivery);
+	
 	/**
 	 * 출고 상태값변경 
 	 * @param Delivery
@@ -182,7 +201,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 03. 27
 	 */	
-	void updateOrdDtlStat(Delivery delivery);	
+	int updateOrdDtlStat(Delivery delivery);	
 		
 	
 	/**
@@ -201,7 +220,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 03. 28
 	 */	
-	void insertShopStock(Delivery delivery);		
+	void insertShopStock(Delivery delivery);
 	
 	/**
 	 * 출고대상 주문번호 조회 
@@ -210,7 +229,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 05
 	 */
-	Collection<Delivery> getOrderNoList();	
+	Collection<Delivery> getOrderNoList();
 	
 	/**
 	 * 출고대상 주문상세번호 조회 
@@ -219,7 +238,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 05
 	 */
-	Collection<Delivery> getOrderDtlNoList(Delivery ordNoData);	
+	Collection<Delivery> getOrderDtlNoList(Delivery ordNoData);
 		
 	/**
 	 * 출고대상 주문상세아이템 조회 
@@ -228,7 +247,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 05
 	 */
-	Collection<Delivery> getOrderDtlItemList(Delivery ordDtlNoData);			
+	Collection<Delivery> getOrderDtlItemList(Delivery ordDtlNoData);
 	
 	/**
 	 * 출고처 및 상품 제외 조회 
@@ -237,7 +256,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 05
 	 */
-	int getDeliveryAssignBanGoods(Delivery ordDtlNoData);			
+	int getDeliveryAssignBanGoods(Delivery ordDtlNoData);
 	
 	/**
 	 * 출고처지정 등록 
@@ -246,7 +265,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 05
 	 */	
-	void insertTbDeliveryAssign(Delivery delivery);	
+	void insertTbDeliveryAssign(Delivery delivery);
 	
 	/**
 	 * 출고처지정HST 등록 
@@ -255,7 +274,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 05
 	 */	
-	void insertTbDeliveryAssignHst(Delivery delivery);	
+	void insertTbDeliveryAssignHst(Delivery delivery);
 	
 	/**
 	 * 주문상세 출고처지정
@@ -264,7 +283,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 05
 	 */	
-	void updateTbOrderDtlAssign(Delivery delivery);	
+	void updateTbOrderDtlAssign(Delivery delivery);
 	
 	/**
 	 * 출고처 및 상품 제외 조회 (직송매장) 
@@ -273,7 +292,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 06
 	 */
-	Delivery getDeliveryAssignBanGoodsShop(Delivery delivery);		
+	Delivery getDeliveryAssignBanGoodsShop(Delivery delivery);
 	
 	/**
 	 * 출고처지정 임시 테이블 삭제
@@ -300,7 +319,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 07
 	 */	
-	void insertTbDeliveryLocSetTmp(Delivery delivery);	
+	void insertTbDeliveryLocSetTmp(Delivery delivery);
 
 	
 	/**
@@ -320,7 +339,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 07
 	 */
-	int getDeliveryLocTmpGoodsSetMaxCnt();			
+	int getDeliveryLocTmpGoodsSetMaxCnt();
 	
 	/**
 	 * 출고처지정 임시 테이블 수정 
@@ -329,7 +348,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 07
 	 */	
-	void updateTbDeliveryLocSetTmp(Delivery delivery);		
+	void updateTbDeliveryLocSetTmp(Delivery delivery);
 	
 	/**
 	 * 출고처지정 임시 테이블 세트상품갯수 초기화
@@ -347,7 +366,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 07
 	 */
-	Collection<Delivery> getWmsDeliveryOrdNoList();	
+	Collection<Delivery> getWmsDeliveryOrdNoList();
 	
 	/**
 	 *  WMS 출고요청 대상 조회
@@ -356,7 +375,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 07
 	 */
-	Collection<Delivery> getWmsDeliveryList(Delivery ordNoData);	
+	Collection<Delivery> getWmsDeliveryList(Delivery ordNoData);
 	
 	/**
 	 *  WMS 회수요청 대상 조회
@@ -365,7 +384,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 08
 	 */
-	Collection<Delivery> getWithdrawRequestList();		
+	Collection<Delivery> getWithdrawRequestList();
 	
 	/**
 	 * 주문변경상세 상태값 변경
@@ -374,7 +393,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 08
 	 */	
-	void updateTbOrderChaneDetailStat(Delivery delivery);	
+	void updateTbOrderChaneDetailStat(Delivery delivery);
 	
 	/**
 	 * 회수송장번호없는 회수요청된 내역 조회  
@@ -383,7 +402,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 09
 	 */
-	Collection<Delivery> getWithdrawInvcRcpList();		
+	Collection<Delivery> getWithdrawInvcRcpList();
 	
 	/**
 	 * 주문변경상세  반운송장번호 업데이트 
@@ -392,7 +411,7 @@ public interface TsbDeliveryDao {
 	 * @author moon
 	 * @since 2021. 04. 12
 	 */	
-	void updateTbOrderChaneInvoc(Delivery delivery);	
+	void updateTbOrderChaneInvoc(Delivery delivery);
 	
 	/**
 	 * 주문변경회수상태 업데이트 
@@ -447,4 +466,95 @@ public interface TsbDeliveryDao {
 	 * @since 2021. 04. 15
 	 */	
 	void updateSwtWdInvcSendYn(Delivery delivery);	
+	
+	/**
+	 * 자동품절취소 대상 목록   (일반,예약)  
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 26
+	 */
+	Collection<Delivery> getSoldoutOrderNoList();
+	
+	/**
+	 * 자동품절취소 대상 주문상세목록     
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 26
+	 */
+	Collection<Delivery> getSoldoutOrderDtlNoList(Delivery delivery);	
+	
+	/**
+	 * 주문상세아이템 HST 등록 
+	 * @param Delivery
+	 * @return
+	 * @author moon
+	 * @since 2021. 04. 26
+	 */	
+	void createOrderDetailItemHst(Delivery delivery);	
+	
+	/**
+	 *  WMS 출고요청 대상 사은품 조회
+	 * @param  Delivery
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 04. 29
+	 */
+	Collection<Delivery> getWmsDeliveryGiftList(Delivery ordNoData);
+	
+	/**
+	 * 품절대상 출고예외 주문 목록 조회   
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 05. 06
+	 */
+	Collection<Delivery> getSoldoutOrderExcDtlNoList();
+	
+	/**
+	 * 품절대상 출고예외 주문상세 목록 조회   
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 05. 06
+	 */
+	Collection<Delivery> getSoldoutOrderExcDtlNoList(Delivery delivery);		
+	
+	/**
+	 * 품절대상 회수예외 주문 목록 조회   
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 05. 06
+	 */
+	Collection<Delivery> getSoldoutOrderRecallDtlNoList();
+	
+	/**
+	 * 품절대상 회수예외 주문상세 목록 조회   
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since 2021. 05. 06
+	 */
+	Collection<Delivery> getSoldoutOrderRecallDtlNoList(Delivery delivery);		
+	
+	/**
+	 * 출고예외 처리 완료    
+	 * @param  Delivery
+	 * @return 
+	 * @author moon
+	 * @since 2021. 05. 06
+	 */
+	void updateTbOrderDeliveryException(Delivery delivery);
+	
+	/**
+	 * 회수예외 처리 완료    
+	 * @param  Delivery
+	 * @return 
+	 * @author moon
+	 * @since 2021. 05. 06
+	 */
+	void updateTbRecallException(Delivery delivery);
+	
 }

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

@@ -113,6 +113,18 @@ public interface TsbWmsDeliveryDao {
 	 */
 	void updateWmsIfDeliveryExcItem(Delivery delivery);
 	
+	/**
+	 * WMS_IF 사은품 취소
+	 * @param 
+	 * @return Delivery
+	 * @author moon
+	 * @since 2021. 05. 03
+	 */
+	void updateWmsGiftCancel(Delivery delivery);
+		
+	
+	
+	
 	/**
 	 * WMS_IF 출고결과목록 
 	 * @param 

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

@@ -15,7 +15,7 @@ import com.style24.persistence.domain.Delivery;
 import lombok.extern.slf4j.Slf4j;
 
 /**
- * 회수예외 수신 (wmsif to mall) 
+ * 회수송장번호 수신
  *
  * @author moon
  * @since 2021. 04. 09

+ 2 - 0
src/main/java/com/style24/batch/biz/job/delivery/TsbDeliveryExcRcvJob.java

@@ -65,6 +65,8 @@ public class TsbDeliveryExcRcvJob extends TsbAbstractJob<Delivery, Delivery, Del
 		wmsDeliveryService.updateTbIfDeliveryException(excList, itemList);
 		
 		
+		
+		
 		succCnt = 1;
 		failCnt = 0;
 		

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

@@ -203,8 +203,11 @@ public class TsbDeliveryOrderJob extends TsbAbstractJob<Collection<Delivery>, Co
 		 for(Delivery ordData : ordList) {
 			 // wms 출고 정보 조회(mall_DB) 
 			 Collection<Delivery> wmsDelvList = deliveryService.getWmsDeliveryList(ordData);
+			 Collection<Delivery> giftList = deliveryService.getWmsDeliveryGiftList(ordData);
 			 // wms 출고 정보 등록 (wms_DB)
-			 wmsDeliveryService.insertWmsDelivery(wmsDelvList);
+			 wmsDeliveryService.insertWmsDelivery(wmsDelvList, giftList);
+			 
+			 
 			 
 			 // 주문상세상태 변경  상품준비중~
 			 String statGb = "PREPARE";

+ 99 - 0
src/main/java/com/style24/batch/biz/job/delivery/TsbSoldoutCancelJob.java

@@ -0,0 +1,99 @@
+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;
+
+/**
+ * 자동 품절쉬소
+ *
+ * @author moon
+ * @since 2021. 04. 26
+ */
+@Component
+@Slf4j
+public class TsbSoldoutCancelJob extends TsbAbstractJob<Delivery, Delivery, Delivery> {
+
+	@Autowired
+	private TsbDeliveryService deliveryService;
+
+	@Autowired
+	private TsbWmsDeliveryService wmsDeliveryService;
+	
+	
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Delivery read() throws Exception {
+
+		Delivery delivery = new Delivery();
+		return delivery;
+	}
+
+	@Override
+	public Delivery process(Delivery delivery) throws Exception {
+		succCnt = 0;
+		failCnt = 1;
+
+		/**
+		 * 1. (일반,예약) 품절취소대상 주문번호 목록 조회, 주문번호 단위  주문상세목록 조회 , 주문번호 단위 core 취소 서비스호출  
+		 * 2. (출고예외 -- 재고부족)               품절 대상 조회     core 취소 서비스호출  처리완료 업데이트 
+		 * 3. (회수예외 -- 확정전 품절, 확정전 불량 )   품절 대상 조회    core 취소 서비스호출  처리완료 업데이트 
+		 * */
+		
+		// 1. (일반,예약) 품절취소대상 주문번호 목록 조회, 주문번호 단위  주문상세목록 조회 , 주문번호 단위 core 취소 서비스호출  
+		Collection<Delivery> ordnoList = deliveryService.getSoldoutOrderNoList();
+		try {
+			for(Delivery data : ordnoList) {
+				deliveryService.SoldoutCancel(data,"N");
+				succCnt++;
+			}
+		}catch(Exception E) {
+			failCnt++;
+		}
+		
+		// 2. (출고예외 -- 재고부족)               품절 대상 조회     core 취소 서비스호출  처리완료 업데이트 
+		Collection<Delivery> excOrdnoList = deliveryService.getSoldoutOrderExcDtlNoList();
+		try {
+			for(Delivery data2 : excOrdnoList) {
+				deliveryService.SoldoutCancel(data2,"E");
+				succCnt++;
+			}
+		} catch(Exception E) {
+			failCnt++;
+		}
+		
+		// 3. (회수예외 -- 확정전 품절, 확정전 불량 )   품절 대상 조회    core 취소 서비스호출   처리완료 업데이트 
+		Collection<Delivery> recallOrdnoList = deliveryService.getSoldoutOrderRecallDtlNoList();
+		try {
+			for(Delivery data3 : recallOrdnoList) {
+				deliveryService.SoldoutCancel(data3,"R");
+				succCnt++;
+			}
+		} catch(Exception E) {
+			failCnt++;
+		}
+
+		 return delivery;
+	}
+
+	@Override
+	public Delivery write(Delivery delivery) throws Exception {
+
+		return delivery;
+	}
+
+	@Override
+	public void notify(Delivery delivery) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

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

@@ -48,15 +48,15 @@ public class TsbSweetTrackerJob extends TsbAbstractJob<Collection<Delivery>, Col
 		 * 
 		 * */
 		
-//		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"));
+		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;
 		

+ 152 - 8
src/main/java/com/style24/batch/biz/service/TsbDeliveryService.java

@@ -27,6 +27,7 @@ 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.TscDeliveryService;
 import com.style24.core.biz.service.TscErpService;
 import com.style24.core.biz.service.TscWmsService;
 import com.style24.batch.support.env.TsbConstants;
@@ -78,6 +79,9 @@ public class TsbDeliveryService {
 	@Autowired
 	private TscOrderChangeDao orderChangeDao;
 	
+	@Autowired
+	private TscDeliveryService coreDeliveryService;		
+	
 	/**
 	 * 총알배송 권역정보 갱신 
 	 * @param  Collection<Delivery>
@@ -170,8 +174,14 @@ public class TsbDeliveryService {
 		for(Delivery itemData : itemList) {
 			itemData.setRegNo(TsbConstants.REG_NO);
 			deliveryDao.insertTbOrderDeliveryExceptionItem(itemData);
+			
+			if("Y".equals(itemData.getGiftyn())) {
+				// 출고 예외  사은품인경우  사은품상품혜택 테이블(tb_freegift_val) 사은품남은수량(LEFT_QTY) =0 으로 업데이트 
+				itemData.setUpdNo(TsbConstants.REG_NO);
+				deliveryDao.updateTbFreegiftValSoldout(itemData);
+			}
 		}		
-				
+		
 	}	
 	
 	/**
@@ -183,15 +193,21 @@ public class TsbDeliveryService {
 	 */
 	@Transactional("shopTxnManager")
 	public void updateTbOrderDtlStat(Collection<Delivery> list, String  statGb) {
-        
-		// 출고예외 등록 -H
+		// TB_ORDER_DETAIL , TB_ORDER_DETAIL_ITEM 상태값 변경 
 		for(Delivery data : list) {
 			if("SHIPPING".equals(statGb)) {
 				data.setOrdDtlStat(OrderDetailStat.SHIPPING.value());
 			} else if("PREPARE".equals(statGb)) {
 				data.setOrdDtlStat(OrderDetailStat.GOODS_PREPARE.value());
 			}
+			
+			if(99999999 == data.getOrderdtlno()) {
+				Delivery dtlNo = deliveryDao.getOrdDtlno(data);
+				data.setOrdDtlNo(dtlNo.getOrdDtlNo());
+			}
+			
 			data.setUpdNo(TsbConstants.REG_NO);
+			data.setRegNo(TsbConstants.REG_NO);
 			deliveryDao.updateTbOrderDtlStat(data);
 			
 			// 주문상세이력
@@ -201,6 +217,10 @@ public class TsbDeliveryService {
 			order.setRegNo(TsbConstants.REG_NO);
 			orderDao.createOrderDetailHst(order);	
 			
+			if("SHIPPING".equals(statGb)) {
+				data.setOrdDtlNo(data.getOrderdtlno());
+				deliveryDao.createOrderDetailItemHst(data);
+			}
 		}	
 	}	
 	
@@ -278,12 +298,18 @@ public class TsbDeliveryService {
 			data.setUpdNo(TsbConstants.REG_NO);
 			deliveryDao.updateWdOrderDtlStat(data);
 			
+			
 			// 주문상세이력
 			Order order = new Order();
 			order.setOrdDtlNo(data.getOrderdtlno());
 			order.setUpdNo(TsbConstants.REG_NO);
 			order.setRegNo(TsbConstants.REG_NO);
 			orderDao.createOrderDetailHst(order);
+			
+			// 주문상세아이템 이력 
+			data.setOrdDtlStat(OrderChangeStat.EXCHANGE_COMPLETE.value());
+			data.setOrdDtlNo(data.getOrderdtlno());
+			deliveryDao.createOrderDetailItemHst(data);
 	
 	}	
 	
@@ -320,15 +346,30 @@ public class TsbDeliveryService {
 	@Transactional("shopTxnManager")
 	public void saveInvoice(Delivery data) {
 		
-		data.setOrdDtlStat(OrderDetailStat.PAYMENT_COMPLETE.value());
 		data.setUpdNo(TsbConstants.REG_NO);
+		data.setRegNo(TsbConstants.REG_NO);
+		if("N".equals(data.getOrdDtlNoYn())) {
+			Delivery dataDtlNo = deliveryDao.getOrdDtlno(data);
+			data.setOrderdtlno(dataDtlNo.getOrdDtlNo());
+		}
 		deliveryDao.insertTbOrdDtlInvoice(data);
 		
 		if("N".equals(data.getAddinvoiceyn())){
 			data.setOrdDtlStat(OrderDetailStat.DELIVERY_PREPARE.value());  // DELIVERY_PREPARE("G013_40"),		// 배송준비중
 			// INVOICE_SEND_YN    Y N  대상 확인후 case에 반영 
 			
-			deliveryDao.updateOrdDtlStat(data);
+			int rtn = deliveryDao.updateOrdDtlStat(data);
+			
+			log.info("rtn: "+rtn);
+			
+			if(rtn > 0) {
+				// 주문상세이력
+				Order order = new Order();
+				order.setOrdDtlNo(data.getOrderdtlno());
+				order.setUpdNo(TsbConstants.REG_NO);
+				order.setRegNo(TsbConstants.REG_NO);
+				orderDao.createOrderDetailHst(order);
+			}
 		}
 	}	
 	
@@ -554,7 +595,9 @@ public class TsbDeliveryService {
 		order.setOrdDtlNo(delivery.getOrdDtlNo());
 		order.setUpdNo(TsbConstants.REG_NO);
 		order.setRegNo(TsbConstants.REG_NO);
-		orderDao.createOrderDetailHst(order);					
+		orderDao.createOrderDetailHst(order);
+		
+		
 	}
 
 	/**
@@ -825,6 +868,7 @@ public class TsbDeliveryService {
 	@Transactional("shopTxnManager")
 	public void updateOrdInvcSendYn(Delivery data ) {
 		
+		data.setUpdNo(TsbConstants.REG_NO);
 		if("O".equals(data.getGb())) {      // 주문 
 			deliveryDao.updateSwtOrdInvcSendYn(data);
 		} else if("W".equals(data.getGb())){ // 회수 
@@ -832,6 +876,68 @@ public class TsbDeliveryService {
 		}
 	}
 	
+	/**
+	 * 자동 품절취소
+	 * @param  Delivery
+	 * @return 
+	 * @author moon
+	 * @since  2021. 04. 26
+	 */
+	@Transactional("shopTxnManager")
+	public void SoldoutCancel(Delivery data, String gubun ) {
+		Integer userNo = TsbConstants.REG_NO;
+		Collection<Delivery> list = null;
+		if("N".equals(gubun)) {
+			list = deliveryDao.getSoldoutOrderDtlNoList(data);
+		} else if("E".equals(gubun)) {  // 출고예외 - 재고없음
+			list = deliveryDao.getSoldoutOrderExcDtlNoList(data);
+		} else if("R".equals(gubun)) {  // 회수예외 - 확정 전 품절(재고없음). 확정 전 불량  
+			list = deliveryDao.getSoldoutOrderRecallDtlNoList(data);
+		}
+		
+		Collection<Order> ordSoldoutList = new ArrayList<Order>();
+		for(Delivery item : list ) {
+			Order param = new Order();
+			param.setOrdNo(item.getOrdNo());
+			param.setOrdDtlNo(item.getOrdDtlNo());
+			param.setCustNo(item.getCustNo());
+			param.setOrdNm(item.getOrdNm());
+			param.setPgGb(item.getPgGb());
+			param.setPayMeans(item.getPayMeans());
+			param.setBankCd(item.getBankCd());
+			param.setAccountNm(item.getAccountNm());
+			param.setAccountNo(item.getAccountNo());
+			
+			param.setCnclRtnQty(item.getSaleQty());
+			ordSoldoutList.add(param);
+			
+		}
+		coreDeliveryService.cancelSoldout(ordSoldoutList,userNo);
+		
+		if("E".equals(gubun)) {  
+			// 처리완료 업데이트 
+			deliveryDao.updateTbOrderDeliveryException(data);
+		} else if("R".equals(gubun)) {
+			// 처리완료 업데이트  
+			deliveryDao.updateTbRecallException(data);
+		}
+
+	}
+	
+	/**
+	 * 자동품절취소 대상 목록
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 26
+	 */
+	public Collection<Delivery> getSoldoutOrderNoList() {
+
+		Collection<Delivery> list = deliveryDao.getSoldoutOrderNoList();
+		return list ;
+	}
+	
+	
 	public GagaMap sweetTrackerInvcSendTest() {
 		GagaMap result = new GagaMap();
 		
@@ -851,9 +957,9 @@ public class TsbDeliveryService {
 		
 		
 		MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
-		params.add("num",          "237407773945");
+		params.add("num",          "237361343052");
 		params.add("code",         "08");
-		params.add("fid",          "20210425000001");
+		params.add("fid",          "08237361343052");
 		params.add("callback_url", callBackUrl);
 		params.add("callback_type","json");
 		params.add("tier",         tier);
@@ -891,4 +997,42 @@ public class TsbDeliveryService {
 		return result;
 	}
 	
+	/**
+	 * WMS 출고요청 대상 사은품 조회
+	 * @param  
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 04. 29
+	 */	
+	public Collection<Delivery> getWmsDeliveryGiftList(Delivery delivery){
+		Collection<Delivery> rtn = deliveryDao.getWmsDeliveryGiftList(delivery);
+		return rtn;
+	}	
+	
+	/**
+	 * 품절대상 출고예외 주문 목록 조회
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 05. 06
+	 */
+	public Collection<Delivery> getSoldoutOrderExcDtlNoList() {
+
+		Collection<Delivery> list = deliveryDao.getSoldoutOrderExcDtlNoList();
+		return list ;
+	}
+	
+	/**
+	 * 품절대상 회수예외 주문 목록 조회
+	 * @param 
+	 * @return Collection<Delivery>
+	 * @author moon
+	 * @since  2021. 05. 06
+	 */
+	public Collection<Delivery> getSoldoutOrderRecallDtlNoList() {
+
+		Collection<Delivery> list = deliveryDao.getSoldoutOrderRecallDtlNoList();
+		return list ;
+	}
+	
 }

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

@@ -195,6 +195,9 @@ public class TsbWmsDeliveryService {
 		for (Delivery itemData : itemList) {
 			itemData.setIfyn("Y");
 			wmsDeliveryDao.updateWmsIfDeliveryExcItem(itemData);
+			if("Y".equals(itemData.getGiftyn())) {
+				wmsDeliveryDao.updateWmsGiftCancel(itemData);
+			}
 		}
 
 	}		
@@ -324,7 +327,7 @@ public class TsbWmsDeliveryService {
 	 * @since  2021. 04. 08
 	 */
 	@Transactional("wmsTxnManager")
-	public void insertWmsDelivery(Collection<Delivery> list) {
+	public void insertWmsDelivery(Collection<Delivery> list, Collection<Delivery>giftList) {
 
 		// TB_IF_DeliveryOrder
 		String uuid = UUID.randomUUID().toString();
@@ -339,8 +342,17 @@ public class TsbWmsDeliveryService {
 		for (Delivery data : list) {
 			// TB_IF_DeliveryOrderItem
 			data.setDeliveryorderno(ordPk);
+			data.setIfyn("N");
 			wmsDeliveryDao.insertWmsTbIfDeliveryOrderItem(data);
 		}
+		for(Delivery gift : giftList) {
+			gift.setDeliveryorderno(ordPk);
+			gift.setIfyn("N");
+			wmsDeliveryDao.insertWmsTbIfDeliveryOrderItem(gift);
+			
+			
+		}
+		
 	}			
 	
 	

+ 17 - 1
src/main/java/com/style24/batch/biz/task/TsbDeliveryTask.java

@@ -18,6 +18,7 @@ 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;
+import com.style24.batch.biz.job.delivery.TsbSoldoutCancelJob;
 
 
 
@@ -73,6 +74,9 @@ public class TsbDeliveryTask {
 	@Autowired
 	private TsbSweetTrackerJob tsbSweetTrackerJob;
 	
+	@Autowired
+	private TsbSoldoutCancelJob tsbSoldoutCancelJob;
+	
 	
 	
 	/**
@@ -132,7 +136,7 @@ public class TsbDeliveryTask {
 	@Async 
 	public void tsbDeliveryExcRcvJob() throws Exception {
 		deliveryExcRcvJob.run("cron.delivery.tsbDeliveryExcRcvJob");
-	}	
+	}
 		
 	/**
 	 * wms 송장번호 수신  
@@ -243,6 +247,18 @@ public class TsbDeliveryTask {
 		tsbShopGoodsStockJob.run("cron.delivery.tsbShopGoodsStockJob");
 	}
 	
+	/**
+	 * 자동품절취소
+	 *
+	 * @throws Exception
+	 */
+	//@Scheduled(cron = "${cron.delivery.tsbShopGoodsStockJob}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async 
+	public void tsbSoldoutCancelJob() throws Exception {
+		tsbSoldoutCancelJob.run("cron.delivery.tsbShopGoodsStockJob");
+	}
+
 	/**
 	 * 스윗트래커  배송 추적 요청
 	 *

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

@@ -102,7 +102,6 @@ public class Delivery extends TscBaseDomain {
     private String orderguid;			
     private String deliverytypecd;		
     private String issuetypecd;			
-    private int deliveryunitno;		
     private String dateissued;			
     private String datereceived;						
     private String loginid;						
@@ -136,7 +135,14 @@ public class Delivery extends TscBaseDomain {
 	private String detailRsn;
 	private String custId;
 	private String gb;
-    
+	private String ordNm;
+	private String pgGb;
+	private String payMeans;
+	private String bankCd;
+	private String accountNm;
+	private String accountNo;
+	private String ordDtlNoYn;
+	
 	private Integer recallexceptionno;
 	private Integer recallexceptionitemno;
 	private Integer recallexceptionmemono;
@@ -160,6 +166,9 @@ public class Delivery extends TscBaseDomain {
 	private Integer delvAssignSq;
 	private Integer delvAssignHstSq;
 	private Integer providerno;					// 공급자 번호
+	private Integer custNo;
+	private Integer ordInvoiceSq;
+	
 	
 	private int chargeamount;
 	private int qty;
@@ -179,13 +188,14 @@ public class Delivery extends TscBaseDomain {
     private int cqty;							// 취소수량
     private int enclosefee;						// 동봉비
     private int serial;
-    
+    private int deliveryunitno;
+    private int saleQty;
+    private int setqty;
+    private int setitemqty;
     
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] custUseNoList;			
 
- 
-    
 }
 
 

+ 326 - 11
src/main/java/com/style24/persistence/mybatis/shop/TsbDelivery.xml

@@ -117,7 +117,7 @@
 			  #{recallexceptionitemno}
 			, #{recallexceptionno}
 			, #{deliveryorderitemno}
-			, #{orderdtlno}
+			, CASE WHEN #{orderdtlno} IS NULL THEN (SELECT ORD_DTL_NO FROM TB_ORDER_DETAIL_ITEM WHERE ORD_NO = #{orderno} AND OPT_CD = #{skucode} ) ELSE #{orderdtlno} END
 			, #{productno}
 			, #{productcode}
 			, #{productname}
@@ -234,6 +234,9 @@
 				, REASON_CD
 				, ORD_NO
 				, ORD_DTL_NO
+				, GIFT_YN
+				, PRODUCT_NO
+				, PRODUCT_CODE
 				, REG_NO
 				, REG_DT
 				, UPD_NO
@@ -246,9 +249,12 @@
 				, #{deliveryexceptionitemno} 
 				, #{deliveryexceptionno} 
 				, #{exceptionqty} 
-				, #{reasoncd} 
-				, #{orderno} 
-				, #{orderdtlno} 
+				, #{reasoncd}
+				, #{orderno}
+				, CASE WHEN #{orderdtlno} IS NULL THEN (SELECT ORD_DTL_NO FROM TB_ORDER_DETAIL_ITEM WHERE ORD_NO = #{orderno} AND OPT_CD = #{skucode} ) ELSE #{orderdtlno} END 
+				, #{giftyn}
+				, #{productno}
+				, #{productcode}
 				, #{regNo}
 				, NOW()
 				, #{regNo}
@@ -267,7 +273,7 @@
 		  AND ORD_NO     = #{orderno}
 		  AND ORD_DTL_STAT IN ('G013_20','G013_30','G013_35','G013_40')
 	</update>
-
+	
 	<!-- 주문정보 조회 -->	
 	<select id="getOrderInfoList" resultType="Delivery">
 		SELECT 
@@ -444,14 +450,14 @@
 	</update>
 
 	<!--  주문상세송장 등록   -->
-	<insert id="insertTbOrdDtlInvoice" parameterType="Delivery" >
+	<insert id="insertTbOrdDtlInvoice" parameterType="Delivery"  keyProperty="ordInvoiceSq">
 		/*TsbDelivery.insertTbOrdDtlInvoice*/
 		INSERT INTO TB_ORDER_DETAIL_INVOICE 
 		(
 			  ORD_NO					 -- 주문번호		
 			, ORD_DTL_NO				 -- 주문상세번호	
 			, INVOICE_NO				 -- 송장번호	
-			, ADD_INVOICE_YN             -- 추가송장여부	
+			, ADD_INVOICE_YN			 -- 추가송장여부	
 			, DEL_YN					 -- 삭제여부		
 			, REG_NO					 -- 등록자NO		
 			, REG_DT					 -- 등록일시		
@@ -473,6 +479,16 @@
 			
 	</insert>
 	
+	<!-- 주문상세번호 조회 -->	
+	<select id="getOrdDtlno" resultType="Delivery">
+		/*TsbDelivery.getOrdDtlno*/
+		SELECT ORD_DTL_NO 
+		  FROM TB_ORDER_DETAIL_ITEM 
+		 WHERE ORD_NO     = #{orderno}
+		   AND PRODUCT_NO = #{productno}
+		   AND OPT_CD     = #{skucode}
+	</select>
+		
 	<!-- 주문상세 상태값변경    -->
 	<update id="updateOrdDtlStat" parameterType="Delivery" >
 		/*TsbDelivery.updateOrdDtlStat*/
@@ -480,10 +496,14 @@
 			  ORD_DTL_STAT    = #{ordDtlStat}  -- G013_40	배송준비중
 			, INVOICE_NO      = #{invoiceno}
 			, INVOICE_SEND_YN = 'N'
+			, SHIP_COMP_CD    = (SELECT MAX(C.SHIP_COMP_CD) FROM TB_SHIP_COMPANY C WHERE WMS_SHIP_COMP_CD = #{logisticsno})
 			, UPD_NO          = #{regNo}
 			, UPD_DT          = NOW()
-		WHERE ORD_DTL_NO = #{orderno}
-		  AND ORD_NO     = #{orderdtlno}
+		WHERE ORD_NO     = #{orderno}
+		<if test='orderdtlno != null and orderdtlno != ""'>
+		  AND ORD_DTL_NO = #{orderdtlno}
+		</if>
+		  AND ORD_DTL_STAT NOT IN ('G013_40','G013_50','G013_55','G013_60','G013_70','G013_97','G013_98','G013_99') 
 			
 	</update>
 		
@@ -535,6 +555,7 @@
 			   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') 
+			--   AND A.REG_NO = 100025
 			 GROUP BY A.ORD_NO
 			
 			UNION ALL /* 교환  상품 */
@@ -551,6 +572,7 @@
 			   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
+			--   AND A.REG_NO = 100025
 			 GROUP BY A.ORD_NO
 			 
 			UNION ALL  
@@ -565,6 +587,7 @@
 			   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 
+			--   AND A.REG_NO = 100025    
 			 GROUP BY A.ORD_NO
 			
 		) A
@@ -719,6 +742,8 @@
 		  AND ORD_NO       = #{ordNo}
 		  AND ORD_DTL_STAT = 'G013_20'
 	</update>
+	
+
 			
 	<!-- 출고처 직송매장 체크   -->	
 	<select id="getDeliveryAssignBanGoodsShop" resultType="Delivery">
@@ -903,7 +928,7 @@
 			, CASE WHEN B.SHOT_DELV_YN ='Y' THEN '14' 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
+			, CASE WHEN (SELECT COUNT(*) -1 FROM TB_ORDER_DETAIL WHERE ORD_NO = A.ORD_NO) > 0 THEN CONCAT(F.GOODS_NM,' 외  ', (SELECT COUNT(*) -1 FROM TB_ORDER_DETAIL WHERE ORD_NO = A.ORD_NO) , '건') ELSE F.GOODS_NM END   AS ProductSummary
 			,  0                                  AS IsCancel
 			,  0                                  AS IsChangeAddress
 			,  0                                  AS IsReOrder
@@ -916,7 +941,7 @@
 			, 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  	-- 상품타입
+			, '일반'         														  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
@@ -928,6 +953,8 @@
 			, CASE WHEN B.GOODS_TYPE = 'G056_S' THEN F.GOODS_NM ELSE '' END  AS SetproductName -- 세트상품명 
 			, B.ORD_DTL_NO                        AS OrderDtlNo
 			, 0                                   AS Cqty
+			, CASE WHEN B.GOODS_TYPE = 'G056_S' THEN (B.ORD_QTY -B.CNCL_RTN_QTY) ELSE 0 END  AS SetQty        -- 세트상품 수량
+			, CASE WHEN B.GOODS_TYPE = 'G056_S' THEN C.ITEM_QTY ELSE 0 END                   AS SetItemQty    -- 세트 구성수량
 		  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 
@@ -942,6 +969,60 @@
 		   
 	</select>			
 	
+	<!-- WMS 출고요청 대상 조회      -->	
+	<select id="getWmsDeliveryGiftList" resultType="Delivery">
+		/*TsbDelivery.getWmsDeliveryGiftList*/
+		SELECT 
+				  A.ORD_NO    AS OrderNo
+				, '' AS  DeliveryTypeCd
+				, '' AS  IssueTypeCd
+				, '10' AS StatusCd -- 배송지시
+				, '' AS LoginId
+				, '' AS CustomerName
+				, '' AS DateOrdered
+				, '' AS  Grade 
+				, '' AS Receiver
+				, '' AS ReceiverTelNum
+				, '' AS ReceiverCellNum
+				, '' AS DeliveryPostalCode
+				, '' AS DeliveryAddr1
+				, '' AS DeliveryAddr2
+				, '' AS LogisticsNo
+				, '' AS LogisticsName
+				, '' AS DeliveryMemo
+				, '' AS ProductSummary
+				,  0 AS IsCancel
+				,  0 AS IsChangeAddress
+				,  0 AS IsReOrder
+				, '' AS OrderPath -- 주문경로 (확인필요!)
+				, '' AS DeliveryClassCd 
+				, '' AS ShippingTypeCd   -- 출고구분 10 일반, 20 교환
+				, '' AS IsBeautyDelivery
+				, '' AS DeliveryAddrNew  -- 도로명 주소 
+				, '' AS ProviderNo
+				, C.PRODUCT_NO                        AS ProductNo
+				, C.PRODUCT_CODE                      AS ProductCode
+				, (SELECT G.GOODS_NM FROM TB_FREE_GOODS G WHERE G.PRODUCT_NO = C.PRODUCT_NO AND G.PRODUCT_CODE = C.PRODUCT_CODE) AS ProductName    -- 상품명 
+				, '사은품'     AS ProductTypeCd  	-- 상품타입
+				, ' '         AS SKUCode       
+				, ''         AS SKUValue
+				, 0          AS UnitPrice
+				, C.ITEM_QTY AS Qty
+				, 'WMS'      AS StockMgmtTypeCd
+				, 'Y'        AS GiftYn  -- 사은품여부 
+				, ''         AS SetProductCode -- 세트상품코드 
+				, 'N'        AS SetProductYn   -- 세트상품여부 
+				, ''         AS SetproductName -- 세트상품명 
+				, NULL       AS OrderDtlNo
+				, 0          AS Cqty
+				, 0          AS SetQty        -- 세트상품 수량
+				, 0          AS SetItemQty    -- 세트 구성수량
+		  FROM TB_ORD_FREEGIFT     A
+		  JOIN TB_ORD_FREEGIFT_VAL C ON A.ORD_FREEGIFT_SQ = C.ORD_FREEGIFT_SQ
+		  JOIN TB_ORDER            O ON A.ORD_NO = O.ORD_NO 
+		  WHERE A.ORD_NO = #{ordNo} 
+	</select>
+
 	<!-- WMS 회수요청 대상 조회      -->	
 	<select id="getWithdrawRequestList" resultType="Delivery">
 		/*TsbDelivery.getWithdrawRequestList*/
@@ -1260,5 +1341,239 @@
 		WHERE ORD_CHG_SQ = #{ordChgSq}
 	</update>		
 	
+	<insert id="createOrderDetailItemHst" parameterType="Delivery">
+		/* TsbDelivery.createOrderDetailItemHst */
+		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
+		    ORD_DTL_ITEM_SQ
+		    , ORD_DTL_NO
+		    , ORD_NO
+		    , ORD_DTL_STAT
+		    , ITEM_CD
+		    , OPT_CD
+		    , OPT_CD1
+		    , OPT_CD2
+		    , SKU_MODEL_NO
+		    , PRODUCT_NO
+		    , PRODUCT_CODE
+		    , ITEM_QTY
+		    , ITEM_PRICE
+		    , OPT_ADD_PRICE
+		    , DISP_ORD
+		    , ORD_AMT
+		    , CNCL_RTN_AMT
+		    , CPN1_DC_AMT
+		    , TMTB1_DC_AMT
+		    , TMTB2_DC_AMT
+		    , GOODS_CPN_DC_AMT
+		    , CART_CPN_DC_AMT
+		    , PNT_DC_AMT
+		    , PRE_PNT_DC_AMT
+		    , SAVE_PNT_AMT
+		    , REAL_ORD_AMT
+		    , GFCD_USE_AMT
+		    , REG_NO
+		    , REG_DT
+		    , UPD_NO
+		    , UPD_DT
+		)
+		SELECT ORD_DTL_ITEM_SQ
+		     , ORD_DTL_NO
+		     , ORD_NO
+		     , #{ordDtlStat}
+		     , ITEM_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , SKU_MODEL_NO
+		     , PRODUCT_NO
+		     , PRODUCT_CODE
+		     , ITEM_QTY
+		     , ITEM_PRICE
+		     , OPT_ADD_PRICE
+		     , DISP_ORD
+		     , ORD_AMT
+		     , CNCL_RTN_AMT
+		     , CPN1_DC_AMT
+		     , TMTB1_DC_AMT
+		     , TMTB2_DC_AMT
+		     , GOODS_CPN_DC_AMT
+		     , CART_CPN_DC_AMT
+		     , PNT_DC_AMT
+		     , PRE_PNT_DC_AMT
+		     , SAVE_PNT_AMT
+		     , REAL_ORD_AMT
+		     , GFCD_USE_AMT
+		     , REG_NO
+		     , NOW()
+		     , UPD_NO
+		     , NOW()
+		  FROM TB_ORDER_DETAIL_ITEM
+		 WHERE 1=1
+		   AND ORD_DTL_NO = #{ordDtlNo}
+	</insert>
+	
+	<!-- 품절 사은품 재고 업데이트    -->
+	<update id="updateTbFreegiftValSoldout" parameterType="Delivery" >
+		/*TsbDelivery.updateTbFreegiftValSoldout*/
+		UPDATE TB_FREEGIFT_VAL SET 
+			  LEFT_QTY = 0
+			, UPD_NO   = #{updNo}
+			, UPD_DT   = NOW()
+		WHERE PRODUCT_NO = #{productno}
+
+	</update>	
+	
+	<!-- 품절대상 주문 목록 조회(일반,예약)         -->	
+	<select id="getSoldoutOrderNoList" resultType="Delivery">
+		/*TsbDelivery.getSoldoutOrderNoList*/
+		<![CDATA[
+		SELECT 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 B.ORD_DTL_STAT  = 'G013_20' -- 결재완료 
+			   AND C.SELF_GOODS_YN = 'Y'       -- 자사 상품
+			   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') 
+			
+			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 B.ORD_DTL_STAT  = 'G013_20' -- 결재완료 
+			   AND C.SELF_GOODS_YN = 'Y'       -- 자사 상품
+			   AND D.USE_YN        = 'Y'
+			   AND D.DELV_RES_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)
+		) A 
+		GROUP BY A.ORD_NO
+		ORDER BY ORD_NO
+		]]>
+	</select>	
+	
+	<!-- 품절대상 주문상세 목록 조회(일반,예약)         -->	
+	<select id="getSoldoutOrderDtlNoList" resultType="Delivery">
+		/*TsbDelivery.getSoldoutOrderDtlNoList*/
+		<![CDATA[
+		SELECT 
+				  A.ORD_NO 
+				, B.ORD_DTL_NO 
+				, A.CUST_NO 
+				, A.ORD_NM 
+				, D.PAY_GB 
+				, D.PAY_MEANS
+				, E.BANK_CD 
+				, E.ACCOUNT_NM 
+				, E.ACCOUNT_NO 
+				, 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 
+		  JOIN TB_GOODS        C ON B.GOODS_CD = C.GOODS_CD 
+		  JOIN TB_PAYMENT      D ON A.ORD_NO = D.ORD_NO AND D.PAY_STAT = 'G016_30'
+		  LEFT OUTER JOIN TB_CUST_ACCOUNT E ON A.CUST_NO = E.CUST_NO AND E.DEFAULT_YN = 'Y' AND E.DEL_YN = 'N'	
+		 WHERE A.ORD_NO = #{ordNo}
+		   AND C.SELF_GOODS_YN = 'Y'      -- 자사상품
+		   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 > DATE_ADD(DATE_FORMAT(CONCAT(STR_TO_DATE(NOW(), '%Y-%m-%d'),' 10:00:00'),'%Y%m%d%H%i%S') , INTERVAL -1 DAY)) -- 예약상품건 제외   
+		 ORDER BY B.ORD_DTL_NO	
+		 ]]>
+	</select>	
+		
+	
+	<!-- 품절대상 출고예외 주문 목록 조회         -->	
+	<select id="getSoldoutOrderExcDtlNoList" resultType="Delivery">
+		/*TsbDelivery.getSoldoutOrderExcDtlNoList*/
+		SELECT A.ORD_NO 
+		  FROM TB_ORDER_DELIVERY_EXCEPTION A 
+		  JOIN TB_ORDER_DELIVERY_EXCEPTION_ITEM B ON A.DELIVERY_EXCEPTION_SQ = B.DELIVERY_EXCEPTION_SQ 
+		 WHERE A.COMPLTED_YN = 'N'
+		   AND B.GIFT_YN     = 'N'
+		 GROUP BY A.ORD_NO 
+	</select>
+	
+	<!-- 품절대상 출고예외 주문상세 목록 조회         -->
+	<select id="getSoldoutOrderExcDtlNoList" resultType="Delivery">
+		/*TsbDelivery.getSoldoutOrderExcDtlNoList*/
+		SELECT 
+			  A.ORD_NO 
+			, B.ORD_DTL_NO
+			, C.CUST_NO 
+			, C.ORD_NM 
+			, D.PG_GB 
+			, D.PAY_MEANS 
+			, E.BANK_CD
+			, E.ACCOUNT_NM 
+			, E.ACCOUNT_NO 
+			, B.EXCEPTION_QTY AS SALE_QTY 
+		  FROM TB_ORDER_DELIVERY_EXCEPTION A 
+		  JOIN TB_ORDER_DELIVERY_EXCEPTION_ITEM B ON A.DELIVERY_EXCEPTION_SQ = B.DELIVERY_EXCEPTION_SQ 
+		  JOIN TB_ORDER                         C ON A.ORD_NO = C.ORD_NO 
+		  JOIN TB_PAYMENT                       D ON A.ORD_NO = D.ORD_NO   AND D.PAY_STAT = 'G016_30'
+		  LEFT OUTER JOIN TB_CUST_ACCOUNT       E ON C.CUST_NO = E.CUST_NO AND E.DEFAULT_YN = 'Y' AND E.DEL_YN = 'N'	
+		  WHERE A.COMPLTED_YN = 'N'
+		   AND B.GIFT_YN      = 'N'
+		   AND A.ORD_NO       = #{ordNo}
+	</select>	
+	
+	<!-- 품절대상 회수예외 주문 목록 조회         -->	
+	<select id="getSoldoutOrderRecallDtlNoList" resultType="Delivery">
+		/*TsbDelivery.getSoldoutOrderRecallDtlNoList*/
+		SELECT A.ORDER_NO 
+		  FROM TB_ORDER_RECALL_EXCEPTION A 
+		  JOIN TB_ORDER_RECALL_EXCEPTION_ITEM B ON A.RECALL_EXCEPTION_NO = B.RECALL_EXCEPTION_NO 
+		 WHERE B.REASON_CD IN ('확정 전 불량','확정 전 품절(재고없음)')
+		   AND A.RECALL_STAT ='P'
+		 GROUP BY A.ORDER_NO 
+	</select>
+		
+	<!-- 품절대상 회수예외 주문상세 목록 조회         -->
+	<select id="getSoldoutOrderRecallDtlNoList" resultType="Delivery">
+		/*TsbDelivery.getSoldoutOrderRecallDtlNoList*/
+		SELECT 
+			  A.ORDER_NO     AS ORD_NO
+			, B.ORDER_DTL_NO AS ORD_DTL_NO 
+			, C.CUST_NO 
+			, C.ORD_NM 
+			, D.PG_GB 
+			, D.PAY_MEANS 
+			, E.BANK_CD
+			, E.ACCOUNT_NM 
+			, E.ACCOUNT_NO 
+			, B.EXCEPTION_QTY AS SALE_QTY 
+		  FROM TB_ORDER_RECALL_EXCEPTION A 
+		  JOIN TB_ORDER_RECALL_EXCEPTION_ITEM B ON A.RECALL_EXCEPTION_NO = B.RECALL_EXCEPTION_NO 
+		  JOIN TB_ORDER                         C ON A.ORDER_NO = C.ORD_NO 
+		  JOIN TB_PAYMENT                       D ON A.ORDER_NO = D.ORD_NO   AND D.PAY_STAT = 'G016_30'
+		  LEFT OUTER JOIN TB_CUST_ACCOUNT       E ON C.CUST_NO = E.CUST_NO AND E.DEFAULT_YN = 'Y' AND E.DEL_YN = 'N'	  
+		 WHERE B.REASON_CD IN ('확정 전 불량','확정 전 품절(재고없음)')
+		   AND A.RECALL_STAT ='P'
+		   AND A.ORDER_NO = #{ordNo}
+	</select>
+	
+	<!-- 출고예외 처리 완료    -->
+	<update id="updateTbOrderDeliveryException" parameterType="Delivery" >
+		/*TsbDelivery.updateTbOrderDeliveryException*/
+		UPDATE TB_ORDER_DELIVERY_EXCEPTION SET 
+			  COMPLTED_YN = 'Y'
+			, UPD_NO      = #{updNo}
+			, UPD_DT      =  NOW()
+		WHERE COMPLTED_YN = 'N'
+		  AND ORD_NO      = #{ordNo}
+	</update>	
+	
+	<!-- 회수예외 처리 완료    -->
+	<update id="updateTbRecallException" parameterType="Delivery" >
+		/*TsbDelivery.updateTbRecallException*/
+		UPDATE TB_ORDER_RECALL_EXCEPTION SET
+			  RECALL_STAT    = 'S'
+			, RECALL_STAT_DT = NOW()
+		WHERE RECALL_STAT ='P'
+		  AND ORDER_NO = #{ordNo}
+	</update>	
+		
 	
 </mapper>

+ 31 - 9
src/main/java/com/style24/persistence/mybatis/wms/TsbWmsDelivery.xml

@@ -60,7 +60,7 @@
 			, NULL AS IfDate
 		  FROM iSTYLE24_WmsIf.DBO.TB_IF_RecallException
 		WHERE 1=1
-		  -- AND IfStat = '0'
+		  AND IfStat = '0'
 		  AND StatusCd = '대기'
 		  AND DateCreated > CONVERT(datetime,'20200201'+' 00:00:00') -- 임시임 
 	</select>
@@ -79,12 +79,13 @@
 			, A.SKUValue
 			, A.ExceptionQty
 			, A.ReasonCd
-			, 0   AS OrderDtlNo
+			, A.OrderDtlNo
 			, '0'   AS IfStat
 			, NULL AS IfDate
+			, B.OrderNo
 		  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 A.IfStat = 0
 		   AND B.StatusCd = '대기'
 		   AND B.DateCreated > CONVERT(datetime,'20210201'+' 00:00:00') -- 임시임 
 	</select>
@@ -105,7 +106,7 @@
 			, NULL AS IfDate
 		  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 A.IfStat = 0
 		   AND B.StatusCd = '대기'
 		   AND B.DateCreated > CONVERT(datetime,'20210201'+' 00:00:00') -- 임시임 
 	</select>
@@ -172,8 +173,13 @@
 			, A.OrderDtlNo
 			, A.IfYn
 			, A.IfDate
+			, C.GiftYn
+			, C.ProductNo
+			, C.ProductCode 
+			, C.SKUCode
 		 FROM iSTYLE24_WmsIf.DBO.TB_IF_DeliveryExceptionItem A 
 		 JOIN iSTYLE24_WmsIf.DBO.TB_IF_DeliveryException B ON  A.DeliveryExceptionNo = B.DeliveryExceptionNo
+		 JOIN iSTYLE24_WmsIf.DBO.TB_IF_DeliveryOrderItem C ON  A.DeliveryOrderItemNo = C.DeliveryOrderItemNo
 		WHERE A.IfYn = 'N'
 	</select>	
 				
@@ -194,7 +200,7 @@
 			   IfYn = #{ifyn}
 			 , IfDate = GETDATE()
 		WHERE DeliveryExceptionItemNo = #{deliveryexceptionitemno}
-		  AND IfYn ='N'			
+		  AND IfYn ='N'
 	</update>	
 				
 	<!-- WMS_IF 출고결과 목록   -->	
@@ -206,12 +212,14 @@
 			  , B.Qty
 			  , B.DateSent
 			  , A.DeliveryOrderNo 
-	          , B.DeliveryOrderItemNo 
+			  , B.DeliveryOrderItemNo 
+			  , B.ProductNo
+			  , B.SKUCode
 		  FROM iSTYLE24_Wmsif.dbo.TB_IF_DeliveryOrder A 
 		  JOIN iSTYLE24_Wmsif.dbo.TB_IF_DeliveryOrderItem B ON A.DeliveryOrderNo = B.DeliveryOrderNo 
 		 WHERE B.IfYn     = 'N'
 		   AND B.StatusCd = '30'
-		   AND B.DateSent IS NOT NULL 
+		   AND B.GiftYn   = 'N'
 	</select>				
 				 
 	<!-- 출고결과수신완료    -->
@@ -232,7 +240,7 @@
 		, IfDate = GETDATE() 
 		WHERE DeliveryOrderItemNo = #{deliveryorderitemno}
 		  AND IfYn = 'N'
-	</update>					
+	</update>
 	
 	<!-- WMS_IF 회수결과 목록   -->	
 	<select id="getWmsIfRecallDeliveryList" resultType="Delivery">
@@ -312,6 +320,9 @@
 			, AddInvoiceYn
 			, DateFirstCreated
 			, DateLastModified
+			, ProductNo
+			, SKUCode
+			, CASE WHEN orderDtlNo IS NULL THEN 'N' ELSE 'Y' END AS ORD_DTL_NO_YN
 		  FROM istyle24_Wmsif.dbo.TB_IF_DELIVERYINVOICE
 		 WHERE IfYn = 'N'
 	</select>
@@ -454,6 +465,8 @@
 			, IfYn					-- I/F여부
 			, IfDate				-- I/F일자
 			, Cqty					-- 취소수량
+			, SetQty				-- 세트수량
+			, SetItemQty			-- 세트구성수량
 		)
 		VALUES 
 		(
@@ -479,6 +492,8 @@
 			, #{ifyn}					-- I/F여부
 			, #{ifdate}					-- I/F일자
 			, #{cqty}					-- 취소수량
+			, #{setqty}					-- 세트수량
+			, #{setitemqty}				-- 세트구성수량
 		)		
 	</insert>		
 	
@@ -592,6 +607,13 @@
 		WHERE RecallNo = (SELECT MAX(RecallNo) FROM istyle24_Wmsif.dbo.TB_IF_RECALLDELIVERY A WHERE A.OrderExceptionNo = #{ordChgSq} AND A.OrderNo = #{ordNo} )	
 	</update>
 		
-		
+	<!-- 사은품 취소    -->
+	<update id="updateWmsGiftCancel" parameterType="Delivery" >
+		/*TsbWmsDelivery.updateWmsGiftCancel*/
+		UPDATE iSTYLE24_Wmsif.dbo.TB_IF_DeliveryOrderItem SET
+		  IsCancel   = 1
+		WHERE DeliveryOrderItemNo = #{deliveryorderitemno}
+		  AND GiftYn              = 'Y' 
+	</update>
 	
 </mapper>

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

@@ -112,7 +112,7 @@ cron:
         tsbCjWithdrawInvoiceJob: 2 22 2 29 2 ?      # CJ 회수송장번호 수신
         tsbCjWithdrawInvoiceStatJob: 2 22 2 29 2 ?  # CJ 회수상태 수신
         tsbSweetTrackerJob: 2 22 2 29 2 ?           # 스윗트래커 송장상태조회
-
+        tsbSoldoutCancelJob: 2 22 2 29 2 ? # 품절취소
     #회원(고객)
     customer:
         dormant.schedule : 2 22 2 29 2 ?            # 휴면예정 고객 메일발송