Browse Source

관리자 > 주문상세 개발중

jsh77b 5 years ago
parent
commit
681471e74d

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

@@ -64,6 +64,16 @@ public interface TsaOrderDao {
 	 */
 	Collection<Order> getOrderDetailList(Order order);
 	
+	/**
+	 * 주문상세 > 사은품목록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	Collection<Order> getOrderFreeGiftList(Order order);
+	
 	/**
 	 * 배송정보
 	 *
@@ -218,7 +228,7 @@ public interface TsaOrderDao {
 	 * @author jsh77b
 	 * @since 2020. 11. 30
 	 */
-	Order getOrderDetailInfo(@Param("ordDtlNo") int ordDtlNo);
+	Order getOrderDetailInfo(Order order);
 	
 	/**
 	 * 주문상세정보 변경 - 송장번호 적용(입점)

+ 46 - 16
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java

@@ -100,6 +100,18 @@ public class TsaOrderService {
 		return orderDao.getOrderInfoList(order);
 	}
 	
+	/**
+	 * 주문상세 > 사은품목록
+	 *
+	 * @param order - 주문 정보
+	 * @return Collection<Order>
+	 * @author jsh77b
+	 * @since 2020. 11. 18
+	 */
+	public Collection<Order> getOrderFreeGiftList(Order order) {
+		return orderDao.getOrderFreeGiftList(order);
+	}
+	
 	/**
 	 * 주문상품정보 목록
 	 *
@@ -233,11 +245,11 @@ public class TsaOrderService {
 			updateData.setSupplyCompCd(oneData.getSupplyCompCd());
 			updateData.setRegNo(TsaSession.getInfo().getUserNo());
 			updateData.setUpdNo(TsaSession.getInfo().getUserNo());
-			
-			log.info("updateData={}", updateData);
-
+						
 			// 2. 주문상세상태값 변경
+			// 2.1 2020.12.15 주문상태체크추가 (결제완료 상태만 상품준비중 변경)
 			int result = orderDao.updateOrderDetailStat(updateData);
+			
 			if (result > 0) {
 				// 3. 주문상세상태 변경 이력생성
 				orderDao.createOrderDetailHst(updateData);
@@ -246,6 +258,7 @@ public class TsaOrderService {
 			// 4. 엑셀 다운로드용 임시테이블 데이타 체크
 			result = orderDao.getEntryUploadExcelCheck(updateData);
 			if (result < 1) {
+				
 				// 5. 엑셀 다운로드용 임시테이블 저장
 				orderDao.createEntryExcelDownTmp(updateData);
 			}
@@ -266,6 +279,9 @@ public class TsaOrderService {
 		String[] listTitles = {
 			"입점업체"
 			, "브랜드"
+			, "상품타입"
+			, "상품코드"
+			, "상품명"
 			, "주문번호"
 			, "주문상세번호"
 			, "주문상세상태"
@@ -279,8 +295,9 @@ public class TsaOrderService {
 			, "수령자기본주소"
 			, "수령자상세주소"
 			, "업체상품코드"
-			, "상품코드"
-			, "상품명"
+			, "단품코드"
+			, "단품상품명"
+			, "칼라"
 			, "사이즈"
 			, "주문수량"
 			, "주문금액"
@@ -293,6 +310,9 @@ public class TsaOrderService {
 		String[] cellNames = {
 			"supplyCompNm"
 			, "brandKnm"
+			, "goodsTypeNm"
+			, "goodsCd"
+			, "goodsNm"
 			, "ordNo"
 			, "ordDtlNo"
 			, "ordDtlStatNm"
@@ -306,10 +326,11 @@ public class TsaOrderService {
 			, "recipBaseAddr"
 			, "recipDtlAddr"
 			, "supplyGoodsCd"
-			, "goodsCd"
-			, "goodsNm"
+			, "itemCd"
+			, "itemNm"
+			, "optCd1"
 			, "optCd2"
-			, "ordQty"
+			, "itemOrdQty"
 			, "ordAmt"
 			, "totDcAmt"
 			, "realOrdAmt"
@@ -340,6 +361,10 @@ public class TsaOrderService {
 			, GagaExcelConstants.CellType.CHAR_CENTER.name()
 			, GagaExcelConstants.CellType.CHAR_CENTER.name()
 			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
+			, GagaExcelConstants.CellType.CHAR_CENTER.name()
 		};
 
 		GagaExcelResultHandler<Order> handler = new GagaExcelResultHandler<>(excelFilenameWithPath, "출고배송목록(입점)", listTitles, cellNames, cellTypes);
@@ -367,6 +392,7 @@ public class TsaOrderService {
 		
 		// 1. 송장번호 등록 대상 목록 처리
 		for (Order oneData : orderList) {
+			
 			// 2. 송장번호, 업체코드 체크 
 			if (!StringUtils.isEmpty(oneData.getInvoiceNo()) && !StringUtils.isEmpty(oneData.getShipCompCd())) {
 				totalCount++;
@@ -378,23 +404,27 @@ public class TsaOrderService {
 				updateData.setSupplyCompCd(oneData.getSupplyCompCd());
 				updateData.setRegNo(TsaSession.getInfo().getUserNo());
 				updateData.setUpdNo(TsaSession.getInfo().getUserNo());
-				updateData.setGoodsCd(oneData.getGoodsCd());
+				updateData.setItemCd(oneData.getItemCd());
 				updateData.setOptCd2(oneData.getOptCd2());
-				updateData.setOrdQty(oneData.getOrdQty());
+				updateData.setItemOrdQty(oneData.getItemOrdQty());
 				updateData.setShipCompCd(oneData.getShipCompCd());
 				updateData.setInvoiceNo(oneData.getInvoiceNo().replace("-", ""));
 
 				// 3. 원주문 상세정보 조회
-				Order orgOrder = orderDao.getOrderDetailInfo(oneData.getOrdDtlNo());
+				// 2020.12.15 세트상품의 경우에는 2개 이상의 row 가 표시됨 (주문상세번호 + 상풐코드로 + 사이즈코드) 변경
+				Order orgOrder = orderDao.getOrderDetailInfo(oneData);
 				if (orgOrder == null) {
-					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>"; // 상품정보 (상품명 + 칼라명) / 사이즈코드
+					failedGoodCdStr += updateData.getItemCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>"; // 상품정보 (상품명 + 칼라명) / 사이즈코드
 					failedCount++;
 					continue;
 				}
 
-				// 4. 상품코드, 사이즈, 주문수량 체크
-				if (!orgOrder.getGoodsCd().equals(updateData.getGoodsCd()) || !orgOrder.getOptCd2().equals(updateData.getOptCd2()) || orgOrder.getOrdQty() != updateData.getOrdQty()) {
-					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
+				// 4. 상품코드, 사이즈, 주문수량 체크 (세트상품도 단품 단위로 업로드 요청)
+				// 2020.12.15 세트상품 때문에 단품단위로 비교
+				if (!orgOrder.getItemCd().equals(updateData.getItemCd()) 
+						|| !orgOrder.getOptCd2().equals(updateData.getOptCd2()) 
+						|| orgOrder.getItemOrdQty() != updateData.getItemOrdQty()) {
+					failedGoodCdStr += updateData.getItemCd() + " /  " + updateData.getOptCd2() + "(Error2)<br/>";
 					failedCount++;
 					continue;
 				}
@@ -410,7 +440,7 @@ public class TsaOrderService {
 					successCount++;
 					orderDao.createOrderDetailHst(updateData);
 				} else {
-					failedGoodCdStr += updateData.getGoodsCd() + " /  " + updateData.getOptCd2() + "(Error1)<br/>";
+					failedGoodCdStr += updateData.getItemCd() + " /  " + updateData.getOptCd2() + "(Error3)<br/>";
 					failedCount++;
 				}
 			}

+ 8 - 4
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -123,8 +123,8 @@ public class TsaOrderController extends TsaBaseController {
 		// 주문목록 페이지 조회
 		Collection<Order> orderList = orderService.getOrderList(order);
 		
-		result.set("pageing", order);
-		result.set("orderList", orderList);
+		result.set("pageing"	, order);
+		result.set("orderList"	, orderList);
 		
 		return result;
 	}
@@ -198,11 +198,13 @@ public class TsaOrderController extends TsaBaseController {
 		
 		Order order = new Order();
 		order.setOrdNo(ordNo);
+		order.setDelYn("N");
 		
 		// 1. 주문기본정보
 		mav.addObject("ordNo"					, ordNo);												// 주문번호
 		mav.addObject("orderInfo"				, orderService.getOrderInfoList(order));				// 주문기본정보
 		mav.addObject("orderGoodsInfo"			, orderService.getOrderDetailList(order));				// 주문상품정보
+		mav.addObject("orderFreeGiftInfo"		, orderService.getOrderFreeGiftList(order));			// 주문사은품정보 2020.12.16 추가
 		mav.addObject("orderDeliveryAddrInfo"	, orderService.getDeliveryAddrList(order));				// 배송정보
 		mav.addObject("orderPaymentInfo"		, orderService.getOrderPaymentBasicInfoList(order));	// 결제정보
 		mav.addObject("orderDeliveryFeeInfo"	, orderService.getDeliveryFeeList(order));				// 배송비정보
@@ -210,6 +212,8 @@ public class TsaOrderController extends TsaBaseController {
 		// 2. 클레임정보
 		mav.addObject("orderChangeInfo"			, orderService.getOrderChangeList(order));				// 취소/반품/교환요청 정보
 		mav.addObject("orderRefundInfo"			, orderService.orderRefundInfo(order));					// 환불정보
+		
+		// 3. 주문메모정보
 		mav.addObject("orderCounselInfo"		, orderService.orderCounselInfo(order));				// 상담내역
 		mav.addObject("orderAdminMemoInfo"		, orderService.getOrderTsainMemoList(order));			// 관리자메모
 		
@@ -317,9 +321,9 @@ public class TsaOrderController extends TsaBaseController {
 		String[] cellName = {
 			"ordNo"
 			, "ordDtlNo"
-			, "goodsCd"
+			, "itemCd"
 			, "optCd2"
-			, "ordQty"
+			, "itemOrdQty"
 			, "shipCompCd"
 			, "invoiceNo"
 		};

+ 15 - 0
style24.admin/src/main/java/com/style24/persistence/domain/Order.java

@@ -230,6 +230,21 @@ public class Order extends TscBaseDomain {
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;
+	
+	private String counselClsfNm;
+	private String ansNo;
+	private String ansNm;
+	private String regNm;
+	private String updNm;
+	
+	private int orderMemoSq;
+	private String memo;
+	
+	private int ordFreeGiftSq;
+	private int freeGiftSq;
+	private String freeGiftName;
+	private int freeGiftValSq;
+	private int usePoint;
 }
 
 

+ 117 - 67
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -178,6 +178,8 @@
 			     , A.*
 			FROM (
 				SELECT O.ORD_NO
+				     , OD.ORD_DTL_NO
+				     , ODI.ORD_DTL_ITEM_SQ
 				     , O.ORD_NM
 				     , O.CUST_NO
 				     , OD.VENDOR_ID
@@ -371,15 +373,20 @@
 		        		#{item}
 		            </foreach>
 		        </if>
-		        ORDER  BY O.REG_DT DESC
+		        ORDER  BY OD.ORD_NO DESC
+		                , OD.ORD_DTL_NO DESC
+		                , ODI.ORD_DTL_ITEM_SQ DESC
 	        ) A
 			JOIN (SELECT @rownum := 0) R
 		) Z
 		WHERE  1=1
         AND    Z.RNUM BETWEEN  #{pageable.startRow} AND #{pageable.endRow}
+        ORDER  BY Z.ORD_NO DESC
+                , Z.ORD_DTL_NO DESC
+                , Z.ORD_DTL_ITEM_SQ DESC
 	</select>
 	
-	<!-- 주문 목록 금액, 수량 정보-->
+	<!-- 주문 목록 금액, 수량 정보 : 사용안함 -->
 	<select id="getOrderListSumInfo" parameterType="Order" resultType="Order">
 		/* order.getOrderListSumInfo */
 		SELECT SUM(ORD_AMT)                   AS SUM_ORD_AMT
@@ -492,7 +499,7 @@
 		) X
 	</select>
 	
