Prechádzať zdrojové kódy

Merge branch 'style' into jmh

jmh 4 rokov pred
rodič
commit
e4cc6dcb74

+ 82 - 0
src/main/java/com/style24/admin/biz/dao/TsaSettleDao.java

@@ -1,14 +1,18 @@
 package com.style24.admin.biz.dao;
 
 import java.util.Collection;
+import java.util.Map;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.AflinkFee;
 import com.style24.persistence.domain.DelvFeeSettle;
+import com.style24.persistence.domain.Erp;
 import com.style24.persistence.domain.GiftcardSettle;
 import com.style24.persistence.domain.GoodsSettle;
 import com.style24.persistence.domain.SettleConfirm;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * 정산 Dao
  *
@@ -113,4 +117,82 @@ public interface TsaSettleDao {
 	 */
 	Collection<AflinkFee> getAfLinkFeeList(AflinkFee afLinkFee);
 
+	/**
+	 * 한세ERP매출반영 목록
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	Collection<Erp> getHansaeSalesUploadList(Erp erp);
+
+	/**
+	 * 한세스타일매핑 정보
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	Erp getHansaeStyleMapping(Erp erp);
+
+	/**
+	 * 한세스타일매핑 정보 등록
+	 * @param erp - 한세ERP 정보
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	void saveHansaeStyleMapping(Erp erp);
+
+	/**
+	 * 매출반영 실패건 ERP 정보로 Update
+	 * @param erp - 한세ERP 정보
+	 * @return 처리건수
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	int updateFailedSalesUploadListToErpInfo(Erp erp);
+
+	/**
+	 * 매출반영 실패한 브랜드 목록
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	Collection<String> getFailedSalesUploadBrandList(Erp erp);
+
+	/**
+	 * 매출반영 실패한 목록
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	Collection<GagaMap> getFailedSalesUploadList(Erp erp);
+
+	/**
+	 * 매출반영I/F번호 조회
+	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	String getSalesUploadInterfaceNo(String erpGb);
+
+	/**
+	 * 매출반영목록 I/F번호 Update
+	 * @param paramMap - ERP 정보
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	void updateSalesUploadListInterfaceNo(GagaMap paramMap);
+
+	/**
+	 * 매출반영결과 처리
+	 * @param paramMap - 매출결과 정보
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	void updateSalesUploadResult(Map<String, Object> paramMap);
+
 }

+ 128 - 0
src/main/java/com/style24/admin/biz/service/TsaSettleService.java

@@ -1,6 +1,9 @@
 package com.style24.admin.biz.service;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +16,7 @@ import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.persistence.domain.AflinkFee;
 import com.style24.persistence.domain.DelvFeeSettle;
+import com.style24.persistence.domain.Erp;
 import com.style24.persistence.domain.GiftcardSettle;
 import com.style24.persistence.domain.GoodsSettle;
 import com.style24.persistence.domain.SettleConfirm;
@@ -196,4 +200,128 @@ public class TsaSettleService {
 		return settleDao.getAfLinkFeeList(afLinkFee);
 	}
 
+	/**
+	 * 한세ERP매출반영 목록
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	public Collection<Erp> getHansaeSalesUploadList(Erp erp) {
+		return settleDao.getHansaeSalesUploadList(erp);
+	}
+
+	/**
+	 * 한세스타일매핑 정보
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	public Erp getHansaeStyleMapping(Erp erp) {
+		return settleDao.getHansaeStyleMapping(erp);
+	}
+
+	/**
+	 * 한세스타일매핑 정보 등록
+	 * @param erp - 한세ERP 정보
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@Transactional("shopTxnManager")
+	public void saveHansaeStyleMapping(Erp erp) {
+		erp.setRegNo(TsaSession.getInfo().getUserNo());
+		erp.setUpdNo(TsaSession.getInfo().getUserNo());
+		settleDao.saveHansaeStyleMapping(erp);
+	}
+
+	/**
+	 * 매출반영 실패건 ERP 정보로 Update
+	 * @param erp - 한세ERP 정보
+	 * @return 처리건수
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@Transactional("shopTxnManager")
+	public int updateFailedSalesUploadListToErpInfo(Erp erp) {
+		return settleDao.updateFailedSalesUploadListToErpInfo(erp);
+	}
+
+	/**
+	 * 매출반영 실패한 브랜드 목록
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	public Collection<String> getFailedSalesUploadBrandList(Erp erp) {
+		return settleDao.getFailedSalesUploadBrandList(erp);
+	}
+
+	/**
+	 * 매출반영 실패한 목록
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	public Collection<GagaMap> getFailedSalesUploadList(Erp erp) {
+		return settleDao.getFailedSalesUploadList(erp);
+	}
+
+	/**
+	 * 매출반영I/F번호 조회
+	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	public String getSalesUploadInterfaceNo(String erpGb) {
+		return settleDao.getSalesUploadInterfaceNo(erpGb);
+	}
+
+	/**
+	 * 매출반영목록 I/F번호 Update
+	 * @param paramMap - ERP 정보
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@Transactional("shopTxnManager")
+	public void updateSalesUploadListInterfaceNo(GagaMap paramMap) {
+		settleDao.updateSalesUploadListInterfaceNo(paramMap);
+	}
+
+	/**
+	 * 매출반영결과 처리
+	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
+	 * @param paramMap - 결과 정보
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@SuppressWarnings("unchecked")
+	@Transactional("shopTxnManager")
+	public void updateSalesUploadResult(String erpGb, GagaMap salesMap) {
+		if (salesMap.get("succList") != null) {
+			// 성공건 처리
+			List<Map<String, Object>> succList = (ArrayList<Map<String, Object>>)salesMap.get("succList");
+			if (succList != null && !succList.isEmpty()) {
+				for (Map<String, Object> dataMap : succList) {
+					dataMap.put("ERP_GB", erpGb);
+					settleDao.updateSalesUploadResult(dataMap);
+				}
+			}
+		}
+
+		if (salesMap.get("failList") != null) {
+			// 실패건 처리
+			List<Map<String, Object>> failList = (ArrayList<Map<String, Object>>)salesMap.get("failList");
+			if (failList != null && !failList.isEmpty()) {
+				for (Map<String, Object> dataMap : failList) {
+					dataMap.put("ERP_GB", erpGb);
+					settleDao.updateSalesUploadResult(dataMap);
+				}
+			}
+		}
+	}
+
 }

+ 152 - 0
src/main/java/com/style24/admin/biz/web/TsaSettleController.java

@@ -15,6 +15,7 @@ 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;
 
@@ -23,9 +24,11 @@ import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.biz.service.TsaSettleService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.thirdparty.HansaeErp;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.AflinkFee;
 import com.style24.persistence.domain.DelvFeeSettle;
+import com.style24.persistence.domain.Erp;
 import com.style24.persistence.domain.GiftcardSettle;
 import com.style24.persistence.domain.GoodsSettle;
 import com.style24.persistence.domain.SettleConfirm;
@@ -64,6 +67,9 @@ public class TsaSettleController extends TsaBaseController {
 	@Autowired
 	private Environment env;
 
+	@Autowired
+	private HansaeErp hansaeErp;
+
 	/**
 	 * 상품정산 화면
 	 * @return
@@ -415,4 +421,150 @@ public class TsaSettleController extends TsaBaseController {
 		return settleService.getAfLinkFeeList(aflinkFee);
 	}
 
+	/**
+	 * 한세ERP매출반영 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@GetMapping("/hansae/sales/upload/form")
+	public ModelAndView hansaeSalesUploadForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName("settle/HansaeSalesUploadForm");
+
+		return mav;
+	}
+
+	/**
+	 * 한세ERP매출반영 목록
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@PostMapping("/hansae/sales/upload/list")
+	@ResponseBody
+	public Collection<Erp> getHansaeSalesUploadList(@RequestBody Erp erp) {
+		return settleService.getHansaeSalesUploadList(erp);
+	}
+
+	/**
+	 * 한세스타일매핑 화면
+	 * @param erpGb - ERP구분(hsmk: 한세MK, hsdr: 한세드림)
+	 * @param cdStyle - 스타일코드
+	 * @param color - 색상코드
+	 * @param sizeCd - 사이즈코드
+	 * @param dsError - 실패메시지
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@GetMapping("/hansae/style/mapping/form")
+	public ModelAndView hansaeStyleMappingForm(@RequestParam(value = "erpGb") String erpGb, @RequestParam(value = "cdStyle") String cdStyle, @RequestParam(value = "cdColor") String cdColor, @RequestParam(value = "cdSize") String cdSize, @RequestParam(value = "dsError") String dsError) {
+		ModelAndView mav = new ModelAndView();
+
+		Erp erp = new Erp();
+		erp.setErpGb(erpGb);
+		erp.setCdStyle(cdStyle);
+		erp.setCdColor(cdColor);
+		erp.setCdSize(cdSize);
+
+		Erp styleInfo = settleService.getHansaeStyleMapping(erp);
+
+		if (styleInfo == null) {
+			styleInfo = new Erp();
+			styleInfo.setErpGb(erpGb);
+			styleInfo.setCdStyle(cdStyle);
+			styleInfo.setCdColor(cdColor);
+			styleInfo.setCdSize(cdSize);
+		}
+
+		styleInfo.setDsError(dsError);
+
+		mav.addObject("styleInfo", styleInfo);
+
+		mav.setViewName("settle/HansaeStyleMappingForm");
+
+		return mav;
+	}
+
+	/**
+	 * 한세스타일매핑 저장 처리
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@PostMapping("/hansae/style/mapping/save")
+	@ResponseBody
+	public GagaResponse saveHansaeStyleMapping(@RequestBody Erp erp) {
+		settleService.saveHansaeStyleMapping(erp);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 한세ERP 매출실패건 업로드 처리
+	 * @param erp - 한세ERP 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 11. 1
+	 */
+	@PostMapping("/hansae/failedSales/upload")
+	@ResponseBody
+	public GagaResponse uploadHansaeFailedSales(@RequestBody Erp erp) {
+		log.info("{}", erp);
+
+		// 매출반영 실패한 브랜드 목록 (브랜드 단위로 처리를 위해)
+		Collection<String> brandList = settleService.getFailedSalesUploadBrandList(erp);
+		if (brandList == null || brandList.isEmpty()) {
+			throw new IllegalStateException((HansaeErp.ErpGb.HANSAE_MK.value().equals(erp.getErpGb()) ? "한세MK" : "한세드림")
+				+ "의 판매기간(" + erp.getStartDt() + "~" + erp.getEndDt() + ") 내에 매출반영 실패건이 없습니다.");
+		}
+
+		// 매출반영 실패건 ERP 옵션 정보로 Update
+		int updCnt = settleService.updateFailedSalesUploadListToErpInfo(erp);
+//		if (updCnt == 0) {
+//			throw new IllegalStateException("매출반영 실패건 중 ERP 옵션 정보가 변경된 건이 없습니다.");
+//		}
+
+		for (String brandCd : brandList) {
+			erp.setBrandCd(brandCd);
+
+			// 매출반영 실패한 목록 (브랜드 단위로 조회)
+			Collection<GagaMap> uploadList = settleService.getFailedSalesUploadList(erp);
+
+			if (uploadList == null || uploadList.isEmpty()) {
+				log.error("{}-{} 브랜드의 매출반영 실패한 데이터가 없습니다.", erp.getErpGb(), brandCd);
+				continue;
+			}
+
+			// 매출반영I/F번호 조회
+			String noIf = settleService.getSalesUploadInterfaceNo(erp.getErpGb());
+			log.info("매출반영I/F번호: {}", noIf);
+
+			for (GagaMap dataMap : uploadList) {
+				// 매출반영목록 I/F번호 Update
+				dataMap.setString("ERP_GB", erp.getErpGb());
+				dataMap.setString("NO_IF", noIf);
+				settleService.updateSalesUploadListInterfaceNo(dataMap);
+			}
+
+			// 매출업로드
+			GagaMap salesMap = hansaeErp.uploadErpSales(erp.getErpGb(), uploadList);
+
+			if (salesMap == null || salesMap.isEmpty()) {
+				log.error("{}-{} 브랜드의 매출반영결과 데이터가 없습니다. 한세 ERP 시스템담당자에게 문의해 주세요.", erp.getErpGb(), brandCd);
+				continue;
+			}
+
+			// 매출반영결과 처리
+			settleService.updateSalesUploadResult(erp.getErpGb(), salesMap);
+
+			log.info("{}-{} 브랜드의 매출반영 업로드 성공", erp.getErpGb(), brandCd);
+		}
+
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 }

+ 4 - 4
src/main/java/com/style24/admin/support/controller/TsaErrorController.java

@@ -6,12 +6,12 @@ import javax.servlet.http.HttpServletRequest;
 import org.springframework.boot.web.servlet.error.ErrorController;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
-import org.springframework.web.bind.annotation.GetMapping;
-
-import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
 
 import com.gagaframework.web.rest.server.GagaResponseStatus;
 
+import lombok.extern.slf4j.Slf4j;
+
 /**
  * Error Controller
  * 		Disabling the Whitelabel Error Page
@@ -38,7 +38,7 @@ public class TsaErrorController implements ErrorController {
 	/**
 	 * Error
 	 */
-	@GetMapping("/error")
+	@RequestMapping("/error")
 	public String error(HttpServletRequest request) throws HttpRequestMethodNotSupportedException {
 		Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
 

+ 212 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsaSettle.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.style24.admin.biz.dao.TsaSettleDao">
 
 	<!-- 상품정산 목록 -->
-	<select id="getGoodsSettleList" parameterType="GoodsSettle" resultType="GoodsSettle">
+	<select id="getGoodsSettleList" parameterType="GoodsSettle" resultType="GoodsSettle" timeout="600" >
 		/* TsaSettle.getGoodsSettleList */
 		SELECT ODIH.ORD_NO                                                                                     /*주문번호*/
 		     , ODIH.ORD_DTL_NO                                                                                 /*주문상세번호*/
@@ -129,7 +129,7 @@
 		                                                   END))
 		                    END AS SIGNED INT)                                                          AS SELL_AMT                /*판매금액*/
 		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * ODIH.CPN1_DC_AMT                        AS CPN1_DC_AMT             /*즉시사용쿠폰금액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * CASE WHEN CC2.CPN_ID=59 THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END                   AS GOODS_CPN_DC_AMT        /*상품쿠폰사용금액/ 59번 쿠폰제외*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * CASE WHEN CC2.CPN_ID in (59,132) THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END                   AS GOODS_CPN_DC_AMT        /*상품쿠폰사용금액/ 59번 쿠폰제외*/
 		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * ODIH.CART_CPN_DC_AMT                    AS CART_CPN_DC_AMT         /*주문서쿠폰사용금액*/
 		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * ODIH.PNT_DC_AMT                         AS PNT_DC_AMT              /*포인트사용금액*/
 		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * (ODIH.TMTB1_DC_AMT + ODIH.TMTB2_DC_AMT) AS TMTB_DC_AMT             /*다다익선할인금액*/
@@ -142,7 +142,7 @@
 		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * ODIH.GFCD_USE_AMT                       AS GFCD_USE_AMT            /*상품권사용금액*/
 		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) *
 		               (((100 - IFNULL(CB1.BURDEN_RATE,0)) / 100) * ODIH.CPN1_DC_AMT
-		                + ((100 - IFNULL(CB2.BURDEN_RATE,0)) / 100) * CASE WHEN CC2.CPN_ID=59 THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END)             AS SELF_CPN_DC_AMT         /*자사쿠폰분담액 /주문서쿠폰제외/59번 쿠폰제외*/
+		                + ((100 - IFNULL(CB2.BURDEN_RATE,0)) / 100) * CASE WHEN CC2.CPN_ID in (59,132) THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END)             AS SELF_CPN_DC_AMT         /*자사쿠폰분담액 /주문서쿠폰제외/59번 쿠폰제외*/
 		             , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) *
 		               ((IFNULL(CB1.BURDEN_RATE,0) / 100) * ODIH.CPN1_DC_AMT
 		                + (IFNULL(CB2.BURDEN_RATE,0) / 100) * ODIH.GOODS_CPN_DC_AMT)                     AS SUPPLY_COMP_CPN_DC_AMT  /*입점쿠폰분담액 /주문서쿠폰제외/*/
@@ -209,7 +209,7 @@
 	</delete>
 	
 	<!-- 정산확정 데이터 생성 -->
-	<insert id="createSettleConfirm" parameterType="SettleConfirm">
+	<insert id="createSettleConfirm" parameterType="SettleConfirm" timeout="600">
 		/* TsaSettle.createSettleConfirm */
 		INSERT INTO TB_USAC (
 		       USAC_DT
@@ -316,7 +316,7 @@
 		                                                           END))
 		                            END AS SIGNED INT)                                                          AS SELL_AMT                /*판매금액*/
 		                     , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * ODIH.CPN1_DC_AMT                        AS CPN1_DC_AMT             /*즉시사용쿠폰금액*/
-		                     , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * CASE WHEN CC2.CPN_ID=59 THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END     AS GOODS_CPN_DC_AMT        /*상품쿠폰사용금액 59번 쿠폰제외*/
+		                     , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * CASE WHEN CC2.CPN_ID in (59,132) THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END     AS GOODS_CPN_DC_AMT        /*상품쿠폰사용금액 59번 쿠폰제외*/
 		                     , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * ODIH.CART_CPN_DC_AMT                    AS CART_CPN_DC_AMT         /*주문서쿠폰사용금액*/
 		                     , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * ODIH.PNT_DC_AMT                         AS PNT_DC_AMT              /*포인트사용금액*/
 		                     , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) * (ODIH.TMTB1_DC_AMT + ODIH.TMTB2_DC_AMT) AS TMTB_DC_AMT             /*다다익선할인금액*/
@@ -328,7 +328,7 @@
 		                        + (IFNULL(TB2.TMTB_BURDEN_RATE,0) / 100) * ODIH.TMTB2_DC_AMT)                   AS SUPPLY_COMP_TMTB_DC_AMT /*입점다다익선분담액*/
 		                     , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) *
 		                       (((100 - IFNULL(CB1.BURDEN_RATE,0)) / 100) * ODIH.CPN1_DC_AMT
-		                         + ((100 - IFNULL(CB2.BURDEN_RATE,0)) / 100) * CASE WHEN CC2.CPN_ID=59 THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END)            AS SELF_CPN_DC_AMT         /*자사쿠폰분담액 / 주문서 쿠폰제외 / 59번쿠폰제외*/
+		                         + ((100 - IFNULL(CB2.BURDEN_RATE,0)) / 100) * CASE WHEN CC2.CPN_ID in (59,132) THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END)            AS SELF_CPN_DC_AMT         /*자사쿠폰분담액 / 주문서 쿠폰제외 / 59번쿠폰제외*/
 		                     , IF(ODIH.ORD_DTL_STAT = 'G720_20',1,-1) *
 		                       ((IFNULL(CB1.BURDEN_RATE,0) / 100) * ODIH.CPN1_DC_AMT
 		                         + (IFNULL(CB2.BURDEN_RATE,0) / 100) * ODIH.GOODS_CPN_DC_AMT)                    AS SUPPLY_COMP_CPN_DC_AMT  /*입점쿠폰분담액 / 주문서 쿠폰제외*/
@@ -793,5 +793,211 @@
 		GROUP  BY AF_CHANNEL, AF_LINK_CD, AF_LINK_NM, OCCUR_DT, ORD_NO, ORD_DTL_STAT
 		ORDER  BY AF_CHANNEL, AF_LINK_CD, AF_LINK_NM, OCCUR_DT, ORD_NO, ORD_DTL_STAT
 	</select>
