gagamel 4 年 前
コミット
a96ef57b71

BIN
산출물/3.설계/01.화면설계서/04.ADMIN/IST_BOS_주문상세가격노출영역변경_V1.10_20211116 (2).pptx


BIN
산출물/3.설계/01.화면설계서/04.ADMIN/IST_BOS_환불계좌노출_211115.ppt


BIN
산출물/3.설계/03.인터페이스/TSIT-D302-인터페이스명세서(V0.1)-20201224_상품.xlsx


BIN
산출물/3.설계/03.인터페이스/TSIT-D302-인터페이스정의서(V0.3)-20201126.xlsx


+ 1067 - 0
산출물/4.구축/데이터추출/BOS_주문상세_주문결제내역.sql

@@ -0,0 +1,1067 @@
+		    SELECT ORD_NO
+		         , CASE WHEN PG_GB = 'KCP' THEN FN_GET_CODE_NM('G014',PAY_MEANS)
+		                WHEN PG_GB = 'NAVER' THEN
+		                    CASE WHEN PAY_MEANS = 'G014_10' THEN '네이버페이(계좌)'
+		                         WHEN PAY_MEANS = 'G014_30' THEN '네이버페이(신용)'
+		                         ELSE '네이버페이'
+		                    END
+		                WHEN PG_GB = 'NAVER_ORDER' THEN '네이버페이주문형'
+		                WHEN PG_GB = 'KAKAO' THEN
+		                    CASE WHEN PAY_MEANS = 'G014_10' THEN '카카오페이(계좌)'
+		                         WHEN PAY_MEANS = 'G014_30' THEN '카카오페이(신용)'
+		                         ELSE '카카오페이'
+		                    END
+		                WHEN PG_GB = 'PAYCO' THEN
+		                    CASE WHEN PAY_MEANS = 'G014_10' THEN '페이코(계좌)'
+		                         WHEN PAY_MEANS = 'G014_30' THEN '페이코(신용)'
+		                         ELSE '페이코'
+		                    END
+		                ELSE ''
+		           END           AS PAY_MEANS_NM  /*결제수단명*/
+		         , CASE WHEN PG_GB = 'KCP' THEN
+		                    CASE WHEN PAY_MEANS = 'G014_10' THEN CONCAT(FN_GET_CODE_NM('G940',VA_BANK),' / ',VA_NO)
+		                         WHEN PAY_MEANS = 'G014_20' THEN CONCAT(FN_GET_CODE_NM('G940',VA_BANK),' / ',VA_NO,' / ',VA_NM,' / ',IFNULL(DATE_FORMAT(PAY_DT,'%Y-%m-%d %H:%i:%S'),''))
+		                         WHEN PAY_MEANS = 'G014_30' THEN CONCAT(CARD_NM,' / ',CASE WHEN CAST(CARD_MIPS AS UNSIGNED) = 0 THEN '일시불' ELSE CONCAT(CAST(CARD_MIPS AS UNSIGNED),'개월') END)
+		                         ELSE ''
+		                    END
+		                WHEN PG_GB IN ('NAVER','KAKAO','PAYCO') THEN
+		                    CASE WHEN PAY_MEANS = 'G014_30' THEN CONCAT(CARD_NM,' / ',CASE WHEN CAST(CARD_MIPS AS UNSIGNED) = 0 THEN '일시불' ELSE CONCAT(CAST(CARD_MIPS AS UNSIGNED),'개월') END)
+		                         ELSE ''
+		                    END
+		                ELSE ''
+		           END           AS PAY_MEANS_DESC     /*결제수단설명*/
+		         , PG_CPN_AMT                          /*PG쿠폰금액*/
+		         , NPAY_PNT_AMT                        /*포인트금액(마일리지)*/
+		         , CASE WHEN NPAY_PNT_AMT > 0 AND PAY_MEANS IN ('G014_80','G014_81','G014_82','G014_83') THEN FN_GET_CODE_NM('G014',PAY_MEANS)
+		                ELSE ''
+		           END           AS NPAY_PNT_DESC      /*포인트(마일리지)설명*/
+		         , CASE WHEN CASH_AUTH_NO IS NOT NULL AND CASH_TRADE_NO IS NOT NULL THEN 'Y'
+		                ELSE 'N'
+		           END           AS CASH_RECEIP_REQ_YN /*현금영수증신청여부*/
+		    FROM   TB_PAYMENT
+		    WHERE  ORD_NO =  5791 /**P*/
+		    AND    PAY_GB = 'O' /*주문시결제*/
+		    AND    PAY_STAT IN ('G016_30','G016_10') /*결제완료,무통장입금관련*/
+		    ;
+		   
+SELECT *
+FROM   TB_PAYMENT
+WHERE  ORD_NO =  5791 /**P*/
+;
+
+WITH ORIGINAL_ORD AS (
+	SELECT ODH.ORD_NO           /*주문번호*/
+	     , ODH.ORD_DTL_NO       /*주문상세번호*/
+-- 	     , ODH.ORD_AMT          /*주문금액*/
+	     , ODH.REAL_ORD_AMT     /*실주문금액*/
+-- 	     , (ODH.LIST_PRICE + ODH.OPT_ADD_PRICE) * (ODH.ORD_QTY - ODH.CNCL_RTN_QTY) AS ORD_LIST_AMT /*주문정상금액*/
+	     , (ODH.CURR_PRICE + ODH.OPT_ADD_PRICE) * (ODH.ORD_QTY - ODH.CNCL_RTN_QTY) AS ORD_CURR_AMT /*주문상품금액*/
+	     , ODH.CPN1_CPN_SQ      /*즉시할인쿠폰번호*/
+	     , ODH.CPN1_DC_AMT      /*즉시할인쿠폰금액*/
+	     , ODH.TMTB1_SQ         /*다다익선수량할인번호*/
+	     , ODH.TMTB1_DC_AMT     /*다다익선수량할인금액*/
+	     , ODH.TMTB2_SQ         /*다다익선금액할인번호*/
+	     , ODH.TMTB2_DC_AMT     /*다다익선금액할인금액*/
+	     , ODH.GOODS_CPN_SQ     /*상품쿠폰번호*/
+	     , ODH.GOODS_CPN_DC_AMT /*상품쿠폰할인금액*/
+	     , ODH.CART_CPN_SQ      /*장바구니쿠폰번호*/
+	     , ODH.CART_CPN_DC_AMT  /*장바구니쿠폰할인금액*/
+	     , ODH.PRE_PNT_DC_AMT   /*선포인트할인금액*/
+	     , ODH.GFCD_USE_AMT     /*상품권사용금액*/
+	     , ODH.PNT_DC_AMT       /*포인트할인금액*/
+	     , ODH.SAVE_PNT_AMT     /*적립포인트금액*/
+	FROM   TB_ORDER_DETAIL_HST ODH
+	WHERE  ODH.ORD_NO = 6005
+	AND    ODH.ORD_EXCH_GB = 'O' /*원주문*/
+	AND    ODH.ORD_DTL_STAT = 'G013_00' /*주문접수*/
+)
+, ORIGINAL_DELV_FEE AS (
+	SELECT DF.DELV_FEE_CD                                             /*배송비정책코드*/
+	     , DF.SUPPLY_COMP_CD                                          /*공급업체코드*/
+	     , FN_GET_SUPPLY_COMP_NM(DF.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM /*공급업체명*/
+	     , DF.DELV_FEE                                                /*배송비*/
+	     , DF.DELV_CPN_SQ                                             /*배송비쿠폰번호*/
+	     , DF.DELV_CPN_DC_AMT                                         /*배송비쿠폰할인금액*/
+	     , DF.DELV_GFCD_USE_AMT                                       /*배송비상품권사용금액*/
+	     , DF.REAL_DELV_AMT                                           /*실배송비금액*/
+	FROM   TB_DELIVERY_FEE DF
+	WHERE  DF.ORD_NO = 6005
+	AND    DF.DELV_FEE_GB = 'G018_10' /*원주문배송비*/
+)
+, ORIGINAL_PAYMENT AS (
+    SELECT ORD_NO
+         , CASE WHEN PG_GB = 'KCP' THEN FN_GET_CODE_NM('G014', PAY_MEANS)
+	            WHEN PG_GB = 'NAVER' THEN '네이버페이'
+	            WHEN PG_GB = 'NAVER_ORDER' THEN '네이버페이주문형'
+	            WHEN PG_GB = 'KAKAO' THEN '카카오페이'
+	            ELSE ''
+	       END           AS PAY_MEANS_NM  /*결제수단명*/
+	     , CASE WHEN PG_GB = 'KCP' THEN
+	                CASE WHEN PAY_MEANS = 'G014_10' THEN CONCAT(FN_GET_CODE_NM('G940',VA_BANK),' / ',VA_NO)
+	                     WHEN PAY_MEANS = 'G014_20' THEN CONCAT(FN_GET_CODE_NM('G940',VA_BANK),' / ',VA_NO,' / ',VA_NM,' / ',DATE_FORMAT(VA_DEADLINE,'%Y-%m-%d %H:%i:%S'))
+	                     WHEN PAY_MEANS = 'G014_30' THEN CONCAT(CARD_NM,' / ',CASE WHEN CAST(CARD_MIPS AS UNSIGNED) = 0 THEN '일시불' ELSE CONCAT(CAST(CARD_MIPS AS UNSIGNED),'개월') END)
+	                     ELSE ''
+	                END
+	            WHEN PG_GB IN ('NAVER','KAKAO') THEN
+	                CASE WHEN PAY_MEANS = 'G014_10' THEN CONCAT(FN_GET_CODE_NM('G940',VA_BANK),' / ',VA_NO)
+	                     WHEN PAY_MEANS = 'G014_30' THEN CONCAT(CARD_NM,' / ',CASE WHEN CAST(CARD_MIPS AS UNSIGNED) = 0 THEN '일시불' ELSE CONCAT(CAST(CARD_MIPS AS UNSIGNED),'개월') END)
+	                     ELSE ''
+	                END
+	       END           AS PAY_MEANS_DESC /*결제수단설명*/
+	     , PG_CPN_AMT                      /*PG쿠폰금액*/
+	     , NPAY_PNT_AMT                    /*네이버페이포인트금액(마일리지)*/
+	     , CASE WHEN CASH_AUTH_NO IS NOT NULL AND CASH_TRADE_NO IS NOT NULL THEN 'Y'
+	            ELSE 'N'
+	       END           AS CASH_RECEIP_REQ_YN /*현금영수증신청여부*/
+	FROM   TB_PAYMENT
+	WHERE  ORD_NO = 6005
+	AND    PAY_GB = 'O' /*주문시결제*/
+	AND    PAY_STAT IN ('G016_30','G016_10') /*결제완료,무통장입금관련*/
+)
+SELECT OO.ORD_NO                                                   /*주문번호*/
+     , SUM(OO.ORD_CURR_AMT)                   AS ORD_CURR_AMT      /*주문상품금액*/
+     , IFNULL((SELECT SUM(REAL_DELV_AMT)
+               FROM   ORIGINAL_DELV_FEE
+              ),0)                            AS REAL_DELV_AMT     /*실배송비금액*/
+     , (SELECT CONCAT((SELECT CONCAT('자사 : ',FORMAT(SUM(DF.DELV_FEE),0),'원')
+                       FROM   ORIGINAL_DELV_FEE DF
+                       WHERE  DF.DELV_FEE_CD = 'WMS' /*자사*/
+                      ),
+		              (SELECT CONCAT(' / 업체 : ',GROUP_CONCAT(DELV_FEE_DESC SEPARATOR ', '))
+		               FROM   (
+		                       SELECT CONCAT(DF.SUPPLY_COMP_CD,'/',FN_GET_SUPPLY_COMP_NM(DF.SUPPLY_COMP_CD),' ',FORMAT(SUM(DF.DELV_FEE),0),'원') AS DELV_FEE_DESC
+		                       FROM   ORIGINAL_DELV_FEE DF
+		                       WHERE  DF.DELV_FEE_CD != 'WMS' /*입점업체*/
+		                       GROUP  BY DF.SUPPLY_COMP_CD
+		                      ) Z
+		              )) AS DELV_FEE_DESC
+		FROM   DUAL
+	   )                                      AS DELV_FEE_DESC     /*배송비설명*/
+	 , (SELECT GROUP_CONCAT(DISTINCT CONCAT('쿠폰번호 : ',C.CPN_ID,' / ',C.CPN_NM,' ',FORMAT(DF.DELV_CPN_DC_AMT,0),'원') SEPARATOR ', ') AS DELV_FEE_CPN_DESC
+        FROM   ORIGINAL_DELV_FEE DF
+        INNER JOIN TB_CUST_COUPON CC ON DF.DELV_CPN_SQ = CC.CUST_CPN_SQ
+        INNER JOIN TB_COUPON C ON CC.CPN_ID = C.CPN_ID
+        WHERE  DF.DELV_CPN_SQ > 0
+       )                                      AS DELV_FEE_CPN_DESC /*배송비쿠폰설명*/
+     , SUM(OO.CPN1_DC_AMT +
+           OO.TMTB1_DC_AMT + OO.TMTB2_DC_AMT +
+           OO.GOODS_CPN_DC_AMT + OO.CART_CPN_DC_AMT +
+           OO.PRE_PNT_DC_AMT)                 AS TOT_DC_AMT        /*총할인금액*/
+     , SUM(OO.CPN1_DC_AMT)                    AS CPN1_DC_AMT       /*즉시할인쿠폰금액*/
+     , (SELECT GROUP_CONCAT(DISTINCT CONCAT('쿠폰번호 : ',CPN_ID,' / ',CPN_NM) SEPARATOR '!@!') AS CPN_DESC
+        FROM   TB_COUPON
+        WHERE  CPN_ID IN (SELECT DISTINCT CPN1_CPN_SQ FROM ORIGINAL_ORD)
+       )                                      AS CPN1_CPN_DC_DESC  /*즉시할인쿠폰설명*/
+     , SUM(OO.TMTB1_DC_AMT + OO.TMTB2_DC_AMT) AS TMTB_DC_AMT       /*다다익선인금액*/
+     , SUM(OO.TMTB1_DC_AMT)                   AS TMTB1_DC_AMT      /*다다익선수량할인금액*/
+     , (SELECT GROUP_CONCAT(DISTINCT CONCAT('프로모션번호 : ',TMTB_SQ,' / ',TMTB_NM) SEPARATOR '!@!') AS CPN_DESC
+        FROM   TB_TMTB
+        WHERE  TMTB_SQ IN (SELECT DISTINCT TMTB1_SQ FROM ORIGINAL_ORD)
+       )                                      AS TMTB1_DESC        /*다다익선수량할인설명*/
+     , SUM(OO.TMTB2_DC_AMT)                   AS TMTB2_DC_AMT      /*다다익선금액할인금액*/
+     , (SELECT GROUP_CONCAT(DISTINCT CONCAT('프로모션번호 : ',TMTB_SQ,' / ',TMTB_NM) SEPARATOR '!@!') AS CPN_DESC
+        FROM   TB_TMTB
+        WHERE  TMTB_SQ IN (SELECT DISTINCT TMTB2_SQ FROM ORIGINAL_ORD)
+       )                                      AS TMTB2_DESC        /*다다익선금액할인설명*/
+     , SUM(OO.GOODS_CPN_DC_AMT)               AS GOODS_CPN_DC_AMT  /*상품쿠폰할인금액*/
+     , (SELECT GROUP_CONCAT(DISTINCT CONCAT('쿠폰번호 : ',C.CPN_ID,' / ',C.CPN_NM) SEPARATOR '!@!') AS CPN_DESC
+        FROM   TB_CUST_COUPON CC
+        INNER JOIN TB_COUPON C ON CC.CPN_ID = C.CPN_ID
+        WHERE  CC.CUST_CPN_SQ IN (SELECT DISTINCT GOODS_CPN_SQ FROM ORIGINAL_ORD)
+       )                                      AS GOODS_CPN_DC_DESC /*상품쿠폰할인설명*/
+     , SUM(OO.CART_CPN_DC_AMT)                AS CART_CPN_DC_AMT   /*장바구니쿠폰할인금액*/
+     , (SELECT CONCAT('쿠폰번호 : ',C.CPN_ID,' / ',C.CPN_NM,
+		              ' / 구매금액 ',
+		              CASE WHEN C.BUY_LIMIT_AMT = 0 THEN '제한없음'
+		                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT,0),'원 이상')
+		              END,
+		              ' / ',
+		              FORMAT(C.DC_PVAL,0),
+		              CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
+		                   ELSE '%'
+		              END,
+		              ' 할인 / 최대할인 ',
+		              CASE WHEN C.MAX_DC_AMT = 0 THEN '제한없음'
+		                   ELSE CONCAT(FORMAT(C.MAX_DC_AMT,0),'원')
+		              END
+		             ) AS CPN_DESC
+		FROM   TB_CUST_COUPON CC
+		INNER JOIN TB_COUPON C ON CC.CPN_ID = C.CPN_ID
+		WHERE  CC.CUST_CPN_SQ = (SELECT DISTINCT CART_CPN_SQ FROM ORIGINAL_ORD)
+       )                                      AS CART_CPN_DC_DESC  /*장바구니쿠폰할인설명*/
+     , SUM(OO.PRE_PNT_DC_AMT)                 AS PRE_PNT_DC_AMT    /*선포인트할인금액*/
+     , SUM(OO.ORD_CURR_AMT)
+       + IFNULL((SELECT SUM(REAL_DELV_AMT)
+                 FROM   ORIGINAL_DELV_FEE
+                ),0)
+       - SUM(OO.CPN1_DC_AMT +
+             OO.TMTB1_DC_AMT + OO.TMTB2_DC_AMT +
+             OO.GOODS_CPN_DC_AMT + OO.CART_CPN_DC_AMT +
+             OO.PRE_PNT_DC_AMT)               AS TOT_PAY_AMT       /*총결제금액*/
+     , SUM(OO.REAL_ORD_AMT)
+       + IFNULL((SELECT SUM(REAL_DELV_AMT)
+                 FROM   ORIGINAL_DELV_FEE
+                ),0)                          AS REAL_ORD_AMT      /*실결제금액*/
+     , MAX(P.PAY_MEANS_NM)                    AS PAY_MEANS_NM      /*결제수단명*/
+     , MAX(P.PAY_MEANS_DESC)                  AS PAY_MEANS_DESC     /*결제수단설명*/
+	 , SUM(OO.GFCD_USE_AMT)                   AS GFCD_USE_AMT       /*상품권사용금액*/
+     , (SELECT GROUP_CONCAT(GFCD_USE_DESC SEPARATOR '!@!') AS GFCD_USE_DESC
+		FROM   (
+		        SELECT CONCAT(FORMAT(SUM(CGH.GFCD_AMT),0),'원 / ',CG.GFCD_NO) AS GFCD_USE_DESC
+		        FROM   TB_CUST_GIFTCARD_HST CGH
+		        INNER JOIN TB_CUST_GIFTCARD CG ON CGH.CUST_GFCD_SQ = CG.CUST_GFCD_SQ
+		        WHERE  CGH.ORD_NO = OO.ORD_NO
+		        AND    CGH.OCCUR_GB = 'G074_12' /*상품권사용*/
+		        GROUP  BY CG.GFCD_NO
+		       ) Z
+       )                                      AS GFCD_USE_DESC      /*상품권사용설명*/
+     , SUM(OO.PNT_DC_AMT)                     AS PNT_DC_AMT         /*포인트할인금액*/
+     , MAX(P.PG_CPN_AMT)                      AS PG_CPN_AMT         /*PG쿠폰금액(KCP쿠폰금액)*/
+     , MAX(P.NPAY_PNT_AMT)                    AS NPAY_PNT_AMT       /*네이버페이포인트금액(마일리지)*/
+     , SUM(OO.SAVE_PNT_AMT)                   AS SAVE_PNT_AMT       /*적립포인트금액*/
+	 , MAX(P.CASH_RECEIP_REQ_YN)              AS CASH_RECEIP_REQ_YN /*현금영수증신청여부*/
+FROM   ORIGINAL_ORD OO
+INNER JOIN TB_ORDER O ON OO.ORD_NO = O.ORD_NO
+INNER JOIN ORIGINAL_PAYMENT P ON OO.ORD_NO = P.ORD_NO
+GROUP  BY OO.ORD_NO
+;
+
+-- 상품쿠폰내역 목록 가져오기
+SELECT GROUP_CONCAT(DISTINCT CONCAT('쿠폰번호 : ',C.CPN_ID,' / ',C.CPN_NM) SEPARATOR '!@!') AS CPN_DESC
+FROM   TB_CUST_COUPON CC
+INNER JOIN TB_COUPON C ON CC.CPN_ID = C.CPN_ID
+WHERE  CC.CUST_CPN_SQ IN (3465,3575,3298,3456,10,3581)
+;
+
+-- 장바구니쿠폰내역 가져오기
+SELECT CONCAT('쿠폰번호 : ',C.CPN_ID,' / ',C.CPN_NM,
+              ' / 구매금액 ',
+              CASE WHEN C.BUY_LIMIT_AMT = 0 THEN '제한없음'
+                   ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT,0),'원 이상')
+              END,
+              ' / ',
+              FORMAT(C.DC_PVAL,0),
+              CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
+                   ELSE '%'
+              END,
+              ' 할인 / 최대할인 ',
+              CASE WHEN C.MAX_DC_AMT = 0 THEN '제한없음'
+                   ELSE CONCAT(FORMAT(C.MAX_DC_AMT,0),'원')
+              END
+             )
+FROM   TB_CUST_COUPON CC
+INNER JOIN TB_COUPON C ON CC.CPN_ID = C.CPN_ID
+WHERE  CC.CUST_CPN_SQ IN (3473)
+;
+
+-- 상품권사용내역 목록
+SELECT GROUP_CONCAT(GFCD_USE_DESC SEPARATOR '!@!') AS GFCD_USE_DESC
+FROM   (
+        SELECT CONCAT(FORMAT(SUM(CGH.GFCD_AMT),0),'원 / ',CG.GFCD_NO) AS GFCD_USE_DESC
+            FROM   TB_CUST_GIFTCARD_HST CGH
+                 , TB_CUST_GIFTCARD CG
+            WHERE  CGH.CUST_GFCD_SQ = CG.CUST_GFCD_SQ
+            AND    CGH.ORD_NO = 6005
+            AND    CGH.OCCUR_GB = 'G074_12' /*상품권사용*/
+            GROUP  BY CG.GFCD_NO
+           ) Z
+;
+
+SELECT DF.DELV_FEE_CD       /*배송정책코드*/
+     , DF.DELV_FEE          /*배송비*/
+     , DF.DELV_CPN_SQ       /*배송비쿠폰번호*/
+     , DF.DELV_CPN_DC_AMT   /*배송비쿠폰할인금액*/
+     , DF.DELV_GFCD_USE_AMT /*배송비상품권사용금액*/
+     , DF.SUPPLY_COMP_CD    /*공급업체코드*/
+FROM   TB_DELIVERY_FEE DF
+WHERE  DF.ORD_NO =  6005 /**P*/
+AND    DF.DELV_FEE_GB = 'G018_10' /*원주문배송비*/
+-- GROUP  BY DF.DELV_FEE_CD
+;
+
+WITH ORIGINAL_DELV_FEE AS (
+	SELECT DF.DELV_FEE_CD                                             /*배송비정책코드*/
+	     , DF.SUPPLY_COMP_CD                                          /*공급업체코드*/
+	     , FN_GET_SUPPLY_COMP_NM(DF.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM /*공급업체명*/
+	     , DF.DELV_FEE                                                /*배송비*/
+	     , DF.DELV_CPN_SQ                                             /*배송비쿠폰번호*/
+	     , DF.DELV_CPN_DC_AMT                                         /*배송비쿠폰할인금액*/
+	     , DF.DELV_GFCD_USE_AMT                                       /*배송비상품권사용금액*/
+	FROM   TB_DELIVERY_FEE DF
+	WHERE  DF.ORD_NO = 6005
+	AND    DF.DELV_FEE_GB = 'G018_10' /*원주문배송비*/
+)
+SELECT CONCAT((SELECT CONCAT('자사 : ',FORMAT(SUM(DF.DELV_FEE),0),'원') AS DELV_FEE_DESC
+               FROM   ORIGINAL_DELV_FEE DF
+               WHERE  DF.DELV_FEE_CD = 'WMS' /*자사*/
+              ),
+              (SELECT CONCAT(' / 업체 : ',GROUP_CONCAT(DELV_FEE_DESC SEPARATOR ', ')) AS DELV_FEE_DESC
+               FROM   (
+                       SELECT CONCAT(DF.SUPPLY_COMP_CD,'/',FN_GET_SUPPLY_COMP_NM(DF.SUPPLY_COMP_CD),' ',FORMAT(SUM(DF.DELV_FEE),0),'원') AS DELV_FEE_DESC
+                       FROM   ORIGINAL_DELV_FEE DF
+                       WHERE  DF.DELV_FEE_CD != 'WMS' /*입점업체*/
+                       GROUP  BY DF.SUPPLY_COMP_CD
+                      ) Z
+              )) AS DELV_FEE_DESC
+FROM   DUAL
+;
+
+SELECT CONCAT('업체 : ',GROUP_CONCAT(CONCAT(DF.SUPPLY_COMP_CD,'/',FN_GET_SUPPLY_COMP_NM(DF.SUPPLY_COMP_CD),' ',FORMAT(DF.DELV_FEE,0),'원') SEPARATOR ', ')) AS DELV_FEE_DESC
+--      , DF.DELV_CPN_SQ       /*배송비쿠폰번호*/
+--      , DF.DELV_CPN_DC_AMT   /*배송비쿠폰할인금액*/
+--      , DF.DELV_GFCD_USE_AMT /*배송비상품권사용금액*/
+FROM   ORIGINAL_DELV_FEE DF
+WHERE  DF.DELV_FEE_CD != 'WMS' /*입점업체*/
+;
+
+-- 배송비쿠폰내역 가져오기
+SELECT GROUP_CONCAT(DISTINCT CONCAT('쿠폰번호 : ',C.CPN_ID,' / ',C.CPN_NM) SEPARATOR ', ') AS CPN_DESC
+FROM   TB_CUST_COUPON CC
+INNER JOIN TB_COUPON C ON CC.CPN_ID = C.CPN_ID
+WHERE  CC.CUST_CPN_SQ IN (13)
+;
+
+SELECT *
+FROM   TB_CUST_GIFTCARD_HST CGH
+WHERE  CGH.ORD_NO = 6005
+AND    CGH.OCCUR_GB = 'G074_12' /*상품권사용*/
+;
+           
+SELECT *
+FROM   TB_COMMON_CODE
+WHERE  CD_GB = 'G720'
+;
+
+-- G720_10	판매-결제완료
+-- G720_20	판매-배송중
+-- G720_30	환입-취소완료
+-- G720_40	환입-품절취소
+-- G720_50	환입_반품완료
+-- G720_60	환입-교환완료
+
+-- G014_10	실시간계좌이체(KCP)
+-- G014_20	무통장입금(KCP)
+-- G014_30	신용카드(KCP)
+-- G014_40	포인트
+-- G014_50	쿠폰
+-- G014_60	휴대전화(KCP)
+-- G014_70	상품권
+-- G014_80	네이버포인트
+-- G014_81	카카오포인트
+-- G014_82	PAYCO포인트
+-- G014_83	카카오머니
+-- G014_90	외부몰입금
+
+SELECT *
+FROM   TB_PAYMENT
+WHERE  1 = 1
+AND    PG_GB = 'KCP'
+AND    PAY_MEANS = 'G014_20'
+AND    PAY_GB = 'O'
+AND    PAY_STAT IN ('G016_30','G016_10') /*결제완료,무통장입금관련*/
+;
+
+SELECT *
+FROM   TB_ORDER
+WHERE  ORD_NO = 3357
+;
+
+-- 5791	2021-09-03 20:10:11
+
+/* order.getOrderDetailList */
+		SELECT A.ORD_NO
+		     , A.ORD_EXCH_GB
+		     , A.EXCH_GB_NM
+		     , A.ORD_DTL_NO
+		     , A.GOODS_CD
+		     , A.GOODS_NM
+		     , A.GOODS_TYPE
+		     , A.GOODS_TYPE_NM
+		     , A.SYS_IMG_NM
+		     , A.BRAND_ENM
+		     , GROUP_CONCAT(A.ITEM_NM ORDER BY A.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
+		     , GROUP_CONCAT(A.ITEM_CD ORDER BY A.ORD_DTL_ITEM_SQ)                 AS ITEM_CD
+		     , GROUP_CONCAT(A.OPT_CD ORDER BY A.ORD_DTL_ITEM_SQ)                  AS OPT_CD
+		     , GROUP_CONCAT(A.OPT_CD1 ORDER BY A.ORD_DTL_ITEM_SQ)                 AS OPT_CD1
+		     , GROUP_CONCAT(A.OPT_CD2 ORDER BY A.ORD_DTL_ITEM_SQ)                 AS OPT_CD2
+		     , GROUP_CONCAT(A.ITEM_QTY ORDER BY A.ORD_DTL_ITEM_SQ)                AS ITEM_QTYR
+		     , GROUP_CONCAT(A.COLOR_NM ORDER BY A.ORD_DTL_ITEM_SQ)                AS COLOR_NM
+		     , A.LIST_PRICE
+		     , A.CURR_PRICE
+		     , A.ORD_QTY
+		     , A.CNCL_RTN_QTY
+		     , A.ORD_REQ_CHG_QTY
+		     , A.CANCEL_REQUEST_QTY
+		     , A.EXCHANGE_REQUEST_QTY
+		     , A.RETURN_REQUEST_QTY
+		     , SUM(A.OPT_ADD_PRICE)                                               AS OPT_ADD_PRICE
+		     , (SELECT CONCAT('쿠폰번호 : ',CPN_ID,' / ',CPN_NM)
+		        FROM   TB_COUPON
+		        WHERE  CPN_ID = A.CPN1_CPN_SQ)                                    AS CPN1_CPN_DC_DESC
+		     , A.CPN1_DC_AMT
+		     , (SELECT CONCAT('쿠폰번호 : ',C.CPN_ID,' / ',C.CPN_NM)
+		        FROM   TB_CUST_COUPON CC
+		             , TB_COUPON C
+		        WHERE  CC.CPN_ID = C.CPN_ID
+		        AND    CC.CUST_NO = A.CUST_NO
+		        AND    CC.CUST_CPN_SQ = A.GOODS_CPN_SQ)                           AS GOODS_CPN_DC_DESC
+		     , A.GOODS_CPN_DC_AMT
+		     , (SELECT CONCAT('쿠폰번호 : ',C.CPN_ID,' / ',C.CPN_NM,
+		                      ' / 구매금액 ',
+		                      CASE WHEN C.BUY_LIMIT_AMT = 0 THEN '제한없음'
+		                           ELSE CONCAT(FORMAT(C.BUY_LIMIT_AMT,0),'원 이상')
+		                      END,
+		                      ' / ',
+		                      FORMAT(C.DC_PVAL,0),
+		                      CASE WHEN C.DC_WAY = 'G240_10' THEN '원'
+		                           ELSE '%'
+		                      END,
+		                      ' 할인 / 최대할인 ',
+		                      CASE WHEN C.MAX_DC_AMT = 0 THEN '제한없음'
+		                           ELSE CONCAT(FORMAT(C.MAX_DC_AMT,0),'원')
+		                      END
+		                     )
+		        FROM   TB_CUST_COUPON CC
+		             , TB_COUPON C
+		        WHERE  CC.CPN_ID = C.CPN_ID
+		        AND    CC.CUST_NO = A.CUST_NO
+		        AND    CC.CUST_CPN_SQ = A.CART_CPN_SQ)                            AS CART_CPN_DC_DESC
+		     , A.CART_CPN_DC_AMT
+		     , (SELECT CONCAT('프로모션번호 : ',TMTB_SQ,' / ',TMTB_NM) FROM TB_TMTB WHERE TMTB_SQ = A.TMTB1_SQ) AS TMTB1_DESC
+		     , A.TMTB1_DC_AMT
+		     , (SELECT CONCAT('프로모션번호 : ',TMTB_SQ,' / ',TMTB_NM) FROM TB_TMTB WHERE TMTB_SQ = A.TMTB2_SQ) AS TMTB2_DESC
+		     , A.TMTB2_DC_AMT
+		     , A.PNT_DC_AMT
+		     , A.PRE_PNT_DC_AMT
+		     , A.SAVE_PNT_AMT
+		     , A.GFCD_USE_AMT
+		     , (SELECT GROUP_CONCAT(GFCD_USE_DESC SEPARATOR '!@!') AS GFCD_USE_DESC
+		        FROM   (
+		                SELECT CONCAT(FORMAT(SUM(CGH.GFCD_AMT),0),'원 / ',CG.GFCD_NO) AS GFCD_USE_DESC
+		                FROM   TB_CUST_GIFTCARD_HST CGH
+		                     , TB_CUST_GIFTCARD CG
+		                WHERE  CGH.CUST_GFCD_SQ = CG.CUST_GFCD_SQ
+		                AND    CGH.ORD_NO = A.ORD_NO
+		                GROUP  BY CG.GFCD_NO
+		               ) Z
+		       )                                                                  AS GFCD_USE_DESC
+		     , A.ORD_AMT
+		     , A.REAL_ORD_AMT
+		     , A.CNCL_RTN_AMT
+		     , A.ORD_DTL_STAT
+		     , A.ORD_DTL_STAT_NM
+		     , A.SOLDOUT_YN
+		     , A.SOLDOUT_REG_NO
+		     , A.SOLDOUT_MEMO
+		     , A.INVOICE_NO
+		     , A.DELV_LOC_CD
+		     , A.DELV_ADDR_SQ
+		     , A.RETURNABLE_YN
+		     , A.CHANGEABLE_YN
+		     , A.DELV_FEE_CD
+		     , A.DELV_FEE_CD_GRP
+		     , A.BRAND_GROUP_NM
+		     , A.SHIP_COMP_CD
+		     , A.SHIP_COMP_NM
+		     , A.DELV_LOC_NM
+		     , A.PG_GB
+		     , A.SUPPLY_COMP_NM
+		     , CASE WHEN IFNULL((SELECT COUNT(*)
+		                         FROM   TB_GIFTCARD_RECEIPT
+		                         WHERE  ORD_NO = A.ORD_NO 
+		                         AND    TRADE_NO IS NOT NULL
+		                         AND    AUTH_NO IS NOT NULL
+		                         AND    AMT > 0
+		                        ),0) = 0 THEN 'N' ELSE 'Y' END AS GCCR_REQ_YN /*상품권현금영수증신청여부*/
+		FROM   (
+		        SELECT O.CUST_NO
+		             , OD.ORD_NO
+		             , OD.ORD_EXCH_GB
+		             , CASE WHEN OD.ORD_EXCH_GB = 'O' THEN '주문' ELSE '교환' END AS EXCH_GB_NM
+		             , OD.ORD_DTL_NO
+		             , ODI.ORD_DTL_ITEM_SQ
+		             , G1.GOODS_CD
+		             , FN_GET_GOODS_NM(G1.GOODS_NM, G1.GOODS_GB, G1.FOREIGN_BUY_YN, G1.PARALLEL_IMPORT_YN, G1.ORDER_MADE_YN) AS GOODS_NM
+		             , G1.GOODS_TYPE
+		             , FN_GET_CODE_NM('G056', G1.GOODS_TYPE)   AS GOODS_TYPE_NM
+		             , CASE WHEN G1.GOODS_TYPE != 'G056_S' AND G1.SELF_GOODS_YN = 'Y' THEN (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = ODI.OPT_CD1 AND DEFAULT_IMG_YN = 'Y')
+		                    ELSE (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG WHERE GOODS_CD = G1.GOODS_CD AND COLOR_CD = IFNULL(G1.MAIN_COLOR_CD,'XX') AND DEFAULT_IMG_YN = 'Y')
+		               END                                                        AS SYS_IMG_NM
+		             , G1.BRAND_CD
+		             , (SELECT Z.BRAND_ENM
+		                FROM   TB_BRAND Z
+		                WHERE  Z.BRAND_CD = G1.BRAND_CD)                          AS BRAND_ENM
+		             , G2.GOODS_CD                                                AS ITEM_CD
+		             , G2.GOODS_NM                                                AS ITEM_NM
+		             , IFNULL((SELECT COLOR_KNM
+		                       FROM   TB_COLOR
+		                       WHERE  COLOR_CD = IFNULL(NULLIF(ODI.OPT_CD1,''), G1.MAIN_COLOR_CD)
+		                       AND    USE_YN  = 'Y'), ODI.OPT_CD1)                AS COLOR_NM
+		             , ODI.OPT_CD
+		             , ODI.OPT_CD1
+		             , ODI.OPT_CD2
+		             , ODI.ITEM_QTY
+		             , ODI.ITEM_PRICE
+		             , OD.LIST_PRICE
+		             , OD.CURR_PRICE
+		             , OD.ORD_QTY
+		             , OD.CNCL_RTN_QTY
+		             , CASE WHEN OCD.ORD_REQ_CHG_QTY IS NULL THEN 0
+		                    ELSE OCD.ORD_REQ_CHG_QTY
+		               END                                                        AS ORD_REQ_CHG_QTY
+		             , CASE WHEN OCD.CANCEL_REQUEST_QTY IS NULL THEN 0
+		                    ELSE OCD.CANCEL_REQUEST_QTY
+		               END                                                        AS CANCEL_REQUEST_QTY
+		             , CASE WHEN OCD.EXCHANGE_REQUEST_QTY IS NULL THEN 0
+		                    ELSE OCD.EXCHANGE_REQUEST_QTY
+		               END                                                        AS EXCHANGE_REQUEST_QTY
+		             , CASE WHEN OCD.RETURN_REQUEST_QTY IS NULL THEN 0
+		                    ELSE OCD.RETURN_REQUEST_QTY
+		               END                                                        AS RETURN_REQUEST_QTY
+		             , ODI.OPT_ADD_PRICE
+		             , OD.CPN1_CPN_SQ
+		             , OD.CPN1_DC_AMT
+		             , OD.GOODS_CPN_SQ
+		             , OD.GOODS_CPN_DC_AMT
+		             , OD.CART_CPN_SQ
+		             , OD.CART_CPN_DC_AMT
+		             , OD.TMTB1_SQ
+		             , OD.TMTB1_DC_AMT
+		             , OD.TMTB2_SQ
+		             , OD.TMTB2_DC_AMT
+		             , OD.PNT_DC_AMT
+		             , OD.PRE_PNT_DC_AMT
+		             , OD.SAVE_PNT_AMT
+		             , OD.GFCD_USE_AMT
+		             , OD.ORD_AMT
+		             , OD.REAL_ORD_AMT
+		             , OD.CNCL_RTN_AMT
+		             , OD.ORD_DTL_STAT
+		             , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)                    AS ORD_DTL_STAT_NM
+		             , OD.SOLDOUT_YN
+		             , OD.SOLDOUT_REG_NO
+		             , OD.SOLDOUT_MEMO
+		             , OD.INVOICE_NO
+		             , OD.DELV_LOC_CD
+		             , OD.DELV_ADDR_SQ
+		             , OD.RETURNABLE_YN
+		             , OD.CHANGEABLE_YN
+		             , OD.DELV_FEE_CD
+		             , CASE WHEN G1.SELF_GOODS_YN = 'Y' THEN 'WMS'
+		                    ELSE OD.DELV_FEE_CD
+		               END                                                        AS DELV_FEE_CD_GRP
+		             , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM
+		                    ELSE BG.BRAND_GROUP_KNM
+		               END                                                        AS BRAND_GROUP_NM
+		             , OD.SHIP_COMP_CD
+		             , (SELECT SHIP_COMP_NM
+		                FROM   TB_SHIP_COMPANY SC
+		                WHERE  SC.SHIP_COMP_CD = OD.SHIP_COMP_CD)                 AS SHIP_COMP_NM
+		             , (SELECT DL.DELV_LOC_NM
+		                FROM   TB_DELIVERY_LOC DL
+		                WHERE  DL.DELV_LOC_CD = OD.DELV_LOC_CD
+		                AND    DL.USE_YN = 'Y'
+		                LIMIT  1)                                                 AS DELV_LOC_NM
+		             , P.PG_GB
+		             , (SELECT Z.SUPPLY_COMP_NM
+		                FROM   TB_SUPPLY_COMPANY Z
+		                WHERE  Z.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD)              AS SUPPLY_COMP_NM
+		        FROM   TB_ORDER O
+		        INNER JOIN TB_ORDER_DETAIL OD
+		           ON O.ORD_NO = OD.ORD_NO
+		        INNER JOIN TB_GOODS G1
+		           ON OD.GOODS_CD = G1.GOODS_CD
+		        INNER JOIN TB_BRAND B
+		           ON B.BRAND_CD = G1.BRAND_CD
+		        INNER JOIN TB_BRAND_GROUP BG
+		           ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		          AND BG.USE_YN = 'Y'
+		        INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+		           ON OD.ORD_NO = ODI.ORD_NO
+		          AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		        INNER JOIN TB_GOODS G2
+		           ON ODI.ITEM_CD = G2.GOODS_CD
+		        INNER JOIN TB_PAYMENT P
+		           ON O.ORD_NO = P.ORD_NO
+		          AND P.PAY_GB = 'O'
+		          AND P.PAY_STAT IN ('G016_10', 'G016_30')
+		        INNER JOIN TB_DELIVERY_ADDR DA
+		           ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		        LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
+		                              , SUM(CASE OC.WD_BF_SEND_YN
+		                                         WHEN 'Y' THEN 0
+		                                         ELSE OCD.CHG_QTY
+		                                    END) AS ORD_REQ_CHG_QTY
+		                              , SUM(CASE OCD.CHG_STAT
+		                                         WHEN 'G685_10' THEN OCD.CHG_QTY
+		                                         WHEN 'G685_11' THEN OCD.CHG_QTY
+		                                         ELSE 0
+		                                    END) AS CANCEL_REQUEST_QTY
+		                              , SUM(CASE WHEN OCD.CHG_STAT = 'G685_20' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_21' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_30' AND OC.CHG_GB = 'G680_40' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_31' AND OC.CHG_GB = 'G680_40' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_32' AND OC.CHG_GB = 'G680_40' THEN OCD.CHG_QTY
+		                                         ELSE 0
+		                                    END) AS EXCHANGE_REQUEST_QTY
+		                              , SUM(CASE WHEN OCD.CHG_STAT = 'G685_50' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_51' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_33' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_30' AND OC.CHG_GB = 'G680_30' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_31' AND OC.CHG_GB = 'G680_30' THEN OCD.CHG_QTY
+		                                         WHEN OCD.CHG_STAT = 'G685_32' AND OC.CHG_GB = 'G680_30' THEN OCD.CHG_QTY
+		                                         ELSE 0
+		                                    END) AS RETURN_REQUEST_QTY
+		                         FROM   TB_ORDER_CHANGE_DETAIL OCD
+		                         INNER JOIN TB_ORDER_CHANGE OC
+		                            ON OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ
+		                         INNER JOIN TB_ORDER_DETAIL OD
+		                            ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+		                         WHERE 1 = 1
+		                           AND OD.ORD_NO =  6005 /**P*/
+		                           AND OCD.CHG_STAT IN ('G685_10', 'G685_11', 'G685_20', 'G685_21', 'G685_30', 'G685_31', 'G685_32', 'G685_33', 'G685_50', 'G685_51')
+		                           AND OCD.DEL_YN = 'N'
+		                         GROUP BY OCD.ORD_DTL_NO
+		                        ) OCD
+		                     ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		        WHERE 1 = 1
+		          AND OD.ORD_NO =  6005 /**P*/
+		          AND OD.ORD_DTL_STAT NOT IN ('G013_00', 'G013_25', 'G013_97')
+		       ) A
+		GROUP  BY A.ORD_NO
+		     , A.ORD_EXCH_GB
+		     , A.EXCH_GB_NM
+		     , A.ORD_DTL_NO
+		     , A.GOODS_CD
+		     , A.GOODS_NM
+		     , A.GOODS_TYPE
+		     , A.GOODS_TYPE_NM
+		     , A.SYS_IMG_NM
+		     , A.BRAND_ENM
+		     , A.LIST_PRICE
+		     , A.CURR_PRICE
+		     , A.ORD_QTY
+		     , A.CNCL_RTN_QTY
+		     , A.ORD_REQ_CHG_QTY
+		     , A.CANCEL_REQUEST_QTY
+		     , A.EXCHANGE_REQUEST_QTY
+		     , A.RETURN_REQUEST_QTY
+		     , A.CPN1_DC_AMT
+		     , A.GOODS_CPN_DC_AMT
+		     , A.CART_CPN_DC_AMT
+		     , A.TMTB1_DC_AMT
+		     , A.TMTB2_DC_AMT
+		     , A.PNT_DC_AMT
+		     , A.PRE_PNT_DC_AMT
+		     , A.SAVE_PNT_AMT
+		     , A.GFCD_USE_AMT
+		     , A.ORD_AMT
+		     , A.REAL_ORD_AMT
+		     , A.CNCL_RTN_AMT
+		     , A.ORD_DTL_STAT
+		     , A.ORD_DTL_STAT_NM
+		     , A.SOLDOUT_YN
+		     , A.SOLDOUT_REG_NO
+		     , A.SOLDOUT_MEMO
+		     , A.INVOICE_NO
+		     , A.DELV_LOC_CD
+		     , A.DELV_ADDR_SQ
+		     , A.RETURNABLE_YN
+		     , A.CHANGEABLE_YN
+		     , A.DELV_FEE_CD
+		     , A.DELV_FEE_CD_GRP
+		     , A.BRAND_GROUP_NM
+		     , A.SHIP_COMP_CD
+		     , A.SHIP_COMP_NM
+		     , A.DELV_LOC_NM
+		     , A.PG_GB
+		     , A.SUPPLY_COMP_NM
+		 ORDER BY A.ORD_NO
+		     , A.ORD_DTL_NO
+;
+
+SELECT OD.*
+FROM   TB_ORDER O
+-- WHERE  ORD_NO = 353 2223
+INNER JOIN TB_ORDER_DETAIL OD
+       ON O.ORD_NO = OD.ORD_NO
+    INNER JOIN TB_GOODS G1
+       ON OD.GOODS_CD = G1.GOODS_CD
+    INNER JOIN TB_BRAND B
+       ON B.BRAND_CD = G1.BRAND_CD
+    INNER JOIN TB_BRAND_GROUP BG
+       ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+      AND BG.USE_YN = 'Y'
+    INNER JOIN TB_ORDER_DETAIL_ITEM ODI
+       ON OD.ORD_NO = ODI.ORD_NO
+      AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+    INNER JOIN TB_GOODS G2
+       ON ODI.ITEM_CD = G2.GOODS_CD
+    INNER JOIN TB_PAYMENT P
+       ON O.ORD_NO = P.ORD_NO
+      AND P.PAY_GB = 'O'
+      AND P.PAY_STAT IN ('G016_10', 'G016_30')
+    INNER JOIN TB_DELIVERY_ADDR DA
+       ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+WHERE  1 = 1
+AND    OD.GOODS_CPN_SQ IS NOT NULL
+AND    OD.GOODS_CPN_SQ > 0
+AND    OD.CART_CPN_SQ IS NOT NULL
+AND    OD.CART_CPN_SQ > 0
+-- AND    TMTB1_SQ > 0
+AND    OD.ORD_DTL_STAT = 'G013_20'
+-- AND    OD.GOODS_CPN_SQ IN (SELECT CPN_ID FROM TB_COUPON WHERE CPN_TYPE = 'G230_11')
+-- AND    OD.CART_CPN_SQ IN (SELECT CPN_ID FROM TB_COUPON WHERE CPN_TYPE = 'G230_20')
+;
+
+SELECT *
+FROM   TB_COMMON_CODE
+WHERE  CD_GB = 'G230'
+;
+
+SELECT *
+FROM   TB_COUPON
+WHERE  CPN_TYPE IN ('G230_11','G230_20')
+;
+
+SELECT *
+FROM   TB_CUST_COUPON
+;
+
+SELECT *
+FROM   TB_ORDER
+;
+
+-- G230_10	즉시할인쿠폰
+-- G230_11	상품쿠폰
+-- G230_12	브랜드쿠폰
+-- G230_13	카테고리쿠폰
+-- G230_14	공급처쿠폰
+-- G230_20	주문서쿠폰
+-- G230_30	배송비쿠폰
+
+/* order.getOrderGiftcardHstList */
+SELECT GROUP_CONCAT(GFCD_USE_DESC SEPARATOR '!@!')
+FROM   (
+		SELECT CONCAT(FORMAT(SUM(CGH.GFCD_AMT),0),'원 / ',CG.GFCD_NO) AS GFCD_USE_DESC
+		  FROM TB_ORDER_DETAIL OD
+		 INNER JOIN TB_CUST_GIFTCARD_HST CGH
+		    ON OD.ORD_DTL_NO = CGH.ORD_DTL_NO
+		   AND OD.ORD_NO = CGH.ORD_NO
+		 INNER JOIN TB_CUST_GIFTCARD CG
+		    ON CGH.CUST_GFCD_SQ = CG.CUST_GFCD_SQ
+		 WHERE OD.ORD_NO =  1433 /**P*/
+		 GROUP  BY CG.GFCD_NO
+) Z
+		   ;
+		   
+SELECT ORD_NO, ORD_DTL_NO, COUNT(DISTINCT CUST_GFCD_SQ) AS CNT
+FROM   TB_CUST_GIFTCARD_HST
+GROUP  BY ORD_NO, ORD_DTL_NO
+HAVING COUNT(DISTINCT CUST_GFCD_SQ) > 1
+;
+
+SELECT *
+FROM   TB_COMMON_CODE
+WHERE  CD_GB = 'G016'
+;
+
+/* order.getDeliveryFeeList */
+		SELECT Z.*
+		  FROM (
+		        SELECT DF.DELV_FEE_GB
+		             , FN_GET_CODE_NM('G018', DF.DELV_FEE_GB)       AS DELV_FEE_GB_NM
+		             , DF.DELV_FEE
+		             , DF.REAL_DELV_AMT
+		             , DF.DELV_USAC_YN
+		             , DATE_FORMAT(DF.DELV_USAC_DT, '%Y%m%d%H%i%S') AS DELV_USAC_DT
+		             , DF.SUPPLY_COMP_CD
+		             , DF.DELV_FEE_SQ
+		             , DF.DELV_CPN_SQ
+		             , DF.DELV_CPN_DC_AMT
+		             , DF.DELV_GFCD_USE_AMT
+		             , DF.DELV_FEE_CD
+		             , CASE WHEN DF.DELV_FEE_CD IN ('WMS')
+		                    THEN '자사'
+		                    ELSE (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY X WHERE X.SUPPLY_COMP_CD = DF.SUPPLY_COMP_CD)
+		                    END  SUPPLY_COMP_NM
+		          FROM TB_DELIVERY_FEE DF
+		         WHERE 1 = 1
+		           AND DF.ORD_NO =  6005 /**P*/
+		           AND DF.DELV_FEE_GB = 'G018_10' /*원주문배송비*/
+		        UNION  ALL
+		        SELECT DF.DELV_FEE_GB
+		             , FN_GET_CODE_NM('G018', DF.DELV_FEE_GB)       AS DELV_FEE_GB_NM
+		             , DF.DELV_FEE
+		             , DF.REAL_DELV_AMT
+		             , DF.DELV_USAC_YN
+		             , DATE_FORMAT(DF.DELV_USAC_DT, '%Y%m%d%H%i%S') AS DELV_USAC_DT
+		             , DF.SUPPLY_COMP_CD
+		             , DF.DELV_FEE_SQ
+		             , DF.DELV_CPN_SQ
+		             , DF.DELV_CPN_DC_AMT
+		             , DF.DELV_GFCD_USE_AMT
+		             , DF.DELV_FEE_CD
+		             , CASE WHEN DF.DELV_FEE_CD IN ('WMS')
+		                    THEN '자사'
+		                    ELSE (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY X WHERE X.SUPPLY_COMP_CD = DF.SUPPLY_COMP_CD)
+		                    END  SUPPLY_COMP_NM
+		          FROM TB_DELIVERY_FEE DF
+		         WHERE 1 = 1
+		           AND DF.ORD_NO =  6005 /**P*/
+		           AND EXISTS (SELECT 1
+		                        FROM TB_ORDER_CHANGE_DETAIL OCD
+		                       WHERE DF.ORD_CHG_SQ = OCD.ORD_CHG_SQ
+		                         AND OCD.CHG_STAT IN ('G685_40', 'G685_60'))
+		  ) Z
+		 GROUP BY Z.DELV_FEE_GB
+		        , Z.DELV_FEE_GB_NM
+		        , Z.DELV_FEE
+		        , Z.REAL_DELV_AMT
+		        , Z.DELV_USAC_YN
+		        , Z.DELV_USAC_DT
+		        , Z.SUPPLY_COMP_CD
+		        , Z.SUPPLY_COMP_NM
+		        , Z.DELV_FEE_SQ
+		        , Z.DELV_CPN_SQ
+		        , Z.DELV_CPN_DC_AMT
+		        , Z.DELV_GFCD_USE_AMT
+		        , Z.DELV_FEE_CD
+;
+
+/* order.getOrderPaymentBasicInfoList */
+		SELECT P.ESCROW_YN
+		     , CASE WHEN O.MALL_GB IN ('G011_20')
+		            THEN ''
+		            ELSE P.PG_GB
+		            END PG_GB
+		     , CASE WHEN O.MALL_GB IN ('G011_20')
+		            THEN ''
+		            ELSE P.PAY_MEANS
+		            END  PAY_MEANS
+		     , CASE WHEN O.MALL_GB IN ('G011_20')
+		            THEN ''
+		            ELSE FN_GET_CODE_NM('G014', P.PAY_MEANS)
+		            END  PAY_MEANS_NM
+		     , CASE WHEN P.PAY_MEANS IN ('G014_20')
+		            THEN P.VA_BANK
+		            ELSE ''
+		            END  VA_BANK
+		     , CASE WHEN P.PAY_MEANS = 'G014_20' THEN FN_GET_CODE_NM('G940', P.VA_BANK)
+		            WHEN P.PAY_MEANS = 'G014_10' THEN ''
+		            ELSE P.CARD_NM
+		        END		                    CARD_NM
+		     , P.PG_TRADE_NO
+		     , P.PG_TID
+		     , P.VA_NO
+		     , DATE_FORMAT(P.PAY_DT, '%Y%m%d%H%i%S')      AS PAY_DT
+		     , P.PAY_STAT
+		     , FN_GET_CODE_NM('G016', P.PAY_STAT)         AS PAY_STAT_NM
+		     , P.PAY_AMT
+		     , P.PG_CPN_AMT
+		     , P.NPAY_PNT_AMT
+		     , DATE_FORMAT(P.VA_DEADLINE, '%Y-%m-%d') AS VA_DEADLINE
+		     , CARD_MIPS
+		     , CARD_TYPE
+		     , CASH_AUTH_NO
+		     , CASH_TRADE_NO
+		  FROM TB_PAYMENT P
+		 INNER JOIN TB_ORDER O
+		    ON P.ORD_NO = O.ORD_NO
+		 WHERE 1 = 1
+		   AND P.ORD_NO =  169 /**P*/
+		   AND P.PAY_STAT IN ('G016_30', 'G016_10') /*결제완료,무통장입금관련*/
+		 ORDER BY P.REG_DT
+		 ;
+
+-- G016_00	결제대기
+-- G016_10	무통장입금전
+-- G016_30	결제완료
+-- G016_97	결제성공후DB실패
+-- G016_98	결제전취소
+-- G016_99	결제취소
+
+SELECT *
+FROM   TB_PAYMENT
+WHERE  ORD_NO = 169
+;
+
+SELECT ORD_NO, COUNT(*) AS CNT
+FROM   TB_PAYMENT
+GROUP  BY ORD_NO
+HAVING COUNT(*) > 1
+;
+
+SELECT CASE WHEN P.PG_GB = 'KCP' THEN FN_GET_CODE_NM('G014', P.PAY_MEANS)
+            WHEN P.PG_GB = 'NAVER' THEN '네이버페이'
+            WHEN P.PG_GB = 'NAVER_ORDER' THEN '네이버페이주문형'
+            WHEN P.PG_GB = 'KAKAO' THEN '카카오페이'
+            ELSE ''
+       END           AS PAY_MEANS_NM  /*결제수단명*/
+     , CASE WHEN P.PG_GB = 'KCP' THEN
+                CASE WHEN P.PAY_MEANS = 'G014_10' THEN CONCAT(FN_GET_CODE_NM('G940',P.VA_BANK),' / ',P.VA_NO)
+                     WHEN P.PAY_MEANS = 'G014_20' THEN CONCAT(FN_GET_CODE_NM('G940',P.VA_BANK),' / ',P.VA_NO,' / ',P.VA_NM,' / ',DATE_FORMAT(P.VA_DEADLINE,'%Y-%m-%d %H:%i:%S'))
+                     WHEN P.PAY_MEANS = 'G014_30' THEN CONCAT(P.CARD_NM,' / ',CASE WHEN CAST(P.CARD_MIPS AS UNSIGNED) = 0 THEN '일시불' ELSE CONCAT(CAST(P.CARD_MIPS AS UNSIGNED),'개월') END)
+                     ELSE ''
+                END
+            WHEN P.PG_GB IN ('NAVER','KAKAO') THEN
+                CASE WHEN P.PAY_MEANS = 'G014_10' THEN CONCAT(FN_GET_CODE_NM('G940',P.VA_BANK),' / ',P.VA_NO)
+                     WHEN P.PAY_MEANS = 'G014_30' THEN CONCAT(P.CARD_NM,' / ',CASE WHEN CAST(P.CARD_MIPS AS UNSIGNED) = 0 THEN '일시불' ELSE CONCAT(CAST(P.CARD_MIPS AS UNSIGNED),'개월') END)
+                     ELSE ''
+                END
+       END           AS PAY_MEANS_DESC /*결제수단설명*/
+     , PG_CPN_AMT                      /*PG쿠폰금액*/
+     , NPAY_PNT_AMT                    /*네이버페이포인트금액(마일리지)*/
+     , CASE WHEN CASH_AUTH_NO IS NOT NULL AND CASH_TRADE_NO IS NOT NULL THEN 'Y'
+            ELSE 'N'
+       END           AS CASH_RECEIP_REQ_YN /*현금영수증신청여부*/
+FROM   TB_PAYMENT P
+WHERE  P.ORD_NO = 6005
+AND    P.PAY_GB = 'O' /*주문시결제*/
+AND    P.PAY_STAT IN ('G016_30','G016_10') /*결제완료,무통장입금관련*/
+;
+
+style24-core Order.java
+private Integer ordNo;
+private int ordCurrAmt;			/*주문상품금액*/
+private int realDelvAmt;		/*실배송비금액*/
+private String delvFeeDesc;		/*배송비설명*/
+private String delvFeeCpnDesc;	/*배송비쿠폰설명*/
+private int totDcAmt;			/*총할인금액*/
+private int cpn1DcAmt;			/*즉시할인쿠폰금액*/
+private String cpn1CpnDcDesc;	/*즉시할인쿠폰설명*/
+private int tmtbDcAmt;			/*다다익선인금액*/
+private int tmtb1DcAmt;			/*다다익선수량할인금액*/
+private String tmtb1Desc;		/*다다익선수량할인설명*/
+private int tmtb2DcAmt;			/*다다익선금액할인금액*/
+private String tmtb2Desc;		/*다다익선금액할인설명*/
+private int goodsCpnDcAmt;		/*상품쿠폰할인금액*/
+private String goodsCpnDcDesc;	/*상품쿠폰할인설명*/
+private int cartCpnDcAmt;		/*장바구니쿠폰할인금액*/
+private String cartCpnDcDesc;	/*장바구니쿠폰할인설명*/
+private int prePntDcAmt;		/*선포인트할인금액*/
+private int totPayAmt;			/*총결제금액*/
+private int realOrdAmt;			/*실결제금액*/
+private String payMeansNm;		/*결제수단명*/
+private String payMeansDesc;	/*결제수단설명*/
+private int gfcdUseAmt;			/*상품권사용금액*/
+private String gfcdUseDesc;		/*상품권사용설명*/
+private int pntDcAmt;			/*포인트할인금액*/
+private int pgCpnAmt;			/*PG쿠폰금액(KCP쿠폰금액)*/
+private int npayPntAmt;			/*네이버페이포인트금액(마일리지)*/
+private int savePntAmt;			/*적립포인트금액*/
+private String cashReceipReqYn;	/*현금영수증신청여부*/
+
+
+<h4>주문결제내역</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col width="10%"/>
+						<col width="10%"/>
+						<col width="20%"/>
+						<col width="10%"/>
+						<col width="10%"/>
+						<col/>
+					</colgroup>
+					<thead>
+						<tr>
+							<th>구분</th>
+							<th>합계</th>
+							<th>내역</th>
+							<th>구분</th>
+							<th>합계</th>
+							<th>내역</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<th>총결제금액(A+B+C)</th>
+							<td class="totalPayAmt"></td>
+							<td></td>
+							<th>주문금액(A)</th>
+							<td class="currSumAmt"></td>
+							<td></td>
+						</tr>
+						<tr>
+							<th class="pgGbNm"></th>
+							<td class="realOrdSumAmt"></td>
+							<td class="payMeansDesc"></td>
+							<th>배송비 합산(B)</th>
+							<td class="realDelvSumAmt"></td>
+							<td>
+								<ul class="notice">
+									<li>배송비 : <span class="delvSumAmt"></span></li>
+									<li>배송비 쿠폰 : <span class="delvCpnDcAmt"></span></li>
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>상품권</th>
+							<td class="gfcdUseSumAmt"></td>
+							<td>
+								<ul class="notice gfcdUseDesc">
+								</ul>
+							</td>
+							<th>할인금액 총합(C)</th>
+							<td class="cRed totDcAmt"></td>
+							<td></td>
+						</tr>
+						<tr>
+							<th>포인트</th>
+							<td class="pntDcSumAmt"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;즉시할인쿠폰</th>
+							<td class="cRed cpn1DcSumAmt"></td>
+							<td>
+								<ul class="notice cpn1CpnDcDesc">
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>KCP쿠폰</th>
+							<td class="allianceDcAmt"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;다다익선할인</th>
+							<td class="tmtbDcSumAmt"></td>
+							<td>
+								<ul class="notice tmtbDcDesc">
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>마일리지</th>
+							<td class="mileageDcAmt"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;상품쿠폰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
+							<td class="cRed goodsCpnDcSumAmt"></td>
+							<td>
+								<ul class="notice goodsCpnDcDesc">
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>적립포인트</th>
+							<td class="savePntSumAmt"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;장바구니쿠폰</th>
+							<td class="cRed cartCpnDcSumAmt"></td>
+							<td>
+								<ul class="notice cartCpnDcDesc">
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>현금영수증신청여부</th>
+							<td class="gccrReqYn"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;선포인트할인</th>
+							<td class="cRed prePntDcSumAmt"></td>
+							<td></td>
+						</tr>
+					</tbody>
+				</table>
+				
+
+
+				
+				