-	<!-- 주문 정보 -->
+	<!-- 주문상세 > 주문 정보 -->
 	<select id="getOrderInfoList" parameterType="Order" resultType="Order">
 		/* order.getOrderInfoList */
 		SELECT O.SITE_CD
@@ -534,7 +541,7 @@
 		AND    O.ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 주문상세 목록 -->
+	<!-- 주문상세 > 상품상세 목록 -->
 	<select id="getOrderDetailList" parameterType="Order" resultType="Order">
 		/* order.getOrderDetailList */
 		SELECT G1.GOODS_CD 
@@ -595,28 +602,32 @@
 		AND    OD.ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 주문상세 단품 목록 -->
-	<select id="getOrderDetailItemList" parameterType="Order" resultType="Order">
-		/* order.getOrderDetailItemList */
-		SELECT OD.ORD_NO
-		     , OD.GOODS_CD
-		     , G.GOODS_NM
-		     , ODI.OPT_CD1
-		     , ODI.OPT_CD2
-		     , ODI.ITEM_QTY
-		     , ODI.ITEM_PRICE
-		     , ODI.OPT_ADD_PRICE
-		FROM   TB_ORDER_DETAIL_ITEM ODI
-		INNER  JOIN TB_ORDER_DETAIL OD
-		ON     ODI.ORD_NO = OD.ORD_NO
-		AND    ODI.ORD_DTL_NO  = OD.ORD_DTL_NO
+	<!-- 주문상세 > 사은품목록 -->
+	<select id="getOrderFreeGiftList" parameterType="Order" resultType="Order">
+		/* order.getOrderFreeGiftList */
+		SELECT OFGV.ORD_FREE_GIFT_SQ
+		     , OFGV.ORD_NO
+		     , OFGV.FREE_GIFT_SQ 
+		     , FG.FREE_GIFT_NAME 
+		     , OFGV.FREE_GIFT_VAL_SQ 
+		     , OFGV.USE_POINT
+		     , OFGV.ITEM_CD 
+		     , G.GOODS_NM AS ITEM_NM
+		     , OFGV.ITEM_QTY 
+		     , OFGV.OPT_CD 
+		     , OFGV.OPT_CD1 
+		     , OFGV.OPT_CD2 
+		     , OFGV.DEL_YN
+		FROM   TB_ORD_FREE_GIFT_VAL OFGV
+		INNER  JOIN TB_FREE_GIFT FG
+		ON     OFGV.FREE_GIFT_SQ = FG.FREE_GIFT_SQ
 		INNER  JOIN TB_GOODS G
-		ON     ODI.ITEM_CD = G.GOODS_CD
-		WHERE  1=1
-		AND    ODI.ORD_NO = #{ordNo}
+		ON     OFGV.ITEM_CD = G.GOODS_CD 
+		WHERE 1=1
+		AND  OFGV.ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 배송정보 -->
+	<!-- 주문상세 > 배송정보 -->
 	<select id="getDeliveryAddrList" parameterType="Order" resultType="Order">
 		/* order.getDeliveryAddrList */
 		SELECT OD.DELV_ADDR_SQ 
@@ -637,7 +648,7 @@
 		AND    OD.ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 결제정보 -->
