Explorar el Código

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

gagamel hace 5 años
padre
commit
79276b2316

+ 2 - 1
style24.admin/.gitignore

@@ -1,3 +1,4 @@
 target/
 .settings/
-.classpath
+.classpath
+/bin/

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

@@ -0,0 +1,246 @@
+package com.style24.admin.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
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@ShopDs
+public interface TsaOrderDao {
+	
+	/**
+	 * 주문 목록
+	 * @param itemkind
+	 * @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
+	 * @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
+	 * @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 orderSearch
+	 * @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);
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 423 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java

@@ -0,0 +1,423 @@
+package com.style24.admin.biz.service;
+
+import java.util.Collection;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gagaframework.excel.env.GagaExcelConstants;
+import com.gagaframework.excel.xssf.GagaExcelResultHandler;
+import com.style24.admin.biz.dao.TsaOrderDao;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.admin.support.util.TsitUtil;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.Order;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 주문관리 Service
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@Service
+@Slf4j
+public class TsaOrderService {
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private TsaOrderDao orderDao;
+
+	@Autowired
+	private ObjectMapper mapper;
+	
+	/**
+	 * 주문목록
+	 * @param Order
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderList(Order order) {
+		return orderDao.getOrderList(order);
+	}
+	
+	/**
+	 * 주문리스트 합계
+	 *
+	 * @param order
+	 * @return TsaOrder - 합계정보
+	 * @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<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderInfoList(Order order) {
+		return orderDao.getOrderInfoList(order);
+	}
+	
+	/**
+	 * 주문상세 목록
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderDetailList(Order order) {
+		return orderDao.getOrderDetailList(order);
+	}
+	
+	/**
+	 * 배송정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getDeliveryAddrList(Order order) {
+		return orderDao.getDeliveryAddrList(order);
+	}
+	
+	/**
+	 * 주문상세 단품 목록
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderDetailItemList(Order order) {
+		return orderDao.getOrderDetailItemList(order);
+	}
+	
+	/**
+	 * 결제내역 > 결제 기본정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderPaymentBasicInfoList(Order order) {
+		return orderDao.getOrderPaymentBasicInfoList(order);
+	}
+	
+	/**
+	 * 배송비 정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getDeliveryFeeList(Order order) {
+		return orderDao.getDeliveryFeeList(order);
+	}
+	
+	/**
+	 * 취소/반품/교환 요청 정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderChangeList(Order order) {
+		return orderDao.getOrderChangeList(order);
+	}
+	
+	/**
+	 * 환불정보
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> orderRefundInfo(Order order) {
+		return orderDao.orderRefundInfo(order);
+	}
+	
+	/**
+	 * 상담내역
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> orderCounselInfo(Order order) {
+		return orderDao.orderCounselInfo(order);
+	}
+	
+	/**
+	 * 변경내역 > 주문요청 관리자 메모
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderTsainMemoList(Order order) {
+		order.setDelYn("N");
+		return orderDao.getOrderTsainMemoList(order);
+	}
+	
+	/**
+	 * 입점업체미발주 주문목록
+	 * @param Order
+	 * @return
+	 * @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(TsaSession.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(TsaSession.getInfo().getUserNo());
+			updateData.setUpdNo(TsaSession.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 	= "";	// 실패 상품 리스트
+
+		for (Order oneData : orderList) {
+			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(TsaSession.getInfo().getUserNo());
+				updateData.setUpdNo(TsaSession.getInfo().getUserNo());
+				updateData.setGoodsCd(oneData.getGoodsCd());
+				updateData.setOptCd2(oneData.getOptCd2());
+				updateData.setOrdQty(oneData.getOrdQty());
+				updateData.setShipCompCd(oneData.getShipCompCd());
+				updateData.setInvoiceNo(oneData.getInvoiceNo().replace("-", ""));
+
+				// 원주문 상세정보
+				Order orgOrder = orderDao.getOrderDetailInfo(oneData.getOrdDtlNo());
+				if (orgOrder == null) {
+					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
+					failedCount++;
+					continue;
+				}
+
+				// 상품코드, 사이즈, 주문수량 같은지 확인
+				if (!orgOrder.getGoodsCd().equals(updateData.getGoodsCd()) ||
+					!orgOrder.getOptCd2().equals(updateData.getOptCd2()) ||
+					orgOrder.getOrdQty() != updateData.getOrdQty()) {
+					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
+					failedCount++;
+					continue;
+				}
+				
+				// 업체코드등록
+				updateData.setSupplyCompCd(orgOrder.getSupplyCompCd());
+
+				int result = orderDao.updateOrderDetailInvoice(updateData);
+				if (result > 0) {
+					successCount++;
+					// 주문상세상태 변경 이력생성
+					//updateData.setHstMemo("입점 업체 송장번호 입력");
+					orderDao.createOrderDetailHst(updateData);
+				} else {
+					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
+					failedCount++;
+				}
+			}
+		}
+
+		resultMsg = "출고완료 : " + totalCount + "건 / 실패 : " + failedCount + "건 / 성공 : " + successCount + "건 <br/>" + "실패 목록 : " + failedGoodCdStr;
+
+		return resultMsg;
+	}
+}

+ 323 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -0,0 +1,323 @@
+package com.style24.admin.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.RequestParam;
+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.admin.biz.service.TsaOrderService;
+import com.style24.admin.biz.service.TsaRendererService;
+import com.style24.admin.support.controller.TsaBaseController;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.persistence.domain.Order;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 주문관리 Controller
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@Controller
+@RequestMapping("/order")
+@Slf4j
+public class TsaOrderController extends TsaBaseController {
+	
+	@Autowired
+	private Environment env;
+	
+	@Autowired
+	private TsaRendererService rendererService;
+	
+	@Autowired
+	private TsaOrderService orderService;
+	
+	//@Autowired
+	//private TsaMessageByLocale message;
+	
+	/**
+	 * 주문 조회 화면
+	 *
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2020. 11. 16
+	 */
+	@GetMapping("/list/form")
+	public ModelAndView orderListForm() {
+		ModelAndView mav = new ModelAndView();
+		
+		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"));		// 주문변경요청상태코드
+		mav.addObject("chgGbList"		, rendererService.getAvailCommonCodeList("G680"));		// 주문변경구분코드
+		mav.addObject("payMeansList"	, rendererService.getAvailCommonCodeList("G014"));		// 결제수단
+		mav.addObject("siteCdList"		, rendererService.getAvailCommonCodeList("G000"));		// 사이트구분
+		mav.addObject("formalGbList"	, rendererService.getAvailCommonCodeList("G009"));		// 정상/이월
+
+		mav.setViewName("order/OrderListForm");
+
+		return mav;
+	}
+	
+	/**
+	 * 주문 목록
+	 *
+	 * @param order - 주문정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 16
+	 */
+	@PostMapping("/list")
+	@ResponseBody
+	public Collection<Order> getOrderList(@RequestBody Order order) throws Exception {		
+		Collection<Order> orderList = orderService.getOrderList(order); 
+		return orderList;
+	}
+	
+	/**
+	 * 주문 목록
+	 *
+	 * @param order - 주문정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 16
+	 */
+	@PostMapping("/excel/search")
+	@ResponseBody
+	public Collection<Order> getOrderListSearchExcel(@RequestBody Order order) throws Exception {
+		ObjectMapper mapper = new ObjectMapper();
+		
+		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "");
+		String[] cellName = new String[1];
+		
+		// DB 처리 시 사용되는 파라미터명(셀명) 설정
+		cellName[0] = "ordNo";
+		Collection<GagaMap> dataList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()), 0, cellName);
+		
+		Order searchOrder = new Order();
+		int[] ordNoList = new int[dataList.size()];
+		int cnt = 0;
+		
+		for (GagaMap map : dataList) {
+			Order tmpOrder = mapper.convertValue(map, Order.class);
+			ordNoList[cnt] = tmpOrder.getOrdNo();
+			cnt++;
+		}
+		
+		searchOrder.setOrdNoList(ordNoList);
+		Collection<Order> orderList = orderService.getOrderList(searchOrder);
+		
+		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()));
+ 
+		return orderList;
+	}
+	
+	/**
+	 * 주문 목록 합산
+	 *
+	 * @param order - 주문정보
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2020. 11. 16
+	 */
+	@PostMapping("/list/sum/info")
+	@ResponseBody
+	public Order getOrderListSumInfo(@RequestBody Order order) {
+		return orderService.getOrderListSumInfo(order);
+	}
+
+	/**
+	 * 주문상세 화면
+	 * 
+	 * @param ordNo - 주문번호
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2020. 11. 26
+	 */
+	@GetMapping("/detail/info")
+	@ResponseBody
+	public ModelAndView orderDetailForm(@RequestParam(value = "ordNo") int ordNo) {
+		ModelAndView mav = new ModelAndView();
+		
+		Order order = new Order();
+		order.setOrdNo(ordNo);
+		
+		mav.addObject("ordNo"					, ordNo);												// 주문번호
+		mav.addObject("orderInfo"				, orderService.getOrderInfoList(order));				// 기본정보
+		mav.addObject("orderGoodsInfo"			, orderService.getOrderDetailList(order));				// 상품정보
+		mav.addObject("orderGoodsInfo"			, orderService.getOrderDetailItemList(order));			// 상품단품정보
+		mav.addObject("orderDeliveryAddrInfo"	, orderService.getDeliveryAddrList(order));				// 배송정보
+		mav.addObject("orderPaymentInfo"		, orderService.getOrderPaymentBasicInfoList(order));	// 결제정보
+		mav.addObject("orderDeliveryFeeInfo"	, orderService.getDeliveryFeeList(order));				// 배송비정보
+		mav.addObject("orderChangeInfo"			, orderService.getOrderChangeList(order));				// 취소/반품/교환요청 정보
+		mav.addObject("orderRefundInfo"			, orderService.orderRefundInfo(order));					// 환불정보
+		mav.addObject("orderCounselInfo"		, orderService.orderCounselInfo(order));				// 상담내역
+		mav.addObject("orderAdminMemoInfo"		, orderService.getOrderTsainMemoList(order));			// 관리자메모
+		
+		mav.addObject("siteCdList"				, rendererService.getAvailCommonCodeList("G000"));		// 사이트구분
+		mav.addObject("bankList"				, rendererService.getCommonCodeList("G940"));			// 계좌목록
+
+		mav.setViewName("order/OrderDetailForm");
+		
+		return mav;
+	}
+	
+	/**
+	 * 입점업체미발주목록조회
+	 *
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2020. 11. 30
+	 */
+	@GetMapping("/seller/unorder/list/form")
+	public ModelAndView orderSellerUnorderListForm() {
+		ModelAndView mav = new ModelAndView();
+				
+		mav.addObject("supplyCompList"	, rendererService.getSupplyCompanyList());				// 공급업제목록
+		mav.addObject("ordStatList"		, rendererService.getAvailCommonCodeList("G012"));		// 주문상태코드
+		mav.addObject("ordDtlStatList"	, rendererService.getAvailCommonCodeList("G013"));		// 주문상세상태코드
+		mav.addObject("shipCompanyList"	, rendererService.getShipCompanyList());				// 택배사 목록
+
+		mav.setViewName("order/OrderSellerListForm");
+
+		return mav;
+	}
+	
+	/**
+	 * 입점업체미발주 주문목록
+	 *
+	 * @param order - 주문정보
+	 * @return Collection<TsaOrder>
+	 * @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 Daehyoung
+	 * @since 2020. 02. 25
+	 */
+	@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. 11. 16
+	 */
+	@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(TsaSession.getInfo().getUserNo());
+		order.setSearch("EXCEL");
+
+		orderService.geSellerUnorderExcelList(order, excelFilePath);
+		
+		return GagaFileUtil.writeFile(request, excelFilePath);
+	}
+	
+	/**
+	 * 입점 송장 엑셀 업로드
+	 *
+	 * @param order - 주문정보
+	 * @return GagaMap
+	 * @throws Exception - exception
+	 * @author eskim
+	 * @since 2020. 09. 16
+	 */
+	@PostMapping("/seller/unorder/invoice/excelupload/save")
+	@ResponseBody
+	public GagaMap saveSellerUnorderInvoiceExcelupload(@RequestBody Order order) throws Exception {
+
+		ObjectMapper mapper = new ObjectMapper();
+
+		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
+		
+		// DB 처리 시 사용되는 파라미터명(셀명) 설정
+		String[] cellName = {"ordNo", "ordDtlNo", "goodsCd", "optCd2", "ordQty", "shipCompCd", "invoiceNo"};
+		Collection<GagaMap> ecxelList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()), 0, cellName, 0);
+
+		Collection<Order> orderList = new ArrayList<>();
+		for (GagaMap map : ecxelList) {
+			Order tmpGoods = mapper.convertValue(map, Order.class);
+			orderList.add(tmpGoods);
+		}
+
+		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("실패 했습니다.");
+		}
+
+		String result = orderService.saveUnorderInvoice(orderList);
+		GagaMap map = new GagaMap();
+		map.set("msg", result);
+
+		// 파일 삭제
+		GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, order.getExcelFileNm()));
+
+		return map;
+
+	}
+	
+}
+
+
+
+
+
+
+
+
+
+