+ 2051 - 0
산출물/4.구축/데이터추출/OrderDetailForm.html

@@ -0,0 +1,2051 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderDetailForm.html
+ * @desc    : 주문상세화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+ 
+<div class="modalPopup" data-width="1500" data-height="700"> <!-- data-width="1500" data-height="870" -->
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>주문상세내역</h2>
+			<button type="button" class="close" onclick="fnOrderDetailClose()"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="orderDetailInfo" name="orderDetailInfo" action="#" th:method="post">
+				<input type="hidden" name="custNo"/>
+				<input type="hidden" name="orderNm"/>
+				<input type="hidden" name="orderPhnno"/>
+				<input type="hidden" name="orderEmail"/>
+				
+				<h4>기본정보</h4>
+				<!-- TABLE -->
+				<table class="tableStyle">
+					<colgroup>
+						<col width="6%"/>
+						<col width="6%"/>
+						<col width="10%"/>
+						<col width="10%"/>
+						<col width="6%"/>
+						<col width="14%"/>
+						<col width="7%"/>
+						<col width="9%"/>
+						<col width="12%"/>
+						<col width="6%"/>
+						<col width="8%"/>
+						<col width="6%"/>
+					</colgroup>
+					<thead>
+						<tr>
+<!-- 							<th>사이트</th> -->
+							<th>몰구분</th>
+							<th>웹구분</th>
+							<th>제휴몰</th>
+							<th>주문일시</th>
+							<th>주문번호</th>
+							<th>제휴몰주문번호</th>
+							<th>주문자</th>
+							<th>휴대폰번호</th>
+							<th>이메일</th>
+							<th>고객번호</th>
+							<th>네이버주문형</th>
+<!-- 							<th>회원구분</th> -->
+<!-- 							<th>관리대상</th> -->
+							<th>등급</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+<!-- 							<td th:text="${orderInfo[0].siteCdNm}"></td> -->
+							<td th:text="${orderInfo[0].mallGbNm}"></td>
+							<td th:text="${orderInfo[0].frontGbNm}"></td>
+							<td th:text="${orderInfo[0].extmallNm}"></td>
+							<td th:text="${orderInfo[0].ordDt}"></td>
+							<td th:text="${orderInfo[0].ordNo}"></td>
+							<td th:text="${orderInfo[0].extmallOrderId}"></td>
+							<td th:text="${orderInfo[0].ordNm}"></td>
+							<td>
+								<a href="script:void(0)" class="lmsPop" th:attr="orderPhnno=${orderInfo[0].ordPhnno}"><th:block th:text="${orderInfo[0].ordPhnno}"></th:block></a>
+							</td>
+							<td th:text="${orderInfo[0].ordEmail}"></td>
+							<td>
+								<th:block th:if="${orderInfo[0].custNo} > 0">
+									<a href="script:void(0)" class="custDetailPop" th:attr="custNo=${orderInfo[0].custNo}"><th:block th:text="${orderInfo[0].custNo}"></th:block></a>
+								</th:block>
+								<th:block th:unless="${orderInfo[0].custNo} > 0">
+									<th:block th:text="${orderInfo[0].custNo}"></th:block>
+								</th:block>
+							</td>
+							<td th:text="${not #strings.isEmpty(orderInfo[0].npayOrdNo) ? 'Y' : 'N'}"></td>
+<!-- 							<td th:text="${orderInfo[0].custGbNm}"></td> -->
+<!-- 							<td th:text="${orderInfo[0].managedRsnNm}"></td> -->
+							<td th:text="${orderInfo[0].custGradeNm}"></td>
+						</tr>
+					</tbody>
+				</table>
+				<!-- //TABLE -->
+
+				<h4>주문결제내역</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col width="10%"/>
+						<col width="10%"/>
+						<col width="20%"/>
+						<col width="10%"/>
+						<col width="10%"/>
+						<col/>
+					</colgroup>
+					<thead>
+						<tr>
+							<th>구분</th>
+							<th>합계</th>
+							<th>내역</th>
+							<th>구분</th>
+							<th>합계</th>
+							<th>내역</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<th>총결제금액(A+B+C)</th>
+							<td class="totalPayAmt"></td>
+							<td></td>
+							<th>주문금액(A)</th>
+							<td class="currSumAmt"></td>
+							<td></td>
+						</tr>
+						<tr>
+							<th class="pgGbNm"></th>
+							<td class="realOrdSumAmt"></td>
+							<td class="payMeansDesc"></td>
+							<th>배송비 합산(B)</th>
+							<td class="realDelvSumAmt"></td>
+							<td>
+								<ul class="notice">
+									<li>배송비 : <span class="delvSumAmt"></span></li>
+									<li>배송비 쿠폰 : <span class="delvCpnDcAmt"></span></li>
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>상품권</th>
+							<td class="gfcdUseSumAmt"></td>
+							<td>
+								<ul class="notice gfcdUseDesc">
+								</ul>
+							</td>
+							<th>할인금액 총합(C)</th>
+							<td class="cRed totDcAmt"></td>
+							<td></td>
+						</tr>
+						<tr>
+							<th>포인트</th>
+							<td class="pntDcSumAmt"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;즉시할인쿠폰</th>
+							<td class="cRed cpn1DcSumAmt"></td>
+							<td>
+								<ul class="notice cpn1CpnDcDesc">
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>KCP쿠폰</th>
+							<td class="allianceDcAmt"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;다다익선할인</th>
+							<td class="tmtbDcSumAmt"></td>
+							<td>
+								<ul class="notice tmtbDcDesc">
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>마일리지</th>
+							<td class="mileageDcAmt"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;상품쿠폰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
+							<td class="cRed goodsCpnDcSumAmt"></td>
+							<td>
+								<ul class="notice goodsCpnDcDesc">
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>적립포인트</th>
+							<td class="savePntSumAmt"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;장바구니쿠폰</th>
+							<td class="cRed cartCpnDcSumAmt"></td>
+							<td>
+								<ul class="notice cartCpnDcDesc">
+								</ul>
+							</td>
+						</tr>
+						<tr>
+							<th>현금영수증신청여부</th>
+							<td class="gccrReqYn"></td>
+							<td></td>
+							<th><i class="fa fa-level-up fa-rotate-90" aria-hidden="true"></i>&nbsp;선포인트할인</th>
+							<td class="cRed prePntDcSumAmt"></td>
+							<td></td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<table class="frmStyle">
+					<colgroup>
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+					</colgroup>
+					<thead>
+						<tr>
+							<th style="height:30px;">구분</th>
+							<th style="height:30px;">항목</th>
+							<th style="height:30px;">합계</th>
+							<th style="height:30px;">내역</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td style="height:25px;">상품금액</td>
+							<td>총상품금액</td>
+							<td class="listSumAmt">15,000원</td>
+							<td></td>
+						</tr>
+						<tr>
+							<td style="height:25px;">배송비</td>
+							<td>배송비합계</td>
+							<td class="realDelvSumAmt">15,000원</td>
+							<td style="line-height:25px;">
+								<div style="height:25px;"><span>배송비 : </span><span class="delvSumAmt">-60,000원</span></div>
+								<div style="height:25px;"><span>배송비쿠폰 : </span><span class="delvCpnDcAmt">-60,000원</span></div>
+							</td>
+						</tr>
+						<tr>
+							<td style="height:25px;">상품할인</td>
+							<td>총상품할인금액</td>
+							<td class="goodsDcSumAmt">15,000원</td>
+							<td></td>
+						</tr>
+						<tr>
+							<td rowspan="4">할인내역</td>
+							<td>즉시할인</td>
+							<td class="cpn1DcSumAmt">-60,000원</td>
+							<td></td>
+						</tr>
+						<tr>
+							<td>다다익선할인</td>
+							<td class="tmtbDcSumAmt">-60,000원</td>
+							<td style="line-height:25px;">
+								<div style="height:25px;"><span>수량할인금액 : </span><span class="tmtb1DcSumAmt">-60,000원</span></div>
+								<div style="height:25px;"><span>금액할인금액 : </span><span class="tmtb2DcSumAmt">-60,000원</span></div>
+							</td>
+						</tr>
+						<tr>
+							<td>쿠폰할인</td>
+							<td class="cpnDcSumAmt">-60,000원</td>
+							<td style="line-height:25px;">
+								<div style="height:25px;"><span>주문서상품쿠폰 : </span><span class="goodsCpnDcSumAmt">-60,000원</span></div>
+								<div style="height:25px;"><span>장바구니쿠폰 : </span><span class="cartCpnDcSumAmt">-60,000원</span></div>
+							</td>
+						</tr>
+						<tr>
+							<td>선포인트할인</td>
+							<td class="prePntDcSumAmt">-60,000원</td>
+							<td></td>
+						</tr>
+						
+						
+						<tr>
+							<td rowspan="5">총결제금액</td>
+							<td style="height:25px;">총 매출액</td>
+							<td class="totalPayAmt">70,000원</td>
+							<td class="savePntSumAmt">15,000P 적립</td>
+						</tr>
+						<tr>
+							<td style="height:25px;">실결제액</td>
+							<td class="realOrdSumAmt">70,000원</td>
+							<td>
+								<span class="pgGbNm">신용카드</span><span class="cardNm">(현대)</span>
+							</td>
+						</tr>
+						<tr>
+							<td style="line-height:25px;">
+								<div style="height:25px;">제휴할인결제액</div>
+								<div style="height:25px;">(KCP쿠폰+포인트)</div>
+							</td>
+							<td class="pgDcSumAmt">70,000원</td>
+							<td style="line-height:25px;">
+								<div style="height:25px;"><span>제휴쿠폰 : </span><span class="allianceDcAmt">-60,000원</span></div>
+								<div style="height:25px;"><span>마일리지 : </span><span class="mileageDcAmt">-60,000원</span></div>
+							</td>
+						</tr>
+						<tr>
+							<td style="height:25px;">포인트 결제액</td>
+							<td class="pntDcSumAmt">70,000P</td>
+							<td></td>
+						</tr>
+						<tr>
+							<td style="height:25px;">상품권 결제액</td>
+							<td class="gfcdUseSumAmt">70,000원</td>
+							<td></td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<h4>주문상품정보</h4>
+				<button type="button" class="btn btnRight btn-base btn-sm" id="btnAllCncl" style="margin-left:10px;" >입금대기전체취소</button>
+				<div id="gridOrderGoodsInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+				
+				<div id="wrapOrderFregift">
+					<h4>주문사은품정보</h4>
+					<!-- <button type="button" class="btn btnRight btn-base btn-sm off" id="btnFreeGiftCancel" style="margin-left:10px;" >사은품취소</button> -->
+					<div id="gridOrderFreeGiftInfo" style="width:100%; height:120px;" class="ag-theme-balham"></div>
+				</div>
+				
+				<h4>배송정보</h4>
+				<div id="gridDeliveryAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+				
+				<h4>배송비정보</h4>
+				<div id="gridDeliveryFeeInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+				
+				<h4>결제정보</h4>
+				<div id="gridPaymentInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+
+				<div id="wrapOrderChange">
+					<h4>(취소/반품/교환) 요청 정보</h4>
+					<div id="gridOrderChangeInfo" style="width:100%; height: 180px; min-height:99px;" class="ag-theme-balham"></div>
+				</div>
+
+				<div id="wrapRefund">
+					<h4>환불정보</h4>
+					<div id="gridOrderRefundInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+				</div>
+				
+				<div>
+					<h4>관리자메모</h4>
+					<button type="button" id="btnCreateOrderMemo" class="btn btnRight btn-base btn-sm" style="margin-left:10px;"> +</button>
+					<div id="gridOrderMemoInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+				</div>
+				
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+var ordNo 					= [[${ordNo}]];							// 주문번호
+var userNo 					= [[${userNo}]];						// 관리자번호
+
+var orderInfo 				= [[${orderInfo}]];						// 기본정보
+var orderGoodsInfo 			= [[${orderGoodsInfo}]];				// 주문상세정보
+var orderFreeGiftInfo 		= [[${orderFreeGiftInfo}]];				// 주문사은품정보
+var orderDeliveryAddrInfo	= [[${orderDeliveryAddrInfo}]];			// 배송정보
+var orderPaymentInfo 		= [[${orderPaymentInfo}]];				// 결제정보
+var orderDeliveryFeeInfo 	= [[${orderDeliveryFeeInfo}]];			// 배송비정보
+var orderChangeInfo 		= [[${orderChangeInfo}]];				// 취소/반품/교환요청 정보
+var orderRefundInfo 		= [[${orderRefundInfo}]];				// 환불정보
+var orderCounselInfo 		= [[${orderCounselInfo}]];				// 상담내역
+var orderAdminMemoInfo 		= [[${orderAdminMemoInfo}]];			// 관리자메모
+var allCanYn				= [[${allCanYn}]];						// 배송지수정가능여부
+var orderGoodsCnt 			= [[${orderGoodsInfo.size()}]];			// 주문상세정보
+var orderFreeGiftCnt		= [[${orderFreeGiftInfo.size()}]];		// 주문사은품정보
+var orderDeliveryAddrCnt	= [[${orderDeliveryAddrInfo.size()}]];	// 배송정보
+var orderDeliveryFeeCnt		= [[${orderDeliveryFeeInfo.size()}]];	// 배송비정보
+var orderPaymentCnt			= [[${orderPaymentInfo.size()}]];		// 결제정보
+var orderChangeCnt 			= [[${orderChangeInfo.size()}]];		// 취소/반품/교환요청 정보
+var orderRefundCnt 			= [[${orderRefundInfo.size()}]];		// 환불정보
+var roleCd 					= [[${sessionInfo.roleCd}]];			// 권한코드
+
+// 2021.05.12 
+var hiddenTemp				= true;
+if (userNo == "24" || userNo == "33" || userNo == "8") {
+//	hiddenTemp				= false;
+}
+
+</script>
+
+<!-- AgGrid 컬럼 세팅 -->
+<script th:inline="javascript">
+
+// 1.주문기본정보 그리드 바인딩
+// 2.상품별 상세정보
+var columnDefsGoodsInfo = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "상세번호"	, field: "ordDtlNo"		, width: 80, cellClass: 'text-center'},
+			{headerName: "주문구분"	, field: "exchGbNm"		, width: 70, cellClass: 'text-center'},
+			{
+				headerName: "상품코드", field: "goodsCd", width: 110, cellClass: 'text-center', sortable: true,
+				cellRenderer: function (params) {
+					if (roleCd.indexOf("C") < 0) {
+						return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenGoodsDetailPopup('U','" + params.value + "');\">" + params.value + "</a>";
+					} else {
+						return params.value;
+					}
+				}
+			},
+			{headerName: "SKUCODE"	, field: "optCd"		, width: 100, cellClass: 'text-center'},
+			{
+				headerName		: "상품명"
+				, field			: "goodsNm"
+				, width			: 200
+				, cellClass		: 'text-left'
+				, cellRenderer: function (params) {
+					return '<a href="javascript:void(0);" onclick="cfnOpenFrontGoodsPopup(\'' + params.data.goodsCd + '\',\'' + params.data.siteCd + '\');">' + params.value + '</a>';
+				}
+			},
+			{headerName: "상품타입"	, field: "goodsTypeNm"	, width: 80, cellClass: 'text-center',
+				cellRenderer: function (params) {
+					var option;
+					if (params.data.goodsType == 'G056_S') {
+						option = "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailItemForm('" + params.data.ordDtlNo + "');\">" + params.value + "</a>";
+					} else {
+						option = params.value
+					}
+					return option;
+				}
+			},
+			{headerName: "브랜드"		, field: "brandGroupNm"	, width: 80, cellClass: 'text-center'},
+			{headerName: "옵션1"		, field: "colorNm"		, width: 60, cellClass: 'text-center'},
+			{headerName: "옵션2"		, field: "optCd2"		, width: 60, cellClass: 'text-center'},
+			{headerName: "주문상태"	, field: "ordDtlStat"	, width: 100, cellClass: 'text-center', hide: true},
+			{
+				headerName		: "주문상태"
+				, field			: "ordDtlStatNm"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var retVal = "";
+					retVal += (params.data.cancelRequestQty > 0) ? " 취" + params.data.cancelRequestQty : "";
+					retVal += (params.data.returnRequestQty > 0) ? " 반" + params.data.returnRequestQty : "";
+					retVal += (params.data.exchangeRequestQty > 0) ? " 교" + params.data.exchangeRequestQty : "";
+					
+					if (!gagajf.isNull(retVal)) {
+						retVal = "-" + retVal;
+					}
+					
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailChangeHst('" + params.data.ordDtlNo + "');\">" + params.value + retVal + "</a>";
+				}
+			},
+			{
+				headerName		: "상태변경"
+				, field			: "ordDtlStatChg"
+				, width			: 140
+				, hide			: hiddenTemp
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var strVal 		= "";
+					var strCheck	= "";
+					
+					// 2021.04.30 상태값 임시 기능
+					strVal += "<select class='ordDtlStatChg' name='ordDtlStatChg' ordDtlNo='"+params.data.ordDtlNo+"' ordNo='"+params.data.ordNo+"' onChange='fnChangOrdDtlStat(this);'>";
+					strVal += "	<option value=''>선택</option>";
+					strVal += "	<option value='G013_20'>결제완료</option>";
+					strVal += "	<option value='G013_30'>상품준비중</option>";
+					strVal += "	<option value='G013_40'>배송준비중</option>";
+					strVal += "	<option value='G013_50'>배송중</option>";
+					strVal += "	<option value='G013_60'>배송완료</option>";
+					strVal += "</select>";
+					
+					return strVal;
+				}
+			},
+			{
+				headerName		: "변경요청"
+				, field			: "ordDtlStat"
+				, width			: 200
+				, cellClass		: 'text-center'
+				, cellRenderer: function (params) {
+					var retStr = "";
+					// 네이버페이 주문형은 버튼 생성X
+					if(params.data.pgGb == "NAVER_ORDER") return retStr;
+
+					// 결제완료, 상품준비중, 출고처지정, 배송준비중 (주문취소)
+					// 2021.07.08 card007 교환상품은 취소 안되게 수정
+					if (params.data.ordExchGb == 'O') {
+						if (params.value == 'G013_20' || params.value == 'G013_30' || params.value == 'G013_35' || params.value == 'G013_40') {
+							if (params.data.ordQty > (params.data.cnclRtnQty + params.data.ordReqChgQty)) {
+								var paramData = params.data.ordNo;
+								paramData += '@' + params.data.ordDtlNo;
+								paramData += '@' + params.data.delvFeeCd;
+								paramData += '@' + params.data.delvFeeCdGrp;
+								paramData += '@' + params.data.ordDtlStat;
+								retStr += '<button type="button" class="btn btn-base btn-sm" onclick="fnCancelRequest(\'' + paramData + '\', null);">취소요청</button>';
+							}
+						}
+					}
+					
+					// 배송중, 배송완료 (교환신청, 반품신청) 
+					if (params.value == 'G013_50' || params.value == 'G013_60' || params.value == 'G013_70') {
+						if (params.data.ordQty > (params.data.cnclRtnQty + params.data.ordReqChgQty)) {
+							var paramData 	= params.data.ordNo;
+							paramData 		+= '@' + params.data.ordDtlNo;
+							paramData 		+= '@' + params.data.delvFeeCd;
+							paramData 		+= '@' + params.data.delvFeeCdGrp;
+							paramData 		+= '@' + params.data.ordDtlStat;
+							
+							// 2021.09.07 관리자에서는 교환신청, 반품신청 가능하게 수정
+							retStr 			+= '<button type="button" class="btn btn-base btn-sm" onclick="fnReturnRequest(\'' + paramData + '\', null);">반품요청</button>';
+							retStr 			+= '<button type="button" class="btn btn-base btn-sm" onclick="fnExchangeRequest(\'' + paramData + '\', null);">교환요청</button>';
+							
+						}
+					}
+					return retStr;
+				}
+			},
+			{
+				headerName		: "정상가"
+				, field			: "listPrice"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "판매가"
+				, field			: "currPrice"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "옵션금액"
+				, field			: "optAddPrice"
+				, width			: 70
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{headerName: "주문수량"	, field: "ordQty"		, width: 70, cellClass: 'text-center'},
+			{headerName: "취소수량"	, field: "cnclRtnQty"	, width: 70, cellClass: 'text-center'},
+			{headerName: "변경수량"	, field: "ordReqChgQty"	, width: 70, cellClass: 'text-center'},
+		],
+	},
+	{
+		headerName	: "금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"
+				, field			: "cnclRtnAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제"
+				, field			: "realOrdAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "쿠폰",
+		children	: [
+			{
+				headerName		: "즉시할인"
+				, field			: "cpn1DcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품"
+				, field			: "goodsCpnDcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "장바구니"
+				, field			: "cartCpnDcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "다다익선",
+		children	: [
+			{
+				headerName		: "수량"
+				, field			: "tmtb1DcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderTmtbHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "금액"
+				, field			: "tmtb2DcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderTmtbHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "포인트",
+		children	: [
+			{
+				headerName		: "사용"
+				, field			: "pntDcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			},
+			{
+				headerName		: "즉시사용"
+				, field			: "prePntDcAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "적립"
+				, field			: "savePntAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "상품권",
+		children	: [
+			{
+				headerName		: "사용"
+				, field			: "gfcdUseAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderGiftcardHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
+	},
+	{
+		headerName	: "배송",
+		children	: [
+			{headerName: "품절여부"	, field: "soldoutYn"	, width: 90, cellClass: 'text-center'},
+			{headerName: "택배사코드"	, field: "shipCompCd"	, width: 150, cellClass: 'text-center',  hide: true},
+			{headerName: "출고택배사"	, field: "shipCompNm"	, width: 150, cellClass: 'text-center'},
+			{
+				headerName		: "송장번호"
+				, field			: "invoiceNo"
+				, width			: 150
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var retStr = '';
+					if (!gagajf.isNull(params.value)) {
+						//retStr = '<a href="javascript:void(0);" onclick="fnSearchDelivery(\'' + params.data.trackingUrl + '\',\'' + params.data.invoiceNo + '\');">' + params.value + '</a>';
+						retStr = '<a href="javascript:void(0);" onclick="fnSweetTracker(\'' + params.data.shipCompCd + '\',\'' + params.data.invoiceNo + '\');">' + params.value + '</a>';
+					}
+					return retStr;
+				}
+			},
+			{headerName: "출고처"		, field: "delvLocNm"	, width: 120, cellClass: 'text-center'},
+			{headerName: "배송지번호"	, field: "delvAddrSq"	, width: 120, cellClass: 'text-center'},
+			{headerName: "업체명"		, field: "supplyCompNm"	, width: 180, cellClass: 'text-center'},
+			{headerName: "배송정책코드", field: "delvFeeCdGrp"	, width: 120, cellClass: 'text-center'}
+		]
+	}
+];
+var gridOptionsGoodsInfo = gagaAgGrid.getGridOptions(columnDefsGoodsInfo);
+
+// 2.5 주문사은품정보
+var columnDefsOrderFreeGiftInfo = [
+	{headerName: "주문사은품번호"	, field: "ordFreegiftSq"	, width: 120, cellClass: 'text-center', hide: true},
+	{headerName: "사은품프로모션"	, field: "freegiftSq"		, width: 100, cellClass: 'text-center', hide: true},
+	{headerName: "사은품프로모션명"	, field: "freegiftNm"		, width: 250, cellClass: 'text-left'},
+	{
+		headerName			: "구분"
+		, field				: "allYn"
+		, width				: 100
+		, cellClass			: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = ""
+			
+			if (params.value == 'Y') {
+				rtnStr = "필수";
+			} else {
+				rtnStr = "선택";
+			}
+			return rtnStr;
+		}
+	},
+	{headerName: "사은품혜택번호"	, field: "freegiftValSq"	, width: 100, cellClass: 'text-center', hide: true},
+	{
+		headerName			: "사용포인트"		
+		, field				: "usePoint"			
+		, width				: 100
+		, cellClass			: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = ""
+			
+			if (params.value == '0') {
+				rtnStr = "무료";
+			} else {
+				rtnStr = params.value.addComma();
+			}
+			return rtnStr;
+		}
+	},
+	{headerName: "사은품코드"		, field: "productNo"		, width: 150, cellClass: 'text-center'},
+	{headerName: "사은품명"		, field: "itemNm"			, width: 250, cellClass: 'text-center'},
+	{headerName: "사은품수량"		, field: "itemQty"			, width: 100, cellClass: 'text-center'},
+	{headerName: "삭제여부"		, field: "delYn"			, width: 100, cellClass: 'text-center'}
+];
+var gridOptionsOrderFreeGiftInfo = gagaAgGrid.getGridOptions(columnDefsOrderFreeGiftInfo);
+
+// 3.배송정보
+var columnDefsDeliveryInfo = [
+	{headerName: "주문번호"		, field: "ordNo"			, width: 80, cellClass: 'text-center', hide: true},
+	{headerName: "배송지번호"		, field: "delvAddrSq"		, width: 80, cellClass: 'text-center'},
+	{headerName: "주문구분"		, field: "exchGbNm"			, width: 80, cellClass: 'text-center'},
+	{headerName: "받는분"		, field: "recipNm"			, width: 80, cellClass: 'text-left', editable: true},
+	{headerName: "핸드폰번호"		, field: "recipPhnno"		, width: 120, cellClass: 'text-left', editable: true},
+	{
+		headerName		: "우편번호"		
+		, field			: "recipZipcode"
+		, width			: 220
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = "";
+			
+			if (allCanYn == 'Y') {
+				rtnStr += params.value;
+				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'ADDR');\">POST</button>";
+				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnUpdateOrderAddr('" + params.node.rowIndex + "');\">저장</button>";
+			} else {
+				rtnStr += params.value;
+			}
+			
+			return rtnStr;
+		}
+	},
+	{headerName: "주소(기본)"		, field: "recipBaseAddr"	, width: 220, cellClass: 'text-left'},
+	{headerName: "주소(상세)"		, field: "recipDtlAddr"		, width: 220, cellClass: 'text-left', editable: true},
+	{headerName: "배송메모"		, field: "delvMemo"			, width: 250, cellClass: 'text-left', editable: true}
+];
+var gridOptionsDeliveryInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryInfo);
+
+// 4.결제정보
+var columnDefsPaymentInfo = [
+	{headerName: "결제방법"		, field: "pgGb"			, width: 100	, cellClass: 'text-center'},
+	{headerName: "결제수단"		, field: "payMeansNm"	, width: 120	, cellClass: 'text-center'},
+	{headerName: "카드(은행)"		, field: "cardNm"		, width: 100	, cellClass: 'text-center'},
+	{
+		headerName		: "할부(입금계좌)"
+		, field			: "cardMips"
+		, width			: 150
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			// 무통장입금
+			if (params.data.payMeans == 'G014_20') {
+				retStr = params.data.vaNo;
+			} else {
+				if (params.value == '00' || params.value == '0') {
+					retStr = "일시불";
+				} else {
+					if (parseInt(params.value) > 0) {
+						retStr = parseInt(params.value) + "개월할부";
+					} else {
+						retStr = params.value;
+					}
+				}
+			}
+			return retStr;
+		}
+	},
+	{
+		headerName		: "승인번호"
+		, field			: "pgTradeNo"
+		, width			: 100
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			
+			/*
+			if (!gagajf.isNull(params.value)) {
+				retStr = '<a href="javascript:void(0);" onclick="fnReceiptPage(\'' + params.data.pgTid + '\');">' + params.value + '</a>';
+			}
+
+			if (gagajf.isNull(params.value) && !gagajf.isNull(params.data.pgTid)) {
+				retStr = '<a href="javascript:void(0);" onclick="fnReceiptPage(\'' + params.data.pgTid + '\');">' + '거래내역' + '</a>';
+			}
+			*/
+			
+			retStr = params.value;
+
+			return retStr;
+		}
+		, hide: true
+	},
+	{headerName: "승인번호"	, field: "pgTid"	, width: 150	, cellClass: 'text-center'},
+	{
+		headerName			: "결제일시"	
+		, field				: "payDt"
+		, width				: 130
+		, cellClass			: 'text-center' 
+		, cellRenderer: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "결제상태"	, field: "payStatNm"	, width: 80		, cellClass: 'text-center'},
+	{
+		headerName			: "결제금액"
+		, field				: "payAmt"
+		, width				: 80
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName			: "주결제금액"
+		, field				: "mainPayAmt"
+		, width				: 80
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			let mainPayAmt = params.data.payAmt - params.data.pgCpnAmt - params.data.npayPntAmt;
+			return mainPayAmt.addComma();
+		}
+	},
+	{
+		headerName			: "제휴할인"
+		, field				: "pgCpnAmt"
+		, width				: 80
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName			: "마일리지"
+		, field				: "npayPntAmt"
+		, width				: 80
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{headerName: "계좌만료일"	, field: "vaDeadline"	, width: 150	, cellClass: 'text-center'}
+];
+var gridOptionsPaymentInfo = gagaAgGrid.getGridOptions(columnDefsPaymentInfo);
+
+// 5.배송비
+var columnDefsDeliveryFeeInfo = [
+	{headerName: "배송비종류"		, field: "delvFeeGbNm", width: 150, cellClass: 'text-center'},
+	{
+		headerName			: "배송비"
+		, field				: "delvFee"
+		, width				: 120
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName			: "쿠폰할인배송비"
+		, field				: "delvCpnDcAmt"
+		, width				: 120
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName			: "상품권사용배송비"
+		, field				: "delvGfcdUseAmt"
+		, width				: 120
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName			: "실제배송비"
+		, field				: "realDelvAmt"
+		, width				: 120
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{headerName: "배송비정산여부"	, field: "delvUsacYn", width: 120, cellClass: 'text-center'},
+	{
+		headerName			: "배송비정산일시"	
+		, field				: "delvUsacDt"
+		, width				: 150
+		, cellClass			: 'text-center' 
+		, cellRenderer: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "업체명"			, field: "supplyCompNm", width: 180, cellClass: 'text-center'},
+	{headerName: "배송정책코드"	, field: "delvFeeCd", width: 120, cellClass: 'text-center'}
+];
+var gridOptionsDeliveryFeeInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryFeeInfo);
+
+// 6. 반품/교환 정보
+var columnDefsOrderChangeInfo = [
+	{
+		headerName		: "요청번호"		
+		, field			: "ordChgSq"		
+		, width			: 100	
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			var rtnStr = "";
+			
+			var paramData 	= params.data.ordNo;
+			paramData 		+= '@' + params.data.ordDtlNo;
+			paramData 		+= '@' + params.data.delvFeeCd;
+			paramData 		+= '@' + params.data.delvFeeCdGrp;
+			paramData 		+= '@' + params.data.chgStat;
+			
+			/*
+			// 취소접수, 취소대기
+			if (params.data.chgStat == 'G685_10' || params.data.chgStat == 'G685_11') {
+				rtnStr = '<a href="javascript:void(0);" onclick="fnCancelRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+			} 
+			// 반품접수, 반품대기, 회수요청, 상품검수중, 결제대기, 반품진행중
+			else if (params.data.chgGb == 'G680_30' && (params.data.chgStat == 'G685_50' || params.data.chgStat == 'G685_51' 
+					|| params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_31' || params.data.chgStat == 'G685_32' || params.data.chgStat == 'G685_33')) {
+				rtnStr = '<a href="javascript:void(0);" onclick="fnReturnRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+			}
+			// 교환접수, 교환대기, 회수요청, 상품검수중, 결제대기, 교환진행중
+			else if (params.data.chgGb == 'G680_40' && (params.data.chgStat == 'G685_20' || params.data.chgStat == 'G685_21' 
+					|| params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_31' || params.data.chgStat == 'G685_32' || params.data.chgStat == 'G685_34')) {
+				rtnStr = '<a href="javascript:void(0);" onclick="fnExchangeRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+			} 
+			else {
+				rtnStr = params.value;
+			}
+			*/
+			
+			// 2021.06.29 변경구분값으로 변경
+			// 2021.07.19 as-is 변경정보는 TB_ORDER_DETAIL_ITEM_HST 정보가 존재하지 않음
+			//if (params.data.chgItemCnt > 0) {
+				
+				// 취소요청
+				if (params.data.chgGb == "G680_20") {
+					rtnStr = '<a href="javascript:void(0);" onclick="fnCancelRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+				}
+				// 반품요청
+				else if (params.data.chgGb == "G680_30") {
+					rtnStr = '<a href="javascript:void(0);" onclick="fnReturnRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+				}
+				// 교환요청
+				else if (params.data.chgGb == "G680_40") {
+					rtnStr = '<a href="javascript:void(0);" onclick="fnExchangeRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+				}
+				else {
+					rtnStr = params.value;
+				}
+				
+			//} else {
+				//rtnStr = params.value;
+			//}
+			
+			return  rtnStr;
+		}
+	},
+	{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},
+	{headerName: "상품코드"		, field: "goodsCd"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "상품타입"	, field: "goodsTypeNm"	, width: 100, cellClass: 'text-center',
+		cellRenderer: function (params) {
+			var option;
+			if (params.data.goodsType == 'G056_S') {
+				option = "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailItemForm('" + params.data.ordDtlNo + "');\">" + params.value + "</a>";
+			} else {
+				option = params.value
+			}
+			return option;
+		}
+	},
+	{headerName: "SKUCODE"		, field: "optCd"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "옵션1"			, field: "optCd1"		, width: 100	, cellClass: 'text-center', hide : true},
+	{headerName: "옵션2"			, field: "optCd2"		, width: 100	, cellClass: 'text-center', hide : true},
+	{headerName: "수량"			, field: "chgQty"		, width: 100	, cellClass: 'text-center'},
+	{
+		headerName		: "요청일자"		
+		, field			: "regDt"		
+		, width			: 150		
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "변경사유"		, field: "chgReasonNm"	, width: 100	, cellClass: 'text-center'},
+	{
+		headerName: "회수구분", field: "wdGb", width: 100, cellClass: 'text-center',
+		cellRenderer: function (params) {
+			var rtnStr = "";
+			if (params.data.chgGb == 'G680_30' || params.data.chgGb == 'G680_40') {
+				rtnStr = params.value == 'W' ? '회수요청' : '직접배송';
+			}
+
+			return rtnStr;
+		}
+	},
+	{headerName: "요청메모"		, field: "chgMemo"		, width: 150	, cellClass: 'text-left'},
+	{headerName: "변경자명"		, field: "chgerNm"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "변경자핸드폰"	, field: "chgerPhnno"	, width: 120	, cellClass: 'text-center', editable: true},
+	{
+		headerName		: "우편번호"		
+		, field			: "chgerZipcode"
+		, width			: 220
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = ""
+			
+			// 2021.06.29 회수지, 배송지 정보 수정 교환, 반품 상세화면 수정 변경
+			if (params.data.wdGb == 'W' && (params.data.chgGb == 'G680_30' || params.data.chgGb == 'G680_40')) {
+				rtnStr += params.value;
+			} else {
+				rtnStr += "";
+			}
+
+			return rtnStr;
+		}
+	},
+	{headerName: "주소(기본)"		, field: "chgerBaseAddr", width: 220	, cellClass: 'text-left'},
+	{headerName: "주소(상세)"		, field: "chgerDtlAddr"	, width: 150	, cellClass: 'text-center'	, editable: true},
+	{
+		headerName		: "택배사전송"
+		, field			: "wdInvoiceSendYn"
+		, width			: 120
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			return (params.value == 'N') ? '미전송' : '전송';
+		}
+	},
+	{
+		headerName		: "회수지시전송"
+		, field			: "wdInvoiceSendYn"
+		, width			: 120
+		, cellClass		: 'text-center'
+	},
+	{
+		headerName		: "회수송장번호"
+		, field			: "wdInvoiceNo"
+		, width			: 150
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			if (!gagajf.isNull(params.value)) {
+				retStr = '<a href="javascript:void(0);" onclick="fnSweetTracker(\'' + params.data.shipCompCd + '\',\'' + params.data.wdInvoiceNo + '\');">' + params.value + '</a>';
+			}
+			return retStr;
+		}
+	}
+];
+var gridOptionsOrderChangeInfo = gagaAgGrid.getGridOptions(columnDefsOrderChangeInfo);
+
+// 7.환불정보
+var columnDefsRefundInfo = [
+	{headerName: "요청번호"		, field: "ordChgSq"		, width: 80		, cellClass: 'text-center'},
+	{headerName: "환불수단"		, field: "payMeansNm"	, width: 80		, cellClass: 'text-center'},
+	{headerName: "환불은행(카드)"	, field: "cardNm"		, width: 120	, cellClass: 'text-center'},
+	{headerName: "환불은행계좌번호"	, field: "raNo"			, width: 150	, cellClass: 'text-center'},
+	{headerName: "예금주"			, field: "raNm"			, width: 80		, cellClass: 'text-center'},
+	{
+		headerName			: "환불금액"
+		, field				: "refundAmt"
+		, width				: 100
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "환불완료일자"		
+		, field			: "updDt"		
+		, width			: 140	
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{
+		headerName		: "변경아이디"		
+		, field			: "userId"
+		, width			: 120
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = "";
+			
+			if (params.value != null && params.value != '') {
+				rtnStr += params.value;
+			} else {
+				rtnStr += params.data.custId;
+			}
+			
+			return rtnStr;
+		}
+	}
+];
+var gridOptionsRefundInfo = gagaAgGrid.getGridOptions(columnDefsRefundInfo);
+
+// 9.주문메모
+var columnDefsOrderMemoInfo = [
+	{headerName: "등록일시"		, field: "regDt"	, width: 135	, cellClass: 'text-center'},
+	{
+		headerName		: "등록자"
+		, field			: "regNm"
+		, width			: 100
+		, cellClass		: 'text-center'
+	},
+	{
+		headerName		: "관리메모"
+		, field			: "memo"
+		, width			: 150
+		, cellClass		: 'text-left'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			
+			if (!gagajf.isNull(params.value)) {
+				retStr = '<a href="javascript:void(0);" onclick="fnCreateOrderMemo(\'' + params.data.ordNo + '\',\'' + params.data.ordMemoSq + '\',\'U' + '\');">' + params.value + '</a>';
+			}
+			return retStr;
+		}
+	},
+	{
+		headerName		: "삭제"
+		, field			: "ordMemoSq"
+		, width			: 80
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			
+			if (params.data.updNo == userNo) {
+				retStr = '<button type="button" class="btn btn-danger" onclick="fnDeleteOrderMemo(\'' + params.data.ordNo + '\',\'' + params.value + '\');"> - </button>';
+			}
+			return retStr;
+		}
+	}
+];
+var gridOptionsOrderMemoInfo = gagaAgGrid.getGridOptions(columnDefsOrderMemoInfo);
+</script>
+
+<!-- 버튼 이벤트 바인딩 -->
+<script th:inline="javascript">
+var _windowWidth 	= $(window).width();		/* 위도우창 넓이 */
+var _girdRowH 		= 33;						/* 그리드 Row 줄 높이 */
+var _girdRowH1 		= 33;						/* 그리드 타이틀 1줄 짜리 높이*/
+var _girdRowH2 		= 62;						/* 그리드 타이틀 2줄 짜리 높이*/
+var _scrollH 		= 27;						/* 가로스크롤bar 높이 */
+
+$(window).resize(function () {
+	_windowWidth = $(window).width();
+	fnSetGridHeightInit();
+});
+
+var fnSetGridHeightInit = function () {
+	if (_windowWidth < 1780) {
+		_girdRowH1 = 33 + _scrollH;
+		_girdRowH2 = 80 + _scrollH;
+	} else {
+		_girdRowH1 = 33
+		_girdRowH2 = 80;
+	}
+}
+</script>
+<!-- AgGrid 생성 -->
+<script th:inline="javascript">
+var pgGb 			= orderInfo[0].pgGb;
+var payMeans 		= orderInfo[0].payMeans;
+var payMeansNm		= orderInfo[0].payMeansNm;
+var cardNm			= orderInfo[0].cardNm;
+var custNo			= orderInfo[0].custNo;
+
+// 팝업닫기
+var fnOrderDetailClose = function(){
+	uifnPopupClose('popupOrderDetail');
+}
+
+$(document).ready(function () {
+	
+	// 1. 그리드 그리기
+	gagaAgGrid.createGrid('gridOrderGoodsInfo'				, gridOptionsGoodsInfo);			// 상품정보
+	gagaAgGrid.createGrid('gridOrderFreeGiftInfo'			, gridOptionsOrderFreeGiftInfo);	// 사은품정보
+	gagaAgGrid.createGrid('gridDeliveryAddrInfo'			, gridOptionsDeliveryInfo);			// 배송정보
+	gagaAgGrid.createGrid('gridPaymentInfo'					, gridOptionsPaymentInfo);			// 결제정보
+	gagaAgGrid.createGrid('gridDeliveryFeeInfo'				, gridOptionsDeliveryFeeInfo);		// 배송비정보
+	gagaAgGrid.createGrid('gridOrderChangeInfo'				, gridOptionsOrderChangeInfo);		// 취소/반품/교환 요청 정보
+	gagaAgGrid.createGrid('gridOrderRefundInfo'				, gridOptionsRefundInfo);			// 환불정보
+	gagaAgGrid.createGrid('gridOrderMemoInfo'				, gridOptionsOrderMemoInfo);		// 관리자메모
+	
+	// 2. 그리드 데이터 바인딩
+	gridOptionsGoodsInfo.api.setRowData(orderGoodsInfo);							// 상품정보
+	gridOptionsOrderFreeGiftInfo.api.setRowData(orderFreeGiftInfo);					// 사은품품정보
+	gridOptionsDeliveryInfo.api.setRowData(orderDeliveryAddrInfo);					// 배송정보
+	gridOptionsPaymentInfo.api.setRowData(orderPaymentInfo);						// 결제정보
+	gridOptionsDeliveryFeeInfo.api.setRowData(orderDeliveryFeeInfo);				// 배송비정보
+	gridOptionsOrderChangeInfo.api.setRowData(orderChangeInfo);						// 취소/반품/교환요청 정보
+	gridOptionsRefundInfo.api.setRowData(orderRefundInfo);							// 환불정보
+	gridOptionsOrderMemoInfo.api.setRowData(orderAdminMemoInfo);					// 관리자메모
+	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderGoodsInfo');
+	gagaAgGrid.hideStatusBar('gridOrderFreeGiftInfo');
+	gagaAgGrid.hideStatusBar('gridDeliveryAddrInfo');
+	gagaAgGrid.hideStatusBar('gridPaymentInfo');
+	gagaAgGrid.hideStatusBar('gridDeliveryFeeInfo');
+	gagaAgGrid.hideStatusBar('gridOrderChangeInfo');
+	gagaAgGrid.hideStatusBar('gridOrderRefundInfo');
+	gagaAgGrid.hideStatusBar('gridOrderMemoInfo');
+	
+	// 3. 그리드 높이 설정
+	fnSetGridHeightInit();
+	
+	// 4. 그리드 숨김 처리
+	if (orderFreeGiftInfo == null || orderFreeGiftInfo.length === 0) {
+		$("#wrapOrderFregift").addClass("off");
+	}
+	
+	if (orderChangeInfo == null || orderChangeInfo.length === 0) {
+		$("#wrapOrderChange").addClass("off");
+	}
+	
+	if (orderRefundInfo == null || orderRefundInfo.length === 0) {
+		$("#wrapRefund").addClass("off");
+	}
+	
+	// 고객정보팝업
+	$(".custDetailPop").on("click", function(){
+		var custNo = $(this).attr("custNo");
+		if (roleCd.indexOf("C") < 0 && parseInt(custNo) > 0) {
+			cfnOpenCustDetailPopup(custNo);
+		}
+	});
+	
+	// LMS
+	$(".lmsPop").on("click", function(){
+		//var custNo = $(this).attr("custNo");
+		var orderPhnno = $(this).attr("orderPhnno");
+		let param = {};
+		param.elementCellPhnno = orderPhnno; 
+		param.elementCustNo =    ""; 
+		param.pageGb = 'delv';
+		cfnOpenLmsPopup2(param);
+		
+	});	
+});
+
+//0원이하이면 '-' 처리 삭제 함수
+var getZeroMinusDelAmt = function(tempAmt) {
+	var rtnAmtStr = "";
+	
+	if (tempAmt > 0) {
+		rtnAmtStr = "-" + tempAmt.addComma();
+	} else {
+		rtnAmtStr = tempAmt.addComma();
+	}
+	
+	return rtnAmtStr;
+}
+
+$(document).ready(function () {
+	// 2021.05.11 그리드 높이정보 수정
+	var orderGoodsHeight 			= 90 + (33 * orderGoodsCnt);
+	var orderFreeGiftHeight 		= 40 + (38 * orderFreeGiftCnt);
+	var orderDeliveryAddrHeight 	= 40 + (38 * orderDeliveryAddrCnt);
+	var orderChangeHeight 			= 40 + (38 * orderChangeCnt);
+	var orderRefundHeight 			= 40 + (38 * orderRefundCnt);
+	var orderDeliveryFeeHeight 		= 40 + (38 * orderDeliveryFeeCnt);
+	var orderPaymentHeight 			= 40 + (38 * orderPaymentCnt);
+	
+	$("#gridOrderGoodsInfo").css("height"		, orderGoodsHeight+"px");
+	$("#gridOrderFreeGiftInfo").css("height"	, orderFreeGiftHeight+"px");
+	$("#gridDeliveryAddrInfo").css("height"		, orderDeliveryAddrHeight+"px");
+	$("#gridOrderChangeInfo").css("height"		, orderChangeHeight+"px");
+	$("#gridOrderRefundInfo").css("height"		, orderRefundHeight+"px");
+
+	$("#gridDeliveryFeeInfo").css("height"		, orderDeliveryFeeHeight+"px");
+	$("#gridPaymentInfo").css("height"			, orderPaymentHeight+"px");
+
+	$('#orderDetailContents').css("width", "97%").css("height", "96%");
+	
+	// 메모등록
+	$('#btnCreateOrderMemo').on('click', function () {
+		fnCreateOrderMemo(ordNo, 0, 'N');
+	});
+	// 배송 정보 수정
+	$('#btnUpdateOrderAddr').on('click', function () {
+		fnUpdateOrderAddr();
+	});
+	
+	// 2021.07.30 결제정보설정
+	var listSumAmt 			= 0;			// 총상품금액 (정상가)
+	var currSumAmt 			= 0;			// 상품금액 (판매가)
+	var realDelvSumAmt		= 0;			// 실제배송비합계
+	var delvSumAmt			= 0;			// 배송비합계
+	var delvCpnDcAmt		= 0;			// 배송비쿠폰할인금액
+	var delvGfcdUseAmt		= 0;			// 배송비상품권사용금액
+	var goodsDcSumAmt		= 0;			// 총상품할인금액합계
+	var cpn1DcSumAmt		= 0;			// 즉시할인금액합계
+	var cpn1CpnDcDesc		= "";			// 즉시할인쿠폰할인설명
+	var tmtbDcSumAmt		= 0;			// 다다익선할인금액합계
+	var tmtb1Desc			= "";			// 수량다다익선할인설명
+	var tmtb1DcSumAmt		= 0;			// 수량다다익선할인금액합계
+	var tmtb2Desc			= "";			// 금액다다익선할인설명
+	var tmtb2DcSumAmt		= 0;			// 금액다다익선할인금액합계
+	var cpnDcSumAmt			= 0;			// 쿠폰할인금액합계
+	var goodsCpnDcSumAmt	= 0;			// 상품쿠폰할인금액합계
+	var goodsCpnDcDesc		= "";			// 상품쿠폰할인설명
+	var cartCpnDcSumAmt		= 0;			// 장바구니쿠폰할인금액합계
+	var cartCpnDcDesc		= "";			// 장바구니쿠폰할인설명
+	var prePntDcSumAmt		= 0;			// 선포인트할인금액합계
+	var totalPayAmt			= 0;			// 총결제금액
+	var realOrdSumAmt		= 0;			// 실결제금액합계
+	var pgDcSumAmt			= 0;			// 제휴할인금액
+	var allianceDcAmt		= 0;			// 제휴쿠폰할인금액
+	var mileageDcAmt		= 0;			// 마일리지할인금액
+	var pntDcSumAmt			= 0;			// 포인트 결제액
+	var gfcdUseSumAmt		= 0;			// 상품권 결제액
+	var gfcdUseDesc			= "";			// 상품권사용설명
+	var savePntSumAmt		= 0;			// 적립포인트
+	var allCnclYn			= "N"			// 전체취소여부
+	
+	var ordDtlNoArr			= [];			// 주문상세배열
+	var cnclRtnReqQtyArr	= [];			// 주문상세신청수량배열
+	
+	var gccrReqYn = 'N';		// 상품권현금영수증신청여부
+	
+	for (i=0 ; i<orderGoodsInfo.length ; i++) {
+		listSumAmt			+= (parseInt(orderGoodsInfo[i].listPrice) + parseInt(orderGoodsInfo[i].optAddPrice)) * (orderGoodsInfo[i].ordQty - orderGoodsInfo[i].cnclRtnQty);
+		currSumAmt			+= (parseInt(orderGoodsInfo[i].currPrice) + parseInt(orderGoodsInfo[i].optAddPrice)) * (orderGoodsInfo[i].ordQty - orderGoodsInfo[i].cnclRtnQty);
+		cpn1DcSumAmt		+= parseInt(orderGoodsInfo[i].cpn1DcAmt);
+		
+		if (parseInt(orderGoodsInfo[i].cpn1DcAmt) > 0) {
+			if (cpn1CpnDcDesc.indexOf(orderGoodsInfo[i].cpn1CpnDcDesc) == -1) {
+				cpn1CpnDcDesc += '<li>' + orderGoodsInfo[i].cpn1CpnDcDesc + '</li>';
+			}
+		}
+		
+		tmtb1DcSumAmt += parseInt(orderGoodsInfo[i].tmtb1DcAmt);
+		if (parseInt(orderGoodsInfo[i].tmtb1DcAmt) > 0) {
+			if (i == 0) tmtb1Desc = ' (';
+			if (tmtb1Desc.indexOf(orderGoodsInfo[i].tmtb1Desc) == -1) {
+				tmtb1Desc += (i > 0 ? ', ' : '') + orderGoodsInfo[i].tmtb1Desc;
+			}
+		}
+		if (tmtb1Desc.length > 0 && i == (orderGoodsInfo.length - 1)) tmtb1Desc += ')';
+		
+		tmtb2DcSumAmt += parseInt(orderGoodsInfo[i].tmtb2DcAmt);
+		if (parseInt(orderGoodsInfo[i].tmtb2DcAmt) > 0) {
+			if (i == 0) tmtb2Desc = ' (';
+			if (tmtb2Desc.indexOf(orderGoodsInfo[i].tmtb2Desc) == -1) {
+				tmtb2Desc += (i > 0 ? ', ' : '') + orderGoodsInfo[i].tmtb2Desc;
+			}
+		}
+		if (tmtb2Desc.length > 0 && i == (orderGoodsInfo.length - 1)) tmtb2Desc += ')';
+		
+		goodsCpnDcSumAmt += parseInt(orderGoodsInfo[i].goodsCpnDcAmt);
+		if (parseInt(orderGoodsInfo[i].goodsCpnDcAmt) > 0) {
+			if (goodsCpnDcDesc.indexOf(orderGoodsInfo[i].goodsCpnDcDesc) == -1) {
+				goodsCpnDcDesc += '<li>' + orderGoodsInfo[i].goodsCpnDcDesc + '</li>\n';
+			}
+		}
+		
+		cartCpnDcSumAmt += parseInt(orderGoodsInfo[i].cartCpnDcAmt);
+		if (parseInt(orderGoodsInfo[i].cartCpnDcAmt) > 0)
+			if (cartCpnDcDesc.indexOf(orderGoodsInfo[i].cartCpnDcDesc) == -1) {{
+				cartCpnDcDesc += '<li>' + orderGoodsInfo[i].cartCpnDcDesc + '</li>\n';
+			}
+		}
+		prePntDcSumAmt		+= parseInt(orderGoodsInfo[i].prePntDcAmt);
+		
+		realOrdSumAmt		+= parseInt(orderGoodsInfo[i].realOrdAmt);
+		pntDcSumAmt			+= parseInt(orderGoodsInfo[i].pntDcAmt);
+		gfcdUseSumAmt		+= parseInt(orderGoodsInfo[i].gfcdUseAmt);
+		
+		if (parseInt(orderGoodsInfo[i].gfcdUseAmt) > 0) {
+			if (!gagajf.isNull(orderGoodsInfo[i].gfcdUseDesc) && orderGoodsInfo[i].gfcdUseDesc.indexOf('!@!') > -1) {
+				var arrGfcdUseDesc = orderGoodsInfo[i].gfcdUseDesc.split('!@!');
+				for (var j = 0; j < arrGfcdUseDesc.length; j++) {
+					if (gfcdUseDesc.indexOf(arrGfcdUseDesc[j]) == -1) {
+						gfcdUseDesc += '<li>' + arrGfcdUseDesc[j] + '</li>\n';
+					}
+				}
+			} else {
+				if (gfcdUseDesc.indexOf(orderGoodsInfo[i].gfcdUseDesc) == -1) {
+					gfcdUseDesc += '<li>' + orderGoodsInfo[i].gfcdUseDesc + '</li>\n';
+				}
+			}
+		}
+		
+		savePntSumAmt		+= parseInt(orderGoodsInfo[i].savePntAmt);
+		
+		// 2021.11.08 입금대기상태일때 전체취소가능
+		if (orderGoodsInfo[i].ordDtlStat == "G013_10") {
+			allCnclYn = "Y";
+		}
+		
+		ordDtlNoArr.push(orderGoodsInfo[i].ordDtlNo);
+		cnclRtnReqQtyArr.push(orderGoodsInfo[i].ordQty);
+		
+		if (i == 0) {
+			gccrReqYn = orderGoodsInfo[i].gccrReqYn;
+		}
+	}
+	
+	// 2021.11.08 입금대기상태일때 전체취소가능
+	if (allCnclYn == "Y") {
+		$("#btnAllCncl").show();
+	} else {
+		$("#btnAllCncl").hide();
+	}
+	
+	// 2021.11.08 입금전 전체취소기능
+	$("#btnAllCncl").on("click", function(){
+		mcxDialog.confirm('전체취소 처리하시겠습니까?', {
+			cancelBtnText	: "취소",
+			sureBtnText		: "확인",
+			sureBtnClick	: function(){
+				
+				// 취소요청 데이터 설정
+				let url = '/orderChange/allCncl';
+				
+				// 전체 취소 처리 (입금전취소여서 계좌정보는 필요없음)
+				let data = {};
+				data.ordNo 				= ordNo;
+				data.chgReason 			= 'G686_10';
+				data.chgReasonNm 		= '고객변심';
+				data.accountNo 			= "";
+				data.accountNm 			= "";
+				data.bankCd 			= "";
+				data.isCustomer 		= true;
+				data.reqGbn 			= 'cnclComplete';
+				data.ordDtlNoArr 		= ordDtlNoArr;
+				data.cnclRtnReqQtyArr 	= cnclRtnReqQtyArr;
+				data.custNo				= custNo;
+				
+				let jsonData = JSON.stringify(data);
+
+				// 전체취소 처리
+				gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}, true);
+			}
+		});
+	});
+	
+	goodsDcSumAmt	= listSumAmt - currSumAmt;
+	tmtbDcSumAmt	= tmtb1DcSumAmt + tmtb2DcSumAmt;
+	cpnDcSumAmt		= goodsCpnDcSumAmt + cartCpnDcSumAmt;
+	
+	for (j=0 ; j<orderDeliveryFeeInfo.length ; j++) {
+		delvSumAmt		+= parseInt(orderDeliveryFeeInfo[j].delvFee);
+		delvCpnDcAmt	+= parseInt(orderDeliveryFeeInfo[j].delvCpnDcAmt);
+		delvGfcdUseAmt	+= parseInt(orderDeliveryFeeInfo[j].delvGfcdUseAmt);
+	}
+	
+	realDelvSumAmt	= delvSumAmt - delvCpnDcAmt - delvGfcdUseAmt;
+	realOrdSumAmt	= realOrdSumAmt + realDelvSumAmt; 
+	//gfcdUseSumAmt	= gfcdUseSumAmt + delvGfcdUseAmt;
+	
+	for (k=0 ; k<orderPaymentInfo.length ; k++) {
+		allianceDcAmt	+= parseInt(orderPaymentInfo[k].pgCpnAmt);
+		mileageDcAmt	+= parseInt(orderPaymentInfo[k].npayPntAmt);
+	}
+	
+	pgDcSumAmt		= allianceDcAmt + mileageDcAmt;
+	totalPayAmt		= (realOrdSumAmt + pntDcSumAmt + gfcdUseSumAmt) - pgDcSumAmt;
+	
+	$(".listSumAmt").text(listSumAmt.addComma() + "원");
+	$(".currSumAmt").text(currSumAmt.addComma() + "원");
+	$(".delvSumAmt").text("자사 : " + delvSumAmt.addComma() + "원 / 업체 : 4601/빌리버스 3,000원, 1928/인터파크 2,000원");
+	$(".delvCpnDcAmt").text(getZeroMinusDelAmt(delvCpnDcAmt) + "원 (쿠폰번호 : 123 / 배송비할인쿠폰 빌리버스)");
+	$(".realDelvSumAmt").text(realDelvSumAmt.addComma() + "원");
+	$(".goodsDcSumAmt").text(getZeroMinusDelAmt(goodsDcSumAmt) + "원");
+	$(".cpn1DcSumAmt").text(getZeroMinusDelAmt(cpn1DcSumAmt) + "원");
+	$(".cpn1CpnDcDesc").html(cpn1CpnDcDesc);
+// 	$(".tmtb1DcSumAmt").text(getZeroMinusDelAmt(tmtb1DcSumAmt) + "원");
+// 	$(".tmtb2DcSumAmt").text(getZeroMinusDelAmt(tmtb2DcSumAmt) + "원");
+	$(".tmtbDcSumAmt").html('<a href="javascript:void(0);" onclick="fnOrderTmtbHst(' + ordNo + ');"><span class="cRed">' + getZeroMinusDelAmt(tmtbDcSumAmt) + '원</span></a>');
+	var tmtbDcDesc = '<li>수량 할인 : ' + getZeroMinusDelAmt(tmtb1DcSumAmt) + '원' + tmtb1Desc + '</li>';
+	tmtbDcDesc += '<li>금액 할인 : ' + getZeroMinusDelAmt(tmtb2DcSumAmt) + '원' + tmtb2Desc + '</li>';
+	$(".tmtbDcDesc").html(tmtbDcDesc);
+	
+	$(".goodsCpnDcSumAmt").html('<a href="javascript:void(0);" onclick="fnOrderCouponHst(' + ordNo + ');"><span class="cRed">' + getZeroMinusDelAmt(goodsCpnDcSumAmt) + '원</span></a>');
+	$(".goodsCpnDcDesc").html(goodsCpnDcDesc);
+	
+	$(".cartCpnDcSumAmt").html('<a href="javascript:void(0);" onclick="fnOrderCouponHst(' + ordNo + ');"><span class="cRed">' + getZeroMinusDelAmt(cartCpnDcSumAmt) + '원</span></a>');
+	$(".cartCpnDcDesc").html(cartCpnDcDesc);
+	
+	$(".cpnDcSumAmt").text(getZeroMinusDelAmt(cpnDcSumAmt) + "원");
+	$(".prePntDcSumAmt").text(getZeroMinusDelAmt(prePntDcSumAmt) + "원");
+
+	$(".totalPayAmt").text(totalPayAmt.addComma() + "원");
+	$(".realOrdSumAmt").text(realOrdSumAmt.addComma() + "원");
+	$(".allianceDcAmt").text(getZeroMinusDelAmt(allianceDcAmt) + "원");
+	$(".mileageDcAmt").text(getZeroMinusDelAmt(mileageDcAmt) + "원");
+	$(".pgDcSumAmt").text(getZeroMinusDelAmt(pgDcSumAmt) + "원");
+	$(".pntDcSumAmt").html('<a href="javascript:void(0);" onclick="fnOrderPointHst(' + ordNo + ');">' + pntDcSumAmt.addComma() + '원</a>');
+	
+	$(".gfcdUseSumAmt").html('<a href="javascript:void(0);" onclick="fnOrderGiftcardHst(' + ordNo + ');">' + gfcdUseSumAmt.addComma() + '원</a>');
+	$(".gfcdUseDesc").html(gfcdUseDesc);
+	
+	$(".savePntSumAmt").html('<a href="javascript:void(0);" onclick="fnOrderPointHst(' + ordNo + ');">' + savePntSumAmt.addComma() + '원</a>');
+	$(".gccrReqYn").text(gccrReqYn);
+	
+	var totDcAmt = -1 * (cpn1DcSumAmt + tmtbDcSumAmt + goodsCpnDcSumAmt + cartCpnDcSumAmt + prePntDcSumAmt);
+	$('.totDcAmt').text(totDcAmt.addComma() + '원');
+	
+	var pgGbNm		= "";
+// 	var cardGbNm	= "";
+// 	if (pgGb == 'KCP') {
+// 		pgGbNm		= payMeansNm;
+// 		cardGbNm	= "(" + cardNm + ")";
+// 	} else if (pgGb == 'NAVER') {
+// 		pgGbNm	= "네이버페이";
+// 	} else if (pgGb == 'NAVER_ORDER') {
+// 		pgGbNm	= "네이버페이주문형";
+// 		cardNm	= "";
+// 	} else if (pgGb == 'KAKAO') {
+// 		pgGbNm	= "카카오페이";
+// 		cardNm	= "";
+// 	} else if (pgGb == 'PAYCO') {
+// 		pgGbNm	= "페이코";
+// 		cardNm	= "";
+// 	} else if (pgGb == 'ISTYLE') {
+// 		pgGbNm	= "상품권";
+// 		cardNm	= "";
+// 	} else {
+// 		pgGbNm	= "외부몰입금";
+// 		cardNm	= "";
+// 	}
+	
+// 	$(".pgGbNm").text(pgGbNm);
+// 	$(".cardNm").text(cardGbNm);
+	var payMeansDesc = '';
+	if (pgGb == 'KCP') {
+		pgGbNm = payMeansNm;
+		if (payMeans == 'G014_10') {
+			payMeansDesc = orderInfo[0].cardNm + ' / ' + orderInfo[0].vaNo;
+		} else if (payMeans == 'G014_20') {
+			payMeansDesc = orderInfo[0].cardNm + ' / ' + orderInfo[0].vaNo + ' / ' + orderInfo[0].vaNm + ' / ' + orderInfo[0].vaDeadline;
+		} else if (payMeans == 'G014_30') {
+			payMeansDesc = orderInfo[0].cardNm + ' / ' + (orderInfo[0].cardMips == "00" || orderInfo[0].cardMips == "0" ? "일시불" : orderInfo[0].cardMips);
+		}
+	} else if (pgGb == 'NAVER') {
+		pgGbNm = '네이버페이';
+		if (payMeans == 'G014_10') {
+			pgGbNm += '(계좌)';
+			payMeansDesc = orderInfo[0].cardNm + ' / ' + orderInfo[0].vaNo;
+		} else if (payMeans == 'G014_30') {
+			pgGbNm += '(신용)';
+			payMeansDesc = orderInfo[0].cardNm + ' / ' + (orderInfo[0].cardMips == "00" || orderInfo[0].cardMips == "0" ? "일시불" : orderInfo[0].cardMips);
+		}
+	} else if (pgGb == 'NAVER_ORDER') {
+		pgGbNm = "네이버페이주문형";
+	} else if (pgGb == 'KAKAO') {
+		pgGbNm = '카카오페이';
+		if (payMeans == 'G014_10') {
+			pgGbNm += '(계좌)';
+			payMeansDesc = orderInfo[0].cardNm + ' / ' + orderInfo[0].vaNo + ' / ' + orderInfo[0].vaNm;
+		} else if (payMeans == 'G014_30') {
+			pgGbNm += '(신용)';
+			payMeansDesc = orderInfo[0].cardNm + ' / ' + (orderInfo[0].cardMips == "00" || orderInfo[0].cardMips == "0" ? "일시불" : orderInfo[0].cardMips);
+		}
+	}
+	
+	$(".pgGbNm").text(pgGbNm);
+	$(".payMeansDesc").text(payMeansDesc);
+});
+</script>
+
+<!-- function -->
+<script th:inline="javascript">
+var gridOrderChangeInfoSelectedIdx = '';
+
+// 배송지변경
+var fnUpdateOrderAddr = function (rowIdx) {	
+	gridOptionsDeliveryInfo.api.stopEditing();
+	var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(rowIdx).data);
+
+	mcxDialog.confirm("주소를 변경하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			gagajf.ajaxJsonSubmit(
+				"/order/deliver/addr/update"
+				, jsonData
+				, function () {
+					
+				}
+			);
+		}
+	});
+}
+
+// 2021.01.25 추가
+// 취소요청, 교환요청, 반품요청 일때는 요청 정보 확인 팝업 정보
+var fnCancelRequest = function (paramData, ordChgSq) {
+	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+	if (ordChgSq == null) {
+		ordChgSq = 0;
+	}
+	
+	var paramArr 	= paramData.split("@");
+	var param 		= "";
+	param += "&ordNo=" 			+ paramArr[0];
+	param += "&ordDtlNo=" 		+ paramArr[1];
+	param += "&delvFeeCd="		+ paramArr[2];
+	param += "&delvFeeCdGrp="	+ paramArr[3];
+	param += "&chgStat="		+ paramArr[4];
+	param += "&ordChgSq=" 		+ ordChgSq;
+	
+	var actionUrl = "/orderChange/cncl/req/form?" + param;
+	
+	// 2021.06.30 취소완료일때 취소완료정보 조회
+	if (paramArr[4] == "G685_17" || paramArr[4] == "G685_18") {
+		actionUrl = "/orderChange/cnclRtn/complete/view?" + param;	
+	}
+
+	cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
+	
+	return false;
+};
+
+//2021.01.25 추가
+// 반품요청
+var fnReturnRequest = function (paramData, ordChgSq) {
+	
+	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+	if (ordChgSq == null) {
+		ordChgSq = 0;
+	}
+	
+	var param 		= "";
+	var paramArr 	= paramData.split("@");
+	param += "&ordNo=" 			+ paramArr[0];
+	param += "&ordDtlNo=" 		+ paramArr[1];
+	param += "&delvFeeCd="		+ paramArr[2];
+	param += "&delvFeeCdGrp="	+ paramArr[3];
+	param += "&chgStat="		+ paramArr[4];
+	param += "&ordChgSq=" 		+ ordChgSq;
+
+	var actionUrl = "/orderChange/rtn/req/form?" + param;
+	
+	// 2021.06.30 취소완료일때 취소완료정보 조회
+	if (paramArr[4] == "G685_60") {
+		actionUrl = "/orderChange/cnclRtn/complete/view?" + param;
+	}
+	
+	cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
+};
+
+// 교환요청
+var fnExchangeRequest = function (paramData, ordChgSq) {
+	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+	if (ordChgSq == null) {
+		ordChgSq = 0;
+	}
+	
+	var paramArr 	= paramData.split("@");
+	var param 		= "";
+	param += "&ordNo=" 			+ paramArr[0];
+	param += "&ordDtlNo=" 		+ paramArr[1];
+	param += "&delvFeeCd="		+ paramArr[2];
+	param += "&delvFeeCdGrp="	+ paramArr[3];
+	param += "&chgStat="		+ paramArr[4];
+	param += "&ordChgSq=" 		+ ordChgSq;
+	//param += "&ordChgGb=G681_20";
+	var actionUrl = "/orderChange/exchange/request/form?" + param;
+	cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
+};
+
+// 반품요청 철회
+var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
+	mcxDialog.confirm('반품요청을 철회하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordChgSq = ordChgSq;
+			data.ordDtlNo = ordDtlNo;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/return/request/cancel'
+				, jsonData
+				, function (result) {
+					if (result.message != '회수컨펌 된 내역이 있습니다.') {
+						var selectedRow = gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data;
+						gridOptionsOrderChangeInfo.api.updateRowData({remove: [selectedRow]});
+					}
+				}
+			);
+		}
+	});
+};
+
+// 교환요청 철회
+var fnExchangeReqeustCancel = function (ordChgSq, ordNo, ordDtlNo, rowIdx) {
+	mcxDialog.confirm('교환요청을 취소하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 		= ordNo;
+			data.ordDtlNo 	= ordDtlNo;
+			data.ordChgSq 	= ordChgSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/exchange/request/cancel'
+				, jsonData, function () {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
+		}
+	});
+};
+
+// 주문상품 상세 변경 이력 팝업
+var fnOrderDetailChangeHst = function (ordDtlNo) {
+	var actionUrl = "/order/detail/change/hst/form/" + ordDtlNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailChangeHstForm');
+};
+
+// 쿠폰내역 팝업
+var fnOrderCouponHst = function (ordNo) {
+	var actionUrl = "/order/detail/coupon/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailCouponHstForm');
+};
+
+// 다다익선내역 팝업
+var fnOrderTmtbHst = function (ordNo) {
+	var actionUrl = "/order/detail/tmtb/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailTmtbHstForm');
+};
+
+// 포인트내역 팝업
+var fnOrderPointHst = function (ordNo) {
+	var actionUrl = "/order/detail/point/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailPointHstForm');
+};
+
+// 상품권내역 팝업
+var fnOrderGiftcardHst = function (ordNo) {
+	var actionUrl = "/order/detail/giftcard/hst/form/" + ordNo;
+	cfnOpenModalPopup(actionUrl, 'popupOrderDetailGiftcardHstForm');
+};
+
+// 관리자메모 등록
+var fnCreateOrderMemo = function (ordNo, seq, mode) {
+	var actionUrl = "/order/memo/create/form?ordNo=" + ordNo + "&seq=" + seq + "&mode=" + mode;
+	cfnOpenModalPopup(actionUrl, 'popupCreateOrderMemo');
+};
+
+// 환불계좌 등록
+var fnCreateOrderRfAccount = function (ordNo, custNo) {
+	var actionUrl = "/order/refund/account/create/form?ordNo=" + ordNo + "&custNo="+custNo;
+	cfnOpenModalPopup(actionUrl, 'popupCreateRefundAccount');
+};
+
+// 주문메모 삭제
+var fnDeleteOrderMemo = function (ordNo, orderMemoSq) {
+	mcxDialog.confirm('삭제하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 	= ordNo;
+			data.seq 	= orderMemoSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/memo/delete'
+				, jsonData
+				, function () {
+					fnBindOrderMemo();
+				}
+			);
+		}
+	});
+}
+
+// 주문메모 바인딩
+var fnBindOrderMemo = function() {
+	gagaAgGrid.fetch(
+		"/order/admin/memo/list/" + ordNo
+		, gridOptionsOrderMemoInfo
+		, null
+		, function (result) {
+		}
+	);
+};
+
+// 주문 변경요청정보 바인딩
+var fnBindOrderChangeInfo = function() {
+	gagaAgGrid.fetch(
+		"/order/return/info/list/" + ordNo
+		, gridOptionsOrderChangeInfo
+		, null
+		, function (result) {
+			$('#gridOrderChangeInfo').css('height', 31 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
+		}
+	);
+};
+
+// 배송비 DATA 바인딩
+var fnBindDeliveryAddr = function(delvAddrSq) {
+	if (typeof (delvAddrSq) != 'undefined') {
+		var strLink = '/order/deliver/addr/info/' + delvAddrSq;
+		var jsonData = JSON.stringify([]);
+		gagajf.ajaxJsonSubmit(strLink, jsonData, fnBindDeliveryAddrCallBack);
+	}
+};
+
+// 배송정보
+var fnBindDeliveryAddrCallBack = function(result) {
+	gridOptionsDeliveryInfo.api.setRowData(result);
+};
+
+// 변경요청 > 회수지정보 저장
+var fnSaveChgerAddr = function (rowIdx) {
+	gridOptionsOrderChangeInfo.api.stopEditing();
+	
+	var jsonData = JSON.stringify(gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data);
+	
+	mcxDialog.confirm("주소를 변경하시겠습니까?", {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			gagajf.ajaxJsonSubmit(
+				"/order/change/info/addr/update"
+				, jsonData
+				, function () {
+					
+				}
+			);
+		}
+	});
+}
+
+// LMS 전송
+var fnOpenLmsForm = function (orderPhnno, custNo) {
+	if (gagajf.isNull(custNo) && gagajf.isNull(orderPhnno)) {
+		mcxDialog.alert("정보가 올바르지 않습니다.");
+		return false;
+	}
+
+	$('#orderDetailInfo input[name=orderPhnno]').val(orderPhnno);
+	$('#orderDetailInfo input[name=custNo]').val(custNo);
+
+	var param = {};
+	param.elementCellPhnno = '#orderDetailInfo input[name=orderPhnno]';
+	param.elementCustNo = '#orderDetailInfo input[name=custNo]';
+	cfnOpenLmsPopup(param);
+};
+
+// EMAIL 전송
+var fnOpenEmailForm = function (orderEmail, orderNm, custNo) {
+	if (gagajf.isNull(orderEmail) && gagajf.isNull(orderNm) && gagajf.isNull(custNo)) {
+		mcxDialog.alert("정보가 올바르지 않습니다.");
+		return false;
+	}
+	$('#orderDetailInfo input[name=orderEmail]').val(orderEmail);
+	$('#orderDetailInfo input[name=orderNm]').val(orderNm);
+	$('#orderDetailInfo input[name=custNo]').val(custNo);
+
+	var param = {};
+	param.elementRecipEmail = '#orderDetailInfo input[name=orderEmail]';
+	param.elementCustNm = '#orderDetailInfo input[name=orderNm]';
+	param.elementCustNo = '#orderDetailInfo input[name=custNo]';
+
+	cfnOpenEmailPopup(param);
+};
+
+// 송장조회
+var fnSearchDelivery = function (url, invoiceNo) {
+	var fullUrl = url + invoiceNo;
+	window.open(fullUrl, '_blank');
+};
+
+// 2021.06.17스윗트래커 송장조회
+var fnSweetTracker = function (shipCompCd, invoiceNo) {
+	var actionUrl = "/order/delivery/sweetTrackerDeliveryInfo?shipCompCd=" + shipCompCd + "&invoiceNo=" + invoiceNo;
+	cfnOpenModalPopup(actionUrl, 'popupSweetTrackerDeliveryInfo');
+	
+};
+
+// 카드전표 영수증 조회
+var fnReceiptPage = function (tid) {
+	var fullUrl = "https://npg.nicepay.co.kr/issue/IssueLoader.do?TID=" + tid + "&type=0";
+	window.open(fullUrl, '_blank');
+};
+
+// 구매확정철회
+var fnChangedCompleteDelivery = function (ordNo, ordDtlNo, ordDtlStat) {
+	if ('70' !== ordDtlStat) {
+		mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
+		return false;
+	}
+	
+	var data = {};
+	data.ordDtlNo = ordDtlNo;
+	data.ordNo = ordNo;
+	var jsonData = JSON.stringify(data);
+	
+	gagajf.ajaxJsonSubmit('/order/check/status', jsonData, fnChangedCompleteDeliveryCallback);
+};
+
+var fnChangedCompleteDeliveryCallback = function (result) {
+	// 구매확정 처리 가능 하지 않으면 얼럿 노출 끝
+	if (!result.isPossible) {
+		mcxDialog.alert("구매확정철회는 구매확정인 상태여만 가능합니다.");
+		return false;
+	} else {
+		mcxDialog.confirm("구매확정 철회 하시겠습니까? <br> 지급된 포인트에 대한 처리는 별도로 하셔야 합니다. ", {
+			cancelBtnText	: "취소",
+			sureBtnText		: "확인",
+			sureBtnClick	: function () {
+				var data = {};
+				data.ordDtlNo = result.ordDtlNo;
+				data.ordNo = result.ordNo;
+				
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit(
+					'/order/complete/delivery/changed'
+					, jsonData
+					, function (result) {
+						uifnPopupClose('popupOrderDetail');
+						fnReOpenOrderDetailPopup();
+					}
+				);
+			}
+		});
+	}
+};
+
+// 주문상세 상태값 변경
+var fnChangOrdDtlStat = function (obj) {
+	var ordNo 			= $(obj).attr("ordNo");
+	var ordDtlNo 		= $(obj).attr("ordDtlNo");
+	var ordDtlStat 		= $(obj).val();
+	var ordDtlStatNm 	= $(obj).children("option:selected").text();
+	var strConfirm		= "주문상태를 " + ordDtlStatNm + "(으)로 변경 하시겠습니까?"
+	
+	mcxDialog.confirm(strConfirm, {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo			= ordNo;
+			data.ordDtlNo 		= ordDtlNo;
+			data.ordDtlStat 	= ordDtlStat;
+
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/detail/ordDtlStat/changed'
+				, jsonData
+				, function (result) {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
+		}
+	});
+};
+
+// DAUM을 이용한 우편번호 팝업 레이어
+var fnOpenDaumAddr = function(idx, addrGb) {
+		
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// 배송지주소 수정
+			if ("ADDR" == addrGb) {
+				gridOptionsDeliveryInfo.api.gre
+				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipZipcode 		= data.zonecode;
+				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipBaseAddr 		= cfnGetDaumRoadAddr(data);
+				gridOptionsDeliveryInfo.api.getRowNode(idx).data.recipDtlAddr 		= "";
+				gridOptionsDeliveryInfo.api.refreshCells();
+			}
+			// 회수지주소 수정
+			else {
+				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerZipcode	= data.zonecode;
+				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerBaseAddr 	= cfnGetDaumRoadAddr(data);
+				gridOptionsOrderChangeInfo.api.getRowNode(idx).data.chgerDtlAddr 	= "";
+				gridOptionsOrderChangeInfo.api.refreshCells();
+			}
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
+	
+	cfnOpenDaumAddr(daumZip);
+}
+
+// 2021.06.17 구성상품 내역 팝업 호출 
+var fnOrderDetailItemForm = function (ordDtlNo) {
+	var actionUrl = "/delivery/detail/item/form/" + ordDtlNo;
+	cfnOpenModalPopup(actionUrl, 'popupDeliveryDetailItemForm');
+}
+</script>
+
+</html>
+
+
+
+
+