+	<!-- 주문상세 > 결제정보 -->
 	<select id="getOrderPaymentBasicInfoList" parameterType="Order" resultType="Order">
 		/* order.getOrderPaymentBasicInfoList */
 		SELECT P.ESCROW_YN
@@ -656,7 +667,7 @@
 		AND    P.ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 배송비정보 -->
+	<!-- 주문상세 > 배송비정보 -->
 	<select id="getDeliveryFeeList" parameterType="Order" resultType="Order">
 		/* order.getDeliveryFeeList */
 		SELECT DF.DELV_FEE_GB 
@@ -671,7 +682,7 @@
 		AND    DF.ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 취소/반품/교환요청 정보 -->
+	<!-- 주문상세 > 취소/반품/교환요청 정보 -->
 	<select id="getOrderChangeList" parameterType="Order" resultType="Order">
 		/* order.getOrderChangeList */
 		SELECT OCD.ORD_CHG_SQ
@@ -708,7 +719,7 @@
 		AND    OD.ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 환불정보 -->
+	<!-- 주문상세 > 환불정보 -->
 	<select id="orderRefundInfo" parameterType="Order" resultType="Order">
 		/* order.orderRefundInfo */
 		SELECT P.PAY_MEANS
@@ -727,77 +738,101 @@
 		AND    R.ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 상담내역 -->
+	<!-- 주문상세 > 상담내역 -->
 	<select id="orderCounselInfo" parameterType="Order" resultType="Order">
 		/* order.orderCounselInfo */
 		SELECT CS.COUNSEL_CLSF
+			 , FN_GET_CODE_NM('G059', CS.COUNSEL_CLSF) AS COUNSEL_CLSF_NM
 		     , CS.REL_GOODS_CD
 		     , CS.QUEST_TITLE
 		     , DATE_FORMAT(CS.QUEST_DT,'%Y%m%d%H%i%S') AS QUEST_DT
 		     , DATE_FORMAT(CS.ANS_DT,'%Y%m%d%H%i%S') AS ANS_DT
 		     , CS.ANS_NO
+		     , (SELECT USER_NM
+		        FROM   TB_USER X
+		        WHERE  X.USER_NO = CS.ANS_NO) AS ANS_NM
 		     , CS.DEL_YN
 		FROM   TB_COUNSEL CS
 		WHERE  1=1
 		AND    CS.REL_ORD_NO = #{ordNo}
 	</select>
 	
-	<!-- 관리자메모 -->
+	<!-- 주문상세 > 관리자메모 -->
 	<select id="getOrderTsainMemoList" parameterType="Order" resultType="Order">
 		/* order.getOrderTsainMemoList */
-		SELECT *
-		FROM   TB_DELIVERY_FEE DF
-		WHERE  1=1
-		AND    DF.ORD_NO = #{ordNo}
+		SELECT ORDER_MEMO_SQ 
+		     , OM.ORD_NO
+		     , OM.MEMO
+		     , OM.REG_NO
+		     , OM.REG_DT
+		     , OM.UPD_NO
+		     , OM.UPD_DT
+		     , (SELECT USER_NM
+		        FROM   TB_USER X
+		        WHERE  X.USER_NO = OM.REG_NO) AS REG_NM
+		FROM  TB_ORDER_MEMO OM
+		WHERE 1=1
+		AND   OM.ORD_NO = #{ordNo}
+		AND   OM.DEL_YN = #{delYn}
+		ORDER BY OM.REG_DT DESC
 	</select>
 	
-	<!-- 입점업체미발주 주문목록 -->
+	<!-- 주문/배송 > 입점업체미발주목록 -->
 	<select id="getOrderSellerUnorderList" parameterType="Order" resultType="Order">
 		/* order.getOrderSellerUnorderList */
 		SELECT OD.SUPPLY_COMP_CD
 		     , (SELECT SC.SUPPLY_COMP_NM
 		        FROM   TB_SUPPLY_COMPANY SC
 		        WHERE  SC.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
-		     , G.BRAND_CD 
+		     , G1.BRAND_CD 
 		     , (SELECT B.BRAND_KNM 
 		        FROM   TB_BRAND B
-		        WHERE  B.BRAND_CD = G.BRAND_CD) AS BRAND_KNM 
+		        WHERE  B.BRAND_CD = G1.BRAND_CD) AS BRAND_KNM
+		     , G1.GOODS_TYPE 
+		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
+		     , G1.GOODS_CD
+		     , G1.GOODS_NM
 		     , OD.ORD_NO
 		     , OD.ORD_DTL_NO
 		     , OD.ORD_DTL_STAT 
-		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT ) AS ORD_DTL_STAT_NM
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
 		     , O.ORD_NM 
 		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
 		     , P.PAY_MEANS 
-		     , FN_GET_CODE_NM('G014', P.PAY_MEANS  ) AS PAY_MEANS_NM
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
 		     , O.ORD_PHNNO 
 		     , DA.RECIP_NM 
 		     , DA.RECIP_PHNNO 
 		     , DA.RECIP_ZIP_NO 
 		     , DA.RECIP_BASE_ADDR 
 		     , DA.RECIP_DTL_ADDR 
-		     , G.SUPPLY_GOODS_CD
-		     , G.GOODS_CD
-		     , G.GOODS_NM 
+		     , G2.SUPPLY_GOODS_CD
+		     , G2.GOODS_CD AS ITEM_CD
+		     , G2.GOODS_NM AS ITEM_NM
 		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2
-		     , OD.ORD_QTY 
-		     , OD.ORD_AMT
-		     , OD.CPN1_DC_AMT + TMTB1_DC_AMT + TMTB2_DC_AMT +  GOODS_CPN_DC_AMT + CART_CPN_DC_AMT + PNT_DC_AMT + PRE_PNT_DC_AMT AS TOT_DC_AMT
-		     , OD.REAL_ORD_AMT 
+		     , ODI.ITEM_ORD_QTY 
+		     , ODI.ORD_AMT
+		     , ODI.CPN1_DC_AMT + ODI.TMTB1_DC_AMT + ODI.TMTB2_DC_AMT +  ODI.GOODS_CPN_DC_AMT + ODI.CART_CPN_DC_AMT + ODI.PNT_DC_AMT + ODI.PRE_PNT_DC_AMT AS TOT_DC_AMT
+		     , ODI.REAL_ORD_AMT 
 		     , OD.INVOICE_NO 
 		     , OD.SHIP_COMP_CD
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_GOODS G1
+		ON     OD.GOODS_CD = G1.GOODS_CD
 		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_GOODS_IMG GI
+		ON     ODI.ITEM_CD = GI.GOODS_CD
+		AND    ODI.OPT_CD1 = GI.COLOR_CD
 		INNER  JOIN TB_PAYMENT P
 		ON     O.ORD_NO = P.ORD_NO 
 		AND    P.PAY_GB = 'O'
-		INNER  JOIN TB_GOODS G
-		ON     OD.GOODS_CD = G.GOODS_CD
 		INNER  JOIN TB_DELIVERY_ADDR DA
 		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ 
 		INNER  JOIN TB_DELIVERY_FEE DF		
@@ -1025,7 +1060,7 @@
 		)
 	</insert>
 	
-	<!-- 입점업체미발주목록 -->
+	<!-- 주문/배송 > 입점업체미발주목록 > 엑셀다운로드 -->
 	<select id="getSellerUnorderList" parameterType="Order" resultType="Order">
 		/* Order.getSellerUnorderList */
 		SELECT (SELECT SC.SUPPLY_COMP_NM
@@ -1033,42 +1068,52 @@
 		        WHERE  SC.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
 		     , (SELECT B.BRAND_KNM 
 		        FROM   TB_BRAND B
-		        WHERE  B.BRAND_CD = G.BRAND_CD) AS BRAND_KNM 
+		        WHERE  B.BRAND_CD = G1.BRAND_CD) AS BRAND_KNM
+	         , G1.GOODS_CD 
+		     , G1.GOODS_NM
+			 , G1.GOODS_TYPE
+		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
 		     , OD.ORD_NO
 		     , OD.ORD_DTL_NO