+ 234 - 0
style24.admin/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;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 18 - 0
style24.admin/src/main/java/com/style24/persistence/domain/OrderDetailForm.html

@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDetailForm.html
+ * @desc    : 주문정보상세 Page (주문내역)
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+
+</html>

+ 900 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -0,0 +1,900 @@
+<?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.admin.biz.dao.TsaOrderDao">
+
+	<!-- 주문목록 -->
+	<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
+		<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="multiOrdStat != null and multiOrdStat != ''">
+        AND    OD.ORD_DTL_STAT IN
+			<foreach collection="multiOrdStat" 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
+			<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="multiOrdStat != null and multiOrdStat != ''">
+	        AND    OD.ORD_DTL_STAT IN
+				<foreach collection="multiOrdStat" 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 
+		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
+		WHERE  OD.SUPPLY_COMP_CD = 'S0001'
+		<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="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
+		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 = 'S0001'
+	</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>
+
+
+
+
+
+
+
+
+

+ 72 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/wms/TsaAnswerPhase.xml

@@ -0,0 +1,72 @@
+<?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.admin.biz.dao.TsaAnswerPhaseDao">
+
+	<!-- 답변문구 목록 -->
+	<select id="getAnswerPhaseList" parameterType="AnswerPhase" resultType="AnswerPhase">
+		/* TsaAnswerPhase.getAnswerPhaseList */
+		 SELECT SITE_CD                                      /*사이트코드*/
+		      , ANS_SQ                                       /*답변일련번호*/
+		      , ANS_CLSF                                     /*답변종류코드*/
+		      , ANS_TITLE                                    /*답변제목*/
+		      , ANS_CONTENT                                  /*답변내용*/
+		      , USE_YN                                       /*사용여부*/
+		      , FN_GET_USER_NM(REG_NO)             AS REG_NM /*등록자*/
+		      , DATE_FORMAT(REG_DT,'%Y%m%d%H%i%S') AS REG_DT /*등록일자*/
+		      , FN_GET_USER_NM(UPD_NO)             AS UPD_NM /*수정자*/
+		      , DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT /*수정일자*/
+		FROM    TB_ANS_PHASE
+		WHERE   1 = 1
+		<if test="siteCd != null and siteCd != ''">
+		AND     SITE_CD = #{siteCd}
+		</if>
+		<if test="ansClsf != null and ansClsf != ''">
+		AND     ANS_CLSF = #{ansClsf}
+		</if>
+		<if test="useYn != null and useYn != ''">
+		AND     USE_YN = #{useYn}
+		</if>
+		<if test="ansTitle != null and ansTitle != ''">
+		AND     ANS_TITLE LIKE CONCAT('%',#{ansTitle},'%')
+		</if>
+		ORDER   BY SITE_CD, ANS_CLSF, ANS_SQ
+	</select>
+
+	<!-- 기본답변문구 등록/수정 -->
+	<insert id="saveAnswerPhase" parameterType="AnswerPhase">
+		/* TsaAnswerPhase.saveAnswerPhase */
+		INSERT INTO TB_ANS_PHASE (
+		       ANS_SQ
+		     , ANS_CLSF
+		     , SITE_CD
+		     , ANS_TITLE
+		     , ANS_CONTENT
+		     , USE_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       NULL
+		     , #{ansClsf}
+		     , #{siteCd}
+		     , #{ansTitle}
+		     , #{ansContent}
+		     , #{useYn}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       SITE_CD = #{siteCd}
+		     , ANS_CLSF = #{ansClsf}
+		     , ANS_TITLE = #{ansTitle}
+		     , ANS_CONTENT = #{ansContent}
+		     , USE_YN = #{useYn}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
+
+</mapper>

+ 1 - 1
style24.admin/src/main/resources/log/logback-locd.xml

@@ -2,7 +2,7 @@
 
 <configuration scan="true">
 	<property name="LOG_HOME" value="/WIDE/workspace/logs/style24/admin"/>
-	<property name="LOG_LEVEL" value="INFO"/>
+	<property name="LOG_LEVEL" value="DEBUG"/>
 	
 	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
 		<encoder>

+ 362 - 0
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -0,0 +1,362 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderListForm.html
+ * @desc    : 주문목록 Page
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1500"> <!-- data-width="1500" data-height="870" -->
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>주문상세내역</h2>
+			<button type="button" class="close" onclick="fnOrderDetailClose()"><i class="fa fa-times"></i></button>
+			
+			<div class="panelContent">
+				<form id="orderDetailInfo" name="orderDetailInfo" action="#" th:method="post">
+					<input type="hidden" name="custNo"/>
+					<input type="hidden" name="orderNm"/>
+					<input type="hidden" name="orderPhnno"/>
+					<input type="hidden" name="orderEmail"/>
+					
+					<h4>기본정보</h4>
+					<div id="gridOrderInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+					
+					<h4>주문상품정보</h4>
+					<div id="gridOrderGoodsInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+				</form>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+var ordNo 					= [[${ordNo}]];						// 주문번호
+var orderInfo 				= [[${orderInfo}]];					// 기본정보
+var orderGoodsInfo 			= [[${orderGoodsInfo}]];			// 주문상세정보
+//var orderPaymentInfo 		= [[${orderPaymentInfo}]];			// 결제정보
+//var orderDeliveryFeeInfo = [[${orderDeliveryFeeInfo}]];		// 배송비정보
+//var orderChangeInfo = [[${orderChangeInfo}]];				// 취소/반품/교환요청 정보
+//var orderRefundInfo = [[${orderRefundInfo}]];				// 환불정보
+//var orderCounselInfo = [[${orderCounselInfo}]];				// 상담내역
+//var orderAdminMemoInfo = [[${orderAdminMemoInfo}]];			// 관리자메모
+//var orderRfAccountInfo = [[${orderRfAccountInfo}]];			// 환불계좌정보
+//var siteCdList = cfnConvertToArray([[${siteCdList}]]);
+//var bankList = cfnConvertToArray([[${bankList}]]);			// 은행코드
+
+// 쿠폰,포인트,적립금 컬럼배경색설정
+//var goodsCpnDcAmtClass = (orderGoodsInfo[0].goodsCpnDcAmt > 0) ? 'bgPink' : 'text-right';
+//var cartCpnDcAmtClass = (orderGoodsInfo[0].cartCpnDcAmt > 0) ? 'bgPink' : 'text-right';
+//var plusCpnDcAmtClass = (orderGoodsInfo[0].plusCpnDcAmt > 0) ? 'bgPink' : 'text-right';
+//var pntDcAmtClass = (orderGoodsInfo[0].pntDcAmt > 0) ? 'bgPink' : 'text-right';
+//var prePntDcAmtClass = (orderGoodsInfo[0].prePntDcAmt > 0) ? 'bgPink' : 'text-right';
+//var savePntAmtClass = (orderGoodsInfo[0].savePntAmt > 0) ? 'bgSky' : 'text-right';
+//var custNo = orderInfo[0].custNo;
+//var payMeans = orderInfo[0].payMeans;
+//var mallGb = orderInfo[0].mallGb;
+</script>
+
+<!-- AgGrid 컬럼 세팅 -->
+<script>
+// 1.주문기본정보 그리드 바인딩
+var columnDefsOrderInfo = [
+	{
+		headerName			: "사이트"
+		, field				: "siteCd"
+		, width				: 100
+		, cellClass			: 'text-center'
+		, valueFormatter: function (params) {
+			return gagaAgGrid.lookupValue(siteCdList, params.value);
+		}
+	},
+	{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				: "custNo"
+		, width				: 100
+		, cellClass			: 'text-center'
+		, valueFormatter	: function (params) {
+			return (params.data.mallGb == '20') ? '' : params.value;
+		}
+	},
+	{headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center'},
+	{
+		headerName			: "이메일"
+		, field				: "orderEmail"
+		, width				: 240
+		, cellClass			: 'text-center'
+		, cellRenderer		: function (params) {
+			return params.value ? params.value + '&nbsp&nbsp<button type="button" class="btn btn-success" onclick="fnOpenEmailForm(\'' + params.data.orderEmail + '\',\'' + params.data.orderNm + '\',\'' + params.data.custNo + '\');"> 메일발송 </button>' : '';
+		}
+	},
+	{
+		headerName			: "핸드폰번호"
+		, field				: "orderPhnno"
+		, width				: 220
+		, cellClass			: 'text-center'
+		, cellRenderer		: function (params) {
+			return params.value + '&nbsp&nbsp<button type="button" class="btn btn-success" onclick="fnOpenLmsForm(\'' + params.data.orderPhnno + '\',\'' + params.data.custNo + '\');"> LMS발송 </button>';
+		}
+	},
+	{headerName: "회원구분"	, field: "custGbNm"		, width: 80		, cellClass: 'text-center'},
+	{headerName: "관리대상"	, field: "managedRsn"	, width: 80		, cellClass: 'text-center'},
+	{headerName: "등급"		, field: "custGradeNm"	, width: 80		, cellClass: 'text-center'}
+];
+var gridOptionsOrderInfo = gagaAgGrid.getGridOptions(columnDefsOrderInfo);
+
+// 2.상품별 상세정보
+var columnDefsGoodsInfo = [
+	{
+		headerName	: "상품정보",
+		children	: [
+			{headerName: "상품코드"	, field: "goodsCd"		, 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: "sizeCd"		, width: 60, cellClass: 'text-center'},
+			{headerName: "칼라"		, field: "goodsColorNm"	, width: 90, cellClass: 'text-center'}
+		]
+	},
+	{
+		headerName	: "수량",
+		children	: [
+			{headerName: "주문"		, field: "ordQty"		, width: 40, cellClass: 'text-center'},
+			{headerName: "취소"		, field: "cnclRtnQty"	, width: 40, cellClass: 'text-center'}
+		]
+	},
+	{
+		headerName	: "쿠폰",
+		children	: [
+			{
+				headerName		: "상품"
+				, field			: "goodsCpnDcAmt"
+				, width			: 70
+				, cellClass		: 'text-right' //goodsCpnDcAmtClass
+				, cellRenderer: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "장바구니"
+				, field			: "cartCpnDcAmt"
+				, width			: 70
+				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "포인트",
+		children	: [
+			{
+				headerName		: "사용"
+				, field			: "pntDcAmt"
+				, width			: 60
+				, cellClass		: 'text-right' //pntDcAmtClass
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "즉시사용"
+				, field			: "prePntDcAmt"
+				, width			: 60
+				, cellClass		: 'text-right' //prePntDcAmtClass
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "적립"
+				, field			: "savePntAmt"
+				, width			: 60
+				, cellClass		: 'text-right' //savePntAmtClass
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "금액(원/단위)",
+		children	: [
+			{
+				headerName		: "판매"
+				, field			: "ordAmt"
+				, width			: 70
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제"
+				, field			: "realOrdAmt"
+				, width			: 70
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"
+				, field			: "cnclRtnAmt"
+				, width			: 70
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			},
+		]
+	},
+	{
+		headerName		: "주문상세상태"
+		, field			: "ordDtlStatNm"
+		, width			: 150
+		, cellClass		: 'text-left'
+		, cellRenderer	: function (params) {
+			var retVal = "";
+			retVal += (params.data.cancelRequestQty > 0) ? " 취" + params.data.cancelRequestQty : "";
+			retVal += (params.data.returnRequestQty > 0) ? " 반" + params.data.returnRequestQty : "";
+			retVal += (params.data.exchangeRequestQty > 0) ? " 교" + params.data.exchangeRequestQty : "";
+			
+			if (!gagajf.isNull(retVal)) retVal = "-" + retVal;
+				return "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailChangeHst('" + params.data.ordDtlNo + "');\">" + params.value + retVal + "</a>";
+		}
+	},
+	{headerName: "결품", field: "soldoutYn", width: 60, cellClass: 'text-center'},
+	{
+		headerName	: "배송",
+		children	: [
+			{
+				headerName		: "송장번호"
+				, field			: "invoiceNo"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var retStr = '';
+					if (!gagajf.isNull(params.value)) retStr = '<a href="javascript:void(0);" onclick="fnSearchDelivery(\'' + params.data.trackingUrl + '\',\'' + params.data.invoiceNo + '\');">' + params.value + '</a>';
+					return retStr;
+				}
+			},
+			{headerName: "출고처", field: "delvLocNm", width: 120, cellClass: 'text-center'},
+			{
+				headerName		: "배송지번호"
+				, field			: "delvAddrSq"
+				, width			: 70
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnBindDeliveryAddr('" + params.value + "');\">" + params.value + "</a>";
+				}
+			},
+			{headerName: "물류비고", field: "dstrbtNote", width: 180, cellClass: 'text-center'},
+			{
+				headerName: "구매확정철회"
+				, field: "ordDtlNo"
+				, width: 180
+				, cellClass: 'text-center'
+				, cellRenderer: function (params) {
+					var retVal = "";
+					
+					if ('70' === params.data.ordDtlStat) {
+						retVal = '<button type=\"button\" class=\"btn btn-danger\" onclick=\"fnChangedCompleteDelivery(\'' + params.data.ordNo + '\',\'' + params.data.ordDtlNo + '\',\'' + params.data.ordDtlStat + '\');\">구매확정철회</button>';
+					}
+					return retVal;
+				}
+			}
+		]
+	}
+];
+var gridOptionsGoodsInfo = gagaAgGrid.getGridOptions(columnDefsGoodsInfo);
+</script>
+
+<script>
+var fnSetGridHeightInit = function () {
+	if (_windowWidth < 1780) {
+		_girdRowH1 = 33 + _scrollH;
+		_girdRowH2 = 80 + _scrollH;
+	} else {
+		_girdRowH1 = 33
+		_girdRowH2 = 80;
+	}
+	
+	$('#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);
+	//if (orderDeliveryFeeInfo != null && orderDeliveryFeeInfo.length > 0) $('#gridDeliveryFeeInfo').css('height', _girdRowH1 + _girdRowH * orderDeliveryFeeInfo.length);
+	//if (orderChangeInfo != null && orderChangeInfo.length > 0) $('#gridOrderChangeInfo').css('height', _girdRowH1 + _girdRowH * orderChangeInfo.length);
+	//if (orderRefundInfo != null && orderRefundInfo.length > 0) $('#gridOrderRefundInfo').css('height', _girdRowH1 + _girdRowH * orderRefundInfo.length);
+	//if (orderCounselInfo != null && orderCounselInfo.length > 0) $('#gridOrderCounselInfo').css('height', _girdRowH1 + _girdRowH * orderCounselInfo.length);
+	//if (orderAdminMemoInfo != null && orderAdminMemoInfo.length > 0) $('#gridOrderMemoInfo').css('height', _girdRowH1 + _girdRowH * orderAdminMemoInfo.length);
+	//if (orderRfAccountInfo != null && orderRfAccountInfo.length > 0) $('#gridOptionsRefundAccountInfo').css('height', _girdRowH1 + _girdRowH * orderRfAccountInfo.length);
+}
+</script>
+
+<!-- 버튼 이벤트 바인딩 -->
+<script>
+var _windowWidth = $(window).width();		/* 위도우창 넓이 */
+var _girdRowH = 33;							/* 그리드 Row 줄 높이 */
+var _girdRowH1 = 33;						/* 그리드 타이틀 1줄 짜리 높이*/
+var _girdRowH2 = 62;						/* 그리드 타이틀 2줄 짜리 높이*/
+var _scrollH = 27;							/* 가로스크롤bar 높이 */
+
+$(window).resize(function () {
+	_windowWidth = $(window).width();
+	fnSetGridHeightInit();
+});
+
+</script>
+<!-- AgGrid 생성 -->
+<script>
+$(document).ready(function () {
+	gagaAgGrid.createGrid('gridOrderInfo'			, gridOptionsOrderInfo);
+	gagaAgGrid.createGrid('gridOrderGoodsInfo'		, gridOptionsGoodsInfo);
+	
+	// 그리드 데이터 바인딩
+	gridOptionsOrderInfo.api.setRowData(orderInfo);							// 기본정보
+	gridOptionsGoodsInfo.api.setRowData(orderGoodsInfo);					// 상품정보
+	//gridOptionsPaymentInfo.api.setRowData(orderPaymentInfo);				// 결제정보
+	//gridOptionsDeliveryFeeInfo.api.setRowData(orderDeliveryFeeInfo);		// 배송비정보
+	//gridOptionsOrderChangeInfo.api.setRowData(orderChangeInfo);				// 취소/반품/교환요청 정보
+	//gridOptionsRefundInfo.api.setRowData(orderRefundInfo);					// 환불정보
+	//gridOptionsOrderCounselInfo.api.setRowData(orderCounselInfo);			// 상담내역
+	//gridOptionsOrderMemoInfo.api.setRowData(orderAdminMemoInfo);			// 관리자메모
+	//gridOptionsRefundAccountInfo.api.setRowData(orderRfAccountInfo);		// 환불계좌정보
+	
+	// 그리드 높이 설정
+	fnSetGridHeightInit();
+});
+
+$(document).ready(function () {
+	$('#orderDetailContents').css("width", "97%").css("height", "96%");
+});
+</script>
+</html>
+
+
+
+
+

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

@@ -0,0 +1,815 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderListForm.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/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>사이트</th>
+						<td>
+							<select name="siteCd">
+								<option value="">[전체]</option>
+								<option th:if="${siteCdList}" th:each="oneData, status : ${siteCdList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>몰구분</th>
+						<td>
+							<select name="mallCd">
+								<option value="">[전체]</option>
+								<option th:if="${mallGbList}" th:each="oneData, status : ${mallGbList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>업체/브랜드<em class="required" title="필수"></em></th>
+						<td colspan="3">
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="Y"  checked/>자사</label>
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="N"/>입점</label>
+							<select name="supplyCompCd" id="supplyCompCd">
+								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</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>
+							<div class="multiCheckBox" style="width:200px">
+								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
+								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
+									<li th:if="${ordStatList}" th:each="oneData, status : ${ordStatList}">
+										<label class="chkBox">
+											<input type="checkbox" name="multiOrdStat" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|">
+										</label>
+									</li>
+								</ul>
+							</div>
+						</td>
+						<th>주문상세상태</th>
+						<td colspan="3">
+							<div class="multiCheckBox" style="width:270px">
+								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
+								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
+									<li th:if="${ordDtlStatList}" th:each="oneData, status : ${ordDtlStatList}">
+										<label class="chkBox">
+											<input type="checkbox" name="multiOrdDtlStat" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|">
+										</label>
+									</li>
+								</ul>
+							</div>
+						</td>
+						<th rowspan="5">키워드<i class="star"></i></th>
+						<td rowspan="5">
+							<select name="search" id="search">
+								<option value="searchOrdNo">주문번호</option>
+								<option value="searchExtmallOrderId">외부몰주문번호</option>
+							</select>
+							<textarea class="textareaR3 w70p" name="condition" id="condition"></textarea>
+						</td>
+					</tr>
+					<tr>
+						<th>@변경구분</th>
+						<td>
+							<select name="chgGb">
+								<option value="">[전체]</option>
+								<option th:if="${chgGbList}" th:each="oneData, status : ${chgGbList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>변경요청처리상태</th>
+						<td>
+							<select name="chgStat">
+								<option value="">[전체]</option>
+								<option value="9999">[품절취소]</option>
+								<option th:if="${chgStatList}" th:each="oneData, status : ${chgStatList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>결제수단</th>
+						<td>
+							<select name="payMeans">
+								<option value="">[전체]</option>
+								<option th:if="${payMeansList}" th:each="oneData, status : ${payMeansList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>주문자명</th>
+						<td>
+							<input type="text" name="orderNm" placeholder="" maxlength="20"/>
+						</td>
+						<th>고객ID</th>
+						<td>
+							<input type="text" name="custId" placeholder="" maxlength="20"/>
+						</td>
+						<th>주문자휴대폰번호</th>
+						<td>
+							<input type="text" name="orderPhnno" placeholder="" maxlength="20"/>
+						</td>
+					</tr>
+					<tr>
+						<th>상품코드</th>
+						<td>
+							<input type="text" name="goodsCd" placeholder="" maxlength="20"/>
+						</td>
+						<th>사이즈</th>
+						<td>
+							<input type="text" name="sizeCd" placeholder="" maxlength="20"/>
+						</td>
+						<th>단품명</th>
+						<td>
+							<input type="text" name="goodsNm" placeholder="" maxlength="20"/>
+						</td>
+					</tr>
+					<tr>
+						<th>수취인명</th>
+						<td>
+							<input type="text" name="recipNm" placeholder="" maxlength="20"/>
+						</td>
+						<th>송장번호</th>
+						<td>
+							<input type="text" name="invoiceNo" placeholder="" maxlength="20"/>
+						</td>
+						<th>회수지시전송여부</th>
+						<td>
+							<select name="wdInvoiceSendYn" class="w150">
+								<option value="">전체</option>
+								<option value="Y">전송</option>
+								<option value="N">미전송</option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>조회일자</th>
+						<td colspan="7">
+							<select name="searchDateGb">
+								<option value="ordDt">주문일자</option>
+								<option value="delvStdt">출고일자</option>
+								<option value="cnclReqDt">@취소요청일자</option>
+								<option value="changReqDt">@교환요청일자</option>
+								<option value="rtnReqDt">@반품요청일자</option>
+								<option value="soldoutDt">품절일자</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-base btn-lg" id="btnSearchExcel">엑셀조회</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="fnOrderExcelList();">엑셀다운로드</button>
+					<span style="margin-left:10px;">
+						주문금액 : <strong><span id="sumOrdAmt">0</span></strong>&nbsp;
+						판매금액 : <strong><span id="sumOrdCnclAmt">0</span></strong>&nbsp;
+						실결제금액 : <strong><span id="sumRealPayAmt">0</span></strong>&nbsp;
+						주문건수  : <strong><span id="ordNoCnt">0</span></strong>&nbsp;
+						주문수량  : <strong><span id="sumOrdQty">0</span></strong>&nbsp;
+						판매수량  : <strong><span id="sumOrdCnclQty">0</span></strong>&nbsp;
+					</span>
+				</li>
+				<li class="aR">
+					검색결과 : <strong><span id="rowCntOrderList">0</span> 건</strong>&nbsp;
+				</li>
+			</ul>
+			
+			<div class="panelContent" style="overflow: hidden;">
+				<div id="gridOrderList" style="width: 100%; height: 700px;" class="ag-theme-balham lh60"></div>
+			</div>
+		</div>
+
+	</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 siteCdList 		= gagajf.convertToArray([[${siteCdList}]]);
+var mallGbList 		= gagajf.convertToArray([[${mallGbList}]]);
+var ordStatList 	= gagajf.convertToArray([[${ordStatList}]]);
+var ordDtlStatList 	= gagajf.convertToArray([[${ordDtlStatList}]]);
+var payMeansList 	= gagajf.convertToArray([[${payMeansList}]]);
+//var vendorList 		= gagajf.convertToArray([[${vendorList}]]);
+//var goodsTypeList 	= gagajf.convertToArray([[${goodsTypeList}]]);
+var chgStatList 	= gagajf.convertToArray([[${chgStatList}]]);
+var chgGbList 		= gagajf.convertToArray([[${chgGbList}]]);
+var formalGbList 	= gagajf.convertToArray([[${formalGbList}]]);
+var frontGbList 	= {'P': 'PC', 'M': 'MO'};
+var uploadGoodsUrl 	= [[${@environment.getProperty('upload.goods.view')}]];
+
+var columnDefsOrderList = [
+	{
+		headerName	: "주문기본정보"
+		, cellClass	: 'text-center'
+		, children	: [
+			{
+				headerName		: "주문번호"
+				, field			: 'ordNo'
+				, width			: 75
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, cellRenderer	: function (params) {
+					var roleCd = [[${sessionInfo.roleCd}]];
+					if (!roleCd.startsWith("C")) {
+						return "<a href=\"javascript:void(0);\" onclick=\"fnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
+					} else {
+						return params.value;
+					}
+				}
+			},
+			{
+				headerName		: "주문자"
+				, field			: "ordNm"
+				, width			: 120
+				, cellClass		: 'text-left'
+				, sortable		: true
+				, cellRenderer	: function (params) {
+					var custNo = '';
+					if (!gagajf.isNull(params.data.custNo)) {
+						custNo = params.data.custNo;
+					}
+					
+					var roleCd = [[${sessionInfo.roleCd}]];
+					if (!roleCd.startsWith("C") && !gagajf.isNull(params.data.custNo)  && params.data.mallGb === '10' ) {
+						return '<a href="javascript:void(0);" onclick=\"cfnOpenCustDetailPopup(' + params.data.custNo + ');\">' + params.value + '(' + custNo + ')' + '</a>';
+					} else {
+						return params.value + '(' + custNo + ')';
+					}
+				}
+			},
+			{headerName: "고객고유번호"	, field: "custNo"		, width: 120, cellClass: 'text-center', hide: true},
+			{headerName: "외부몰"		, field: "extmallNm"	, width: 100, cellClass: 'text-center', sortable: true},
+			{headerName: "휴대폰번호"	, field: "orderPhnno"	, width: 120, cellClass: 'text-center', hide: true},
+			{
+				headerName		: "사사이트"
+				, field			: "siteCd"
+				, width			: 80
+				, cellClass		: 'text-center'
+				, hide			: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(siteCdList, params.data.siteCd); 
+				}
+			},
+			{
+				headerName		: "프론트"
+				, field			: "frontGb"
+				, width			: 80
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(frontGbList, params.data.frontGb); 
+				}
+			},
+			{
+				headerName		: "몰구분"
+				, field			: "mallGb"
+				, width			: 60
+				, cellClass		: 'text-center'
+				, hide			: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(mallGbList, params.data.mallGb); 
+				}
+			},
+			{
+				headerName		: "주문일시"
+				, field			: "ordDt"
+				, width			: 140
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.ordDt); 
+				}
+			},
+			{
+				headerName		: "결제수단"
+				, field			: "payMeans"
+				, width			: 110
+				, cellClass		: 'text-center'
+				, hide			: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(payMeansList, params.data.payMeans); 
+				}
+			},
+			{
+				headerName		: "신규/교환"
+				, field			: "ordExchGb"
+				, width			: 100
+				, cellClass		: 'text-center',
+				valueGetter 	: function (params) {
+					return params.data.ordExchGb === 'O' ? '신규' : '교환';
+				}
+			},
+			{
+				headerName		: "주문상세상태"
+				, field			: "ordDtlStat"
+				, width			: 140
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, valueGetter	: function (params) {
+					var ordDtlStat = gagaAgGrid.lookupValue(ordDtlStatList, params.data.ordDtlStat);
+					var chgStat='';
+					if (params.data.ordDtlStat === '99') {
+						chgStat = gagaAgGrid.lookupValue(chgStatList, params.data.chgStat);
+						if (!gagajf.isNull(chgStat)) {
+							chgStat = chgStat.substr(0, 2);
+							if (params.data.soldoutYn === 'Y') {
+								chgStat = '품절';
+							}
+							ordDtlStat = ordDtlStat + '-' + chgStat;
+						}
+
+					}
+					return ordDtlStat;
+				}
+			},
+			{headerName: "출고처", field: "delvLocNm", width: 110, cellClass: 'text-center', sortable: true},
+		]
+	},
+	{
+		headerName	: "주문상품정보"
+		, cellClass	: 'text-center'
+		, children	: [
+			{
+				headerName		: "이미지"
+				, field			: "imgPath1"
+				, width			: 70
+				, height		: 60
+				, cellClass		: 'text-center'
+				, cellRenderer	: function(params) {
+					if (params.data.imgType == "A") {
+						if (!gagajf.isNull(params.data.imgPath6)) {
+							return '<img width="60" src="' + uploadGoodsUrl + params.data.imgPath6.replace("/1000/","/100/") + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+						} else {
+							return '<img width="60" src="' + uploadGoodsUrl + params.value.replace("/1000/","/100/") + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+						}
+					} else {
+						if (!gagajf.isNull(params.data.imgPath6)) {
+							return '<img width="60" src="' + params.data.imgPath1 + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+						} else {
+							return '<img width="60" src="' + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+						}
+					}
+				}
+			},
+			{headerName: "브랜드"		, field: "brandEnm"		, width: 130, cellClass: 'text-center', sortable: true},
+			{
+				headerName		: "상품코드"
+				, field			: "goodsCd"
+				, width			: 130
+				, cellClass		: 'text-center'
+				, sortable		: true
+				, cellRenderer: function (params) {
+					var roleCd = [[${sessionInfo.roleCd}]];
+					if (!roleCd.startsWith("C")) {
+						return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenGoodsDetailPopup('U','" + params.value + "');\">" + params.value + "</a>";
+					} else {
+						return params.value;
+					}
+				}
+			},
+			{headerName: "색상"		, field: "optCd1"		, width: 100	, cellClass: 'text-center'	, sortable: true},
+			{headerName: "사이즈"		, field: "optCd2"		, width: 60		, cellClass: 'text-center'	, sortable: true},
+			{headerName: "단품명"		, field: "goodsNm"		, width: 200	, cellClass: 'text-left'	, sortable: true},
+			{headerName: "구성유형"	, field: "goodsTypeNm"	, width: 200	, cellClass: 'text-left'	, sortable: true},
+			{
+				headerName		: "외부몰벤더"
+				, field			: "vendorId"
+				, width			: 110
+				, cellClass		: 'text-center'
+				, hide			: true
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(vendorList, params.data.vendorId); 
+				}
+			},
+			{headerName: "외부몰주문번호"	, field: "extmallOrderId"	, width: 150, cellClass: 'textFormat', sortable: true},
+			{headerName: "외부몰부주문번호"	, field: "agentOrderId"		, width: 120, cellClass: 'textFormat', sortable: true},
+			{
+				headerName		: "주문수량"
+				, field			: "ordQty"
+				, width			: 80
+				, cellClass		: 'text-center'
+				, valueGetter: function (params) { 
+					return params.data.ordQty.addComma(); 
+				}
+			},
+			{
+				headerName		: "취소수량"
+				, field			: "cnclRtnQty"
+				, width			: 80
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return params.data.cnclRtnQty.addComma(); 
+				}
+			},
+			{
+				headerName		: "주문금액"
+				, field			: "ordAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueGetter	: function (params) { 
+					return params.data.ordAmt.addComma(); 
+				}
+			},
+			{
+				headerName		: "취소반품금액"
+				, field			: "cnclRtnAmt"
+				, width			: 120
+				, cellClass		: 'text-right'
+				, valueGetter	: function (params) { 
+					return params.data.cnclRtnAmt.addComma(); 
+				}
+			},
+			{
+				headerName		: "총할인금액"
+				, field			: "totDcAmt"
+				, width			: 120
+				, cellClass		: 'text-right'
+				, valueGetter: function (params) { 
+					return params.data.totDcAmt.addComma(); 
+				}
+			},
+			{
+				headerName		: "실판매금액"
+				, field			: "realOrdAmt"
+				, width			: 100
+				, cellClass		: 'text-right'
+				, valueGetter	: function (params) { 
+					return params.data.realOrdAmt.addComma(); 
+				}
+			},
+			{headerName: "단품코드"	, field: "itemCd"			, width: 130, cellClass: 'text-center', sortable: true},
+			{headerName: "원코드"		, field: "supplyGoodsCd"	, width: 130, cellClass: 'text-center', sortable: true},
+			{
+				headerName		: "정상/이월"
+				, field			: "formalGb"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, sortable		: true 
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(formalGbList, params.data.formalGb); 
+				}
+			},
+			{
+				headerName		: "출고처지정일시"
+				, field			: "delvAssignDt"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.delvAssignDt); 
+				}
+			},
+			{
+				headerName		: "송장출력일시"
+				, field			: "invoiceDt"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.invoiceDt); 
+				}
+			},
+			{headerName: "출고택배사"		, field: "shipCompNm"	, width: 150, cellClass: 'text-center'},
+			{headerName: "출고송장"		, field: "invoiceNo"	, width: 150, cellClass: 'text-center'},
+			{
+				headerName		: "출고일시"
+				, field			: "delvResDt"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, valueGetter: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.delvResDt); 
+				}
+			},
+			{headerName: "품절여부"		, field: "soldoutYn"	, width: 90		, cellClass: 'text-center', sortable: true},
+			{headerName: "품절메모"		, field: "soldoutMemo"	, width: 120	, cellClass: 'text-left'},
+			{
+				headerName		: "품절일시"
+				, field			: "soldoutRegDt"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.toDateTimeFormat(params.data.soldoutRegDt); 
+				}
+			},
+			{headerName: "품절처리자", field: "soldoutRegId", width: 120, cellClass: 'text-center'},
+			{
+				headerName		: "변경요청번호"
+				, field			: "ordChgSq"
+				, width			: 120
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) {
+					return params.data.ordChgSq === 0 ? '' : params.data.ordChgSq;
+				}
+			},
+			{
+				headerName		: "변경구분"
+				, field			: "chgGb"
+				, width			: 120
+				, cellClass		: 'text-center'
+				, valueGetter: function (params) { 
+					return gagaAgGrid.lookupValue(chgGbList, params.data.chgGb); 
+				}
+			},
+			{
+				headerName		: "변경상태"
+				, field			: "chgStat"
+				, width			: 120
+				, cellClass		: 'text-center'
+				, valueGetter	: function (params) { 
+					return gagaAgGrid.lookupValue(chgStatList, params.data.chgStat); 
+				}
+			},
+			{headerName: "회수지시여부"		, field: "wdInvoiceSendYn"		, width: 100, cellClass: 'text-center'},
+			{headerName: "회수택배사"		, field: "wdShipCompNm"			, width: 100, cellClass: 'text-center'},
+			{headerName: "회수송장"		, field: "wdInvoiceNo"			, width: 120, cellClass: 'text-center'},
+			{headerName: "수취인명"		, field: "recipNm"				, width: 100, cellClass: 'text-center'},
+			{headerName: "수취인연락처"		, field: "recipPhnno"			, width: 120, cellClass: 'text-center'},
+			{headerName: "수취인주소"		, field: "recipAddr"			, width: 500, cellClass: 'text-left'},
+			{
+				headerName		: "배송메모"
+				, field			: "delvMemo"
+				, width			: 500
+				, cellClass		: 'left'
+				, valueGetter: function (params) {
+					var delvMemo = '';
+					if (!gagajf.isNull(params.data.delvMemo)) {
+						delvMemo = fnRemoveEmojis(params.data.delvMemo);
+					}
+					return delvMemo;
+				}
+			},
+			{headerName: "출고메모", field: "dstrbtNote", width: 300, cellClass: 'left'}
+		]
+	}
+];
+
+var gridOptionsOrderList = {
+	columnDefs					: columnDefsOrderList
+	, detailCellRendererParams	: {
+		detailGridOptions	: {
+			columnDefs				: []
+			, defaultColDef			: {
+				resizable: true
+			}
+			, suppressLoadingOverlay: false
+			, onGridReady			: function (params) {
+				params.api.setDomLayout('autoHeight');
+			}
+			, onFirstDataRendered	: function (params) {
+				params.api.sizeColumnsToFit();
+			}
+		}
+		, getDetailRowData: function (params) {
+			params.successCallback(params.data.orderDetailList);
+		}
+	}
+	, defaultColDef: {
+		resizable: true
+	}
+	, isRowMaster: function (dataItem) {
+		return dataItem ? dataItem.orderDetailList.length > 1 : false;
+	}
+	, suppressRowTransform: true
+	, enableRangeSelection: true
+};
+
+// 상품이미지 노출을 위해 높이 조정
+gridOptionsOrderList.rowHeight = 60;
+gridOptionsOrderList.rowSelection = 'multiple';
+gridOptionsOrderList.suppressRowClickSelection = true;
+gridOptionsOrderList.getRowStyle = function (params) {
+	if (params.data.ordExchGb === 'E') {
+		return {background: 'orange'}
+	}
+}
+
+function onFirstDataRendered(params) {
+	
+}
+
+// 조회
+$('#btnOrderSearch').on('click', function () {
+	fnSearchList();
+});
+
+var fnSearchList = function () {
+	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($('#searchForm').prop('action'), gridOptionsOrderList, '#searchForm', function () {
+		$("#rowCntOrderList").text(gridOptionsOrderList.api.getDisplayedRowCount());
+		
+		// 주문리스트 합계 정보
+		gagajf.ajaxFormSubmit('/order/list/sum/info', '#searchForm', fnOrderListSumInfoCallback);
+	});
+};
+
+// 주문리스트 합계 정보
+var fnOrderListSumInfoCallback = function(result) {
+	if (!gagajf.isNull(result)) {
+		var sumOrdAmt = 0
+		  , sumOrdCnclAmt = 0
+		  , sumRealPayAmt = 0
+		  , ordNoCnt = 0
+		  , sumOrdQty = 0
+		  , sumOrdCnclQty = 0
+		 ;
+
+		if (!gagajf.isNull(result.sumOrdAmt)) {
+			sumOrdAmt = result.sumOrdAmt.addComma();
+		}
+		if (!gagajf.isNull(result.sumOrdCnclAmt)) {
+			sumOrdCnclAmt = result.sumOrdCnclAmt.addComma();
+		}
+		if (!gagajf.isNull(result.sumRealPayAmt)) {
+			sumRealPayAmt = result.sumRealPayAmt.addComma();
+		}
+		if (!gagajf.isNull(result.ordNoCnt)) {
+			ordNoCnt = result.ordNoCnt.addComma();
+		}
+		if (!gagajf.isNull(result.sumOrdQty)) {
+			sumOrdQty = result.sumOrdQty.addComma();
+		}
+		if (!gagajf.isNull(result.sumOrdCnclQty)) {
+			sumOrdCnclQty = result.sumOrdCnclQty.addComma();
+		}
+
+		$('#sumOrdAmt').text(sumOrdAmt);
+		$('#sumOrdCnclAmt').text(sumOrdCnclAmt);
+		$('#sumRealPayAmt').text(sumRealPayAmt);
+		$('#ordNoCnt').text(ordNoCnt);
+		$('#sumOrdQty').text(sumOrdQty);
+		$('#sumOrdCnclQty').text(sumOrdCnclQty);
+	}
+};
+	
+// 엑셀조회
+$("#btnSearchExcel").on('click', function () {
+	cfnExcelUploadPopup('', 'fnExcelUpoadCallback');
+});
+
+var currOrdNo = '';		//최근상세보기한 주문번호
+var fnExcelUpoadCallback = function (data) {
+	$("#excelFileNm").val(data.excelFileNm);
+	gagaAgGrid.fetch('/order/excel/search', gridOptionsOrderList, '#searchForm', function () {
+		$("#rowCntOrderList").text(gridOptionsOrderList.api.getDisplayedRowCount());
+	});
+};
+
+// 엑셀조회
+$("#btnSearchExcel").on('click', function () {
+	cfnExcelUploadPopup('', 'fnExcelUpoadCallback');
+});
+
+var currOrdNo = '';		// 최근상세보기한 주문번호
+var fnExcelUpoadCallback = function (data) {
+	$("#excelFileNm").val(data.excelFileNm);
+	gagaAgGrid.fetch('/order/excel/search', gridOptionsOrderList, '#searchForm', function () {
+		$("#rowCntOrderList").text(gridOptionsOrderList.api.getDisplayedRowCount());
+	});
+};
+
+// 초기화 클릭시
+$('#btnInit').on('click', function() {
+	$('#searchForm')[0].reset();
+	$("#multiBrand").empty();
+});
+
+// 엑셀 다운로드
+var fnOrderExcelList = function () {
+	gagaAgGrid.showOrHideColumn(gridOptionsOrderList, "custNo", true);
+	
+	// 엑셀다운로드
+	gagaAgGrid.exportToExcel('주문목록', gridOptionsOrderList);
+	gagaAgGrid.showOrHideColumn(gridOptionsOrderList, "custNo", false);
+};
+
+var fnOpenOrderDetailPopup = function (ordNo) {
+	currOrdNo = ordNo;
+	cfnOpenOrderDetailPopup(ordNo);
+};
+
+var fnReOpenOrderDetailPopup = function () {
+	cfnOpenOrderDetailPopup(currOrdNo);
+};
+	
+//자사/입점 변경여부
+$("#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');
+});
+
+// 초기설정
+$(document).ready(function() {
+	// 달력기능 활성화
+	cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '주문');
+	gagaAgGrid.createGrid('gridOrderList', gridOptionsOrderList);
+	gridOptionsOrderList.api.hideOverlay();
+});
+</script>
+
+</html>
+
+
+
+
+

