ソースを参照

Merge branch 'develop' of http://112.172.147.34:4936/style24/STYLE24.git into develop

gagamel 5 年 前
コミット
e84797b584
35 ファイル変更3116 行追加158 行削除
  1. 9 0
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java
  2. 21 21
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java
  3. 46 0
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  4. 26 25
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java
  5. 19 4
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  6. 35 20
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  7. 3 0
      style24.admin/src/main/java/com/style24/persistence/domain/Goods.java
  8. 22 0
      style24.admin/src/main/java/com/style24/persistence/domain/GoodsSafeNo.java
  9. 14 1
      style24.admin/src/main/java/com/style24/persistence/domain/Order.java
  10. 32 1
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  11. 32 10
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml
  12. 36 2
      style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html
  13. 86 14
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  14. 3 3
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderListForm.html
  15. 21 4
      style24.admin/src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html
  16. 18 0
      style24.batch/src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java
  17. 52 0
      style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsInfantsSafeNoJob.java
  18. 0 5
      style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsTnmJob.java
  19. 39 0
      style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java
  20. 19 0
      style24.batch/src/main/java/com/style24/batch/biz/task/TsbGoodsTask.java
  21. 22 0
      style24.batch/src/main/java/com/style24/persistence/domain/GoodsSafeNo.java
  22. 48 0
      style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml
  23. 1 0
      style24.batch/src/main/resources/config/application-locd.yml
  24. 2 1
      style24.core/src/main/java/com/style24/core/biz/thirdparty/NaverLowestPriceApi.java
  25. 74 16
      style24.core/src/main/java/com/style24/core/biz/thirdparty/SafetyKoreaApi.java
  26. 37 0
      style24.core/src/main/java/com/style24/persistence/domain/KCResultData.java
  27. 2 29
      style24.core/src/main/java/com/style24/persistence/domain/KCertifyNo.java
  28. 21 0
      style24.core/src/main/java/com/style24/persistence/domain/KCertifyNoOnly.java
  29. 234 0
      style24.scm/src/main/java/com/style24/persistence/domain/Order.java
  30. 898 0
      style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssOrder.xml
  31. 218 1
      style24.scm/src/main/java/com/style24/scm/biz/dao/TssOrderDao.java
  32. 391 0
      style24.scm/src/main/java/com/style24/scm/biz/service/TssOrderService.java
  33. 197 1
      style24.scm/src/main/java/com/style24/scm/biz/web/TssOrderController.java
  34. 58 0
      style24.scm/src/main/java/com/style24/scm/support/util/TsitUtil.java
  35. 380 0
      style24.scm/src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html

+ 9 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -13,6 +13,7 @@ import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsPriceRes;
 import com.style24.persistence.domain.GoodsResSell;
+import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.GoodsTnmRes;
 import com.style24.persistence.domain.GoodsVideo;