-		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT ) AS ORD_DTL_STAT_NM
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
 		     , O.ORD_NM 
 		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
-		     , FN_GET_CODE_NM('G014', P.PAY_MEANS  ) AS PAY_MEANS_NM
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
 		     , O.ORD_PHNNO 
 		     , DA.RECIP_NM 
 		     , DA.RECIP_PHNNO 
 		     , DA.RECIP_ZIP_NO 
 		     , DA.RECIP_BASE_ADDR 
 		     , DA.RECIP_DTL_ADDR 
-		     , G.SUPPLY_GOODS_CD
-		     , G.GOODS_CD
-		     , G.GOODS_NM 
+		     , G2.SUPPLY_GOODS_CD
+		     , G2.GOODS_CD AS ITEM_CD
+		     , G2.GOODS_NM AS ITEM_NM 
+		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2
-		     , OD.ORD_QTY 
-		     , OD.ORD_AMT
-		     , OD.CPN1_DC_AMT + TMTB1_DC_AMT + TMTB2_DC_AMT +  GOODS_CPN_DC_AMT + CART_CPN_DC_AMT + PNT_DC_AMT + PRE_PNT_DC_AMT AS TOT_DC_AMT
-		     , OD.REAL_ORD_AMT 
+		     , ODI.ITEM_ORD_QTY 
+		     , ODI.ORD_AMT
+		     , ODI.CPN1_DC_AMT + ODI.TMTB1_DC_AMT + ODI.TMTB2_DC_AMT +  ODI.GOODS_CPN_DC_AMT + ODI.CART_CPN_DC_AMT + ODI.PNT_DC_AMT + ODI.PRE_PNT_DC_AMT AS TOT_DC_AMT
+		     , ODI.REAL_ORD_AMT 
 		     , OD.INVOICE_NO 
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_GOODS G1
+		ON     OD.GOODS_CD = G1.GOODS_CD
 		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
 		ON     OD.ORD_NO = ODI.ORD_NO 
-		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_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_GOODS_IMG GI
+		ON     ODI.ITEM_CD = GI.GOODS_CD
+		AND    ODI.OPT_CD1 = GI.COLOR_CD 
 		INNER  JOIN TB_PAYMENT P
 		ON     O.ORD_NO = P.ORD_NO 
-		AND    P.PAY_GB = 'O'
-		INNER  JOIN TB_GOODS G
-		ON     OD.GOODS_CD = G.GOODS_CD
+		AND    P.PAY_GB = 'O' 
 		INNER  JOIN TB_DELIVERY_ADDR DA
-		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ 
-		INNER  JOIN TB_DELIVERY_ADDR DA		
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		INNER  JOIN TB_DELIVERY_FEE DF		
 		ON     DF.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD
 		AND    DF.DELV_FEE_CD = OD.DELV_FEE_CD 
 		AND    DF.ORD_NO = OD.ORD_NO
@@ -1081,8 +1126,8 @@
 		</if>
 	</select>
 	
-	<!-- 주문상세 목록 -->
-	<select id="getOrderDetailInfo" parameterType="int" resultType="Order">
+	<!-- 주문/배송 > 입점업체미발주목록 > 주문상세 목록 -->
+	<select id="getOrderDetailInfo" parameterType="Order" resultType="Order">
 		/* TsaOrder.getOrderDetailInfo */
 		SELECT O.ORD_NO
 		     , O.MALL_GB
@@ -1137,7 +1182,10 @@
 		     , OD.UPD_NO
 		     , OD.UPD_DT
 		     , (SELECT SELF_GOODS_YN FROM TB_GOODS WHERE GOODS_CD = OD.GOODS_CD) AS SELF_YN
+		     , ODI.ITEM_CD
+		     , ODI.OPT_CD1
 		     , ODI.OPT_CD2 
+		     , ODI.ITEM_ORD_QTY
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
@@ -1146,6 +1194,8 @@
 		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
 		WHERE  O.ORD_NO = OD.ORD_NO
 		AND    OD.ORD_DTL_NO = #{ordDtlNo}
+		AND    ODI.ITEM_CD = #{itemCd}
+		AND    ODI.OPT_CD2 = #{optCd2}
 		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
 	</select>
 	
@@ -1160,7 +1210,7 @@
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = CURRENT_TIMESTAMP()
 		WHERE  ORD_DTL_NO = #{ordDtlNo}
-		AND    ORD_DTL_STAT in ('G013_30', 'G013_26')
+		AND    ORD_DTL_STAT IN ('G013_30', 'G013_55')
 		AND    SUPPLY_COMP_CD = #{supplyCompCd}
 	</update>
 

+ 789 - 87
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -13,83 +13,126 @@
  * 1.0  2020.11.16   jsh77b       최초 작성
  *******************************************************************************
  -->
-<div class="modalPopup" data-width="1500"> <!-- data-width="1500" data-height="870" -->
+<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">
-				<form id="orderDetailInfo" name="orderDetailInfo" action="#" th:method="post">
-					<input type="hidden" name="custNo"/>
-					<input type="hidden" name="orderNm"/>
-					<input type="hidden" name="orderPhnno"/>
-					<input type="hidden" name="orderEmail"/>
-					
-					<h4>기본정보</h4>
-					<div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
-										
-					<h4>주문상품정보</h4>
-					<button type="button" style="margin-left:10px;" class="btn btnRight btn-base btn-sm" id="btnExchange">교환요청</button>
-					<button type="button" class="btn btnRight btn-base btn-sm" id="btnReturn">반품요청</button>
-					<button type="button" class="btn btnRight btn-base btn-sm" id="btnCancel">취소요청</button>
-					<div id="gridOrderGoodsInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-					
-					<h4>배송정보</h4>
-					<button type="button" style="margin-left:10px;" class="btn btnRight btn-base btn-sm" id="btnUpdateOrderAddr">수정</button>
-					<div id="gridDeliveryAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
-					
-					<table style="width:100%;">
-						<colgroup>
-							<col style="width:65%;"/>
-							<col/>
-						</colgroup>
-						<tbody>
-							<tr>
-								<td style="">
-									<h4>결제정보</h4>
-									<div id="gridPaymentInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
-								</td>
-								<td style="">
-									<h4>배송비정보</h4>
-									<div id="gridDeliveryFeeInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
-								</td>
-							<tr>
-						</tbody>
-					</table>
-				</form>
-			</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>
+				<div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+									
+				<h4>주문상품정보</h4>
+				<button type="button" class="btn btnRight btn-base btn-sm" id="btnExchange" style="margin-left:10px;" >교환요청</button>
+				<button type="button" class="btn btnRight btn-base btn-sm" id="btnReturn">반품요청</button>
+				<button type="button" class="btn btnRight btn-base btn-sm" id="btnCancel">취소요청</button>
+				<div id="gridOrderGoodsInfo" style="width:100%; height:200px;" class="ag-theme-balham"></div>
+				
+				<h4>주문사은품정보</h4>
+				<button type="button" class="btn btnRight btn-base btn-sm" id="btnFreeGiftCancel" style="margin-left:10px;" >사은품취소</button>
+				<div id="gridOrderFreeGiftInfo" style="width:100%; height:120px;" class="ag-theme-balham"></div>
+				
+				<h4>배송정보</h4>
+				<button type="button" style="margin-left:10px;" class="btn btnRight btn-base btn-sm" id="btnUpdateOrderAddr">수정</button>
+				<div id="gridDeliveryAddrInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+				
+				<table style="width:100%;">
+					<colgroup>
+						<col style="width:65%;"/>
+						<col/>                                                                                  
+					</colgroup>
+					<tbody>
+						<tr>
+							<td style="">
+								<h4>결제정보</h4>
+								<div id="gridPaymentInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+							</td>
+							<td style="">
+								<h4>배송비정보</h4>
+								<div id="gridDeliveryFeeInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+							</td>
+						<tr>
+					</tbody>
+				</table>
+
+				<div id="wrapOrderChange">
+					<h4>(취소/반품/교환)요청 정보</h4>
+					<div id="gridOrderChangeInfo" style="width:100%; height: 100px; 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>
+
+				<table style="width:100%;">
+					<colgroup>
+						<col style="width:65%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<td style="">
+								<h4>상담내역</h4>
+								<div id="gridOrderCounselInfo" style="width:100%; height: 100px;" class="ag-theme-balham"></div>
+							</td>
+							<td style="">
+								<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>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<div id="wrapRefundAccount" style="width:25%;">
+					<h4>환불계좌정보</h4>
+					<button type="button" id="btnSaveAccount" class="btn btnRight btn-base btn-sm" style="margin-left:10px;" >등록</button>
+					<div id="gridOptionsRefundAccountInfo" style="height: 100px;" class="ag-theme-balham"></div>
+				</div>
+				
+			</form>
 		</div>
 	</div>
 </div>
 
 <!-- data -->
 <script th:inline="javascript">