+ 274 - 0
산출물/4.구축/데이터추출/상품평포인튼지급로직_분석및처리.sql

@@ -0,0 +1,274 @@
+SELECT *
+FROM   TB_COMMON_CODE
+WHERE  CD_GB = 'G069'
+;
+
+SELECT *
+FROM   TB_REVIEW
+WHERE  CUST_NO = 100011
+;
+
+SELECT DATE_ADD(LAST_DAY(NOW()), INTERVAL -1 MONTH)
+     , DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY)
+     , STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d')
+FROM   DUAL
+;
+
+SELECT COUNT(*) AS CNT
+FROM   TB_REVIEW RV
+WHERE  RV.CUST_NO = 100011 
+AND    RV.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+AND    RV.CONFIRM_DT >= STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d')
+AND    RV.CONFIRM_DT < DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY)
+;
+
+INSERT INTO TB_COMMON_CODE VALUES ('G043', 'G043_50', '당월지급횟수(10)초과', NULL, 'Y', 5, 1, NOW(), 1, NOW());
+INSERT INTO TB_COMMON_CODE VALUES ('G043', 'G043_60', '동일상품기지급', NULL, 'Y', 5, 1, NOW(), 1, NOW());
+COMMIT;
+
+SELECT CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'T'
+            ELSE
+                CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) > 0 THEN 'I'
+                     WHEN IFNULL(RA.VIDEO_CNT,0) > 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'V'
+                     ELSE 'IV'
+                END
+       END AS REVIEW_GB
+FROM   TB_REVIEW R
+LEFT OUTER JOIN (
+		SELECT REVIEW_SQ
+		     , SUM(CASE WHEN FILE_GB = 'M' AND KUF_KEY IS NOT NULL THEN 1 ELSE 0 END)     AS VIDEO_CNT
+		     , SUM(CASE WHEN FILE_GB = 'I' AND ORG_FILE_NM IS NOT NULL THEN 1 ELSE 0 END) AS IMG_CNT
+		FROM   TB_REVIEW_ATTACH
+		WHERE  REVIEW_SQ = 47
+		GROUP  BY REVIEW_SQ
+       ) RA ON R.REVIEW_SQ = RA.REVIEW_SQ
+WHERE  R.REVIEW_SQ = 47
+;
+
+SELECT GOODS_CD, COUNT(*) AS CNT
+FROM   TB_REVIEW
+WHERE  CUST_NO = 100030
+AND    PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+AND    CONFIRM_YN = 'Y' /*확인완료된 넘*/
+GROUP  BY GOODS_CD
+HAVING COUNT(*) > 1
+;
+
+-- 당월에 지급된 포인트 횟수
+SELECT *
+FROM   TB_REVIEW R
+WHERE  1 = 1
+AND    R.CUST_NO = 100047
+AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+AND    R.REG_DT >= STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d') /*당월1일부터*/
+AND    R.REG_DT < DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) /*당월말일까지*/
+ORDER  BY REVIEW_SQ DESC
+;
+
+SELECT *
+FROM   TB_CUSTOMER
+WHERE  CUST_NO = 100011
+;
+
+SELECT *
+FROM   TB_ORDER
+WHERE  ORD_NO = 6217
+;
+
+-- 테스트를 위한 비번 업데이트
+UPDATE TB_CUSTOMER SET PASSWD = 'aee70ae8fb1dc5d6e9b7aec45c5f4f23e597752ddc213321eebc41979b78ebc4' WHERE CUST_NO = 100011;
+COMMIT;
+-- 비번 원복
+UPDATE TB_CUSTOMER SET PASSWD = 'a0252f05fcea604efb19d3132877922f9f0a1ac56f7715368aadde4bd03538dc' WHERE CUST_NO = 100011;
+
+SELECT *
+FROM   TB_REVIEW
+WHERE  REVIEW_SQ = 242
+;
+
+SELECT *
+FROM   TB_REVIEW_ATTACH
+WHERE  REVIEW_SQ = 242
+;
+
+SELECT *
+FROM   TB_CUST_POINT_HST
+WHERE  REVIEW_SQ = 242
+;
+
+DELETE
+FROM   TB_REVIEW
+WHERE  REVIEW_SQ = 242
+;
+
+DELETE
+FROM   TB_REVIEW_ATTACH
+WHERE  1 = 1
+AND    REVIEW_SQ = 242
+;
+
+DELETE
+FROM   TB_CUST_POINT_HST
+WHERE  REVIEW_SQ = 242
+;
+
+-- 텍스트만 등록한 경우 포인트 즉시 지급되는가? => 즉시 지급된다.
+-- => OK
+
+-- 텍스트+포토만 등록한 경우 포인트 즉시 지급되는가? => 즉시 지급된다.
+-- => OK
+
+-- 텍스트+동영상만 등록한 경우 포인트 즉시 지급되는가? => 즉시 지급 불가. BOS에서 동영상 노출 시 포인트 지급
+-- 텍스트+포토+동영상 모두 등록한 경우 포인트 즉시 지급되는가? => 즉시 지급되나 동영상은 프론트에 노출되지 않는다. BOS에서 동영상 노출 시 프론트에 노출된다.
+
+-- 포인트가 기 지급된 상품을 프론트에서 상품평을 등록한 경우 포인트가 지급되는가? => 포인트가 지급되지 않아야 한다.. 그리고 BOS에서 포인트지급상태가 "동일상품기지급"로 표기되어야 한다.
+-- 등록 예시) 해당 상품은 이미 등록된 상품평입니다. 상품평은 등록되어도 포인트는 지급이 안 되어야 합니다.
+-- => OK
+
+-- 당월에 지급 가능한 총횟수(10회)가 넘는 상품평을 등록한 경우 포인트가 지급되는가? => 포인트가 지급되지 않아야 한다. 그리고 BOS에서 포인트지급상태가 "당월지급횟수(10)초과"로 표기되어야 한다.
+-- => OK
+
+SELECT *
+FROM   TB_REVIEW
+WHERE  CUST_NO = 100030
+AND    GOODS_CD = 'ANW11APT65'
+AND    PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+AND    CONFIRM_YN = 'Y' /*확인완료된 넘*/
+;
+
+SELECT COUNT(*) AS CNT
+FROM   TB_REVIEW R
+WHERE  1 = 1
+AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+AND    R.CONFIRM_YN = 'Y' /*확인완료된 넘*/
+AND    R.CUST_NO = #{custNo}
+AND    R.GOODS_CD = #{goodsCd}
+;
+
+SELECT COUNT(*) AS CNT
+FROM   TB_REVIEW R
+WHERE  (R.CUST_NO,R.GOODS_CD) = (SELECT CUST_NO, GOODS_CD
+                                 FROM   TB_REVIEW
+                                 WHERE  REVIEW_SQ = 152) /*해당 상품평을 등록한 고객과 상품코드*/
+AND    R.REVIEW_SQ != 152 /*해당 상품평 외*/
+AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+AND    R.CONFIRM_YN = 'Y' /*확인완료된 넘*/
+;
+	
+SELECT *
+FROM   TB_REVIEW_ATTACH
+;
+
+SELECT *
+FROM   TB_CUST_POINT_HST
+WHERE  1 = 1
+AND    OCCUR_GB = 'G069_20' /*상품평포인트지급*/
+AND    PNT_UPLOAD_STAT = 'G070_30' /*반영완료*/
+AND    CUST_NO
+AND    ORD_NO 
+AND    ORD_DTL_NO
+;
+
+/* TsaReview.getReviewAttachList */
+SELECT RV_ATC_SQ   /*상품평첨부파일일련번호*/
+     , REVIEW_SQ   /*상품평일련번호*/
+     , FILE_GB     /*파일구분(M:동영상, I:이미지)*/
+     , ORG_FILE_NM /*원본파일명*/
+     , SYS_FILE_NM /*시스템파일명*/
+     , KUF_KEY     /*KOLLUS업로드파일키*/
+     , KMC_KEY     /*KOLLUS미디어컨텐츠키*/
+FROM   TB_REVIEW_ATTACH
+WHERE  REVIEW_SQ =  210 /**P*/
+AND    DEL_YN = 'N' /*삭제안된넘*/
+ORDER  BY FILE_GB DESC, RV_ATC_SQ
+;
+
+/* TsfReivew.getReviewPointGiveMonthCount */	
+		SELECT COUNT(*) AS CNT
+		FROM   TB_REVIEW R
+		WHERE  R.CUST_NO = (SELECT CUST_NO
+		                    FROM   TB_REVIEW
+		                    WHERE  REVIEW_SQ =  210 /**P*/) /*해당 상품평을 등록한 고객*/
+		AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+		AND    R.REG_DT  >=  STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d') /*당월1일부터*/
+		AND    R.REG_DT  <  DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) /*당월말일까지*/
+		;
+		
+	/* TsfReivew.getReviewPointGiveCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_REVIEW R
+		WHERE  (R.CUST_NO,R.GOODS_CD) = (SELECT CUST_NO, GOODS_CD
+		                                 FROM   TB_REVIEW
+		                                 WHERE  REVIEW_SQ =  210 /**P*/) /*해당 상품평을 등록한 고객과 상품코드*/
+		AND    R.REVIEW_SQ !=  210 /**P*/ /*해당 상품평 외*/
+		AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+		;
+		
+	/* TsaReview.getReviewAttachList */
+		SELECT CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'T' /*텍스트상품평*/
+		            ELSE
+		                CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) > 0 THEN 'I' /*포토상품평*/
+		                     WHEN IFNULL(RA.VIDEO_CNT,0) > 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'V' /*동영상상품평*/
+		                     ELSE 'IV' /*포토+동영상상품평*/
+		                END
+		       END AS REVIEW_GB
+		FROM   TB_REVIEW R
+		LEFT OUTER JOIN (
+		        SELECT REVIEW_SQ
+		             , SUM(CASE WHEN FILE_GB = 'M' AND KUF_KEY IS NOT NULL THEN 1 ELSE 0 END)     AS VIDEO_CNT
+		             , SUM(CASE WHEN FILE_GB = 'I' AND ORG_FILE_NM IS NOT NULL THEN 1 ELSE 0 END) AS IMG_CNT
+		        FROM   TB_REVIEW_ATTACH
+		        WHERE  REVIEW_SQ =  210 /**P*/
+		        GROUP  BY REVIEW_SQ
+		       ) RA ON R.REVIEW_SQ = RA.REVIEW_SQ
+		WHERE  R.REVIEW_SQ =  210 /**P*/
+		;
+		
+-- 상품평포인트 월지급횟수(10회) 초과한 포인트금액 조회
+with BASE_REVIEW as (
+	SELECT DATE_FORMAT(R.REG_DT,'%Y-%m') as REG_YM
+	     , R.CUST_NO
+	     , RANK() OVER(partition by DATE_FORMAT(R.REG_DT,'%Y-%m'), R.CUST_NO order by R.REVIEW_SQ) as RNUM
+	     , R.REVIEW_SQ
+	     , CPH.PNT_AMT
+	FROM   TB_REVIEW R
+	inner join TB_CUST_POINT_HST CPH on R.CUST_NO = CPH.CUST_NO and R.REVIEW_SQ = CPH.REVIEW_SQ
+	WHERE  1 = 1
+-- 	and    R.CUST_NO = 106600
+	AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+	AND    R.REG_DT >= STR_TO_DATE('2021-09-01','%Y-%m-%d') /*9월1일부터*/
+)
+select R.REG_YM       /*연월*/
+     , R.CUST_NO      /*고객번호*/
+     , R.TOT_PNT_AMT  /*지급된총포인트*/
+     , R.OVER_PNT_AMT /*초과지급된포인트*/
+     , R.TOT_PNT_AMT - R.OVER_PNT_AMT as REAL_PNT_AMT /*실제지급되어야할포인트*/
+from   (
+		select R.REG_YM
+		     , R.CUST_NO
+		     , SUM(R.PNT_AMT) as TOT_PNT_AMT
+		     , IFNULL((select SUM(PNT_AMT)
+		               from   BASE_REVIEW
+		               where  REG_YM = R.REG_YM
+		               and    CUST_NO = R.CUST_NO
+		               and    RNUM > 10
+		              ),0) as OVER_PNT_AMT /*포인트초과분*/
+		from   BASE_REVIEW R
+		group  by R.REG_YM, R.CUST_NO
+	   ) R 
+where  R.OVER_PNT_AMT > 0
+order  by R.REG_YM, R.CUST_NO
+;
+
+-- 상품평포인트 동일상품지급횟수 조회 (3건)
+SELECT R.CUST_NO
+     , R.GOODS_CD
+     , COUNT(*) AS CNT
+     , SUM(CPH.PNT_AMT) as PNT_AMT
+FROM   TB_REVIEW R
+inner join TB_CUST_POINT_HST CPH on R.REVIEW_SQ = CPH.REVIEW_SQ and R.CUST_NO = CPH.CUST_NO
+WHERE  R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+AND    R.REG_DT >= STR_TO_DATE('2021-09-01','%Y-%m-%d') /*9월1일부터*/
+group  by R.CUST_NO, R.GOODS_CD
+having COUNT(*) > 1
+;

BIN
산출물/5.시험/[STYLE24] 통합 테스트 5차_시나리오_20210727_2.xlsx


BIN
산출물/5.시험/[STYLE24] 통합 테스트_시나리오 및 결과_20210729.xlsx


BIN
산출물/6.전개/style24_개선건_작업시간_20211228.xlsx