@@ -281,6 +282,14 @@ public interface TsaGoodsDao {
 	 */
 	Collection<GoodsCompose> getGoodsDetailComposeList(Goods goods);
 
+	/**
+	 * 안전인증대상 상품 저장
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 07
+	 */
+	void saveGoodsSafeNo(GoodsSafeNo goodsSafeNo);
+
 	/**
 	 * 상품 기본 정보 이력 생성
 	 *

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

@@ -19,7 +19,7 @@ public interface TsaOrderDao {
 	
 	/**
 	 * 주문 목록
-	 * @param itemkind
+	 * @param Order
 	 * @return
 	 * @author jsh77b	
 	 * @since 2020. 11. 18
@@ -29,7 +29,7 @@ public interface TsaOrderDao {
 	/**
 	 * 주문리스트 합계
 	 *
-	 * @param order
+	 * @param Order
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -38,7 +38,7 @@ public interface TsaOrderDao {
 	/**
 	 * 주문 정보
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -48,7 +48,7 @@ public interface TsaOrderDao {
 	/**
 	 * 주문상세 목록
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -58,7 +58,7 @@ public interface TsaOrderDao {
 	/**
 	 * 주문상세 단품 목록
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -68,7 +68,7 @@ public interface TsaOrderDao {
 	/**
 	 * 배송정보
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -78,7 +78,7 @@ public interface TsaOrderDao {
 	/**
 	 * 결제내역 > 결제 기본정보
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -88,7 +88,7 @@ public interface TsaOrderDao {
 	/**
 	 * 배송비 정보
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -98,7 +98,7 @@ public interface TsaOrderDao {
 	/**
 	 * 반품/교환 > 반품/교환 정보
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -108,7 +108,7 @@ public interface TsaOrderDao {
 	/**
 	 * 환불정보
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -118,7 +118,7 @@ public interface TsaOrderDao {
 	/**
 	 * 상담내역
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -128,7 +128,7 @@ public interface TsaOrderDao {
 	/**
 	 * 변경내역 > 주문요청 관리자 메모
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -138,7 +138,7 @@ public interface TsaOrderDao {
 	/**
 	 * 입점업체미발주 주문목록
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 18
@@ -148,7 +148,7 @@ public interface TsaOrderDao {
 	/**
 	 * 입점업체 엑셀다운용 임시테이블 삭제
 	 *
-	 * @param
+	 * @param Order
 	 * @author jsh77b
 	 * @since 2020. 11. 30
 	 */
@@ -157,7 +157,7 @@ public interface TsaOrderDao {
 	/**
 	 * 주문상세상태 수정 - 입점
 	 *
-	 * @param order
+	 * @param Order
 	 * @author jsh77b
 	 * @since 2020. 11. 30
 	 */
@@ -166,7 +166,7 @@ public interface TsaOrderDao {
 	/**
 	 * 주문상세 이력 등록
 	 *
-	 * @param order
+	 * @param Order
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 30
@@ -176,7 +176,7 @@ public interface TsaOrderDao {
 	/**
 	 * 엑셀 다운로드용 임시테이블 데이타 체크
 	 *
-	 * @param order
+	 * @param Order
 	 * @author jsh77b
 	 * @since 2020. 11. 30
 	 */
@@ -185,7 +185,7 @@ public interface TsaOrderDao {
 	/**
 	 * 입점업체 엑셀다운용 임시테이블 생성
 	 *
-	 * @param
+	 * @param Order
 	 * @author jsh77b
 	 * @since 2020. 11. 30
 	 */
@@ -194,7 +194,7 @@ public interface TsaOrderDao {
 	/**
 	 * 입점업체미발주목록
 	 *
-	 * @param order - 주문 정보
+	 * @param Order - 주문 정보
 	 * @return
 	 * @author jsh77b
 	 * @since 2020. 11. 30
@@ -204,7 +204,7 @@ public interface TsaOrderDao {
 	/**
 	 * 주문 엑셀다운로드
 	 *
-	 * @param orderSearch
+	 * @param Order
 	 * @param handler - ResultHandler
 	 * @author jsh77b
 	 * @since 2020. 11. 30
@@ -224,7 +224,7 @@ public interface TsaOrderDao {
 	/**
 	 * 주문상세정보 변경 - 송장번호 적용(입점)
 	 *
-	 * @param order
+	 * @param Order
 	 * @author jsh77b
 	 * @since 2020. 11. 30
 	 */

+ 46 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -15,6 +15,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.style24.admin.biz.dao.TsaGoodsDao;
 import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.thirdparty.SafetyKoreaApi;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Brand;
 import com.style24.persistence.domain.Color;
@@ -27,6 +28,7 @@ import com.style24.persistence.domain.GoodsImg;
 import com.style24.persistence.domain.GoodsNotiInfo;
 import com.style24.persistence.domain.GoodsPriceRes;
 import com.style24.persistence.domain.GoodsResSell;
+import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSearch;
 import com.style24.persistence.domain.GoodsTnmRes;
 import com.style24.persistence.domain.GoodsVideo;
@@ -41,6 +43,8 @@ import com.style24.persistence.domain.WmsColorMapping;
 import com.style24.persistence.domain.WmsSeasonMapping;
 import com.style24.persistence.domain.WmsStyleYearMapping;
 
+import io.netty.util.internal.StringUtil;
+
 import lombok.extern.slf4j.Slf4j;
 
 import com.gagaframework.excel.GagaExcelUtil;
@@ -81,6 +85,9 @@ public class TsaGoodsService {
 	@Autowired
 	private TsaNoticeService noticeService;
 
+	@Autowired
+	private SafetyKoreaApi safetyKoreaApi;
+
 	@Autowired
 	private ObjectMapper mapper;
 
@@ -589,6 +596,45 @@ public class TsaGoodsService {
 		return goodsDao.getGoodsDetailComposeList(goods);
 	}
 
+	/**
+	 * 안전인증번호
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 12. 07
+	 */
+	public GagaMap getGoodsDetailCertNum(String goodsCd) {
+		GagaMap result = new GagaMap();
+		return result;
+	}
+
+	/**
+	 * 안전인증번호 저장
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 12. 07
+	 */
+	@Transactional("shopTxnManager")
+	public void saveGoodsDetailCertNum(Goods goods) {
+		try {
+			GagaMap result = safetyKoreaApi.getKoreaCertifyDetail(goods.getCertNum());
+			if (result != null || !StringUtil.isNullOrEmpty(result.get("certNum").toString())) {
+				GoodsSafeNo goodsSafeNo = new GoodsSafeNo();
+				goodsSafeNo.setGoodsCd(goods.getGoodsCd());
+				goodsSafeNo.setCertDt(result.get("certDt").toString());
+				goodsSafeNo.setCertNum(result.get("certNum").toString());
+				goodsSafeNo.setRegNo(TsaSession.getInfo().getUserNo());
+				goodsSafeNo.setUpdNo(TsaSession.getInfo().getUserNo());
+				goodsDao.saveGoodsSafeNo(goodsSafeNo);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 	/**
 	 * 상품 수정 항목 일괄변경
 	 *

+ 26 - 25
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java

@@ -56,7 +56,7 @@ public class TsaOrderService {
 	 * 주문리스트 합계
 	 *
 	 * @param order
-	 * @return TsaOrder - 합계정보
+	 * @return Order - 합계정보
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -68,7 +68,7 @@ public class TsaOrderService {
 			order.setConditions(searchCondition.split(","));
 		}
 
-		//// 외부몰권한일 때 외부몰벤더ID 설정
+		// 외부몰권한일 때 외부몰벤더ID 설정
 		//if (TsaSession.getInfo().getRoleCd().startsWith("C")) {
 			//order.setMallGb(TsaConstants.MallGb.EXTMALL.value());
 			//order.setVendorId(TsaSession.getInfo().getVendorId());
@@ -81,7 +81,7 @@ public class TsaOrderService {
 	 * 주문상세 정보
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -93,7 +93,7 @@ public class TsaOrderService {
 	 * 주문상세 목록
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -105,7 +105,7 @@ public class TsaOrderService {
 	 * 배송정보
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -117,7 +117,7 @@ public class TsaOrderService {
 	 * 주문상세 단품 목록
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -129,7 +129,7 @@ public class TsaOrderService {
 	 * 결제내역 > 결제 기본정보
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -141,7 +141,7 @@ public class TsaOrderService {
 	 * 배송비 정보
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -153,7 +153,7 @@ public class TsaOrderService {
 	 * 취소/반품/교환 요청 정보
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -165,7 +165,7 @@ public class TsaOrderService {
 	 * 환불정보
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -177,7 +177,7 @@ public class TsaOrderService {
 	 * 상담내역
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -189,7 +189,7 @@ public class TsaOrderService {
 	 * 변경내역 > 주문요청 관리자 메모
 	 *
 	 * @param order - 주문 정보
-	 * @return Collection<TsaOrder>
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 18
 	 */
@@ -201,7 +201,7 @@ public class TsaOrderService {
 	/**
 	 * 입점업체미발주 주문목록
 	 * @param Order
-	 * @return
+	 * @return Collection<Order>
 	 * @author jsh77b
 	 * @since 2020. 11. 30
 	 */
@@ -365,12 +365,14 @@ public class TsaOrderService {
 		int failedCount 		= 0;	// 몰 실패 카운트
 		int successCount 		= 0;	// 몰 성공 카운트
 		String failedGoodCdStr 	= "";	// 실패 상품 리스트
-
+		
+		// 1. 송장번호 등록 대상 목록 처리
 		for (Order oneData : orderList) {
+			// 2. 송장번호, 업체코드 체크 
 			if (!StringUtils.isEmpty(oneData.getInvoiceNo()) && !StringUtils.isEmpty(oneData.getShipCompCd())) {
 				totalCount++;
+				
 				Order updateData = new Order();
-
 				updateData.setOrdNo(oneData.getOrdNo());
 				updateData.setOrdDtlNo(oneData.getOrdDtlNo());
 				updateData.setBrandCd(oneData.getBrandCd());
@@ -383,31 +385,30 @@ public class TsaOrderService {
 				updateData.setShipCompCd(oneData.getShipCompCd());
 				updateData.setInvoiceNo(oneData.getInvoiceNo().replace("-", ""));
 
-				// 원주문 상세정보
+				// 3. 원주문 상세정보 조회
 				Order orgOrder = orderDao.getOrderDetailInfo(oneData.getOrdDtlNo());
 				if (orgOrder == null) {
-					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
+					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>"; // 상품정보 (상품명 + 칼라명) / 사이즈코드
 					failedCount++;
 					continue;
 				}
 
-				// 상품코드, 사이즈, 주문수량 같은지 확인
-				if (!orgOrder.getGoodsCd().equals(updateData.getGoodsCd()) ||
-					!orgOrder.getOptCd2().equals(updateData.getOptCd2()) ||
-					orgOrder.getOrdQty() != updateData.getOrdQty()) {
+				// 4. 상품코드, 사이즈, 주문수량 체크
+				if (!orgOrder.getGoodsCd().equals(updateData.getGoodsCd()) || !orgOrder.getOptCd2().equals(updateData.getOptCd2()) || orgOrder.getOrdQty() != updateData.getOrdQty()) {
 					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
 					failedCount++;
 					continue;
 				}
 				
-				// 업체코드등록
+				// 5. 업체코드설정
 				updateData.setSupplyCompCd(orgOrder.getSupplyCompCd());
-
+				
+				// 6. 송장번호등록
 				int result = orderDao.updateOrderDetailInvoice(updateData);
+				
+				// 7. 주문상세상태 변경 이력 등록
 				if (result > 0) {
 					successCount++;
-					// 주문상세상태 변경 이력생성
-					//updateData.setHstMemo("입점 업체 송장번호 입력");
 					orderDao.createOrderDetailHst(updateData);
 				} else {
 					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";

+ 19 - 4
style24.admin/src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -775,7 +775,7 @@ public class TsaGoodsController extends TsaBaseController {
 	 * @param goods
 	 * @return
 	 * @author eskim
-	 * @since 2019. 12. 11
+	 * @since 2020. 10. 23
 	 */
 	@PostMapping("/detail")
 	@ResponseBody
@@ -789,7 +789,7 @@ public class TsaGoodsController extends TsaBaseController {
 	 * @param goods
 	 * @return
 	 * @author eskim
-	 * @since 2019. 12. 12
+	 * @since 2020. 10. 23
 	 */
 	@GetMapping("/detail/hst/list")
 	@ResponseBody
@@ -826,7 +826,7 @@ public class TsaGoodsController extends TsaBaseController {
 	 * @param goods
 	 * @return
 	 * @author eskim
-	 * @since 2019. 12. 12
+	 * @since 2020. 10. 26
 	 */
 	@PostMapping("/detail/notiInfo/list")
 	@ResponseBody
@@ -846,7 +846,7 @@ public class TsaGoodsController extends TsaBaseController {
 	 * @param notiInfo
 	 * @return
 	 * @author eskim
-	 * @since 2010. 11. 18
+	 * @since 2020. 10. 26
 	 */
 	@PostMapping("/noti/goodsInfo/list")
 	@ResponseBody
@@ -869,6 +869,21 @@ public class TsaGoodsController extends TsaBaseController {
 		return goodsService.getGoodsDetailComposeList(goods);
 	}
 
+	/**
+	 * 상품 안전인증번호 저장
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2020. 12. 07
+	 */
+	@PostMapping("/detail/certNum/save")
+	@ResponseBody
+	public GagaResponse saveGoodsDetailCertNum(@RequestBody Goods goods) {
+		goodsService.saveGoodsDetailCertNum(goods);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 	/**
 	 * 상품 상세 저장
 	 *

+ 35 - 20
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -71,7 +71,6 @@ public class TsaOrderController extends TsaBaseController {
 		mav.addObject("siteCdList"		, rendererService.getAvailCommonCodeList("G012"));		// 사이트구분
 		mav.addObject("mallGbList"		, rendererService.getAvailCommonCodeList("G011"));		// 몰구분		
 		mav.addObject("supplyCompList"	, rendererService.getSupplyCompanyList());				// 공급업제목록
-		//mav.addObject("ordStatList"		, rendererService.getAvailCommonCodeList("G012"));		// 주문상태코드
 		mav.addObject("ordDtlStatList"	, rendererService.getAvailCommonCodeList("G013"));		// 주문상세상태코드
 		
 		mav.addObject("chgStatList"		, rendererService.getAvailCommonCodeList("G685"));		// 주문변경요청상태코드
@@ -101,7 +100,7 @@ public class TsaOrderController extends TsaBaseController {
 	}
 	
 	/**
-	 * 주문 목록
+	 * 주문 목록 엑셀 조회
 	 *
 	 * @param order - 주문정보
 	 * @return Collection<Order>
@@ -113,10 +112,11 @@ public class TsaOrderController extends TsaBaseController {
 	public Collection<Order> getOrderListSearchExcel(@RequestBody Order order) throws Exception {
 		ObjectMapper mapper = new ObjectMapper();
 		
+		// 1. 엑셀업로드경로설정
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "");
 		String[] cellName = new String[1];
 		
-		// DB 처리 시 사용되는 파라미터명(셀명) 설정
+		// 2. DB 처리 시 사용되는 파라미터명(셀명) 설정
 		cellName[0] = "ordNo";
 		Collection<GagaMap> dataList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()), 0, cellName);
 		
@@ -130,6 +130,7 @@ public class TsaOrderController extends TsaBaseController {
 			cnt++;
 		}
 		
+		// 3. 주문번호 배열에 담고 주문목록 조회
 		searchOrder.setOrdNoList(ordNoList);
 		Collection<Order> orderList = orderService.getOrderList(searchOrder);
 		
@@ -139,7 +140,7 @@ public class TsaOrderController extends TsaBaseController {
 	}
 	
 	/**
-	 * 주문 목록 합산
+	 * 주문 목록 데이타 합산
 	 *
 	 * @param order - 주문정보
 	 * @return Collection<Order>
@@ -170,8 +171,8 @@ public class TsaOrderController extends TsaBaseController {
 		
 		mav.addObject("ordNo"					, ordNo);												// 주문번호
 		mav.addObject("orderInfo"				, orderService.getOrderInfoList(order));				// 기본정보
-		mav.addObject("orderGoodsInfo"			, orderService.getOrderDetailList(order));				// 상품정보
-		mav.addObject("orderGoodsInfo"			, orderService.getOrderDetailItemList(order));			// 상품단품정보
+		mav.addObject("orderGoodsInfo"			, orderService.getOrderDetailList(order));				// 주문상품정보
+		//mav.addObject("orderGoodsItemInfo"		, orderService.getOrderDetailItemList(order));			// 주문상품단품정보
 		mav.addObject("orderDeliveryAddrInfo"	, orderService.getDeliveryAddrList(order));				// 배송정보
 		mav.addObject("orderPaymentInfo"		, orderService.getOrderPaymentBasicInfoList(order));	// 결제정보
 		mav.addObject("orderDeliveryFeeInfo"	, orderService.getDeliveryFeeList(order));				// 배송비정보
@@ -189,7 +190,7 @@ public class TsaOrderController extends TsaBaseController {
 	}
 	
 	/**
-	 * 입점업체미발주목록조회
+	 * 입점업체미발주목록화면
 	 *
 	 * @return ModelAndView
 	 * @author jsh77b
@@ -210,7 +211,7 @@ public class TsaOrderController extends TsaBaseController {
 	}
 	
 	/**
-	 * 입점업체미발주 주문목록
+	 * 입점업체미발주 주문목록 조회
 	 *
 	 * @param order - 주문정보
 	 * @return Collection<Order>
@@ -229,8 +230,8 @@ public class TsaOrderController extends TsaBaseController {
 	 *
 	 * @param orderList - 미발주목록
 	 * @return GagaResponse
-	 * @author Daehyoung
-	 * @since 2020. 02. 25
+	 * @author jsh77b
+	 * @since 2020. 12. 01
 	 */
 	@PostMapping("/seller/unorder/status/save")
 	@ResponseBody
@@ -246,7 +247,7 @@ public class TsaOrderController extends TsaBaseController {
 	 * @return ResponseEntity<InputStreamResource>
 	 * @throws Exception - exception
 	 * @author jsh77b
-	 * @since : 2020. 11. 16
+	 * @since 2020. 12. 01
 	 */
 	@GetMapping("/seller/unorder/excel/list")
 	public ResponseEntity<InputStreamResource> downloadPickingGoodsExcelList(HttpServletRequest request) throws Exception {
@@ -268,27 +269,39 @@ public class TsaOrderController extends TsaBaseController {
 	 * @param order - 주문정보
 	 * @return GagaMap
 	 * @throws Exception - exception
-	 * @author eskim
-	 * @since 2020. 09. 16
+	 * @author jsh77b
+	 * @since 2020. 12. 01
 	 */
 	@PostMapping("/seller/unorder/invoice/excelupload/save")
 	@ResponseBody
 	public GagaMap saveSellerUnorderInvoiceExcelupload(@RequestBody Order order) throws Exception {
 
 		ObjectMapper mapper = new ObjectMapper();
-
+		
+		// 1. UPLOAD 경로 조회
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
 		
-		// DB 처리 시 사용되는 파라미터명(셀명) 설정
-		String[] cellName = {"ordNo", "ordDtlNo", "goodsCd", "optCd2", "ordQty", "shipCompCd", "invoiceNo"};
+		// 2. DB 처리 시 사용되는 파라미터명(셀명) 설정
+		String[] cellName = {
+			"ordNo"
+			, "ordDtlNo"
+			, "goodsCd"
+			, "optCd2"
+			, "ordQty"
+			, "shipCompCd"
+			, "invoiceNo"
+		};
+		
 		Collection<GagaMap> ecxelList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()), 0, cellName, 0);
-
+		
+		// 3. 주문목록 매퍼 등록
 		Collection<Order> orderList = new ArrayList<>();
 		for (GagaMap map : ecxelList) {
 			Order tmpGoods = mapper.convertValue(map, Order.class);
 			orderList.add(tmpGoods);
 		}
-
+		
+		// 4. 업로드된 임시 엑셀파일 삭제
 		if (CollectionUtils.isEmpty(orderList)) {
 			try {
 				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()));
@@ -298,12 +311,13 @@ public class TsaOrderController extends TsaBaseController {
 			//throw new IllegalStateException(message.getMessage("FAIL_1001"));
 			throw new IllegalStateException("실패 했습니다.");
 		}
-
+		
+		// 4. 주문상세번호 기준으로 송장번호 등록
 		String result = orderService.saveUnorderInvoice(orderList);
 		GagaMap map = new GagaMap();
 		map.set("msg", result);
 
-		// 파일 삭제
+		// 5. 파일 삭제 (중복처리?)
 		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()));
 
 		return map;
@@ -320,6 +334,7 @@ public class TsaOrderController extends TsaBaseController {
 	@PostMapping(value = "/seller/unorder/invoice/save")
 	@ResponseBody
 	public GagaMap saveUnorderInvoice(@RequestBody Collection<Order> orderList) {
+		// 1. 송장번호 개별 등록
 		String result = orderService.saveUnorderInvoice(orderList);
 		GagaMap map = new GagaMap();
 		map.set("msg", result);

+ 3 - 0
style24.admin/src/main/java/com/style24/persistence/domain/Goods.java

@@ -100,6 +100,9 @@ public class Goods extends TscBaseDomain {
 	private String niClsfNm;
 	private String goodsTypeNm;
 	private String goodTnmInit;
+	private String certNum;
+	private String certDt;
+
 //
 //	private String goodsRegMsg;
 	private String procJob;

+ 22 - 0
style24.admin/src/main/java/com/style24/persistence/domain/GoodsSafeNo.java

@@ -0,0 +1,22 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품 안전인증 Domain
+ *
+ * @author eskim
+ * @since 2020. 12. 07
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsSafeNo extends TscBaseDomain {
+
+	private String goodsCd;
+	private String goodsNum;
+	private String certNum;
+	private String certDt;
+
+}

+ 14 - 1
style24.admin/src/main/java/com/style24/persistence/domain/Order.java

@@ -18,6 +18,7 @@ public class Order extends TscBaseDomain {
 	// 주문마스터
 	private int ordNo;
 	private String mallGb;
+	private String mallGbNm;
 	private String ordDt;
 	private String payDt;
 	private int custNo;
@@ -28,6 +29,7 @@ public class Order extends TscBaseDomain {
 	private String siteCd;
 	private int npayOrdNo;
 	private String frontGb;
+	private String frontGbNm;
 	
 	// 주문상세
 	private int ordDtlNo;
@@ -37,6 +39,7 @@ public class Order extends TscBaseDomain {
 	private String supplyCompCd;
 	private String goodsCd;
 	private String formalGb;
+	private String formalGbNm;
 	private String goodsType;
 	private int listPrice;
 	private int currPrice;
@@ -126,7 +129,6 @@ public class Order extends TscBaseDomain {
 	private String brandEnm;
 	private String itemCd;
 	private String goodsNum;
-	private String gormalGb;
 	private String supplyGoodsCd;
 	
 	private int totDcAmt;
@@ -205,6 +207,17 @@ public class Order extends TscBaseDomain {
 	private String brandKnm;
 	private String ordDtlStatNm;	
 	private String ordPhnno;
+	
+	private String custGrade;
+	private String custGradeNm;
+	private String custGb;
+	private String custGbNm;
+	private String managedRsn;
+	private String managedRsnNm;
+	
+	private int itemQty;
+	private int itemPrice;
+
 }
 
 

+ 32 - 1
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -910,13 +910,16 @@
 		       WHERE A.ITEMKIND_CD = G.ITEMKIND_CD 
 		       AND A.NI_CLSF_CD = B.CD 
 		       AND B.CD_GB = 'G004') AS  NI_CLSF_NM
-		     , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM  
+		     , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM
+		     , E.CERT_NUM
+		     , E.CERT_DT
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
 		                                AND G.MAIN_COLOR_CD = GI.COLOR_CD
 		LEFT OUTER JOIN TB_DELV_FEE_POLICY D ON G.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 		                                     AND G.DELV_FEE_CD =  D.DELV_FEE_CD
+		LEFT OUTER JOIN TB_GOODS_SAFE_NO E ON G.GOODS_CD = E.GOODS_CD
 		WHERE 1 = 1 
 		<choose>
 		<when test="goodsCd != null and goodsCd != ''">
@@ -3024,5 +3027,33 @@
 		AND GOODS_PRICE_RES_SQ = #{goodsPriceResSq}
 		AND CFRM_DT IS NULL
 	</update>
+	
+	<!--  상품 안전인증번호 저장 -->
+	<insert id="saveGoodsSafeNo"  parameterType="GoodsSafeNo">
+		/* TsbGoods.saveGoodsSafeNo */
+		INSERT INTO TB_GOODS_SAFE_NO (
+		    GOODS_CD
+		  , CERT_NUM
+		  , CERT_DT
+		  , REG_NO
+		  , REG_DT
+		  , UPD_NO
+		  , UPD_DT
+		)
+		VALUES (
+		    #{goodsCd}
+		  , #{certNum}
+		  , #{certDt}
+		  , #{regNo}
+		  , NOW()
+		  , #{updNo}
+		  , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       CERT_NUM = #{certNum}
+		     , CERT_DT = #{certDt}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
 	
 </mapper>

+ 32 - 10
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -142,6 +142,7 @@
         		#{item}
             </foreach>
         </if>
+        ORDER  BY O.REG_DT DESC
 	</select>
 	
 	<!-- 주문 목록 금액, 수량 정보-->
@@ -262,7 +263,12 @@
 		/* order.getOrderInfoList */
 		SELECT O.SITE_CD
 		     , O.MALL_GB
+		     , FN_GET_CODE_NM('G011', O.MALL_GB) AS MALL_GB_NM
 		     , O.FRONT_GB
+		     , CASE WHEN O.FRONT_GB = 'P'
+		            THEN 'PC'
+		            ELSE 'MOBILE'
+		             END FRONT_GB_NM
 		     , OD.EXTMALL_ID 
 		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
 		     , O.ORD_NM
@@ -271,7 +277,11 @@
 		     , O.ORD_EMAIL
 		     , O.ORD_PHNNO
 		     , C.CUST_GB 
+		     , FN_GET_CODE_NM('G100', C.CUST_GB) AS CUST_GB_NM
+		     , C.MANAGED_RSN
+		     , FN_GET_CODE_NM('G120', C.MANAGED_RSN) AS MANAGED_RSN_NM
 		     , C.CUST_GRADE
+		     , FN_GET_CODE_NM('G110', C.CUST_GRADE) AS CUST_GRADE_NM
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
@@ -284,7 +294,7 @@
 	<!-- 주문상세 목록 -->
 	<select id="getOrderDetailList" parameterType="Order" resultType="Order">
 		/* order.getOrderDetailList */
-		SELECT OD.GOODS_CD 
+		SELECT OD.GOODS_CD
 		     , G.GOODS_NM
 		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2
@@ -308,6 +318,10 @@
 		     , OD.DELV_LOC_CD
 		     , OD.DELV_ADDR_SQ 
 		     , OD.DSTRBT_NOTE
+		     , ODI.ITEM_CD 
+		     , ODI.ITEM_QTY
+		     , ODI.ITEM_PRICE
+		     , ODI.OPT_ADD_PRICE
 		FROM   TB_ORDER_DETAIL OD
 		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
 		ON     OD.ORD_NO = ODI.ORD_NO 
@@ -508,6 +522,7 @@
 		     , OD.CPN1_DC_AMT + TMTB1_DC_AMT + TMTB2_DC_AMT +  GOODS_CPN_DC_AMT + CART_CPN_DC_AMT + PNT_DC_AMT + PRE_PNT_DC_AMT AS TOT_DC_AMT
 		     , OD.REAL_ORD_AMT 
 		     , OD.INVOICE_NO 
+		     , OD.SHIP_COMP_CD
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
@@ -521,20 +536,22 @@
 		ON     OD.GOODS_CD = G.GOODS_CD
 		INNER  JOIN TB_DELIVERY_ADDR DA
 		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ 
-		INNER  JOIN TB_DELIVERY_FEE DF
+		INNER  JOIN TB_DELIVERY_FEE DF		
 		ON     DF.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD
-		WHERE  OD.SUPPLY_COMP_CD = 'S0003'
+		AND    DF.DELV_FEE_CD = OD.DELV_FEE_CD 
+		AND    DF.ORD_NO = OD.ORD_NO
+		WHERE  1=1
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
 		<if test="multiBrand != null and multiBrand != ''">
         AND    G.BRAND_CD IN
 			<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
         		#{item}
             </foreach>
         </if>
-        <if test="multiOrdDtlStat != null and multiOrdDtlStat != ''">
-        AND    OD.ORD_DTL_STAT IN
-			<foreach collection="multiOrdDtlStat" item="item" index="index"  open="(" close=")" separator=",">
-        		#{item}
-            </foreach>
+        <if test="ordDtlStat != null and ordDtlStat != ''">
+        AND    OD.ORD_DTL_STAT = #{ordDtlStat}
         </if>
         <if test="ordNo != null and ordNo != ''">
 		AND    O.ORD_NO = #{ordNo}
@@ -787,12 +804,17 @@
 		ON     OD.GOODS_CD = G.GOODS_CD
 		INNER  JOIN TB_DELIVERY_ADDR DA
 		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ 
-		INNER  JOIN TB_DELIVERY_FEE DF
+		INNER  JOIN TB_DELIVERY_ADDR DA		
 		ON     DF.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD
+		AND    DF.DELV_FEE_CD = OD.DELV_FEE_CD 
+		AND    DF.ORD_NO = OD.ORD_NO
 		INNER  JOIN TB_ENTRY_UPLOAD_EXCEL X
 		ON     OD.ORD_NO = X.ORD_NO
 		AND    OD.ORD_DTL_NO = X.ORD_DTL_NO
-		WHERE  OD.SUPPLY_COMP_CD = 'S0003'
+		WHERE  1=1
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
 	</select>
 	
 	<!-- 주문상세 목록 -->

+ 36 - 2
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -314,6 +314,16 @@
 											<input type="hidden" id="dayMaxOrdQtyOrg" name="dayMaxOrdQtyOrg"/>
 										</td>
 									</tr>
+									<tr>
+										<td></td>
+										<th>안전인증번호</th>
+										<td colspan="5">
+											<input type="text" class="w150" id="certNum" name="certNum"  maxlength="20"/>
+											<input type="hidden" id="certNumOrg" name="certNumOrg"/>
+											<button type="button" class="btn btn-success btn-lg" id="btnGoodsSafetyCertNum">안전인증</button>
+										</td>
+										
+									</tr>
 									</tbody>
 								</table>
 							</div>
@@ -798,6 +808,9 @@
 			cfnCreateCombo('/renderer/delvFee/list/' + result.supplyCompCd, $('#goodsDetailForm select[name=delvFeeCd]'), "[선택]", result.delvFeeCd);
 			$('#goodsDetailForm input[name=delvFeeCdOrg]').val(result.delvFeeCd);
 			
+			$('#goodsDetailForm input[name=certNum]').val(result.certNum);
+			$('#goodsDetailForm input[name=certNumOrg]').val(result.certNum);
+			
 			//상품상세
 			// 공지내용. Summernote에 값 세팅
 			gagaSn.setContents('#goodsPcTopDesc', result.goodsPcTopDesc);
@@ -881,7 +894,7 @@
 			params.niClsfCd = result.niClsfCd;
 			params.goodsType = result.goodsType;
 			params.erpPriceLinkYn = result.erpPriceLinkYn;
-
+			
 			//옵셥 재고(ajax html)
 			fnGoodsDetailSizeStockSearch(params);
 			//정보고시
@@ -901,7 +914,7 @@
 			$('#goodsDetailForm').find('.tabs .tabsNav li:eq(0) a').attr("style", "color:red;");
 		});
 	}
-
+	
 	//옵셥 재고
 	var fnGoodsDetailSizeStockSearch = function(params) {
 		cfnAjaxSubmit("/goods/detail/sizeStock/form", "html", "sizeStockArea", params);
@@ -1893,6 +1906,27 @@
 		});
 	});
 	
+	// 안전인증
+	$("#btnGoodsSafetyCertNum").on("click", function(){
+/*
+		if($("#goodsDetailForm  input[name=certNum]").val() == $("#goodsDetailForm  input[name=certNumOrg]").val()){
+			mcxDialog.alert("안전인증번호가 변경되지 않았습니다.");
+			return false;
+		}
+*/
+		mcxDialog.confirm('안전인증번호를 변경 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = {  goodsCd : $('#goodsDetailForm input[name=goodsCd]').val()
+							, certNum : $("#goodsDetailForm input[name=certNum]").val()
+							};
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/goods/detail/certNum/save', jsonData );  //, fnGoodsDeailSearch
+			}
+		});
+	});
+	
 	// 구성상품 조회 팝업
 	var fnOpenGoodsDetailPopup = function() {
 		cfnOpenGoodsPopup('fnGoodsDetailGoodsDeal');

+ 86 - 14
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -27,7 +27,7 @@
 					<input type="hidden" name="orderEmail"/>
 					
 					<h4>기본정보</h4>
-					<div id="gridOrderInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+					<div id="gridOrderInfo" style="width:100%; height:140px;" class="ag-theme-balham"></div>
 					
 					<h4>주문상품정보</h4>
 					<div id="gridOrderGoodsInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
@@ -42,6 +42,8 @@
 var ordNo 					= [[${ordNo}]];						// 주문번호
 var orderInfo 				= [[${orderInfo}]];					// 기본정보
 var orderGoodsInfo 			= [[${orderGoodsInfo}]];			// 주문상세정보
+var orderGoodsItemInfo 		= [[${orderGoodsItemInfo}]];		// 주문상세단품정보
+
 //var orderPaymentInfo 		= [[${orderPaymentInfo}]];			// 결제정보
 //var orderDeliveryFeeInfo = [[${orderDeliveryFeeInfo}]];		// 배송비정보
 //var orderChangeInfo = [[${orderChangeInfo}]];				// 취소/반품/교환요청 정보
@@ -80,9 +82,16 @@ var columnDefsOrderInfo = [
 	{headerName: "몰구분"		, field: "mallGbNm"		, width: 80		, cellClass: 'text-center'},
 	{headerName: "웹구분"		, field: "frontGbNm"	, width: 80		, cellClass: 'text-center'},
 	{headerName: "외부몰"		, field: "extmallNm"	, width: 80		, cellClass: 'text-center'},
-	{headerName: "주문일시"	, field: "ordDt"		, width: 140	, cellClass: 'text-center'},
-	{headerName: "주문상태"	, field: "ordStatNm"	, width: 110	, cellClass: 'text-center'},
-	{headerName: "주문자"		, field: "orderNm"		, width: 80		, cellClass: 'text-center'},
+	{
+		headerName			: "주문일시"	
+		, field				: "ordDt"
+		, width				: 130
+		, cellClass			: 'text-center' 
+		, cellRenderer: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "주문자"		, field: "ordNm"		, width: 80		, cellClass: 'text-center'},
 	{
 		headerName			: "고객번호"
 		, field				: "custNo"
@@ -95,7 +104,7 @@ var columnDefsOrderInfo = [
 	{headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center'},
 	{
 		headerName			: "이메일"
-		, field				: "orderEmail"
+		, field				: "ordEmail"
 		, width				: 240
 		, cellClass			: 'text-center'
 		, cellRenderer		: function (params) {
@@ -104,7 +113,7 @@ var columnDefsOrderInfo = [
 	},
 	{
 		headerName			: "핸드폰번호"
-		, field				: "orderPhnno"
+		, field				: "ordPhnno"
 		, width				: 220
 		, cellClass			: 'text-center'
 		, cellRenderer		: function (params) {
@@ -112,7 +121,7 @@ var columnDefsOrderInfo = [
 		}
 	},
 	{headerName: "회원구분"	, field: "custGbNm"		, width: 80		, cellClass: 'text-center'},
-	{headerName: "관리대상"	, field: "managedRsn"	, width: 80		, cellClass: 'text-center'},
+	{headerName: "관리대상"	, field: "managedRsnNm"	, width: 80		, cellClass: 'text-center'},
 	{headerName: "등급"		, field: "custGradeNm"	, width: 80		, cellClass: 'text-center'}
 ];
 var gridOptionsOrderInfo = gagaAgGrid.getGridOptions(columnDefsOrderInfo);
@@ -132,15 +141,72 @@ var columnDefsGoodsInfo = [
 					return '<a href="javascript:void(0);" onclick="cfnOpenFrontGoodsPopup(\'' + params.data.goodsCd + '\',\'' + params.data.siteCd + '\');">' + params.value + '</a>';
 				}
 			},
-			{headerName: "사이즈"		, field: "sizeCd"		, width: 60, cellClass: 'text-center'},
-			{headerName: "칼라"		, field: "goodsColorNm"	, width: 90, cellClass: 'text-center'}
+			{headerName: "사이즈"		, field: "optCd2"		, width: 60, cellClass: 'text-center'},
+			{headerName: "칼라"		, field: "optCd1"		, width: 90, cellClass: 'text-center'},
+			{headerName: "단품코드"	, field: "itemCd"		, width: 90, cellClass: 'text-center'},
+			{headerName: "단품수량"	, field: "itemQty"		, width: 90, cellClass: 'text-center'},
+			{
+				headerName		: "단품금액"
+				, field			: "itemPrice"
+				, width			: 60
+				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "옵션추가금액"
+				, field			: "optAddPrice"
+				, width			: 100
+				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+		]
+	},
+	{
+		headerName	: "단품정보",
+		children	: [
+			{headerName: "상품코드"	, field: "itemCd"		, width: 130, cellClass: 'text-center'},
+			{
+				headerName		: "상품명"
+				, field			: "goodsNm"
+				, width			: 180
+				, cellClass		: 'text-left'
+				, cellRenderer: function (params) {
+					return '<a href="javascript:void(0);" onclick="cfnOpenFrontGoodsPopup(\'' + params.data.goodsCd + '\',\'' + params.data.siteCd + '\');">' + params.value + '</a>';
+				}
+			},
+			{headerName: "사이즈"		, field: "optCd2"		, width: 60, cellClass: 'text-center'},
+			{headerName: "칼라"		, field: "optCd1"		, width: 90, cellClass: 'text-center'},
+			{headerName: "단품코드"	, field: "itemCd"		, width: 90, cellClass: 'text-center'},
+			{headerName: "단품수량"	, field: "itemQty"		, width: 90, cellClass: 'text-center'},
+			{
+				headerName		: "단품금액"
+				, field			: "itemPrice"
+				, width			: 60
+				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "옵션추가금액"
+				, field			: "optAddPrice"
+				, width			: 100
+				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
 		]
 	},
 	{
 		headerName	: "수량",
 		children	: [
-			{headerName: "주문"		, field: "ordQty"		, width: 40, cellClass: 'text-center'},
-			{headerName: "취소"		, field: "cnclRtnQty"	, width: 40, cellClass: 'text-center'}
+			{headerName: "주문"		, field: "ordQty"		, width: 60, cellClass: 'text-center'},
+			{headerName: "취소"		, field: "cnclRtnQty"	, width: 60, cellClass: 'text-center'}
 		]
 	},
 	{
@@ -181,7 +247,7 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "즉시사용"
 				, field			: "prePntDcAmt"
-				, width			: 60
+				, width			: 80
 				, cellClass		: 'text-right' //prePntDcAmtClass
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
@@ -289,6 +355,7 @@ var columnDefsGoodsInfo = [
 	}
 ];
 var gridOptionsGoodsInfo = gagaAgGrid.getGridOptions(columnDefsGoodsInfo);
+
 </script>
 
 <script>
@@ -301,8 +368,8 @@ var fnSetGridHeightInit = function () {
 		_girdRowH2 = 80;
 	}
 	
-	$('#gridOrderInfo').css('height', _girdRowH1 + _girdRowH);					//기본정보
-	//$('#gridDeliveryInfo').css('height', _girdRowH1 + _girdRowH);				//배송정보
+	//$('#gridOrderInfo').css('height', _girdRowH1 + _girdRowH);					//기본정보
+	//$('#gridDeliveryInfo').css('height', _girdRowH1 + _girdRowH);					//배송정보
 	
 	//if (orderGoodsInfo != null && orderGoodsInfo.length > 0) $('#gridOrderGoodsInfo').css('height', _girdRowH2 + _girdRowH * orderGoodsInfo.length);
 	//if (orderPaymentInfo != null && orderPaymentInfo.length > 0) $('#gridPaymentInfo').css('height', _girdRowH1 + _girdRowH * orderPaymentInfo.length);
@@ -331,6 +398,11 @@ $(window).resize(function () {
 </script>
 <!-- AgGrid 생성 -->
 <script>
+// 창종료
+var fnOrderDetailClose = function(){
+	uifnPopupClose('popupOrderDetail');
+}
+
 $(document).ready(function () {
 	gagaAgGrid.createGrid('gridOrderInfo'			, gridOptionsOrderInfo);
 	gagaAgGrid.createGrid('gridOrderGoodsInfo'		, gridOptionsGoodsInfo);

+ 3 - 3
style24.admin/src/main/webapp/WEB-INF/views/order/OrderListForm.html

@@ -659,9 +659,9 @@ $('#btnOrderSearch').on('click', function () {
 });
 
 var fnSearchList = function () {
-	var ordNo = $('#searchForm input[name=ordNo]').val();
-	var stDate = $('#stDate').val();
-	var edDate = $('#edDate').val();
+	var ordNo 	= $('#searchForm input[name=ordNo]').val();
+	var stDate 	= $('#stDate').val();
+	var edDate 	= $('#edDate').val();
 
 	if (gagajf.isNull(ordNo)) {
 		if (gagajf.isNull(stDate)) {

+ 21 - 4
style24.admin/src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html

@@ -81,10 +81,11 @@
 						<th>주문상세상태</th>
 						<td>
 							<select name="ordDtlStat" id="ordDtlStat">
-								<option value="20" selected>결제완료</option>
-								<option value="26">교환출고처지정</option>
-								<option value="35">입고확정</option>
-								<option value="55">출고완료</option>
+								<option value="G013_20" selected>결제완료</option>
+								<option value="G013_30">상품준비중</option>
+								<!-- <option value="G013_26">교환출고처지정</option>
+								<option value="G013_35">입고확정</option> -->
+								<option value="G013_55">출고완료</option>
 							</select>
 						</td>
 					</tr>
@@ -204,6 +205,22 @@ $('#btnOrderSearch').on('click', function() {
 // 검색
 var fnSearch = function() {
 	var formId = '#searchForm';
+	var ordNo = $('#searchForm input[name=ordNo]').val();
+	var stDate = $('#stDate').val();
+	var edDate = $('#edDate').val();
+	
+	if (gagajf.isNull(ordNo)) {
+		if (gagajf.isNull(stDate)) {
+			mcxDialog.alert('시작 기간을 입력하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(edDate)) {
+			mcxDialog.alert('종료 기간을 입력하세요.');
+			return;
+		}
+	}
+	
 	gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
 }
 

+ 18 - 0
style24.batch/src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -5,6 +5,7 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSummary;
 
 /**
@@ -222,4 +223,21 @@ public interface TsbGoodsDao {
 	 */
 	void saveGoodsSummary();
 
+	/**
+	 * 안전인증대상 상품 조회
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	Collection<GoodsSafeNo> getGoodsSafeNoList();
+
+	/**
+	 * 안전인증대상 상품 저장
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void saveGoodsSafeNo(GoodsSafeNo goodsSafeNo);
+
+
 }

+ 52 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsInfantsSafeNoJob.java

@@ -0,0 +1,52 @@
+package com.style24.batch.biz.job.goods;
+
+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.TsbGoodsService;
+import com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 영유아상품 인증번호 수신
+ *
+ * @author eskim
+ * @since 2020. 12. 04
+ */
+@Component
+@Slf4j
+public class TsbGoodsInfantsSafeNoJob extends TsbAbstractJob<Goods, Goods, Goods> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Goods read() throws Exception {
+
+		Goods goods = new Goods();
+		return goods;
+	}
+
+	@Override
+	public Goods process(Goods goods) throws Exception {
+		return goods;
+	}
+
+	@Override
+	public Goods write(Goods goods) throws Exception {
+
+		goodsService.saveGoodsSafeNo();
+		return goods;
+	}
+
+	@Override
+	public void notify(Goods goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 0 - 5
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsTnmJob.java

@@ -5,7 +5,6 @@ import org.springframework.stereotype.Component;
 
 import com.style24.batch.biz.job.TsbAbstractJob;
 import com.style24.batch.biz.service.TsbGoodsService;
-import com.style24.core.biz.thirdparty.SafetyKoreaApi;
 import com.style24.persistence.domain.Goods;
 
 import lombok.extern.slf4j.Slf4j;
@@ -23,10 +22,6 @@ public class TsbGoodsTnmJob extends TsbAbstractJob<Goods, Goods, Goods> {
 	@Autowired
 	private TsbGoodsService goodsService;
 
-	@Autowired
-	private SafetyKoreaApi safetyKoreaApi;
-
-
 	private int succCnt = 0;
 	private int failCnt = 0;
 

+ 39 - 0
style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -10,12 +10,18 @@ import org.springframework.transaction.annotation.Transactional;
 import com.style24.batch.biz.dao.TsbGoodsDao;
 import com.style24.batch.support.env.TsbConstants;
 import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.biz.thirdparty.SafetyKoreaApi;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSummary;
 
+import io.netty.util.internal.StringUtil;
+
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * 상품 Service
  *
@@ -32,6 +38,10 @@ public class TsbGoodsService {
 	@Autowired
 	private TscEnvsetService envsetService;
 
+	@Autowired
+	private SafetyKoreaApi safetyKoreaApi;
+
+
 	/**
 	 * 상품 타이틀예약 작업
 	 *
@@ -272,4 +282,33 @@ public class TsbGoodsService {
 
 	}
 
+	/**
+	 * 영유아상품 인증번호 수신
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	@Transactional("shopTxnManager")
+	public void saveGoodsSafeNo() {
+
+		// 1. 대상 상품 조회
+		Collection<GoodsSafeNo> goodsSafeNoList = goodsDao.getGoodsSafeNoList();
+		// 2. 인증테이블 적용
+		for(GoodsSafeNo goodsSafeNo: goodsSafeNoList) {
+			try {
+				GagaMap result = safetyKoreaApi.getKoreaCertifyNo(goodsSafeNo.getGoodsNum()); // 품번으로 처리
+				if (result != null || !StringUtil.isNullOrEmpty(result.get("certNum").toString())) {
+					goodsSafeNo.setCertDt(result.get("certDt").toString());
+					goodsSafeNo.setCertNum(result.get("certNum").toString());
+					goodsSafeNo.setRegNo(TsbConstants.REG_NO);
+					goodsSafeNo.setUpdNo(TsbConstants.REG_NO);
+					goodsDao.saveGoodsSafeNo(goodsSafeNo);
+				}
+			} catch (Exception e) {
+				// do nothing
+			}
+		}
+	}
+
 }

+ 19 - 0
style24.batch/src/main/java/com/style24/batch/biz/task/TsbGoodsTask.java

@@ -6,6 +6,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import com.style24.batch.biz.job.goods.TsbGoodsBenefitPriceJob;
+import com.style24.batch.biz.job.goods.TsbGoodsInfantsSafeNoJob;
 import com.style24.batch.biz.job.goods.TsbGoodsPriceJob;
 import com.style24.batch.biz.job.goods.TsbGoodsRelateScoreJob;
 import com.style24.batch.biz.job.goods.TsbGoodsSnmJob;
@@ -41,6 +42,10 @@ public class TsbGoodsTask {
 	@Autowired
 	private TsbGoodsSummaryJob goodsSummaryJob;
 
+	@Autowired
+	private TsbGoodsInfantsSafeNoJob goodsInfantsSafeNoJob;
+
+
 	/**
 	 * 초 분 시 일 월 주(년)
 	 * 0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
@@ -136,4 +141,18 @@ public class TsbGoodsTask {
 	public void tsbGoodsSummaryJob() throws Exception {
 		goodsSummaryJob.run("cron.goods.summary");
 	}
+
+	/**
+	 * 영유아상품 인증번호 수신 : 일배치 - 매일 3시 5분
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.infants.safe}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsInfantsSafeNoJob() throws Exception {
+		goodsInfantsSafeNoJob.run("cron.goods.infants.safe");
+	}
+
+
 }

+ 22 - 0
style24.batch/src/main/java/com/style24/persistence/domain/GoodsSafeNo.java

@@ -0,0 +1,22 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품 안전인증 Domain
+ *
+ * @author eskim
+ * @since 2020. 11. 04
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsSafeNo extends TscBaseDomain {
+
+	private String goodsCd;
+	private String goodsNum;
+	private String certNum;
+	private String certDt;
+
+}

+ 48 - 0
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -1001,4 +1001,52 @@
 		WHERE A.GOODS_CD = GS.GOODS_CD
 	</insert>
 	
+	<!--  안전인증대상 상품 조회 -->
+	<select id="getGoodsSafeNoList"   resultType="GoodsSafeNo">
+		/* TsbGoods.getGoodsSafeNoList */
+		SELECT B.GOODS_CD
+		     , B.GOODS_NUM
+		     , A.ITEMKIND_CD 
+		     , C.CERT_NUM 
+		     , C.CERT_DT 
+		FROM TB_ITEMKIND A
+		INNER JOIN TB_GOODS B ON A.ITEMKIND_CD = B.ITEMKIND_CD AND B.SELF_GOODS_YN = 'Y'  /* 자사상품 */
+		INNER JOIN TB_BRAND D ON B.BRAND_CD = D.BRAND_CD AND D.USE_YN = 'Y'
+		LEFT OUTER JOIN TB_GOODS_SAFE_NO C ON B.GOODS_CD = C.GOODS_CD
+		                                   AND (CERT_NUM IS NULL
+		                                        <![CDATA[
+		                                        OR CERT_DT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -5 YEAR), '%Y%m%d')  /*인증유효 5년 경과*/
+		                                        ]]>
+		                                       )
+		WHERE A.NI_CLSF_CD = 'G004_23'  /*고시 유아용품*/
+	</select>
+	
+	<!--  상품 안전인증번호 저장 -->
+	<insert id="saveGoodsSafeNo"  parameterType="GoodsSafeNo">
+		/* TsbGoods.saveGoodsSafeNo */
+		INSERT INTO TB_GOODS_SAFE_NO (
+		    GOODS_CD
+		  , CERT_NUM
+		  , CERT_DT
+		  , REG_NO
+		  , REG_DT
+		  , UPD_NO
+		  , UPD_DT
+		)
+		VALUES (
+		    #{goodsCd}
+		  , #{certNum}
+		  , #{certDt}
+		  , #{regNo}
+		  , NOW()
+		  , #{updNo}
+		  , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       CERT_NUM = #{certNum}
+		     , CERT_DT = #{certDt}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
+	
 </mapper>

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

@@ -48,6 +48,7 @@ cron:
         benefit.price: 2 22 2 29 2 ?
         relate.score: 2 22 2 29 2 ?
         summary: 2 22 2 29 2 ?
+        infants.safe: 2 22 2 29 2 ?
     
     #통계
     statistics:

+ 2 - 1
style24.core/src/main/java/com/style24/core/biz/thirdparty/NaverLowestPriceApi.java

@@ -68,7 +68,7 @@ public class NaverLowestPriceApi {
 		headers.add("X-Naver-Client-Id", clientId);
 		headers.add("X-Naver-Client-Secret", clientSecret);
 
-		String requestUrl = apiUrl + "?query=text=" + URLEncoder.encode(goodsCd, "UTF-8") + "&display=1&sort=asc";
+		String requestUrl = apiUrl + "?query=" + URLEncoder.encode(goodsCd, "UTF-8") + "&display=1&sort=asc";
 		log.info("requestUrl: {}", requestUrl);
 		URI url = URI.create(requestUrl);
 
@@ -104,6 +104,7 @@ public class NaverLowestPriceApi {
 		Collection<NaverLowestPrice> lpriceList = new ArrayList<>();
 
 		for (String goodsCd : goodsCdList) {
+			log.info("[getLowestPriceList] goodsCd = {}", goodsCd);
 			NaverLowestPrice lprice = this.getLowestPrice(goodsCd);
 			if (lprice != null) {
 				lpriceList.add(lprice);

+ 74 - 16
style24.core/src/main/java/com/style24/core/biz/thirdparty/SafetyKoreaApi.java

@@ -15,12 +15,15 @@ import org.springframework.web.client.RestTemplate;
 
 import com.google.gson.Gson;
 import com.style24.persistence.domain.KCertifyNo;
+import com.style24.persistence.domain.KCertifyNoOnly;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * KC인증번호 조회 (www.safetykorea.kr open API)
- * 
+ *
  * @author gagamel
  * @since 2020. 12. 1
  */
@@ -31,6 +34,8 @@ public class SafetyKoreaApi {
 	// URL
 	private String apiUrl = "http://www.safetykorea.kr/openapi/api/cert/certificationList.json";
 
+	private String apiDetailUrl = "http://www.safetykorea.kr/openapi/api/cert/certificationDetail.json";
+
 	// 인증키
 	private String authKey = "34fa9888-a2fb-4c02-adf4-18f018bb936d";
 
@@ -41,34 +46,94 @@ public class SafetyKoreaApi {
 	public void init() {
 		log.debug("\n\n---- SafetyKoreaApi initialization started ----");
 		log.debug("apiUrl: [{}]", apiUrl);
+		log.debug("apiDetailUrl: [{}]", apiDetailUrl);
 		log.debug("authKey: [{}]", authKey);
 		log.debug("\n--- SafetyKoreaApi initialization completed ----\n");
 	}
 
 	/**
-	 * KC인증번호 조회
+	 * KC인증번호 정보 조회
 	 * @param goodsCd - 상품코드
 	 * @return 인증번호
 	 * @throws Exception
 	 * @author gagamel
 	 * @since 2020. 12. 1
 	 */
-	public String getKoreaCertifyNo(String goodsCd) throws Exception {
-		// Header
-		HttpHeaders headers = new HttpHeaders();
-		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-		headers.add("AuthKey", authKey);
+	public GagaMap getKoreaCertifyNo(String goodsCd) throws Exception {
+
+		GagaMap result = new GagaMap();
 
 		String requestUrl = apiUrl + "?conditionKey=all&conditionValue=" + goodsCd;
 		log.info("requestUrl: {}", requestUrl);
 		URI url = URI.create(requestUrl);
 
+		String responseJson = getExtracted( url);
+
+		Gson gson = new Gson();
+		KCertifyNo kcNo = gson.fromJson(responseJson, KCertifyNo.class);
+
+		if (kcNo.getResultCode() != null && "2000".equals(kcNo.getResultCode())) { // 성공
+			result.set("certNum", kcNo.getResultData().iterator().next().getCertNum());
+			result.set("certDt", kcNo.getResultData().iterator().next().getCertDate() );
+			return result;
+		}
+
+		return result;
+	}
+
+
+	/**
+	 * KC인증번호로 조회
+	 * @param certNum - 인증번호
+	 * @return
+	 * @throws Exception
+	 * @author eskim
+	 * @since 2020. 12. 07
+	 */
+	public GagaMap getKoreaCertifyDetail(String certNum) throws Exception {
+
+		GagaMap result = new GagaMap();
+
+		String requestUrl = apiDetailUrl + "?certNum=" + certNum;
+		URI url = URI.create(requestUrl);
+
+		String responseJson = getExtracted( url);
+
+		Gson gson = new Gson();
+		KCertifyNoOnly kcNo = gson.fromJson(responseJson, KCertifyNoOnly.class);
+
+		if (kcNo.getResultCode() != null && "2000".equals(kcNo.getResultCode())) { // 성공
+			result.set("certNum", kcNo.getResultData().getCertNum());
+			result.set("certDt", kcNo.getResultData().getCertDate() );
+			return result;
+		}
+
+		return result;
+
+	}
+
+	/**
+	 * KC인증정보 조회
+	 * @param url - KC인증 URL
+	 * @return
+	 * @throws Exception
+	 * @author eskim
+	 * @since 2020. 12. 07
+	 */
+	private String getExtracted( URI url) {
+
+		String responseJson = "";
+		// Header
+		HttpHeaders headers = new HttpHeaders();
+		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+		headers.add("AuthKey", authKey);
+
 		// GET방식으로 호출
 		HttpEntity<String> request = new HttpEntity<String>(headers);
 		ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
 		log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
 
-		String responseJson = responseEntity.getBody();
+		responseJson = responseEntity.getBody();
 		log.info("responseEntity.getBody(): {}", responseJson);
 
 //		{
@@ -103,14 +168,7 @@ public class SafetyKoreaApi {
 //		    ]
 //		}
 
-		Gson gson = new Gson();
-		KCertifyNo kcNo = gson.fromJson(responseJson, KCertifyNo.class);
-
-		if (kcNo.getResultCode() != null && kcNo.getResultCode().equals("2000")) { // 성공
-			return kcNo.getResultData().iterator().next().getCertNum();
-		}
-
-		return "";
+		return responseJson;
 	}
 
 }

+ 37 - 0
style24.core/src/main/java/com/style24/persistence/domain/KCResultData.java

@@ -0,0 +1,37 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * KC인증번호
+ *
+ * @author gagamel
+ * @since 2020. 12. 2
+ */
+@SuppressWarnings("serial")
+@Data
+public class KCResultData extends TscBaseDomain {
+
+		private String certUid;
+		private String certOrganName;
+		private String certNum;
+		private String certState;
+		private String certDiv;
+		private String certDate;
+		private String certChgDate;
+		private String certChgReason;
+		private String firstCertNum;
+		private String productName;
+		private String brandName;
+		private String modelName;
+		private String categoryName;
+		private String importDiv;
+		private String makerName;
+		private String makerCntryName;
+		private String importerName;
+		private String remark;
+		private String signDate;
+
+}

+ 2 - 29
style24.core/src/main/java/com/style24/persistence/domain/KCertifyNo.java

@@ -8,7 +8,7 @@ import lombok.Data;
 
 /**
  * KC인증번호
- * 
+ *
  * @author gagamel
  * @since 2020. 12. 2
  */
@@ -18,33 +18,6 @@ public class KCertifyNo extends TscBaseDomain {
 
 	private String resultCode;
 	private String resultMsg;
-	private Collection<ResultData> resultData;
-
-	@Data
-	public class ResultData {
-		private String certUid;
-		private String certOrganName;
-		private String certNum;
-		private String certState;
-		private String certDiv;
-		private String certDate;
-		private String certChgDate;
-		private String certChgReason;
-		private String firstCertNum;
-		private String productName;
-		private String brandName;
-		private String modelName;
-		private String categoryName;
-		private String importDiv;
-		private String makerName;
-		private String makerCntryName;
-		private String importerName;
-		private String remark;
-		private String signDate;
-		private String derivationModels;
-		private String certificationImageUrls;
-		private String factories;
-		private String similarCertifications;
-	}
+	private Collection<KCResultData> resultData;
 
 }

+ 21 - 0
style24.core/src/main/java/com/style24/persistence/domain/KCertifyNoOnly.java

@@ -0,0 +1,21 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * KC인증번호
+ *
+ * @author gagamel
+ * @since 2020. 12. 2
+ */
+@SuppressWarnings("serial")
+@Data
+public class KCertifyNoOnly extends TscBaseDomain {
+
+	private String resultCode;
+	private String resultMsg;
+	private KCResultData resultData;
+
+}

+ 234 - 0
style24.scm/src/main/java/com/style24/persistence/domain/Order.java

@@ -0,0 +1,234 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 주문 Domain
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@SuppressWarnings("serial")
+@Data
+public class Order extends TscBaseDomain {
+	
+	// 주문마스터
+	private int ordNo;
+	private String mallGb;
+	private String ordDt;
+	private String payDt;
+	private int custNo;
+	private String ordNm;
+	private String ord_phnno;
+	private String ord_telno;
+	private String ord_email;
+	private String siteCd;
+	private int npayOrdNo;
+	private String frontGb;
+	
+	// 주문상세
+	private int ordDtlNo;
+	private String ordExchGb;
+	private String ordDtlStat;
+	private int orgOrdDtlNo;
+	private String supplyCompCd;
+	private String goodsCd;
+	private String formalGb;
+	private String goodsType;
+	private int listPrice;
+	private int currPrice;
+	private double dcRate;
+	private int optAddPrice;
+	private int ordQty;
+	private int ordAmt;
+	private int cnclRtnQty;
+	private int cnclRtnAmt;
+	private int cpn1CpnSq;
+	private int cpn1DcAmt;
+	private int tmtb1Sq;
+	private int tmtb1DcAmt;
+	private int tmtb2Sq;
+	private int tmtb2DcAmt;
+	private int goodsCpnSq;
+	private int goodsCpnDcAmt;
+	private int cartCpnSq;
+	private int cartCpnDcAmt;
+	
+	private int pntDcAmt;
+	private int prePntDcAmt;
+	private int savePntAmt;
+	
+	private int realOrdAmt;
+	private String venderId;
+	private String extmallId;
+	private String agentOrderId;
+	private String extmallOrderId;
+	private String changeableYn;
+	private String changeFeeFreeYn;
+	private String returnableYn;
+	private String returnFeeFreeYn;
+	
+	private String soldoutYn;
+	private String soldoutMemo;
+	private String soldoutRegNo;
+	private String soldoutRegDt;
+	private int delvAddrSq;
+	private String shotDelvYn;
+	private String giftPackYn;
+	
+	private String delvLocCd;
+	private String delvAssigngDt;
+	private String delvAddignStat;
+	private String dstrbtMemo;
+	private String delvStdt;
+	private String delvEddt;
+	
+	private String shipCompCd;
+	private String invoiceNo;
+	private String invoiceSendYn;
+	private String sellStoreCd;
+	private double sellFeeRate;
+	
+	private String afLinkCd;
+	private String ithrCd;
+	private String contentsLoc;
+	
+	private int planDtlsq;
+	private int socialSq;
+	
+	private String condition;
+	private String[] conditions = null;
+	
+	private String stDate;
+	private String edDate;
+	private String searchDateGb;
+	private String orderNm;
+	private int custId;
+	private String orderPhnno;
+	private String vendorId;
+	private String sizeCd;
+	private String goodsNm;
+	private String payMeans;
+	private String chgStat;
+	private String recipNm;
+	private String chgGb;
+	private String wdInvoiceSendYn;
+	
+	// 상품정보
+	private String imgPath1;
+	private String brandCd;
+	private String optCd1;
+	private String optCd2;
+	private String goodsTypeNm;
+	private String brandEnm;
+	private String itemCd;
+	private String goodsNum;
+	private String gormalGb;
+	private String supplyGoodsCd;
+	
+	private int totDcAmt;
+	private String dateGbn;
+	private String mallCd;
+	private String search;
+	
+	/* Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiOrdStat;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiOrdDtlStat;
+	
+	private int sumOrdAmt;
+	private int sumOrdCnclAmt;
+	private int sumRealPayAmt;
+	private int ordNoCnt;
+	private int sumOrdQty;
+	private int sumOrdCnclQty;
+	
+	private String excelFileNm;
+	
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private int[] ordNoList;
+	
+	private String delYn;
+	private String recipPhnno;
+	private String recipTelno;
+	private String recipZipNo;
+	private String recipBaseAddr;
+	private String recipDtlAddr;
+	private String ordEmail;
+	private String delvMemo;
+	
+	private String escrowYn;
+	private String payMeansNm;
+	private String cardNm;
+	private String vaBank;
+	private String pgTradeNo;
+	private String payStat;
+	private String payStatNm;
+	private int payAmt;
+	private String vaDeadLine;
+	
+	private String delvFeeGb;
+	private String delvFeeGbNm;
+	private String delvUsacYn;
+	private String delvUsacDt;
+	private int delvFeeSq;
+	
+	private String coundelClsf;
+	private String relGoodsCd;
+	private String questTitle;
+	private String questDt;
+	private String ansDt;
+	private int andNo;
+	
+	private int ordChgSq;
+	private String chgGbNm;
+	private String chgStatNm;
+	private String chgReason;
+	private String chgReasonNm;
+	private String chgMemo;
+	private String chgerNm;
+	private String chgerPhnno;
+	private String chgerZipNo;
+	private String chgerBaseAddr;
+	private String chgerDtlAddr;
+	private String wdInvoiceNo;
+	
+	private String supplyCompNm;
+	private String brandKnm;
+	private String ordDtlStatNm;	
+	private String ordPhnno;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 898 - 0
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssOrder.xml

@@ -0,0 +1,898 @@
+<?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.scm.biz.dao.TssOrderDao">
+
+	<!-- 주문목록 -->
+	<select id="getOrderList" parameterType="Order" resultType="Order">
+		/* order.getOrderList */
+		SELECT O.ORD_NO
+		     , O.ORD_NM
+		     , O.CUST_NO
+		     , OD.VENDOR_ID
+		     , O.FRONT_GB
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , OD.ORD_EXCH_GB
+		     , OD.ORD_DTL_STAT
+		     , OD.DELV_LOC_CD
+		     , GI.IMG_PATH1
+		     , G.BRAND_CD
+		     , (SELECT Z.BRAND_ENM
+                FROM   TB_BRAND Z
+                WHERE  Z.BRAND_CD = G.BRAND_CD) AS BRAND_ENM
+		     , G.GOODS_CD
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , G.GOODS_NM
+		     , G.GOODS_TYPE
+		     , FN_GET_CODE_NM('G056', G.GOODS_TYPE) AS GOODS_TYPE_NM
+		     , OD.EXTMALL_ORDER_ID
+		     , OD.AGENT_ORDER_ID 
+		     , OD.ORD_QTY
+		     , OD.CNCL_RTN_QTY
+		     , OD.ORD_AMT
+		     , OD.CNCL_RTN_AMT
+		     , OD.CPN1_DC_AMT + TMTB1_DC_AMT + TMTB2_DC_AMT +  GOODS_CPN_DC_AMT + CART_CPN_DC_AMT + PNT_DC_AMT + PRE_PNT_DC_AMT AS TOT_DC_AMT
+		     , OD.REAL_ORD_AMT
+		     , ODI.ITEM_CD
+		     , G.SUPPLY_GOODS_CD
+		     , OD.FORMAL_GB
+		     , DATE_FORMAT(OD.DELV_ASSIGN_DT,'%Y%m%d%H%i%S') AS DELV_ASSIGN_DT 
+		     , OD.INVOICE_NO
+		     , OD.DELV_STDT
+		     , OD.SOLDOUT_YN
+		     , OD.SOLDOUT_MEMO
+		     , DATE_FORMAT(OD.SOLDOUT_REG_DT,'%Y%m%d%H%i%S') AS SOLDOUT_REG_DT 
+		     , OD.SOLDOUT_REG_NO     
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		INNER  JOIN TB_GOODS G
+		ON     OD.GOODS_CD = G.GOODS_CD
+		INNER  JOIN TB_GOODS_IMG GI
+		ON     OD.GOODS_CD = GI.GOODS_CD
+		AND    ODI.OPT_CD1 = GI.COLOR_CD
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO
+		AND    P.PAY_GB = 'O'
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		WHERE  1=1
+		<if test='siteCd != null and siteCd != ""'>
+		AND    O.SITE_CD = #{siteCd}
+		</if>
+		<if test='mallCd != null and mallCd != ""'>
+		AND    O.MALL_GB = #{mallCd}
+		</if>
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
+		<if test="multiBrand != null and multiBrand != ''">
+        AND    G.BRAND_CD IN
+			<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if>
+        <if test="multiOrdDtlStat != null and multiOrdDtlStat != ''">
+        AND    OD.ORD_DTL_STAT IN
+			<foreach collection="multiOrdDtlStat" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if>
+        <if test='search != null and search == "searchOrdNo"'>
+        	<if test="condition != null and condition != ''">
+		AND    O.ORD_NO = #{condition}
+			</if>
+		</if>
+		<if test='search != null and search == "searchExtmallOrderId"'>
+        	<if test="condition != null and condition != ''">
+		AND    O.ORD_NO = #{condition}
+			</if>
+		</if>
+		<if test='payMeans != null and payMeans != ""'>
+		AND    P.PAY_MEANS = #{payMeans}
+		</if>
+		<if test='orderNm != null and orderNm != ""'>
+		AND    O.ORD_NM = #{orderNm}
+		</if>
+		<if test='custId != null and custId != ""'>
+		AND    O.CUST_NO = #{custId}
+		</if>
+		<if test='orderPhnno != null and orderPhnno != ""'>
+		AND    O.ORD_PHNNO = #{orderPhnno}
+		</if>
+		<if test='goodsCd != null and goodsCd != ""'>
+		AND    G.GOODS_CD = #{goodsCd}
+		</if>
+		<if test='sizeCd != null and sizeCd != ""'>
+		AND    ODI.OPT_CD2 = #{sizeCd}
+		</if>
+		<if test='goodsNm != null and goodsNm != ""'>
+		AND    G.GOODS_NM = #{goodsNm}
+		</if>
+		<if test='recipNm != null and recipNm != ""'>
+		AND    DA.RECIP_NM = #{recipNm}
+		</if>
+		<if test='invoiceNo != null and invoiceNo != ""'>
+		AND    OD.INVOICE_NO = #{invoiceNo}
+		</if>
+		<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "Y"'>
+		AND    OD.INVOICE_SEND_YN = 'Y'
+		</if>
+		<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "N"'>
+		AND    OD.INVOICE_SEND_YN = 'N'
+		</if>
+		<if test='searchDateGb != null and searchDateGb == "ordDt"'>
+		AND    O.ORD_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    O.ORD_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+		<if test='searchDateGb != null and searchDateGb == "delvStdt"'>
+		AND    OD.DELV_STDT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    OD.DELV_STDT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+		<if test='searchDateGb != null and searchDateGb == "soldoutDt"'>
+		AND    OD.SOLDOUT_REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    OD.SOLDOUT_REG_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+		<if test="ordNoList != null and ordNoList != ''">
+        AND    OD.ORD_NO IN
+			<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if>
+	</select>
+	
+	<!-- 주문 목록 금액, 수량 정보-->
+	<select id="getOrderListSumInfo" parameterType="Order" resultType="Order">
+		/* order.getOrderListSumInfo */
+		SELECT SUM(ORD_AMT)                   AS SUM_ORD_AMT
+		     , SUM(ORD_AMT - CNCL_RTN_AMT)    AS SUM_ORD_CNCL_AMT
+		     , SUM(REAL_ORD_AMT)              AS SUM_REAL_PAY_AMT
+		     , COUNT(DISTINCT ORD_NO)         AS ORD_NO_CNT
+		     , SUM(ORD_QTY)                   AS SUM_ORD_QTY
+		     , SUM(ORD_QTY - CNCL_RTN_QTY)    AS SUM_ORD_CNCL_QTY
+		FROM   (
+			SELECT O.ORD_NO
+			     , OD.GOODS_CD
+			     , OD.ORD_AMT
+			     , OD.CNCL_RTN_AMT
+			     , OD.CNCL_RTN_QTY
+			     , OD.ORD_QTY
+			     , OD.REAL_ORD_AMT
+			FROM   TB_ORDER O
+			INNER  JOIN TB_ORDER_DETAIL OD
+			ON     O.ORD_NO = OD.ORD_NO
+			INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+			ON     OD.ORD_NO = ODI.ORD_NO
+			AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+			INNER  JOIN TB_GOODS G
+			ON     OD.GOODS_CD = G.GOODS_CD
+			INNER  JOIN TB_GOODS_IMG GI
+			ON     OD.GOODS_CD = GI.GOODS_CD
+			AND    ODI.OPT_CD1 = GI.COLOR_CD
+			INNER  JOIN TB_PAYMENT P
+			ON     O.ORD_NO = P.ORD_NO
+			AND    P.PAY_GB = 'O'
+			INNER  JOIN TB_DELIVERY_ADDR DA
+			ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+			WHERE  1=1
+			<if test='siteCd != null and siteCd != ""'>
+			AND    O.SITE_CD = #{siteCd}
+			</if>
+			<if test='mallCd != null and mallCd != ""'>
+			AND    O.MALL_GB = #{mallCd}
+			</if>
+			<if test='supplyCompCd != null and supplyCompCd != ""'>
+			AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+			</if>
+			<if test="multiBrand != null and multiBrand != ''">
+	        AND    G.BRAND_CD IN
+				<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+	        		#{item}
+	            </foreach>
+	        </if>
+	        <if test="multiOrdDtlStat != null and multiOrdDtlStat != ''">
+	        AND    OD.ORD_DTL_STAT IN
+				<foreach collection="multiOrdDtlStat" item="item" index="index"  open="(" close=")" separator=",">
+	        		#{item}
+	            </foreach>
+	        </if>
+	        <if test='search != null and search == "searchOrdNo"'>
+	        	<if test="condition != null and condition != ''">
+			AND    O.ORD_NO = #{condition}
+				</if>
+			</if>
+			<if test='search != null and search == "searchExtmallOrderId"'>
+	        	<if test="condition != null and condition != ''">
+			AND    O.ORD_NO = #{condition}
+				</if>
+			</if>
+			<if test='payMeans != null and payMeans != ""'>
+			AND    P.PAY_MEANS = #{payMeans}
+			</if>
+			<if test='orderNm != null and orderNm != ""'>
+			AND    O.ORD_NM = #{orderNm}
+			</if>
+			<if test='custId != null and custId != ""'>
+			AND    O.CUST_NO = #{custId}
+			</if>
+			<if test='orderPhnno != null and orderPhnno != ""'>
+			AND    O.ORD_PHNNO = #{orderPhnno}
+			</if>
+			<if test='goodsCd != null and goodsCd != ""'>
+			AND    G.GOODS_CD = #{goodsCd}
+			</if>
+			<if test='sizeCd != null and sizeCd != ""'>
+			AND    ODI.OPT_CD2 = #{sizeCd}
+			</if>
+			<if test='goodsNm != null and goodsNm != ""'>
+			AND    G.GOODS_NM = #{goodsNm}
+			</if>
+			<if test='recipNm != null and recipNm != ""'>
+			AND    DA.RECIP_NM = #{recipNm}
+			</if>
+			<if test='invoiceNo != null and invoiceNo != ""'>
+			AND    OD.INVOICE_NO = #{invoiceNo}
+			</if>
+			<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "Y"'>
+			AND    OD.INVOICE_SEND_YN = 'Y'
+			</if>
+			<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "N"'>
+			AND    OD.INVOICE_SEND_YN = 'N'
+			</if>
+			<if test='searchDateGb != null and searchDateGb == "ordDt"'>
+			AND    O.ORD_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+			AND    O.ORD_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+			</if>
+			<if test='searchDateGb != null and searchDateGb == "delvStdt"'>
+			AND    OD.DELV_STDT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+			AND    OD.DELV_STDT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+			</if>
+			<if test='searchDateGb != null and searchDateGb == "soldoutDt"'>
+			AND    OD.SOLDOUT_REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+			AND    OD.SOLDOUT_REG_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+			</if>
+		) X
+	</select>
+	
+	<!-- 주문 정보 -->
+	<select id="getOrderInfoList" parameterType="Order" resultType="Order">
+		/* order.getOrderInfoList */
+		SELECT O.SITE_CD
+		     , O.MALL_GB
+		     , O.FRONT_GB
+		     , OD.EXTMALL_ID 
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , O.ORD_NM
+		     , O.CUST_NO
+		     , O.ORD_NO
+		     , O.ORD_EMAIL
+		     , O.ORD_PHNNO
+		     , C.CUST_GB 
+		     , C.CUST_GRADE
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_CUSTOMER C
+		ON     O.CUST_NO = C.CUST_NO
+		WHERE  1=1
+		AND    O.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 주문상세 목록 -->
+	<select id="getOrderDetailList" parameterType="Order" resultType="Order">
+		/* order.getOrderDetailList */
+		SELECT OD.GOODS_CD 
+		     , G.GOODS_NM
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , OD.ORD_QTY
+		     , OD.CNCL_RTN_QTY
+		     , OD.CPN1_DC_AMT
+		     , OD.GOODS_CPN_DC_AMT
+		     , OD.CART_CPN_DC_AMT
+		     , OD.TMTB1_DC_AMT
+		     , OD.TMTB2_DC_AMT
+			 , OD.PNT_DC_AMT
+		     , OD.PRE_PNT_DC_AMT
+		     , OD.SAVE_PNT_AMT
+		     , OD.ORD_AMT
+		     , OD.REAL_ORD_AMT
+		     , OD.CNCL_RTN_AMT
+		     , OD.ORD_DTL_STAT
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+		     , OD.SOLDOUT_YN
+		     , OD.INVOICE_NO
+		     , OD.DELV_LOC_CD
+		     , OD.DELV_ADDR_SQ 
+		     , OD.DSTRBT_NOTE
+		FROM   TB_ORDER_DETAIL OD
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO 
+		AND    OD.ORD_DTL_NO = OD.ORD_DTL_NO
+		INNER  JOIN TB_GOODS G
+		ON     OD.GOODS_CD = G.GOODS_CD
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 주문상세 단품 목록 -->
+	<select id="getOrderDetailItemList" parameterType="Order" resultType="Order">
+		/* order.getOrderDetailItemList */
+		SELECT OD.ORD_NO
+		     , OD.GOODS_CD
+		     , G.GOODS_NM
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , ODI.ITEM_QTY
+		     , ODI.ITEM_PRICE
+		     , ODI.OPT_ADD_PRICE
+		FROM   TB_ORDER_DETAIL_ITEM ODI
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     ODI.ORD_NO = OD.ORD_NO
+		AND    ODI.ORD_DTL_NO  = OD.ORD_DTL_NO
+		INNER  JOIN TB_GOODS G
+		ON     ODI.ITEM_CD = G.GOODS_CD
+		WHERE  1=1
+		AND    ODI.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 배송정보 -->
+	<select id="getDeliveryAddrList" parameterType="Order" resultType="Order">
+		/* order.getDeliveryAddrList */
+		SELECT OD.DELV_ADDR_SQ 
+		     , DA.RECIP_NM 
+		     , DA.RECIP_PHNNO 
+		     , DA.RECIP_TELNO 
+		     , DA.RECIP_ZIP_NO 
+		     , DA.RECIP_BASE_ADDR
+		     , DA.RECIP_DTL_ADDR
+		     , O.ORD_EMAIL
+		     , DA.DELV_MEMO
+		FROM   TB_ORDER_DETAIL OD
+		INNER  JOIN TB_ORDER O
+		ON     OD.ORD_NO = O.ORD_NO
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ  = DA.DELV_ADDR_SQ
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 결제정보 -->
+	<select id="getOrderPaymentBasicInfoList" parameterType="Order" resultType="Order">
+		/* order.getOrderPaymentBasicInfoList */
+		SELECT P.ESCROW_YN
+		     , P.PAY_MEANS
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
+		     , P.CARD_NM 
+		     , P.VA_BANK
+		     , P.PG_TRADE_NO
+		     , DATE_FORMAT(P.PAY_DT,'%Y%m%d%H%i%S') AS PAY_DT  
+		     , P.PAY_STAT 
+		     , FN_GET_CODE_NM('G016', P.PAY_STAT) AS PAY_STAT_NM
+		     , P.PAY_AMT 
+		     , DATE_FORMAT(P.VA_DEADLINE,'%Y%m%d%H%i%S') AS VA_DEADLINE 
+		FROM   TB_PAYMENT P
+		WHERE  1=1
+		AND    P.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 배송비정보 -->
+	<select id="getDeliveryFeeList" parameterType="Order" resultType="Order">
+		/* order.getDeliveryFeeList */
+		SELECT DF.DELV_FEE_GB 
+		     , FN_GET_CODE_NM('G018', DF.DELV_FEE_GB) AS DELV_FEE_GB_NM
+		     , DF.DELV_USAC_YN 
+		     , DATE_FORMAT(DF.DELV_USAC_DT,'%Y%m%d%H%i%S') AS DELV_USAC_DT 
+		     , DF.SUPPLY_COMP_CD 
+		     , DF.DELV_FEE_SQ 
+		FROM   TB_DELIVERY_FEE DF
+		WHERE  1=1
+		AND    DF.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 취소/반품/교환요청 정보 -->
+	<select id="getOrderChangeList" parameterType="Order" resultType="Order">
+		/* order.getOrderChangeList */
+		SELECT OCD.ORD_CHG_SQ
+		     , OC.CHG_GB
+		     , FN_GET_CODE_NM('G680', OC.CHG_GB) AS CHG_NM
+		     , OD.GOODS_CD
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , OCD.CHG_STAT 
+		     , FN_GET_CODE_NM('G685', OCD.CHG_STAT) AS CHG_STAT_NM
+		     , DATE_FORMAT(OCD.REG_DT,'%Y%m%d%H%i%S') AS REG_DT 
+		     , OC.CHG_REASON 
+		     , CASE WHEN OC.CHG_GB = 'G680_20' THEN FN_GET_CODE_NM('G686', OC.CHG_REASON)
+		            WHEN OC.CHG_GB = 'G680_30' THEN FN_GET_CODE_NM('G688', OC.CHG_REASON)
+		            WHEN OC.CHG_GB = 'G680_40' THEN FN_GET_CODE_NM('G689', OC.CHG_REASON)
+		            ELSE '결저전취소'
+		            END  CHG_REASON_NM
+		     , OC.CHG_MEMO
+		     , OC.CHGER_NM
+		     , OC.CHGER_PHNNO 
+		     , OC.CHGER_ZIP_NO
+		     , OC.CHGER_BASE_ADDR
+		     , OC.CHGER_DTL_ADDR
+		     , OC.WD_INVOICE_SEND_YN
+		     , OC.WD_INVOICE_NO
+		FROM   TB_ORDER_CHANGE_DETAIL OCD
+		INNER  JOIN TB_ORDER_CHANGE OC
+		ON     OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ 
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     OCD.ORD_DTL_NO = OD.ORD_DTL_NO 
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 환불정보 -->
+	<select id="orderRefundInfo" parameterType="Order" resultType="Order">
+		/* order.orderRefundInfo */
+		SELECT P.PAY_MEANS
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
+		     , P.CARD_NM
+		     , R.RA_BANK 
+		     , R.RA_NO
+		     , R.RA_NM 
+		     , R.REFUND_AMT 
+		     , P.UPD_DT
+		     , P.UPD_NO
+		FROM   TB_REFUND R
+		INNER  JOIN TB_PAYMENT P
+		ON     R.ORD_CHG_SQ = P.ORD_CHG_SQ 
+		WHERE  1=1
+		AND    R.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 상담내역 -->
+	<select id="orderCounselInfo" parameterType="Order" resultType="Order">
+		/* order.orderCounselInfo */
+		SELECT CS.COUNSEL_CLSF
+		     , CS.REL_GOODS_CD
+		     , CS.QUEST_TITLE
+		     , DATE_FORMAT(CS.QUEST_DT,'%Y%m%d%H%i%S') AS QUEST_DT
+		     , DATE_FORMAT(CS.ANS_DT,'%Y%m%d%H%i%S') AS ANS_DT
+		     , CS.ANS_NO
+		     , CS.DEL_YN
+		FROM   TB_COUNSEL CS
+		WHERE  1=1
+		AND    CS.REL_ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 관리자메모 -->
+	<select id="getOrderTsainMemoList" parameterType="Order" resultType="Order">
+		/* order.getOrderTsainMemoList */
+		SELECT *
+		FROM   TB_DELIVERY_FEE DF
+		WHERE  1=1
+		AND    DF.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 입점업체미발주 주문목록 -->
+	<select id="getOrderSellerUnorderList" parameterType="Order" resultType="Order">
+		/* order.getOrderSellerUnorderList */
+		SELECT OD.SUPPLY_COMP_CD
+		     , (SELECT SC.SUPPLY_COMP_NM
+		        FROM   TB_SUPPLY_COMPANY SC
+		        WHERE  SC.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
+		     , G.BRAND_CD 
+		     , (SELECT B.BRAND_KNM 
+		        FROM   TB_BRAND B
+		        WHERE  B.BRAND_CD = G.BRAND_CD) AS BRAND_KNM 
+		     , OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , OD.ORD_DTL_STAT 
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT ) AS ORD_DTL_STAT_NM
+		     , O.ORD_NM 
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , P.PAY_MEANS 
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS  ) AS PAY_MEANS_NM
+		     , O.ORD_PHNNO 
+		     , DA.RECIP_NM 
+		     , DA.RECIP_PHNNO 
+		     , DA.RECIP_ZIP_NO 
+		     , DA.RECIP_BASE_ADDR 
+		     , DA.RECIP_DTL_ADDR 
+		     , G.SUPPLY_GOODS_CD
+		     , G.GOODS_CD
+		     , G.GOODS_NM 
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , OD.ORD_QTY 
+		     , OD.ORD_AMT
+		     , OD.CPN1_DC_AMT + TMTB1_DC_AMT + TMTB2_DC_AMT +  GOODS_CPN_DC_AMT + CART_CPN_DC_AMT + PNT_DC_AMT + PRE_PNT_DC_AMT AS TOT_DC_AMT
+		     , OD.REAL_ORD_AMT 
+		     , OD.INVOICE_NO 
+		     , OD.SHIP_COMP_CD
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO 
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO 
+		AND    P.PAY_GB = 'O'
+		INNER  JOIN TB_GOODS G
+		ON     OD.GOODS_CD = G.GOODS_CD
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ 		
+		INNER  JOIN TB_DELIVERY_FEE DF	
+		ON     DF.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD
+		AND    DF.DELV_FEE_CD = OD.DELV_FEE_CD 
+		AND    DF.ORD_NO = OD.ORD_NO
+		WHERE  1=1
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
+		<if test="multiBrand != null and multiBrand != ''">
+        AND    G.BRAND_CD IN
+			<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if>
+        <if test="ordDtlStat != null and ordDtlStat != ''">
+        AND    OD.ORD_DTL_STAT = #{ordDtlStat}
+        </if>
+        <if test="ordNo != null and ordNo != ''">
+		AND    O.ORD_NO = #{ordNo}
+		</if>
+		<if test="ordNm != null and ordNm != ''">
+		AND    O.ORD_NM = #{ordNm}
+		</if>
+		<if test='goodsCd != null and goodsCd != ""'>
+		AND    G.GOODS_CD = #{goodsCd}
+		</if>
+		<if test='searchDateGb != null and searchDateGb == "ordDt"'>
+		AND    O.ORD_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    O.ORD_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+	</select>
+	
+	<!-- 입점업체 엑셀다운용 임시테이블 삭제-->
+	<delete id="deleteEntryExcelDownTmp" parameterType="Order">
+		/* TsbOrder.deleteEntryExcelDownTmp */
+		DELETE FROM TB_ENTRY_UPLOAD_EXCEL
+	</delete>
+	
+	<!-- 주문상세정보 변경 (입점) -->
+	<update id="updateOrderDetailStat" parameterType="Order">
+		/* Order.updateOrderDetailStat */
+		UPDATE TB_ORDER_DETAIL
+		SET    ORD_DTL_STAT = 'G013_30'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP()
+		WHERE  ORD_DTL_NO = #{ordDtlNo}
+		AND    ORD_DTL_STAT in ('G013_20')
+		AND    SUPPLY_COMP_CD = #{supplyCompCd}
+	</update>
+	
+	<!-- 주문상세이력 생성-->
+	<insert id="createOrderDetailHst" parameterType="Order">
+		/* Order.createOrderDetailHst */
+		INSERT INTO TB_ORDER_DETAIL_HST (
+				ORD_DTL_NO
+				, ORD_NO
+				, ORD_EXCH_GB
+				, ORD_DTL_STAT
+				, ORG_ORD_DTL_NO
+				, SUPPLY_COMP_CD
+				, GOODS_CD
+				, FORMAL_GB
+				, GOODS_TYPE
+				, LIST_PRICE
+				, CURR_PRICE
+				, DC_RATE
+				, OPT_ADD_PRICE
+				, ORD_QTY
+				, ORD_AMT
+				, CNCL_RTN_QTY
+				, CNCL_RTN_AMT
+				, CPN1_CPN_SQ
+				, CPN1_DC_AMT
+				, TMTB1_SQ
+				, TMTB1_DC_AMT
+				, TMTB2_SQ
+				, TMTB2_DC_AMT
+				, GOODS_CPN_SQ
+				, GOODS_CPN_DC_AMT
+				, CART_CPN_SQ
+				, CART_CPN_DC_AMT
+				, BURDEN_RATE
+				, PNT_DC_AMT
+				, PRE_PNT_DC_AMT
+				, SAVE_PNT_AMT
+				, REAL_ORD_AMT
+				, GFCD_USE_AMT
+				, VENDOR_ID
+				, EXTMALL_ID
+				, AGENT_ORDER_ID
+				, EXTMALL_ORDER_ID
+				, CHANGABLE_YN
+				, CHANGE_FEE_FREE_YN
+				, RETURNABLE_YN
+				, RETURN_FEE_FREE_YN
+				, SOLDOUT_YN
+				, SOLDOUT_MEMO
+				, SOLDOUT_REG_NO
+				, SOLDOUT_REG_DT
+				, DELV_ADDR_SQ
+				, DELV_FEE_CD
+				, SHOT_DELV_YN
+				, GIFT_PACK_YN
+				, MAKE_GOODS_YN
+				, ENTRY_NO
+				, DELV_LOC_CD
+				, DELV_ASSIGN_DT
+				, DELV_ASSIGN_STAT
+				, DSTRBT_NOTE
+				, DELV_STDT
+				, DELV_EDDT
+				, SHIP_COMP_CD
+				, INVOICE_NO
+				, INVOICE_SEND_YN
+				, SELL_STORE_CD
+				, SELL_FEE_RATE
+				, AF_LINK_CD
+				, ITHR_CD
+				, CONTENTS_LOC
+				, PLAN_DTL_SQ
+				, SOCIAL_SQ
+				, REG_NO
+				, REG_DT
+				, UPD_NO
+				, UPD_DT
+		)
+		SELECT ORD_DTL_NO
+				, ORD_NO
+				, ORD_EXCH_GB
+				, ORD_DTL_STAT
+				, ORG_ORD_DTL_NO
+				, SUPPLY_COMP_CD
+				, GOODS_CD
+				, FORMAL_GB
+				, GOODS_TYPE
+				, LIST_PRICE
+				, CURR_PRICE
+				, DC_RATE
+				, OPT_ADD_PRICE
+				, ORD_QTY
+				, ORD_AMT
+				, CNCL_RTN_QTY
+				, CNCL_RTN_AMT
+				, CPN1_CPN_SQ
+				, CPN1_DC_AMT
+				, TMTB1_SQ
+				, TMTB1_DC_AMT
+				, TMTB2_SQ
+				, TMTB2_DC_AMT
+				, GOODS_CPN_SQ
+				, GOODS_CPN_DC_AMT
+				, CART_CPN_SQ
+				, CART_CPN_DC_AMT
+				, BURDEN_RATE
+				, PNT_DC_AMT
+				, PRE_PNT_DC_AMT
+				, SAVE_PNT_AMT
+				, REAL_ORD_AMT
+				, GFCD_USE_AMT
+				, VENDOR_ID
+				, EXTMALL_ID
+				, AGENT_ORDER_ID
+				, EXTMALL_ORDER_ID
+				, CHANGABLE_YN
+				, CHANGE_FEE_FREE_YN
+				, RETURNABLE_YN
+				, RETURN_FEE_FREE_YN
+				, SOLDOUT_YN
+				, SOLDOUT_MEMO
+				, SOLDOUT_REG_NO
+				, SOLDOUT_REG_DT
+				, DELV_ADDR_SQ
+				, DELV_FEE_CD
+				, SHOT_DELV_YN
+				, GIFT_PACK_YN
+				, MAKE_GOODS_YN
+				, ENTRY_NO
+				, DELV_LOC_CD
+				, DELV_ASSIGN_DT
+				, DELV_ASSIGN_STAT
+				, DSTRBT_NOTE
+				, DELV_STDT
+				, DELV_EDDT
+				, SHIP_COMP_CD
+				, INVOICE_NO
+				, INVOICE_SEND_YN
+				, SELL_STORE_CD
+				, SELL_FEE_RATE
+				, AF_LINK_CD
+				, ITHR_CD
+				, CONTENTS_LOC
+				, PLAN_DTL_SQ
+				, SOCIAL_SQ
+				, #{regNo} AS REG_ID
+				, CURRENT_TIMESTAMP() AS REG_DT
+				, #{regNo} AS REG_ID
+				, CURRENT_TIMESTAMP() AS UPD_DT
+		FROM   TB_ORDER_DETAIL
+		WHERE  ORD_DTL_NO = #{ordDtlNo}
+	</insert>
+	
+	<!-- 입점업체 엑셀다운 임시파일 체크-->
+	<select id="getEntryUploadExcelCheck" parameterType="Order" resultType="int">
+		SELECT COUNT(1)
+		FROM   TB_ENTRY_UPLOAD_EXCEL X
+		WHERE  1=1
+		AND    X.ORD_NO = #{ordNo}
+		AND    X.ORD_DTL_NO = #{ordDtlNo}
+	</select>
+	
+	<!-- 입점업체 엑셀다운용 임시테이블 생성-->
+	<insert id="createEntryExcelDownTmp" parameterType="Order">
+		INSERT INTO TB_ENTRY_UPLOAD_EXCEL (
+			ORD_NO
+			, ORD_DTL_NO
+			, REG_NO
+			, REG_DT
+		) VALUES (
+			#{ordNo}
+			, #{ordDtlNo}
+			, #{regNo}
+			, CURRENT_TIMESTAMP()
+		)
+	</insert>
+	
+	<!-- 입점업체미발주목록 -->
+	<select id="getSellerUnorderList" parameterType="Order" resultType="Order">
+		/* Order.getSellerUnorderList */
+		SELECT (SELECT SC.SUPPLY_COMP_NM
+		        FROM   TB_SUPPLY_COMPANY SC
+		        WHERE  SC.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
+		     , (SELECT B.BRAND_KNM 
+		        FROM   TB_BRAND B
+		        WHERE  B.BRAND_CD = G.BRAND_CD) AS BRAND_KNM 
+		     , OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT ) AS ORD_DTL_STAT_NM
+		     , O.ORD_NM 
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS  ) AS PAY_MEANS_NM
+		     , O.ORD_PHNNO 
+		     , DA.RECIP_NM 
+		     , DA.RECIP_PHNNO 
+		     , DA.RECIP_ZIP_NO 
+		     , DA.RECIP_BASE_ADDR 
+		     , DA.RECIP_DTL_ADDR 
+		     , G.SUPPLY_GOODS_CD
+		     , G.GOODS_CD
+		     , G.GOODS_NM 
+		     , ODI.OPT_CD2
+		     , OD.ORD_QTY 
+		     , OD.ORD_AMT
+		     , OD.CPN1_DC_AMT + TMTB1_DC_AMT + TMTB2_DC_AMT +  GOODS_CPN_DC_AMT + CART_CPN_DC_AMT + PNT_DC_AMT + PRE_PNT_DC_AMT AS TOT_DC_AMT
+		     , OD.REAL_ORD_AMT 
+		     , OD.INVOICE_NO 
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO 
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO 
+		AND    P.PAY_GB = 'O'
+		INNER  JOIN TB_GOODS G
+		ON     OD.GOODS_CD = G.GOODS_CD
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ 
+		INNER  JOIN TB_DELIVERY_FEE DF		
+		ON     DF.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD
+		AND    DF.DELV_FEE_CD = OD.DELV_FEE_CD 
+		AND    DF.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_ENTRY_UPLOAD_EXCEL X
+		ON     OD.ORD_NO = X.ORD_NO
+		AND    OD.ORD_DTL_NO = X.ORD_DTL_NO
+		WHERE  1=1
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
+	</select>
+	
+	<!-- 주문상세 목록 -->
+	<select id="getOrderDetailInfo" parameterType="int" resultType="Order">
+		/* TsaOrder.getOrderDetailInfo */
+		SELECT O.ORD_NO
+		     , O.MALL_GB
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , DATE_FORMAT(O.PAY_DT,'%Y%m%d%H%i%S') AS PAY_DT
+		     , O.CUST_NO
+		     , O.ORD_NM
+		     , O.ORD_PHNNO
+		     , O.ORD_TELNO
+		     , O.ORD_EMAIL
+		     , OD.ORD_DTL_STAT
+		     , O.SITE_CD
+		     , O.FRONT_GB
+		     , OD.ORD_DTL_NO
+		     , OD.ORD_EXCH_GB
+		     , OD.ORG_ORD_DTL_NO
+		     , OD.VENDOR_ID
+		     , OD.SUPPLY_COMP_CD
+		     , OD.GOODS_CD
+		     , OD.FORMAL_GB
+		     , OD.GOODS_TYPE
+		     , OD.LIST_PRICE
+		     , OD.CURR_PRICE
+		     , OD.DC_RATE
+		     , OD.ORD_QTY
+		     , OD.ORD_AMT
+		     , OD.CNCL_RTN_QTY
+		     , OD.CNCL_RTN_AMT
+		     , OD.GOODS_CPN_DC_AMT
+		     , OD.CART_CPN_DC_AMT
+		     , OD.PNT_DC_AMT
+		     , OD.PRE_PNT_DC_AMT
+		     , OD.SAVE_PNT_AMT
+		     , OD.REAL_ORD_AMT
+		     , OD.AGENT_ORDER_ID
+		     , OD.EXTMALL_ORDER_ID
+		     , OD.ORD_DTL_STAT
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)    AS ORD_DTL_STAT_NM
+		     , OD.SOLDOUT_YN
+		     , OD.SOLDOUT_MEMO
+		     , OD.SOLDOUT_REG_NO
+		     , OD.SOLDOUT_REG_DT
+		     , OD.SHIP_COMP_CD
+		     , OD.INVOICE_NO
+		     , OD.DELV_STDT
+		     , OD.DELV_EDDT
+		     , OD.SELL_STORE_CD
+		     , OD.SELL_FEE_RATE
+		     , OD.DELV_ADDR_SQ
+		     , OD.REG_NO
+		     , OD.REG_DT
+		     , OD.UPD_NO
+		     , OD.UPD_DT
+		     , (SELECT SELF_GOODS_YN FROM TB_GOODS WHERE GOODS_CD = OD.GOODS_CD) AS SELF_YN
+		     , ODI.OPT_CD2 
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		WHERE  O.ORD_NO = OD.ORD_NO
+		AND    OD.ORD_DTL_NO = #{ordDtlNo}
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+	</select>
+	
+	<!-- 주문상세정보 변경 - 송장번호 적용(입점)  -->
+	<update id="updateOrderDetailInvoice" parameterType="Order">
+		/* TsaOrder.updateOrderDetailInvoice */
+		UPDATE TB_ORDER_DETAIL
+		SET    ORD_DTL_STAT = 'G013_55'
+		     , INVOICE_NO = REPLACE(#{invoiceNo},'-','')
+		     , INVOICE_SEND_YN = 'Y'
+		     , SHIP_COMP_CD = #{shipCompCd}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP()
+		WHERE  ORD_DTL_NO = #{ordDtlNo}
+		AND    ORD_DTL_STAT in ('G013_30', 'G013_26')
+		AND    SUPPLY_COMP_CD = #{supplyCompCd}
+	</update>
+
+</mapper>
+
+
+
+
+
+
+
+
+

+ 218 - 1
style24.scm/src/main/java/com/style24/scm/biz/dao/TssOrderDao.java

@@ -1,6 +1,12 @@
 package com.style24.scm.biz.dao;
 
+import java.util.Collection;
+
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.session.ResultHandler;
+
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Order;
 
 /**
  * 주문 Dao
@@ -10,5 +16,216 @@ import com.style24.core.support.annotation.ShopDs;
  */
 @ShopDs
 public interface TssOrderDao {
-
+	/**
+	 * 주문 목록
+	 * @param Order
+	 * @return
+	 * @author jsh77b	
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderList(Order order);
+	
+	/**
+	 * 주문리스트 합계
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Order getOrderListSumInfo(Order order);
+	
+	/**
+	 * 주문 정보
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderInfoList(Order order);
+	
+	/**
+	 * 주문상세 목록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderDetailList(Order order);
+	
+	/**
+	 * 주문상세 단품 목록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderDetailItemList(Order order);
+	
+	/**
+	 * 배송정보
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getDeliveryAddrList(Order order);
+	
+	/**
+	 * 결제내역 > 결제 기본정보
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderPaymentBasicInfoList(Order order);
+	
+	/**
+	 * 배송비 정보
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getDeliveryFeeList(Order order);
+	
+	/**
+	 * 반품/교환 > 반품/교환 정보
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderChangeList(Order order);
+	
+	/**
+	 * 환불정보
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> orderRefundInfo(Order order);
+	
+	/**
+	 * 상담내역
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> orderCounselInfo(Order order);
+	
+	/**
+	 * 변경내역 > 주문요청 관리자 메모
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderTsainMemoList(Order order);
+	
+	/**
+	 * 입점업체미발주 주문목록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderSellerUnorderList(Order order);
+	
+	/**
+	 * 입점업체 엑셀다운용 임시테이블 삭제
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	void deleteEntryExcelDownTmp(Order order);
+	
+	/**
+	 * 주문상세상태 수정 - 입점
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	int updateOrderDetailStat(Order order);
+	
+	/**
+	 * 주문상세 이력 등록
+	 *
+	 * @param Order
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	int createOrderDetailHst(Order order);
+	
+	/**
+	 * 엑셀 다운로드용 임시테이블 데이타 체크
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	int getEntryUploadExcelCheck(Order order);
+	
+	/**
+	 * 입점업체 엑셀다운용 임시테이블 생성
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	void createEntryExcelDownTmp(Order order);
+	
+	/**
+	 * 입점업체미발주목록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	Collection<Order> getSellerUnorderList(Order order);
+	
+	/**
+	 * 주문 엑셀다운로드
+	 *
+	 * @param Order
+	 * @param handler - ResultHandler
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	void getSellerUnorderList(Order order, ResultHandler<Order> handler);
+	
+	/**
+	 * 주문상세 정보
+	 *
+	 * @param ordDtlNo - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	Order getOrderDetailInfo(@Param("ordDtlNo") int ordDtlNo);
+	
+	/**
+	 * 주문상세정보 변경 - 송장번호 적용(입점)
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	int updateOrderDetailInvoice(Order order);
 }

+ 391 - 0
style24.scm/src/main/java/com/style24/scm/biz/service/TssOrderService.java

@@ -1,13 +1,23 @@
 package com.style24.scm.biz.service;
 
+import java.util.Collection;
+
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import com.gagaframework.excel.env.GagaExcelConstants;
+import com.gagaframework.excel.xssf.GagaExcelResultHandler;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.Order;
 import com.style24.scm.biz.dao.TssOrderDao;
+import com.style24.scm.support.security.session.TssSession;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.style24.scm.support.util.TsitUtil;
+
 /**
  * 주문 Service
  *
@@ -23,5 +33,386 @@ public class TssOrderService {
 
 	@Autowired
 	private TssOrderDao orderDao;
+	
+	/**
+	 * 주문목록
+	 * @param Order
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderList(Order order) {
+		return orderDao.getOrderList(order);
+	}
+	
+	/**
+	 * 주문리스트 합계
+	 *
+	 * @param order
+	 * @return Order - 합계정보
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Order getOrderListSumInfo(Order order) {
+		// multi row 검색관련 처리
+		if (StringUtils.isNotBlank(order.getCondition())) {
+			TsitUtil tsitUtil = new TsitUtil();
+			String searchCondition = tsitUtil.replaceMultiSelectParamsArr(order.getCondition());
+			order.setConditions(searchCondition.split(","));
+		}
+
+		// 외부몰권한일 때 외부몰벤더ID 설정
+		//if (TsaSession.getInfo().getRoleCd().startsWith("C")) {
+			//order.setMallGb(TsaConstants.MallGb.EXTMALL.value());
+			//order.setVendorId(TsaSession.getInfo().getVendorId());
+		//}
+		
+		return orderDao.getOrderListSumInfo(order);
+	}
+	
+	/**
+	 * 주문상세 정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderInfoList(Order order) {
+		return orderDao.getOrderInfoList(order);
+	}
+	
+	/**
+	 * 주문상세 목록
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderDetailList(Order order) {
+		return orderDao.getOrderDetailList(order);
+	}
+	
+	/**
+	 * 배송정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getDeliveryAddrList(Order order) {
+		return orderDao.getDeliveryAddrList(order);
+	}
+	
+	/**
+	 * 주문상세 단품 목록
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderDetailItemList(Order order) {
+		return orderDao.getOrderDetailItemList(order);
+	}
+	
+	/**
+	 * 결제내역 > 결제 기본정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderPaymentBasicInfoList(Order order) {
+		return orderDao.getOrderPaymentBasicInfoList(order);
+	}
+	
+	/**
+	 * 배송비 정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getDeliveryFeeList(Order order) {
+		return orderDao.getDeliveryFeeList(order);
+	}
+	
+	/**
+	 * 취소/반품/교환 요청 정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderChangeList(Order order) {
+		return orderDao.getOrderChangeList(order);
+	}
+	
+	/**
+	 * 환불정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> orderRefundInfo(Order order) {
+		return orderDao.orderRefundInfo(order);
+	}
+	
+	/**
+	 * 상담내역
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> orderCounselInfo(Order order) {
+		return orderDao.orderCounselInfo(order);
+	}
+	
+	/**
+	 * 변경내역 > 주문요청 관리자 메모
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderTsainMemoList(Order order) {
+		order.setDelYn("N");
+		return orderDao.getOrderTsainMemoList(order);
+	}
+	
+	/**
+	 * 입점업체미발주 주문목록
+	 * @param Order
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	public Collection<Order> getOrderSellerUnorderList(Order order) {
+		return orderDao.getOrderSellerUnorderList(order);
+	}
+	
+	/**
+	 * 입점업체미발주목록 - 엑셀다운로드시 주문상태값 변경(상품준비중)
+	 *
+	 * @param orderList - 주문 정보
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	@Transactional("shopTxnManager")
+	public void saveUnorderStatus(Collection<Order> orderList) {
+
+		// 1. 임시테이블 삭제
+		Order deleteOrder = new Order();
+		deleteOrder.setRegNo(TssSession.getInfo().getUserNo());
+		orderDao.deleteEntryExcelDownTmp(deleteOrder);
+
+		for (Order oneData : orderList) {
+
+			Order updateData = new Order();
+
+			updateData.setOrdNo(oneData.getOrdNo());
+			updateData.setOrdDtlNo(oneData.getOrdDtlNo());
+			updateData.setBrandCd(oneData.getBrandCd());
+			updateData.setSupplyCompCd(oneData.getSupplyCompCd());
+			updateData.setRegNo(TssSession.getInfo().getUserNo());
+			updateData.setUpdNo(TssSession.getInfo().getUserNo());
+			
+			log.info("updateData={}", updateData);
+
+			// 2. 주문상세상태값 변경
+			int result = orderDao.updateOrderDetailStat(updateData);
+			if (result > 0) {
+				// 3. 주문상세상태 변경 이력생성
+				orderDao.createOrderDetailHst(updateData);
+			}
+			
+			// 4. 엑셀 다운로드용 임시테이블 데이타 체크
+			result = orderDao.getEntryUploadExcelCheck(updateData);
+			if (result < 1) {
+				// 5. 엑셀 다운로드용 임시테이블 저장
+				orderDao.createEntryExcelDownTmp(updateData);
+			}
+		}
+	}
+	
+	/**
+	 * 입점업체미발주목록 엑셀다운로드
+	 *
+	 * @param order - 주문정보
+	 * @param excelFilenameWithPath - 경로를 포함한 엑셀파일명
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	public void geSellerUnorderExcelList(Order order, String excelFilenameWithPath) {
+		
+		// 헤더 title 설정 (23)
+		String[] listTitles = {
+			"입점업체"
+			, "브랜드"
+			, "주문번호"
+			, "주문상세번호"
+			, "주문상세상태"
+			, "주문자명"
+			, "주문일시"
+			, "결제수단"
+			, "주문자휴대전화"
+			, "수령자명"
+			, "수령자휴대전화"
+			, "수령자우편번호"
+			, "수령자기본주소"
+			, "수령자상세주소"
+			, "업체상품코드"
+			, "상품코드"
+			, "상품명"
+			, "사이즈"
+			, "주문수량"
+			, "주문금액"
+			, "할인금액"
+			, "실결제금액"
+			, "송장"
+		};
+
+		// DB 처리 시 사용되는 파라미터명(셀명) 설정 (23)
+		String[] cellNames = {
+			"supplyCompNm"
+			, "brandKnm"
+			, "ordNo"
+			, "ordDtlNo"
+			, "ordDtlStatNm"
+			, "ordNm"
+			, "ordDt"
+			, "payMeansNm"
+			, "ordPhnno"
+			, "recipNm"
+			, "recipPhnno"
+			, "recipZipNo"
+			, "recipBaseAddr"
+			, "recipDtlAddr"
+			, "supplyGoodsCd"
+			, "goodsCd"
+			, "goodsNm"
+			, "optCd2"
+			, "ordQty"
+			, "ordAmt"
+			, "totDcAmt"
+			, "realOrdAmt"
+			, "invoiceNo"
+		};
+		
+		String[] cellTypes = {
+			GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+		};
+
+		GagaExcelResultHandler<Order> handler = new GagaExcelResultHandler<>(excelFilenameWithPath, "출고배송목록(입점)", listTitles, cellNames, cellTypes);
+		
+		orderDao.getSellerUnorderList(order, handler);
+		
+		handler.close();
+	}
+	
+	/**
+	 * 입점업체미발주목록 - 송장번호 입력(출고완료)
+	 *
+	 * @param orderList - 주문 정보
+	 * @return String - 결과메시지
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	@Transactional("shopTxnManager")
+	public String saveUnorderInvoice(Collection<Order> orderList) {
+		String resultMsg;
+		int totalCount 			= 0;	// 전체 카운트
+		int failedCount 		= 0;	// 몰 실패 카운트
+		int successCount 		= 0;	// 몰 성공 카운트
+		String failedGoodCdStr 	= "";	// 실패 상품 리스트
+		
+		// 1. 송장번호 등록 대상 목록 처리
+		for (Order oneData : orderList) {
+			// 2. 송장번호, 업체코드 체크 
+			if (!StringUtils.isEmpty(oneData.getInvoiceNo()) && !StringUtils.isEmpty(oneData.getShipCompCd())) {
+				totalCount++;
+				
+				Order updateData = new Order();
+				updateData.setOrdNo(oneData.getOrdNo());
+				updateData.setOrdDtlNo(oneData.getOrdDtlNo());
+				updateData.setBrandCd(oneData.getBrandCd());
+				updateData.setSupplyCompCd(oneData.getSupplyCompCd());
+				updateData.setRegNo(TssSession.getInfo().getUserNo());
+				updateData.setUpdNo(TssSession.getInfo().getUserNo());
+				updateData.setGoodsCd(oneData.getGoodsCd());
+				updateData.setOptCd2(oneData.getOptCd2());
+				updateData.setOrdQty(oneData.getOrdQty());
+				updateData.setShipCompCd(oneData.getShipCompCd());
+				updateData.setInvoiceNo(oneData.getInvoiceNo().replace("-", ""));
+
+				// 3. 원주문 상세정보 조회
+				Order orgOrder = orderDao.getOrderDetailInfo(oneData.getOrdDtlNo());
+				if (orgOrder == null) {
+					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>"; // 상품정보 (상품명 + 칼라명) / 사이즈코드
+					failedCount++;
+					continue;
+				}
+
+				// 4. 상품코드, 사이즈, 주문수량 체크
+				if (!orgOrder.getGoodsCd().equals(updateData.getGoodsCd()) || !orgOrder.getOptCd2().equals(updateData.getOptCd2()) || orgOrder.getOrdQty() != updateData.getOrdQty()) {
+					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
+					failedCount++;
+					continue;
+				}
+				
+				// 5. 업체코드설정
+				updateData.setSupplyCompCd(orgOrder.getSupplyCompCd());
+				
+				// 6. 송장번호등록
+				int result = orderDao.updateOrderDetailInvoice(updateData);
+				
+				// 7. 주문상세상태 변경 이력 등록
+				if (result > 0) {
+					successCount++;
+					orderDao.createOrderDetailHst(updateData);
+				} else {
+					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
+					failedCount++;
+				}
+			}
+		}
+
+		resultMsg = "출고완료 : " + totalCount + "건 / 실패 : " + failedCount + "건 / 성공 : " + successCount + "건 <br/>" + "실패 목록 : " + failedGoodCdStr;
+
+		return resultMsg;
+	}
 
 }

+ 197 - 1
style24.scm/src/main/java/com/style24/scm/biz/web/TssOrderController.java

@@ -1,15 +1,39 @@
 package com.style24.scm.biz.web;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gagaframework.excel.GagaExcelUtil;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+import com.gagaframework.web.util.GagaDateUtil;
+import com.gagaframework.web.util.GagaFileUtil;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.Order;
 import com.style24.scm.biz.service.TssOrderService;
+import com.style24.scm.biz.service.TssRendererService;
 import com.style24.scm.support.controller.TssBaseController;
-
+import com.style24.scm.support.security.session.TssSession;
 import lombok.extern.slf4j.Slf4j;
 
+
 /**
  * 주문 Controller
  *
@@ -24,7 +48,179 @@ public class TssOrderController extends TssBaseController {
 	@Autowired
 	private TscMessageByLocale message;
 
+	@Autowired
+	private TssRendererService rendererService;
+	
 	@Autowired
 	private TssOrderService orderService;
+	
+	@Autowired
+	private Environment env;
+
+	/**
+	 * 입점업체미발주목록화면
+	 *
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	@GetMapping("/seller/unorder/list/form")
+	public ModelAndView orderSellerUnorderListForm() {
+		ModelAndView mav = new ModelAndView();
+		
+		// 공급업체
+		String supplyCompCd 	= "";
+		String selfYn 			= "Y";
+		
+		// 입점업체담당자
+		if ("G001_B000".equals(TssSession.getInfo().getRoleCd())) {	
+			supplyCompCd = TssSession.getInfo().getSupplyCompCd();
+			selfYn = "N";
+		}
+		// 촬영업체
+		else if ("G001_E000".equals(TssSession.getInfo().getRoleCd())) {	
+			supplyCompCd = TssSession.getInfo().getSupplyCompCd();
+			selfYn = "Y";
+		}
+		
+		mav.addObject("supplyCompList"	, rendererService.getSupplyCompanyList(supplyCompCd, selfYn)); 	// 공급업제목록
+		mav.addObject("ordDtlStatList"	, rendererService.getAvailCommonCodeList("G013"));				// 주문상세상태코드
+		mav.addObject("shipCompanyList"	, rendererService.getShipCompanyList());						// 택배사 목록
+
+		mav.setViewName("order/OrderSellerListForm");
+
+		return mav;
+	}
+	
+	/**
+	 * 입점업체미발주 주문목록 조회
+	 *
+	 * @param order - 주문정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 16
+	 */
+	@PostMapping("/seller/unorder/list")
+	@ResponseBody
+	public Collection<Order> getOrderSellerUnorderList(@RequestBody Order order) throws Exception {		
+		Collection<Order> orderList = orderService.getOrderSellerUnorderList(order); 
+		return orderList;
+	}
+	
+	/**
+	 * 입점업체미발주목록 - 엑셀다운로드시 주문상태값 변경(출고완료)
+	 *
+	 * @param orderList - 미발주목록
+	 * @return GagaResponse
+	 * @author jsh77b
+	 * @since 2020. 12. 01
+	 */
+	@PostMapping("/seller/unorder/status/save")
+	@ResponseBody
+	public GagaResponse saveUnorderStatus(@RequestBody Collection<Order> orderList) {
+		orderService.saveUnorderStatus(orderList);
+		return super.ok("");
+	}
+	
+	/**
+	 * 입점업체미발주목록 - 엑셀다운로드
+	 *
+	 * @param request - request
+	 * @return ResponseEntity<InputStreamResource>
+	 * @throws Exception - exception
+	 * @author jsh77b
+	 * @since 2020. 12. 01
+	 */
+	@GetMapping("/seller/unorder/excel/list")
+	public ResponseEntity<InputStreamResource> downloadPickingGoodsExcelList(HttpServletRequest request) throws Exception {
+		String excelfileName 	= "입점출고목록_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilePath 	= GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+		
+		Order order = new Order();
+		order.setRegNo(TssSession.getInfo().getUserNo());
+		order.setSearch("EXCEL");
+
+		orderService.geSellerUnorderExcelList(order, excelFilePath);
+		
+		return GagaFileUtil.writeFile(request, excelFilePath);
+	}
+	
+	/**
+	 * 입점 송장 엑셀 업로드
+	 *
+	 * @param order - 주문정보
+	 * @return GagaMap
+	 * @throws Exception - exception
+	 * @author jsh77b
+	 * @since 2020. 12. 01
+	 */
+	@PostMapping("/seller/unorder/invoice/excelupload/save")
+	@ResponseBody
+	public GagaMap saveSellerUnorderInvoiceExcelupload(@RequestBody Order order) throws Exception {
+
+		ObjectMapper mapper = new ObjectMapper();
+		
+		// 1. UPLOAD 경로 조회
+		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
+		
+		// 2. DB 처리 시 사용되는 파라미터명(셀명) 설정
+		String[] cellName = {
+			"ordNo"
+			, "ordDtlNo"
+			, "goodsCd"
+			, "optCd2"
+			, "ordQty"
+			, "shipCompCd"
+			, "invoiceNo"
+		};
+		
+		Collection<GagaMap> ecxelList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()), 0, cellName, 0);
+		
+		// 3. 주문목록 매퍼 등록
+		Collection<Order> orderList = new ArrayList<>();
+		for (GagaMap map : ecxelList) {
+			Order tmpGoods = mapper.convertValue(map, Order.class);
+			orderList.add(tmpGoods);
+		}
+		
+		// 4. 업로드된 임시 엑셀파일 삭제
+		if (CollectionUtils.isEmpty(orderList)) {
+			try {
+				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()));
+			} catch (IOException e) {
+				// Nothing Do
+			}
+			//throw new IllegalStateException(message.getMessage("FAIL_1001"));
+			throw new IllegalStateException("실패 했습니다.");
+		}
+		
+		// 4. 주문상세번호 기준으로 송장번호 등록
+		String result = orderService.saveUnorderInvoice(orderList);
+		GagaMap map = new GagaMap();
+		map.set("msg", result);
+
+		// 5. 파일 삭제 (중복처리?)
+		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()));
+
+		return map;
+	}
+	
+	/**
+	 * 입점업체미발주목록 - 송장번호 입력(출고완료)
+	 *
+	 * @param orderList - 송방번호 입력된 주문리스트
+	 * @return GagaMap
+	 * @author jsh77b
+	 * @since 2020. 12. 01
+	 */
+	@PostMapping(value = "/seller/unorder/invoice/save")
+	@ResponseBody
+	public GagaMap saveUnorderInvoice(@RequestBody Collection<Order> orderList) {
+		// 1. 송장번호 개별 등록
+		String result = orderService.saveUnorderInvoice(orderList);
+		GagaMap map = new GagaMap();
+		map.set("msg", result);
+		return map;
+	}
 
 }

+ 58 - 0
style24.scm/src/main/java/com/style24/scm/support/util/TsitUtil.java

@@ -0,0 +1,58 @@
+package com.style24.scm.support.util;
+
+public class TsitUtil {
+	public String replaceMultiSelectParams(String param) {
+		String[] multiParams = param.replaceAll("\r", "").split("\n");
+		StringBuilder multiParam = new StringBuilder();
+		multiParam.append("(");
+		for (int i = 0; i < multiParams.length; i++) {
+			if (!multiParams[i].trim().equals("")) {
+				if (i > 0) {
+					multiParam.append("|");
+				}
+				multiParam.append(multiParams[i]);
+			}
+		}
+		multiParam.append(")");
+
+		return multiParam.toString();
+	}
+
+	public String replaceMultiSelectParamsArr(String param) {
+		String[] multiParams = param.replaceAll("\r", "").split("\n");
+		StringBuilder multiParam = new StringBuilder();
+		for (int i = 0; i < multiParams.length; i++) {
+			if (!multiParams[i].trim().equals("")) {
+				if (i > 0) {
+					if (i % 20 == 0) {
+						multiParam.append(",");
+					} else {
+						multiParam.append("|");
+					}
+				}
+				multiParam.append(multiParams[i]);
+			}
+		}
+
+		return multiParam.toString();
+	}
+
+	public String replaceMultiSelectCommaParamsArr(String param) {
+		String[] multiParams = param.replaceAll("\r", "").split(",");
+		StringBuilder multiParam = new StringBuilder();
+		for (int i = 0; i < multiParams.length; i++) {
+			if (!multiParams[i].trim().equals("")) {
+				if (i > 0) {
+					if (i % 20 == 0) {
+						multiParam.append(",");
+					} else {
+						multiParam.append("|");
+					}
+				}
+				multiParam.append(multiParams[i]);
+			}
+		}
+
+		return multiParam.toString();
+	}
+}

+ 380 - 0
style24.scm/src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html

@@ -0,0 +1,380 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderSellerListForm.html
+ * @desc    : 입점업체미발주목록조회 Page
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+ 
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+	
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	
+	<form id="searchForm" name="searchForm" action="#" th:action="@{'/order/seller/unorder/list'}">
+		<input type="hidden" id="searchGb" name="searchGb" />
+		<input type="hidden" id="imageViewYn" name="imageViewYn" />
+		
+		<!-- 패널 영역1 -->
+		<div class="panelStyle" >
+			<!-- 검색조건 영역 -->
+			<!-- TITLE -->
+			<div class="panelTitle">
+				<h3>
+					<i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">주문번호</font> 또는 <font color="red">검색조건</font> 하나를 꼭 입력해 주세요.
+				</h3>
+				<span class="panelControl">
+					<i class="fa fa-chevron-up"></i>
+				</span>
+			</div>
+			
+			<div class="panelContent">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>업체/브랜드<em class="required" title="필수"></em></th>
+						<td colspan="5">
+							<select name="supplyCompCd" id="supplyCompCd">
+								<option value="" >[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							<span id="multiBrand"></span>
+						</td>
+					</tr>
+					<tr>
+						<th>주문번호</th>
+						<td>
+							<input type="text" name="ordNo" placeholder="" maxlength="20"/>
+						</td>
+						<th>주문자명</th>
+						<td>
+							<input type="text" name="ordNm" placeholder="" maxlength="20"/>
+						</td>
+						<th>상품코드</th>
+						<td>
+							<input type="text" name="goodsCd" placeholder="" maxlength="20"/>
+						</td>
+						<th>주문상세상태</th>
+						<td>
+							<select name="ordDtlStat" id="ordDtlStat">
+								<option value="G013_20" selected>결제완료</option>
+								<option value="G013_30">상품준비중</option>
+								<!-- <option value="G013_26">교환출고처지정</option>
+								<option value="G013_35">입고확정</option> -->
+								<option value="G013_55">출고완료</option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>조회일자</th>
+						<td colspan="7">
+							<select name="searchDateGb">
+								<option value="ordDt">주문일자</option>
+							</select>
+							<span id="terms"></span>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-info btn-lg" id="btnOrderSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
+					</li>
+				</ul>
+				
+			</div>
+		</div>
+
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-info btn-lg" onclick="cfnDownloadSampleFile('SF018');">입점송장번호등록다운로드</button>
+				</li>
+				<li class="aR">
+					<button type="button" id="btnExcelDown" class="btn btn-info btn-lg">엑셀다운로드</button>
+					<button type="button" id="btnInvoiceExcelUpLoad" class="btn btn-success btn-lg">송장엑셀업로드</button>
+					<button type="button" id="btnSave" class="btn btn-success btn-lg">저장</button>
+				</li>
+			</ul>
+			
+			<div class="panelContent" style="overflow: hidden;">
+				<div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham lh30"></div>
+			</div>
+		</div>
+		
+		<!-- //리스트 영역 -->
+		<label class="off">
+			<a href="javascript:void(0);" id="excelList" style="display: none;">엑셀다운로드</a>
+		</label>
+
+	</form>
+</div>
+
+<label class="off">
+	<a href="javascript:void(0);" id="hdOrderExcelList" style="display: none;">엑셀다운로드</a>
+</label>
+	
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+var sessRoleCd 		= [[${sessionInfo.roleCd}]];
+var shipCompanyList = gagajf.convertToArray([[${shipCompanyList}]]);
+
+var columnDefs = [
+	{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+	{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+	{headerName: "입점업체",			field:"supplyCompNm",		width:100, cellClass: 'text-center'},
+	{headerName: "입점업체코드",		field:"supplyCompCd",		width:100, cellClass: 'text-center', hide: true},
+	{headerName: "브랜드",			field:"brandKnm",			width:100, cellClass: 'text-center'},
+	{headerName: "주문번호",			field:"ordNo",				width:100, cellClass: 'text-center'},
+	{headerName: "주문상세번호",		field:"ordDtlNo",			width:100, cellClass: 'text-center'},
+	{headerName: "주문상세상태",		field:"ordDtlStatNm", 		width:100, cellClass: 'text-center'},
+	{headerName: "주문자명",			field:"ordNm",				width:100, cellClass: 'text-center'},
+	{headerName: "주문일시",			field:"ordDt",				width:100, cellClass: 'text-center',
+		cellRenderer		: function (params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+		}
+	},
+	{headerName: "결제수단",			field:"payMeansNm",			width:100, cellClass: 'text-center'},
+	{headerName: "주문자휴대전화",		field:"ordPhnno",			width:100, cellClass: 'text-center'},
+	{headerName: "수령자명",			field:"recipNm",			width:100, cellClass: 'text-center'},
+	{headerName: "수령자휴대전화",		field:"recipPhnno",			width:120, cellClass: 'text-center'},
+	{headerName: "수령자우편번호",		field:"recipZipNo",			width:120, cellClass: 'text-center'},
+	{headerName: "수령자기본주소",		field:"recipBaseAddr",		width:120, cellClass: 'text-center'},
+	{headerName: "수령자상세주소",		field:"recipDtlAddr",		width:120, cellClass: 'text-center'},
+	{headerName: "업체상품코드",		field:"supplyGoodsCd",		width:100, cellClass: 'text-center'},
+	{headerName: "상품코드",			field:"goodsCd",			width:100, cellClass: 'text-center'},
+	{headerName: "상품명",			field:"goodsNm",			width:100, cellClass: 'text-center'},
+	{headerName: "사이즈",			field:"optCd2",				width:100, cellClass: 'text-center'},
+	{headerName: "주문수량",			field:"ordQty",				width:100, cellClass: 'text-center'},
+	{headerName: "주문금액",			field:"ordAmt",				width:100, cellClass: 'text-center'},
+	{headerName: "할인금액",			field:"totDcAmt",			width:100, cellClass: 'text-center'},
+	{headerName: "실결제금액",			field:"realOrdAmt",			width:100, cellClass: 'text-center'},
+	{headerName: "배송업체",			field:"shipCompCd",			width:150, cellClass: 'text-left'
+		, editable 			: true
+		, cellEditor		: 'agRichSelectCellEditor'
+		, cellEditorParams	: { 
+			values: gagaAgGrid.extractValues(shipCompanyList) 
+		}
+		, valueFormatter: function (params) { 
+			return gagaAgGrid.lookupValue(shipCompanyList, params.value); 
+		}
+		, valueParser: function (params) { 
+			return gagaAgGrid.lookupKey(shipCompanyList, params.newValue); 
+		}
+	},
+	{headerName: "송장",				field:"invoiceNo",			width:150, cellClass: 'text-left', editable : true}
+];
+
+var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+gridOptions.suppressRowClickSelection = true;
+gridOptions.rowSelection = 'multiple';
+gridOptions.stopEditingWhenGridLosesFocus = true;
+
+// 조회버튼
+$('#btnOrderSearch').on('click', function() {
+	fnSearch();
+});
+
+// 검색
+var fnSearch = function() {
+	var formId = '#searchForm';
+	var ordNo = $('#searchForm input[name=ordNo]').val();
+	var stDate = $('#stDate').val();
+	var edDate = $('#edDate').val();
+	
+	if (gagajf.isNull(ordNo)) {
+		if (gagajf.isNull(stDate)) {
+			mcxDialog.alert('시작 기간을 입력하세요.');
+			return;
+		}
+
+		if (gagajf.isNull(edDate)) {
+			mcxDialog.alert('종료 기간을 입력하세요.');
+			return;
+		}
+	}
+	
+	gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
+}
+
+// 엑셀다운로드 시 주문상태 변경
+$('#btnExcelDown').on('click', function () {
+	
+	var selectedData = gridOptions.api.getSelectedRows();
+
+	if (selectedData.length == 0) {
+		mcxDialog.alert('선택된 행이 없습니다.');
+		return;
+	}
+	
+	mcxDialog.confirm('엑셀 다운로드 하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function(){
+			var jsonData = JSON.stringify(selectedData);
+			gagajf.ajaxJsonSubmit('/order/seller/unorder/status/save', jsonData, fnExcelDownCollback);
+		}
+	});
+});
+
+// 엑셀다운로드
+var fnExcelDownCollback = function(flag){
+	$('#excelList').attr({ href : '/order/seller/unorder/excel/list' }).get(0).click();
+}
+
+// 송장 엑셀 업로드
+$('#btnInvoiceExcelUpLoad').on('click', function() {
+	cfnExcelUploadPopup('invoiceExcelUpload', 'invoiceExcelUpload');
+});
+
+var invoiceExcelUpload = function(result){
+	mcxDialog.confirm('송장 변경을 진행하시겠습니까?', {
+		cancelBtnText	: "취소"
+		, sureBtnText	: "확인"
+		, sureBtnClick	: function(){
+			var data = {
+				procJob 		: result.procJob
+				, excelFileNm 	: result.excelFileNm
+			};
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit('/order/seller/unorder/invoice/excelupload/save', jsonData, fnInvoiceSaveCollback);
+		}
+	});	
+}
+
+// 송장번호 저장후 
+var fnInvoiceSaveCollback = function(result){
+	mcxDialog.alert(result.msg);
+	return;
+}
+
+//송장번호 저장시
+$('#btnSave').on('click', function () {
+	
+	var selectedData = gridOptions.api.getSelectedRows();
+
+	if (selectedData.length == 0) {
+		mcxDialog.alert('선택된 행이 없습니다.');
+		return;
+	}
+	
+	var checkFlag = false;
+	$.each(selectedData, function(idx, item) {
+		if (gagajf.isNull(item.shipCompCd)){
+			checkFlag = true;
+			mcxDialog.alert('배송업체를 선택하세요.');
+			return;
+		}
+		
+		if (gagajf.isNull(item.invoiceNo)){
+			checkFlag = true;
+			mcxDialog.alert('송장번호를 입력하세요.');
+			return;
+		}
+	});
+	
+	if (checkFlag){
+		return false;
+	}
+	
+	mcxDialog.confirm('저장 하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function(){
+			var jsonData = JSON.stringify(selectedData);
+			gagajf.ajaxJsonSubmit('/order/seller/unorder/invoice/save', jsonData, fnInvoiceSaveCollback);
+
+		}
+	});
+	
+});
+
+// 초기화 클릭시
+$('#btnInit').on('click', function() {
+	$('#searchForm')[0].reset();
+	$("#multiBrand").empty();
+});
+
+// 자사/입점 변경여부
+$("#searchForm input[name=selfYn]").bind('click change', function () {
+	var radioValue = $(this).val();
+	var selfGb = "S";	// 자사 공급 업체
+	
+	if (radioValue == "N"){
+		selfGb = "E";	//입점 공급업체
+	}
+	
+	var actionUrl = '/renderer/supply/company/list/'+ selfGb;	
+
+	$('#searchForm').find('#multiBrand').empty();
+
+	cfnCreateCombo(actionUrl, $('#searchForm select[name=supplyCompCd]'), "[전체]", "");
+});
+	
+// 업체변경시
+$('#searchForm select[name=supplyCompCd]').on('change', function() {
+	var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+	if (sessRoleCd == "G001_B000") {
+		actionUrl = '/renderer/brand/AuthBrandlist';
+	}
+	
+	cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y');
+});
+
+// 업체 브랜드 초기화
+var fnSupplyBrandInit = function(){
+	$("#searchForm select[name=supplyCompCd]").val([[${sessionInfo.supplyCompCd}]]);
+	$('#searchForm').find('#multiBrand').empty();
+	
+	var actionUrl = '/renderer/brand/AuthBrandlist';
+	
+	cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y');
+}
+
+//초기설정
+$(document).ready(function() {
+	// 달력기능 활성화
+	cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '주문');
+	gagaAgGrid.createGrid('gridList', gridOptions);
+	gridOptions.api.hideOverlay();
+	
+	if(sessRoleCd == "G001_B000") {
+		fnSupplyBrandInit();
+	}
+});
+
+</script>
+
+</html>
+
+
+
+
+