+	
+	<!-- 한세ERP매출반영 목록 -->
+	<select id="getHansaeSalesUploadList" parameterType="Erp" resultType="Erp">
+		/* TsaSettle.getHansaeSalesUploadList */
+		SELECT ERP_GB                                     /*ERP구분*/
+		     , DATE_FORMAT(DT_SALE,'%Y-%m-%d') AS DT_SALE /*판매일자*/
+		     , TP_SALE                                    /*판매구분(1:판매, 2:환불)*/
+		     , CD_STYLE                                   /*스타일코드*/
+		     , CD_COLOR                                   /*색상코드*/
+		     , CD_SIZE                                    /*사이즈코드*/
+		     , BRAND_CD                                   /*브랜드코드*/
+		     , QT_SALE                                    /*판매수량*/
+		     , AM_ACSALE                                  /*실판매금액*/
+		     , DS_REMARK                                  /*비고*/
+		     , NO_IF                                      /*I/F번호*/
+		     , CD_SALEBILL                                /*판매전표번호*/
+		     , DS_ERROR                                   /*실패메시지*/
+		     , CASE WHEN DS_ERROR IS NOT NULL
+		                 AND
+		                 IFNULL((SELECT COUNT(*)
+		                         FROM   TB_HANSAE_STYLE
+		                         WHERE  ERP_GB = HS.ERP_GB
+		                         AND    CD_STYLE = HS.CD_STYLE
+		                         AND    CD_COLOR = HS.CD_COLOR
+		                         AND    CD_SIZE = HS.CD_SIZE
+		                        ),0) > 0 THEN 'Y'
+		            ELSE
+		                'N'
+		       END                             MAPPING_YN /*매핑등록여부*/
+		FROM   TB_HANSAE_SALES HS
+		WHERE  ERP_GB = #{erpGb}
+		AND    DT_SALE BETWEEN REPLACE(#{startDt},'-','') AND REPLACE(#{endDt},'-','')
+		<if test='status == "S"'> <!-- 성공건 -->
+		AND    CD_SALEBILL IS NOT NULL
+		AND    DS_ERROR IS NULL
+		</if>
+		<if test='status == "F"'> <!-- 실패건 -->
+		AND    CD_SALEBILL IS NULL
+		AND    DS_ERROR IS NOT NULL
+		</if>
+		ORDER  BY ERP_GB, DT_SALE, BRAND_CD, CD_STYLE, CD_COLOR, CD_SIZE
+	</select>
+	
+	<!-- 한세스타일매핑 정보 -->
+	<select id="getHansaeStyleMapping" parameterType="Erp" resultType="Erp">
+		/* TsaSettle.getHansaeStyleMapping */
+		SELECT ERP_GB        /*ERP구분*/
+		     , CD_STYLE      /*스타일코드*/
+		     , CD_COLOR      /*색상코드*/
+		     , CD_SIZE       /*사이즈코드*/
+		     , ERP_CD_STYLE  /*ERP스타일코드*/
+		     , ERP_CD_COLOR  /*ERP색상코드*/
+		     , ERP_CD_SIZE   /*ERP사이즈코드*/
+		FROM   TB_HANSAE_STYLE
+		WHERE  ERP_GB = #{erpGb}
+		AND    CD_STYLE = #{cdStyle}
+		AND    CD_COLOR = #{cdColor}
+		AND    CD_SIZE = #{cdSize}
+	</select>
+	
+	<!-- 한세스타일매핑 정보 등록 -->
+	<update id="saveHansaeStyleMapping" parameterType="Erp">
+		/* TsaSettle.saveHansaeStyleMapping */
+		INSERT INTO TB_HANSAE_STYLE (
+		       ERP_GB
+		     , CD_STYLE
+		     , CD_COLOR
+		     , CD_SIZE
+		     , ERP_CD_STYLE
+		     , ERP_CD_COLOR
+		     , ERP_CD_SIZE
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{erpGb}
+		     , #{cdStyle}
+		     , #{cdColor}
+		     , #{cdSize}
+		     , #{erpCdStyle}
+		     , #{erpCdColor}
+		     , #{erpCdSize}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       ERP_CD_STYLE = #{erpCdStyle}
+		     , ERP_CD_COLOR = #{erpCdColor}
+		     , ERP_CD_SIZE = #{erpCdSize}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</update>
+	
+	<!-- 매출반영 실패건 ERP 정보로 Update -->
+	<update id="updateFailedSalesUploadListToErpInfo" parameterType="Erp">
+		/* TsaSettle.updateFailedSalesUploadListToErpInfo */
+		UPDATE TB_HANSAE_SALES HS
+		SET    CD_STYLE = IFNULL((SELECT ERP_CD_STYLE
+		                          FROM   TB_HANSAE_STYLE
+		                          WHERE  ERP_GB = HS.ERP_GB
+		                          AND    CD_STYLE = HS.CD_STYLE
+		                          AND    CD_COLOR = HS.CD_COLOR
+		                          AND    CD_SIZE = HS.CD_SIZE
+		                         ),CD_STYLE)
+		     , CD_COLOR = IFNULL((SELECT ERP_CD_COLOR
+		                          FROM   TB_HANSAE_STYLE
+		                          WHERE  ERP_GB = HS.ERP_GB
+		                          AND    CD_STYLE = HS.CD_STYLE
+		                          AND    CD_COLOR = HS.CD_COLOR
+		                          AND    CD_SIZE = HS.CD_SIZE
+		                         ),CD_COLOR)
+		     , CD_SIZE = IFNULL((SELECT ERP_CD_SIZE
+		                         FROM   TB_HANSAE_STYLE
+		                         WHERE  ERP_GB = HS.ERP_GB
+		                         AND    CD_STYLE = HS.CD_STYLE
+		                         AND    CD_COLOR = HS.CD_COLOR
+		                         AND    CD_SIZE = HS.CD_SIZE
+		                        ),CD_SIZE)
+		WHERE  ERP_GB = #{erpGb}
+		AND    DT_SALE BETWEEN REPLACE(#{startDt},'-','') AND REPLACE(#{endDt},'-','')
+		AND    CD_SALEBILL IS NULL /*매출반영후실패한넘*/
+		AND    DS_ERROR IS NOT NULL /*매출반영후실패한넘*/
+		AND    EXISTS (SELECT 1
+		               FROM   TB_HANSAE_STYLE
+		               WHERE  ERP_GB = HS.ERP_GB
+		               AND    CD_STYLE = HS.CD_STYLE
+		               AND    CD_COLOR = HS.CD_COLOR
+		               AND    CD_SIZE = HS.CD_SIZE
+		              )
+	</update>
+	
+	<!-- 매출반영 실패한 브랜드 목록 -->
+	<select id="getFailedSalesUploadBrandList" parameterType="Erp" resultType="String">
+		/* TsaSettle.getFailedSalesUploadBrandList */
+		SELECT DISTINCT BRAND_CD
+		FROM   TB_HANSAE_SALES
+		WHERE  ERP_GB = #{erpGb}
+		AND    DT_SALE BETWEEN REPLACE(#{startDt},'-','') AND REPLACE(#{endDt},'-','')
+		AND    CD_SALEBILL IS NULL /*매출반영후실패한넘*/
+		AND    DS_ERROR IS NOT NULL /*매출반영후실패한넘*/
+		ORDER  BY BRAND_CD
+	</select>
+	
+	<!-- 매출반영 실패한 목록 -->
+	<select id="getFailedSalesUploadList" parameterType="Erp" resultType="paramMap">
+		/* TsaSettle.getFailedSalesUploadList */
+		SELECT DT_SALE
+		     , TP_SALE
+		     , CD_STYLE
+		     , CD_COLOR
+		     , CD_SIZE
+		     , QT_SALE
+		     , AM_ACSALE
+		     , DS_REMARK
+		FROM   TB_HANSAE_SALES
+		WHERE  ERP_GB = #{erpGb}
+		AND    DT_SALE BETWEEN REPLACE(#{startDt},'-','') AND REPLACE(#{endDt},'-','')
+		AND    BRAND_CD = #{brandCd}
+		AND    CD_SALEBILL IS NULL /*매출반영후실패한넘*/
+		AND    DS_ERROR IS NOT NULL /*매출반영후실패한넘*/
+		ORDER  BY DT_SALE, TP_SALE, CD_STYLE, CD_COLOR, CD_SIZE
+	</select>
+	
+	<!-- 매출반영I/F번호 조회 -->
+	<select id="getSalesUploadInterfaceNo" parameterType="String" resultType="String">
+		/* TsaSettle.getSalesUploadInterfaceNo */
+		SELECT CONCAT(DATE_FORMAT(NOW(),'%Y%m%d%H%i%S')
+		             ,LPAD(IFNULL((SELECT CAST(MAX(SUBSTRING(NO_IF,15)) AS UNSIGNED)
+		                           FROM   TB_HANSAE_SALES
+		                           WHERE  ERP_GB = #{erpGb}
+		                           AND    NO_IF LIKE CONCAT(DATE_FORMAT(NOW(),'%Y%m%d'),'%')
+		                          ),0) + 1,4,'0')) AS NO_IF
+		FROM   DUAL
+	</select>
+	
+	<!-- 매출반영목록 I/F번호 Update -->
+	<update id="updateSalesUploadListInterfaceNo" parameterType="paramMap">
+		/* TsaSettle.updateSalesUploadListInterfaceNo */
+		UPDATE TB_HANSAE_SALES
+		SET    NO_IF = #{NO_IF}
+		WHERE  ERP_GB = #{ERP_GB}
+		AND    DT_SALE = #{DT_SALE}
+		AND    TP_SALE = #{TP_SALE}
+		AND    CD_STYLE = #{CD_STYLE}
+		AND    CD_COLOR = #{CD_COLOR}
+		AND    CD_SIZE = #{CD_SIZE}
+	</update>
+	
+	<!-- 매출반영결과 처리 -->
+	<update id="updateSalesUploadResult" parameterType="paramMap">
+		/* TsaSettle.updateSalesUploadResult */
+		UPDATE TB_HANSAE_SALES
+		SET    CD_SALEBILL = #{CD_SALEBILL}
+		     , DS_ERROR = #{DS_ERROR}
+		     , NO_IF = CASE WHEN LENGTH(#{DS_ERROR}) > 0 THEN NULL ELSE #{NO_IF} END
+		     , UPD_DT = NOW()
+		WHERE  ERP_GB = #{ERP_GB}
+		AND    NO_IF = #{NO_IF}
+		AND    CD_STYLE = #{CD_STYLE}
+		AND    CD_COLOR = #{CD_COLOR}
+		AND    CD_SIZE = #{CD_SIZE}
+	</update>
 
 </mapper>

+ 2712 - 2712
src/main/java/com/style24/persistence/mybatis/shop/TsaStatistics.xml

@@ -1,2713 +1,2713 @@
-<?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.TsaStatisticsDao">
-
-	<!-- 일일거래내역 -->
-	<select id="getDailyTradingList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getDailyTradingList */
-		SELECT ODIH.ORD_NO                                                                /*주문번호*/
-		     , ODIH.ORD_DTL_NO                                                            /*주문상세번호*/
-		     , ODIH.SELL_GB                                                               /*판매구분*/
-		     , ODIH.MALL_GB                                                               /*몰구분*/
-		     , ODIH.MALL_GB_NM                                                            /*몰구분명*/
-		     , ODIH.EXTMALL_ORDER_ID                                                      /*제휴몰주문번호*/
-		     , ODIH.EXTMALL_ID                                                            /*제휴몰ID*/
-		     , ODIH.EXTMALL_NM                                                            /*제휴몰명*/
-		     , ODIH.AF_LINK_CD                                                            /*제휴링크코드*/
-		     , ODIH.AF_LINK_NM                                                            /*제휴링크명*/
-		     , ODIH.AF_CHANNEL                                                            /*제휴채널코드*/
-		     , ODIH.AF_CHANNEL_NM                                                         /*제휴채널명*/
-		     , ODIH.DISTRIBUTION_GB                                                       /*유통구분*/
-		     , ODIH.DISTRIBUTION_GB_NM                                                    /*유통구분명*/
-		     , ODIH.SUPPLY_COMP_CD                                                        /*공급업체코드*/
-		     , ODIH.SUPPLY_COMP_NM                                                        /*공급업체명*/
-		     , ODIH.SUPPLY_VENDOR_CD                                                      /*공급벤더코드*/
-		     , ODIH.SUPPLY_VENDOR_NM                                                      /*공급벤더명*/
-		     , ODIH.ORD_DT                                                                /*주문일시*/
-		     , ODIH.OCCUR_DT                                                              /*발생일시*/
-		     , ODIH.BRAND_CD                                                              /*브랜드코드*/
-		     , ODIH.BRAND_ENM                                                             /*브랜드명*/
-		     , ODIH.GOODS_CD                                                              /*상품코드*/
-		     , ODIH.GOODS_NM                                                              /*상품명*/
-		     , ODIH.ITEM_CD                                                               /*단품코드*/
-		     , ODIH.OPT_CD1                                                               /*옵션코드1*/
-		     , ODIH.OPT_CD2                                                               /*옵션코드2*/
-		     , ODIH.ITEMKIND_CD                                                           /*품목코드*/
-		     , ODIH.ITEMKIND_NM                                                           /*품목명*/
-		     , SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',1)          AS ITEMKIND_NM1           /*품목명1*/
-		     , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',1),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',2),'>',-1) THEN
-		                NULL
-		            ELSE
-		                SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',2),'>',-1)
-		       END                                              AS ITEMKIND_NM2           /*품목명2*/
-		     , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',2),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',3),'>',-1) THEN
-		                NULL
-		            ELSE
-		                SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',3),'>',-1)
-		       END                                              AS ITEMKIND_NM3           /*품목명3*/
-		     , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',3),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',4),'>',-1) THEN
-		                ''
-		            ELSE
-		                SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',4),'>',-1)
-		       END                                              AS ITEMKIND_NM4           /*품목명4*/
-		     , ODIH.MALL_PRICE                                                            /*몰판매가*/
-		     , ODIH.SELL_PRICE                                                            /*판매가*/
-		     , ODIH.SELL_QTY                                                              /*판매수량*/
-		     , ODIH.SELL_AMT                                                              /*판매금액(ORD_AMT에는 CPN1_DC_AMT가 빠진 금액이 들어가 있음)*/
-		     , ODIH.CPN1_DC_AMT                                                           /*즉시사용쿠폰금액*/
-		     , ODIH.GOODS_CPN_DC_AMT                                                      /*상품쿠폰사용금액*/
-		     , ODIH.CART_CPN_DC_AMT                                                       /*주문서쿠폰사용금액*/
-		     , ODIH.PNT_DC_AMT                                                            /*포인트사용금액*/
-		     , ODIH.TMTB_DC_AMT                                                           /*다다익선할인금액*/
-		     , ODIH.SELF_TMTB_DC_AMT                                                      /*자사다다익선분담액*/
-		     , ODIH.SUPPLY_COMP_TMTB_DC_AMT                                               /*입점다다익선분담액*/
-		     , ODIH.GFCD_USE_AMT                                                          /*상품권사용금액*/
-		     , ODIH.SELF_CPN_DC_AMT                                                       /*자사쿠폰분담액*/
-		     , ODIH.SUPPLY_COMP_CPN_DC_AMT                                                /*입점쿠폰분담액*/
-		     , CASE WHEN ODIH.SELL_QTY = 0 THEN 0
-		            ELSE
-		                (ODIH.SELL_AMT
-		                 - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT )
-		                 - ODIH.TMTB_DC_AMT
-		                ) / ODIH.SELL_QTY
-		       END                                              AS REAL_SELL_PRICE        /*실판매가 /주문서쿠폰제외*/
-		     , ODIH.SELL_AMT
-		       - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT )
-		       - ODIH.TMTB_DC_AMT                               AS REAL_SELL_AMT          /*실판매금액(=상품총액. 쿠폰과 다다익선만 차감. 상품권과 포인트는 포함) /주문서쿠폰제외*/
-		     , ODIH.SELL_FEE_RATE                                                         /*판매수수료율*/
-		     , ROUND(ODIH.SELL_AMT * (ODIH.SELL_FEE_RATE / 100),0)          AS SELL_FEE_AMT           /*수수료*/
-		     , ODIH.MD_NM                                                                 /*담당MD*/
-		FROM   (
-		        SELECT ODIH.ORD_DTL_ITEM_HST_SQ                                                                                    /*주문상세단품이력일련번호*/
-		             , ODIH.ORD_NO                                                                                                 /*주문번호*/
-		             , ODIH.ORD_DTL_NO                                                                                             /*주문상세번호*/
-		             , CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10' THEN '판매'
-		                    WHEN ODIH.ORD_DTL_STAT = 'G720_30' THEN '취소'
-		                    WHEN ODIH.ORD_DTL_STAT = 'G720_40' THEN '품절취소'
-		                    WHEN ODIH.ORD_DTL_STAT = 'G720_50' THEN '반품'
-		                    WHEN ODIH.ORD_DTL_STAT = 'G720_60' THEN '교환'
-		               END                                                                              AS SELL_GB                 /*판매구분*/
-		             , O.MALL_GB                                                                                                   /*몰구분*/
-		             , FN_GET_CODE_NM('G011',O.MALL_GB)                                                 AS MALL_GB_NM              /*몰구분명*/
-		             , OD.EXTMALL_ORDER_ID                                                                                         /*제휴몰주문번호*/
-		             , OD.EXTMALL_ID                                                                                               /*제휴몰ID*/
-		             , E.EXTMALL_NM                                                                                                /*제휴몰명*/
-		             , OD.AF_LINK_CD                                                                                               /*제휴링크코드*/
-		             , AL.AF_LINK_NM                                                                                               /*제휴링크명*/
-		             , AL.AF_CHANNEL                                                                                               /*제휴채널코드*/
-		             , FN_GET_CODE_NM('G053',AL.AF_CHANNEL)                                             AS AF_CHANNEL_NM           /*제휴채널명*/
-		             , SC.DISTRIBUTION_GB                                                                                          /*유통구분*/
-		             , FN_GET_CODE_NM('G065',SC.DISTRIBUTION_GB)                                        AS DISTRIBUTION_GB_NM      /*유통구분명*/
-		             , OD.SUPPLY_COMP_CD                                                                                           /*공급업체코드*/
-		             , SC.SUPPLY_COMP_NM                                                                                           /*공급업체명*/
-		             , SC.SUPPLY_VENDOR_CD                                                                                         /*공급벤더코드*/
-		             , SV.SUPPLY_VENDOR_NM                                                                                         /*공급벤더명*/
-		             , DATE_FORMAT(O.PAY_DT,'%Y-%m-%d %H:%i:%S')                                        AS ORD_DT                  /*주문일시*/
-		             , DATE_FORMAT(ODIH.REG_DT,'%Y-%m-%d %H:%i:%S')                                     AS OCCUR_DT                /*발생일시*/
-		             , G.BRAND_CD                                                                                                  /*브랜드코드*/
-		             , B.BRAND_ENM                                                                                                 /*브랜드명*/
-		             , OD.GOODS_CD                                                                                                 /*상품코드*/
-		             , G.GOODS_NM                                                                                                  /*상품명*/
-		             , ODIH.ITEM_CD                                                                                                /*단품코드*/
-		             , ODIH.OPT_CD1                                                                                                /*옵션코드1*/
-		             , ODIH.OPT_CD2                                                                                                /*옵션코드2*/
-		             , G.ITEMKIND_CD                                                                                               /*품목코드*/
-		             , I.ITEMKIND_NM                                                                                               /*품목명*/
-		             , ODIH.ITEM_PRICE                                                                  AS MALL_PRICE              /*몰판매가*/
-		             , CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
-		                        IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
-		                    ELSE
-		                        ODIH.ITEM_PRICE
-		               END                                                                              AS SELL_PRICE              /*판매가(제휴몰정산가적용)*/
-		             , (CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10' THEN 1 ELSE -1 END)
-		               *
-		               CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10'/*판매-결제완료*/ THEN
-		                             ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY
-		                         ELSE /*환입-반품완료,환입-교환완료*/
-		                             ODIH.CNCL_RTN_QTY
-		                    END AS SIGNED INT)                                                          AS SELL_QTY                /*판매수량*/
-		             , (CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10' THEN 1 ELSE -1 END)
-		               *
-		               CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10'/*판매-결제완료*/ THEN
-		                             ((ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY) * (CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
-		                                                                             IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
-		                                                                         ELSE
-		                                                                             ODIH.ITEM_PRICE
-		                                                                    END))
-		                         ELSE /*환입-반품완료,환입-교환완료*/
-		                             (ODIH.CNCL_RTN_QTY * (CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
-		                                                            IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
-		                                                        ELSE
-		                                                            ODIH.ITEM_PRICE
-		                                                   END))
-		                    END AS SIGNED INT)                                                          AS SELL_AMT                /*판매금액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * ODIH.CPN1_DC_AMT                        AS CPN1_DC_AMT             /*즉시사용쿠폰금액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * CASE WHEN CC2.CPN_ID=59 THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END                   AS GOODS_CPN_DC_AMT        /*상품쿠폰사용금액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * ODIH.CART_CPN_DC_AMT                    AS CART_CPN_DC_AMT         /*주문서쿠폰사용금액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * ODIH.PNT_DC_AMT                         AS PNT_DC_AMT              /*포인트사용금액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * (ODIH.TMTB1_DC_AMT + ODIH.TMTB2_DC_AMT) AS TMTB_DC_AMT             /*다다익선할인금액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) *
-		               (((100 - IFNULL(TB1.TMTB_BURDEN_RATE,0)) / 100) * ODIH.TMTB1_DC_AMT
-		                 + ((100 - IFNULL(TB2.TMTB_BURDEN_RATE,0)) / 100) * ODIH.TMTB2_DC_AMT)          AS SELF_TMTB_DC_AMT        /*자사다다익선분담액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) *
-		               ((IFNULL(TB1.TMTB_BURDEN_RATE,0) / 100) * ODIH.TMTB1_DC_AMT
-		                + (IFNULL(TB2.TMTB_BURDEN_RATE,0) / 100) * ODIH.TMTB2_DC_AMT)                   AS SUPPLY_COMP_TMTB_DC_AMT /*입점다다익선분담액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * ODIH.GFCD_USE_AMT                       AS GFCD_USE_AMT            /*상품권사용금액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) *
-		               (((100 - IFNULL(CB1.BURDEN_RATE,0)) / 100) * ODIH.CPN1_DC_AMT
-		                 + ((100 - IFNULL(CB2.BURDEN_RATE,0)) / 100) * CASE WHEN CC2.CPN_ID=59 THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END )            AS SELF_CPN_DC_AMT         /*자사쿠폰분담액*/
-		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) *
-		               ((IFNULL(CB1.BURDEN_RATE,0) / 100) * ODIH.CPN1_DC_AMT
-		                + (IFNULL(CB2.BURDEN_RATE,0) / 100) * ODIH.GOODS_CPN_DC_AMT)                     AS SUPPLY_COMP_CPN_DC_AMT  /*입점쿠폰분담액*/
-		             , CASE WHEN O.MALL_GB = 'G011_10' /*자사몰*/ THEN
-		                        OD.SELL_FEE_RATE
-		                    ELSE /*제휴몰*/
-		                        IFNULL(E.SELL_FEE_RATE,0)
-		               END                                                                              AS SELL_FEE_RATE           /*판매수수료율*/
-		             , (SELECT U.USER_NM
-		                FROM   TB_BRAND_MD BM
-		                     , TB_USER U
-		                WHERE  BM.MD_NO = U.USER_NO
-		                AND    BM.BRAND_CD = G.BRAND_CD
-		                AND    BM.FORMAL_GB = G.FORMAL_GB
-		                LIMIT 1)                                                                        AS MD_NM                   /*담당MD*/
-		        FROM   TB_ORDER_DETAIL_ITEM_HST ODIH
-		        INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
-		        INNER JOIN TB_ORDER O ON ODIH.ORD_NO = O.ORD_NO
-		        INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
-		        INNER JOIN TB_SUPPLY_VENDOR SV ON SC.SUPPLY_VENDOR_CD = SV.SUPPLY_VENDOR_CD
-		        INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
-		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
-		        INNER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
-		        LEFT OUTER JOIN TB_EXTMALL E ON OD.EXTMALL_ID = E.EXTMALL_ID
-		        LEFT OUTER JOIN TB_AF_LINK AL ON OD.AF_LINK_CD = AL.AF_LINK_CD
-		        LEFT OUTER JOIN TB_COUPON_BURDEN CB1 ON OD.CPN1_CPN_SQ = CB1.CPN_ID
-		                                            AND OD.SUPPLY_COMP_CD = CB1.SUPPLY_COMP_CD
-		        LEFT OUTER JOIN TB_CUST_COUPON CC2 ON OD.GOODS_CPN_SQ = CC2.CUST_CPN_SQ
-		        LEFT OUTER JOIN TB_COUPON_BURDEN CB2 ON CC2.CPN_ID = CB2.CPN_ID
-		                                            AND OD.SUPPLY_COMP_CD = CB2.SUPPLY_COMP_CD
-		        LEFT OUTER JOIN TB_CUST_COUPON CC3 ON OD.CART_CPN_SQ = CC3.CUST_CPN_SQ
-		        LEFT OUTER JOIN TB_COUPON_BURDEN CB3 ON CC3.CPN_ID = CB3.CPN_ID
-		                                            AND OD.SUPPLY_COMP_CD = CB3.SUPPLY_COMP_CD
-		        LEFT OUTER JOIN TB_TMTB_BURDEN TB1 ON OD.TMTB1_SQ = TB1.TMTB_SQ
-		                                          AND OD.SUPPLY_COMP_CD = TB1.TMTB_SUPPLY_CD
-		        LEFT OUTER JOIN TB_TMTB_BURDEN TB2 ON OD.TMTB2_SQ = TB2.TMTB_SQ
-		                                          AND OD.SUPPLY_COMP_CD = TB2.TMTB_SUPPLY_CD
-		        LEFT OUTER JOIN TB_EXTMALL_USAC_PRICE EUP ON ODIH.ORD_DTL_ITEM_HST_SQ = EUP.ORD_DTL_ITEM_HST_SQ
-		        WHERE  1 = 1
-		        AND    ODIH.REG_DT <![CDATA[>=]]> STR_TO_DATE(#{occurDt},'%Y-%m-%d')
-		        AND    ODIH.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{occurDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-		        AND    ODIH.ORD_DTL_STAT IN ('G720_10','G720_30','G720_40','G720_50','G720_60') /*판매-결제완료,환입-취소완료,환입-품절취소,환입-반품완료,환입-교환완료*/
-		       ) ODIH
-		ORDER  BY ODIH.ORD_DTL_ITEM_HST_SQ
-	</select>
-
-	<!-- 일자별주문 목록 -->
-	<select id="getDailyOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getDailyOrderList */
-		SELECT SUM(SOD.SELF_AMT + SOD.CHANNEL_AMT + SOD.EXTMALL_AMT) AS TOT_ORD_AMT     /*매출액*/
-		     , IFNULL((SELECT SUM(SELF_AMT + CHANNEL_AMT + EXTMALL_AMT)
-		               FROM   TB_STAT_ORD_DAY
-		               WHERE  1 = 1
-		               AND    DAY <![CDATA[>=]]> DATE_ADD(STR_TO_DATE(#{startDt},'%Y-%m-%d'), INTERVAL -1 YEAR)
-		               AND    DAY <![CDATA[<]]> DATE_ADD(DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR)
-		               AND    (
-		                       1 = 1
-		               <if test='frontGbP != null and frontGbP != ""'>
-		                       OR FRONT_GB = 'P'
-		               </if>
-		               <if test='frontGbM != null and frontGbM != ""'>
-		                       OR FRONT_GB = 'M'
-		               </if>
-		               <if test='frontGbA != null and frontGbA != ""'>
-		                       OR FRONT_GB = 'A'
-		               </if>
-		                      )
-		               <if test='mallGb != null and mallGb != ""'>
-		               AND    IFNULL(EXTMALL_ID,'') != '' /*제휴몰만*/
-		                   <if test='multiExtmallId != null and multiExtmallId != ""'>
-		               AND    EXTMALL_ID IN
-		                       <foreach collection="multiExtmallId" item="item" index="index"  open="(" close=")" separator=",">
-		                       #{item}
-		                       </foreach>
-		                   </if>
-		               </if>
-		               AND    (
-		                       1 = 1
-		               <if test='distributionGbWms != null and distributionGbWms != ""'>
-		                       OR DISTRIBUTION_GB = 'WMS'
-		               </if>
-		               <if test='distributionGbScm != null and distributionGbScm != ""'>
-		                       OR DISTRIBUTION_GB = 'SCM'
-		               </if>
-		                      )
-		               <if test='multiSupplyCompCd != null and multiSupplyCompCd != ""'>
-		               AND    SUPPLY_COMP_CD IN
-		                      <foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
-		                      #{item}
-		                      </foreach>
-		               </if>
-		               <if test='multiAfLinkCd != null and multiAfLinkCd != ""'>
-		               AND    AF_LINK_CD IN
-		                      <foreach collection="multiAfLinkCd" item="item" index="index"  open="(" close=")" separator=",">
-		                      #{item}
-		                      </foreach>
-		               </if>
-		               <if test='multiBrandCd != null and multiBrandCd != ""'>
-		               AND    BRAND_CD IN
-		                      <foreach collection="multiBrandCd" item="item" index="index"  open="(" close=")" separator=",">
-		                      #{item}
-		                      </foreach>
-		               </if>
-		               <if test='multiItemkindCd != null and multiItemkindCd != ""'>
-		               AND    ITEMKIND_CD IN
-		                      <foreach collection="multiItemkindCd" item="item" index="index"  open="(" close=")" separator=",">
-		                      #{item}
-		                      </foreach>
-		               </if>
-		              ),0)                                           AS YOY_TOT_ORD_AMT /*전년동기대비매출액*/
-		     , SUM(SOD.SELF_AMT)                                     AS SELF_AMT        /*자사직방문매출액*/
-		     , SUM(SOD.CHANNEL_AMT)                                  AS CHANNEL_AMT     /*채널매출액*/
-		     , SUM(SOD.EXTMALL_AMT)                                  AS EXTMALL_AMT     /*제휴몰매출액*/
-		     , SUM(SOD.CNCL_AMT + SOD.RTN_AMT)                       AS CNCL_AMT        /*취/반품액*/
-		     , SUM(SOD.ORD_CNT)                                      AS ORD_CNT         /*주문건수*/
-		     , SUM(SOD.SELL_QTY)                                     AS SELL_QTY        /*판매수량*/
-		     , SUM(SOD.CNCL_QTY + SOD.RTN_QTY)                       AS CNCL_QTY        /*취/반품수량*/
-		     <choose>
-		         <when test='dayGb == "W"'> <!-- 주별 -->
-		     , CONCAT(MONTH(SOD.DAY), '월 ', WEEK(SOD.DAY,5) - WEEK(DATE_SUB(SOD.DAY, INTERVAL DAYOFMONTH(SOD.DAY) - 1 DAY), 5) + 1, '주') AS DAY
-		         </when>
-		         <when test='dayGb == "M"'> <!-- 월별 -->
-		     , DATE_FORMAT(SOD.DAY,'%Y-%m')                          AS DAY
-		         </when>
-		         <otherwise> <!-- 일별 -->
-		     , DATE_FORMAT(SOD.DAY,'%Y-%m-%d')                       AS DAY
-		         </otherwise>
-		     </choose>
-		FROM   TB_STAT_ORD_DAY SOD
-		WHERE  1 = 1
-		AND    SOD.DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
-		AND    SOD.DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-		AND    (
-		        1 = 1
-		<if test='frontGbP != null and frontGbP != ""'>
-		        OR SOD.FRONT_GB = 'P'
-		</if>
-		<if test='frontGbM != null and frontGbM != ""'>
-		        OR SOD.FRONT_GB = 'M'
-		</if>
-		<if test='frontGbA != null and frontGbA != ""'>
-		        OR SOD.FRONT_GB = 'A'
-		</if>
-		       )
-		<if test='mallGb != null and mallGb != ""'>
-		AND    IFNULL(SOD.EXTMALL_ID,'') != '' /*제휴몰만*/
-		    <if test='multiExtmallId != null and multiExtmallId != ""'>
-		AND    SOD.EXTMALL_ID IN
-		        <foreach collection="multiExtmallId" item="item" index="index"  open="(" close=")" separator=",">
-		        #{item}
-		        </foreach>
-		    </if>
-		</if>
-		AND    (
-		        1 = 1
-		<if test='distributionGbWms != null and distributionGbWms != ""'>
-		        OR SOD.DISTRIBUTION_GB = 'WMS'
-		</if>
-		<if test='distributionGbScm != null and distributionGbScm != ""'>
-		        OR SOD.DISTRIBUTION_GB = 'SCM'
-		</if>
-		       )
-		<if test='multiSupplyCompCd != null and multiSupplyCompCd != ""'>
-		AND    SOD.SUPPLY_COMP_CD IN
-		       <foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
-		       #{item}
-		       </foreach>
-		</if>
-		<if test='multiAfLinkCd != null and multiAfLinkCd != ""'>
-		AND    SOD.AF_LINK_CD IN
-		       <foreach collection="multiAfLinkCd" item="item" index="index"  open="(" close=")" separator=",">
-		       #{item}
-		       </foreach>
-		</if>
-		<if test='multiBrandCd != null and multiBrandCd != ""'>
-		AND    SOD.BRAND_CD IN
-		       <foreach collection="multiBrandCd" item="item" index="index"  open="(" close=")" separator=",">
-		       #{item}
-		       </foreach>
-		</if>
-		<if test='multiItemkindCd != null and multiItemkindCd != ""'>
-		AND    SOD.ITEMKIND_CD IN
-		       <foreach collection="multiItemkindCd" item="item" index="index"  open="(" close=")" separator=",">
-		       #{item}
-		       </foreach>
-		</if>
-		<choose>
-		         <when test='dayGb == "W"'> <!-- 주별 -->
-		GROUP  BY CONCAT(MONTH(SOD.DAY), '월 ', WEEK(SOD.DAY,5) - WEEK(DATE_SUB(SOD.DAY, INTERVAL DAYOFMONTH(SOD.DAY) - 1 DAY), 5) + 1, '주')
-		         </when>
-		         <when test='dayGb == "M"'> <!-- 월별 -->
-		GROUP  BY DATE_FORMAT(SOD.DAY,'%Y-%m')
-		         </when>
-		         <otherwise> <!-- 일별 -->
-		GROUP  BY DATE_FORMAT(SOD.DAY,'%Y-%m-%d')
-		         </otherwise>
-		     </choose>
-	</select>
-
-	<!-- 상품별 주문 목록 -->
-	<select id="getGoodsOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getGoodsOrderList */
-		SELECT
-		    FN_GET_CODE_NM('G009',A.FORMAL_GB) AS FORMAL_GB -- 정상이월구분
-		    , A.GOODS_CD                                    -- 상품코드
-		    , B.GOODS_NM                                    -- 상품명
-		    , SUM(C.STOCK_QTY) AS STOCK_QTY                 -- 현재고수량
-		    , SUM(A.SELL_QTY) AS SELL_QTY                   -- 판매수량
-		    , SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.GOODS_CPN_AMT - A.TMTB_AMT - A.CART_CPN_AMT) AS PAY_AMT -- 상품당결제액
-			, SUM(A.ORD_AMT) AS ORD_AMT -- 매출액
-		    , SUM(A.GOODS_CPN_AMT) AS GOODS_CPN_AMT         -- 즉시/주문상품쿠폰
-		    , SUM(A.TMTB_AMT) AS TMTB_AMT                   -- 다다익선
-		    , SUM(A.CART_CPN_AMT) AS CART_CPN_AMT           -- 장바구니쿠폰
-		    , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY       -- 취/환불수량
-		    , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT       -- 취/환불액
-		    , SUM(A.SAVE_PNT_AMT) AS SAVE_PNT_AMT           -- 지급포인트
-		FROM TB_STAT_ORD_DAY A, TB_GOODS B, TB_GOODS_STOCK C
-		WHERE A.GOODS_CD = B.GOODS_CD
-		    AND B.GOODS_CD = C.GOODS_CD
-		<![CDATA[
-		    AND A.DAY >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
-		    AND A.DAY < DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-		]]>
-		<if test="multiFrontGb != null">
-			/* 디바이스 */
-			<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiExtmallId != null">
-			/* 제휴몰 */
-			<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiDistributionGb != null">
-			/* 물류구분 */
-			<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiSupplyCompCd != null">
-			/* 공급처 */
-			<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiAfLinkCd != null">
-			/* 채널 */
-			<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiBrandCd != null">
-			/* 브랜드 */
-			<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiItemkindCd != null">
-			/* 품목 */
-			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiGoodsCd != null">
-			/* 상품코드 */
-			<foreach collection="multiGoodsCd" item="item" index="index"  open="AND (" close=")" separator="OR">A.GOODS_CD LIKE CONCAT('%', #{item}, '%')</foreach>
-		</if>
-		<if test="multiFormalGb != null">
-			/* 정상/이월구분 */
-			<foreach collection="multiFormalGb" item="item" index="index"  open="AND B.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		GROUP BY A.FORMAL_GB, A.GOODS_CD, B.GOODS_NM, B.SELF_GOODS_YN
-		ORDER BY B.SELF_GOODS_YN DESC, A.FORMAL_GB, A.GOODS_CD
-	</select>
-
-	<!-- 제휴몰 주문 목록 조회 -->
-	<select id="getExtmallOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getExtmallOrderList */
-		SELECT EXTMALL_NM
-		     , TOT_AMT
-		     , SELL_QTY
-		     , EXTMALL_AMT
-		     , CNCL_QTY
-		     , CNCL_AMT
-		     , REAL_ORD_AMT
-		     , SELL_FEE_RATE
-		     , EX_USAC_AMT
-		     , YOY_TOT_ORD_AMT
-			 , ROUND(TOT_AMT / (CASE WHEN TOT_AMT > 0 AND YOY_TOT_ORD_AMT = 0 THEN 1 ELSE YOY_TOT_ORD_AMT END) * 100 - 100,1) AS YOY_RATE /*증가율*/
-		  FROM (
-				SELECT
-				    (SELECT EXTMALL_NM FROM TB_EXTMALL X WHERE X.EXTMALL_ID = A.EXTMALL_ID LIMIT 1) AS EXTMALL_NM
-				    , SUM(A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT /* 총매출 */
-				    , SUM(A.SELL_QTY) AS SELL_QTY             /* 판매수량 */
-				    , SUM(A.EXTMALL_AMT) AS EXTMALL_AMT
-				    , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY /*취/반품수량*/
-				    , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT /*취/반품액*/
-				    , SUM(A.REAL_ORD_AMT) AS REAL_ORD_AMT     /*실결제액 */
-				    , (SELECT SELL_FEE_RATE FROM TB_EXTMALL X WHERE X.EXTMALL_ID = A.EXTMALL_ID LIMIT 1) AS SELL_FEE_RATE /*수수료율*/
-				    , (SUM(A.REAL_ORD_AMT) * (1 - (SELECT SELL_FEE_RATE FROM TB_EXTMALL X WHERE X.EXTMALL_ID = A.EXTMALL_ID LIMIT 1) / 100)) AS EX_USAC_AMT
-					, IFNULL((SELECT SUM(X.EXTMALL_AMT - X.CNCL_AMT - X.RTN_AMT)
-				               FROM   TB_STAT_ORD_DAY X
-				               WHERE  1 = 1
-				                 AND X.EXTMALL_ID = A.EXTMALL_ID
-							<![CDATA[
-							    AND X.DAY >= DATE_ADD(STR_TO_DATE(#{startDt},'%Y-%m-%d'), INTERVAL -1 YEAR)
-							    AND X.DAY < DATE_ADD(DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR)
-							]]>
-								<if test="multiBrandCd != null">
-									/* 브랜드 */
-									<foreach collection="multiBrandCd" item="item" index="index"  open="AND X.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-								</if>
-								<if test="multiFormalGb != null">
-									/* 정상/이월구분 */
-									<foreach collection="multiFormalGb" item="item" index="index"  open="AND X.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-								</if>
-								<if test="multiSupplyCompCd != null">
-									/* 공급처 */
-									<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND X.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-								</if>
-								<if test="multiAfLinkCd != null">
-									/* 채널 */
-									<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND X.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-								</if>
-								<if test="multiItemkindCd != null">
-									/* 품목 */
-									<foreach collection="multiItemkindCd" item="item" index="index"  open="AND X.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-								</if>
-								<if test="multiFrontGb != null">
-									/* 디바이스 */
-									<foreach collection="multiFrontGb" item="item" index="index"  open="AND X.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-								</if>
-								<if test="multiDistributionGb != null">
-									/* 물류구분 */
-									<foreach collection="multiDistributionGb" item="item" index="index"  open="AND X.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-								</if>
-				              ),0)                                           AS YOY_TOT_ORD_AMT /*전년동기대비매출액*/
-				FROM TB_STAT_ORD_DAY A
-				WHERE 1=1
-				    AND A.EXTMALL_ID IS NOT NULL
-				<![CDATA[
-				    AND A.DAY >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
-				    AND A.DAY < DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-				]]>
-				<if test="multiBrandCd != null">
-					/* 브랜드 */
-					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiFormalGb != null">
-					/* 정상/이월구분 */
-					<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiSupplyCompCd != null">
-					/* 공급처 */
-					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiAfLinkCd != null">
-					/* 채널 */
-					<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiItemkindCd != null">
-					/* 품목 */
-					<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiFrontGb != null">
-					/* 디바이스 */
-					<foreach collection="multiFrontGb" item="item" index="index"  open="AND FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiDistributionGb != null">
-					/* 물류구분 */
-					<foreach collection="multiDistributionGb" item="item" index="index"  open="AND DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				GROUP BY A.EXTMALL_ID
-	) TAB
-	ORDER BY TAB.EXTMALL_NM
-	</select>
-
-	<!-- 채널 주문목록 조회 -->
-	<select id="getChannelOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getChannelOrderList */
-		SELECT AF_LINK_CD
-		     , AF_LINK_NM
-		     , CHANNEL_AMT
-		     , TOT_AMT
-		     , SELL_QTY
-		     , CNCL_QTY
-		     , CNCL_AMT
-		     , REAL_ORD_AMT
-		     , SELL_FEE_RATE
-		     , EX_USAC_AMT
-		     , YOY_TOT_ORD_AMT
-	   		 , ROUND(TOT_AMT / (CASE WHEN TOT_AMT >0 AND YOY_TOT_ORD_AMT = 0 THEN 1 ELSE YOY_TOT_ORD_AMT END) * 100 - 100,1) AS YOY_RATE /*증가율*/
-		  FROM (
-				SELECT
-				    A.AF_LINK_CD
-				    , B.AF_LINK_NM
-				    , SUM(A.CHANNEL_AMT) AS CHANNEL_AMT
-				    , SUM(A.CHANNEL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT /* 총매출 */
-				    , SUM(A.SELL_QTY) AS SELL_QTY  /* 판매수량 */
-				    , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY /* 취/반품수량 */
-				    , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT /* 취/반품액 */
-				    , SUM(A.REAL_ORD_AMT) AS REAL_ORD_AMT /* 실결제금액 */
-				    , (SELECT FEE_RATE FROM TB_AF_LINK X WHERE X.AF_LINK_CD = A.AF_LINK_CD) AS SELL_FEE_RATE
-				    , (SUM(A.REAL_ORD_AMT) * (1 - (SELECT FEE_RATE FROM TB_AF_LINK X WHERE X.AF_LINK_CD = A.AF_LINK_CD) / 100)) AS EX_USAC_AMT
-				    , IFNULL((SELECT SUM(X.CHANNEL_AMT - X.CNCL_AMT - X.RTN_AMT) AS YOY_TOT_ORD_AMT
-						FROM TB_STAT_ORD_DAY X
-						WHERE X.AF_LINK_CD = A.AF_LINK_CD
-						<![CDATA[
-								 AND X.DAY >= DATE_ADD(STR_TO_DATE(#{startDt},'%Y-%m-%d'), INTERVAL -1 YEAR)
-								 AND X.DAY < DATE_ADD(DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR)
-							]]>
-						<if test="multiFrontGb != null">
-							/* 디바이스 */
-							<foreach collection="multiFrontGb" item="item" index="index"  open="AND X.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-						</if>
-						<if test="multiFormalGb != null">
-							/* 정상/이월구분 */
-							<foreach collection="multiFormalGb" item="item" index="index"  open="AND X.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-						</if>
-						<if test="multiDistributionGb != null">
-							/* 물류구분 */
-							<foreach collection="multiDistributionGb" item="item" index="index"  open="AND X.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-						</if>
-						<if test="multiSupplyCompCd != null">
-							/* 공급처 */
-							<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND X.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-						</if>
-						<if test="multiItemkindCd != null">
-							/* 품목 */
-							<foreach collection="multiItemkindCd" item="item" index="index"  open="AND X.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-						</if>), 0) AS YOY_TOT_ORD_AMT
-				FROM TB_STAT_ORD_DAY A
-				INNER JOIN TB_AF_LINK B ON A.AF_LINK_CD = B.AF_LINK_CD
-				WHERE B.AF_CHANNEL != 'G053_01'
-				<![CDATA[
-				    AND A.DAY >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
-				    AND A.DAY < DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-				]]>
-				<if test="multiFrontGb != null">
-					/* 디바이스 */
-					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiFormalGb != null">
-					/* 정상/이월구분 */
-					<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiDistributionGb != null">
-					/* 물류구분 */
-					<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiSupplyCompCd != null">
-					/* 공급처 */
-					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiItemkindCd != null">
-					/* 품목 */
-					<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				GROUP BY AF_LINK_CD
-	) TAB
-	ORDER BY AF_LINK_NM
-	</select>
-
-	<!-- 브랜드 주문목록 조회 -->
-	<select id="getBrandOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getBrandOrderList */
-		WITH YOY AS (
-		  SELECT X.BRAND_CD, SUM(X.SELF_AMT + X.CHANNEL_AMT + X.EXTMALL_AMT - X.CNCL_AMT - X.RTN_AMT) AS YOY_TOT_ORD_AMT
-		    FROM TB_STAT_ORD_DAY X
-		   WHERE 1=1
-			<![CDATA[
-		     AND X.DAY >= DATE_ADD(STR_TO_DATE(#{startDt},'%Y-%m-%d'), INTERVAL -1 YEAR)
-			 AND X.DAY < DATE_ADD(DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR)
-			]]>
-			<if test="multiFrontGb != null">
-				/* 디바이스 */
-				<foreach collection="multiFrontGb" item="item" index="index"  open="AND X.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiFormalGb != null">
-				/* 정상/이월구분 */
-				<foreach collection="multiFormalGb" item="item" index="index"  open="AND X.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiDistributionGb != null">
-				/* 물류구분 */
-				<foreach collection="multiDistributionGb" item="item" index="index"  open="AND X.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiSupplyCompCd != null">
-				/* 공급처 */
-				<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND X.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiItemkindCd != null">
-				/* 품목 */
-				<foreach collection="multiItemkindCd" item="item" index="index"  open="AND X.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiExtmallId != null">
-				/* 제휴몰 */
-				<foreach collection="multiExtmallId" item="item" index="index"  open="AND X.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiAfLinkCd != null">
-				/* 채널 */
-				<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND X.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiBrandCd != null">
-				/* 브랜드 */
-				<foreach collection="multiBrandCd" item="item" index="index"  open="AND Y.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-		  GROUP BY X.BRAND_CD
-		)
-		SELECT
-		    BRAND_CD /*브랜드코드*/
-		    , BRAND_ENM /*브랜드명*/
-		    , TOT_AMT /*총매출*/
-		    , SELL_QTY /*판매수량*/
-		    , SELFMALL_AMT /*자사몰매출*/
-		    , EXTMALL_AMT /*제휴몰매출*/
-		    , CNCL_AMT /*취/반품액*/
-		    , TOT_AMT_10 /*정상매출*/
-		    , TOT_AMT_20 /*이월매출*/
-		    , ROUND( ((FLOOR(TOT_AMT_10 / TOT_AMT * 10000 / 10)) / 10), 1) AS AMT_RATE_10 /*정상비*/
-		    , ROUND(TOT_AMT / (CASE WHEN TOT_AMT >0 AND (YOY_TOT_ORD_AMT IS NULL OR YOY_TOT_ORD_AMT = 0) THEN 1 ELSE YOY_TOT_ORD_AMT END) * 100 - 100,1) AS YOY_RATE /*증가율*/
-		    , YOY_TOT_ORD_AMT
-		FROM (
-		    SELECT
-		        BRAND_CD
-		        , BRAND_ENM
-		        , SELF_YN
-		        , SUM(TOT_AMT) AS TOT_AMT
-		        , SUM(SELL_QTY) AS SELL_QTY
-		        , SUM(SELFMALL_AMT) AS SELFMALL_AMT
-		        , SUM(EXTMALL_AMT) AS EXTMALL_AMT
-		        , SUM(CNCL_AMT) AS CNCL_AMT
-		        , SUM(CASE WHEN FORMAL_GB = 'G009_10' THEN TOT_AMT ELSE 0 END) AS TOT_AMT_10 /*정상매출*/
-		        , SUM(CASE WHEN FORMAL_GB = 'G009_20' THEN TOT_AMT ELSE 0 END) AS TOT_AMT_20 /*이월매출*/
-		        , YOY_TOT_ORD_AMT
-		    FROM (
-		        SELECT
-		            A.BRAND_CD -- 브랜드코드
-		            , B.BRAND_ENM -- 브랜드명
-		            , B.SELF_YN -- 자사여부
-		            , A.FORMAL_GB -- 정상이월구분
-		            , SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT -- 총매출
-		            , SUM(A.SELL_QTY) AS SELL_QTY -- 판매수량
-		            , SUM(A.SELF_AMT + A.CHANNEL_AMT) AS SELFMALL_AMT -- 자사몰매출
-		            , SUM(A.EXTMALL_AMT) AS EXTMALL_AMT -- 제휴몰매출
-		            , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
-		            , C.YOY_TOT_ORD_AMT
-		        FROM TB_STAT_ORD_DAY A LEFT OUTER JOIN YOY C ON A.BRAND_CD = C.BRAND_CD, TB_BRAND B
-		        WHERE A.BRAND_CD = B.BRAND_CD
-				<![CDATA[
-			      AND DAY >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
-			      AND DAY < DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-				]]>
-				<if test="multiFrontGb != null">
-					/* 디바이스 */
-					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiFormalGb != null">
-					/* 정상/이월구분 */
-					<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiDistributionGb != null">
-					/* 물류구분 */
-					<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiSupplyCompCd != null">
-					/* 공급처 */
-					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiItemkindCd != null">
-					/* 품목 */
-					<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiExtmallId != null">
-					/* 제휴몰 */
-					<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiAfLinkCd != null">
-					/* 채널 */
-					<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiBrandCd != null">
-					/* 브랜드 */
-					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-		        GROUP BY A.BRAND_CD, B.BRAND_ENM, B.SELF_YN, A.FORMAL_GB
-		    ) X
-		    GROUP BY BRAND_CD, BRAND_ENM, SELF_YN
-		) Z
-		ORDER BY SELF_YN DESC, BRAND_ENM
-	</select>
-
-	<!-- 시간별 주문 조회 -->
-	<select id="getHourlyOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getHourlyOrderList */
-		WITH TAB AS (
-		    SELECT
-		        DATE_FORMAT(DAY_TIME, '%H') AS HOUR
-		        , SUM(ORD_AMT) AS ORD_AMT /*매출*/
-		        , SUM(ORD_CUST) AS ORD_CUST /*주문자수*/
-		        , SUM(ORD_CNT) AS ORD_CNT /*주문수*/
-		        , SUM(SELL_QTY) AS SELL_QTY /*판매수*/
-		        , FLOOR(AVG(CUST_PRICE)) AS CUST_PRICE /*객단가*/
-		        , SUM(CNCL_QTY) AS CNCL_QTY /*취반품개수*/
-		        , SUM(CNCL_AMT) AS CNCL_AMT /*취반품액*/
-		    FROM TB_STAT_ORD_TIME A
-		    WHERE 1=1
-		    	<if test="dtGb != null">
-					<foreach collection="dtGb" item="item" index="index">
-						<if test="item == 'COMPARE_TERMS'">
-					        <![CDATA[
-					        /* 직전동기간 */
-					        AND A.DAY_TIME >= DATE_ADD(DATE_FORMAT(#{startDt},'%Y-%m-%d'), INTERVAL (DATE_FORMAT(#{startDt}, '%Y%m%d') - DATE_FORMAT(#{endDt}, '%Y%m%d')) - 1 DAY)
-					        AND A.DAY_TIME < DATE_FORMAT(#{startDt}, '%Y%m%d')
-					        ]]>
-						</if>
-						<if test="item == 'YOY'">
-					        <![CDATA[
-					        /* 전년비교 */
-					        AND A.DAY_TIME >= DATE_ADD(DATE_FORMAT(#{startDt}, '%Y%m%d'), INTERVAL -1 YEAR )
-					        AND A.DAY_TIME < DATE_ADD(DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR )
-					        ]]>
-						</if>
-						<if test="item == 'DIY'">
-							<![CDATA[
-							/* 직접선택 */
-							AND A.DAY_TIME >= DATE_FORMAT(#{compStDt}, '%Y%m%d')
-							AND A.DAY_TIME <  DATE_ADD(DATE_FORMAT(#{compEdDt}, '%Y%m%d'), INTERVAL 1 DAY)
-							]]>
-						</if>
-					</foreach>
-				</if>
-				<if test="multiFrontGb != null">
-					/* 디바이스 */
-					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiFormalGb != null">
-					/* 정상/이월구분 */
-					<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiDistributionGb != null">
-					/* 물류구분 */
-					<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiSupplyCompCd != null">
-					/* 공급처 */
-					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiItemkindCd != null">
-					/* 품목 */
-					<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiExtmallId != null">
-					/* 제휴몰 */
-					<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiAfLinkCd != null">
-					/* 채널 */
-					<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiBrandCd != null">
-					/* 브랜드 */
-					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-		        AND A.SHOT_DELV_YN = 'Y' /*총알배송*/
-		    GROUP BY HOUR
-		)
-		SELECT
-		    A.HOUR
-		    , A.ORD_AMT /*매출*/
-		    , B.ORD_AMT AS COMP_ORD_AMT /*비교*/
-		    , ROUND(FLOOR(A.ORD_AMT / (CASE WHEN B.ORD_AMT IS NULL OR B.ORD_AMT = 0 THEN 1 ELSE B.ORD_AMT END) * 100 * 100) / 100, 2) AS CPL_RATE /*달성율*/
-		    , A.ORD_CUST /*주문자수*/
-		    , A.ORD_CNT /*주문수*/
-		    , A.SELL_QTY /*판매수*/
-		    , A.CUST_PRICE /*객단가*/
-		    , A.CNCL_QTY /*취반품개수*/
-		    , A.CNCL_AMT /*취반품액*/
-		FROM (
-		    SELECT
-		        DATE_FORMAT(DAY_TIME, '%H') AS HOUR
-		        , SUM(ORD_AMT) AS ORD_AMT /*매출*/
-		        , SUM(ORD_CUST) AS ORD_CUST /*주문자수*/
-		        , SUM(ORD_CNT) AS ORD_CNT /*주문수*/
-		        , SUM(SELL_QTY) AS SELL_QTY /*판매수*/
-		        , FLOOR(AVG(CUST_PRICE)) AS CUST_PRICE /*객단가*/
-		        , SUM(CNCL_QTY) AS CNCL_QTY /*취반품개수*/
-		        , SUM(CNCL_AMT) AS CNCL_AMT /*취반품액*/
-		    FROM TB_STAT_ORD_TIME A
-		    WHERE 1=1
-		    <![CDATA[
-		    AND A.DAY_TIME >= DATE_FORMAT(#{startDt}, '%Y%m%d')
-		    AND A.DAY_TIME < DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
-		    ]]>
-			<if test="multiFrontGb != null">
-				/* 디바이스 */
-				<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiFormalGb != null">
-				/* 정상/이월구분 */
-				<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiDistributionGb != null">
-				/* 물류구분 */
-				<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiSupplyCompCd != null">
-				/* 공급처 */
-				<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiItemkindCd != null">
-				/* 품목 */
-				<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiExtmallId != null">
-				/* 제휴몰 */
-				<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiAfLinkCd != null">
-				/* 채널 */
-				<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiBrandCd != null">
-				/* 브랜드 */
-				<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-
-		    GROUP BY HOUR
-		) A
-		LEFT OUTER JOIN TAB B ON A.HOUR = B.HOUR
-		ORDER BY A.HOUR
-	</select>
-
-	<!-- 카테고리별 주문 조회 -->
-	<select id="getCategoryOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getCategoryOrderList */
-		SELECT
-			A.ITEMKIND_CD
-			, SUBSTRING_INDEX(T4.FULL_CATE_NM, ' > ', 1) AS CATE_NM1 /* 대분류 */
-			, SUBSTRING_INDEX(SUBSTRING(T4.FULL_CATE_NM, INSTR(SUBSTRING_INDEX(T4.FULL_CATE_NM, ' > ', 2), ' > ') + 3), ' > ', 1) AS CATE_NM2 /* 중분류 */
-			, SUBSTRING_INDEX(T4.FULL_CATE_NM, ' > ', -1) AS CATE_NM3 -- 소분류
-			, (A.SELFMALL_AMT + A.EXTMALL_AMT) AS TOT_AMT /*총매출*/
-			, SELFMALL_AMT /*자사몰매출*/
-			, EXTMALL_AMT /*제휴몰매출*/
-		FROM (
-			SELECT
-			A.ITEMKIND_CD
-			, SUM(CASE WHEN GB = '1' THEN AMT ELSE 0 END ) AS SELFMALL_AMT
-			, SUM(CASE WHEN GB = '2' THEN AMT ELSE 0 END ) AS EXTMALL_AMT
-			FROM (
-				SELECT
-					A.ITEMKIND_CD
-					, SUM(A.SELF_AMT + A.CHANNEL_AMT - A.CNCL_AMT - A.RTN_AMT) AS AMT
-					, '1' AS GB
-				FROM TB_STAT_ORD_DAY A
-				WHERE EXTMALL_ID IS NULL
-				<![CDATA[
-					/* 직접선택 */
-					AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
-					AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
-					]]>
-				<if test="multiFrontGb != null">
-					/* 디바이스 */
-					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiExtmallId != null">
-					/* 제휴몰 */
-					<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiSupplyCompCd != null">
-					/* 공급처 */
-					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiBrandCd != null">
-					/* 브랜드 */
-					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				GROUP BY A.ITEMKIND_CD
-				UNION ALL
-				SELECT
-					A.ITEMKIND_CD
-					, SUM(A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS AMT
-					, '2' AS GB
-				FROM TB_STAT_ORD_DAY A
-				WHERE EXTMALL_ID IS NOT NULL
-				<![CDATA[
-					/* 직접선택 */
-					AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
-					AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
-					]]>
-				<if test="multiFrontGb != null">
-					/* 디바이스 */
-					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiExtmallId != null">
-					/* 제휴몰 */
-					<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiSupplyCompCd != null">
-					/* 공급처 */
-					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				<if test="multiBrandCd != null">
-					/* 브랜드 */
-					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-				</if>
-				GROUP BY A.ITEMKIND_CD
-			) A
-			GROUP BY A.ITEMKIND_CD
-		) A, TB_ITEMKIND_CATE TC, TB_CATE_4SRCH T4
-		WHERE A.ITEMKIND_CD = TC.ITEMKIND_CD
-			AND TC.CATE_NO = T4.LEAF_CATE_NO
-			AND (A.SELFMALL_AMT + A.EXTMALL_AMT) > 0
-	</select>
-
-	<!-- 카테고리 상세 조회 -->
-	<select id="getCategoryOrderDetailList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getCategoryOrderDetailList */
-		SELECT
-		    C.BRAND_ENM
-		    , A.GOODS_CD
-		    , B.GOODS_NM
-		    , SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT /*총매출*/
-		    , SUM(A.SELL_QTY) AS SELL_QTY /*판매수량*/
-		    , SUM(A.ORD_CUST) AS ORD_CUST /*구매자수*/
-		FROM TB_STAT_ORD_DAY A, TB_GOODS B, TB_BRAND C
-		WHERE A.GOODS_CD = B.GOODS_CD
-		    AND A.BRAND_CD = C.BRAND_CD
-		    AND (A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) > 0
-		    AND A.ITEMKIND_CD = #{itemkindCd}
-	        <![CDATA[
-	        /* 직접선택 */
-	        AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
-	        AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
-	        ]]>
-		GROUP BY C.BRAND_ENM, A.GOODS_CD, B.GOODS_NM
-	</select>
-
-	<!-- 클래임 주문조회 -->
-	<select id="getClaimOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getClaimOrderList */
-		SELECT
-		    DATE_FORMAT(DAY, '%m-%d') AS DAY
-		    , SUM(A.CNCL_AMT + A.RTN_AMT + A.CHG_DELV_FEE) AS CLM_AMT /*클레임액*/
-		    , SUM(A.CNCL_QTY + A.RTN_QTY + A.CHG_QTY) AS CLM_QTY /*클레임수*/
-		    , ROUND(FLOOR(SUM(A.CNCL_AMT + A.RTN_AMT + A.CHG_DELV_FEE) / SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT) * 100 * 10) / 10, 1) AS AMT_RATE
-		    , ROUND(FLOOR(SUM(A.CNCL_QTY + A.RTN_QTY + A.CHG_QTY) / SUM(A.SELL_QTY) * 100 * 10) / 10, 1) AS CLM_RATE
-		    , SUM(A.CNCL_QTY) AS CNCL_QTY /*취소수*/
-		    , SUM(A.CNCL_AMT) AS CNCL_AMT /*취소액*/
-		    , SUM(A.RTN_QTY) AS RTN_QTY /*반품수*/
-		    , SUM(A.RTN_AMT) AS RTN_AMT /*반품액*/
-		    , SUM(A.CHG_QTY) AS CHG_QTY /*교환수*/
-		    , SUM(A.CHG_DELV_FEE) AS CHG_DELV_FEE /*교환배송비*/
-		FROM TB_STAT_ORD_DAY A
-		WHERE 1=1
-	        <![CDATA[
-	        /* 직접선택 */
-	        AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
-	        AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
-	        ]]>
-			<if test="multiFrontGb != null">
-				/* 디바이스 */
-				<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiExtmallId != null">
-				/* 제휴몰 */
-				<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiSupplyCompCd != null">
-				/* 공급처 */
-				<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiBrandCd != null">
-				/* 브랜드 */
-				<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiItemkindCd != null">
-				/* 품목 */
-				<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-			<if test="multiAfLinkCd != null">
-				/* 채널 */
-				<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-			</if>
-		GROUP BY DATE_FORMAT(DAY, '%m-%d')
-	</select>
-
-	<!-- 베스트 상품 조회 -->
-	<sql id="getBestOrderListSql">
-        /* TsaStatistics.getBestOrderList */
-        SELECT
-            (SELECT SUBSTRING_INDEX(SYS_IMG_NM , '/', 2) FROM TB_GOODS_IMG X WHERE X.GOODS_CD = B.GOODS_CD AND X.DEFAULT_IMG_YN = 'Y' LIMIT 1) AS SYS_IMG_NM /*상품이미지*/
-            , C.BRAND_ENM /*브랜드명*/
-            , A.GOODS_CD /*상품코드*/
-            , B.GOODS_NM /*상품명*/
-            , CASE WHEN A.DISTRIBUTION_GB = 'WMS' THEN '위탁' ELSE '입점' END AS DISTRIBUTION_GB /*구분*/
-            , B.CURR_PRICE /*판매가*/
-            , SUM(A.SELL_QTY - A.CNCL_QTY - A.RTN_QTY) AS SELL_QTY /*판매수*/
-            , SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT /*매출액*/
-            , SUM(D.STOCK_QTY) AS STOCK_QTY /*현재고수량*/
-        FROM TB_STAT_ORD_DAY A, TB_GOODS B, TB_BRAND C, TB_GOODS_STOCK D
-        WHERE A.GOODS_CD = B.GOODS_CD
-            AND A.BRAND_CD = C.BRAND_CD
-            AND A.GOODS_CD = D.GOODS_CD
-            <![CDATA[
-            /* 직접선택 */
-            AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
-            AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
-            ]]>
-            <if test="multiFrontGb != null">
-                /* 디바이스 */
-                <foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="multiExtmallId != null">
-                /* 제휴몰 */
-                <foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="multiDistributionGb != null">
-                /* 물류구분 */
-                <foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="multiFormalGb != null">
-                /* 정상/이월구분 */
-                <foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="multiSexGb != null">
-                /* 성별구분 */
-                <foreach collection="multiSexGb" item="item" index="index"  open="AND A.SEX_GB IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="multiAgeGb != null">
-                /* 성별구분 */
-                <foreach collection="multiAgeGb" item="item" index="index"  open="AND A.AGE IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="multiBrandCd != null">
-                /* 브랜드 */
-                <foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="multiItemkindCd != null">
-                /* 품목 */
-                <foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="multiAfLinkCd != null">
-                /* 채널 */
-                <foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-        GROUP BY C.BRAND_ENM, A.GOODS_CD, B.GOODS_NM, A.DISTRIBUTION_GB, B.CURR_PRICE
-        ORDER BY TOT_AMT DESC
-	</sql>
-
-	<!-- 베스트 주문조회 -->
-	<select id="getBestOrderList" parameterType="Statistics" resultType="Statistics">
-		<include refid="getBestOrderListSql"></include>
-	</select>
-	<!-- 베스트 주문조회 -->
-	<select id="getBestOrderListMap" parameterType="Statistics" resultType="paramMap">
-		<include refid="getBestOrderListSql"></include>
-	</select>
-
-	<!-- 쿠폰사용통계조회 -->
-	<select id="getCouponOrderList" parameterType="Statistics" resultType="Statistics">
-	   /* TsaStatistics.getCouponOrderList */
-		WITH TAB AS (
-		     SELECT
-		        A.ORD_NO
-		        , B.ORD_DTL_NO
-		        , B.ORD_QTY
-		        , B.CNCL_RTN_QTY
-		        , B.ORD_AMT
-		        , B.CURR_PRICE
-		        , B.CNCL_RTN_AMT
-		        , B.ORD_DTL_STAT
-		        , A.PAY_DT
-		        , C.GOODS_CD
-		        , CPN1_DC_AMT
-		        , CPN1_CPN_SQ
-		        , GOODS_CPN_DC_AMT
-		        , GOODS_CPN_SQ
-		        , CART_CPN_DC_AMT
-		        , CART_CPN_SQ
-		    FROM TB_ORDER A, TB_ORDER_DETAIL B, TB_GOODS C, TB_CUSTOMER D
-		    WHERE A.ORD_NO = B.ORD_NO
-		        AND B.GOODS_CD = C.GOODS_CD
-		        AND A.CUST_NO = D.CUST_NO
-	            <![CDATA[
-		        AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y%m%d')                         -- 시작일변수
-		        AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
-                ]]>
-		        AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98') -- 주문접수,입금대기,입금전취소 제외
-		        AND B.ORD_QTY > B.CNCL_RTN_QTY
-		)
-		, TAB_CPN_STAT AS (
-		    SELECT CPN_TYPE, A.CPN_ID, A.CPN_NM
-		        , 100 - IFNULL((SELECT MAX(BURDEN_RATE) FROM TB_COUPON_BURDEN X WHERE X.CPN_ID = A.CPN_ID), 0) AS BURDEN
-		        , COUNT(1) AS USE_CNT
-		        , SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * (C.ORD_QTY - C.CNCL_RTN_QTY)) AS ORD_AMT
-		        , SUM(C.CPN1_DC_AMT) AS CPN_AMT
-		    FROM TB_COUPON A, TB_CUST_COUPON B, TAB C
-		    WHERE A.CPN_ID = B.CPN_ID
-		        AND B.CUST_CPN_SQ = C.CPN1_CPN_SQ
-		        AND A.CPN_TYPE = 'G230_10'-- 즉시할인쿠폰
-		        AND C.CPN1_DC_AMT > 0
-		    -- 쿠폰번호조건 (CPN_ID)
-		    GROUP BY CPN_TYPE, A.CPN_ID, A.CPN_NM
-		    UNION ALL
-		    SELECT CPN_TYPE, A.CPN_ID, A.CPN_NM
-		        , 100 - IFNULL((SELECT MAX(BURDEN_RATE) FROM TB_COUPON_BURDEN X WHERE X.CPN_ID = A.CPN_ID), 0) AS BURDEN
-		        , COUNT(1) AS USE_CNT
-		        , SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * (C.ORD_QTY - C.CNCL_RTN_QTY)) AS ORD_AMT
-		        , SUM(C.GOODS_CPN_DC_AMT) AS CPN_AMT
-		    FROM TB_COUPON A, TB_CUST_COUPON B, TAB C
-		    WHERE A.CPN_ID = B.CPN_ID
-		        AND B.CUST_CPN_SQ = C.GOODS_CPN_SQ
-		        AND A.CPN_TYPE = 'G230_11'-- 상품쿠푼
-		        AND C.GOODS_CPN_DC_AMT > 0
-		    -- 쿠폰번호조건 (CPN_ID)
-		    GROUP BY CPN_TYPE, A.CPN_ID, A.CPN_NM
-		    UNION ALL
-		    SELECT CPN_TYPE, A.CPN_ID, A.CPN_NM
-		        , 100 - IFNULL((SELECT MAX(BURDEN_RATE) FROM TB_COUPON_BURDEN X WHERE X.CPN_ID = A.CPN_ID), 0) AS BURDEN
-		        , COUNT(1) AS USE_CNT
-		        , SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * (C.ORD_QTY - C.CNCL_RTN_QTY)) AS ORD_AMT
-		        , SUM(C.CART_CPN_DC_AMT) AS CPN_AMT
-		    FROM TB_COUPON A, TB_CUST_COUPON B, TAB C
-		    WHERE A.CPN_ID = B.CPN_ID
-		        AND B.CUST_CPN_SQ = C.CART_CPN_SQ
-		        AND A.CPN_TYPE = 'G230_20'-- 장바구니쿠푼
-		        AND C.CART_CPN_DC_AMT > 0
-		    -- 쿠폰번호조건 (CPN_ID)
-		    GROUP BY CPN_TYPE, A.CPN_ID, A.CPN_NM
-		    UNION ALL
-		    SELECT CPN_TYPE, A.CPN_ID, A.CPN_NM
-		        , 100 - IFNULL((SELECT MAX(BURDEN_RATE) FROM TB_COUPON_BURDEN X WHERE X.CPN_ID = A.CPN_ID), 0) AS BURDEN
-		        , COUNT(1) AS USE_CNT
-		        , SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * (C.ORD_QTY - C.CNCL_RTN_QTY)) AS ORD_AMT
-		        , SUM(D.DELV_CPN_DC_AMT) AS CPN_AMT
-		    FROM TB_COUPON A, TB_CUST_COUPON B, TAB C, TB_DELIVERY_FEE D
-		    WHERE A.CPN_ID = B.CPN_ID
-		        AND B.CUST_CPN_SQ = C.CART_CPN_SQ
-		        AND C.ORD_NO = D.ORD_NO
-		        AND B.CUST_CPN_SQ = D.DELV_CPN_SQ
-		        AND A.CPN_TYPE = 'G230_30'-- 배송비쿠푼
-		        AND D.DELV_CPN_DC_AMT > 0
-		    -- 쿠폰번호조건 (CPN_ID)
-		    GROUP BY CPN_TYPE, A.CPN_ID, A.CPN_NM
-		)
-		SELECT CPN_TYPE -- 쿠폰타입
-		    , FN_GET_CODE_NM('G230', CPN_TYPE) AS CPN_TYPE_NM -- 쿠폰타입명
-		    , CPN_ID -- 쿠폰번호
-		    , CPN_NM -- 쿠폰명
-		    , BURDEN -- 자사분담율
-		    , DOWN_CNT
-			, ROUND((USE_CNT / DOWN_CNT) * 100 * 100) / 10 / 10 AS USE_RATE
-		    , USE_CNT -- 사용수
-		    , ORD_AMT -- 주문금액
-		    , CPN_AMT -- 쿠폰비용
-		FROM (
-		    SELECT CPN_TYPE -- 쿠폰타입
-		        , FN_GET_CODE_NM('G230', CPN_TYPE) AS CPN_TYPE_NM -- 쿠폰타입명
-		        , CPN_ID -- 쿠폰번호
-		        , CPN_NM -- 쿠폰명
-		        , BURDEN -- 자사분담율
-		        , (SELECT COUNT(1) FROM TB_CUST_COUPON X WHERE X.CPN_ID = A.CPN_ID) AS DOWN_CNT
-		        , USE_CNT -- 사용수
-		        , ORD_AMT -- 주문금액
-		        , CPN_AMT -- 쿠폰비용
-		    FROM TAB_CPN_STAT A
-		    WHERE 1=1
-            <if test="multiCpnId != null">
-                /* 쿠폰번호 */
-                <foreach collection="multiCpnId" item="item" index="index"  open="AND A.CPN_ID IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-            <if test="cpnTypeArr != null">
-                /* 쿠폰유형조건 (G230_10  즉시할인쿠폰, G230_11 상품쿠폰, G230_20   주문서쿠폰,  G230_30 배송비쿠폰 */
-                <foreach collection="cpnTypeArr" item="item" index="index"  open="AND A.CPN_TYPE IN (" close=")" separator=",">#{item}</foreach>
-            </if>
-		) A
-	</select>
-
-	<!-- 쿠폰사용통계상세조회 -->
-	<select id="getCouponOrderDetailList" parameterType="Statistics" resultType="Statistics">
-	   /* TsaStatistics.getCouponOrderDetailList */
-		SELECT Z.BRAND_CD
-		    , Z.BRAND_ENM
-		    , Z.GOODS_CD
-		    , Z.GOODS_NM
-		    , Z.ORD_AMT
-		    , Z.ORD_QTY
-		    , Z.CUST_CNT
-		    , X.CUST_CPN_CNT
-			, ROUND((X.CUST_CPN_CNT / Z.CUST_CNT * 100 * 100) / 10) / 10 AS ORD_RATE
-		FROM (
-		     SELECT
-		        A.BRAND_CD
-		        , B.BRAND_ENM
-		        , A.GOODS_CD
-		        , A.GOODS_NM
-		        , SUM(ORD_AMT) AS ORD_AMT
-		        , SUM(ORD_QTY) AS ORD_QTY
-		        , SUM(CUST_CNT) AS CUST_CNT
-		    FROM (
-		         SELECT
-		            C.BRAND_CD
-		            , C.GOODS_CD
-		            , C.GOODS_NM
-		            , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
-		            , SUM(B.ORD_QTY - B.CNCL_RTN_QTY) AS ORD_QTY
-		            , COUNT(1) OVER(PARTITION BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO) AS CUST_CNT
-		        FROM TB_ORDER A, TB_ORDER_DETAIL B, TB_GOODS C, TB_CUSTOMER D
-		        WHERE A.ORD_NO = B.ORD_NO
-		        AND B.GOODS_CD = C.GOODS_CD
-		        AND A.CUST_NO = D.CUST_NO
-	            <![CDATA[
-		        AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
-		        AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
-	            ]]>
-		        AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98') -- 주문접수,입금대기,입금전취소 제외
-		        AND B.ORD_QTY > B.CNCL_RTN_QTY
-		        GROUP BY C.BRAND_CD, C.GOODS_CD, C.GOODS_NM, A.CUST_NO
-		    ) A, TB_BRAND B
-		    WHERE A.BRAND_CD = B.BRAND_CD
-		    GROUP BY A.BRAND_CD, B.BRAND_ENM, A.GOODS_CD
-		) Z
-		, (
-		    SELECT
-		        X.BRAND_CD
-		        , X.BRAND_ENM
-		        , X.GOODS_CD
-		        , X.CUST_CPN_CNT
-		    FROM (
-		        SELECT
-		            A.BRAND_CD
-		            , B.BRAND_ENM
-		            , A.GOODS_CD
-		            , SUM(A.CUST_CPN_CNT) AS CUST_CPN_CNT
-		        FROM (
-		            SELECT
-		                C.BRAND_CD
-		                , C.GOODS_CD
-		                , COUNT(1) OVER(PARTITION BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO) AS CUST_CPN_CNT
-		            FROM TB_ORDER A, TB_ORDER_DETAIL B, TB_GOODS C, TB_CUSTOMER D
-		            WHERE A.ORD_NO = B.ORD_NO
-		            AND B.GOODS_CD = C.GOODS_CD
-		            AND A.CUST_NO = D.CUST_NO
-		            <![CDATA[
-		            AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
-		            AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
-		            ]]>
-		            AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98') -- 주문접수,입금대기,입금전취소 제외
-		            AND B.ORD_QTY > B.CNCL_RTN_QTY
-		            AND EXISTS(
-		                SELECT 1
-		                FROM TB_COUPON X, TB_CUST_COUPON Y
-		                WHERE X.CPN_ID = Y.CPN_ID
-		                    AND Y.CUST_CPN_SQ = B.GOODS_CPN_SQ -- B.CPN1_CPN_SQ, B.CART_CPN_SQ (쿠폰종류에따라 설정)
-		                    AND X.CPN_ID = #{cpnId} -- 쿠폰번호변수
-		            )
-		            GROUP BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO
-		        ) A, TB_BRAND B
-		        WHERE A.BRAND_CD = B.BRAND_CD
-		        GROUP BY A.BRAND_CD, B.BRAND_ENM, A.GOODS_CD
-		    ) X
-		) X
-		WHERE Z.BRAND_CD = X.BRAND_CD
-		    AND Z.GOODS_CD = X.GOODS_CD
-	</select>
-
-	<!-- 다다익선 주문 통계 조회 -->
-	<select id="getTmtbOrderList" parameterType="Statistics" resultType="Statistics">
-	   /* TsaStatistics.getTmtbOrderList */
-		WITH TAB AS (
-		    SELECT A.ORD_NO
-		         , B.ORD_DTL_NO
-		         , B.ORD_QTY
-		         , B.CNCL_RTN_QTY
-		         , B.ORD_AMT
-		         , B.CURR_PRICE
-		         , B.CNCL_RTN_AMT
-		         , B.ORD_DTL_STAT
-		         , A.PAY_DT
-		         , C.GOODS_CD
-		         , B.TMTB1_SQ
-		         , B.TMTB1_DC_AMT
-		         , B.TMTB2_SQ
-		         , B.TMTB2_DC_AMT
-		    FROM TB_ORDER A,
-		         TB_ORDER_DETAIL B,
-		         TB_GOODS C,
-		         TB_CUSTOMER D
-		    WHERE A.ORD_NO = B.ORD_NO
-		      AND B.GOODS_CD = C.GOODS_CD
-		      AND A.CUST_NO = D.CUST_NO
-		      <![CDATA[
-		      AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
-		      AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
-		      ]]>
-		      AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98')               -- 주문접수,입금대기,입금전취소 제외
-		      AND B.ORD_QTY > B.CNCL_RTN_QTY
-              <choose>
-				  <when test="applyGbArr != null and applyGbArr != ''">
-					  /* 프로모션유형 */
-					  <foreach collection="applyGbArr" item="item" index="index">
-						  <if test='item == "G810_10"'>
-							  AND TMTB1_DC_AMT > 0 -- 수량
-						  </if>
-						  <if test='item == "G810_11"'>
-							  AND TMTB2_DC_AMT > 0 -- 금액
-						  </if>
-					  </foreach>
-				  </when>
-		    	<otherwise>
-					/* 프로모션유형값없을시 */
-					AND (B.TMTB1_DC_AMT + B.TMTB2_DC_AMT) > 0
-				</otherwise>
-			  </choose>
-		)
-		-- 수량할인
-		, TMTB1 AS (
-		    SELECT
-		        TMTB_SQ
-		        , TMTB_NM
-		        , FN_GET_CODE_NM('G810', APPLY_GB) AS APPLY_GB
-		        , SUM(ORD_CNT) AS ORD_CNT
-		        , SUM(ORD_AMT) AS ORD_AMT
-		        , SUM(DC_AMT) AS DC_AMT
-		    FROM
-		    (
-		        SELECT A.TMTB_SQ
-		            , A.TMTB_NM
-		            , APPLY_GB
-		            , COUNT(1) AS ORD_CNT
-		            , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
-		            , SUM(B.TMTB1_DC_AMT) AS DC_AMT
-		        FROM TB_TMTB A, TAB B
-		        WHERE A.TMTB_SQ = B.TMTB1_SQ
-		        GROUP BY A.TMTB_SQ, A.TMTB_NM, A.APPLY_GB, B.ORD_NO
-		    ) X
-		    GROUP BY TMTB_SQ, TMTB_NM, APPLY_GB
-		)
-		-- 금액할인
-		, TMTB2 AS (
-		    SELECT
-		        TMTB_SQ
-		        , TMTB_NM
-		        , FN_GET_CODE_NM('G810', APPLY_GB) AS APPLY_GB
-		        , SUM(ORD_CNT) AS ORD_CNT
-		        , SUM(ORD_AMT) AS ORD_AMT
-		        , SUM(DC_AMT) AS DC_AMT
-		    FROM
-		    (
-		        SELECT A.TMTB_SQ
-		            , A.TMTB_NM
-		            , APPLY_GB
-		            , COUNT(1) AS ORD_CNT
-		            , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
-		            , SUM(B.TMTB1_DC_AMT) AS DC_AMT
-		        FROM TB_TMTB A, TAB B
-		        WHERE A.TMTB_SQ = B.TMTB2_SQ
-                <if test="applyGbArr != null">
-                    /* 프로모션유형 */
-                    <foreach collection="applyGbArr" item="item" index="index"  open="AND A.APPLY_GB IN (" close=")" separator=",">#{item}</foreach>
-                </if>
-		        GROUP BY A.TMTB_SQ, A.TMTB_NM, A.APPLY_GB, B.ORD_NO
-		    ) X
-		    GROUP BY TMTB_SQ, TMTB_NM, APPLY_GB
-		)
-		SELECT *
-		FROM TMTB1
-		WHERE 1=1
-        <if test="multiTmtbSq != null">
-            /* 프로모션번호  */
-            <foreach collection="multiTmtbSq" item="item" index="index"  open="AND TMTB_SQ IN (" close=")" separator=",">#{item}</foreach>
-        </if>
-		UNION ALL
-		SELECT *
-		FROM TMTB2
-		WHERE 1=1
-        <if test="multiTmtbSq != null">
-            /* 프로모션번호  */
-            <foreach collection="multiTmtbSq" item="item" index="index"  open="AND TMTB_SQ IN (" close=")" separator=",">#{item}</foreach>
-        </if>
-	</select>
-
-	<!-- 다다익선 주문 통계 상세조회 -->
-	<select id="getTmtbOrderDetailList" parameterType="Statistics" resultType="Statistics">
-	   /* TsaStatistics.getTmtbOrderDetailList */
-		SELECT
-		    A.BRAND_CD
-		    , B.BRAND_ENM
-		    , A.GOODS_CD
-		    , A.GOODS_NM
-		    , SUM(ORD_AMT) AS ORD_AMT
-		    , SUM(ORD_QTY) AS ORD_QTY
-		    , SUM(CUST_CNT) AS CUST_CNT
-		FROM (
-		     SELECT
-		        C.BRAND_CD
-		        , C.GOODS_CD
-		        , C.GOODS_NM
-		        , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
-		        , SUM(B.ORD_QTY - B.CNCL_RTN_QTY) AS ORD_QTY
-		        , COUNT(1) OVER(PARTITION BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO) AS CUST_CNT
-		    FROM TB_ORDER A, TB_ORDER_DETAIL B, TB_GOODS C, TB_CUSTOMER D
-		    WHERE A.ORD_NO = B.ORD_NO
-		    AND B.GOODS_CD = C.GOODS_CD
-		    AND A.CUST_NO = D.CUST_NO
-		    <![CDATA[
-		    AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
-		    AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
-		    ]]>
-		    AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98') -- 주문접수,입금대기,입금전취소 제외
-		    AND B.ORD_QTY > B.CNCL_RTN_QTY
-            <if test="applyGbArr != null">
-                /* 프로모션유형 */
-                <foreach collection="applyGbArr" item="item" index="index">
-                    <if test='item == "G810_10"'>
-                        AND B.TMTB1_SQ = #{tmtbSq} -- 수량
-                    </if>
-                    <if test='item == "G810_11"'>
-                        AND B.TMTB2_SQ = #{tmtbSq} -- 금액
-                    </if>
-                </foreach>
-            </if>
-		    GROUP BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO
-		) A, TB_BRAND B
-		WHERE A.BRAND_CD = B.BRAND_CD
-		GROUP BY A.BRAND_CD, B.BRAND_ENM, A.GOODS_CD
-	</select>
-
-	<!-- 기획전 주문조회 -->
-	<select id="getPlanOrderList" parameterType="Statistics" resultType="Statistics">
-	    /* TsaStatistics.getPlanOrderList */
-		SELECT
-		    CASE WHEN DISTRIBUTION_GB = 'G065_20' THEN '입점' ELSE '위탁' END AS DISTRIBUTION_GB
-		    , BRAND_ENM
-		    , PLAN_SQ
-		    , (SELECT PLAN_NM FROM TB_PLAN P WHERE P.PLAN_SQ = X.PLAN_SQ) AS PLAN_NM
-		    , SUM(ORD_AMT) AS ORD_AMT
-		    , SUM(ORD_CNT) AS ORD_CNT
-		FROM (
-		    SELECT C.DISTRIBUTION_GB
-		         , F.BRAND_ENM
-		         , E.PLAN_SQ
-		         , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
-		         , COUNT(1) AS ORD_CNT
-		    FROM TB_ORDER A,
-		         TB_ORDER_DETAIL B,
-		         TB_GOODS C,
-		         TB_CUSTOMER D,
-		         TB_PLAN_DETAIL E,
-		         TB_BRAND F
-		    WHERE A.ORD_NO = B.ORD_NO
-		      AND B.GOODS_CD = C.GOODS_CD
-		      AND A.CUST_NO = D.CUST_NO
-		      AND B.PLAN_DTL_SQ = E.PLAN_DTL_SQ
-		      AND F.BRAND_CD = C.BRAND_CD
-		      <![CDATA[
-		      AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
-		      AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
-		      ]]>
-		      AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98')               -- 주문접수,입금대기,입금전취소 제외
-		      AND B.ORD_QTY > B.CNCL_RTN_QTY
-		      <choose>
-				  <when test="distributionGbS != null and distributionGbS !='' and distributionGbW != null and distributionGbW !=''">
-					  AND C.DISTRIBUTION_GB IN ('G065_10', 'G065_11', 'G065_12', 'G065_20')
-				  </when>
-				  <when test="distributionGbW != null and distributionGbW !=''">
-					  AND C.DISTRIBUTION_GB IN ('G065_10', 'G065_11', 'G065_12')
-				  </when>
-				  <when test="distributionGbS != null and distributionGbS !=''">
-					  AND C.DISTRIBUTION_GB = 'G065_20'
-				  </when>
-			  </choose>
-		      <if test="multiPlanSq != null">
-		          /* 기획전번호  */
-		          <foreach collection="multiPlanSq" item="item" index="index"  open="AND E.PLAN_SQ IN (" close=")" separator=",">#{item}</foreach>
-		      </if>
-		    GROUP BY C.DISTRIBUTION_GB, F.BRAND_ENM, E.PLAN_SQ, A.ORD_NO
-		) X
-		GROUP BY DISTRIBUTION_GB, BRAND_ENM, PLAN_SQ
-	</select>
-
-	<!-- 기획전 주문상세 조회 -->
-	<select id="getPlanOrderDetailList" parameterType="Statistics" resultType="Statistics">
-	    /* TsaStatistics.getPlanOrderDetailList */
-		WITH TAB AS (
-		    SELECT SUM(CUST_CNT) AS TOT_CUST_CNT
-		    FROM (
-		        SELECT COUNT(1) AS CUST_CNT
-		        FROM TB_ORDER A,
-		             TB_ORDER_DETAIL B,
-		             TB_GOODS C,
-		             TB_CUSTOMER D,
-		             TB_PLAN_DETAIL E,
-		             TB_BRAND F
-		        WHERE A.ORD_NO = B.ORD_NO
-		          AND B.GOODS_CD = C.GOODS_CD
-		          AND A.CUST_NO = D.CUST_NO
-		          AND B.PLAN_DTL_SQ = E.PLAN_DTL_SQ
-		          AND F.BRAND_CD = C.BRAND_CD
-		          <![CDATA[
-		          AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
-		          AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
-		          ]]>
-		          AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98')               -- 주문접수,입금대기,입금전취소 제외
-		          AND B.ORD_QTY > B.CNCL_RTN_QTY
-		          AND E.PLAN_SQ = #{planSq}
-		        GROUP BY A.CUST_NO
-		    ) Z
-		)
-		SELECT
-		    CASE WHEN DISTRIBUTION_GB = 'G065_20' THEN '입점' ELSE '위탁' END AS DISTRIBUTION_GB
-		    , GOODS_CD
-		    , GOODS_NM
-		    , SUM(ORD_AMT) AS ORD_AMT
-		    , SUM(ORD_QTY) AS ORD_QTY
-		    , SUM(CUST_CNT) AS CUST_CNT
-		    , ROUND((SUM(CUST_CNT) / (SELECT TOT_CUST_CNT FROM TAB) * 100 * 100) / 10) / 10 AS ORD_RATE
-		FROM (
-		     SELECT C.DISTRIBUTION_GB
-		         , C.GOODS_CD
-		         , C.GOODS_NM
-		         , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
-		         , SUM(B.ORD_QTY - B.CNCL_RTN_QTY) AS ORD_QTY
-		         , COUNT(1) OVER(PARTITION BY C.DISTRIBUTION_GB, C.GOODS_CD, A.CUST_NO) AS CUST_CNT
-		    FROM TB_ORDER A,
-		         TB_ORDER_DETAIL B,
-		         TB_GOODS C,
-		         TB_CUSTOMER D,
-		         TB_PLAN_DETAIL E,
-		         TB_BRAND F
-		    WHERE A.ORD_NO = B.ORD_NO
-		      AND B.GOODS_CD = C.GOODS_CD
-		      AND A.CUST_NO = D.CUST_NO
-		      AND B.PLAN_DTL_SQ = E.PLAN_DTL_SQ
-		      AND F.BRAND_CD = C.BRAND_CD
-		      <![CDATA[
-		      AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
-		      AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
-		      ]]>
-		      AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98')               -- 주문접수,입금대기,입금전취소 제외
-		      AND B.ORD_QTY > B.CNCL_RTN_QTY
-		      AND E.PLAN_SQ = #{planSq}
-		    GROUP BY C.DISTRIBUTION_GB, C.GOODS_CD, C.GOODS_NM, A.CUST_NO
-		) X
-		GROUP BY DISTRIBUTION_GB, GOODS_CD, GOODS_NM
-	</select>
-
-	<!-- 카드 목록 -->
-	<select id="getCardList" resultType="Card">
-		/* TsaStatistics.getCardList */
-		SELECT CD AS CARD_CD
-		, CD_NM AS CARD_NM
-		FROM   TB_COMMON_CODE
-		WHERE CD_GB = 'G050'
-		ORDER  BY CD_GB, DISP_ORD
-	</select>
-
-	<!-- 결제수단별통계 목록 -->
-	<select id="getPaymentList" parameterType="Statistics" resultType="Statistics">
-	/* TsaStatistics.getPaymentList */
-		WITH TAB AS (
-			SELECT
-				DATE_FORMAT(DAY, '%Y-%m-%d') AS DAY
-				, PAY_MEANS -- 결제수단
-				, PAY_AMT -- 결제금액
-				, PG_GB -- PG구분
-			FROM TB_STAT_PAY A
-			WHERE 1=1
-				AND A.DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
-			  	AND A.DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-			<if test='multiCardId != null and multiCardId != ""'>
-				AND COM_CARD_CD IN
-				<foreach collection="multiCardId" item="item" index="index"  open="(" close=")" separator=",">
-					#{item}
-				</foreach>
-			</if>
-			<choose>
-			<when test='simpleGbC != null and simpleGbC != "" and simpleGbB != null and simpleGbB != ""'>
-				AND PG_GB IN('KAKAO','NAVER','PAYCO')
-			    AND PAY_MEANS IN ('G014_30','G014_10')
-			</when>
-			<when test='simpleGbC != null and simpleGbC != ""'>
-				AND PG_GB IN('KAKAO','NAVER','PAYCO')
-			  	AND PAY_MEANS = 'G014_30'
-			</when>
-			<when test='simpleGbB != null and simpleGbB != ""'>
-				AND PG_GB IN('KAKAO','NAVER','PAYCO')
-			  	AND PAY_MEANS = 'G014_10'
-			</when>
-			</choose>
-		)
-		SELECT
-			DAY
-			, SUM(CD_AMT) AS CD_AMT -- 카드
-			, SUM(AC_AMT) AS AC_AMT -- 실시간계좌이체
-			, SUM(VA_AMT) AS VA_AMT -- 무통장
-			, SUM(HP_AMT) AS HP_AMT -- 휴대폰
-			, SUM(CP_AMT) AS CP_AMT -- PG쿠폰
-			, SUM(NPAY_AMT) AS NPAY_AMT -- 네이버페이
-			, SUM(PAYCO_AMT) AS PAYCO_AMT -- 페이코
-			, SUM(KAKAO_AMT) AS KAKAO_AMT -- 카카오
-		FROM (
-			SELECT
-				DAY
-				, CASE WHEN PAY_MEANS = 'G014_30' THEN PAY_AMT ELSE 0 END AS CD_AMT
-				, CASE WHEN PAY_MEANS = 'G014_10' THEN PAY_AMT ELSE 0 END AS AC_AMT
-				, CASE WHEN PAY_MEANS = 'G014_20' THEN PAY_AMT ELSE 0 END AS VA_AMT
-				, CASE WHEN PAY_MEANS = 'G014_60' THEN PAY_AMT ELSE 0 END AS HP_AMT
-				, CASE WHEN PAY_MEANS = 'G014_50' THEN PAY_AMT ELSE 0 END AS CP_AMT
-				, CASE WHEN PAY_MEANS = 'NAVER' THEN PAY_AMT ELSE 0 END AS NPAY_AMT
-				, CASE WHEN PAY_MEANS = 'PAYCO' THEN PAY_AMT ELSE 0 END AS PAYCO_AMT
-				, CASE WHEN PAY_MEANS = 'KAKAO' THEN PAY_AMT ELSE 0 END AS KAKAO_AMT
-			FROM (
-				SELECT
-			<choose>
-				<when test='dayGb == "W"'> <!-- 주별 -->
-					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-				</when>
-				<when test='dayGb == "M"'> <!-- 월별 -->
-					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-				</when>
-				<otherwise> <!-- 일별 -->
-					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-				</otherwise>
-			</choose>
-					, PAY_MEANS
-					, SUM(PAY_AMT) AS PAY_AMT
-				FROM TAB
-				WHERE PAY_MEANS = 'G014_30'
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-			</when>
-			<otherwise> <!-- 일별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-			</otherwise>
-		</choose>
-				UNION ALL
-				SELECT
-			<choose>
-				<when test='dayGb == "W"'> <!-- 주별 -->
-					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-				</when>
-				<when test='dayGb == "M"'> <!-- 월별 -->
-					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-				</when>
-				<otherwise> <!-- 일별 -->
-					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-				</otherwise>
-			</choose>
-					, PAY_MEANS
-					, SUM(PAY_AMT) AS PAY_AMT
-				FROM TAB
-				WHERE PAY_MEANS = 'G014_10'
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-			</when>
-			<otherwise> <!-- 일별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-			</otherwise>
-		</choose>
-				UNION ALL
-				SELECT
-			<choose>
-				<when test='dayGb == "W"'> <!-- 주별 -->
-					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-				</when>
-				<when test='dayGb == "M"'> <!-- 월별 -->
-					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-				</when>
-				<otherwise> <!-- 일별 -->
-					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-				</otherwise>
-			</choose>
-					, PAY_MEANS
-					, SUM(PAY_AMT) AS PAY_AMT
-				FROM TAB
-				WHERE PAY_MEANS = 'G014_20'
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-			</when>
-			<otherwise> <!-- 일별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-			</otherwise>
-		</choose>
-				UNION ALL
-				SELECT
-			<choose>
-				<when test='dayGb == "W"'> <!-- 주별 -->
-					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-				</when>
-				<when test='dayGb == "M"'> <!-- 월별 -->
-					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-				</when>
-				<otherwise> <!-- 일별 -->
-					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-				</otherwise>
-			</choose>
-					, PAY_MEANS
-					, SUM(PAY_AMT) AS PAY_AMT
-				FROM TAB
-				WHERE PAY_MEANS = 'G014_60'
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-			</when>
-			<otherwise> <!-- 일별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-			</otherwise>
-		</choose>
-				UNION ALL
-				SELECT
-			<choose>
-				<when test='dayGb == "W"'> <!-- 주별 -->
-					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-				</when>
-				<when test='dayGb == "M"'> <!-- 월별 -->
-					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-				</when>
-				<otherwise> <!-- 일별 -->
-					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-				</otherwise>
-			</choose>
-					, PAY_MEANS
-					, SUM(PAY_AMT) AS PAY_AMT
-				FROM TAB
-				WHERE PAY_MEANS = 'G014_50'
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-			</when>
-			<otherwise> <!-- 일별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-			</otherwise>
-		</choose>
-				UNION ALL
-				SELECT
-			<choose>
-				<when test='dayGb == "W"'> <!-- 주별 -->
-					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-				</when>
-				<when test='dayGb == "M"'> <!-- 월별 -->
-					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-				</when>
-				<otherwise> <!-- 일별 -->
-					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-				</otherwise>
-			</choose>
-					, PG_GB AS PAY_MEANS
-					, SUM(PAY_AMT) AS PAY_AMT
-				FROM TAB
-				WHERE PG_GB = 'NAVER'
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-			</when>
-			<otherwise> <!-- 일별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-			</otherwise>
-		</choose>
-				UNION ALL
-				SELECT
-			<choose>
-				<when test='dayGb == "W"'> <!-- 주별 -->
-					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-				</when>
-				<when test='dayGb == "M"'> <!-- 월별 -->
-					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-				</when>
-				<otherwise> <!-- 일별 -->
-					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-				</otherwise>
-			</choose>
-					, PG_GB AS PAY_MEANS
-					, SUM(PAY_AMT) AS PAY_AMT
-				FROM TAB
-				WHERE PG_GB = 'PAYCO'
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-			</when>
-			<otherwise> <!-- 일별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-			</otherwise>
-		</choose>
-				UNION ALL
-				SELECT
-			<choose>
-				<when test='dayGb == "W"'> <!-- 주별 -->
-					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-				</when>
-				<when test='dayGb == "M"'> <!-- 월별 -->
-					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-				</when>
-				<otherwise> <!-- 일별 -->
-					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-				</otherwise>
-			</choose>
-					, PG_GB AS PAY_MEANS
-					, SUM(PAY_AMT) AS PAY_AMT
-				FROM TAB
-				WHERE PG_GB = 'KAKAO'
-				GROUP BY DAY
-			) Z
-		) Z
-		GROUP BY DAY
-	</select>
-
-	<!-- 부결제수단별통계 목록 -->
-	<select id="getSubPaymentList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getSubPaymentList */
-		SELECT
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-			</when>
-			<otherwise> <!-- 일별 -->
-				DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-			</otherwise>
-		</choose>
-			, SUM(A.PNT_GIVE) AS PNT_GIVE -- 포인트적립액
-			, SUM(A.PNT_ORD_CNT) AS PNT_ORD_CNT -- 포인트사용주문수
-			, SUM(A.PNT_USE) AS PNT_USE -- 포인트사용액
-			, SUM(A.GIFT_REG_CNT) AS GIFT_REG_CNT -- 상품권등록매수
-			, SUM(A.GIFT_ORD_CNT) AS GIFT_ORD_CNT -- 상품권주문수
-			, SUM(A.GIFT_USE) AS GIFT_USE -- 상품권사용액
-		FROM TB_STAT_SUB_PAY A
-		WHERE A.DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
-		  AND A.DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-		<choose>
-			<when test='pointGb != null and pointGb != "" and giftCardGb != null and giftCardGb != ""'>
-				AND OCCUR_GB IN(#{pointGb}, #{giftCardGb})
-			</when>
-			<when test='pointGb != null and pointGb != ""'>
-				AND OCCUR_GB = #{pointGb}
-			</when>
-			<when test='giftCardGb != null and giftCardGb != ""'>
-				AND OCCUR_GB = {giftCardGb}
-			</when>
-		</choose>
-		<choose>
-			<when test='dayGb == "W"'> <!-- 주별 -->
-				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-			</when>
-			<when test='dayGb == "M"'> <!-- 월별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-			</when>
-			<otherwise> <!-- 일별 -->
-				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-			</otherwise>
-		</choose>
-	</select>
-
-	<!-- 포인트잔액 -->
-	<select id="getRemainPoint" resultType="java.lang.Long">
-		/* TsaStatistics.getRemainPoint */
-		SELECT
-			SUM(RM_PNT_AMT) AS RM_PNT_AMT
-		FROM TB_CUST_POINT A
-		WHERE A.EXP_CMP_DT IS NULL
-	</select>
-
-	<!-- 포인트잔액 -->
-	<select id="getRemainGiftCard" resultType="java.lang.Long">
-		/* TsaStatistics.getRemainGiftCard */
-		SELECT
-		SUM(RM_GFCD_AMT) AS RM_GFCD_AMT
-		FROM TB_CUST_GIFTCARD A
-		WHERE DATE_FORMAT(USE_EXP_DATE, '%Y%m%d') &lt; NOW()
-	</select>
-
-	<!-- 가입통계 -->
-	<select id="getCustomerJoinList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getCustomerJoinList */
-		SELECT
-	<choose>
-		<when test='dayGb == "W"'> <!-- 주별 -->
-			CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
-		</when>
-		<when test='dayGb == "M"'> <!-- 월별 -->
-			DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
-		</when>
-		<otherwise> <!-- 일별 -->
-			DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
-		</otherwise>
-	</choose>
-			, MAX(ALL_CNT) AS ALL_CNT
-			, MAX(REAL_CNT) AS REAL_CNT
-			, MAX(DORM_CNT) AS DORM_CNT
-			, MAX(VIP_CNT) AS VIP_CNT
-			, MAX(GOLD_CNT) AS GOLD_CNT
-			, MAX(SILVER_CNT) AS SILVER_CNT
-			, MAX(BRONZE_CNT) AS BRONZE_CNT
-			, MAX(WELCOME_CNT) AS WELCOME_CNT
-			, SUM(JOIN_CNT) AS JOIN_CNT
-			, SUM(DR_JOIN_CNT) AS DR_JOIN_CNT
-			, SUM(AF_JOIN_CNT) AS AF_JOIN_CNT
-			, SUM(CHG_DORM_CNT) AS CHG_DORM_CNT
-			, SUM(RM_DORM_CNT) AS RM_DORM_CNT
-			, SUM(SECEED_CNT) AS SECEED_CNT
-		FROM TB_STAT_CUST
-		WHERE DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
-		  AND DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-	<if test="multiSexGb != null">
-		/* 성별구분 */
-		<foreach collection="multiSexGb" item="item" index="index"  open="AND SEX_GB IN (" close=")" separator=",">#{item}</foreach>
-	</if>
-	<if test="multiAgeGb != null">
-		/* 연령구분 */
-		<foreach collection="multiAgeGb" item="item" index="index"  open="AND AGE IN (" close=")" separator=",">#{item}</foreach>
-	</if>
-	<choose>
-		<when test='dayGb == "W"'> <!-- 주별 -->
-			GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
-		</when>
-		<when test='dayGb == "M"'> <!-- 월별 -->
-			GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
-		</when>
-		<otherwise> <!-- 일별 -->
-			GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
-		</otherwise>
-	</choose>
-		ORDER BY DAY DESC
-	</select>
-
-	<!-- 등급별주문현황 -->
-	<select id="getCustomerGradOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getCustomerGradOrderList */
-		SELECT
-			CASE WHEN A.CUST_GRADE = 'G110_10' THEN 1
-				WHEN A.CUST_GRADE = 'G110_20' THEN 2
-				WHEN A.CUST_GRADE = 'G110_30' THEN 3
-				WHEN A.CUST_GRADE = 'G110_40' THEN 4
-				WHEN A.CUST_GRADE = 'G110_50' THEN 5
-			ELSE 6 END AS PRIORITY
-			, FN_GET_CODE_NM('G110', A.CUST_GRADE) AS CUST_GRADE
-			, SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_ORD_AMT -- 총매출액
-			, SUM(A.ORD_AMT) AS ORD_AMT -- 매출액
-			, SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
-			, SUM(A.ORD_CNT) AS ORD_CNT -- 주문수
-			, SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY -- 취/반품갯수
-			, ROUND(CEIL(AVG(A.ORD_CNT) * 10) / 10, 1) AS AVG_ORD_CNT -- 평균주문수
-			, ROUND(CEIL(AVG(A.SELL_QTY) * 10) / 10, 1) AS AVG_SELL_QTY -- 평균주문상품개수
-			, FLOOR(SUM(A.ORD_AMT) / SUM(A.ORD_CNT)) AS CUST_PRICE -- 객단가
-		FROM TB_STAT_CUST_ORD A
-		WHERE DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
-			AND DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-		<if test="multiFrontGb != null">
-			/* 디바이스 */
-			<foreach collection="multiFrontGb" item="item" index="index"  open="AND FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiSexGb != null">
-			/* 성별구분 */
-			<foreach collection="multiSexGb" item="item" index="index"  open="AND SEX_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiAgeGb != null">
-			/* 연령구분 */
-			<foreach collection="multiAgeGb" item="item" index="index"  open="AND AGE IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiBrandCd != null">
-			/* 브랜드 */
-			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiItemkindCd != null">
-			/* 품목 */
-			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		GROUP BY A.CUST_GRADE
-		ORDER BY PRIORITY
-	</select>
-
-	<!-- 등급별주문현황 -->
-	<select id="getCustomerAgeOrderList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getCustomerAgeOrderList */
-		SELECT
-			CASE WHEN A.AGE != 'X' THEN CONCAT(A.AGE, '대') ELSE '50대이상/기타' END AS AGE
-			, FN_GET_CODE_NM('G007', A.SEX_GB) AS SEX_GB
-			, SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_ORD_AMT -- 총매출액
-			, SUM(A.ORD_AMT) AS ORD_AMT -- 매출액
-			, SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
-			, SUM(A.ORD_CNT) AS ORD_CNT -- 주문수
-			, SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY -- 취/반품갯수
-			, ROUND(CEIL(AVG(A.ORD_CNT) * 10) / 10, 1) AS AVG_ORD_CNT -- 평균주문수
-			, ROUND(CEIL(AVG(A.SELL_QTY) * 10) / 10, 1) AS AVG_SELL_QTY -- 평균주문상품개수
-			, FLOOR(SUM(A.ORD_AMT) / SUM(A.ORD_CNT)) AS CUST_PRICE -- 객단가
-		FROM TB_STAT_CUST_ORD A
-		WHERE DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
-			AND DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
-		<if test="multiFrontGb != null">
-			/* 디바이스 */
-			<foreach collection="multiFrontGb" item="item" index="index"  open="AND FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiGradeGb != null">
-			/* 등급 */
-			<foreach collection="multiGradeGb" item="item" index="index"  open="AND CUST_GRADE IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiBrandCd != null">
-			/* 브랜드 */
-			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiItemkindCd != null">
-			/* 품목 */
-			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		GROUP BY A.AGE, A.SEX_GB
-		ORDER BY A.AGE, A.SEX_GB
-	</select>
-
-	<!-- 구매자랭킹 -->
-	<select id="getCustomerRankingList" parameterType="Statistics" resultType="Statistics">
-		/* TsaStatistics.getCustomerRankingList */
-		WITH TAB AS (
-			SELECT *
-			FROM (
-			SELECT A.ORD_NO
-				, B.ORD_DTL_NO
-				, B.ORD_QTY
-				, B.CNCL_RTN_QTY
-				, B.ORD_AMT
-				, B.CNCL_RTN_AMT
-				, B.CPN1_DC_AMT
-				, A.PAY_DT
-				, A.FRONT_GB
-				, C.ITEMKIND_CD
-				, C.BRAND_CD
-				, E.CUST_NO
-				, E.CUST_GRADE
-				, RANK() OVER (PARTITION BY B.ORD_DTL_NO ORDER BY B.ORD_DTL_HST_SQ) AS RNK
-			FROM TB_ORDER A,
-				TB_ORDER_DETAIL_HST B,
-				TB_GOODS C,
-				TB_CUSTOMER E
-			WHERE A.ORD_NO = B.ORD_NO
-				AND B.GOODS_CD = C.GOODS_CD
-				AND A.CUST_NO = E.CUST_NO
-				AND A.PAY_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d')                         -- 시작일변수
-				AND A.PAY_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
-				AND E.CUST_NO > 0
-				AND A.MALL_GB = 'G011_10'
-				AND B.ORD_EXCH_GB = 'O'
-				AND B.ORD_DTL_STAT = 'G013_20' -- 결제완료
-		<if test="multiFrontGb != null">
-			/* 디바이스 */
-			<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiSexGb != null">
-			/* 성별구분 */
-			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(E.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiAgeGb != null">
-			/* 연령구분 */
-			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(E.BIRTH_YMD) IS NULL THEN 'X'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
-				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiBrandCd != null">
-			/* 브랜드 */
-			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiItemkindCd != null">
-			/* 품목 */
-			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-			) A
-			WHERE RNK = 1
-		)
-		-- 판매수
-		, TAB_SELL_QTY AS (
-			SELECT
-				SUM(ORD_QTY) AS VAL
-				, '1' AS GBN
-				, CUST_NO
-			FROM TAB
-			GROUP BY CUST_NO
-		)
-		-- 매출
-		, TAB_ORD AS (
-			SELECT
-				SUM(ORD_AMT + CPN1_DC_AMT + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = A.ORD_DTL_NO)) AS VAL
-				, '2' AS GBN
-				, CUST_NO
-			FROM TAB A
-			GROUP BY CUST_NO
-		)
-		-- 취소갯수
-		, TAB_CNCL_QTY AS (
-			SELECT SUM(CHG_QTY) AS VAL
-				, '3' AS GBN
-				, C.CUST_NO
-			FROM TB_ORDER_CHANGE_DETAIL A, TB_ORDER_DETAIL B, TB_ORDER C, TB_GOODS E, TB_CUSTOMER G
-			WHERE A.ORD_DTL_NO = B.ORD_DTL_NO
-				AND B.ORD_NO = C.ORD_NO
-				AND B.GOODS_CD = E.GOODS_CD
-				AND C.CUST_NO = G.CUST_NO
-				AND CHG_STAT = 'G685_18' -- 결제후취소
-				AND COMPLETE_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d') -- 시작일변수
-				AND COMPLETE_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
-				AND MALL_GB = 'G011_10'
-				AND G.CUST_NO > 0
-		<if test="multiFrontGb != null">
-			/* 디바이스 */
-			<foreach collection="multiFrontGb" item="item" index="index"  open="AND C.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiSexGb != null">
-			/* 성별구분 */
-			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(G.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiAgeGb != null">
-			/* 연령구분 */
-			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(G.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
-				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiBrandCd != null">
-			/* 브랜드 */
-			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiItemkindCd != null">
-			/* 품목 */
-			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-			GROUP BY C.CUST_NO
-		)
-		-- 반품갯수
-		, TAB_RTN_QTY AS (
-			SELECT SUM(CHG_QTY) AS VAL
-				, '4' AS GBN
-				, C.CUST_NO
-			FROM TB_ORDER_CHANGE_DETAIL A, TB_ORDER_DETAIL B, TB_ORDER C, TB_GOODS E, TB_CUSTOMER G
-			WHERE A.ORD_DTL_NO = B.ORD_DTL_NO
-				AND B.ORD_NO = C.ORD_NO
-				AND B.GOODS_CD = E.GOODS_CD
-				AND C.CUST_NO = G.CUST_NO
-				AND CHG_STAT = 'G685_60' -- 반품완료
-				AND COMPLETE_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d') -- 시작일변수
-				AND COMPLETE_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
-				AND MALL_GB = 'G011_10'
-				AND G.CUST_NO > 0
-		<if test="multiFrontGb != null">
-			/* 디바이스 */
-			<foreach collection="multiFrontGb" item="item" index="index"  open="AND C.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiSexGb != null">
-			/* 성별구분 */
-			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(G.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiAgeGb != null">
-			/* 연령구분 */
-			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(G.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
-				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiBrandCd != null">
-			/* 브랜드 */
-			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiItemkindCd != null">
-			/* 품목 */
-			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-			GROUP BY C.CUST_NO
-		)
-		-- 취소액
-		, TAB_CNCL_AMT AS (
-			SELECT SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * B.CHG_QTY) AS VAL
-				, '5' AS GBN
-				, D.CUST_NO
-			FROM TB_ORDER_CHANGE_DETAIL B, TB_ORDER_DETAIL C, TB_ORDER D, TB_GOODS E, TB_CUSTOMER G
-			WHERE B.ORD_DTL_NO = C.ORD_DTL_NO
-				AND C.ORD_NO = D.ORD_NO
-				AND C.GOODS_CD = E.GOODS_CD
-				AND D.CUST_NO = G.CUST_NO
-				AND CHG_STAT = 'G685_18' -- 결제후취소
-				AND B.COMPLETE_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d') -- 시작일변수
-				AND B.COMPLETE_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
-				AND MALL_GB = 'G011_10'
-				AND G.CUST_NO > 0
-		<if test="multiFrontGb != null">
-			/* 디바이스 */
-			<foreach collection="multiFrontGb" item="item" index="index"  open="AND D.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiSexGb != null">
-			/* 성별구분 */
-			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(G.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiAgeGb != null">
-			/* 연령구분 */
-			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(G.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
-				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiBrandCd != null">
-			/* 브랜드 */
-			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiItemkindCd != null">
-			/* 품목 */
-			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-			GROUP BY D.CUST_NO
-		)
-		-- 반품액
-		, TAB_RTN_AMT AS (
-			SELECT SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * B.CHG_QTY) AS VAL
-				, '6' AS GBN
-				, D.CUST_NO
-			FROM TB_ORDER_CHANGE_DETAIL B, TB_ORDER_DETAIL C, TB_ORDER D, TB_GOODS E, TB_CUSTOMER G
-			WHERE B.ORD_DTL_NO = C.ORD_DTL_NO
-				AND C.ORD_NO = D.ORD_NO
-				AND C.GOODS_CD = E.GOODS_CD
-				AND D.CUST_NO = G.CUST_NO
-				AND CHG_STAT = 'G685_60' -- 반품완료
-				AND B.COMPLETE_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d') -- 시작일변수
-				AND B.COMPLETE_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
-				AND MALL_GB = 'G011_10'
-				AND G.CUST_NO > 0
-		<if test="multiFrontGb != null">
-			/* 디바이스 */
-			<foreach collection="multiFrontGb" item="item" index="index"  open="AND D.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiSexGb != null">
-			/* 성별구분 */
-			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(G.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiAgeGb != null">
-			/* 연령구분 */
-			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(G.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
-				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiBrandCd != null">
-			/* 브랜드 */
-			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-		<if test="multiItemkindCd != null">
-			/* 품목 */
-			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
-		</if>
-			GROUP BY D.CUST_NO
-		)
-		-- 주문수
-		, TAB_ORD_CNT AS (
-			SELECT
-				SUM(VAL) AS VAL
-				, '7' AS GBN
-				, CUST_NO
-			FROM (
-				SELECT
-					1 AS VAL
-					, ORD_NO
-					, CUST_NO
-				FROM TAB
-				GROUP BY ORD_NO, CUST_NO
-			) A
-			GROUP BY CUST_NO
-		)
-		SELECT
-			CONCAT(SUBSTRING(CUST_ID, 1, 3), '****', '(', SUBSTRING(FN_DEC_AES(CUST_NM), 1, 1), '**', ')') AS CUST_ID -- 아이디
-			, CASE WHEN FN_DEC_AES(BIRTH_YMD) = '' OR FN_DEC_AES(BIRTH_YMD) IS NULL THEN 'X'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
-				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
-			ELSE 'X' END AS AGE
-		    , X.CUST_NO
-			, FN_GET_CODE_NM('G007', FN_DEC_AES(SEX_GB)) AS SEX_GB
-			, FN_GET_CODE_NM('G110', CUST_GRADE) AS CUST_GRADE -- 등급
-			, SUM(ORD_AMT - CNCL_AMT - RTN_AMT) AS TOT_ORD_AMT -- 매출액
-			, SUM(ORD_CNT) AS ORD_CNT -- 주문수
-			, SUM(SELL_QTY - CNCL_QTY - RTN_QTY) AS SELL_QTY -- 판매수
-			, FLOOR(SUM(ORD_AMT) / SUM(ORD_CNT)) AS CUST_PRICE -- 객단가
-			, IFNULL((SELECT SUM(RM_PNT_AMT) FROM TB_CUST_POINT CP WHERE CP.CUST_NO = X.CUST_NO AND EXP_CMP_DT IS NULL), 0) AS CUST_POINT -- 회원포인트
-		FROM (
-			SELECT
-				CUST_NO
-				, SUM(CASE WHEN GBN = '1' THEN VAL ELSE 0 END) AS SELL_QTY -- 판매수
-				, SUM(CASE WHEN GBN = '2' THEN VAL ELSE 0 END) AS ORD_AMT -- 매출액(판매금액)
-				, SUM(CASE WHEN GBN = '3' THEN VAL ELSE 0 END) AS CNCL_QTY -- 취소수량
-				, SUM(CASE WHEN GBN = '4' THEN VAL ELSE 0 END) AS RTN_QTY -- 반품수량
-				, SUM(CASE WHEN GBN = '5' THEN VAL ELSE 0 END) AS CNCL_AMT -- 취소금액
-				, SUM(CASE WHEN GBN = '6' THEN VAL ELSE 0 END) AS RTN_AMT -- 반품금액
-				, SUM(CASE WHEN GBN = '7' THEN VAL ELSE 0 END) AS ORD_CNT -- 주문수
-			FROM (
-				SELECT * FROM TAB_SELL_QTY
-				UNION ALL
-				SELECT * FROM TAB_ORD
-				UNION ALL
-				SELECT * FROM TAB_CNCL_QTY
-				UNION ALL
-				SELECT * FROM TAB_RTN_QTY
-				UNION ALL
-				SELECT * FROM TAB_CNCL_AMT
-				UNION ALL
-				SELECT * FROM TAB_RTN_AMT
-				UNION ALL
-				SELECT * FROM TAB_ORD_CNT
-			) A
-			GROUP BY CUST_NO
-		) X, TB_CUSTOMER Y
-		WHERE X.CUST_NO = Y.CUST_NO
-		GROUP BY X.CUST_NO
-		ORDER BY TOT_ORD_AMT DESC
-		LIMIT 50
-	</select>
-
-	<!-- 미로그인현황 -->
-	<select id="getCustomerUnloginList" resultType="Statistics">
-		/* TsaStatistics.getCustomerUnloginList */
-		SELECT
-			X.*
-			, ROUND(CNT_5 / TOT_CNT * 100) AS PER_CNT_5
-			, ROUND(CNT_4 / TOT_CNT * 100) AS PER_CNT_4
-			, ROUND(CNT_3 / TOT_CNT * 100) AS PER_CNT_3
-			, ROUND(CNT_2 / TOT_CNT * 100) AS PER_CNT_2
-			, ROUND(CNT_1 / TOT_CNT * 100) AS PER_CNT_1
-		FROM (
-			SELECT
-				SUM(CASE WHEN GB = 5 THEN CNT ELSE 0 END) AS CNT_5
-				, SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4
-				, SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3
-				, SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2
-				, SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1
-				, SUM(CNT) AS TOT_CNT
-			FROM (
-				-- 1년
-				SELECT COUNT(1) AS CNT
-					, 5 AS GB -- 1년 ~
-				FROM TB_CUSTOMER
-				WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 YEAR ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
-				-- 12개월
-				UNION ALL
-				SELECT COUNT(1) AS CNT
-					, 4 AS GB -- 9개월~12개월
-				FROM TB_CUSTOMER
-				WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 YEAR ), '%Y%m%d%H%i%s')
-					AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
-				-- 9개월
-				UNION ALL
-				SELECT COUNT(1) AS CNT
-					, 3 AS GB -- 6개월~9개월
-				FROM TB_CUSTOMER
-				WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
-					AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
-				-- 6개월
-				UNION ALL
-				SELECT COUNT(1) AS CNT
-					, 2 AS GB -- 3개월~6개월
-				FROM TB_CUSTOMER
-				WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
-					AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
-				-- 3개월
-				UNION ALL
-				SELECT COUNT(1) AS CNT
-					, 1 AS GB -- ~3개월
-				FROM TB_CUSTOMER
-				WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
-					AND LOGIN_LDT &lt; DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
-			) Z
-		) X
-	</select>
-
-	<!-- 미로그인현황 회원리스트 -->
-	<select id="getCustomerUnloginInfoList" parameterType="Statistics" resultType="paramMap">
-		/* TsaStatistics.getCustomerUnloginInfoList */
-		SELECT (
-		        SELECT CASE WHEN ROLE_CD = 'G001_0000'
-		                         THEN A.CUST_ID
-		                    ELSE CONCAT(LEFT(A.CUST_ID, 3), REPEAT('*', CHAR_LENGTH(A.CUST_ID) - 3 ) )
-		               END
-		        FROM   TB_USER
-		        WHERE  USER_NO = #{regNo}
-		       ) AS CUST_ID
-		     , (
-		        SELECT CASE WHEN ROLE_CD = 'G001_0000'
-		                         THEN A.CUST_NM
-		                    ELSE CONCAT(LEFT(A.CUST_NM, 1), REPEAT('*', CHAR_LENGTH(A.CUST_NM) - 1 ) )
-		               END
-		        FROM   TB_USER
-		        WHERE  USER_NO = #{regNo}
-		       ) AS CUST_NM
-		    , (
-		       SELECT CASE WHEN ROLE_CD = 'G001_0000'
-		                        THEN A.CELL_PHNNO
-		                   ELSE CONCAT(substr(A.CELL_PHNNO, 1, 4), '****', substr(A.CELL_PHNNO, 9, 13))
-		              END
-		       FROM   TB_USER
-		       WHERE  USER_NO = #{regNo}
-		      ) AS CELL_PHNNO
-		    , (
-		       SELECT CASE WHEN ROLE_CD = 'G001_0000'
-		                        THEN A.EMAIL
-		                   ELSE CONCAT(LEFT(A.EMAIL, 2), REPEAT('*', instr(A.EMAIL, '@') - 3), SUBSTRING(A.EMAIL, instr(EMAIL, '@'), LENGTH(A.EMAIL)))
-		              END
-		       FROM   TB_USER
-		       WHERE  USER_NO = #{regNo}
-		      ) AS EMAIL
-		    , MONTHS
-		    , BIRTH_YM
-		FROM   (
-		        SELECT CUST_ID
-		             , FN_DEC_AES(CUST_NM)                    AS CUST_NM
-		             , TIMESTAMPDIFF(MONTH, LOGIN_LDT, NOW()) AS MONTHS
-		             , CASE WHEN CELL_PHNNO != 'xx'
-		                         THEN FN_DEC_AES(CELL_PHNNO)
-		                    ELSE CELL_PHNNO
-		               END                                    AS CELL_PHNNO
-		             , FN_DEC_AES(EMAIL)                      AS EMAIL
-		             , SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
-		        FROM   TB_CUSTOMER
-		        WHERE  CUST_NO > 0
-		        AND    CUST_STAT = 'G104_10'
-		        AND    LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H'), '%Y-%m-%d %H:%i:%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
-		       ) A
-	</select>
-
-	<!-- 마케팅수신동의현황 -->
-	<select id="getCustomerMarketingList" resultType="Statistics">
-		/* TsaStatistics.getCustomerMarketingList */
-		SELECT
-			X.*
-			 , ROUND(CNT_4 / TOT_CNT * 100) AS PER_CNT_4
-			 , ROUND(CNT_3 / TOT_CNT * 100) AS PER_CNT_3
-			 , ROUND(CNT_2 / TOT_CNT * 100) AS PER_CNT_2
-			 , ROUND(CNT_1 / TOT_CNT * 100) AS PER_CNT_1
-		FROM (
-			 SELECT SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4
-				  , SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3
-				  , SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2
-				  , SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1
-				  , SUM(CNT)                                  AS TOT_CNT
-			 FROM (
-				  -- SMS
-				  SELECT COUNT(1) AS CNT
-					   , 4        AS GB
-				  FROM TB_CUSTOMER
-				  WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND SMS_AGREE_YN = 'Y'
-					-- EMAIL
-				  UNION ALL
-				  SELECT COUNT(1) AS CNT
-					   , 3        AS GB
-				  FROM TB_CUSTOMER
-				  WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND EMAIL_AGREE_YN = 'Y'
-					-- 푸쉬
-				  UNION ALL
-				  SELECT COUNT(1) AS CNT
-					   , 2        AS GB
-				  FROM TB_CUSTOMER
-				  WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND APP_AGREE_YN = 'Y'
-					-- 미동의
-				  UNION ALL
-				  SELECT COUNT(1) AS CNT
-					   , 1        AS GB
-				  FROM TB_CUSTOMER
-				  WHERE CUST_NO > 0
-					AND CUST_STAT = 'G104_10'
-					AND SMS_AGREE_YN = 'N'
-					AND EMAIL_AGREE_YN = 'N'
-					AND APP_AGREE_YN = 'N'
-			  ) Z
-		 ) X
-	</select>
-
-	<!-- 휴면전환 잔여일별현황 -->
-	<select id="getCustomerDormRemainList" resultType="Statistics">
-		/* TsaStatistics.getCustomerDormRemainList */
-		SELECT
-			SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4 -- 12개월
-			, SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3 -- 9개월
-			, SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2 -- 6개월
-			, SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1 -- 9개월
-		FROM (
-			-- 12개월
-			SELECT COUNT(1) AS CNT
-				, 4 AS GB -- 12개월
-			FROM TB_CUSTOMER
-			WHERE CUST_NO > 0
-				AND CUST_STAT = 'G104_10'
-				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
-			-- 9개월
-			UNION ALL
-			SELECT COUNT(1) AS CNT
-				, 3 AS GB -- 9개월
-			FROM TB_CUSTOMER
-			WHERE CUST_NO > 0
-				AND CUST_STAT = 'G104_10'
-				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s')
-			-- 6개월
-			UNION ALL
-			SELECT COUNT(1) AS CNT
-				, 2 AS GB -- 6개월
-			FROM TB_CUSTOMER
-			WHERE CUST_NO > 0
-				AND CUST_STAT = 'G104_10'
-				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
-			-- 3개월
-			UNION ALL
-			SELECT COUNT(1) AS CNT
-				, 1 AS GB -- ~3개월
-			FROM TB_CUSTOMER
-			WHERE CUST_NO > 0
-				AND CUST_STAT = 'G104_10'
-				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
-		) Z
-	</select>
-
-	<!-- 휴면전환 잔여일별현황 회원리스트 -->
-	<select id="getCustomerDormRemainInfoList" parameterType="Statistics" resultType="paramMap">
-	/* TsaStatistics.getCustomerDormRemainInfoList */
-		SELECT GB
-			 , BIRTH_YM
-		     , (
-			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
-							     THEN A.CUST_ID
-				   	        ELSE CONCAT(LEFT(A.CUST_ID, 3), REPEAT('*', CHAR_LENGTH(A.CUST_ID) - 3 ) )
-					   END
-			    FROM   TB_USER
-			    WHERE  USER_NO = #{regNo}
-		       ) AS CUST_ID
-			 , (
-			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
-							     THEN A.CUST_NM
-						    ELSE CONCAT(LEFT(A.CUST_NM, 1), REPEAT('*', CHAR_LENGTH(A.CUST_NM) - 1 ) )
-					   END
-			    FROM   TB_USER
-			    WHERE  USER_NO = #{regNo}
-		       ) AS CUST_NM
-			 , (
-			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
-							     THEN A.CELL_PHNNO
-						    ELSE CONCAT(substr(A.CELL_PHNNO, 1, 4), '****', substr(A.CELL_PHNNO, 9, 13))
-					   END
-			    FROM   TB_USER
-			    WHERE  USER_NO = #{regNo}
-		       ) AS CELL_PHNNO
-			 , (
-			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
-							     THEN A.EMAIL
-						    ELSE CONCAT(LEFT(A.EMAIL, 2), REPEAT('*', instr(A.EMAIL, '@') - 3), SUBSTRING(A.EMAIL, instr(EMAIL, '@'), LENGTH(A.EMAIL)))
-					   END
-			    FROM   TB_USER
-			    WHERE  USER_NO = #{regNo}
-		       ) AS EMAIL
-		FROM (
-			-- 12개월
-			SELECT '12개월' AS GB -- 12개월
-				, CUST_ID
-				, FN_DEC_AES(CUST_NM) AS CUST_NM
-				, CASE WHEN CELL_PHNNO != 'xx'
-		                         THEN FN_DEC_AES(CELL_PHNNO)
-					   ELSE CELL_PHNNO
-				  END                                AS CELL_PHNNO
-				, FN_DEC_AES(EMAIL) AS EMAIL
-				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
-			FROM TB_CUSTOMER
-			WHERE CUST_NO > 0
-				AND CUST_STAT = 'G104_10'
-				AND LOGIN_LDT > DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
-			-- 9개월
-			UNION ALL
-			SELECT '9개월' AS GB -- 9개월
-				, CUST_ID
-				, FN_DEC_AES(CUST_NM) AS CUST_NM
-				, CASE WHEN CELL_PHNNO != 'xx'
-		                         THEN FN_DEC_AES(CELL_PHNNO)
-					   ELSE CELL_PHNNO
-				  END                                AS CELL_PHNNO
-				, FN_DEC_AES(EMAIL) AS EMAIL
-				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
-			FROM TB_CUSTOMER
-			WHERE CUST_NO > 0
-				AND CUST_STAT = 'G104_10'
-				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT <![CDATA[ < ]]>  DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s')
-			-- 6개월
-			UNION ALL
-			SELECT '6개월' AS GB -- 6개월
-				, CUST_ID
-				, FN_DEC_AES(CUST_NM) AS CUST_NM
-				, CASE WHEN CELL_PHNNO != 'xx'
-		                         THEN FN_DEC_AES(CELL_PHNNO)
-					   ELSE CELL_PHNNO
-				  END                                AS CELL_PHNNO
-				, FN_DEC_AES(EMAIL) AS EMAIL
-				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
-			FROM TB_CUSTOMER
-			WHERE CUST_NO > 0
-				AND CUST_STAT = 'G104_10'
-				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
-			-- 3개월
-			UNION ALL
-			SELECT '3개월' AS GB -- ~3개월
-				, CUST_ID
-				, FN_DEC_AES(CUST_NM) AS CUST_NM
-				, CASE WHEN CELL_PHNNO != 'xx'
-		                         THEN FN_DEC_AES(CELL_PHNNO)
-					   ELSE CELL_PHNNO
-				  END                                AS CELL_PHNNO
-				, FN_DEC_AES(EMAIL) AS EMAIL
-			, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
-			FROM TB_CUSTOMER
-			WHERE CUST_NO > 0
-				AND CUST_STAT = 'G104_10'
-				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
-		) A
-	</select>
+<?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.TsaStatisticsDao">
+
+	<!-- 일일거래내역 -->
+	<select id="getDailyTradingList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getDailyTradingList */
+		SELECT ODIH.ORD_NO                                                                /*주문번호*/
+		     , ODIH.ORD_DTL_NO                                                            /*주문상세번호*/
+		     , ODIH.SELL_GB                                                               /*판매구분*/
+		     , ODIH.MALL_GB                                                               /*몰구분*/
+		     , ODIH.MALL_GB_NM                                                            /*몰구분명*/
+		     , ODIH.EXTMALL_ORDER_ID                                                      /*제휴몰주문번호*/
+		     , ODIH.EXTMALL_ID                                                            /*제휴몰ID*/
+		     , ODIH.EXTMALL_NM                                                            /*제휴몰명*/
+		     , ODIH.AF_LINK_CD                                                            /*제휴링크코드*/
+		     , ODIH.AF_LINK_NM                                                            /*제휴링크명*/
+		     , ODIH.AF_CHANNEL                                                            /*제휴채널코드*/
+		     , ODIH.AF_CHANNEL_NM                                                         /*제휴채널명*/
+		     , ODIH.DISTRIBUTION_GB                                                       /*유통구분*/
+		     , ODIH.DISTRIBUTION_GB_NM                                                    /*유통구분명*/
+		     , ODIH.SUPPLY_COMP_CD                                                        /*공급업체코드*/
+		     , ODIH.SUPPLY_COMP_NM                                                        /*공급업체명*/
+		     , ODIH.SUPPLY_VENDOR_CD                                                      /*공급벤더코드*/
+		     , ODIH.SUPPLY_VENDOR_NM                                                      /*공급벤더명*/
+		     , ODIH.ORD_DT                                                                /*주문일시*/
+		     , ODIH.OCCUR_DT                                                              /*발생일시*/
+		     , ODIH.BRAND_CD                                                              /*브랜드코드*/
+		     , ODIH.BRAND_ENM                                                             /*브랜드명*/
+		     , ODIH.GOODS_CD                                                              /*상품코드*/
+		     , ODIH.GOODS_NM                                                              /*상품명*/
+		     , ODIH.ITEM_CD                                                               /*단품코드*/
+		     , ODIH.OPT_CD1                                                               /*옵션코드1*/
+		     , ODIH.OPT_CD2                                                               /*옵션코드2*/
+		     , ODIH.ITEMKIND_CD                                                           /*품목코드*/
+		     , ODIH.ITEMKIND_NM                                                           /*품목명*/
+		     , SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',1)          AS ITEMKIND_NM1           /*품목명1*/
+		     , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',1),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',2),'>',-1) THEN
+		                NULL
+		            ELSE
+		                SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',2),'>',-1)
+		       END                                              AS ITEMKIND_NM2           /*품목명2*/
+		     , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',2),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',3),'>',-1) THEN
+		                NULL
+		            ELSE
+		                SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',3),'>',-1)
+		       END                                              AS ITEMKIND_NM3           /*품목명3*/
+		     , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',3),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',4),'>',-1) THEN
+		                ''
+		            ELSE
+		                SUBSTRING_INDEX(SUBSTRING_INDEX(ODIH.ITEMKIND_NM,'>',4),'>',-1)
+		       END                                              AS ITEMKIND_NM4           /*품목명4*/
+		     , ODIH.MALL_PRICE                                                            /*몰판매가*/
+		     , ODIH.SELL_PRICE                                                            /*판매가*/
+		     , ODIH.SELL_QTY                                                              /*판매수량*/
+		     , ODIH.SELL_AMT                                                              /*판매금액(ORD_AMT에는 CPN1_DC_AMT가 빠진 금액이 들어가 있음)*/
+		     , ODIH.CPN1_DC_AMT                                                           /*즉시사용쿠폰금액*/
+		     , ODIH.GOODS_CPN_DC_AMT                                                      /*상품쿠폰사용금액*/
+		     , ODIH.CART_CPN_DC_AMT                                                       /*주문서쿠폰사용금액*/
+		     , ODIH.PNT_DC_AMT                                                            /*포인트사용금액*/
+		     , ODIH.TMTB_DC_AMT                                                           /*다다익선할인금액*/
+		     , ODIH.SELF_TMTB_DC_AMT                                                      /*자사다다익선분담액*/
+		     , ODIH.SUPPLY_COMP_TMTB_DC_AMT                                               /*입점다다익선분담액*/
+		     , ODIH.GFCD_USE_AMT                                                          /*상품권사용금액*/
+		     , ODIH.SELF_CPN_DC_AMT                                                       /*자사쿠폰분담액*/
+		     , ODIH.SUPPLY_COMP_CPN_DC_AMT                                                /*입점쿠폰분담액*/
+		     , CASE WHEN ODIH.SELL_QTY = 0 THEN 0
+		            ELSE
+		                (ODIH.SELL_AMT
+		                 - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT )
+		                 - ODIH.TMTB_DC_AMT
+		                ) / ODIH.SELL_QTY
+		       END                                              AS REAL_SELL_PRICE        /*실판매가 /주문서쿠폰제외*/
+		     , ODIH.SELL_AMT
+		       - (ODIH.CPN1_DC_AMT + ODIH.GOODS_CPN_DC_AMT )
+		       - ODIH.TMTB_DC_AMT                               AS REAL_SELL_AMT          /*실판매금액(=상품총액. 쿠폰과 다다익선만 차감. 상품권과 포인트는 포함) /주문서쿠폰제외*/
+		     , ODIH.SELL_FEE_RATE                                                         /*판매수수료율*/
+		     , ROUND(ODIH.SELL_AMT * (ODIH.SELL_FEE_RATE / 100),0)          AS SELL_FEE_AMT           /*수수료*/
+		     , ODIH.MD_NM                                                                 /*담당MD*/
+		FROM   (
+		        SELECT ODIH.ORD_DTL_ITEM_HST_SQ                                                                                    /*주문상세단품이력일련번호*/
+		             , ODIH.ORD_NO                                                                                                 /*주문번호*/
+		             , ODIH.ORD_DTL_NO                                                                                             /*주문상세번호*/
+		             , CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10' THEN '판매'
+		                    WHEN ODIH.ORD_DTL_STAT = 'G720_30' THEN '취소'
+		                    WHEN ODIH.ORD_DTL_STAT = 'G720_40' THEN '품절취소'
+		                    WHEN ODIH.ORD_DTL_STAT = 'G720_50' THEN '반품'
+		                    WHEN ODIH.ORD_DTL_STAT = 'G720_60' THEN '교환'
+		               END                                                                              AS SELL_GB                 /*판매구분*/
+		             , O.MALL_GB                                                                                                   /*몰구분*/
+		             , FN_GET_CODE_NM('G011',O.MALL_GB)                                                 AS MALL_GB_NM              /*몰구분명*/
+		             , OD.EXTMALL_ORDER_ID                                                                                         /*제휴몰주문번호*/
+		             , OD.EXTMALL_ID                                                                                               /*제휴몰ID*/
+		             , E.EXTMALL_NM                                                                                                /*제휴몰명*/
+		             , OD.AF_LINK_CD                                                                                               /*제휴링크코드*/
+		             , AL.AF_LINK_NM                                                                                               /*제휴링크명*/
+		             , AL.AF_CHANNEL                                                                                               /*제휴채널코드*/
+		             , FN_GET_CODE_NM('G053',AL.AF_CHANNEL)                                             AS AF_CHANNEL_NM           /*제휴채널명*/
+		             , SC.DISTRIBUTION_GB                                                                                          /*유통구분*/
+		             , FN_GET_CODE_NM('G065',SC.DISTRIBUTION_GB)                                        AS DISTRIBUTION_GB_NM      /*유통구분명*/
+		             , OD.SUPPLY_COMP_CD                                                                                           /*공급업체코드*/
+		             , SC.SUPPLY_COMP_NM                                                                                           /*공급업체명*/
+		             , SC.SUPPLY_VENDOR_CD                                                                                         /*공급벤더코드*/
+		             , SV.SUPPLY_VENDOR_NM                                                                                         /*공급벤더명*/
+		             , DATE_FORMAT(O.PAY_DT,'%Y-%m-%d %H:%i:%S')                                        AS ORD_DT                  /*주문일시*/
+		             , DATE_FORMAT(ODIH.REG_DT,'%Y-%m-%d %H:%i:%S')                                     AS OCCUR_DT                /*발생일시*/
+		             , G.BRAND_CD                                                                                                  /*브랜드코드*/
+		             , B.BRAND_ENM                                                                                                 /*브랜드명*/
+		             , OD.GOODS_CD                                                                                                 /*상품코드*/
+		             , G.GOODS_NM                                                                                                  /*상품명*/
+		             , ODIH.ITEM_CD                                                                                                /*단품코드*/
+		             , ODIH.OPT_CD1                                                                                                /*옵션코드1*/
+		             , ODIH.OPT_CD2                                                                                                /*옵션코드2*/
+		             , G.ITEMKIND_CD                                                                                               /*품목코드*/
+		             , I.ITEMKIND_NM                                                                                               /*품목명*/
+		             , ODIH.ITEM_PRICE                                                                  AS MALL_PRICE              /*몰판매가*/
+		             , CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
+		                        IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
+		                    ELSE
+		                        ODIH.ITEM_PRICE
+		               END                                                                              AS SELL_PRICE              /*판매가(제휴몰정산가적용)*/
+		             , (CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10' THEN 1 ELSE -1 END)
+		               *
+		               CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10'/*판매-결제완료*/ THEN
+		                             ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY
+		                         ELSE /*환입-반품완료,환입-교환완료*/
+		                             ODIH.CNCL_RTN_QTY
+		                    END AS SIGNED INT)                                                          AS SELL_QTY                /*판매수량*/
+		             , (CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10' THEN 1 ELSE -1 END)
+		               *
+		               CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_10'/*판매-결제완료*/ THEN
+		                             ((ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY) * (CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
+		                                                                             IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
+		                                                                         ELSE
+		                                                                             ODIH.ITEM_PRICE
+		                                                                    END))
+		                         ELSE /*환입-반품완료,환입-교환완료*/
+		                             (ODIH.CNCL_RTN_QTY * (CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
+		                                                            IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
+		                                                        ELSE
+		                                                            ODIH.ITEM_PRICE
+		                                                   END))
+		                    END AS SIGNED INT)                                                          AS SELL_AMT                /*판매금액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * ODIH.CPN1_DC_AMT                        AS CPN1_DC_AMT             /*즉시사용쿠폰금액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * CASE WHEN CC2.CPN_ID in (59,132) THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END                   AS GOODS_CPN_DC_AMT        /*상품쿠폰사용금액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * ODIH.CART_CPN_DC_AMT                    AS CART_CPN_DC_AMT         /*주문서쿠폰사용금액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * ODIH.PNT_DC_AMT                         AS PNT_DC_AMT              /*포인트사용금액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * (ODIH.TMTB1_DC_AMT + ODIH.TMTB2_DC_AMT) AS TMTB_DC_AMT             /*다다익선할인금액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) *
+		               (((100 - IFNULL(TB1.TMTB_BURDEN_RATE,0)) / 100) * ODIH.TMTB1_DC_AMT
+		                 + ((100 - IFNULL(TB2.TMTB_BURDEN_RATE,0)) / 100) * ODIH.TMTB2_DC_AMT)          AS SELF_TMTB_DC_AMT        /*자사다다익선분담액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) *
+		               ((IFNULL(TB1.TMTB_BURDEN_RATE,0) / 100) * ODIH.TMTB1_DC_AMT
+		                + (IFNULL(TB2.TMTB_BURDEN_RATE,0) / 100) * ODIH.TMTB2_DC_AMT)                   AS SUPPLY_COMP_TMTB_DC_AMT /*입점다다익선분담액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) * ODIH.GFCD_USE_AMT                       AS GFCD_USE_AMT            /*상품권사용금액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) *
+		               (((100 - IFNULL(CB1.BURDEN_RATE,0)) / 100) * ODIH.CPN1_DC_AMT
+		                 + ((100 - IFNULL(CB2.BURDEN_RATE,0)) / 100) * CASE WHEN CC2.CPN_ID in (59,132) THEN 0 ELSE ODIH.GOODS_CPN_DC_AMT END )            AS SELF_CPN_DC_AMT         /*자사쿠폰분담액*/
+		             , IF(ODIH.ORD_DTL_STAT = 'G720_10',1,-1) *
+		               ((IFNULL(CB1.BURDEN_RATE,0) / 100) * ODIH.CPN1_DC_AMT
+		                + (IFNULL(CB2.BURDEN_RATE,0) / 100) * ODIH.GOODS_CPN_DC_AMT)                     AS SUPPLY_COMP_CPN_DC_AMT  /*입점쿠폰분담액*/
+		             , CASE WHEN O.MALL_GB = 'G011_10' /*자사몰*/ THEN
+		                        OD.SELL_FEE_RATE
+		                    ELSE /*제휴몰*/
+		                        IFNULL(E.SELL_FEE_RATE,0)
+		               END                                                                              AS SELL_FEE_RATE           /*판매수수료율*/
+		             , (SELECT U.USER_NM
+		                FROM   TB_BRAND_MD BM
+		                     , TB_USER U
+		                WHERE  BM.MD_NO = U.USER_NO
+		                AND    BM.BRAND_CD = G.BRAND_CD
+		                AND    BM.FORMAL_GB = G.FORMAL_GB
+		                LIMIT 1)                                                                        AS MD_NM                   /*담당MD*/
+		        FROM   TB_ORDER_DETAIL_ITEM_HST ODIH
+		        INNER JOIN TB_ORDER_DETAIL OD ON ODIH.ORD_DTL_NO = OD.ORD_DTL_NO
+		        INNER JOIN TB_ORDER O ON ODIH.ORD_NO = O.ORD_NO
+		        INNER JOIN TB_SUPPLY_COMPANY SC ON OD.SUPPLY_COMP_CD = SC.SUPPLY_COMP_CD
+		        INNER JOIN TB_SUPPLY_VENDOR SV ON SC.SUPPLY_VENDOR_CD = SV.SUPPLY_VENDOR_CD
+		        INNER JOIN TB_GOODS G ON OD.GOODS_CD = G.GOODS_CD
+		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		        INNER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
+		        LEFT OUTER JOIN TB_EXTMALL E ON OD.EXTMALL_ID = E.EXTMALL_ID
+		        LEFT OUTER JOIN TB_AF_LINK AL ON OD.AF_LINK_CD = AL.AF_LINK_CD
+		        LEFT OUTER JOIN TB_COUPON_BURDEN CB1 ON OD.CPN1_CPN_SQ = CB1.CPN_ID
+		                                            AND OD.SUPPLY_COMP_CD = CB1.SUPPLY_COMP_CD
+		        LEFT OUTER JOIN TB_CUST_COUPON CC2 ON OD.GOODS_CPN_SQ = CC2.CUST_CPN_SQ
+		        LEFT OUTER JOIN TB_COUPON_BURDEN CB2 ON CC2.CPN_ID = CB2.CPN_ID
+		                                            AND OD.SUPPLY_COMP_CD = CB2.SUPPLY_COMP_CD
+		        LEFT OUTER JOIN TB_CUST_COUPON CC3 ON OD.CART_CPN_SQ = CC3.CUST_CPN_SQ
+		        LEFT OUTER JOIN TB_COUPON_BURDEN CB3 ON CC3.CPN_ID = CB3.CPN_ID
+		                                            AND OD.SUPPLY_COMP_CD = CB3.SUPPLY_COMP_CD
+		        LEFT OUTER JOIN TB_TMTB_BURDEN TB1 ON OD.TMTB1_SQ = TB1.TMTB_SQ
+		                                          AND OD.SUPPLY_COMP_CD = TB1.TMTB_SUPPLY_CD
+		        LEFT OUTER JOIN TB_TMTB_BURDEN TB2 ON OD.TMTB2_SQ = TB2.TMTB_SQ
+		                                          AND OD.SUPPLY_COMP_CD = TB2.TMTB_SUPPLY_CD
+		        LEFT OUTER JOIN TB_EXTMALL_USAC_PRICE EUP ON ODIH.ORD_DTL_ITEM_HST_SQ = EUP.ORD_DTL_ITEM_HST_SQ
+		        WHERE  1 = 1
+		        AND    ODIH.REG_DT <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
+		        AND    ODIH.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		        AND    ODIH.ORD_DTL_STAT IN ('G720_10','G720_30','G720_40','G720_50','G720_60') /*판매-결제완료,환입-취소완료,환입-품절취소,환입-반품완료,환입-교환완료*/
+		       ) ODIH
+		ORDER  BY ODIH.ORD_DTL_ITEM_HST_SQ
+	</select>
+
+	<!-- 일자별주문 목록 -->
+	<select id="getDailyOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getDailyOrderList */
+		SELECT SUM(SOD.SELF_AMT + SOD.CHANNEL_AMT + SOD.EXTMALL_AMT) AS TOT_ORD_AMT     /*매출액*/
+		     , IFNULL((SELECT SUM(SELF_AMT + CHANNEL_AMT + EXTMALL_AMT)
+		               FROM   TB_STAT_ORD_DAY
+		               WHERE  1 = 1
+		               AND    DAY <![CDATA[>=]]> DATE_ADD(STR_TO_DATE(#{startDt},'%Y-%m-%d'), INTERVAL -1 YEAR)
+		               AND    DAY <![CDATA[<]]> DATE_ADD(DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR)
+		               AND    (
+		                       1 = 1
+		               <if test='frontGbP != null and frontGbP != ""'>
+		                       OR FRONT_GB = 'P'
+		               </if>
+		               <if test='frontGbM != null and frontGbM != ""'>
+		                       OR FRONT_GB = 'M'
+		               </if>
+		               <if test='frontGbA != null and frontGbA != ""'>
+		                       OR FRONT_GB = 'A'
+		               </if>
+		                      )
+		               <if test='mallGb != null and mallGb != ""'>
+		               AND    IFNULL(EXTMALL_ID,'') != '' /*제휴몰만*/
+		                   <if test='multiExtmallId != null and multiExtmallId != ""'>
+		               AND    EXTMALL_ID IN
+		                       <foreach collection="multiExtmallId" item="item" index="index"  open="(" close=")" separator=",">
+		                       #{item}
+		                       </foreach>
+		                   </if>
+		               </if>
+		               AND    (
+		                       1 = 1
+		               <if test='distributionGbWms != null and distributionGbWms != ""'>
+		                       OR DISTRIBUTION_GB = 'WMS'
+		               </if>
+		               <if test='distributionGbScm != null and distributionGbScm != ""'>
+		                       OR DISTRIBUTION_GB = 'SCM'
+		               </if>
+		                      )
+		               <if test='multiSupplyCompCd != null and multiSupplyCompCd != ""'>
+		               AND    SUPPLY_COMP_CD IN
+		                      <foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
+		                      #{item}
+		                      </foreach>
+		               </if>
+		               <if test='multiAfLinkCd != null and multiAfLinkCd != ""'>
+		               AND    AF_LINK_CD IN
+		                      <foreach collection="multiAfLinkCd" item="item" index="index"  open="(" close=")" separator=",">
+		                      #{item}
+		                      </foreach>
+		               </if>
+		               <if test='multiBrandCd != null and multiBrandCd != ""'>
+		               AND    BRAND_CD IN
+		                      <foreach collection="multiBrandCd" item="item" index="index"  open="(" close=")" separator=",">
+		                      #{item}
+		                      </foreach>
+		               </if>
+		               <if test='multiItemkindCd != null and multiItemkindCd != ""'>
+		               AND    ITEMKIND_CD IN
+		                      <foreach collection="multiItemkindCd" item="item" index="index"  open="(" close=")" separator=",">
+		                      #{item}
+		                      </foreach>
+		               </if>
+		              ),0)                                           AS YOY_TOT_ORD_AMT /*전년동기대비매출액*/
+		     , SUM(SOD.SELF_AMT)                                     AS SELF_AMT        /*자사직방문매출액*/
+		     , SUM(SOD.CHANNEL_AMT)                                  AS CHANNEL_AMT     /*채널매출액*/
+		     , SUM(SOD.EXTMALL_AMT)                                  AS EXTMALL_AMT     /*제휴몰매출액*/
+		     , SUM(SOD.CNCL_AMT + SOD.RTN_AMT)                       AS CNCL_AMT        /*취/반품액*/
+		     , SUM(SOD.ORD_CNT)                                      AS ORD_CNT         /*주문건수*/
+		     , SUM(SOD.SELL_QTY)                                     AS SELL_QTY        /*판매수량*/
+		     , SUM(SOD.CNCL_QTY + SOD.RTN_QTY)                       AS CNCL_QTY        /*취/반품수량*/
+		     <choose>
+		         <when test='dayGb == "W"'> <!-- 주별 -->
+		     , CONCAT(MONTH(SOD.DAY), '월 ', WEEK(SOD.DAY,5) - WEEK(DATE_SUB(SOD.DAY, INTERVAL DAYOFMONTH(SOD.DAY) - 1 DAY), 5) + 1, '주') AS DAY
+		         </when>
+		         <when test='dayGb == "M"'> <!-- 월별 -->
+		     , DATE_FORMAT(SOD.DAY,'%Y-%m')                          AS DAY
+		         </when>
+		         <otherwise> <!-- 일별 -->
+		     , DATE_FORMAT(SOD.DAY,'%Y-%m-%d')                       AS DAY
+		         </otherwise>
+		     </choose>
+		FROM   TB_STAT_ORD_DAY SOD
+		WHERE  1 = 1
+		AND    SOD.DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
+		AND    SOD.DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		AND    (
+		        1 = 1
+		<if test='frontGbP != null and frontGbP != ""'>
+		        OR SOD.FRONT_GB = 'P'
+		</if>
+		<if test='frontGbM != null and frontGbM != ""'>
+		        OR SOD.FRONT_GB = 'M'
+		</if>
+		<if test='frontGbA != null and frontGbA != ""'>
+		        OR SOD.FRONT_GB = 'A'
+		</if>
+		       )
+		<if test='mallGb != null and mallGb != ""'>
+		AND    IFNULL(SOD.EXTMALL_ID,'') != '' /*제휴몰만*/
+		    <if test='multiExtmallId != null and multiExtmallId != ""'>
+		AND    SOD.EXTMALL_ID IN
+		        <foreach collection="multiExtmallId" item="item" index="index"  open="(" close=")" separator=",">
+		        #{item}
+		        </foreach>
+		    </if>
+		</if>
+		AND    (
+		        1 = 1
+		<if test='distributionGbWms != null and distributionGbWms != ""'>
+		        OR SOD.DISTRIBUTION_GB = 'WMS'
+		</if>
+		<if test='distributionGbScm != null and distributionGbScm != ""'>
+		        OR SOD.DISTRIBUTION_GB = 'SCM'
+		</if>
+		       )
+		<if test='multiSupplyCompCd != null and multiSupplyCompCd != ""'>
+		AND    SOD.SUPPLY_COMP_CD IN
+		       <foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
+		       #{item}
+		       </foreach>
+		</if>
+		<if test='multiAfLinkCd != null and multiAfLinkCd != ""'>
+		AND    SOD.AF_LINK_CD IN
+		       <foreach collection="multiAfLinkCd" item="item" index="index"  open="(" close=")" separator=",">
+		       #{item}
+		       </foreach>
+		</if>
+		<if test='multiBrandCd != null and multiBrandCd != ""'>
+		AND    SOD.BRAND_CD IN
+		       <foreach collection="multiBrandCd" item="item" index="index"  open="(" close=")" separator=",">
+		       #{item}
+		       </foreach>
+		</if>
+		<if test='multiItemkindCd != null and multiItemkindCd != ""'>
+		AND    SOD.ITEMKIND_CD IN
+		       <foreach collection="multiItemkindCd" item="item" index="index"  open="(" close=")" separator=",">
+		       #{item}
+		       </foreach>
+		</if>
+		<choose>
+		         <when test='dayGb == "W"'> <!-- 주별 -->
+		GROUP  BY CONCAT(MONTH(SOD.DAY), '월 ', WEEK(SOD.DAY,5) - WEEK(DATE_SUB(SOD.DAY, INTERVAL DAYOFMONTH(SOD.DAY) - 1 DAY), 5) + 1, '주')
+		         </when>
+		         <when test='dayGb == "M"'> <!-- 월별 -->
+		GROUP  BY DATE_FORMAT(SOD.DAY,'%Y-%m')
+		         </when>
+		         <otherwise> <!-- 일별 -->
+		GROUP  BY DATE_FORMAT(SOD.DAY,'%Y-%m-%d')
+		         </otherwise>
+		     </choose>
+	</select>
+
+	<!-- 상품별 주문 목록 -->
+	<select id="getGoodsOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getGoodsOrderList */
+		SELECT
+		    FN_GET_CODE_NM('G009',A.FORMAL_GB) AS FORMAL_GB -- 정상이월구분
+		    , A.GOODS_CD                                    -- 상품코드
+		    , B.GOODS_NM                                    -- 상품명
+		    , SUM(C.STOCK_QTY) AS STOCK_QTY                 -- 현재고수량
+		    , SUM(A.SELL_QTY) AS SELL_QTY                   -- 판매수량
+		    , SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.GOODS_CPN_AMT - A.TMTB_AMT - A.CART_CPN_AMT) AS PAY_AMT -- 상품당결제액
+			, SUM(A.ORD_AMT) AS ORD_AMT -- 매출액
+		    , SUM(A.GOODS_CPN_AMT) AS GOODS_CPN_AMT         -- 즉시/주문상품쿠폰
+		    , SUM(A.TMTB_AMT) AS TMTB_AMT                   -- 다다익선
+		    , SUM(A.CART_CPN_AMT) AS CART_CPN_AMT           -- 장바구니쿠폰
+		    , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY       -- 취/환불수량
+		    , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT       -- 취/환불액
+		    , SUM(A.SAVE_PNT_AMT) AS SAVE_PNT_AMT           -- 지급포인트
+		FROM TB_STAT_ORD_DAY A, TB_GOODS B, TB_GOODS_STOCK C
+		WHERE A.GOODS_CD = B.GOODS_CD
+		    AND B.GOODS_CD = C.GOODS_CD
+		<![CDATA[
+		    AND A.DAY >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
+		    AND A.DAY < DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		]]>
+		<if test="multiFrontGb != null">
+			/* 디바이스 */
+			<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiExtmallId != null">
+			/* 제휴몰 */
+			<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiDistributionGb != null">
+			/* 물류구분 */
+			<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiSupplyCompCd != null">
+			/* 공급처 */
+			<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiAfLinkCd != null">
+			/* 채널 */
+			<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiBrandCd != null">
+			/* 브랜드 */
+			<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiItemkindCd != null">
+			/* 품목 */
+			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiGoodsCd != null">
+			/* 상품코드 */
+			<foreach collection="multiGoodsCd" item="item" index="index"  open="AND (" close=")" separator="OR">A.GOODS_CD LIKE CONCAT('%', #{item}, '%')</foreach>
+		</if>
+		<if test="multiFormalGb != null">
+			/* 정상/이월구분 */
+			<foreach collection="multiFormalGb" item="item" index="index"  open="AND B.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		GROUP BY A.FORMAL_GB, A.GOODS_CD, B.GOODS_NM, B.SELF_GOODS_YN
+		ORDER BY B.SELF_GOODS_YN DESC, A.FORMAL_GB, A.GOODS_CD
+	</select>
+
+	<!-- 제휴몰 주문 목록 조회 -->
+	<select id="getExtmallOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getExtmallOrderList */
+		SELECT EXTMALL_NM
+		     , TOT_AMT
+		     , SELL_QTY
+		     , EXTMALL_AMT
+		     , CNCL_QTY
+		     , CNCL_AMT
+		     , REAL_ORD_AMT
+		     , SELL_FEE_RATE
+		     , EX_USAC_AMT
+		     , YOY_TOT_ORD_AMT
+			 , ROUND(TOT_AMT / (CASE WHEN TOT_AMT > 0 AND YOY_TOT_ORD_AMT = 0 THEN 1 ELSE YOY_TOT_ORD_AMT END) * 100 - 100,1) AS YOY_RATE /*증가율*/
+		  FROM (
+				SELECT
+				    (SELECT EXTMALL_NM FROM TB_EXTMALL X WHERE X.EXTMALL_ID = A.EXTMALL_ID LIMIT 1) AS EXTMALL_NM
+				    , SUM(A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT /* 총매출 */
+				    , SUM(A.SELL_QTY) AS SELL_QTY             /* 판매수량 */
+				    , SUM(A.EXTMALL_AMT) AS EXTMALL_AMT
+				    , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY /*취/반품수량*/
+				    , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT /*취/반품액*/
+				    , SUM(A.REAL_ORD_AMT) AS REAL_ORD_AMT     /*실결제액 */
+				    , (SELECT SELL_FEE_RATE FROM TB_EXTMALL X WHERE X.EXTMALL_ID = A.EXTMALL_ID LIMIT 1) AS SELL_FEE_RATE /*수수료율*/
+				    , (SUM(A.REAL_ORD_AMT) * (1 - (SELECT SELL_FEE_RATE FROM TB_EXTMALL X WHERE X.EXTMALL_ID = A.EXTMALL_ID LIMIT 1) / 100)) AS EX_USAC_AMT
+					, IFNULL((SELECT SUM(X.EXTMALL_AMT - X.CNCL_AMT - X.RTN_AMT)
+				               FROM   TB_STAT_ORD_DAY X
+				               WHERE  1 = 1
+				                 AND X.EXTMALL_ID = A.EXTMALL_ID
+							<![CDATA[
+							    AND X.DAY >= DATE_ADD(STR_TO_DATE(#{startDt},'%Y-%m-%d'), INTERVAL -1 YEAR)
+							    AND X.DAY < DATE_ADD(DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR)
+							]]>
+								<if test="multiBrandCd != null">
+									/* 브랜드 */
+									<foreach collection="multiBrandCd" item="item" index="index"  open="AND X.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+								</if>
+								<if test="multiFormalGb != null">
+									/* 정상/이월구분 */
+									<foreach collection="multiFormalGb" item="item" index="index"  open="AND X.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+								</if>
+								<if test="multiSupplyCompCd != null">
+									/* 공급처 */
+									<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND X.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+								</if>
+								<if test="multiAfLinkCd != null">
+									/* 채널 */
+									<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND X.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+								</if>
+								<if test="multiItemkindCd != null">
+									/* 품목 */
+									<foreach collection="multiItemkindCd" item="item" index="index"  open="AND X.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+								</if>
+								<if test="multiFrontGb != null">
+									/* 디바이스 */
+									<foreach collection="multiFrontGb" item="item" index="index"  open="AND X.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+								</if>
+								<if test="multiDistributionGb != null">
+									/* 물류구분 */
+									<foreach collection="multiDistributionGb" item="item" index="index"  open="AND X.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+								</if>
+				              ),0)                                           AS YOY_TOT_ORD_AMT /*전년동기대비매출액*/
+				FROM TB_STAT_ORD_DAY A
+				WHERE 1=1
+				    AND A.EXTMALL_ID IS NOT NULL
+				<![CDATA[
+				    AND A.DAY >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
+				    AND A.DAY < DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+				]]>
+				<if test="multiBrandCd != null">
+					/* 브랜드 */
+					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiFormalGb != null">
+					/* 정상/이월구분 */
+					<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiSupplyCompCd != null">
+					/* 공급처 */
+					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiAfLinkCd != null">
+					/* 채널 */
+					<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiItemkindCd != null">
+					/* 품목 */
+					<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiFrontGb != null">
+					/* 디바이스 */
+					<foreach collection="multiFrontGb" item="item" index="index"  open="AND FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiDistributionGb != null">
+					/* 물류구분 */
+					<foreach collection="multiDistributionGb" item="item" index="index"  open="AND DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				GROUP BY A.EXTMALL_ID
+	) TAB
+	ORDER BY TAB.EXTMALL_NM
+	</select>
+
+	<!-- 채널 주문목록 조회 -->
+	<select id="getChannelOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getChannelOrderList */
+		SELECT AF_LINK_CD
+		     , AF_LINK_NM
+		     , CHANNEL_AMT
+		     , TOT_AMT
+		     , SELL_QTY
+		     , CNCL_QTY
+		     , CNCL_AMT
+		     , REAL_ORD_AMT
+		     , SELL_FEE_RATE
+		     , EX_USAC_AMT
+		     , YOY_TOT_ORD_AMT
+	   		 , ROUND(TOT_AMT / (CASE WHEN TOT_AMT >0 AND YOY_TOT_ORD_AMT = 0 THEN 1 ELSE YOY_TOT_ORD_AMT END) * 100 - 100,1) AS YOY_RATE /*증가율*/
+		  FROM (
+				SELECT
+				    A.AF_LINK_CD
+				    , B.AF_LINK_NM
+				    , SUM(A.CHANNEL_AMT) AS CHANNEL_AMT
+				    , SUM(A.CHANNEL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT /* 총매출 */
+				    , SUM(A.SELL_QTY) AS SELL_QTY  /* 판매수량 */
+				    , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY /* 취/반품수량 */
+				    , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT /* 취/반품액 */
+				    , SUM(A.REAL_ORD_AMT) AS REAL_ORD_AMT /* 실결제금액 */
+				    , (SELECT FEE_RATE FROM TB_AF_LINK X WHERE X.AF_LINK_CD = A.AF_LINK_CD) AS SELL_FEE_RATE
+				    , (SUM(A.REAL_ORD_AMT) * (1 - (SELECT FEE_RATE FROM TB_AF_LINK X WHERE X.AF_LINK_CD = A.AF_LINK_CD) / 100)) AS EX_USAC_AMT
+				    , IFNULL((SELECT SUM(X.CHANNEL_AMT - X.CNCL_AMT - X.RTN_AMT) AS YOY_TOT_ORD_AMT
+						FROM TB_STAT_ORD_DAY X
+						WHERE X.AF_LINK_CD = A.AF_LINK_CD
+						<![CDATA[
+								 AND X.DAY >= DATE_ADD(STR_TO_DATE(#{startDt},'%Y-%m-%d'), INTERVAL -1 YEAR)
+								 AND X.DAY < DATE_ADD(DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR)
+							]]>
+						<if test="multiFrontGb != null">
+							/* 디바이스 */
+							<foreach collection="multiFrontGb" item="item" index="index"  open="AND X.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+						</if>
+						<if test="multiFormalGb != null">
+							/* 정상/이월구분 */
+							<foreach collection="multiFormalGb" item="item" index="index"  open="AND X.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+						</if>
+						<if test="multiDistributionGb != null">
+							/* 물류구분 */
+							<foreach collection="multiDistributionGb" item="item" index="index"  open="AND X.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+						</if>
+						<if test="multiSupplyCompCd != null">
+							/* 공급처 */
+							<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND X.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+						</if>
+						<if test="multiItemkindCd != null">
+							/* 품목 */
+							<foreach collection="multiItemkindCd" item="item" index="index"  open="AND X.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+						</if>), 0) AS YOY_TOT_ORD_AMT
+				FROM TB_STAT_ORD_DAY A
+				INNER JOIN TB_AF_LINK B ON A.AF_LINK_CD = B.AF_LINK_CD
+				WHERE B.AF_CHANNEL != 'G053_01'
+				<![CDATA[
+				    AND A.DAY >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
+				    AND A.DAY < DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+				]]>
+				<if test="multiFrontGb != null">
+					/* 디바이스 */
+					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiFormalGb != null">
+					/* 정상/이월구분 */
+					<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiDistributionGb != null">
+					/* 물류구분 */
+					<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiSupplyCompCd != null">
+					/* 공급처 */
+					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiItemkindCd != null">
+					/* 품목 */
+					<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				GROUP BY AF_LINK_CD
+	) TAB
+	ORDER BY AF_LINK_NM
+	</select>
+
+	<!-- 브랜드 주문목록 조회 -->
+	<select id="getBrandOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getBrandOrderList */
+		WITH YOY AS (
+		  SELECT X.BRAND_CD, SUM(X.SELF_AMT + X.CHANNEL_AMT + X.EXTMALL_AMT - X.CNCL_AMT - X.RTN_AMT) AS YOY_TOT_ORD_AMT
+		    FROM TB_STAT_ORD_DAY X
+		   WHERE 1=1
+			<![CDATA[
+		     AND X.DAY >= DATE_ADD(STR_TO_DATE(#{startDt},'%Y-%m-%d'), INTERVAL -1 YEAR)
+			 AND X.DAY < DATE_ADD(DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR)
+			]]>
+			<if test="multiFrontGb != null">
+				/* 디바이스 */
+				<foreach collection="multiFrontGb" item="item" index="index"  open="AND X.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiFormalGb != null">
+				/* 정상/이월구분 */
+				<foreach collection="multiFormalGb" item="item" index="index"  open="AND X.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiDistributionGb != null">
+				/* 물류구분 */
+				<foreach collection="multiDistributionGb" item="item" index="index"  open="AND X.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiSupplyCompCd != null">
+				/* 공급처 */
+				<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND X.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiItemkindCd != null">
+				/* 품목 */
+				<foreach collection="multiItemkindCd" item="item" index="index"  open="AND X.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiExtmallId != null">
+				/* 제휴몰 */
+				<foreach collection="multiExtmallId" item="item" index="index"  open="AND X.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiAfLinkCd != null">
+				/* 채널 */
+				<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND X.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiBrandCd != null">
+				/* 브랜드 */
+				<foreach collection="multiBrandCd" item="item" index="index"  open="AND Y.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+		  GROUP BY X.BRAND_CD
+		)
+		SELECT
+		    BRAND_CD /*브랜드코드*/
+		    , BRAND_ENM /*브랜드명*/
+		    , TOT_AMT /*총매출*/
+		    , SELL_QTY /*판매수량*/
+		    , SELFMALL_AMT /*자사몰매출*/
+		    , EXTMALL_AMT /*제휴몰매출*/
+		    , CNCL_AMT /*취/반품액*/
+		    , TOT_AMT_10 /*정상매출*/
+		    , TOT_AMT_20 /*이월매출*/
+		    , ROUND( ((FLOOR(TOT_AMT_10 / TOT_AMT * 10000 / 10)) / 10), 1) AS AMT_RATE_10 /*정상비*/
+		    , ROUND(TOT_AMT / (CASE WHEN TOT_AMT >0 AND (YOY_TOT_ORD_AMT IS NULL OR YOY_TOT_ORD_AMT = 0) THEN 1 ELSE YOY_TOT_ORD_AMT END) * 100 - 100,1) AS YOY_RATE /*증가율*/
+		    , YOY_TOT_ORD_AMT
+		FROM (
+		    SELECT
+		        BRAND_CD
+		        , BRAND_ENM
+		        , SELF_YN
+		        , SUM(TOT_AMT) AS TOT_AMT
+		        , SUM(SELL_QTY) AS SELL_QTY
+		        , SUM(SELFMALL_AMT) AS SELFMALL_AMT
+		        , SUM(EXTMALL_AMT) AS EXTMALL_AMT
+		        , SUM(CNCL_AMT) AS CNCL_AMT
+		        , SUM(CASE WHEN FORMAL_GB = 'G009_10' THEN TOT_AMT ELSE 0 END) AS TOT_AMT_10 /*정상매출*/
+		        , SUM(CASE WHEN FORMAL_GB = 'G009_20' THEN TOT_AMT ELSE 0 END) AS TOT_AMT_20 /*이월매출*/
+		        , YOY_TOT_ORD_AMT
+		    FROM (
+		        SELECT
+		            A.BRAND_CD -- 브랜드코드
+		            , B.BRAND_ENM -- 브랜드명
+		            , B.SELF_YN -- 자사여부
+		            , A.FORMAL_GB -- 정상이월구분
+		            , SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT -- 총매출
+		            , SUM(A.SELL_QTY) AS SELL_QTY -- 판매수량
+		            , SUM(A.SELF_AMT + A.CHANNEL_AMT) AS SELFMALL_AMT -- 자사몰매출
+		            , SUM(A.EXTMALL_AMT) AS EXTMALL_AMT -- 제휴몰매출
+		            , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
+		            , C.YOY_TOT_ORD_AMT
+		        FROM TB_STAT_ORD_DAY A LEFT OUTER JOIN YOY C ON A.BRAND_CD = C.BRAND_CD, TB_BRAND B
+		        WHERE A.BRAND_CD = B.BRAND_CD
+				<![CDATA[
+			      AND DAY >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
+			      AND DAY < DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+				]]>
+				<if test="multiFrontGb != null">
+					/* 디바이스 */
+					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiFormalGb != null">
+					/* 정상/이월구분 */
+					<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiDistributionGb != null">
+					/* 물류구분 */
+					<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiSupplyCompCd != null">
+					/* 공급처 */
+					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiItemkindCd != null">
+					/* 품목 */
+					<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiExtmallId != null">
+					/* 제휴몰 */
+					<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiAfLinkCd != null">
+					/* 채널 */
+					<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiBrandCd != null">
+					/* 브랜드 */
+					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+		        GROUP BY A.BRAND_CD, B.BRAND_ENM, B.SELF_YN, A.FORMAL_GB
+		    ) X
+		    GROUP BY BRAND_CD, BRAND_ENM, SELF_YN
+		) Z
+		ORDER BY SELF_YN DESC, BRAND_ENM
+	</select>
+
+	<!-- 시간별 주문 조회 -->
+	<select id="getHourlyOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getHourlyOrderList */
+		WITH TAB AS (
+		    SELECT
+		        DATE_FORMAT(DAY_TIME, '%H') AS HOUR
+		        , SUM(ORD_AMT) AS ORD_AMT /*매출*/
+		        , SUM(ORD_CUST) AS ORD_CUST /*주문자수*/
+		        , SUM(ORD_CNT) AS ORD_CNT /*주문수*/
+		        , SUM(SELL_QTY) AS SELL_QTY /*판매수*/
+		        , FLOOR(AVG(CUST_PRICE)) AS CUST_PRICE /*객단가*/
+		        , SUM(CNCL_QTY) AS CNCL_QTY /*취반품개수*/
+		        , SUM(CNCL_AMT) AS CNCL_AMT /*취반품액*/
+		    FROM TB_STAT_ORD_TIME A
+		    WHERE 1=1
+		    	<if test="dtGb != null">
+					<foreach collection="dtGb" item="item" index="index">
+						<if test="item == 'COMPARE_TERMS'">
+					        <![CDATA[
+					        /* 직전동기간 */
+					        AND A.DAY_TIME >= DATE_ADD(DATE_FORMAT(#{startDt},'%Y-%m-%d'), INTERVAL (DATE_FORMAT(#{startDt}, '%Y%m%d') - DATE_FORMAT(#{endDt}, '%Y%m%d')) - 1 DAY)
+					        AND A.DAY_TIME < DATE_FORMAT(#{startDt}, '%Y%m%d')
+					        ]]>
+						</if>
+						<if test="item == 'YOY'">
+					        <![CDATA[
+					        /* 전년비교 */
+					        AND A.DAY_TIME >= DATE_ADD(DATE_FORMAT(#{startDt}, '%Y%m%d'), INTERVAL -1 YEAR )
+					        AND A.DAY_TIME < DATE_ADD(DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY), INTERVAL -1 YEAR )
+					        ]]>
+						</if>
+						<if test="item == 'DIY'">
+							<![CDATA[
+							/* 직접선택 */
+							AND A.DAY_TIME >= DATE_FORMAT(#{compStDt}, '%Y%m%d')
+							AND A.DAY_TIME <  DATE_ADD(DATE_FORMAT(#{compEdDt}, '%Y%m%d'), INTERVAL 1 DAY)
+							]]>
+						</if>
+					</foreach>
+				</if>
+				<if test="multiFrontGb != null">
+					/* 디바이스 */
+					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiFormalGb != null">
+					/* 정상/이월구분 */
+					<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiDistributionGb != null">
+					/* 물류구분 */
+					<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiSupplyCompCd != null">
+					/* 공급처 */
+					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiItemkindCd != null">
+					/* 품목 */
+					<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiExtmallId != null">
+					/* 제휴몰 */
+					<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiAfLinkCd != null">
+					/* 채널 */
+					<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiBrandCd != null">
+					/* 브랜드 */
+					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+		        AND A.SHOT_DELV_YN = 'Y' /*총알배송*/
+		    GROUP BY HOUR
+		)
+		SELECT
+		    A.HOUR
+		    , A.ORD_AMT /*매출*/
+		    , B.ORD_AMT AS COMP_ORD_AMT /*비교*/
+		    , ROUND(FLOOR(A.ORD_AMT / (CASE WHEN B.ORD_AMT IS NULL OR B.ORD_AMT = 0 THEN 1 ELSE B.ORD_AMT END) * 100 * 100) / 100, 2) AS CPL_RATE /*달성율*/
+		    , A.ORD_CUST /*주문자수*/
+		    , A.ORD_CNT /*주문수*/
+		    , A.SELL_QTY /*판매수*/
+		    , A.CUST_PRICE /*객단가*/
+		    , A.CNCL_QTY /*취반품개수*/
+		    , A.CNCL_AMT /*취반품액*/
+		FROM (
+		    SELECT
+		        DATE_FORMAT(DAY_TIME, '%H') AS HOUR
+		        , SUM(ORD_AMT) AS ORD_AMT /*매출*/
+		        , SUM(ORD_CUST) AS ORD_CUST /*주문자수*/
+		        , SUM(ORD_CNT) AS ORD_CNT /*주문수*/
+		        , SUM(SELL_QTY) AS SELL_QTY /*판매수*/
+		        , FLOOR(AVG(CUST_PRICE)) AS CUST_PRICE /*객단가*/
+		        , SUM(CNCL_QTY) AS CNCL_QTY /*취반품개수*/
+		        , SUM(CNCL_AMT) AS CNCL_AMT /*취반품액*/
+		    FROM TB_STAT_ORD_TIME A
+		    WHERE 1=1
+		    <![CDATA[
+		    AND A.DAY_TIME >= DATE_FORMAT(#{startDt}, '%Y%m%d')
+		    AND A.DAY_TIME < DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
+		    ]]>
+			<if test="multiFrontGb != null">
+				/* 디바이스 */
+				<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiFormalGb != null">
+				/* 정상/이월구분 */
+				<foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiDistributionGb != null">
+				/* 물류구분 */
+				<foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiSupplyCompCd != null">
+				/* 공급처 */
+				<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiItemkindCd != null">
+				/* 품목 */
+				<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiExtmallId != null">
+				/* 제휴몰 */
+				<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiAfLinkCd != null">
+				/* 채널 */
+				<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiBrandCd != null">
+				/* 브랜드 */
+				<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+
+		    GROUP BY HOUR
+		) A
+		LEFT OUTER JOIN TAB B ON A.HOUR = B.HOUR
+		ORDER BY A.HOUR
+	</select>
+
+	<!-- 카테고리별 주문 조회 -->
+	<select id="getCategoryOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getCategoryOrderList */
+		SELECT
+			A.ITEMKIND_CD
+			, SUBSTRING_INDEX(T4.FULL_CATE_NM, ' > ', 1) AS CATE_NM1 /* 대분류 */
+			, SUBSTRING_INDEX(SUBSTRING(T4.FULL_CATE_NM, INSTR(SUBSTRING_INDEX(T4.FULL_CATE_NM, ' > ', 2), ' > ') + 3), ' > ', 1) AS CATE_NM2 /* 중분류 */
+			, SUBSTRING_INDEX(T4.FULL_CATE_NM, ' > ', -1) AS CATE_NM3 -- 소분류
+			, (A.SELFMALL_AMT + A.EXTMALL_AMT) AS TOT_AMT /*총매출*/
+			, SELFMALL_AMT /*자사몰매출*/
+			, EXTMALL_AMT /*제휴몰매출*/
+		FROM (
+			SELECT
+			A.ITEMKIND_CD
+			, SUM(CASE WHEN GB = '1' THEN AMT ELSE 0 END ) AS SELFMALL_AMT
+			, SUM(CASE WHEN GB = '2' THEN AMT ELSE 0 END ) AS EXTMALL_AMT
+			FROM (
+				SELECT
+					A.ITEMKIND_CD
+					, SUM(A.SELF_AMT + A.CHANNEL_AMT - A.CNCL_AMT - A.RTN_AMT) AS AMT
+					, '1' AS GB
+				FROM TB_STAT_ORD_DAY A
+				WHERE EXTMALL_ID IS NULL
+				<![CDATA[
+					/* 직접선택 */
+					AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
+					AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
+					]]>
+				<if test="multiFrontGb != null">
+					/* 디바이스 */
+					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiExtmallId != null">
+					/* 제휴몰 */
+					<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiSupplyCompCd != null">
+					/* 공급처 */
+					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiBrandCd != null">
+					/* 브랜드 */
+					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				GROUP BY A.ITEMKIND_CD
+				UNION ALL
+				SELECT
+					A.ITEMKIND_CD
+					, SUM(A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS AMT
+					, '2' AS GB
+				FROM TB_STAT_ORD_DAY A
+				WHERE EXTMALL_ID IS NOT NULL
+				<![CDATA[
+					/* 직접선택 */
+					AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
+					AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
+					]]>
+				<if test="multiFrontGb != null">
+					/* 디바이스 */
+					<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiExtmallId != null">
+					/* 제휴몰 */
+					<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiSupplyCompCd != null">
+					/* 공급처 */
+					<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				<if test="multiBrandCd != null">
+					/* 브랜드 */
+					<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+				GROUP BY A.ITEMKIND_CD
+			) A
+			GROUP BY A.ITEMKIND_CD
+		) A, TB_ITEMKIND_CATE TC, TB_CATE_4SRCH T4
+		WHERE A.ITEMKIND_CD = TC.ITEMKIND_CD
+			AND TC.CATE_NO = T4.LEAF_CATE_NO
+			AND (A.SELFMALL_AMT + A.EXTMALL_AMT) > 0
+	</select>
+
+	<!-- 카테고리 상세 조회 -->
+	<select id="getCategoryOrderDetailList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getCategoryOrderDetailList */
+		SELECT
+		    C.BRAND_ENM
+		    , A.GOODS_CD
+		    , B.GOODS_NM
+		    , SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT /*총매출*/
+		    , SUM(A.SELL_QTY) AS SELL_QTY /*판매수량*/
+		    , SUM(A.ORD_CUST) AS ORD_CUST /*구매자수*/
+		FROM TB_STAT_ORD_DAY A, TB_GOODS B, TB_BRAND C
+		WHERE A.GOODS_CD = B.GOODS_CD
+		    AND A.BRAND_CD = C.BRAND_CD
+		    AND (A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) > 0
+		    AND A.ITEMKIND_CD = #{itemkindCd}
+	        <![CDATA[
+	        /* 직접선택 */
+	        AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
+	        AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
+	        ]]>
+		GROUP BY C.BRAND_ENM, A.GOODS_CD, B.GOODS_NM
+	</select>
+
+	<!-- 클래임 주문조회 -->
+	<select id="getClaimOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getClaimOrderList */
+		SELECT
+		    DATE_FORMAT(DAY, '%m-%d') AS DAY
+		    , SUM(A.CNCL_AMT + A.RTN_AMT + A.CHG_DELV_FEE) AS CLM_AMT /*클레임액*/
+		    , SUM(A.CNCL_QTY + A.RTN_QTY + A.CHG_QTY) AS CLM_QTY /*클레임수*/
+		    , ROUND(FLOOR(SUM(A.CNCL_AMT + A.RTN_AMT + A.CHG_DELV_FEE) / SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT) * 100 * 10) / 10, 1) AS AMT_RATE
+		    , ROUND(FLOOR(SUM(A.CNCL_QTY + A.RTN_QTY + A.CHG_QTY) / SUM(A.SELL_QTY) * 100 * 10) / 10, 1) AS CLM_RATE
+		    , SUM(A.CNCL_QTY) AS CNCL_QTY /*취소수*/
+		    , SUM(A.CNCL_AMT) AS CNCL_AMT /*취소액*/
+		    , SUM(A.RTN_QTY) AS RTN_QTY /*반품수*/
+		    , SUM(A.RTN_AMT) AS RTN_AMT /*반품액*/
+		    , SUM(A.CHG_QTY) AS CHG_QTY /*교환수*/
+		    , SUM(A.CHG_DELV_FEE) AS CHG_DELV_FEE /*교환배송비*/
+		FROM TB_STAT_ORD_DAY A
+		WHERE 1=1
+	        <![CDATA[
+	        /* 직접선택 */
+	        AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
+	        AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
+	        ]]>
+			<if test="multiFrontGb != null">
+				/* 디바이스 */
+				<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiExtmallId != null">
+				/* 제휴몰 */
+				<foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiSupplyCompCd != null">
+				/* 공급처 */
+				<foreach collection="multiSupplyCompCd" item="item" index="index"  open="AND A.SUPPLY_COMP_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiBrandCd != null">
+				/* 브랜드 */
+				<foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiItemkindCd != null">
+				/* 품목 */
+				<foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+			<if test="multiAfLinkCd != null">
+				/* 채널 */
+				<foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+			</if>
+		GROUP BY DATE_FORMAT(DAY, '%m-%d')
+	</select>
+
+	<!-- 베스트 상품 조회 -->
+	<sql id="getBestOrderListSql">
+        /* TsaStatistics.getBestOrderList */
+        SELECT
+            (SELECT SUBSTRING_INDEX(SYS_IMG_NM , '/', 2) FROM TB_GOODS_IMG X WHERE X.GOODS_CD = B.GOODS_CD AND X.DEFAULT_IMG_YN = 'Y' LIMIT 1) AS SYS_IMG_NM /*상품이미지*/
+            , C.BRAND_ENM /*브랜드명*/
+            , A.GOODS_CD /*상품코드*/
+            , B.GOODS_NM /*상품명*/
+            , CASE WHEN A.DISTRIBUTION_GB = 'WMS' THEN '위탁' ELSE '입점' END AS DISTRIBUTION_GB /*구분*/
+            , B.CURR_PRICE /*판매가*/
+            , SUM(A.SELL_QTY - A.CNCL_QTY - A.RTN_QTY) AS SELL_QTY /*판매수*/
+            , SUM(A.SELF_AMT + A.CHANNEL_AMT + A.EXTMALL_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_AMT /*매출액*/
+            , SUM(D.STOCK_QTY) AS STOCK_QTY /*현재고수량*/
+        FROM TB_STAT_ORD_DAY A, TB_GOODS B, TB_BRAND C, TB_GOODS_STOCK D
+        WHERE A.GOODS_CD = B.GOODS_CD
+            AND A.BRAND_CD = C.BRAND_CD
+            AND A.GOODS_CD = D.GOODS_CD
+            <![CDATA[
+            /* 직접선택 */
+            AND A.DAY >= DATE_FORMAT(#{startDt}, '%Y%m%d')
+            AND A.DAY <  DATE_ADD(DATE_FORMAT(#{endDt}, '%Y%m%d'), INTERVAL 1 DAY)
+            ]]>
+            <if test="multiFrontGb != null">
+                /* 디바이스 */
+                <foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="multiExtmallId != null">
+                /* 제휴몰 */
+                <foreach collection="multiExtmallId" item="item" index="index"  open="AND A.EXTMALL_ID IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="multiDistributionGb != null">
+                /* 물류구분 */
+                <foreach collection="multiDistributionGb" item="item" index="index"  open="AND A.DISTRIBUTION_GB IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="multiFormalGb != null">
+                /* 정상/이월구분 */
+                <foreach collection="multiFormalGb" item="item" index="index"  open="AND A.FORMAL_GB IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="multiSexGb != null">
+                /* 성별구분 */
+                <foreach collection="multiSexGb" item="item" index="index"  open="AND A.SEX_GB IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="multiAgeGb != null">
+                /* 성별구분 */
+                <foreach collection="multiAgeGb" item="item" index="index"  open="AND A.AGE IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="multiBrandCd != null">
+                /* 브랜드 */
+                <foreach collection="multiBrandCd" item="item" index="index"  open="AND A.BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="multiItemkindCd != null">
+                /* 품목 */
+                <foreach collection="multiItemkindCd" item="item" index="index"  open="AND A.ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="multiAfLinkCd != null">
+                /* 채널 */
+                <foreach collection="multiAfLinkCd" item="item" index="index"  open="AND A.AF_LINK_CD IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+        GROUP BY C.BRAND_ENM, A.GOODS_CD, B.GOODS_NM, A.DISTRIBUTION_GB, B.CURR_PRICE
+        ORDER BY TOT_AMT DESC
+	</sql>
+
+	<!-- 베스트 주문조회 -->
+	<select id="getBestOrderList" parameterType="Statistics" resultType="Statistics">
+		<include refid="getBestOrderListSql"></include>
+	</select>
+	<!-- 베스트 주문조회 -->
+	<select id="getBestOrderListMap" parameterType="Statistics" resultType="paramMap">
+		<include refid="getBestOrderListSql"></include>
+	</select>
+
+	<!-- 쿠폰사용통계조회 -->
+	<select id="getCouponOrderList" parameterType="Statistics" resultType="Statistics">
+	   /* TsaStatistics.getCouponOrderList */
+		WITH TAB AS (
+		     SELECT
+		        A.ORD_NO
+		        , B.ORD_DTL_NO
+		        , B.ORD_QTY
+		        , B.CNCL_RTN_QTY
+		        , B.ORD_AMT
+		        , B.CURR_PRICE
+		        , B.CNCL_RTN_AMT
+		        , B.ORD_DTL_STAT
+		        , A.PAY_DT
+		        , C.GOODS_CD
+		        , CPN1_DC_AMT
+		        , CPN1_CPN_SQ
+		        , GOODS_CPN_DC_AMT
+		        , GOODS_CPN_SQ
+		        , CART_CPN_DC_AMT
+		        , CART_CPN_SQ
+		    FROM TB_ORDER A, TB_ORDER_DETAIL B, TB_GOODS C, TB_CUSTOMER D
+		    WHERE A.ORD_NO = B.ORD_NO
+		        AND B.GOODS_CD = C.GOODS_CD
+		        AND A.CUST_NO = D.CUST_NO
+	            <![CDATA[
+		        AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y%m%d')                         -- 시작일변수
+		        AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
+                ]]>
+		        AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98') -- 주문접수,입금대기,입금전취소 제외
+		        AND B.ORD_QTY > B.CNCL_RTN_QTY
+		)
+		, TAB_CPN_STAT AS (
+		    SELECT CPN_TYPE, A.CPN_ID, A.CPN_NM
+		        , 100 - IFNULL((SELECT MAX(BURDEN_RATE) FROM TB_COUPON_BURDEN X WHERE X.CPN_ID = A.CPN_ID), 0) AS BURDEN
+		        , COUNT(1) AS USE_CNT
+		        , SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * (C.ORD_QTY - C.CNCL_RTN_QTY)) AS ORD_AMT
+		        , SUM(C.CPN1_DC_AMT) AS CPN_AMT
+		    FROM TB_COUPON A, TB_CUST_COUPON B, TAB C
+		    WHERE A.CPN_ID = B.CPN_ID
+		        AND B.CUST_CPN_SQ = C.CPN1_CPN_SQ
+		        AND A.CPN_TYPE = 'G230_10'-- 즉시할인쿠폰
+		        AND C.CPN1_DC_AMT > 0
+		    -- 쿠폰번호조건 (CPN_ID)
+		    GROUP BY CPN_TYPE, A.CPN_ID, A.CPN_NM
+		    UNION ALL
+		    SELECT CPN_TYPE, A.CPN_ID, A.CPN_NM
+		        , 100 - IFNULL((SELECT MAX(BURDEN_RATE) FROM TB_COUPON_BURDEN X WHERE X.CPN_ID = A.CPN_ID), 0) AS BURDEN
+		        , COUNT(1) AS USE_CNT
+		        , SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * (C.ORD_QTY - C.CNCL_RTN_QTY)) AS ORD_AMT
+		        , SUM(C.GOODS_CPN_DC_AMT) AS CPN_AMT
+		    FROM TB_COUPON A, TB_CUST_COUPON B, TAB C
+		    WHERE A.CPN_ID = B.CPN_ID
+		        AND B.CUST_CPN_SQ = C.GOODS_CPN_SQ
+		        AND A.CPN_TYPE = 'G230_11'-- 상품쿠푼
+		        AND C.GOODS_CPN_DC_AMT > 0
+		    -- 쿠폰번호조건 (CPN_ID)
+		    GROUP BY CPN_TYPE, A.CPN_ID, A.CPN_NM
+		    UNION ALL
+		    SELECT CPN_TYPE, A.CPN_ID, A.CPN_NM
+		        , 100 - IFNULL((SELECT MAX(BURDEN_RATE) FROM TB_COUPON_BURDEN X WHERE X.CPN_ID = A.CPN_ID), 0) AS BURDEN
+		        , COUNT(1) AS USE_CNT
+		        , SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * (C.ORD_QTY - C.CNCL_RTN_QTY)) AS ORD_AMT
+		        , SUM(C.CART_CPN_DC_AMT) AS CPN_AMT
+		    FROM TB_COUPON A, TB_CUST_COUPON B, TAB C
+		    WHERE A.CPN_ID = B.CPN_ID
+		        AND B.CUST_CPN_SQ = C.CART_CPN_SQ
+		        AND A.CPN_TYPE = 'G230_20'-- 장바구니쿠푼
+		        AND C.CART_CPN_DC_AMT > 0
+		    -- 쿠폰번호조건 (CPN_ID)
+		    GROUP BY CPN_TYPE, A.CPN_ID, A.CPN_NM
+		    UNION ALL
+		    SELECT CPN_TYPE, A.CPN_ID, A.CPN_NM
+		        , 100 - IFNULL((SELECT MAX(BURDEN_RATE) FROM TB_COUPON_BURDEN X WHERE X.CPN_ID = A.CPN_ID), 0) AS BURDEN
+		        , COUNT(1) AS USE_CNT
+		        , SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * (C.ORD_QTY - C.CNCL_RTN_QTY)) AS ORD_AMT
+		        , SUM(D.DELV_CPN_DC_AMT) AS CPN_AMT
+		    FROM TB_COUPON A, TB_CUST_COUPON B, TAB C, TB_DELIVERY_FEE D
+		    WHERE A.CPN_ID = B.CPN_ID
+		        AND B.CUST_CPN_SQ = C.CART_CPN_SQ
+		        AND C.ORD_NO = D.ORD_NO
+		        AND B.CUST_CPN_SQ = D.DELV_CPN_SQ
+		        AND A.CPN_TYPE = 'G230_30'-- 배송비쿠푼
+		        AND D.DELV_CPN_DC_AMT > 0
+		    -- 쿠폰번호조건 (CPN_ID)
+		    GROUP BY CPN_TYPE, A.CPN_ID, A.CPN_NM
+		)
+		SELECT CPN_TYPE -- 쿠폰타입
+		    , FN_GET_CODE_NM('G230', CPN_TYPE) AS CPN_TYPE_NM -- 쿠폰타입명
+		    , CPN_ID -- 쿠폰번호
+		    , CPN_NM -- 쿠폰명
+		    , BURDEN -- 자사분담율
+		    , DOWN_CNT
+			, ROUND((USE_CNT / DOWN_CNT) * 100 * 100) / 10 / 10 AS USE_RATE
+		    , USE_CNT -- 사용수
+		    , ORD_AMT -- 주문금액
+		    , CPN_AMT -- 쿠폰비용
+		FROM (
+		    SELECT CPN_TYPE -- 쿠폰타입
+		        , FN_GET_CODE_NM('G230', CPN_TYPE) AS CPN_TYPE_NM -- 쿠폰타입명
+		        , CPN_ID -- 쿠폰번호
+		        , CPN_NM -- 쿠폰명
+		        , BURDEN -- 자사분담율
+		        , (SELECT COUNT(1) FROM TB_CUST_COUPON X WHERE X.CPN_ID = A.CPN_ID) AS DOWN_CNT
+		        , USE_CNT -- 사용수
+		        , ORD_AMT -- 주문금액
+		        , CPN_AMT -- 쿠폰비용
+		    FROM TAB_CPN_STAT A
+		    WHERE 1=1
+            <if test="multiCpnId != null">
+                /* 쿠폰번호 */
+                <foreach collection="multiCpnId" item="item" index="index"  open="AND A.CPN_ID IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+            <if test="cpnTypeArr != null">
+                /* 쿠폰유형조건 (G230_10  즉시할인쿠폰, G230_11 상품쿠폰, G230_20   주문서쿠폰,  G230_30 배송비쿠폰 */
+                <foreach collection="cpnTypeArr" item="item" index="index"  open="AND A.CPN_TYPE IN (" close=")" separator=",">#{item}</foreach>
+            </if>
+		) A
+	</select>
+
+	<!-- 쿠폰사용통계상세조회 -->
+	<select id="getCouponOrderDetailList" parameterType="Statistics" resultType="Statistics">
+	   /* TsaStatistics.getCouponOrderDetailList */
+		SELECT Z.BRAND_CD
+		    , Z.BRAND_ENM
+		    , Z.GOODS_CD
+		    , Z.GOODS_NM
+		    , Z.ORD_AMT
+		    , Z.ORD_QTY
+		    , Z.CUST_CNT
+		    , X.CUST_CPN_CNT
+			, ROUND((X.CUST_CPN_CNT / Z.CUST_CNT * 100 * 100) / 10) / 10 AS ORD_RATE
+		FROM (
+		     SELECT
+		        A.BRAND_CD
+		        , B.BRAND_ENM
+		        , A.GOODS_CD
+		        , A.GOODS_NM
+		        , SUM(ORD_AMT) AS ORD_AMT
+		        , SUM(ORD_QTY) AS ORD_QTY
+		        , SUM(CUST_CNT) AS CUST_CNT
+		    FROM (
+		         SELECT
+		            C.BRAND_CD
+		            , C.GOODS_CD
+		            , C.GOODS_NM
+		            , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
+		            , SUM(B.ORD_QTY - B.CNCL_RTN_QTY) AS ORD_QTY
+		            , COUNT(1) OVER(PARTITION BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO) AS CUST_CNT
+		        FROM TB_ORDER A, TB_ORDER_DETAIL B, TB_GOODS C, TB_CUSTOMER D
+		        WHERE A.ORD_NO = B.ORD_NO
+		        AND B.GOODS_CD = C.GOODS_CD
+		        AND A.CUST_NO = D.CUST_NO
+	            <![CDATA[
+		        AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
+		        AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
+	            ]]>
+		        AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98') -- 주문접수,입금대기,입금전취소 제외
+		        AND B.ORD_QTY > B.CNCL_RTN_QTY
+		        GROUP BY C.BRAND_CD, C.GOODS_CD, C.GOODS_NM, A.CUST_NO
+		    ) A, TB_BRAND B
+		    WHERE A.BRAND_CD = B.BRAND_CD
+		    GROUP BY A.BRAND_CD, B.BRAND_ENM, A.GOODS_CD
+		) Z
+		, (
+		    SELECT
+		        X.BRAND_CD
+		        , X.BRAND_ENM
+		        , X.GOODS_CD
+		        , X.CUST_CPN_CNT
+		    FROM (
+		        SELECT
+		            A.BRAND_CD
+		            , B.BRAND_ENM
+		            , A.GOODS_CD
+		            , SUM(A.CUST_CPN_CNT) AS CUST_CPN_CNT
+		        FROM (
+		            SELECT
+		                C.BRAND_CD
+		                , C.GOODS_CD
+		                , COUNT(1) OVER(PARTITION BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO) AS CUST_CPN_CNT
+		            FROM TB_ORDER A, TB_ORDER_DETAIL B, TB_GOODS C, TB_CUSTOMER D
+		            WHERE A.ORD_NO = B.ORD_NO
+		            AND B.GOODS_CD = C.GOODS_CD
+		            AND A.CUST_NO = D.CUST_NO
+		            <![CDATA[
+		            AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
+		            AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
+		            ]]>
+		            AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98') -- 주문접수,입금대기,입금전취소 제외
+		            AND B.ORD_QTY > B.CNCL_RTN_QTY
+		            AND EXISTS(
+		                SELECT 1
+		                FROM TB_COUPON X, TB_CUST_COUPON Y
+		                WHERE X.CPN_ID = Y.CPN_ID
+		                    AND Y.CUST_CPN_SQ = B.GOODS_CPN_SQ -- B.CPN1_CPN_SQ, B.CART_CPN_SQ (쿠폰종류에따라 설정)
+		                    AND X.CPN_ID = #{cpnId} -- 쿠폰번호변수
+		            )
+		            GROUP BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO
+		        ) A, TB_BRAND B
+		        WHERE A.BRAND_CD = B.BRAND_CD
+		        GROUP BY A.BRAND_CD, B.BRAND_ENM, A.GOODS_CD
+		    ) X
+		) X
+		WHERE Z.BRAND_CD = X.BRAND_CD
+		    AND Z.GOODS_CD = X.GOODS_CD
+	</select>
+
+	<!-- 다다익선 주문 통계 조회 -->
+	<select id="getTmtbOrderList" parameterType="Statistics" resultType="Statistics">
+	   /* TsaStatistics.getTmtbOrderList */
+		WITH TAB AS (
+		    SELECT A.ORD_NO
+		         , B.ORD_DTL_NO
+		         , B.ORD_QTY
+		         , B.CNCL_RTN_QTY
+		         , B.ORD_AMT
+		         , B.CURR_PRICE
+		         , B.CNCL_RTN_AMT
+		         , B.ORD_DTL_STAT
+		         , A.PAY_DT
+		         , C.GOODS_CD
+		         , B.TMTB1_SQ
+		         , B.TMTB1_DC_AMT
+		         , B.TMTB2_SQ
+		         , B.TMTB2_DC_AMT
+		    FROM TB_ORDER A,
+		         TB_ORDER_DETAIL B,
+		         TB_GOODS C,
+		         TB_CUSTOMER D
+		    WHERE A.ORD_NO = B.ORD_NO
+		      AND B.GOODS_CD = C.GOODS_CD
+		      AND A.CUST_NO = D.CUST_NO
+		      <![CDATA[
+		      AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
+		      AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
+		      ]]>
+		      AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98')               -- 주문접수,입금대기,입금전취소 제외
+		      AND B.ORD_QTY > B.CNCL_RTN_QTY
+              <choose>
+				  <when test="applyGbArr != null and applyGbArr != ''">
+					  /* 프로모션유형 */
+					  <foreach collection="applyGbArr" item="item" index="index">
+						  <if test='item == "G810_10"'>
+							  AND TMTB1_DC_AMT > 0 -- 수량
+						  </if>
+						  <if test='item == "G810_11"'>
+							  AND TMTB2_DC_AMT > 0 -- 금액
+						  </if>
+					  </foreach>
+				  </when>
+		    	<otherwise>
+					/* 프로모션유형값없을시 */
+					AND (B.TMTB1_DC_AMT + B.TMTB2_DC_AMT) > 0
+				</otherwise>
+			  </choose>
+		)
+		-- 수량할인
+		, TMTB1 AS (
+		    SELECT
+		        TMTB_SQ
+		        , TMTB_NM
+		        , FN_GET_CODE_NM('G810', APPLY_GB) AS APPLY_GB
+		        , SUM(ORD_CNT) AS ORD_CNT
+		        , SUM(ORD_AMT) AS ORD_AMT
+		        , SUM(DC_AMT) AS DC_AMT
+		    FROM
+		    (
+		        SELECT A.TMTB_SQ
+		            , A.TMTB_NM
+		            , APPLY_GB
+		            , COUNT(1) AS ORD_CNT
+		            , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
+		            , SUM(B.TMTB1_DC_AMT) AS DC_AMT
+		        FROM TB_TMTB A, TAB B
+		        WHERE A.TMTB_SQ = B.TMTB1_SQ
+		        GROUP BY A.TMTB_SQ, A.TMTB_NM, A.APPLY_GB, B.ORD_NO
+		    ) X
+		    GROUP BY TMTB_SQ, TMTB_NM, APPLY_GB
+		)
+		-- 금액할인
+		, TMTB2 AS (
+		    SELECT
+		        TMTB_SQ
+		        , TMTB_NM
+		        , FN_GET_CODE_NM('G810', APPLY_GB) AS APPLY_GB
+		        , SUM(ORD_CNT) AS ORD_CNT
+		        , SUM(ORD_AMT) AS ORD_AMT
+		        , SUM(DC_AMT) AS DC_AMT
+		    FROM
+		    (
+		        SELECT A.TMTB_SQ
+		            , A.TMTB_NM
+		            , APPLY_GB
+		            , COUNT(1) AS ORD_CNT
+		            , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
+		            , SUM(B.TMTB1_DC_AMT) AS DC_AMT
+		        FROM TB_TMTB A, TAB B
+		        WHERE A.TMTB_SQ = B.TMTB2_SQ
+                <if test="applyGbArr != null">
+                    /* 프로모션유형 */
+                    <foreach collection="applyGbArr" item="item" index="index"  open="AND A.APPLY_GB IN (" close=")" separator=",">#{item}</foreach>
+                </if>
+		        GROUP BY A.TMTB_SQ, A.TMTB_NM, A.APPLY_GB, B.ORD_NO
+		    ) X
+		    GROUP BY TMTB_SQ, TMTB_NM, APPLY_GB
+		)
+		SELECT *
+		FROM TMTB1
+		WHERE 1=1
+        <if test="multiTmtbSq != null">
+            /* 프로모션번호  */
+            <foreach collection="multiTmtbSq" item="item" index="index"  open="AND TMTB_SQ IN (" close=")" separator=",">#{item}</foreach>
+        </if>
+		UNION ALL
+		SELECT *
+		FROM TMTB2
+		WHERE 1=1
+        <if test="multiTmtbSq != null">
+            /* 프로모션번호  */
+            <foreach collection="multiTmtbSq" item="item" index="index"  open="AND TMTB_SQ IN (" close=")" separator=",">#{item}</foreach>
+        </if>
+	</select>
+
+	<!-- 다다익선 주문 통계 상세조회 -->
+	<select id="getTmtbOrderDetailList" parameterType="Statistics" resultType="Statistics">
+	   /* TsaStatistics.getTmtbOrderDetailList */
+		SELECT
+		    A.BRAND_CD
+		    , B.BRAND_ENM
+		    , A.GOODS_CD
+		    , A.GOODS_NM
+		    , SUM(ORD_AMT) AS ORD_AMT
+		    , SUM(ORD_QTY) AS ORD_QTY
+		    , SUM(CUST_CNT) AS CUST_CNT
+		FROM (
+		     SELECT
+		        C.BRAND_CD
+		        , C.GOODS_CD
+		        , C.GOODS_NM
+		        , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
+		        , SUM(B.ORD_QTY - B.CNCL_RTN_QTY) AS ORD_QTY
+		        , COUNT(1) OVER(PARTITION BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO) AS CUST_CNT
+		    FROM TB_ORDER A, TB_ORDER_DETAIL B, TB_GOODS C, TB_CUSTOMER D
+		    WHERE A.ORD_NO = B.ORD_NO
+		    AND B.GOODS_CD = C.GOODS_CD
+		    AND A.CUST_NO = D.CUST_NO
+		    <![CDATA[
+		    AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
+		    AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
+		    ]]>
+		    AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98') -- 주문접수,입금대기,입금전취소 제외
+		    AND B.ORD_QTY > B.CNCL_RTN_QTY
+            <if test="applyGbArr != null">
+                /* 프로모션유형 */
+                <foreach collection="applyGbArr" item="item" index="index">
+                    <if test='item == "G810_10"'>
+                        AND B.TMTB1_SQ = #{tmtbSq} -- 수량
+                    </if>
+                    <if test='item == "G810_11"'>
+                        AND B.TMTB2_SQ = #{tmtbSq} -- 금액
+                    </if>
+                </foreach>
+            </if>
+		    GROUP BY C.BRAND_CD, C.GOODS_CD, A.CUST_NO
+		) A, TB_BRAND B
+		WHERE A.BRAND_CD = B.BRAND_CD
+		GROUP BY A.BRAND_CD, B.BRAND_ENM, A.GOODS_CD
+	</select>
+
+	<!-- 기획전 주문조회 -->
+	<select id="getPlanOrderList" parameterType="Statistics" resultType="Statistics">
+	    /* TsaStatistics.getPlanOrderList */
+		SELECT
+		    CASE WHEN DISTRIBUTION_GB = 'G065_20' THEN '입점' ELSE '위탁' END AS DISTRIBUTION_GB
+		    , BRAND_ENM
+		    , PLAN_SQ
+		    , (SELECT PLAN_NM FROM TB_PLAN P WHERE P.PLAN_SQ = X.PLAN_SQ) AS PLAN_NM
+		    , SUM(ORD_AMT) AS ORD_AMT
+		    , SUM(ORD_CNT) AS ORD_CNT
+		FROM (
+		    SELECT C.DISTRIBUTION_GB
+		         , F.BRAND_ENM
+		         , E.PLAN_SQ
+		         , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
+		         , COUNT(1) AS ORD_CNT
+		    FROM TB_ORDER A,
+		         TB_ORDER_DETAIL B,
+		         TB_GOODS C,
+		         TB_CUSTOMER D,
+		         TB_PLAN_DETAIL E,
+		         TB_BRAND F
+		    WHERE A.ORD_NO = B.ORD_NO
+		      AND B.GOODS_CD = C.GOODS_CD
+		      AND A.CUST_NO = D.CUST_NO
+		      AND B.PLAN_DTL_SQ = E.PLAN_DTL_SQ
+		      AND F.BRAND_CD = C.BRAND_CD
+		      <![CDATA[
+		      AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
+		      AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
+		      ]]>
+		      AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98')               -- 주문접수,입금대기,입금전취소 제외
+		      AND B.ORD_QTY > B.CNCL_RTN_QTY
+		      <choose>
+				  <when test="distributionGbS != null and distributionGbS !='' and distributionGbW != null and distributionGbW !=''">
+					  AND C.DISTRIBUTION_GB IN ('G065_10', 'G065_11', 'G065_12', 'G065_20')
+				  </when>
+				  <when test="distributionGbW != null and distributionGbW !=''">
+					  AND C.DISTRIBUTION_GB IN ('G065_10', 'G065_11', 'G065_12')
+				  </when>
+				  <when test="distributionGbS != null and distributionGbS !=''">
+					  AND C.DISTRIBUTION_GB = 'G065_20'
+				  </when>
+			  </choose>
+		      <if test="multiPlanSq != null">
+		          /* 기획전번호  */
+		          <foreach collection="multiPlanSq" item="item" index="index"  open="AND E.PLAN_SQ IN (" close=")" separator=",">#{item}</foreach>
+		      </if>
+		    GROUP BY C.DISTRIBUTION_GB, F.BRAND_ENM, E.PLAN_SQ, A.ORD_NO
+		) X
+		GROUP BY DISTRIBUTION_GB, BRAND_ENM, PLAN_SQ
+	</select>
+
+	<!-- 기획전 주문상세 조회 -->
+	<select id="getPlanOrderDetailList" parameterType="Statistics" resultType="Statistics">
+	    /* TsaStatistics.getPlanOrderDetailList */
+		WITH TAB AS (
+		    SELECT SUM(CUST_CNT) AS TOT_CUST_CNT
+		    FROM (
+		        SELECT COUNT(1) AS CUST_CNT
+		        FROM TB_ORDER A,
+		             TB_ORDER_DETAIL B,
+		             TB_GOODS C,
+		             TB_CUSTOMER D,
+		             TB_PLAN_DETAIL E,
+		             TB_BRAND F
+		        WHERE A.ORD_NO = B.ORD_NO
+		          AND B.GOODS_CD = C.GOODS_CD
+		          AND A.CUST_NO = D.CUST_NO
+		          AND B.PLAN_DTL_SQ = E.PLAN_DTL_SQ
+		          AND F.BRAND_CD = C.BRAND_CD
+		          <![CDATA[
+		          AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
+		          AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
+		          ]]>
+		          AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98')               -- 주문접수,입금대기,입금전취소 제외
+		          AND B.ORD_QTY > B.CNCL_RTN_QTY
+		          AND E.PLAN_SQ = #{planSq}
+		        GROUP BY A.CUST_NO
+		    ) Z
+		)
+		SELECT
+		    CASE WHEN DISTRIBUTION_GB = 'G065_20' THEN '입점' ELSE '위탁' END AS DISTRIBUTION_GB
+		    , GOODS_CD
+		    , GOODS_NM
+		    , SUM(ORD_AMT) AS ORD_AMT
+		    , SUM(ORD_QTY) AS ORD_QTY
+		    , SUM(CUST_CNT) AS CUST_CNT
+		    , ROUND((SUM(CUST_CNT) / (SELECT TOT_CUST_CNT FROM TAB) * 100 * 100) / 10) / 10 AS ORD_RATE
+		FROM (
+		     SELECT C.DISTRIBUTION_GB
+		         , C.GOODS_CD
+		         , C.GOODS_NM
+		         , SUM((B.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = B.ORD_DTL_NO)) * (B.ORD_QTY - B.CNCL_RTN_QTY)) AS ORD_AMT
+		         , SUM(B.ORD_QTY - B.CNCL_RTN_QTY) AS ORD_QTY
+		         , COUNT(1) OVER(PARTITION BY C.DISTRIBUTION_GB, C.GOODS_CD, A.CUST_NO) AS CUST_CNT
+		    FROM TB_ORDER A,
+		         TB_ORDER_DETAIL B,
+		         TB_GOODS C,
+		         TB_CUSTOMER D,
+		         TB_PLAN_DETAIL E,
+		         TB_BRAND F
+		    WHERE A.ORD_NO = B.ORD_NO
+		      AND B.GOODS_CD = C.GOODS_CD
+		      AND A.CUST_NO = D.CUST_NO
+		      AND B.PLAN_DTL_SQ = E.PLAN_DTL_SQ
+		      AND F.BRAND_CD = C.BRAND_CD
+		      <![CDATA[
+		      AND A.PAY_DT >= DATE_FORMAT(#{startDt}, '%Y-%m-%d')                         -- 시작일변수
+		      AND A.PAY_DT <= DATE_FORMAT(CONCAT(#{endDt}, ' 23:59:59'), '%Y-%m-%d %H:%i:%s') -- 종료일변수
+		      ]]>
+		      AND B.ORD_DTL_STAT NOT IN ('G013_00', 'G013_10', 'G013_98')               -- 주문접수,입금대기,입금전취소 제외
+		      AND B.ORD_QTY > B.CNCL_RTN_QTY
+		      AND E.PLAN_SQ = #{planSq}
+		    GROUP BY C.DISTRIBUTION_GB, C.GOODS_CD, C.GOODS_NM, A.CUST_NO
+		) X
+		GROUP BY DISTRIBUTION_GB, GOODS_CD, GOODS_NM
+	</select>
+
+	<!-- 카드 목록 -->
+	<select id="getCardList" resultType="Card">
+		/* TsaStatistics.getCardList */
+		SELECT CD AS CARD_CD
+		, CD_NM AS CARD_NM
+		FROM   TB_COMMON_CODE
+		WHERE CD_GB = 'G050'
+		ORDER  BY CD_GB, DISP_ORD
+	</select>
+
+	<!-- 결제수단별통계 목록 -->
+	<select id="getPaymentList" parameterType="Statistics" resultType="Statistics">
+	/* TsaStatistics.getPaymentList */
+		WITH TAB AS (
+			SELECT
+				DATE_FORMAT(DAY, '%Y-%m-%d') AS DAY
+				, PAY_MEANS -- 결제수단
+				, PAY_AMT -- 결제금액
+				, PG_GB -- PG구분
+			FROM TB_STAT_PAY A
+			WHERE 1=1
+				AND A.DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
+			  	AND A.DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+			<if test='multiCardId != null and multiCardId != ""'>
+				AND COM_CARD_CD IN
+				<foreach collection="multiCardId" item="item" index="index"  open="(" close=")" separator=",">
+					#{item}
+				</foreach>
+			</if>
+			<choose>
+			<when test='simpleGbC != null and simpleGbC != "" and simpleGbB != null and simpleGbB != ""'>
+				AND PG_GB IN('KAKAO','NAVER','PAYCO')
+			    AND PAY_MEANS IN ('G014_30','G014_10')
+			</when>
+			<when test='simpleGbC != null and simpleGbC != ""'>
+				AND PG_GB IN('KAKAO','NAVER','PAYCO')
+			  	AND PAY_MEANS = 'G014_30'
+			</when>
+			<when test='simpleGbB != null and simpleGbB != ""'>
+				AND PG_GB IN('KAKAO','NAVER','PAYCO')
+			  	AND PAY_MEANS = 'G014_10'
+			</when>
+			</choose>
+		)
+		SELECT
+			DAY
+			, SUM(CD_AMT) AS CD_AMT -- 카드
+			, SUM(AC_AMT) AS AC_AMT -- 실시간계좌이체
+			, SUM(VA_AMT) AS VA_AMT -- 무통장
+			, SUM(HP_AMT) AS HP_AMT -- 휴대폰
+			, SUM(CP_AMT) AS CP_AMT -- PG쿠폰
+			, SUM(NPAY_AMT) AS NPAY_AMT -- 네이버페이
+			, SUM(PAYCO_AMT) AS PAYCO_AMT -- 페이코
+			, SUM(KAKAO_AMT) AS KAKAO_AMT -- 카카오
+		FROM (
+			SELECT
+				DAY
+				, CASE WHEN PAY_MEANS = 'G014_30' THEN PAY_AMT ELSE 0 END AS CD_AMT
+				, CASE WHEN PAY_MEANS = 'G014_10' THEN PAY_AMT ELSE 0 END AS AC_AMT
+				, CASE WHEN PAY_MEANS = 'G014_20' THEN PAY_AMT ELSE 0 END AS VA_AMT
+				, CASE WHEN PAY_MEANS = 'G014_60' THEN PAY_AMT ELSE 0 END AS HP_AMT
+				, CASE WHEN PAY_MEANS = 'G014_50' THEN PAY_AMT ELSE 0 END AS CP_AMT
+				, CASE WHEN PAY_MEANS = 'NAVER' THEN PAY_AMT ELSE 0 END AS NPAY_AMT
+				, CASE WHEN PAY_MEANS = 'PAYCO' THEN PAY_AMT ELSE 0 END AS PAYCO_AMT
+				, CASE WHEN PAY_MEANS = 'KAKAO' THEN PAY_AMT ELSE 0 END AS KAKAO_AMT
+			FROM (
+				SELECT
+			<choose>
+				<when test='dayGb == "W"'> <!-- 주별 -->
+					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+				</when>
+				<when test='dayGb == "M"'> <!-- 월별 -->
+					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+				</when>
+				<otherwise> <!-- 일별 -->
+					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+				</otherwise>
+			</choose>
+					, PAY_MEANS
+					, SUM(PAY_AMT) AS PAY_AMT
+				FROM TAB
+				WHERE PAY_MEANS = 'G014_30'
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+			</when>
+			<otherwise> <!-- 일별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+			</otherwise>
+		</choose>
+				UNION ALL
+				SELECT
+			<choose>
+				<when test='dayGb == "W"'> <!-- 주별 -->
+					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+				</when>
+				<when test='dayGb == "M"'> <!-- 월별 -->
+					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+				</when>
+				<otherwise> <!-- 일별 -->
+					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+				</otherwise>
+			</choose>
+					, PAY_MEANS
+					, SUM(PAY_AMT) AS PAY_AMT
+				FROM TAB
+				WHERE PAY_MEANS = 'G014_10'
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+			</when>
+			<otherwise> <!-- 일별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+			</otherwise>
+		</choose>
+				UNION ALL
+				SELECT
+			<choose>
+				<when test='dayGb == "W"'> <!-- 주별 -->
+					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+				</when>
+				<when test='dayGb == "M"'> <!-- 월별 -->
+					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+				</when>
+				<otherwise> <!-- 일별 -->
+					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+				</otherwise>
+			</choose>
+					, PAY_MEANS
+					, SUM(PAY_AMT) AS PAY_AMT
+				FROM TAB
+				WHERE PAY_MEANS = 'G014_20'
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+			</when>
+			<otherwise> <!-- 일별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+			</otherwise>
+		</choose>
+				UNION ALL
+				SELECT
+			<choose>
+				<when test='dayGb == "W"'> <!-- 주별 -->
+					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+				</when>
+				<when test='dayGb == "M"'> <!-- 월별 -->
+					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+				</when>
+				<otherwise> <!-- 일별 -->
+					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+				</otherwise>
+			</choose>
+					, PAY_MEANS
+					, SUM(PAY_AMT) AS PAY_AMT
+				FROM TAB
+				WHERE PAY_MEANS = 'G014_60'
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+			</when>
+			<otherwise> <!-- 일별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+			</otherwise>
+		</choose>
+				UNION ALL
+				SELECT
+			<choose>
+				<when test='dayGb == "W"'> <!-- 주별 -->
+					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+				</when>
+				<when test='dayGb == "M"'> <!-- 월별 -->
+					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+				</when>
+				<otherwise> <!-- 일별 -->
+					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+				</otherwise>
+			</choose>
+					, PAY_MEANS
+					, SUM(PAY_AMT) AS PAY_AMT
+				FROM TAB
+				WHERE PAY_MEANS = 'G014_50'
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+			</when>
+			<otherwise> <!-- 일별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+			</otherwise>
+		</choose>
+				UNION ALL
+				SELECT
+			<choose>
+				<when test='dayGb == "W"'> <!-- 주별 -->
+					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+				</when>
+				<when test='dayGb == "M"'> <!-- 월별 -->
+					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+				</when>
+				<otherwise> <!-- 일별 -->
+					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+				</otherwise>
+			</choose>
+					, PG_GB AS PAY_MEANS
+					, SUM(PAY_AMT) AS PAY_AMT
+				FROM TAB
+				WHERE PG_GB = 'NAVER'
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+			</when>
+			<otherwise> <!-- 일별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+			</otherwise>
+		</choose>
+				UNION ALL
+				SELECT
+			<choose>
+				<when test='dayGb == "W"'> <!-- 주별 -->
+					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+				</when>
+				<when test='dayGb == "M"'> <!-- 월별 -->
+					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+				</when>
+				<otherwise> <!-- 일별 -->
+					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+				</otherwise>
+			</choose>
+					, PG_GB AS PAY_MEANS
+					, SUM(PAY_AMT) AS PAY_AMT
+				FROM TAB
+				WHERE PG_GB = 'PAYCO'
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+			</when>
+			<otherwise> <!-- 일별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+			</otherwise>
+		</choose>
+				UNION ALL
+				SELECT
+			<choose>
+				<when test='dayGb == "W"'> <!-- 주별 -->
+					CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+				</when>
+				<when test='dayGb == "M"'> <!-- 월별 -->
+					DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+				</when>
+				<otherwise> <!-- 일별 -->
+					DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+				</otherwise>
+			</choose>
+					, PG_GB AS PAY_MEANS
+					, SUM(PAY_AMT) AS PAY_AMT
+				FROM TAB
+				WHERE PG_GB = 'KAKAO'
+				GROUP BY DAY
+			) Z
+		) Z
+		GROUP BY DAY
+	</select>
+
+	<!-- 부결제수단별통계 목록 -->
+	<select id="getSubPaymentList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getSubPaymentList */
+		SELECT
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+			</when>
+			<otherwise> <!-- 일별 -->
+				DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+			</otherwise>
+		</choose>
+			, SUM(A.PNT_GIVE) AS PNT_GIVE -- 포인트적립액
+			, SUM(A.PNT_ORD_CNT) AS PNT_ORD_CNT -- 포인트사용주문수
+			, SUM(A.PNT_USE) AS PNT_USE -- 포인트사용액
+			, SUM(A.GIFT_REG_CNT) AS GIFT_REG_CNT -- 상품권등록매수
+			, SUM(A.GIFT_ORD_CNT) AS GIFT_ORD_CNT -- 상품권주문수
+			, SUM(A.GIFT_USE) AS GIFT_USE -- 상품권사용액
+		FROM TB_STAT_SUB_PAY A
+		WHERE A.DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
+		  AND A.DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		<choose>
+			<when test='pointGb != null and pointGb != "" and giftCardGb != null and giftCardGb != ""'>
+				AND OCCUR_GB IN(#{pointGb}, #{giftCardGb})
+			</when>
+			<when test='pointGb != null and pointGb != ""'>
+				AND OCCUR_GB = #{pointGb}
+			</when>
+			<when test='giftCardGb != null and giftCardGb != ""'>
+				AND OCCUR_GB = {giftCardGb}
+			</when>
+		</choose>
+		<choose>
+			<when test='dayGb == "W"'> <!-- 주별 -->
+				GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+			</when>
+			<when test='dayGb == "M"'> <!-- 월별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+			</when>
+			<otherwise> <!-- 일별 -->
+				GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+			</otherwise>
+		</choose>
+	</select>
+
+	<!-- 포인트잔액 -->
+	<select id="getRemainPoint" resultType="java.lang.Long">
+		/* TsaStatistics.getRemainPoint */
+		SELECT
+			SUM(RM_PNT_AMT) AS RM_PNT_AMT
+		FROM TB_CUST_POINT A
+		WHERE A.EXP_CMP_DT IS NULL
+	</select>
+
+	<!-- 포인트잔액 -->
+	<select id="getRemainGiftCard" resultType="java.lang.Long">
+		/* TsaStatistics.getRemainGiftCard */
+		SELECT
+		SUM(RM_GFCD_AMT) AS RM_GFCD_AMT
+		FROM TB_CUST_GIFTCARD A
+		WHERE DATE_FORMAT(USE_EXP_DATE, '%Y%m%d') &lt; NOW()
+	</select>
+
+	<!-- 가입통계 -->
+	<select id="getCustomerJoinList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getCustomerJoinList */
+		SELECT
+	<choose>
+		<when test='dayGb == "W"'> <!-- 주별 -->
+			CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주') AS DAY
+		</when>
+		<when test='dayGb == "M"'> <!-- 월별 -->
+			DATE_FORMAT(DAY,'%Y-%m')                          AS DAY
+		</when>
+		<otherwise> <!-- 일별 -->
+			DATE_FORMAT(DAY,'%Y-%m-%d')                       AS DAY
+		</otherwise>
+	</choose>
+			, MAX(ALL_CNT) AS ALL_CNT
+			, MAX(REAL_CNT) AS REAL_CNT
+			, MAX(DORM_CNT) AS DORM_CNT
+			, MAX(VIP_CNT) AS VIP_CNT
+			, MAX(GOLD_CNT) AS GOLD_CNT
+			, MAX(SILVER_CNT) AS SILVER_CNT
+			, MAX(BRONZE_CNT) AS BRONZE_CNT
+			, MAX(WELCOME_CNT) AS WELCOME_CNT
+			, SUM(JOIN_CNT) AS JOIN_CNT
+			, SUM(DR_JOIN_CNT) AS DR_JOIN_CNT
+			, SUM(AF_JOIN_CNT) AS AF_JOIN_CNT
+			, SUM(CHG_DORM_CNT) AS CHG_DORM_CNT
+			, SUM(RM_DORM_CNT) AS RM_DORM_CNT
+			, SUM(SECEED_CNT) AS SECEED_CNT
+		FROM TB_STAT_CUST
+		WHERE DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
+		  AND DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+	<if test="multiSexGb != null">
+		/* 성별구분 */
+		<foreach collection="multiSexGb" item="item" index="index"  open="AND SEX_GB IN (" close=")" separator=",">#{item}</foreach>
+	</if>
+	<if test="multiAgeGb != null">
+		/* 연령구분 */
+		<foreach collection="multiAgeGb" item="item" index="index"  open="AND AGE IN (" close=")" separator=",">#{item}</foreach>
+	</if>
+	<choose>
+		<when test='dayGb == "W"'> <!-- 주별 -->
+			GROUP  BY CONCAT(MONTH(DAY), '월 ', WEEK(DAY,5) - WEEK(DATE_SUB(DAY, INTERVAL DAYOFMONTH(DAY) - 1 DAY), 5) + 1, '주')
+		</when>
+		<when test='dayGb == "M"'> <!-- 월별 -->
+			GROUP  BY DATE_FORMAT(DAY,'%Y-%m')
+		</when>
+		<otherwise> <!-- 일별 -->
+			GROUP  BY DATE_FORMAT(DAY,'%Y-%m-%d')
+		</otherwise>
+	</choose>
+		ORDER BY DAY DESC
+	</select>
+
+	<!-- 등급별주문현황 -->
+	<select id="getCustomerGradOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getCustomerGradOrderList */
+		SELECT
+			CASE WHEN A.CUST_GRADE = 'G110_10' THEN 1
+				WHEN A.CUST_GRADE = 'G110_20' THEN 2
+				WHEN A.CUST_GRADE = 'G110_30' THEN 3
+				WHEN A.CUST_GRADE = 'G110_40' THEN 4
+				WHEN A.CUST_GRADE = 'G110_50' THEN 5
+			ELSE 6 END AS PRIORITY
+			, FN_GET_CODE_NM('G110', A.CUST_GRADE) AS CUST_GRADE
+			, SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_ORD_AMT -- 총매출액
+			, SUM(A.ORD_AMT) AS ORD_AMT -- 매출액
+			, SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
+			, SUM(A.ORD_CNT) AS ORD_CNT -- 주문수
+			, SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY -- 취/반품갯수
+			, ROUND(CEIL(AVG(A.ORD_CNT) * 10) / 10, 1) AS AVG_ORD_CNT -- 평균주문수
+			, ROUND(CEIL(AVG(A.SELL_QTY) * 10) / 10, 1) AS AVG_SELL_QTY -- 평균주문상품개수
+			, FLOOR(SUM(A.ORD_AMT) / SUM(A.ORD_CNT)) AS CUST_PRICE -- 객단가
+		FROM TB_STAT_CUST_ORD A
+		WHERE DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
+			AND DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		<if test="multiFrontGb != null">
+			/* 디바이스 */
+			<foreach collection="multiFrontGb" item="item" index="index"  open="AND FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiSexGb != null">
+			/* 성별구분 */
+			<foreach collection="multiSexGb" item="item" index="index"  open="AND SEX_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiAgeGb != null">
+			/* 연령구분 */
+			<foreach collection="multiAgeGb" item="item" index="index"  open="AND AGE IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiBrandCd != null">
+			/* 브랜드 */
+			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiItemkindCd != null">
+			/* 품목 */
+			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		GROUP BY A.CUST_GRADE
+		ORDER BY PRIORITY
+	</select>
+
+	<!-- 등급별주문현황 -->
+	<select id="getCustomerAgeOrderList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getCustomerAgeOrderList */
+		SELECT
+			CASE WHEN A.AGE != 'X' THEN CONCAT(A.AGE, '대') ELSE '50대이상/기타' END AS AGE
+			, FN_GET_CODE_NM('G007', A.SEX_GB) AS SEX_GB
+			, SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_ORD_AMT -- 총매출액
+			, SUM(A.ORD_AMT) AS ORD_AMT -- 매출액
+			, SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
+			, SUM(A.ORD_CNT) AS ORD_CNT -- 주문수
+			, SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY -- 취/반품갯수
+			, ROUND(CEIL(AVG(A.ORD_CNT) * 10) / 10, 1) AS AVG_ORD_CNT -- 평균주문수
+			, ROUND(CEIL(AVG(A.SELL_QTY) * 10) / 10, 1) AS AVG_SELL_QTY -- 평균주문상품개수
+			, FLOOR(SUM(A.ORD_AMT) / SUM(A.ORD_CNT)) AS CUST_PRICE -- 객단가
+		FROM TB_STAT_CUST_ORD A
+		WHERE DAY <![CDATA[>=]]> STR_TO_DATE(#{startDt},'%Y-%m-%d')
+			AND DAY <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		<if test="multiFrontGb != null">
+			/* 디바이스 */
+			<foreach collection="multiFrontGb" item="item" index="index"  open="AND FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiGradeGb != null">
+			/* 등급 */
+			<foreach collection="multiGradeGb" item="item" index="index"  open="AND CUST_GRADE IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiBrandCd != null">
+			/* 브랜드 */
+			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiItemkindCd != null">
+			/* 품목 */
+			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		GROUP BY A.AGE, A.SEX_GB
+		ORDER BY A.AGE, A.SEX_GB
+	</select>
+
+	<!-- 구매자랭킹 -->
+	<select id="getCustomerRankingList" parameterType="Statistics" resultType="Statistics">
+		/* TsaStatistics.getCustomerRankingList */
+		WITH TAB AS (
+			SELECT *
+			FROM (
+			SELECT A.ORD_NO
+				, B.ORD_DTL_NO
+				, B.ORD_QTY
+				, B.CNCL_RTN_QTY
+				, B.ORD_AMT
+				, B.CNCL_RTN_AMT
+				, B.CPN1_DC_AMT
+				, A.PAY_DT
+				, A.FRONT_GB
+				, C.ITEMKIND_CD
+				, C.BRAND_CD
+				, E.CUST_NO
+				, E.CUST_GRADE
+				, RANK() OVER (PARTITION BY B.ORD_DTL_NO ORDER BY B.ORD_DTL_HST_SQ) AS RNK
+			FROM TB_ORDER A,
+				TB_ORDER_DETAIL_HST B,
+				TB_GOODS C,
+				TB_CUSTOMER E
+			WHERE A.ORD_NO = B.ORD_NO
+				AND B.GOODS_CD = C.GOODS_CD
+				AND A.CUST_NO = E.CUST_NO
+				AND A.PAY_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d')                         -- 시작일변수
+				AND A.PAY_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
+				AND E.CUST_NO > 0
+				AND A.MALL_GB = 'G011_10'
+				AND B.ORD_EXCH_GB = 'O'
+				AND B.ORD_DTL_STAT = 'G013_20' -- 결제완료
+		<if test="multiFrontGb != null">
+			/* 디바이스 */
+			<foreach collection="multiFrontGb" item="item" index="index"  open="AND A.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiSexGb != null">
+			/* 성별구분 */
+			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(E.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiAgeGb != null">
+			/* 연령구분 */
+			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(E.BIRTH_YMD) IS NULL THEN 'X'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiBrandCd != null">
+			/* 브랜드 */
+			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiItemkindCd != null">
+			/* 품목 */
+			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+			) A
+			WHERE RNK = 1
+		)
+		-- 판매수
+		, TAB_SELL_QTY AS (
+			SELECT
+				SUM(ORD_QTY) AS VAL
+				, '1' AS GBN
+				, CUST_NO
+			FROM TAB
+			GROUP BY CUST_NO
+		)
+		-- 매출
+		, TAB_ORD AS (
+			SELECT
+				SUM(ORD_AMT + CPN1_DC_AMT + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = A.ORD_DTL_NO)) AS VAL
+				, '2' AS GBN
+				, CUST_NO
+			FROM TAB A
+			GROUP BY CUST_NO
+		)
+		-- 취소갯수
+		, TAB_CNCL_QTY AS (
+			SELECT SUM(CHG_QTY) AS VAL
+				, '3' AS GBN
+				, C.CUST_NO
+			FROM TB_ORDER_CHANGE_DETAIL A, TB_ORDER_DETAIL B, TB_ORDER C, TB_GOODS E, TB_CUSTOMER G
+			WHERE A.ORD_DTL_NO = B.ORD_DTL_NO
+				AND B.ORD_NO = C.ORD_NO
+				AND B.GOODS_CD = E.GOODS_CD
+				AND C.CUST_NO = G.CUST_NO
+				AND CHG_STAT = 'G685_18' -- 결제후취소
+				AND COMPLETE_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d') -- 시작일변수
+				AND COMPLETE_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
+				AND MALL_GB = 'G011_10'
+				AND G.CUST_NO > 0
+		<if test="multiFrontGb != null">
+			/* 디바이스 */
+			<foreach collection="multiFrontGb" item="item" index="index"  open="AND C.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiSexGb != null">
+			/* 성별구분 */
+			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(G.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiAgeGb != null">
+			/* 연령구분 */
+			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(G.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiBrandCd != null">
+			/* 브랜드 */
+			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiItemkindCd != null">
+			/* 품목 */
+			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+			GROUP BY C.CUST_NO
+		)
+		-- 반품갯수
+		, TAB_RTN_QTY AS (
+			SELECT SUM(CHG_QTY) AS VAL
+				, '4' AS GBN
+				, C.CUST_NO
+			FROM TB_ORDER_CHANGE_DETAIL A, TB_ORDER_DETAIL B, TB_ORDER C, TB_GOODS E, TB_CUSTOMER G
+			WHERE A.ORD_DTL_NO = B.ORD_DTL_NO
+				AND B.ORD_NO = C.ORD_NO
+				AND B.GOODS_CD = E.GOODS_CD
+				AND C.CUST_NO = G.CUST_NO
+				AND CHG_STAT = 'G685_60' -- 반품완료
+				AND COMPLETE_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d') -- 시작일변수
+				AND COMPLETE_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
+				AND MALL_GB = 'G011_10'
+				AND G.CUST_NO > 0
+		<if test="multiFrontGb != null">
+			/* 디바이스 */
+			<foreach collection="multiFrontGb" item="item" index="index"  open="AND C.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiSexGb != null">
+			/* 성별구분 */
+			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(G.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiAgeGb != null">
+			/* 연령구분 */
+			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(G.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiBrandCd != null">
+			/* 브랜드 */
+			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiItemkindCd != null">
+			/* 품목 */
+			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+			GROUP BY C.CUST_NO
+		)
+		-- 취소액
+		, TAB_CNCL_AMT AS (
+			SELECT SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * B.CHG_QTY) AS VAL
+				, '5' AS GBN
+				, D.CUST_NO
+			FROM TB_ORDER_CHANGE_DETAIL B, TB_ORDER_DETAIL C, TB_ORDER D, TB_GOODS E, TB_CUSTOMER G
+			WHERE B.ORD_DTL_NO = C.ORD_DTL_NO
+				AND C.ORD_NO = D.ORD_NO
+				AND C.GOODS_CD = E.GOODS_CD
+				AND D.CUST_NO = G.CUST_NO
+				AND CHG_STAT = 'G685_18' -- 결제후취소
+				AND B.COMPLETE_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d') -- 시작일변수
+				AND B.COMPLETE_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
+				AND MALL_GB = 'G011_10'
+				AND G.CUST_NO > 0
+		<if test="multiFrontGb != null">
+			/* 디바이스 */
+			<foreach collection="multiFrontGb" item="item" index="index"  open="AND D.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiSexGb != null">
+			/* 성별구분 */
+			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(G.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiAgeGb != null">
+			/* 연령구분 */
+			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(G.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiBrandCd != null">
+			/* 브랜드 */
+			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiItemkindCd != null">
+			/* 품목 */
+			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+			GROUP BY D.CUST_NO
+		)
+		-- 반품액
+		, TAB_RTN_AMT AS (
+			SELECT SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * B.CHG_QTY) AS VAL
+				, '6' AS GBN
+				, D.CUST_NO
+			FROM TB_ORDER_CHANGE_DETAIL B, TB_ORDER_DETAIL C, TB_ORDER D, TB_GOODS E, TB_CUSTOMER G
+			WHERE B.ORD_DTL_NO = C.ORD_DTL_NO
+				AND C.ORD_NO = D.ORD_NO
+				AND C.GOODS_CD = E.GOODS_CD
+				AND D.CUST_NO = G.CUST_NO
+				AND CHG_STAT = 'G685_60' -- 반품완료
+				AND B.COMPLETE_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d') -- 시작일변수
+				AND B.COMPLETE_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{endDt},'%Y-%m-%d'), INTERVAL 1 DAY) -- 종료일변수
+				AND MALL_GB = 'G011_10'
+				AND G.CUST_NO > 0
+		<if test="multiFrontGb != null">
+			/* 디바이스 */
+			<foreach collection="multiFrontGb" item="item" index="index"  open="AND D.FRONT_GB IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiSexGb != null">
+			/* 성별구분 */
+			<foreach collection="multiSexGb" item="item" index="index"  open="AND FN_DEC_AES(G.SEX_GB) IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiAgeGb != null">
+			/* 연령구분 */
+			<foreach collection="multiAgeGb" item="item" index="index"  open="AND CASE WHEN FN_DEC_AES(G.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+				ELSE 'X' END IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiBrandCd != null">
+			/* 브랜드 */
+			<foreach collection="multiBrandCd" item="item" index="index"  open="AND BRAND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+		<if test="multiItemkindCd != null">
+			/* 품목 */
+			<foreach collection="multiItemkindCd" item="item" index="index"  open="AND ITEMKIND_CD IN (" close=")" separator=",">#{item}</foreach>
+		</if>
+			GROUP BY D.CUST_NO
+		)
+		-- 주문수
+		, TAB_ORD_CNT AS (
+			SELECT
+				SUM(VAL) AS VAL
+				, '7' AS GBN
+				, CUST_NO
+			FROM (
+				SELECT
+					1 AS VAL
+					, ORD_NO
+					, CUST_NO
+				FROM TAB
+				GROUP BY ORD_NO, CUST_NO
+			) A
+			GROUP BY CUST_NO
+		)
+		SELECT
+			CONCAT(SUBSTRING(CUST_ID, 1, 3), '****', '(', SUBSTRING(FN_DEC_AES(CUST_NM), 1, 1), '**', ')') AS CUST_ID -- 아이디
+			, CASE WHEN FN_DEC_AES(BIRTH_YMD) = '' OR FN_DEC_AES(BIRTH_YMD) IS NULL THEN 'X'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+				WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+			ELSE 'X' END AS AGE
+		    , X.CUST_NO
+			, FN_GET_CODE_NM('G007', FN_DEC_AES(SEX_GB)) AS SEX_GB
+			, FN_GET_CODE_NM('G110', CUST_GRADE) AS CUST_GRADE -- 등급
+			, SUM(ORD_AMT - CNCL_AMT - RTN_AMT) AS TOT_ORD_AMT -- 매출액
+			, SUM(ORD_CNT) AS ORD_CNT -- 주문수
+			, SUM(SELL_QTY - CNCL_QTY - RTN_QTY) AS SELL_QTY -- 판매수
+			, FLOOR(SUM(ORD_AMT) / SUM(ORD_CNT)) AS CUST_PRICE -- 객단가
+			, IFNULL((SELECT SUM(RM_PNT_AMT) FROM TB_CUST_POINT CP WHERE CP.CUST_NO = X.CUST_NO AND EXP_CMP_DT IS NULL), 0) AS CUST_POINT -- 회원포인트
+		FROM (
+			SELECT
+				CUST_NO
+				, SUM(CASE WHEN GBN = '1' THEN VAL ELSE 0 END) AS SELL_QTY -- 판매수
+				, SUM(CASE WHEN GBN = '2' THEN VAL ELSE 0 END) AS ORD_AMT -- 매출액(판매금액)
+				, SUM(CASE WHEN GBN = '3' THEN VAL ELSE 0 END) AS CNCL_QTY -- 취소수량
+				, SUM(CASE WHEN GBN = '4' THEN VAL ELSE 0 END) AS RTN_QTY -- 반품수량
+				, SUM(CASE WHEN GBN = '5' THEN VAL ELSE 0 END) AS CNCL_AMT -- 취소금액
+				, SUM(CASE WHEN GBN = '6' THEN VAL ELSE 0 END) AS RTN_AMT -- 반품금액
+				, SUM(CASE WHEN GBN = '7' THEN VAL ELSE 0 END) AS ORD_CNT -- 주문수
+			FROM (
+				SELECT * FROM TAB_SELL_QTY
+				UNION ALL
+				SELECT * FROM TAB_ORD
+				UNION ALL
+				SELECT * FROM TAB_CNCL_QTY
+				UNION ALL
+				SELECT * FROM TAB_RTN_QTY
+				UNION ALL
+				SELECT * FROM TAB_CNCL_AMT
+				UNION ALL
+				SELECT * FROM TAB_RTN_AMT
+				UNION ALL
+				SELECT * FROM TAB_ORD_CNT
+			) A
+			GROUP BY CUST_NO
+		) X, TB_CUSTOMER Y
+		WHERE X.CUST_NO = Y.CUST_NO
+		GROUP BY X.CUST_NO
+		ORDER BY TOT_ORD_AMT DESC
+		LIMIT 50
+	</select>
+
+	<!-- 미로그인현황 -->
+	<select id="getCustomerUnloginList" resultType="Statistics">
+		/* TsaStatistics.getCustomerUnloginList */
+		SELECT
+			X.*
+			, ROUND(CNT_5 / TOT_CNT * 100) AS PER_CNT_5
+			, ROUND(CNT_4 / TOT_CNT * 100) AS PER_CNT_4
+			, ROUND(CNT_3 / TOT_CNT * 100) AS PER_CNT_3
+			, ROUND(CNT_2 / TOT_CNT * 100) AS PER_CNT_2
+			, ROUND(CNT_1 / TOT_CNT * 100) AS PER_CNT_1
+		FROM (
+			SELECT
+				SUM(CASE WHEN GB = 5 THEN CNT ELSE 0 END) AS CNT_5
+				, SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4
+				, SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3
+				, SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2
+				, SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1
+				, SUM(CNT) AS TOT_CNT
+			FROM (
+				-- 1년
+				SELECT COUNT(1) AS CNT
+					, 5 AS GB -- 1년 ~
+				FROM TB_CUSTOMER
+				WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 YEAR ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+				-- 12개월
+				UNION ALL
+				SELECT COUNT(1) AS CNT
+					, 4 AS GB -- 9개월~12개월
+				FROM TB_CUSTOMER
+				WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 YEAR ), '%Y%m%d%H%i%s')
+					AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
+				-- 9개월
+				UNION ALL
+				SELECT COUNT(1) AS CNT
+					, 3 AS GB -- 6개월~9개월
+				FROM TB_CUSTOMER
+				WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
+					AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+				-- 6개월
+				UNION ALL
+				SELECT COUNT(1) AS CNT
+					, 2 AS GB -- 3개월~6개월
+				FROM TB_CUSTOMER
+				WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+					AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+				-- 3개월
+				UNION ALL
+				SELECT COUNT(1) AS CNT
+					, 1 AS GB -- ~3개월
+				FROM TB_CUSTOMER
+				WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+					AND LOGIN_LDT &lt; DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
+			) Z
+		) X
+	</select>
+
+	<!-- 미로그인현황 회원리스트 -->
+	<select id="getCustomerUnloginInfoList" parameterType="Statistics" resultType="paramMap">
+		/* TsaStatistics.getCustomerUnloginInfoList */
+		SELECT (
+		        SELECT CASE WHEN ROLE_CD = 'G001_0000'
+		                         THEN A.CUST_ID
+		                    ELSE CONCAT(LEFT(A.CUST_ID, 3), REPEAT('*', CHAR_LENGTH(A.CUST_ID) - 3 ) )
+		               END
+		        FROM   TB_USER
+		        WHERE  USER_NO = #{regNo}
+		       ) AS CUST_ID
+		     , (
+		        SELECT CASE WHEN ROLE_CD = 'G001_0000'
+		                         THEN A.CUST_NM
+		                    ELSE CONCAT(LEFT(A.CUST_NM, 1), REPEAT('*', CHAR_LENGTH(A.CUST_NM) - 1 ) )
+		               END
+		        FROM   TB_USER
+		        WHERE  USER_NO = #{regNo}
+		       ) AS CUST_NM
+		    , (
+		       SELECT CASE WHEN ROLE_CD = 'G001_0000'
+		                        THEN A.CELL_PHNNO
+		                   ELSE CONCAT(substr(A.CELL_PHNNO, 1, 4), '****', substr(A.CELL_PHNNO, 9, 13))
+		              END
+		       FROM   TB_USER
+		       WHERE  USER_NO = #{regNo}
+		      ) AS CELL_PHNNO
+		    , (
+		       SELECT CASE WHEN ROLE_CD = 'G001_0000'
+		                        THEN A.EMAIL
+		                   ELSE CONCAT(LEFT(A.EMAIL, 2), REPEAT('*', instr(A.EMAIL, '@') - 3), SUBSTRING(A.EMAIL, instr(EMAIL, '@'), LENGTH(A.EMAIL)))
+		              END
+		       FROM   TB_USER
+		       WHERE  USER_NO = #{regNo}
+		      ) AS EMAIL
+		    , MONTHS
+		    , BIRTH_YM
+		FROM   (
+		        SELECT CUST_ID
+		             , FN_DEC_AES(CUST_NM)                    AS CUST_NM
+		             , TIMESTAMPDIFF(MONTH, LOGIN_LDT, NOW()) AS MONTHS
+		             , CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+		                    ELSE CELL_PHNNO
+		               END                                    AS CELL_PHNNO
+		             , FN_DEC_AES(EMAIL)                      AS EMAIL
+		             , SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
+		        FROM   TB_CUSTOMER
+		        WHERE  CUST_NO > 0
+		        AND    CUST_STAT = 'G104_10'
+		        AND    LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H'), '%Y-%m-%d %H:%i:%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+		       ) A
+	</select>
+
+	<!-- 마케팅수신동의현황 -->
+	<select id="getCustomerMarketingList" resultType="Statistics">
+		/* TsaStatistics.getCustomerMarketingList */
+		SELECT
+			X.*
+			 , ROUND(CNT_4 / TOT_CNT * 100) AS PER_CNT_4
+			 , ROUND(CNT_3 / TOT_CNT * 100) AS PER_CNT_3
+			 , ROUND(CNT_2 / TOT_CNT * 100) AS PER_CNT_2
+			 , ROUND(CNT_1 / TOT_CNT * 100) AS PER_CNT_1
+		FROM (
+			 SELECT SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4
+				  , SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3
+				  , SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2
+				  , SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1
+				  , SUM(CNT)                                  AS TOT_CNT
+			 FROM (
+				  -- SMS
+				  SELECT COUNT(1) AS CNT
+					   , 4        AS GB
+				  FROM TB_CUSTOMER
+				  WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND SMS_AGREE_YN = 'Y'
+					-- EMAIL
+				  UNION ALL
+				  SELECT COUNT(1) AS CNT
+					   , 3        AS GB
+				  FROM TB_CUSTOMER
+				  WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND EMAIL_AGREE_YN = 'Y'
+					-- 푸쉬
+				  UNION ALL
+				  SELECT COUNT(1) AS CNT
+					   , 2        AS GB
+				  FROM TB_CUSTOMER
+				  WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND APP_AGREE_YN = 'Y'
+					-- 미동의
+				  UNION ALL
+				  SELECT COUNT(1) AS CNT
+					   , 1        AS GB
+				  FROM TB_CUSTOMER
+				  WHERE CUST_NO > 0
+					AND CUST_STAT = 'G104_10'
+					AND SMS_AGREE_YN = 'N'
+					AND EMAIL_AGREE_YN = 'N'
+					AND APP_AGREE_YN = 'N'
+			  ) Z
+		 ) X
+	</select>
+
+	<!-- 휴면전환 잔여일별현황 -->
+	<select id="getCustomerDormRemainList" resultType="Statistics">
+		/* TsaStatistics.getCustomerDormRemainList */
+		SELECT
+			SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4 -- 12개월
+			, SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3 -- 9개월
+			, SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2 -- 6개월
+			, SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1 -- 9개월
+		FROM (
+			-- 12개월
+			SELECT COUNT(1) AS CNT
+				, 4 AS GB -- 12개월
+			FROM TB_CUSTOMER
+			WHERE CUST_NO > 0
+				AND CUST_STAT = 'G104_10'
+				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+			-- 9개월
+			UNION ALL
+			SELECT COUNT(1) AS CNT
+				, 3 AS GB -- 9개월
+			FROM TB_CUSTOMER
+			WHERE CUST_NO > 0
+				AND CUST_STAT = 'G104_10'
+				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s')
+			-- 6개월
+			UNION ALL
+			SELECT COUNT(1) AS CNT
+				, 2 AS GB -- 6개월
+			FROM TB_CUSTOMER
+			WHERE CUST_NO > 0
+				AND CUST_STAT = 'G104_10'
+				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+			-- 3개월
+			UNION ALL
+			SELECT COUNT(1) AS CNT
+				, 1 AS GB -- ~3개월
+			FROM TB_CUSTOMER
+			WHERE CUST_NO > 0
+				AND CUST_STAT = 'G104_10'
+				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
+				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+		) Z
+	</select>
+
+	<!-- 휴면전환 잔여일별현황 회원리스트 -->
+	<select id="getCustomerDormRemainInfoList" parameterType="Statistics" resultType="paramMap">
+	/* TsaStatistics.getCustomerDormRemainInfoList */
+		SELECT GB
+			 , BIRTH_YM
+		     , (
+			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
+							     THEN A.CUST_ID
+				   	        ELSE CONCAT(LEFT(A.CUST_ID, 3), REPEAT('*', CHAR_LENGTH(A.CUST_ID) - 3 ) )
+					   END
+			    FROM   TB_USER
+			    WHERE  USER_NO = #{regNo}
+		       ) AS CUST_ID
+			 , (
+			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
+							     THEN A.CUST_NM
+						    ELSE CONCAT(LEFT(A.CUST_NM, 1), REPEAT('*', CHAR_LENGTH(A.CUST_NM) - 1 ) )
+					   END
+			    FROM   TB_USER
+			    WHERE  USER_NO = #{regNo}
+		       ) AS CUST_NM
+			 , (
+			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
+							     THEN A.CELL_PHNNO
+						    ELSE CONCAT(substr(A.CELL_PHNNO, 1, 4), '****', substr(A.CELL_PHNNO, 9, 13))
+					   END
+			    FROM   TB_USER
+			    WHERE  USER_NO = #{regNo}
+		       ) AS CELL_PHNNO
+			 , (
+			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
+							     THEN A.EMAIL
+						    ELSE CONCAT(LEFT(A.EMAIL, 2), REPEAT('*', instr(A.EMAIL, '@') - 3), SUBSTRING(A.EMAIL, instr(EMAIL, '@'), LENGTH(A.EMAIL)))
+					   END
+			    FROM   TB_USER
+			    WHERE  USER_NO = #{regNo}
+		       ) AS EMAIL
+		FROM (
+			-- 12개월
+			SELECT '12개월' AS GB -- 12개월
+				, CUST_ID
+				, FN_DEC_AES(CUST_NM) AS CUST_NM
+				, CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+					   ELSE CELL_PHNNO
+				  END                                AS CELL_PHNNO
+				, FN_DEC_AES(EMAIL) AS EMAIL
+				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
+			FROM TB_CUSTOMER
+			WHERE CUST_NO > 0
+				AND CUST_STAT = 'G104_10'
+				AND LOGIN_LDT > DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+			-- 9개월
+			UNION ALL
+			SELECT '9개월' AS GB -- 9개월
+				, CUST_ID
+				, FN_DEC_AES(CUST_NM) AS CUST_NM
+				, CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+					   ELSE CELL_PHNNO
+				  END                                AS CELL_PHNNO
+				, FN_DEC_AES(EMAIL) AS EMAIL
+				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
+			FROM TB_CUSTOMER
+			WHERE CUST_NO > 0
+				AND CUST_STAT = 'G104_10'
+				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+				AND LOGIN_LDT <![CDATA[ < ]]>  DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s')
+			-- 6개월
+			UNION ALL
+			SELECT '6개월' AS GB -- 6개월
+				, CUST_ID
+				, FN_DEC_AES(CUST_NM) AS CUST_NM
+				, CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+					   ELSE CELL_PHNNO
+				  END                                AS CELL_PHNNO
+				, FN_DEC_AES(EMAIL) AS EMAIL
+				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
+			FROM TB_CUSTOMER
+			WHERE CUST_NO > 0
+				AND CUST_STAT = 'G104_10'
+				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+				AND LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+			-- 3개월
+			UNION ALL
+			SELECT '3개월' AS GB -- ~3개월
+				, CUST_ID
+				, FN_DEC_AES(CUST_NM) AS CUST_NM
+				, CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+					   ELSE CELL_PHNNO
+				  END                                AS CELL_PHNNO
+				, FN_DEC_AES(EMAIL) AS EMAIL
+			, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
+			FROM TB_CUSTOMER
+			WHERE CUST_NO > 0
+				AND CUST_STAT = 'G104_10'
+				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
+				AND LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+		) A
+	</select>
 </mapper>

+ 1 - 1
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -426,7 +426,7 @@
 								<div class="inner-panelContent exceptArea">
 									<div class="panelContent">
 										<div class="panelBar">
-											<h4>적용 대상 상품 등록</h4>
+											<h4>제외 대상 상품 등록</h4>
 										</div>
 										<table class="frmStyle">
 											<colgroup>

+ 18 - 1
src/main/webapp/WEB-INF/views/settle/DeliveryFeeSettleForm.html

@@ -174,9 +174,26 @@
 		if (!gagajf.validation($('#searchForm')))
 			return false;
 		
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', fnCreateTotal);
 	});
 	
+	// 합계 생성
+	var fnCreateTotal = function() {
+		var delvFee = 0;
+
+		gridOptions.api.forEachNode(function(rowNode, index) {
+			if (!rowNode.group) {
+				if (typeof rowNode.data.delvFee =='number') { delvFee += rowNode.data.delvFee; }
+			}
+		});
+
+		var data = {
+			occurDt: null, supplyVendorNm: null, distributionGbNm: null, delvFeeGbNm: null, ordNo: '합계', delvFee:  delvFee
+		};
+
+		gagaAgGrid.setPinnedRowData(gridOptions, data, 'top');
+	}
+	
 	// 초기화 클릭시
 	$('#btnInit').on('click', function() {
 		$('#searchForm')[0].reset();

+ 34 - 0
src/main/webapp/WEB-INF/views/settle/GiftcardSettleForm.html

@@ -179,9 +179,36 @@
 		
 		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', function() {
 			fnShowOrHideColumn();
+			fnCreateTotal();
 		});
 	});
 	
+	// 합계 생성
+	var fnCreateTotal = function() {
+		var chgGfcdAmt = 0;  // 최초등록금액
+		var usGfcdAmt = 0;   // 누적사용금액
+		var useGfcdAmt = 0;  // 정산월사용금액
+		var cnclGfcdAmt = 0; // 정산월취소금액
+		var rmGfcdAmt = 0;   // 잔액
+
+		gridOptions.api.forEachNode(function(rowNode, index) {
+			if (!rowNode.group) {
+				if (typeof rowNode.data.chgGfcdAmt =='number') { chgGfcdAmt += rowNode.data.chgGfcdAmt; }
+				if (typeof rowNode.data.usGfcdAmt =='number') { usGfcdAmt += rowNode.data.usGfcdAmt; }
+				if (typeof rowNode.data.useGfcdAmt =='number') { useGfcdAmt += rowNode.data.useGfcdAmt; }
+				if (typeof rowNode.data.cnclGfcdAmt =='number') { cnclGfcdAmt += rowNode.data.cnclGfcdAmt; }
+				if (typeof rowNode.data.rmGfcdAmt =='number') { rmGfcdAmt += rowNode.data.rmGfcdAmt; }
+			}
+		});
+
+		var data = {
+			gfcdNo: null, regDt: null, useExpDate: null, availYn: null, custId: '합계',
+			chgGfcdAmt:  chgGfcdAmt, usGfcdAmt:  usGfcdAmt, useGfcdAmt:  useGfcdAmt, cnclGfcdAmt:  cnclGfcdAmt, rmGfcdAmt:  rmGfcdAmt
+		};
+
+		gagaAgGrid.setPinnedRowData(gridOptions, data, 'top');
+	}
+	
 	// 초기화 클릭시
 	$('#btnInit').on('click', function() {
 		$('#searchForm')[0].reset();
@@ -209,6 +236,13 @@
 		
 		fnShowOrHideColumn();
 		gridOptions.api.setRowData();
+		
+		var data = {
+			gfcdNo: null, regDt: null, useExpDate: null, availYn: null, custId: null,
+			chgGfcdAmt: null, usGfcdAmt: null, useGfcdAmt: null, cnclGfcdAmt: null, rmGfcdAmt: null
+		};
+
+		gagaAgGrid.setPinnedRowData(gridOptions, data, 'top');
 	});
 	
 	var fnShowOrHideColumn = function() {

+ 66 - 2
src/main/webapp/WEB-INF/views/settle/GoodsSettleForm.html

@@ -266,7 +266,7 @@
 		},
 		{
 			headerName: "판매수수료율(%)", field: "sellFeeRate", width: 120, cellClass: 'text-center',
-			cellRenderer: function (params) { return params.value + '%'; }
+			cellRenderer: function (params) { return gagajf.isNull(params.value) ? '' : params.value + '%'; }
 		},
 		{
 			headerName: "수수료", field: "sellFeeAmt", width: 100, cellClass: 'text-right',
@@ -365,9 +365,73 @@
 		if (!gagajf.validation($('#searchForm')))
 			return false;
 		
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', fnCreateTotal);
 	});
 	
+	// 합계 생성
+	var fnCreateTotal = function() {
+// 		var mallPrice = 0;           // 판매가
+// 		var sellPrice = 0;           // 정산판매가
+		var sellQty = 0;             // 판매수량
+		var sellAmt = 0;             // 판매총액
+		var cpnDcAmt = 0;            // 쿠폰할인금액
+		var cpn1DcAmt = 0;           // 즉시사용쿠폰금액
+		var goodsCpnDcAmt = 0;       // 상품쿠폰사용금액
+		var cartCpnDcAmt = 0;        // 주문서쿠폰사용금액
+		var pntDcAmt = 0;            // 포인트사용금액
+		var tmtbDcAmt = 0;           // 다다익선할인금액
+		var selfTmtbDcAmt = 0;       // 자사다다익선분담액
+		var supplyCompTmtbDcAmt = 0; // 입점다다익선분담액
+		var gfcdUseAmt = 0;          // 상품권사용금액
+		var selfCpnDcAmt = 0;        // 자사쿠폰분담액
+		var supplyCompCpnDcAmt = 0;  // 입점쿠폰분담액
+		var realSellPrice = 0;       // 실판매가
+ 		var realSellAmt = 0;         // 상품총액
+		var sellFeeAmt = 0;          // 수수료
+		var settleAmt = 0;           // 정산대상액
+
+		gridOptions.api.forEachNode(function(rowNode, index) {
+			if (!rowNode.group) {
+// 				if (typeof rowNode.data.mallPrice == 'number') { mallPrice += rowNode.data.mallPrice; }
+// 				if (typeof rowNode.data.sellPrice =='number') { sellPrice += rowNode.data.sellPrice; }
+				if (typeof rowNode.data.sellQty =='number') { sellQty += rowNode.data.sellQty; }
+				if (typeof rowNode.data.sellAmt =='number') { sellAmt += rowNode.data.sellAmt; }
+				if (typeof rowNode.data.cpnDcAmt =='number') { cpnDcAmt += rowNode.data.cpnDcAmt; }
+				if (typeof rowNode.data.cpn1DcAmt =='number') { cpn1DcAmt += rowNode.data.cpn1DcAmt; }
+				if (typeof rowNode.data.goodsCpnDcAmt =='number') { goodsCpnDcAmt += rowNode.data.goodsCpnDcAmt; }
+				if (typeof rowNode.data.cartCpnDcAmt =='number') { cartCpnDcAmt += rowNode.data.cartCpnDcAmt; }
+				if (typeof rowNode.data.pntDcAmt =='number') { pntDcAmt += rowNode.data.pntDcAmt; }
+				if (typeof rowNode.data.tmtbDcAmt =='number') { tmtbDcAmt += rowNode.data.tmtbDcAmt; }
+				if (typeof rowNode.data.selfTmtbDcAmt =='number') { selfTmtbDcAmt += rowNode.data.selfTmtbDcAmt; }
+				if (typeof rowNode.data.supplyCompTmtbDcAmt =='number') { supplyCompTmtbDcAmt += rowNode.data.supplyCompTmtbDcAmt; }
+				if (typeof rowNode.data.gfcdUseAmt =='number') { gfcdUseAmt += rowNode.data.gfcdUseAmt; }
+				if (typeof rowNode.data.selfCpnDcAmt =='number') { selfCpnDcAmt += rowNode.data.selfCpnDcAmt; }
+				if (typeof rowNode.data.supplyCompCpnDcAmt =='number') { supplyCompCpnDcAmt += rowNode.data.supplyCompCpnDcAmt; }
+				if (typeof rowNode.data.realSellPrice =='number') { realSellPrice += rowNode.data.realSellPrice; }
+				if (typeof rowNode.data.realSellAmt =='number') { realSellAmt += rowNode.data.realSellAmt; }
+				if (typeof rowNode.data.sellFeeAmt =='number') { sellFeeAmt += rowNode.data.sellFeeAmt; }
+				if (typeof rowNode.data.settleAmt =='number') { settleAmt += rowNode.data.settleAmt; }
+			}
+		});
+
+		var data = {
+			ordNo: null, ordDtlNo: null, mallGbNm: null, extmallOrderId: null, extmallNm: null,
+			supplyVendorNm: null, distributionGbNm: null, settleDayNm: null,
+			ordDt: null, settleGbNm: null, occurDt: null,
+			goodsCd: null, goodsNm: null, brandEnm: null, mdNm: null, itemCd: null, optCd1: null, optCd2: '합계',
+// 			mallPrice:  mallPrice, sellPrice:  sellPrice,
+			mallPrice:  null, sellPrice:  null,
+			sellQty:  sellQty, sellAmt:  sellAmt,
+			cpnDcAmt:  cpnDcAmt, cpn1DcAmt: cpn1DcAmt, goodsCpnDcAmt:  goodsCpnDcAmt, cartCpnDcAmt:  cartCpnDcAmt,
+			pntDcAmt:  pntDcAmt, tmtbDcAmt: tmtbDcAmt, selfTmtbDcAmt:  selfTmtbDcAmt, supplyCompTmtbDcAmt:  supplyCompTmtbDcAmt,
+			gfcdUseAmt:  gfcdUseAmt, selfCpnDcAmt:  selfCpnDcAmt, supplyCompCpnDcAmt:  supplyCompCpnDcAmt,
+			realSellPrice:  realSellPrice, realSellAmt:  realSellAmt,
+			sellFeeRate: null, sellFeeAmt:  sellFeeAmt, settleAmt:  settleAmt
+		};
+
+		gagaAgGrid.setPinnedRowData(gridOptions, data, 'top');
+	}
+	
 	// 초기화 클릭시
 	$('#btnInit').on('click', function() {
 		$('#searchForm')[0].reset();

+ 279 - 0
src/main/webapp/WEB-INF/views/settle/HansaeSalesUploadForm.html

@@ -0,0 +1,279 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : HansaeSalesUploadForm.html
+ * @desc    : 한세ERP매출반영 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.11.01   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/settle/hansae/sales/upload/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>ERP구분<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td>
+							<select name="erpGb">
+								<option value="hsmk">[hsmk] 한세MK</option>
+								<option value="hsdr">[hsdr] 한세드림</option>
+							</select>
+						</td>
+						<th>판매기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td id="terms">
+							<span class="nowrap">
+								<input name="startDt" id="startDt" type="text" class="w80 schDate" maxlength="8" required="required" data-valid-name="판매시작일"/>
+								~
+								<input name="endDt" id="endDt" type="text" class="w80 schDate" maxlength="8" required="required" data-valid-name="판매종료일"/>
+							</span>
+							<button type="button" class="btn btn-default btn-sm btnToday" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 't');">오늘</button>
+							<button type="button" class="btn btn-default btn-sm btnYesterday" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'y');">어제</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', '7d');">최근한주</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'tw');">이번주</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'pw');">지난주</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', '1m');">최근한달</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'tm');">이번달</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'pm');">지난달</button>
+							<span class="infoTxt cRed"><i class="fa fa-info-circle" aria-hidden="true"></i>(한달 한도)</span>
+						</td>
+					</tr>
+					<tr>
+						<th>업로드결과</th>
+						<td colspan="3">
+							<select name="status">
+								<option value="">[전체]</option>
+								<option value="S">[S] 성공</option>
+								<option value="F">[F] 실패</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li>
+					<p>
+<!-- 						<span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>매출반영이 아직 전송되지 않은 건은 <strong>[미전송건업로드]</strong> 버튼을 클릭해 전송하세요. <u>(전일자 매출은 배치를 통해 자동으로 ERP로 전송됩니다.)</u></span><br/> -->
+						<span class="infoTxt cRed"><i class="fa fa-info-circle" aria-hidden="true"></i>실패건들은 <u>"실패메시지"를 클릭해 옵션을 올바르게 변경</u>하고 그 후 <strong>[실패건업로드]</strong> 버튼을 클릭해 재전송 하세요.</span>
+					</p>
+				</li>
+				<li class="right">
+<!-- 					<button type="button" class="btn btn-base btn-lg" id="btnSendNoUploadedSales">미전송건업로드</button> -->
+					<button type="button" class="btn btn-warning btn-lg" id="btnResendFailSales">실패건업로드</button>
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let columnDefs = [
+// 		{
+// 			width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false,
+// 			checkboxSelection: function (params) { return !gagajf.isNull(params.data.dsError) ? true : false; }
+// 		},
+		{
+			headerName: "ERP구분", field: "erpGb", width: 80, cellClass: 'text-center',
+			cellRenderer: function(params) { return params.value == 'hsmk' ? '한세MK' : '한세드림'; }
+		},
+		{ headerName: "판매일자", field: "dtSale", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "판매구분", field: "tpSale", width: 80, cellClass: 'text-center',
+			cellRenderer: function(params) { return params.value == '1' ? '판매' : '환불'; }
+		},
+		{ headerName: "스타일코드", field: "cdStyle", width: 120, cellClass: 'text-center' },
+		{ headerName: "색상코드", field: "cdColor", width: 80, cellClass: 'text-center' },
+		{ headerName: "사이즈코드", field: "cdSize", width: 90, cellClass: 'text-center' },
+		{
+			headerName: "판매수량", field: "qtSale", width: 100, cellClass: 'text-center',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
+			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+		},
+		{
+			headerName: "실판매금액", field: "amAcsale", width: 100, cellClass: 'text-right',
+			cellRenderer: function (params) { return gagaAgGrid.toAddComma(params.value); },
+			cellStyle : function(params) { if (Number(params.value) < 0) return { 'color' : 'red' } }
+		},
+		{ headerName: "I/F번호", field: "noIf", width: 150, cellClass: 'text-center' },
+		{ headerName: "판매전표번호", field: "cdSalebill", width: 150, cellClass: 'text-center' },
+		{ 
+			headerName: "실패메시지", field: "dsError", width: 300,
+			cellRenderer: function(params) { return gagajf.isNull(params.value) ? '' : ('<a href="javascript:void(0);">' + params.value + '</a>'); }
+		},
+		{ 
+			headerName: "매핑여부", field: "mappingYn", width: 80, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				if (gagajf.isNull(params.data.dsError)) return '';
+				return params.value == 'Y' ? 'Y' : '';
+			}
+		},
+		{ headerName: "반영일시", field: "regDt", width: 150, cellClass: 'text-center' }
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field != 'dsError')
+			return;
+		
+		if (gagajf.isNull(event.data.dsError))
+			return;
+		
+		let actionUrl = '/settle/hansae/style/mapping/form'
+				+ '?erpGb=' + event.data.erpGb
+				+ '&cdStyle=' + encodeURIComponent(event.data.cdStyle)
+				+ '&cdColor=' + encodeURIComponent(event.data.cdColor)
+				+ '&cdSize=' + encodeURIComponent(event.data.cdSize)
+				+ '&dsError=' + encodeURIComponent(event.data.dsError);
+		cfnOpenModalPopup(actionUrl, 'popupHansaeStyleMapping');
+	}
+	
+	// 검색
+	$('#btnSearch').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation('#searchForm'))
+			return false;
+		
+		let fromDate = $('#searchForm input[name=startDt]').val().toDate('YYYY-MM-DD');
+		let toDate = $('#searchForm input[name=endDt]').val().toDate('YYYY-MM-DD');
+		
+		if (fromDate > toDate) {
+			mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+			$('#searchForm input[name=endDt]').focus();
+			return false;
+		}
+		
+		var iDays = Math.ceil((toDate - fromDate) / (60 * 60 * 24 * 1000));
+		if (iDays >= 31) {
+			mcxDialog.alert("최대 31일까지 조회할 수 있습니다.");
+			return;
+		}
+		
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 미전송건업로드
+	$('#btnSendNoUploadedSales').on('click', function() {
+		
+	});
+	
+	// 실패건업로드
+	$('#btnResendFailSales').on('click', function() {
+		let allData = gagaAgGrid.getAllRowData(gridOptions);
+		
+		let isFailData = false;
+		allData.forEach(function(item, idx) {
+			if (!gagajf.isNull(item.dsError)) {
+				isFailData = true;
+				return false;
+			}
+		});
+		
+		if (!isFailData) {
+			mcxDialog.alert("매출반영할 실패건이 없습니다.");
+			return false;
+		}
+		
+		if (gagajf.isNull($('#startDt').val())) {
+			mcxDialog.alertC('판매시작일자를 입력해 주세요.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#startDt').focus();
+				}
+			});
+			return;
+		}
+		
+		if (gagajf.isNull($('#endDt').val())) {
+			mcxDialog.alertC('판매종료일자를 입력해 주세요.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#endDt').focus();
+				}
+			});
+			return;
+		}
+		
+		let msg =  ($('#searchForm select[name=erpGb]').val() == 'hsmk' ? '한세MK' : '한세드림') + '의'
+				+ ' 판매기간 ' + $('#startDt').val().toDate('YYYY-MM-DD').format('YYYY-MM-DD') + '~' + $('#endDt').val().toDate('YYYY-MM-DD').format('YYYY-MM-DD') + ' 동안의 매출반영 실패건을 업로드합니다.<br/>'
+				+ '매출반영은 몇 분이 소요될 수 있습니다. 계속 진행하시겠습니까?';
+		
+		mcxDialog.confirm(msg, {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				let jsonData = JSON.stringify({
+					erpGb : $('#searchForm select[name=erpGb]').val(),
+					startDt : $('#startDt').val(),
+					endDt : $('#endDt').val()
+				});
+				
+				gagajf.ajaxJsonSubmit('/settle/hansae/failedSales/upload', jsonData, function() {
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		if (gridOptions.api.getDisplayedRowCount() <= 0) {
+			mcxDialog.alert("조회된 데이터가 없습니다. 조회 후 다운로드 하세요.");
+			return false;
+		}
+		
+		gagaAgGrid.exportToExcel('한세ERP매출반영 목록', gridOptions);
+	});
+	
+	$(document).ready(function() {
+		gagajf.setDate('#terms', 'startDt', 'endDt', 't');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 122 - 0
src/main/webapp/WEB-INF/views/settle/HansaeStyleMappingForm.html

@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : HansaeStyleMappingForm.html
+ * @desc    : 한세ERP스타일매핑 팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.11.01   gagamel     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="900" id="popupHansaeStyleMapping">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong>한세ERP 스타일 매핑</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupHansaeStyleMapping');"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		
+		<!-- CONTENT -->
+		<div class="panelContent">
+			<form id="styleMappingForm" name="styleMappingForm" action="#" th:action="@{'/settle/hansae/style/mapping/save'}" th:method="post">
+				<table class="frmStyle" aria-describedby="상세폼">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>ERP구분</th>
+							<td colspan="5">
+								<select name="erpGb">
+									<option value="hsmk" th:selected="${styleInfo.erpGb == 'hsmk'}">[hsmk] 한세MK</option>
+									<option value="hsdr" th:selected="${styleInfo.erpGb == 'hsdr'}">[hsdr] 한세드림</option>
+								</select>
+							</td>
+						</tr>
+						<tr>
+							<th>스타일코드</th>
+							<td>
+								<input type="text" name="cdStyle" maxlength="20" readonly="readonly" th:value="${styleInfo.cdStyle}"/>
+							</td>
+							<th>색상코드</th>
+							<td>
+								<input type="text" name="cdColor" maxlength="20" readonly="readonly" th:value="${styleInfo.cdColor}"/>
+							</td>
+							<th>사이즈코드</th>
+							<td>
+								<input type="text" name="cdSize" maxlength="20" readonly="readonly" th:value="${styleInfo.cdSize}"/>
+							</td>
+						</tr>
+						<tr>
+							<th>ERP스타일코드<i class="required" title="필수" aria-hidden="true"></i></th>
+							<td>
+								<input type="text" name="erpCdStyle" maxlength="20" th:value="${styleInfo?.erpCdStyle}" required="required" data-valid-name="ERP스타일코드"/>
+							</td>
+							<th>ERP색상코드<i class="required" title="필수" aria-hidden="true"></i></th>
+							<td>
+								<input type="text" name="erpCdColor" maxlength="20" th:value="${styleInfo?.erpCdColor}" required="required" data-valid-name="ERP색상코드"/>
+							</td>
+							<th>ERP사이즈코드<i class="required" title="필수" aria-hidden="true"></i></th>
+							<td>
+								<input type="text" name="erpCdSize" maxlength="20" th:value="${styleInfo?.erpCdSize}" required="required" data-valid-name="ERP사이즈코드"/>
+							</td>
+						</tr>
+						<tr>
+							<th>실패메시지</th>
+							<td colspan="5" th:utext="${#strings.replace(#strings.replace(styleInfo.dsError,'&amplt;','<'),'&ampgt;','>')}"></td>
+						</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+		<!-- //CONTENT -->
+
+		<!-- 버튼 배치 영역 -->
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-info btn-lg" id="btnSaveStyleMapping">저장</button>
+			</li>
+		</ul>
+		<!-- //버튼 배치 영역 -->
+	</div>
+</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// 저장
+	$('#btnSaveStyleMapping').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation('#styleMappingForm'))
+			return false;
+		
+		mcxDialog.confirm("저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				gagajf.ajaxFormSubmit($('#styleMappingForm').prop('action'), '#styleMappingForm', function() {
+					uifnPopupClose('popupHansaeStyleMapping');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	$(document).ready(function() {
+		
+	});
+/*]]>*/
+</script>
+
+</html>

+ 98 - 4
src/main/webapp/WEB-INF/views/statistics/DailyTradingForm.html

@@ -35,8 +35,19 @@
 					</colgroup>
 					<tr>
 						<th>발생일<i class="required" title="필수" aria-hidden="true"></i></th>
-						<td>
-							<input type="text" class="schDate w80" name="occurDt" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}" required="required" data-valid-type="calendar" data-valid-name="발생일"/>
+						<td id="terms">
+							<span class="nowrap">
+								<input name="startDt" id="startDt" type="text" class="w80 schDate" maxlength="8" required="required" data-valid-name="발생시작일"/>
+								~
+								<input name="endDt" id="endDt" type="text" class="w80 schDate" maxlength="8" required="required" data-valid-name="발생종료일"/>
+							</span>
+							<button type="button" class="btn btn-default btn-sm btnToday" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 't');">오늘</button>
+							<button type="button" class="btn btn-default btn-sm btnYesterday" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'y');">어제</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', '7d');">최근한주</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'tw');">이번주</button>
+							<button type="button" class="btn btn-default btn-sm" onclick="gagajf.setDate('#terms', 'startDt', 'endDt', 'pw');">지난주</button>
+							<span class="infoTxt cRed marL10"><i class="fa fa-info-circle" aria-hidden="true"></i>(일주일 한도)</span>
+<!-- 							<input type="text" class="schDate w80" name="occurDt" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}" required="required" data-valid-type="calendar" data-valid-name="발생일"/> -->
 						</td>
 					</tr>
 				</table>
@@ -178,7 +189,7 @@
 		},
 		{
 			headerName: "수수료율(%)", field: "sellFeeRate", width: 120, cellClass: 'text-center',
-			cellRenderer: function (params) { return params.value + '%'; }
+			cellRenderer: function (params) { return gagajf.isNull(params.value) ? '' : params.value + '%'; }
 		},
 		{
 			headerName: "수수료", field: "sellFeeAmt", width: 100, cellClass: 'text-right',
@@ -196,15 +207,98 @@
 		if (!gagajf.validation($('#searchForm')))
 			return false;
 		
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		var fromDate = $('#searchForm input[name=startDt]').val().toDate('YYYY-MM-DD');
+		var toDate = $('#searchForm input[name=endDt]').val().toDate('YYYY-MM-DD');
+		
+		if (fromDate > toDate) {
+			mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+			$('#searchForm input[name=endDt]').focus();
+			return false;
+		}
+		
+		var iDays = Math.ceil((toDate - fromDate) / (60 * 60 * 24 * 1000));
+		if (iDays >= 7) {
+			mcxDialog.alert("최대 7일까지 조회할 수 있습니다.");
+			return;
+		}
+		
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', fnCreateTotal);
 	});
 	
+	// 합계 생성
+	var fnCreateTotal = function() {
+// 		var sellPrice = 0;           // 판매가
+		var sellQty = 0;             // 판매수량
+		var sellAmt = 0;             // 판매금액
+		var cpnDcAmt = 0;            // 쿠폰할인금액
+		var cpn1DcAmt = 0;           // 즉시사용쿠폰금액
+		var goodsCpnDcAmt = 0;       // 상품쿠폰사용금액
+		var cartCpnDcAmt = 0;        // 주문서쿠폰사용금액
+		var pntDcAmt = 0;            // 포인트사용금액
+		var tmtbDcAmt = 0;           // 다다익선할인금액
+		var selfTmtbDcAmt = 0;       // 자사다다익선분담액
+		var supplyCompTmtbDcAmt = 0; // 입점다다익선분담액
+		var gfcdUseAmt = 0;          // 상품권사용금액
+		var selfCpnDcAmt = 0;        // 자사쿠폰분담액
+		var supplyCompCpnDcAmt = 0;  // 입점쿠폰분담액
+		var realSellPrice = 0;       // 실판매가
+ 		var realSellAmt = 0;         // 실판매금액
+		var sellFeeAmt = 0;          // 수수료
+		var settleAmt = 0;           // 정산대상액
+
+		gridOptions.api.forEachNode(function(rowNode, index) {
+			if (!rowNode.group) {
+// 				if (typeof rowNode.data.sellPrice =='number') { sellPrice += rowNode.data.sellPrice; }
+				if (typeof rowNode.data.sellQty =='number') { sellQty += rowNode.data.sellQty; }
+				if (typeof rowNode.data.sellAmt =='number') { sellAmt += rowNode.data.sellAmt; }
+				if (typeof rowNode.data.cpnDcAmt =='number') { cpnDcAmt += rowNode.data.cpnDcAmt; }
+				if (typeof rowNode.data.cpn1DcAmt =='number') { cpn1DcAmt += rowNode.data.cpn1DcAmt; }
+				if (typeof rowNode.data.goodsCpnDcAmt =='number') { goodsCpnDcAmt += rowNode.data.goodsCpnDcAmt; }
+				if (typeof rowNode.data.cartCpnDcAmt =='number') { cartCpnDcAmt += rowNode.data.cartCpnDcAmt; }
+				if (typeof rowNode.data.pntDcAmt =='number') { pntDcAmt += rowNode.data.pntDcAmt; }
+				if (typeof rowNode.data.tmtbDcAmt =='number') { tmtbDcAmt += rowNode.data.tmtbDcAmt; }
+				if (typeof rowNode.data.selfTmtbDcAmt =='number') { selfTmtbDcAmt += rowNode.data.selfTmtbDcAmt; }
+				if (typeof rowNode.data.supplyCompTmtbDcAmt =='number') { supplyCompTmtbDcAmt += rowNode.data.supplyCompTmtbDcAmt; }
+				if (typeof rowNode.data.gfcdUseAmt =='number') { gfcdUseAmt += rowNode.data.gfcdUseAmt; }
+				if (typeof rowNode.data.selfCpnDcAmt =='number') { selfCpnDcAmt += rowNode.data.selfCpnDcAmt; }
+				if (typeof rowNode.data.supplyCompCpnDcAmt =='number') { supplyCompCpnDcAmt += rowNode.data.supplyCompCpnDcAmt; }
+				if (typeof rowNode.data.realSellPrice =='number') { realSellPrice += rowNode.data.realSellPrice; }
+				if (typeof rowNode.data.realSellAmt =='number') { realSellAmt += rowNode.data.realSellAmt; }
+				if (typeof rowNode.data.sellFeeAmt =='number') { sellFeeAmt += rowNode.data.sellFeeAmt; }
+				if (typeof rowNode.data.settleAmt =='number') { settleAmt += rowNode.data.settleAmt; }
+			}
+		});
+
+		var data = {
+			ordNo: null, ordDtlNo: null, sellGb: null,
+			mallGbNm: null, extmallOrderId: null, extmallNm: null,
+			afChannelNm: null, afLinkNm: null,
+			distributionGbNm: null, supplyCompNm: null, supplyVendorNm: null,
+			ordDt: null, occurDt: null,
+			brandEnm: null, goodsCd: null, goodsNm: null, itemCd: null, optCd1: null, optCd2: null,
+			itemkindNm: null, itemkindNm1: null, itemkindNm2: null, itemkindNm3: null, itemkindNm4: '합계',
+// 			sellPrice:  sellPrice,
+			sellPrice:  null,
+			sellQty:  sellQty, sellAmt:  sellAmt,
+			cpnDcAmt:  cpnDcAmt, cpn1DcAmt: cpn1DcAmt, goodsCpnDcAmt:  goodsCpnDcAmt, cartCpnDcAmt:  cartCpnDcAmt,
+			pntDcAmt:  pntDcAmt, tmtbDcAmt: tmtbDcAmt, selfTmtbDcAmt:  selfTmtbDcAmt, supplyCompTmtbDcAmt:  supplyCompTmtbDcAmt,
+			gfcdUseAmt:  gfcdUseAmt, selfCpnDcAmt:  selfCpnDcAmt, supplyCompCpnDcAmt:  supplyCompCpnDcAmt,
+			realSellPrice:  realSellPrice, realSellAmt:  realSellAmt,
+			sellFeeRate: null, sellFeeAmt:  sellFeeAmt, settleAmt:  settleAmt,
+			mdNm: null
+		};
+
+		gagaAgGrid.setPinnedRowData(gridOptions, data, 'top');
+	}
+	
 	// 엑셀다운로드
 	$('#btnExcel').on('click', function() {
 		gagaAgGrid.exportToExcel('일일거래내역', gridOptions);
 	});
 	
 	$(document).ready(function() {
+		gagajf.setDate('#terms', 'startDt', 'endDt', 't');
+		
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);
 	});