+ 351 - 0
style24.admin/src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html

@@ -0,0 +1,351 @@
+<!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="7">
+							<!-- <label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnY" value="N" />자사</label> -->
+							<label class="rdoBtn"><input type="radio" name="selfYn" id="selfYnN" value="Y" checked/>입점</label>
+							<select name="supplyCompCd" id="supplyCompCd">
+								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</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="20" selected>결제완료</option>
+								<option value="26">교환출고처지정</option>
+								<option value="35">입고확정</option>
+								<option value="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';
+	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');
+});
+
+//초기설정
+$(document).ready(function() {
+	// 달력기능 활성화
+	cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '주문');
+	gagaAgGrid.createGrid('gridList', gridOptions);
+	gridOptions.api.hideOverlay();
+});
+
+</script>
+
+</html>
+
+
+
+
+

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

@@ -5,6 +5,7 @@ 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;
@@ -22,12 +23,17 @@ public class TsbGoodsTnmJob extends TsbAbstractJob<Goods, Goods, Goods> {
 	@Autowired
 	private TsbGoodsService goodsService;
 
+	@Autowired
+	private SafetyKoreaApi safetyKoreaApi;
+
+
 	private int succCnt = 0;
 	private int failCnt = 0;
 
 	@Override
 	public Goods read() throws Exception {
 
+		log.info(safetyKoreaApi.getKoreaCertifyNo("MNW1BQKP20"));
 		Goods goods = new Goods();
 		return goods;
 	}

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

@@ -81,7 +81,7 @@ public class TsbGoodsTask {
 	 * @throws Exception
 	 */
 	@Scheduled(cron = "${cron.goods.goodsSnmJob}")
-	@Scheduled(fixedDelay = 3500000)
+	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void tsbGoodsSnmJob() throws Exception {
 		goodsSnmJob.run("상품 검색어 적용");

+ 1 - 0
style24.core/.gitignore

@@ -1,3 +1,4 @@
 target/
 .settings/
 .classpath
+/bin/