-var ordNo 					= [[${ordNo}]];						// 주문번호
-var orderInfo 				= [[${orderInfo}]];					// 기본정보
-var orderGoodsInfo 			= [[${orderGoodsInfo}]];			// 주문상세정보
-var orderDeliveryAddrInfo	= [[${orderDeliveryAddrInfo}]];		// 배송정보
-var orderPaymentInfo 		= [[${orderPaymentInfo}]];			// 결제정보
-var orderDeliveryFeeInfo 	= [[${orderDeliveryFeeInfo}]];		// 배송비정보
-
-//var orderChangeInfo = [[${orderChangeInfo}]];				// 취소/반품/교환요청 정보
-//var orderRefundInfo = [[${orderRefundInfo}]];				// 환불정보
-//var orderCounselInfo = [[${orderCounselInfo}]];				// 상담내역
-//var orderAdminMemoInfo = [[${orderAdminMemoInfo}]];			// 관리자메모
-//var orderRfAccountInfo = [[${orderRfAccountInfo}]];			// 환불계좌정보
-//var siteCdList = cfnConvertToArray([[${siteCdList}]]);
-//var bankList = cfnConvertToArray([[${bankList}]]);			// 은행코드
+var ordNo 					= [[${ordNo}]];							// 주문번호
+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 orderRfAccountInfo 		= [[${orderRfAccountInfo}]];			// 환불계좌정보
+
+var siteCdList 				= gagajf.convertToArray([[${siteCdList}]]);	// 사이트목록
+var bankList 				= gagajf.convertToArray([[${bankList}]]);	// 은행코드
 
 // 쿠폰,포인트,적립금 컬럼배경색설정
-//var goodsCpnDcAmtClass = (orderGoodsInfo[0].goodsCpnDcAmt > 0) ? 'bgPink' : 'text-right';
-//var cartCpnDcAmtClass = (orderGoodsInfo[0].cartCpnDcAmt > 0) ? 'bgPink' : 'text-right';
-//var plusCpnDcAmtClass = (orderGoodsInfo[0].plusCpnDcAmt > 0) ? 'bgPink' : 'text-right';
-//var pntDcAmtClass = (orderGoodsInfo[0].pntDcAmt > 0) ? 'bgPink' : 'text-right';
-//var prePntDcAmtClass = (orderGoodsInfo[0].prePntDcAmt > 0) ? 'bgPink' : 'text-right';
-//var savePntAmtClass = (orderGoodsInfo[0].savePntAmt > 0) ? 'bgSky' : 'text-right';
-//var custNo = orderInfo[0].custNo;
-//var payMeans = orderInfo[0].payMeans;
-//var mallGb = orderInfo[0].mallGb;
+var goodsCpnDcAmtClass 		= (orderGoodsInfo[0].goodsCpnDcAmt > 0) 	? 'bgPink' : 'text-right';
+var cartCpnDcAmtClass 		= (orderGoodsInfo[0].cartCpnDcAmt > 0) 		? 'bgPink' : 'text-right';
+var plusCpnDcAmtClass 		= (orderGoodsInfo[0].plusCpnDcAmt > 0) 		? 'bgPink' : 'text-right';
+var pntDcAmtClass 			= (orderGoodsInfo[0].pntDcAmt > 0) 			? 'bgPink' : 'text-right';
+var prePntDcAmtClass 		= (orderGoodsInfo[0].prePntDcAmt > 0) 		? 'bgPink' : 'text-right';
+var savePntAmtClass 		= (orderGoodsInfo[0].savePntAmt > 0) 		? 'bgSky' : 'text-right';
+
+var custNo 					= orderInfo[0].custNo;
+var payMeans 				= orderInfo[0].payMeans;
+var mallGb 					= orderInfo[0].mallGb;
 </script>
 
 <!-- AgGrid 컬럼 세팅 -->
