Bladeren bron

2021-09-28 화 1.쿠폰사용통계 추가

skyhopes 4 jaren geleden
bovenliggende
commit
aa43a1acff

+ 16 - 0
src/main/java/com/style24/admin/biz/dao/TsaStatisticsDao.java

@@ -107,4 +107,20 @@ public interface TsaStatisticsDao {
 	Collection<Statistics> getBestOrderList(Statistics statistics);
 	Collection<GagaMap> getBestOrderListMap(Statistics statistics);
 
+	/**
+	 * 쿠폰 사용 통계 조회
+	 * author: 이명철
+	 * return: Collection<GagaMap>
+	 * since: 2021. 9. 28.
+	 */
+	Collection<Statistics> getCouponOrderList(Statistics statistics);
+
+	/**
+	 * 쿠폰 사용 통계 상세조회
+	 * author: 이명철
+	 * return: Collection<Statistics>
+	 * since: 2021. 9. 28.
+	 */
+	Collection<Statistics> getCouponOrderDetailList(Statistics statistics);
+
 }

+ 20 - 0
src/main/java/com/style24/admin/biz/service/TsaStatisticsService.java

@@ -211,4 +211,24 @@ public class TsaStatisticsService {
 
 	}
 
+	/**
+	 * 쿠폰 사용 통계 조회
+	 * author: 이명철
+	 * return: Collection<Statistics>
+	 * since: 2021. 9. 28.
+	 */
+	public Collection<Statistics> getCouponOrderList(Statistics statistics) {
+		return statisticsDao.getCouponOrderList(statistics);
+	}
+
+	/**
+	 * 쿠폰 사용 통계 상세조회
+	 * author: 이명철
+	 * return: Collection<Statistics>
+	 * since: 2021. 9. 28.
+	 */
+	public Collection<Statistics> getCouponOrderDetailList(Statistics statistics) {
+		return statisticsDao.getCouponOrderDetailList(statistics);
+	}
+
 }

+ 46 - 0
src/main/java/com/style24/admin/biz/web/TsaStatisticsController.java

@@ -626,4 +626,50 @@ public class TsaStatisticsController extends TsaBaseController {
 		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
 	}
 
+	/**
+	 * 쿠폰 사용 통계
+	 * author: 이명철
+	 * return: ModelAndView
+	 * since: 2021. 9. 28.
+	 */
+	@GetMapping("/coupon/trading/form")
+	public ModelAndView couponTradingForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 쿠폰유형
+		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230", "Y"));
+
+		mav.setViewName("statistics/CouponTradingForm");
+		return mav;
+	}
+
+	/**
+	 * 쿠폰 사용 통계 조회
+	 * author: 이명철
+	 * return: Collection<Statistics>
+	 * since: 2021. 9. 28.
+	 */
+	@PostMapping("/coupon/order/list")
+	@ResponseBody
+	public Collection<Statistics> getCouponOrderList(@RequestBody Statistics statistics) {
+
+		if (!StringUtils.isBlank(statistics.getCpnId())) {
+			statistics.setMultiCpnId(statistics.getCpnId().split(System.lineSeparator()));
+		}
+
+		return statisticsService.getCouponOrderList(statistics);
+	}
+
+	/**
+	 * 쿠폰 사용 통계 상세조회
+	 * author: 이명철
+	 * return: Collection<Statistics>
+	 * since: 2021. 9. 28.
+	 */
+	@PostMapping("/coupon/order/detail/list")
+	@ResponseBody
+	public Collection<Statistics> getCouponOrderDetailList(@RequestBody Statistics statistics) {
+		return statisticsService.getCouponOrderDetailList(statistics);
+	}
+
 }

+ 19 - 0
src/main/java/com/style24/persistence/domain/Statistics.java

@@ -97,6 +97,9 @@ public class Statistics extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiAgeGb;	// 나이구분
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] cpnTypeArr;	// 쿠폰유형
+
 	// 일일거래내역
 	private Integer ordNo;				// 주문번호
 	private Integer ordDtlNo;			// 주문상세번호