@@ -347,13 +390,18 @@ var columnDefsGoodsInfo = [
 		]
 	},
 	{
-		headerName		: "상품권"
-		, field			: "gfcdUseAmt"
-		, width			: 80
-		, cellClass		: 'text-right'
-		, cellRenderer	: function (params) {
-			return params.value.addComma();
-		}
+		headerName	: "상품권",
+		children	: [
+			{
+				headerName		: "사용"
+				, field			: "gfcdUseAmt"
+				, width			: 80
+				, cellClass		: 'text-right' //pntDcAmtClass
+				, cellRenderer	: function (params) {
+					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderPointHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+				}
+			}
+		]
 	},
 	{
 		headerName	: "금액(원/단위)",
@@ -408,6 +456,32 @@ var columnDefsGoodsInfo = [
 ];
 var gridOptionsGoodsInfo = orderAgGrid.getGridOptions(columnDefsGoodsInfo);
 
+// 2.5 주문사은품정보
+var columnDefsOrderFreeGiftInfo = [
+	{headerName: "주문사은품번호"	, field: "ordFreeFigtSq"	, width: 100, cellClass: 'text-center', hide: true},
+	{headerName: "주문번호"		, field: "ordNo"			, width: 100, cellClass: 'text-center'},
+	{headerName: "사은품프로모션"	, field: "freeGiftSq"		, width: 100, cellClass: 'text-center', hide: true},
+	{headerName: "사은품프로모션명"	, field: "freeGiftName"		, width: 100, cellClass: 'text-center'},
+	{headerName: "사은품혜택번호"	, field: "freeGiftValSq"	, width: 100, cellClass: 'text-center', hide: true},
+	{
+		headerName			: "사용포인트"		
+		, field				: "usePoint"			
+		, width				: 100
+		, cellClass			: 'text-right'
+		, valueFormatter	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{headerName: "사은품코드"		, field: "itemCd"			, width: 100, cellClass: 'text-center'},
+	{headerName: "사은품명"		, field: "itemNm"			, width: 100, cellClass: 'text-center'},
+	{headerName: "사은품수량"		, field: "itemQty"			, width: 100, cellClass: 'text-center'},
+	{headerName: "옵션명"			, field: "optCd"			, width: 100, cellClass: 'text-center'},
+	{headerName: "옵션코드1"		, field: "optCd1"			, width: 100, cellClass: 'text-center'},
+	{headerName: "옵션코드2"		, field: "optCd2"			, width: 100, cellClass: 'text-center'},
+	{headerName: "삭제여부"		, field: "delYn"			, width: 100, cellClass: 'text-center'}
+];
+var gridOptionsOrderFreeGiftInfo = orderAgGrid.getGridOptions(columnDefsOrderFreeGiftInfo);
+
 // 3.배송정보
 var columnDefsDeliveryInfo = [
 	{headerName: "배송지번호"		, field: "delvAddrSq"	, width: 100, cellClass: 'text-center'},
@@ -431,7 +505,7 @@ var gridOptionsDeliveryInfo = orderAgGrid.getGridOptions(columnDefsDeliveryInfo)
 
 // 4.결제정보
 var columnDefsPaymentInfo = [
-	{headerName: "에스크로여부"		, field: "escrowYn"		, width: 80		, cellClass: 'text-center'},
+	{headerName: "에스크로여부"		, field: "escrowYn"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "결제수단"		, field: "payMeansNm"	, width: 100	, cellClass: 'text-center'},
 	{
 		headerName		: "카드(은행)"
@@ -525,6 +599,204 @@ var columnDefsDeliveryFeeInfo = [
 	}
 ];
 var gridOptionsDeliveryFeeInfo = orderAgGrid.getGridOptions(columnDefsDeliveryFeeInfo);
+
+// 6. 반품/교환 정보
+var columnDefsOrderChangeInfo = [
+	{headerName: "요청번호"		, field: "ordChgSq"		, width: 60		, cellClass: 'text-center'},
+	{headerName: "요청구분"		, field: "chgGbNm"		, width: 75		, cellClass: 'text-center'},
+	{headerName: "상품코드"		, field: "goodsCd"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "사이즈"			, field: "sizeCd"		, width: 50		, cellClass: 'text-center'},
+	{headerName: "수량"			, field: "chgQty"		, width: 40		, cellClass: 'text-center'},
+	{headerName: "요청상태"		, field: "chgStatNm"	, width: 80		, cellClass: 'text-center'},
+	{
+		headerName		: "요청일자"		
+		, field			: "chgRegDt"		
+		, width			: 90		
+		, 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: "chgMemo"		, width: 120	, cellClass: 'text-center'},
+	{headerName: "변경자명"		, field: "chgerNm"		, width: 70		, cellClass: 'text-center'},
+	{headerName: "변경자핸드폰"		, field: "chgerPhnno"	, width: 105	, cellClass: 'text-center', editable: true},
+	{headerName: "우편번호"		, field: "chgerPostNo"	, width: 60		, cellClass: 'text-center'},
+	{
+		headerName		: "주소(기본)"
+		, field			: "chgerBaseAddr"
+		, width			: 250
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = "";
+
+			if (params.data.wdInvoiceSendYn == 'N') {
+				retStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnOpenPostFindPopup('" + params.node.rowIndex + "');\">POST</button>";
+				retStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnSaveChgerAddr('" + params.node.rowIndex + "');\">저장</button>";
+			}
+
+			retStr += (gagajf.isNull(params.value)) ? '' : (gagajf.isNull(params.data.chgerDtlAddr)) ? params.value : params.value + params.data.chgerDtlAddr;
+			return retStr;
+		}
+	},
+	{headerName: "주소(상세)"		, field: "chgerDtlAddr"	, width: 105	, cellClass: 'text-center'	, editable: true},
+	{
+		headerName		: "택배사전송"
+		, field			: "wdInvoiceSendYn"
+		, width			: 70
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			return (params.value == 'N') ? '미전송' : '전송';
+		}
+	},
+	{
+		headerName		: "요청취소"
+		, field			: "ordDtlNo"
+		, width			: 100
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = "";
+
+			if (params.data.chgGb == "30" && params.data.chgStat == "40") {
+				retStr = ' <button type="button" class="btn btn-success" onclick="fnReturnReqeustCancel(\'' + params.data.ordChgSq + '\',\'' + params.value + '\',\'' + params.node.rowIndex + '\');"> 반품취소 </button>';
+			} else if (params.data.chgGb == "40" && params.data.chgStat == "30") {
+				retStr = ' <button type="button" class="btn btn-success" onclick="fnExchangeReqeustCancel(\'' + params.data.ordChgSq + '\',\'' + ordNo + '\',\'' + params.value + '\',\'' + params.node.rowIndex + '\');"> 교환취소 </button>';
+			} else if (params.data.chgGb == "20" && params.data.chgStat == "20") {
+				//retStr = '<button type="button" class="btn btn-success" onclick="fnCancelConfirmRequestCancel(\'' + params.data.ordChgSq + '\')">요청철회 </button>';
+			}
+
+			return retStr;
+		}
+	},
+	{
+		headerName		: "회수지시전송"
+		, field			: "wdInvoiceSendYn"
+		, width			: 90
+		, cellClass		: 'text-center'
+	},
+	{headerName: "회수송장번호", field: "wdInvoiceNo", width: 90, cellClass: 'text-center'}
+];
+var gridOptionsOrderChangeInfo = orderAgGrid.getGridOptions(columnDefsOrderChangeInfo);
+
+// 7.환불정보
+var columnDefsRefundInfo = [
+	{headerName: "환불수단"		, field: "payMeansNm"	, width: 80		, cellClass: 'text-center'},
+	{headerName: "환불은행(카드)"	, field: "raBank"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "환불은행계좌번호"	, field: "raNo"			, width: 100	, 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			: "regDt"		
+		, 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: "regNo"		, width: 80		, cellClass: 'text-center'}
+];
+var gridOptionsRefundInfo = orderAgGrid.getGridOptions(columnDefsRefundInfo);
+
+// 8.상담내역
+var columnDefsOrderCounselInfo = [
+	{headerName: "상담구분"		, field: "counselClsfNm"	, width: 120	, cellClass: 'text-center'},
+	{headerName: "상품코드"		, field: "goodsCd"			, width: 120	, cellClass: 'text-center'},
+	{
+		headerName		: "질문제목"
+		, field			: "questTitle"
+		, width			: 400
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			return '<a href="javascript:void(0);" onclick="cfnOpenOneToOneAskDetailPopup(\'' + params.data.counselSq + '\')">' + params.value + '</a>';
+		}
+	},
+	{
+		headerName		: "등록일"			
+		, field			: "questDt"	
+		, width			: 120	
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{
+		headerName		: "답변일"			
+		, field			: "ansDt"	
+		, width			: 120	
+		, cellClass		: 'text-center'
+		, cellRenderer	: function(params) {
+			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
+		}
+	},
+	{headerName: "답변자"			, field: "ansNm"	, width: 80		, cellClass: 'text-center'},
+	{headerName: "삭제여부"		, field: "delYn"	, width: 80		, cellClass: 'text-center'}
+];
+var gridOptionsOrderCounselInfo = orderAgGrid.getGridOptions(columnDefsOrderCounselInfo);
+
+// 9.주문메모
+var columnDefsOrderMemoInfo = [
+	{headerName: "등록일시"		, field: "regDt"	, width: 135	, cellClass: 'text-center'},
+	{
+		headerName		: "등록자"
+		, field			: "regNm"
+		, width			: 130
+		, cellClass		: 'text-center'
+	},
+	{
+		headerName		: "관리메모"
+		, field			: "memo"
+		, width			: 250
+		, 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.seq + '\',\'U' + '\');">' + params.value + '</a>';
+			}
+			return retStr;
+		}
+	},
+	{
+		headerName		: "삭제"
+		, field			: "orderMemoSeq"
+		, width			: 80
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			
+			if (params.data.updId == userId) {
+				retStr = '<button type="button" class="btn btn-danger" onclick="fnDeleteOrderMemo(\'' + params.data.ordNo + '\',\'' + params.value + '\');"> - </button>';
+			}
+			return retStr;
+		}
+	},
+];
+var gridOptionsOrderMemoInfo = orderAgGrid.getGridOptions(columnDefsOrderMemoInfo);
+
+// 10. 환불계좌정보
+var columnDefsRefundAccountInfo = [
+	{
+		headerName			: "은행명"
+		, field				: "raBnk"
+		, width				: 120
+		, cellClass			: 'text-center'
+		, valueFormatter	: function (params) {
+			return gagaAgGrid.lookupValue(bankList, params.value);
+		}
+	},
+	{headerName: "계좌번호"		, field: "raNo"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "예금주"			, field: "raNm"		, width: 80		, cellClass: 'text-center'}
+];
+var gridOptionsRefundAccountInfo = orderAgGrid.getGridOptions(columnDefsRefundAccountInfo);
 </script>
 
 <script>
@@ -566,40 +838,470 @@ $(window).resize(function () {
 </script>
 <!-- AgGrid 생성 -->
 <script>
-// 창종료
+// 팝업닫기
 var fnOrderDetailClose = function(){
 	uifnPopupClose('popupOrderDetail');
 }
 
 $(document).ready(function () {
-	// 그리드 그리기
-	gagaAgGrid.createGrid('gridOrderInfo'			, gridOptionsOrderInfo);		// 기본정보
-	gagaAgGrid.createGrid('gridOrderGoodsInfo'		, gridOptionsGoodsInfo);		// 상품정보
-	gagaAgGrid.createGrid('gridDeliveryAddrInfo'	, gridOptionsDeliveryInfo);		// 배송정보
-	gagaAgGrid.createGrid('gridPaymentInfo'			, gridOptionsPaymentInfo);		// 결제정보
-	gagaAgGrid.createGrid('gridDeliveryFeeInfo'		, gridOptionsDeliveryFeeInfo);	// 배송비정보
 	
-	// 그리드 데이터 바인딩
+	// 1. 그리드 그리기
+	gagaAgGrid.createGrid('gridOrderInfo'					, gridOptionsOrderInfo);			// 기본정보
+	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('gridOptionsRefundAccountInfo'	, gridOptionsRefundAccountInfo);	// 환불계좌정보
+	gagaAgGrid.createGrid('gridOrderCounselInfo'			, gridOptionsOrderCounselInfo);		// 상담내역
+	gagaAgGrid.createGrid('gridOrderMemoInfo'				, gridOptionsOrderMemoInfo);		// 관리자메모
+	
+	// 2. 그리드 데이터 바인딩
 	gridOptionsOrderInfo.api.setRowData(orderInfo);									// 기본정보
 	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);							// 환불정보
+	gridOptionsRefundAccountInfo.api.setRowData(orderRfAccountInfo);				// 환불계좌정보
+	gridOptionsOrderCounselInfo.api.setRowData(orderCounselInfo);					// 상담내역
+	gridOptionsOrderMemoInfo.api.setRowData(orderAdminMemoInfo);					// 관리자메모
 	
-	//gridOptionsOrderChangeInfo.api.setRowData(orderChangeInfo);				// 취소/반품/교환요청 정보
-	//gridOptionsRefundInfo.api.setRowData(orderRefundInfo);					// 환불정보
-	//gridOptionsOrderCounselInfo.api.setRowData(orderCounselInfo);			// 상담내역
-	//gridOptionsOrderMemoInfo.api.setRowData(orderAdminMemoInfo);			// 관리자메모
-	//gridOptionsRefundAccountInfo.api.setRowData(orderRfAccountInfo);		// 환불계좌정보
-	
-	// 그리드 높이 설정
+	// 3. 그리드 높이 설정
 	fnSetGridHeightInit();
 });
 
 $(document).ready(function () {
 	$('#orderDetailContents').css("width", "97%").css("height", "96%");
+	
+	// 취소요청
+	$('#btnCancel').on('click', function () {
+		fnCancelRequest(ordNo, 'N');
+	});
+	// 반품요청
+	$('#btnReturn').on('click', function () {
+		fnReturnRequest(ordNo, 'N');
+	});
+	// 교환요청
+	$('#btnExchange').on('click', function () {
+		fnExchangeRequest(ordNo, 'N');
+	});
+	// 메모등록
+	$('#btnCreateOrderMemo').on('click', function () {
+		fnCreateOrderMemo(ordNo, '', 'N');
+	});
+	// 배송 정보 수정
+	$('#btnUpdateOrderAddr').on('click', function () {
+		fnUpdateOrderAddr();
+	});
+	// 환불계좌 등록
+	$('#btnSaveAccount').on('click', function () {
+		fnCreateOrderRfAccount(ordNo, custNo);
+	});
 });
 </script>
+
+<!-- function -->
+<script>
+	var gridOrderChangeInfoSelectedIdx = '';
+	
+	// 배송지변경
+	var fnUpdateOrderAddr = function () {
+		gridOptionsDeliveryInfo.api.stopEditing();
+		
+		var jsonData = JSON.stringify(gridOptionsDeliveryInfo.api.getRowNode(0).data);
+		mcxDialog.confirm("주소를 변경하시겠습니까?", {
+			cancelBtnText	: "취소",
+			sureBtnText		: "확인",
+			sureBtnClick	: function () {
+				gagajf.ajaxJsonSubmit(
+					"/order/deliver/addr/update"
+					, jsonData
+					, function () {
+						
+					}
+				);
+			}
+		});
+	}
+
+	// 반품요청
+	var fnReturnRequest = function () {
+		var actionUrl = "/order/return/request/form?ordNo=" + ordNo;
+		cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
+	};
+
+	// 교환요청
+	var fnExchangeRequest = function () {
+		var actionUrl = "/order/exchange/request/form?ordNo=" + ordNo;
+		cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
+	};
+
+	// 취소요청
+	var fnCancelRequest = function () {
+		var actionUrl = "/order/cancel/request/form?ordNo=" + ordNo + "&cncWait=N";
+		cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
+	};
+
+	// 취소승인
+	var fnCancelConfirmRequest = function (ordChgSq) {
+		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?", {
+			cancelBtnText	: "취소",
+			sureBtnText		: "확인",
+			sureBtnClick	: function () {
+				var data = new Object();
+				data.ordNo 		= ordNo;	//전역변수
+				data.ordChgSq 	= ordChgSq;
+
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit(
+					'/order/cancel/confirm'
+					, jsonData
+					, function (result) {
+						uifnPopClose('popupOrderDetail');
+						fnReOpenOrderDetailPopup();
+					}
+				);
+			}
+		});
+	};
+
+	// 취소요청철회
+	var fnCancelConfirmRequestCancel = function (ordChgSq) {
+		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?", {
+			cancelBtnText	: "취소",
+			sureBtnText		: "확인",
+			sureBtnClick	: function () {
+				var data = new Object();
+				data.ordChgSq = ordChgSq;
+				
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit(
+					'/order/cancel/wait/cancel'
+					, jsonData
+					, function (result) {
+						uifnPopClose('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 fnOrderPointHst = function (ordNo) {
+		var actionUrl = "/order/detail/point/hst/form/" + ordNo;
+		cfnOpenModalPopup(actionUrl, 'popupOrderDetailPointHstForm');
+	};
+
+	// 관리자메모 등록
+	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.orderMemoSq 	= 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) {
+				$('#gridOrderMemoInfo').css('height', 41 + 33 * ((result.length == 0 || result == null) ? 1 : result.length));
+			}
+		);
+	};
+
+	// 주문 변경요청정보 바인딩
+	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));
+			}
+		);
+	};
+
+	// 환불계좌 정보
+	var fnBindOrderRfAccountInfo = function () {
+		gagaAgGrid.fetch(
+			"/order/refund/account/info/list?ordNo=" + ordNo+"&custNo="+custNo
+			, gridOptionsRefundAccountInfo
+			, null
+			, function (result) {
+				$('#gridOptionsRefundAccountInfo').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 fnSetPostValue = function(zipNo, baseRoadAddr1, baseRoadAddr2, etcAddr, postPosition) {
+		if (postPosition == 'grid') {
+			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipPostNo = zipNo;
+			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipBaseAddr = baseRoadAddr1;
+			gridOptionsDeliveryInfo.api.getRowNode(0).data.recipDtlAddr = baseRoadAddr2;
+			gridOptionsDeliveryInfo.api.refreshCells();
+		} 
+		else if (postPosition == 'returnRequest') {
+			$("#returnRequestFrm input[name=chgerPostNo]").val(zipNo);
+			$("#returnRequestFrm input[name=chgerBaseAddr]").val(baseRoadAddr1);
+			$("#returnRequestFrm input[name=chgerDtlAddr]").val(baseRoadAddr2);
+		} 
+		else if (postPosition == 'updateOrderChangeAddr') {
+			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerPostNo = zipNo;
+			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerBaseAddr = baseRoadAddr1;
+			gridOptionsOrderChangeInfo.api.getRowNode(gridOrderChangeInfoSelectedIdx).data.chgerDtlAddr = baseRoadAddr2;
+			gridOptionsOrderChangeInfo.api.refreshCells();
+
+		}
+	}
+
+	// 변경요청 > 우편번호찾기
+	var fnOpenPostFindPopup = function (idx) {
+		gridOrderChangeInfoSelectedIdx = idx;
+		cfnOpenPostFindPopup('updateOrderChangeAddr');
+	}
+
+	// 변경요청 > 회수지정보 저장
+	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 () {
+						
+					}
+				);
+			}
+		});
+	}
+
+	// 반품요청 철회
+	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 () {
+						uifnPopClose('popupOrderDetail');
+						fnReOpenOrderDetailPopup();
+					}
+				);
+			}
+		});
+	};
+	
+	// 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');
+	};
+
+	// 카드전표 영수증 조회
+	var fnReceiptPage = function (tid) {
+		var fullUrl = "https://npg.nicepay.co.kr/issue/IssueLoader.do?TID=" + tid + "&type=0";
+		window.open(fullUrl, '_blank');
+	};
+	
+	// 수동 회수 지시 
+	var fnWdinvocieSend = function (ordChgSq) {
+		mcxDialog.confirm("요청번호 [" + ordChgSq + "] 회수지시 처리 하시겠습니까? <br> 시스템에서 회수지시를 보내지는않습니다.", {
+			cancelBtnText	: "취소",
+			sureBtnText		: "확인",
+			sureBtnClick	: function () {
+				var data = new Object();
+				data.ordChgSq = ordChgSq;
+				
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit(
+					'/order/wdinvoice/send/save'
+					, jsonData
+					, function (result) {
+						uifnPopClose('popupOrderDetail');
+						fnReOpenOrderDetailPopup();
+					}
+				);
+			}
+		});
+	};
+	
+	// 구매확정철회
+	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) {
+							uifnPopClose('popupOrderDetail');
+							fnReOpenOrderDetailPopup();
+						}
+					);
+				}
+			});
+		}
+	};
+</script>
+
 </html>
 
 

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