@@ -177,6 +180,22 @@ public class Statistics extends TscBaseDomain {
 	private String sysImgNm;
 	private boolean isMap;
 
+	private String cpnType;
+	private String cpnTypeNm;
+	private String cpnId;
+	private String cpnNm;
+	private int burden;
+	private int downCnt;
+	private int useRate;
+	private int useCnt;
+	private int cpnAmt;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiCpnId;	// 쿠폰번호
 
+	private int ordQty;
+	private int custCnt;
+	private int custCpnCnt;
+	private int ordRate;
 
 }

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

@@ -1147,4 +1147,212 @@
 		<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
+		    , FLOOR(USE_CNT / DOWN_CNT * 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
+		    , FLOOR((X.CUST_CPN_CNT / Z.CUST_CNT * 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>
+
 </mapper>

+ 342 - 0
src/main/webapp/WEB-INF/views/statistics/CouponTradingForm.html

@@ -0,0 +1,342 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CouponTradingForm.html
+ * @desc    : 쿠폰 사용 통계 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021-09-28 화   lmc        최초 작성
+ *******************************************************************************
+ -->
+	<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="@{'/statistics/coupon/order/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:10%;"/>
+						<col style="width:60%;"/>
+						<col style="width:20%;"/>
+					</colgroup>
+					<tr>
+						<th>기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td colspan="2" id="terms"></td>
+						<td rowspan="2">
+						  <textarea class="textareaR3 w70p" name="cpnId" placeholder="쿠폰번호/쿠폰코드를 입력하세요."></textarea>
+						</td>
+					</tr>
+					<tr>
+					   <th>쿠폰유형</th>
+					   <td colspan="2">
+					       <label class="chkBox checked" th:if="${cpnTypeList}" th:each="oneData, status : ${cpnTypeList}"><input type="checkbox" name="cpnTypeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}" checked="checked"/></label>
+					   </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" id="btnInit">초기화</button>
+					</li>
+				</ul>
+			</form>
+			<form id="detailSearchForm" action="/statistics/coupon/order/detail/list" style="display:none;">
+				<input name="startDt">
+				<input name="endDt">
+				<input name="cpnId">
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-default btn-lg" onclick="fnExcelDownLoad();">엑셀다운로드</button>
+				</li>
+			</ul>
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-default btn-lg" onclick="fnDetailExcelDownLoad();">엑셀다운로드</button>
+				</li>
+			</ul>
+			<div id="detailGridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<style>
+.ag-header-group-text{
+	margin-left: calc(50% - 25px);
+}
+</style>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let columnDefs = [
+		{ headerName: "쿠폰유형", field: "cpnId", width: 100, cellClass: 'text-center', hide:true },
+		{ headerName: "쿠폰유형", field: "cpnTypeNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "쿠폰번호", field: "cpnId", width: 100, cellClass: 'text-center' },
+		{ headerName: "쿠폰명", field: "cpnNm", width: 200, cellClass: 'text-left' },
+		{ headerName: "자사분담율", field: "burden", width: 150, cellClass: 'text-right',
+            cellRenderer: function(params) {
+                return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+            }
+		},
+		{ headerName: "다운수", field: "downCnt", width: 150, cellClass: 'text-right',
+            cellRenderer: function(params) {
+                return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+            }
+		},
+		{ headerName: "사용수", field: "useCnt", width: 150, cellClass: 'text-right',
+            cellRenderer: function(params) {
+                return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+            }
+		},
+		{ headerName: "주문결제액", field: "ordAmt", width: 150, cellClass: 'text-right',
+            cellRenderer: function(params) {
+                return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+            }
+		},
+		{ headerName: "쿠폰비용", field: "cpnAmt", width: 150, cellClass: 'text-right',
+            cellRenderer: function(params) {
+                return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+            }
+		},
+		{ headerName: "상세보기", field: "detail", width: 100, cellClass: 'text-center',
+			cellRenderer: function (params) {
+				return '<a href="javascript:void(0);">판매현황보기</a>';
+			}
+		},
+	];
+
+	let detailColumnDefs = [
+		{ headerName: "브랜드", field: "brandEnm", width: 150, cellClass: 'text-center' },
+		{ headerName: "상품번호", field: "goodsCd", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) {
+				return '<a href="javascript:void(0);">'+params.value+'</a>';
+			}
+		},
+		{ headerName: "상품명", field: "goodsNm", width: 300, cellClass: 'text-left',
+			cellRenderer: function (params) {
+				return '<a href="javascript:void(0);">'+params.value+'</a>';
+			}
+		},
+		{ headerName: "원판매가액", field: "ordAmt", width: 150, cellClass: 'text-right',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+			}
+		},
+		{ headerName: "판매수량", field: "ordQty", width: 150, cellClass: 'text-right',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+			}
+		},
+		{ headerName: "구매자수", field: "custCpnCnt", width: 150, cellClass: 'text-right',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+			}
+		},
+		{ headerName: "구매율", field: "ordRate", width: 150, cellClass: 'text-right',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.addComma() : '0';
+			}
+		},
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	let detailGridOptions = gagaAgGrid.getGridOptions(detailColumnDefs);
+
+	// Row Click
+	gridOptions.onCellClicked = function(event) {
+		var params = event.data;
+		if (event.colDef.field == "goodsCd"){
+			cfnOpenGoodsDetailPopup('U', params.goodsCd);
+		}
+		else if (event.colDef.field == "goodsNm"){
+			cfnOpenGoodsDetailPopup('U', params.goodsCd);
+		}
+		else if (event.colDef.field == "detail"){
+			$("#detailSearchForm input[name=startDt]").val($("#searchForm input[name=startDt]").val());
+			$("#detailSearchForm input[name=endDt]").val($("#searchForm input[name=endDt]").val());
+			$("#detailSearchForm input[name=cpnId]").val(params.cpnId);
+			gagaAgGrid.fetch($('#detailSearchForm').prop('action'), detailGridOptions, '#detailSearchForm', fnDetailCreateTotal);
+		}
+	}
+
+	// Row Click
+	detailGridOptions.onCellClicked = function(event) {
+		var params = event.data;
+		if (event.colDef.field == "goodsCd"){
+			cfnOpenGoodsDetailPopup('U',goodsCd);
+		}
+		else if (event.colDef.field == "goodsNm"){
+			cfnOpenGoodsDetailPopup('U',goodsCd);
+		}
+	}
+
+    gridOptions.excelStyles = [
+        {
+            id: 'text-center',
+            dataType: 'string',
+			font: {size : 10, bold: false}
+        },
+        {
+            id: 'text-left',
+            dataType: 'string',
+			font: {size : 10, bold: false}
+        },
+        {
+            id: 'text-right',
+            dataType: 'number',
+			font: {size : 10, bold: false}
+        }
+    ];
+
+    detailGridOptions.excelStyles = gridOptions.excelStyles;
+
+    var fnExcelDownLoad = function(){
+
+    	var totalRows = gridOptions.api.getDisplayedRowCount();
+		if(totalRows==0){
+			mcxDialog.alert('조회된 내역이 없습니다.');
+			return;
+		}
+
+    	var date = new Date().format("YYYYMMDDHHmmss");
+		var params = {
+						fileName : "쿠폰주문목록_"+ date,
+						sheetName: "DATA"
+					 };
+		gridOptions.api.exportDataAsExcel(params);
+    }
+    var fnDetailExcelDownLoad = function(){
+
+    	var totalRows = detailGridOptions.api.getDisplayedRowCount();
+		if(totalRows==0){
+			mcxDialog.alert('조회된 내역이 없습니다.');
+			return;
+		}
+
+    	var date = new Date().format("YYYYMMDDHHmmss");
+		var params = {
+						fileName : "쿠폰주문상세목록_"+ date,
+						sheetName: "DATA"
+					 };
+		detailGridOptions.api.exportDataAsExcel(params);
+    }
+
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation($('#searchForm')))
+			return false;
+
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', fnCreateTotal);
+	});
+
+	// 합계 생성
+	let fnCreateTotal = function() {
+
+		let totInfo = {};
+		totInfo.cpnTypeNm =   "TOTAL";
+		totInfo.burden    =   0;
+		totInfo.downCnt   =   0;
+		totInfo.useRate   =   0;
+		totInfo.useCnt    =   0;
+		totInfo.ordAmt    =   0;
+		totInfo.cpnAmt	  =   0;
+
+		gridOptions.api.forEachNode(function(rowNode, index) {
+			if (!rowNode.group) {
+				if( typeof rowNode.data.burden      == 'number') { totInfo.burden       += rowNode.data.burden      ; }
+				if( typeof rowNode.data.downCnt     == 'number') { totInfo.downCnt      += rowNode.data.downCnt     ; }
+				if( typeof rowNode.data.useRate     == 'number') { totInfo.useRate      += rowNode.data.useRate     ; }
+				if( typeof rowNode.data.useCnt      == 'number') { totInfo.useCnt       += rowNode.data.useCnt      ; }
+				if( typeof rowNode.data.ordAmt      == 'number') { totInfo.ordAmt       += rowNode.data.ordAmt      ; }
+				if( typeof rowNode.data.cpnAmt	    == 'number') { totInfo.cpnAmt	    += rowNode.data.cpnAmt	    ; }
+			}
+		});
+
+		gagaAgGrid.setPinnedRowData(gridOptions, totInfo, 'top');
+	}
+
+	// 합계 생성
+	let fnDetailCreateTotal = function() {
+
+		let totInfo = {};
+		totInfo.brandEnm   = 'TOTAL';
+		totInfo.goodsCd   = '';
+		totInfo.goodsNm   = '';
+		totInfo.ordAmt     = 0;
+		totInfo.ordQty     = 0;
+		totInfo.custCnt    = 0;
+		totInfo.custCpnCnt = 0;
+		totInfo.ordRate    = 0;
+
+		detailGridOptions.api.forEachNode(function(rowNode, index) {
+			if (!rowNode.group) {
+				if( typeof rowNode.data.ordAmt        == 'number') { totInfo.ordAmt         += rowNode.data.ordAmt        ; }
+				if( typeof rowNode.data.ordQty        == 'number') { totInfo.ordQty         += rowNode.data.ordQty        ; }
+				if( typeof rowNode.data.custCnt       == 'number') { totInfo.custCnt        += rowNode.data.custCnt       ; }
+				if( typeof rowNode.data.custCpnCnt    == 'number') { totInfo.custCpnCnt     += rowNode.data.custCpnCnt    ; }
+				if( typeof rowNode.data.ordRate       == 'number') { totInfo.ordRate        += rowNode.data.ordRate       ; }
+			}
+		});
+
+		if(totInfo.custCpnCnt > 0 && totInfo.custCnt > 0){
+			totInfo.ordRate = Math.floor((totInfo.custCpnCnt / totInfo.custCnt * 100) / 10) * 10;
+		}else{
+			totInfo.ordRate = 0;
+		}
+
+		gagaAgGrid.setPinnedRowData(detailGridOptions, totInfo, 'top');
+	}
+
+	// 초기화 클릭시
+	$('#btnInit').on('click', function() {
+		$('#searchForm')[0].reset();
+
+		$('#extmallIdTxt').html('');
+		$('#searchForm input[name=extmallIdList]').val('');
+		$('#supplyCompCdTxt').html('');
+		$('#searchForm input[name=supplyCompCdList]').val('');
+		$('#afLinkCdTxt').html('');
+		$('#searchForm input[name=afLinkCdList]').val('');
+		$('#brandCdTxt').html('');
+		$('#searchForm input[name=brandCdList]').val('');
+		$('#itemkindCdTxt').html('');
+		$('#searchForm input[name=itemkindCdList]').val('');
+	});
+
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'startDt', 'endDt', true, '주문', undefined, ['btnToday']);
+		$('.btnYesterday').trigger('click');
+
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+		// Create a agGrid
+		gagaAgGrid.createGrid('detailGridList', detailGridOptions);
+
+	});
+/*]]>*/
+</script>
+
+</html>