@@ -218,7 +218,6 @@
 				<ul class="panelBar">
 					<li class="center">
 						<button type="button" class="btn btn-info btn-lg" id="btnOrderSearch">조회</button>
-						<!-- <button type="button" class="btn btn-base btn-lg" id="btnSearchExcel">엑셀조회</button> -->
 						<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
 					</li>
 				</ul>
@@ -245,7 +244,7 @@
 			</ul>
 			
 			<div class="panelContent" style="overflow: hidden;">
-				<div id="gridOrderList" style="width: 100%; height: 700px;" class="ag-theme-balham lh60"></div>
+				<div id="gridOrderList" style="width: 100%; height: 600px;" class="ag-theme-balham lh60"></div>
 			</div>
 			
 			<ul class="panelBar">
@@ -286,7 +285,7 @@ var columnDefsOrderList = [
 			{
 				headerName		: "주문번호"
 				, field			: 'ordNo'
-				, width			: 75
+				, width			: 70
 				, cellClass		: 'text-center'
 				, sortable		: true
 				, cellRenderer	: function (params) {

+ 9 - 7
style24.admin/src/main/webapp/WEB-INF/views/order/OrderSellerListForm.html

@@ -123,7 +123,7 @@
 			</ul>
 			
 			<div class="panelContent" style="overflow: hidden;">
-				<div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham lh30"></div>
+				<div id="gridList" style="width: 100%; height: 600px;" class="ag-theme-balham lh30"></div>
 			</div>
 		</div>
 		
@@ -152,6 +152,9 @@ var columnDefs = [
 	{headerName: "입점업체",			field:"supplyCompNm",		width:100, cellClass: 'text-center'},
 	{headerName: "입점업체코드",		field:"supplyCompCd",		width:100, cellClass: 'text-center', hide: true},
 	{headerName: "브랜드",			field:"brandKnm",			width:100, cellClass: 'text-center'},
+	{headerName: "상품타입",			field:"goodsTypeNm",		width:100, cellClass: 'text-center'},
+	{headerName: "상품코드",			field:"goodsCd",			width:100, cellClass: 'text-center'},
+	{headerName: "상품명",			field:"goodsNm",			width:100, cellClass: 'text-center'},
 	{headerName: "주문번호",			field:"ordNo",				width:100, cellClass: 'text-center'},
 	{headerName: "주문상세번호",		field:"ordDtlNo",			width:100, cellClass: 'text-center'},
 	{headerName: "주문상세상태",		field:"ordDtlStatNm", 		width:100, cellClass: 'text-center'},
@@ -169,10 +172,11 @@ var columnDefs = [
 	{headerName: "수령자기본주소",		field:"recipBaseAddr",		width:120, cellClass: 'text-center'},
 	{headerName: "수령자상세주소",		field:"recipDtlAddr",		width:120, cellClass: 'text-center'},
 	{headerName: "업체상품코드",		field:"supplyGoodsCd",		width:100, cellClass: 'text-center'},
-	{headerName: "상품코드",			field:"goodsCd",			width:100, cellClass: 'text-center'},
-	{headerName: "상품명",			field:"goodsNm",			width:100, cellClass: 'text-center'},
+	{headerName: "단품코드",			field:"itemCd",				width:100, cellClass: 'text-center'},
+	{headerName: "단품상품명",			field:"itemNm",				width:100, cellClass: 'text-center'},
+	{headerName: "칼라",				field:"optCd1",				width:100, cellClass: 'text-center'},
 	{headerName: "사이즈",			field:"optCd2",				width:100, cellClass: 'text-center'},
-	{headerName: "주문수량",			field:"ordQty",				width:100, cellClass: 'text-center'},
+	{headerName: "주문수량",			field:"itemOrdQty",			width:100, cellClass: 'text-center'},
 	{headerName: "주문금액",			field:"ordAmt",				width:100, cellClass: 'text-center'},
 	{headerName: "할인금액",			field:"totDcAmt",			width:100, cellClass: 'text-center'},
 	{headerName: "실결제금액",			field:"realOrdAmt",			width:100, cellClass: 'text-center'},
@@ -226,7 +230,6 @@ var fnSearch = function() {
 
 // 엑셀다운로드 시 주문상태 변경
 $('#btnExcelDown').on('click', function () {
-	
 	var selectedData = gridOptions.api.getSelectedRows();
 
 	if (selectedData.length == 0) {
@@ -276,9 +279,8 @@ var fnInvoiceSaveCollback = function(result){
 	return;
 }
 
-//송장번호 저장시
+// 송장번호 저장시
 $('#btnSave').on('click', function () {
-	
 	var selectedData = gridOptions.api.getSelectedRows();
 
 	if (selectedData.length == 0) {