ソースを参照

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

gagamel 5 年 前
コミット
87275ab148
30 ファイル変更2694 行追加201 行削除
  1. 61 1
      style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java
  2. 315 0
      style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java
  3. 65 2
      style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  4. 6 0
      style24.admin/src/main/java/com/style24/persistence/domain/Order.java
  5. 75 0
      style24.admin/src/main/java/com/style24/persistence/domain/OrderChange.java
  6. 1 4
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  7. 208 4
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml
  8. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsDetailSizeStockForm.html
  9. 9 19
      style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsMassRegisterForm.html
  10. 6 1
      style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsWmsInstockForm.html
  11. 248 133
      style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestForm.html
  12. 1092 0
      style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestFormBack.html
  13. 1 1
      style24.admin/src/main/webapp/WEB-INF/views/system/CommoncodeForm.html
  14. 1 14
      style24.batch/.classpath
  15. 25 0
      style24.batch/src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java
  16. 46 0
      style24.batch/src/main/java/com/style24/batch/biz/dao/TsbWmsGoodsDao.java
  17. 56 0
      style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsWmsIncomelotJob.java
  18. 52 0
      style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsWmsMeasurementJob.java
  19. 52 1
      style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java
  20. 61 0
      style24.batch/src/main/java/com/style24/batch/biz/service/TsbWmsGoodsService.java
  21. 30 0
      style24.batch/src/main/java/com/style24/batch/biz/task/TsbGoodsTask.java
  22. 25 0
      style24.batch/src/main/java/com/style24/persistence/domain/GoodsIfIncomelot.java
  23. 29 0
      style24.batch/src/main/java/com/style24/persistence/domain/GoodsIfIncomelotitem.java
  24. 33 0
      style24.batch/src/main/java/com/style24/persistence/domain/GoodsIfMeasurement.java
  25. 133 1
      style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml
  26. 60 0
      style24.batch/src/main/java/com/style24/persistence/mybatis/wms/TsbWmsGoods.xml
  27. 0 13
      style24.front/.classpath
  28. BIN
      style24.front/target/classes/com/style24/front/biz/web/TsfCustomerController.class
  29. 1 1
      style24.front/target/m2e-wtp/web-resources/META-INF/maven/com.style24.front/style24.front/pom.properties
  30. 2 5
      style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssGoods.xml

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

@@ -2,11 +2,11 @@ package com.style24.admin.biz.dao;
 
 import java.util.Collection;
 
-import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.session.ResultHandler;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 
 /**
  * 주문관리 Dao
@@ -359,6 +359,66 @@ public interface TsaOrderDao {
 	 */
 	Collection<Order> getCancelRequestTargetList(Order order);
 	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문변경정보 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderChange(OrderChange orderChange);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문변경정보 상세 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderChangeDetail(OrderChange orderChange);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세단품정보 수정
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int updateOrderDetailItem(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderDetailItemHst(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세정보 수정
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int updateOrderDetail(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세정보 수정
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderDetailhst(Order order);
+	
 	
 }
 

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

@@ -1,6 +1,8 @@
 package com.style24.admin.biz.service;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,11 +13,13 @@ import org.springframework.transaction.annotation.Transactional;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.excel.env.GagaExcelConstants;
 import com.gagaframework.excel.xssf.GagaExcelResultHandler;
+import com.gagaframework.web.parameter.GagaMap;
 import com.style24.admin.biz.dao.TsaOrderDao;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.admin.support.util.TsitUtil;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -587,4 +591,315 @@ public class TsaOrderService {
 		return orderDao.getCancelRequestTargetList(order);
 	}
 	
+	/**
+	 * 주문상세 > 주문취소대상목록
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public GagaMap orderCancelRefundAmt(List<Order> cancelReqList) {
+		GagaMap mav = new GagaMap();
+		
+		int spanPayAmt			= 0; // 총 결제 금액
+		int spanSumRealOrdAmt	= 0; // 상품 실결제 금액
+		int spanSumDeliveryFee	= 0; // 배송금액
+		int spanOrdAmt			= 0; // 주문 상품 금액
+		int spanCnclRtnAmt		= 0; // 취소 상품 금액
+		int spanTotPntDcAmt		= 0; // 취소 사용 포인트
+		int spanPntDcAmt		= 0; // 고객 포인트
+		int spanPrePntDcAmt		= 0; // 상품 선포인트
+		int spanCpnDcAmt		= 0; // 취소 사용 쿠폰금액
+		int spanCpn1DcAmt		= 0; // 즉시할인쿠폰
+		int spanGoodsCpnDcAmt	= 0; // 상품쿠폰
+		int spanCartCpnDcAmt	= 0; // 장바구니쿠폰
+		int spanTmtbDcAmt		= 0; // 취소 다다익선 금액
+		int spanTmtb1DcAmt		= 0; // 수량할인
+		int spanTmtb2DcAmt		= 0; // 금액할인
+		int spanGfcdUseAmt		= 0; // 취소 고객 상품권 금액
+		int spanRealCnclRtnAmt	= 0; // 취소 상품 실결제 금액
+		int spanTotDeliveryFee	= 0; // 환불 배송 금액
+		int spanRefundAmt		= 0; // 환불 금액 합계
+		
+		List<Order> cancelOrderRefundList = new ArrayList<Order>();		// 주문환불금액목록
+		List<Order> cancelDelvRefundList 	= new ArrayList<Order>();	// 주문환불배송금액목록
+		
+		Order orderObj	= new Order();
+		Order delvObj	= new Order();
+		int k 			= 0 ;
+		
+		// 최초의 배송정보를 설정
+		delvObj.setOrdAmt(0);
+		delvObj.setCnclRtnAmt(0);
+		delvObj.setRealOrdAmt(0);
+		delvObj.setDelvFee(cancelReqList.get(k).getDelvFee());
+		delvObj.setMinOrdAmt(cancelReqList.get(k).getMinOrdAmt());
+		delvObj.setOrgDelvFee(cancelReqList.get(k).getOrgDelvFee());
+		delvObj.setSupplyCompCd(cancelReqList.get(k).getSupplyCompCd());
+		delvObj.setDelvFeeCd(cancelReqList.get(k).getDelvFeeCd());
+		delvObj.setAllCanYn(cancelReqList.get(k).getAllCanYn());
+		cancelDelvRefundList.add(delvObj);
+
+		for (Order oneData : cancelReqList) {
+			orderObj	= new Order();
+			
+			// 주문정보설정
+			orderObj.setItemQty(oneData.getItemQty());
+			orderObj.setOrdQty(oneData.getOrdQty());
+			orderObj.setCnclRtnQty(oneData.getCnclRtnQty());
+			orderObj.setOrdReqChgQty(oneData.getOrdReqChgQty());
+			orderObj.setOrdCanChgQty(oneData.getOrdCanChgQty());
+			orderObj.setItemPrice(oneData.getItemPrice());
+			orderObj.setOptAddPrice	(oneData.getOptAddPrice());
+			orderObj.setOrdAmt(oneData.getOrdAmt());
+			
+			orderObj.setOrdNo(oneData.getOrdNo());
+			orderObj.setOrdDtlNo(oneData.getOrdDtlNo());
+			orderObj.setGoodsCd(oneData.getGoodsCd());
+			orderObj.setGoodsNm(oneData.getGoodsNm());
+			orderObj.setOrdDtlItemSq(oneData.getOrdDtlItemSq());
+			orderObj.setItemCd(oneData.getItemCd());
+			orderObj.setItemNm(oneData.getItemNm());
+			orderObj.setOptCd1(oneData.getOptCd1());
+			orderObj.setOptCd2(oneData.getOptCd2());
+			
+			int ordQty 			= oneData.getOrdQty();
+			int itemQty 		= oneData.getItemQty();
+			int ordCanChgQty 	= oneData.getOrdCanChgQty();
+			
+			// 취소금액계산
+			orderObj.setCnclRtnAmt(((oneData.getItemPrice() + oneData.getOptAddPrice()) * itemQty) * ordCanChgQty);
+			orderObj.setCpn1DcAmt(oneData.getCpn1DcAmt() 			* (ordCanChgQty/ordQty));
+			orderObj.setTmtb1DcAmt(oneData.getTmtb1DcAmt() 			* (ordCanChgQty/ordQty));
+			orderObj.setTmtb2DcAmt(oneData.getTmtb2DcAmt() 			* (ordCanChgQty/ordQty));
+			orderObj.setGoodsCpnDcAmt(oneData.getGoodsCpnDcAmt() 	* (ordCanChgQty/ordQty));
+			orderObj.setCartCpnDcAmt(oneData.getCartCpnDcAmt() 		* (ordCanChgQty/ordQty));
+			orderObj.setPntDcAmt(oneData.getPntDcAmt() 				* (ordCanChgQty/ordQty));
+			orderObj.setPrePntDcAmt(oneData.getPrePntDcAmt() 		* (ordCanChgQty/ordQty));
+			orderObj.setGfcdUseAmt(oneData.getGfcdUseAmt() 			* (ordCanChgQty/ordQty));
+			
+			// 취소할인금액
+			int dcTotAmt		= 0;
+			dcTotAmt			+= orderObj.getTmtb1DcAmt();
+			dcTotAmt			+= orderObj.getTmtb2DcAmt();
+			dcTotAmt			+= orderObj.getGoodsCpnDcAmt();
+			dcTotAmt			+= orderObj.getCartCpnDcAmt();
+			dcTotAmt			+= orderObj.getPntDcAmt();
+			dcTotAmt			+= orderObj.getPrePntDcAmt();
+			dcTotAmt			+= orderObj.getCpn1DcAmt();
+			dcTotAmt			+= orderObj.getGfcdUseAmt();
+			
+			// 취소환불금액
+			orderObj.setRealOrdAmt(orderObj.getCnclRtnAmt() - dcTotAmt);
+			
+			// 배송관련 설정		
+			orderObj.setOrdDtlNo(oneData.getOrdDtlNo());
+			orderObj.setGoodsTypeNm(oneData.getGoodsTypeNm());
+			orderObj.setDelvFee(oneData.getDelvFee());
+			orderObj.setSupplyCompCd(oneData.getSupplyCompCd());
+			orderObj.setDelvFeeCd(oneData.getDelvFeeCd());
+			orderObj.setMinOrdAmt(oneData.getMinOrdAmt());
+			orderObj.setOrgDelvFee(oneData.getOrgDelvFee());
+			
+			// 주문상세상태
+			orderObj.setOrdDtlStat(oneData.getOrdDtlStat());
+			orderObj.setOrdDtlStatNm(oneData.getOrdDtlStatNm());
+			orderObj.setAllCanYn(oneData.getAllCanYn());
+			
+			cancelOrderRefundList.add(orderObj);
+			
+			// 배송비 정책 기준으로 조건 처리
+			if (cancelDelvRefundList.get(k).getSupplyCompCd().equals(orderObj.getSupplyCompCd()) && cancelDelvRefundList.get(k).getDelvFeeCd().equals(orderObj.getDelvFeeCd())) {
+				// 공급업체 와 배송정책코드가 같으면 주문금액, 취소금액 SUM
+				cancelDelvRefundList.get(k).setOrdAmt(cancelDelvRefundList.get(k).getOrdAmt() + orderObj.getOrdAmt());
+				cancelDelvRefundList.get(k).setCnclRtnAmt(cancelDelvRefundList.get(k).getCnclRtnAmt() + orderObj.getCnclRtnAmt());
+				cancelDelvRefundList.get(k).setRealOrdAmt(cancelDelvRefundList.get(k).getRealOrdAmt() + orderObj.getRealOrdAmt());
+				
+				if ("N".equals(orderObj.getAllCanYn())) {
+					cancelDelvRefundList.get(k).setAllCanYn("N");
+				}
+			} else {			
+				k++;
+				
+				delvObj	= new Order();
+				
+				// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+				delvObj.setOrdAmt(orderObj.getOrdAmt());
+				delvObj.setCnclRtnAmt(orderObj.getCnclRtnAmt());
+				delvObj.setRealOrdAmt(orderObj.getRealOrdAmt());
+				
+				delvObj.setDelvFee(orderObj.getDelvFee());
+				delvObj.setMinOrdAmt(orderObj.getMinOrdAmt());			
+				delvObj.setOrgDelvFee(orderObj.getOrgDelvFee());
+				delvObj.setSupplyCompCd(orderObj.getSupplyCompCd());
+				delvObj.setDelvFeeCd(orderObj.getDelvFeeCd());
+				delvObj.setAllCanYn(orderObj.getAllCanYn());
+				
+				cancelDelvRefundList.add(delvObj);
+			}
+			
+			spanSumRealOrdAmt	+= oneData.getRealOrdAmt();
+			spanPntDcAmt		+= orderObj.getPntDcAmt();
+			spanPrePntDcAmt		+= orderObj.getPrePntDcAmt();
+			spanCpn1DcAmt		+= orderObj.getCpn1DcAmt();
+			spanGoodsCpnDcAmt	+= orderObj.getGoodsCpnDcAmt();
+			spanCartCpnDcAmt	+= orderObj.getCartCpnDcAmt();
+			spanTmtb1DcAmt		+= orderObj.getTmtb1DcAmt();
+			spanTmtb2DcAmt		+= orderObj.getTmtb2DcAmt();
+			spanGfcdUseAmt		+= orderObj.getGfcdUseAmt();
+			spanRealCnclRtnAmt	+= orderObj.getRealOrdAmt();
+		}
+		
+		// 추가배송비 발생여부 , 추가배송비, 배송비정책단위 전체취소 여부
+		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+			Order obj = cancelDelvRefundList.get(i);
+			
+			// 무료배송비용 > (주문금액 - 취소금액)
+			if (obj.getMinOrdAmt() > (obj.getOrdAmt() - obj.getCnclRtnAmt())) {
+				// 2020.12.28 
+				// case : 배송정책 기준으로 1,2 상품 주문 후 1번 출고 후 1번반품 2번취소 할 경우 전체 취소 가 아니므로 배송비 부과 있을지 모르겠음 주문업체 단위로 배송되기 때문에 발생하지 않을것 같음
+				if ((obj.getOrdAmt() - obj.getCnclRtnAmt()) == 0) {
+					if ("N".equals(obj.getAllCanYn())) {
+						obj.setAddDelvFeeYn("Y");
+						obj.setAddDelvFee(obj.getOrgDelvFee());
+					} else {
+						// 전체취소의 경우에 해당
+						obj.setAddDelvFeeYn("N");
+						obj.setAddDelvFee(0);
+					}
+				} else {
+					// 취소신청화면에서 대부분 아래의 조건에 해당
+					obj.setAddDelvFeeYn("Y");
+					obj.setAddDelvFee(obj.getOrgDelvFee());
+				}
+			} else {
+				obj.setAddDelvFeeYn("N");
+				obj.setAddDelvFee(0);
+			}
+			
+			spanSumDeliveryFee	+= obj.getDelvFee();
+			spanOrdAmt			+= obj.getOrdAmt();
+			spanCnclRtnAmt		+= obj.getCnclRtnAmt();
+			spanTotDeliveryFee  += obj.getAddDelvFee();
+			
+			cancelDelvRefundList.set(i, obj);
+		}
+		
+		// 2020.12.30 프론트에서 필요한 부분 작업 필여
+		// 관리자 화면에서 사용하는 환불 칼럼 정보
+		// 환불금액표시
+		spanPayAmt 			= spanSumRealOrdAmt + spanSumDeliveryFee;
+		spanTotPntDcAmt 	= spanPntDcAmt + spanPrePntDcAmt;
+		spanCpnDcAmt 		= spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt;
+		spanTmtbDcAmt 		= spanTmtb1DcAmt + spanTmtb2DcAmt;
+		spanRefundAmt 		= spanRealCnclRtnAmt - spanTotDeliveryFee;
+
+		mav.set("cancelOrderRefundList"	, cancelOrderRefundList);	//주문 환불 금액 목록
+		mav.set("cancelDelvRefundList"	, cancelDelvRefundList);	//주문 환불 배송 금액 목록
+		mav.set("spanPayAmt"			, spanPayAmt);				//총 결제 금액
+		mav.set("spanSumRealOrdAmt"		, spanSumRealOrdAmt);		//상품 실결제 금액
+		mav.set("spanSumDeliveryFee"	, spanSumDeliveryFee);		//배송금액
+		mav.set("spanOrdAmt"			, spanOrdAmt);				//주문 상품 금액
+		mav.set("spanCnclRtnAmt"		, spanCnclRtnAmt);			//취소 상품 금액
+		mav.set("spanTotPntDcAmt"		, spanTotPntDcAmt);			//취소 사용 포인트
+		mav.set("spanPntDcAmt"			, spanPntDcAmt);			//고객 포인트
+		mav.set("spanPrePntDcAmt"		, spanPrePntDcAmt);			//상품 선포인트
+		mav.set("spanCpnDcAmt"			, spanCpnDcAmt);			//취소 사용 쿠폰금액
+		mav.set("spanCpn1DcAmt"			, spanCpn1DcAmt);			//즉시할인쿠폰
+		mav.set("spanGoodsCpnDcAmt"		, spanGoodsCpnDcAmt);		//상품쿠폰
+		mav.set("spanCartCpnDcAmt"		, spanCartCpnDcAmt);		//장바구니쿠폰
+		mav.set("spanTmtbDcAmt"			, spanTmtbDcAmt);			//취소 다다익선 금액
+		mav.set("spanTmtb1DcAmt"		, spanTmtb1DcAmt);			//수량할인
+		mav.set("spanTmtb2DcAmt"		, spanTmtb2DcAmt);			//금액할인
+		mav.set("spanGfcdUseAmt"		, spanGfcdUseAmt);			//취소 고객 상품권 금액
+		mav.set("spanRealCnclRtnAmt"	, spanRealCnclRtnAmt);		//취소 상품 실결제 금액
+		mav.set("spanTotDeliveryFee"	, spanTotDeliveryFee);		//환불 배송 금액
+		mav.set("spanRefundAmt"			, spanRefundAmt);			//환불 금액 합계
+		
+		return mav;
+	}
+	
+	// 문자의 오른쪽으로 숫자만큼 공백 삽인
+	private static String padRight(String s, int n) {
+		return String.format("%-" + n + "s", s);
+	}
+	
+	// 문자의 왼쪽으로 숫자만큼 공백 삽인
+	private static String padLeft(String s, int n) {
+		return String.format("%" + n + "s", s);
+	}
+	
+	/**
+	 * 주문상세 > 주문취소
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 30
+	 */
+	@Transactional("shopTxnManager")
+	public void orderCancel(GagaMap mav) {
+		
+		// 1. 세션회원조회
+		int userNo = TsaSession.getInfo().getUserNo();
+		
+		// 2. 취소요정정보목록
+		List<Order> cancelOrderRefundList = (List<Order>) mav.get("cancelOrderRefundList");
+		
+		// 3. 취소신청정보
+		int ordNo 			= Integer.parseInt(mav.getString("ordNo").toString());
+		String chgReason 	= mav.getString("chgReason").toString();
+		String chgMemo 		= mav.getString("chgMemo").toString();
+		String chgGb		= "G680_20";
+		
+		// 4.1 주문변경 기본정보 등록
+		OrderChange orderChange = new OrderChange();
+		orderChange.setOrdNo(ordNo);
+		orderChange.setChgGb(chgGb);
+		orderChange.setChgReason(chgReason);
+		orderChange.setChgMemo(chgMemo);
+		orderChange.setAddPayCost(0);
+		orderChange.setAddPayAmt(0);
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+		
+		orderDao.createOrderChange(orderChange);
+		
+		// 4.2 주문변경 상세 정보 등록
+		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+			Order vo = cancelOrderRefundList.get(i);
+			vo.setRegNo(userNo);
+			vo.setUpdNo(userNo);
+			vo.setOrdDtlStat("G685_21");
+			
+			// 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
+			if (vo.getOrdCanChgQty() > 0) {
+				OrderChange po = new OrderChange();
+				
+				po.setOrdChgSq(orderChange.getOrdChgSq());
+				po.setOrdDtlNo(vo.getOrdDtlNo());
+				po.setChgQty(vo.getOrdCanChgQty());
+				po.setChgStat("G685_21");
+				po.setRegNo(userNo);
+				po.setUpdNo(userNo);
+				
+				// 4.2.2 주문변경상세정보 등록
+				orderDao.createOrderChangeDetail(po);
+				
+				// 4.2.3 주문상세단품정보 수정
+				orderDao.updateOrderDetailItem(vo);
+				
+				// 4.2.4 주문상세단품정보 이력 등록
+				orderDao.createOrderDetailItemHst(vo);
+				
+				// 4.2.5 주문변경상세정보 수정
+				orderDao.updateOrderDetail(vo);
+				
+				// 4.2.6 주문변경상세정보 이력 등록
+				orderDao.createOrderDetailhst(vo);
+				
+				int a = 100/0;
+			}
+		}
+	}
+	
 }

+ 65 - 2
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -3,6 +3,7 @@ package com.style24.admin.biz.web;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -31,8 +32,11 @@ import com.style24.admin.biz.service.TsaOrderService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TsaPageRequest;
+import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -47,6 +51,9 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public class TsaOrderController extends TsaBaseController {
 	
+	@Autowired
+	private TscMessageByLocale message;
+	
 	@Autowired
 	private Environment env;
 	
@@ -637,18 +644,74 @@ public class TsaOrderController extends TsaBaseController {
 		
 		Collection<Order> cancelRequestTargetList = orderService.getCancelRequestTargetList(order);
 
-		Order orderInfo = orderService.getOrderInfo(order);
+		//Order orderInfo = orderService.getOrderInfo(order);
 
 		//mav.addObject("nicePay", nicePay);
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 취소사유
 		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 취소요청대상 목록
-		mav.addObject("orderInfo"					, orderInfo);										// 주문정보
+		//mav.addObject("orderInfo"					, orderInfo);										// 주문정보
 		mav.addObject("ordNo"						, ordNo);
 		mav.addObject("cncWait"						, cncWait);
 
 		mav.setViewName("order/CancelRequestForm");
 		return mav;
 	}
+	
+	/**
+	 * 주문취소신청환불금액 계산
+	 * @param Collection<Order>- 주문취소신청목록
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 29
+	 */
+	@PostMapping("/cancel/refundAmt")
+	@ResponseBody
+	public GagaMap orderCancelRefundAmt(@RequestBody List<Order> cancelReqList) {
+		
+		GagaMap mav = new GagaMap();
+		
+		if (cancelReqList == null || cancelReqList.isEmpty()) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+		
+		// 1. 환불금액정보 계산 & 조회
+		mav = orderService.orderCancelRefundAmt(cancelReqList);
+		
+		return mav;
+	}
+	
+	/**
+	 * 주문취소신청
+	 * @param Collection<Order> - 주문취소신청목록
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 29
+	 */
+	@PostMapping("/cancel")
+	@ResponseBody
+	public GagaResponse orderCancel(@RequestBody OrderChange cancelReq) {
+		
+		GagaMap mav = new GagaMap();
+		
+		if (cancelReq== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		List<Order> cancelReqList = cancelReq.getCancelReqList(); // 취소요청정보
+		
+		// 1. 환불금액정보 계산 & 조회
+		mav = orderService.orderCancelRefundAmt(cancelReqList);
+		
+		// 2. 주문변경기본정보 설정
+		mav.set("ordNo"			, cancelReq.getOrdNo());
+		mav.set("chgReason"		, cancelReq.getChgReason());
+		mav.set("chgMemo"		, cancelReq.getChgMemo());
+		
+		// 3. 주문변경 DB 등록 (주문정보, 배송정보)
+		orderService.orderCancel(mav);
+		
+		return super.ok("성공");
+	}
 }
 
 

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

@@ -315,6 +315,12 @@ public class Order extends TscBaseDomain {
 	private int orgDelvFee;
 	private String delvFeeCd;
 	private int ordCanChgQty;
+	private String allCanYn;
+	
+	private String addDelvFeeYn;
+	private int addDelvFee;
+	private int ordDtlItemSq;
+	
 
 }
 

+ 75 - 0
style24.admin/src/main/java/com/style24/persistence/domain/OrderChange.java

@@ -0,0 +1,75 @@
+package com.style24.persistence.domain;
+
+import java.util.List;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 주문 취소 Domain
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@SuppressWarnings("serial")
+@Data
+public class OrderChange extends TscBaseDomain {
+	
+	List<Order> cancelReqList;
+	private int ordNo;
+	
+	private int ordChgSq;
+	private String chgGb;
+	private String chgReason;
+	private String chgMemo;
+	private String chgerNm;
+	private String chgerPhnno;
+	private String chgerTelno;
+	private String chgerEmail;
+	private String chgerZipNo;
+	private String chgerBaseAddr;
+	private String chgerDtlAddr;
+	private String chgerRtnMemo;
+	private int addPayCost;
+	private int addPayAmt;
+	private String wdInvoiceNo;
+	private String wdInvoiceSendYn;
+	private String wdStdt;
+	private String wdEddt;
+	private String shipCompCd;
+	
+	private int ordDtlNo;
+	private int chgQty;
+	private String chgStat;
+	private String chgStatNm;
+	private String whMemo;
+	
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 1 - 4
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -1810,11 +1810,8 @@
 	</update>
 	
 	<!-- 상품코드 생성 -->
-	<insert id="createGoodsSequence" parameterType="Goods">
+	<insert id="createGoodsSequence" parameterType="Goods"  keyProperty="goodsSq">
 		/* TsaGoods.createGoodsSequence */
-		<selectKey keyProperty="goodsSq" resultType="int" order="AFTER">
-		SELECT MAX(GOODS_SQ) FROM TB_GOODS_SEQUENCE
-		</selectKey>
 		INSERT INTO TB_GOODS_SEQUENCE (GOODS_SQ) VALUES (NULL)
 	</insert>
 

+ 208 - 4
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -33,7 +33,9 @@
 			     , OCD.CHG_STAT
 			FROM   TB_ORDER_CHANGE OC
 			INNER  JOIN TB_ORDER_CHANGE_DETAIL OCD
-			ON     OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
+			ON     OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ
+			WHERE  1=1 
+			GROUP  BY OCD.ORD_DTL_NO 
 		) OCD
 		ON    OD.ORD_DTL_NO = OCD.ORD_DTL_NO
 		WHERE  1=1
@@ -246,6 +248,8 @@
 					FROM   TB_ORDER_CHANGE OC
 					INNER  JOIN TB_ORDER_CHANGE_DETAIL OCD
 					ON     OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
+					WHERE  1=1
+					GROUP  BY OCD.ORD_DTL_NO 
 				) OCD
 				ON    OD.ORD_DTL_NO = OCD.ORD_DTL_NO
 				WHERE  1=1
@@ -1569,6 +1573,7 @@
 	
 	<!-- 주문정보 -->
 	<select id="getOrderInfo" parameterType="Order" resultType="Order">
+		/* order.getOrderInfo */
 		SELECT O.ORD_NO
 		     , O.MALL_GB
 		     , FN_GET_CODE_NM('G011', O.MALL_GB) AS MALL_GB_NM
@@ -1633,8 +1638,15 @@
 	
 	<!-- 주문상세 > 주문취소대상목록 -->
 	<select id="getCancelRequestTargetList" parameterType="Order" resultType="Order">
+		/* order.getCancelRequestTargetList */
 		SELECT 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
+		     , CASE WHEN OD.ORD_DTL_STAT IN ('G013_20', 'G013_30', 'G013_40')
+		            THEN 'Y'
+		            ELSE 'N'
+		             END ALL_CAN_YN
 		     , G1.GOODS_CD
 		     , G1.GOODS_NM
 		     , G1.GOODS_TYPE
@@ -1686,7 +1698,7 @@
 			INNER  JOIN TB_ORDER_DETAIL OD
 			ON     OCD.ORD_DTL_NO = OD.ORD_DTL_NO
 			WHERE  1=1
-			AND    OD.ORD_NO = 9
+			AND    OD.ORD_NO = #{ordNo}
 			AND    OCD.CHG_STAT IN (
 				'G685_20', 'G685_30', 'G685_40'
 			)
@@ -1703,12 +1715,204 @@
 		AND    OD.ORD_DTL_STAT IN (
 			'G013_10', 'G013_20', 'G013_30', 'G013_40'
 		)
-		AND    OD.ORD_NO = 9
+		AND    OD.ORD_NO = #{ordNo}
 		GROUP  BY OD.ORD_NO
 		     , OD.ORD_DTL_NO
 	    ORDER  BY OD.ORD_NO
 	         , OD.ORD_DTL_NO
-	</select>
+	</select>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문변경정보 등록-->
+	<insert id="createOrderChange" parameterType="OrderChange" keyProperty="ordChgSq">
+		/* Order.createOrderChange */
+		INSERT INTO TB_ORDER_CHANGE (
+			CHG_GB
+			, CHG_REASON
+			, CHG_MEMO
+			, CHGER_NM
+			, CHGER_PHNNO
+			, CHGER_TELNO
+			, CHGER_EMAIL
+			, CHGER_ZIP_NO
+			, CHGER_BASE_ADDR
+			, CHGER_DTL_ADDR
+			, CHGER_RTN_MEMO
+			, ADD_PAY_COST
+			, ADD_PAY_AMT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) 
+		SELECT #{chgGb}
+			 , #{chgReason}
+			 , #{chgMemo}
+			 , ORD_NM
+			 , ORD_PHNNO
+			 , ORD_TELNO
+			 , ORD_EMAIL
+			 , #{chgerZipNo}
+			 , #{chgerBaseAddr}
+			 , #{chgerDtlAddr}
+			 , #{chgerRtnMemo}
+			 , #{addPayCost}
+			 , #{addPayAmt}
+			 , #{regNo}
+			 , SYSDATE()
+			 , #{updNo}
+			 , SYSDATE()
+		FROM   TB_ORDER  
+		WHERE  ORD_NO = #{ordNo}
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문변경정보 등록-->
+	<insert id="createOrderChangeDetail" parameterType="OrderChange">
+		/* Order.createOrderChangeDetail */
+		INSERT INTO TB_ORDER_CHANGE_DETAIL (
+			ORD_CHG_SQ
+			, ORD_DTL_NO
+			, CHG_QTY
+			, CHG_STAT
+			, COMPLETE_DT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			#{ordChgSq}
+			, #{ordDtlNo}
+			, #{chgQty}
+			, #{chgStat}
+			, SYSDATE()
+			, #{regNo}
+			, SYSDATE()
+			, #{updNo}
+			, SYSDATE()
+		)
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 -->
+	<update id="updateOrderDetailItem" parameterType="Order">
+		/* Order.updateOrderDetailItem */
+		UPDATE TB_ORDER_DETAIL_ITEM
+		SET    ORD_AMT 				= ORD_AMT 				- #{cnclRtnAmt}
+		     , CNCL_RTN_AMT 		= CNCL_RTN_AMT 			+ #{cnclRtnAmt}
+		     , CPN1_DC_AMT 			= CPN1_DC_AMT 			- #{cpn1DcAmt}
+		     , TMTB1_DC_AMT 		= TMTB1_DC_AMT 			- #{tmtb1DcAmt}
+		     , TMTB2_DC_AMT 		= TMTB1_DC_AMT 			- #{tmtb2DcAmt}
+		     , GOODS_CPN_DC_AMT 	= GOODS_CPN_DC_AMT 		- #{goodsCpnDcAmt}
+		     , CART_CPN_DC_AMT 		= CART_CPN_DC_AMT 		- #{cartCpnDcAmt}
+		     , PNT_DC_AMT 			= PNT_DC_AMT 			- #{pntDcAmt}
+		     , PRE_PNT_DC_AMT 		= PRE_PNT_DC_AMT 		- #{prePntDcAmt}
+		     , SAVE_PNT_AMT 		= SAVE_PNT_AMT 			- #{savePntAmt}
+		     , REAL_ORD_AMT 		= REAL_ORD_AMT 			- #{realOrdAmt}
+		     , GFCD_USE_AMT 		= GFCD_USE_AMT 			- #{gfcdUseAmt}
+		     , UPD_NO 				= #{updNo}
+		     , UPD_DT 				= SYSDATE()
+		WHERE  1=1
+		AND    ORD_NO 				= #{ordNo} 
+		AND    ORD_DTL_NO 			= #{ordDtlNo} 
+		AND    ORD_DTL_ITEM_SQ 		= #{ordDtlItemSq}
+	</update>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록 -->
+	<insert id="createOrderDetailItemHst" parameterType="Order">
+		/* Order.createOrderDetailItemHst */
+		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
+			ORD_DTL_ITEM_SQ
+			, ORD_DTL_NO
+			, ORD_NO
+			, ORD_DTL_STAT
+			, ITEM_CD
+			, OPT_CD
+			, OPT_CD1
+			, OPT_CD2
+			, SKU_MODEL_NO
+			, PRODUCT_NO
+			, PRODUCT_CODE
+			, ITEM_QTY
+			, ITEM_PRICE
+			, OPT_ADD_PRICE
+			, DISP_ORD
+			, ORD_AMT
+			, CNCL_RTN_AMT
+			, CPN1_DC_AMT
+			, TMTB1_DC_AMT
+			, TMTB2_DC_AMT
+			, GOODS_CPN_DC_AMT
+			, CART_CPN_DC_AMT
+			, PNT_DC_AMT
+			, PRE_PNT_DC_AMT
+			, SAVE_PNT_AMT
+			, REAL_ORD_AMT
+			, GFCD_USE_AMT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) 
+		SELECT ORD_DTL_ITEM_SQ
+			 , ORD_DTL_NO
+			 , ORD_NO
+			 , #{ordDtlStat}
+			 , ITEM_CD
+			 , OPT_CD
+			 , OPT_CD1
+			 , OPT_CD2
+			 , SKU_MODEL_NO
+			 , PRODUCT_NO
+			 , PRODUCT_CODE
+			 , ITEM_QTY
+			 , ITEM_PRICE
+			 , OPT_ADD_PRICE
+			 , DISP_ORD
+			 , #{ordAmt}
+			 , #{cnclRtnAmt}
+			 , #{cpn1DcAmt}
+			 , #{tmtb1DcAmt}
+			 , #{tmtb2DcAmt}
+			 , #{goodsCpnDcAmt}
+			 , #{cartCpnDcAmt}
+			 , #{pntDcAmt}
+			 , #{prePntDcAmt}
+			 , #{savePntAmt}
+			 , #{realOrdAmt}
+			 , #{gfcdUseAmt}
+			 , REG_NO
+			 , REG_DT
+			 , UPD_NO
+			 , UPD_DT
+		FROM   TB_ORDER_DETAIL_ITEM
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo} 
+		AND    ORD_DTL_NO = #{ordDtlNo} 
+		AND    ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세정보 수정 -->
+	<update id="updateOrderDetail" parameterType="Order">
+		/* Order.updateOrderDetail */
+		UPDATE TB_ORDER_DETAIL
+		SET    ORD_AMT 				= ORD_AMT 				- #{cnclRtnAmt}
+		     , CNCL_RTN_AMT 		= CNCL_RTN_AMT 			+ #{cnclRtnAmt}
+		     , CPN1_DC_AMT 			= CPN1_DC_AMT 			- #{cpn1DcAmt}
+		     , TMTB1_DC_AMT 		= TMTB1_DC_AMT 			- #{tmtb1DcAmt}
+		     , TMTB2_DC_AMT 		= TMTB1_DC_AMT 			- #{tmtb2DcAmt}
+		     , GOODS_CPN_DC_AMT 	= GOODS_CPN_DC_AMT 		- #{goodsCpnDcAmt}
+		     , CART_CPN_DC_AMT 		= CART_CPN_DC_AMT 		- #{cartCpnDcAmt}
+		     , PNT_DC_AMT 			= PNT_DC_AMT 			- #{pntDcAmt}
+		     , PRE_PNT_DC_AMT 		= PRE_PNT_DC_AMT 		- #{prePntDcAmt}
+		     , SAVE_PNT_AMT 		= SAVE_PNT_AMT 			- #{savePntAmt}
+		     , REAL_ORD_AMT 		= REAL_ORD_AMT 			- #{realOrdAmt}
+		     , GFCD_USE_AMT 		= GFCD_USE_AMT 			- #{gfcdUseAmt}
+		     , UPD_NO 				= #{updNo}
+		     , UPD_DT 				= SYSDATE()
+		WHERE  1=1
+		AND    ORD_NO 				= #{ordNo} 
+		AND    ORD_DTL_NO 			= #{ordDtlNo} 
+		AND    ORD_DTL_ITEM_SQ 		= #{ordDtlItemSq}
+	</update>
+	
 </mapper>
 
 

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsDetailSizeStockForm.html

@@ -67,7 +67,7 @@
 			<col width="7%"/>
 		</colgroup>
 		<tr th:if="${goods.selfGoodsYn == 'Y' and goods.goodsType == 'G056_N'}">
-			<th colspan="2">ERP재고연동여부<i class="star"></i></th>
+			<th colspan="2">WMS재고연동여부<i class="star"></i></th>
 			<td colspan="2">
 				<label class="rdoBtn"><input type="radio" name="erpStockLinkYn" id="erpStockLinkYnY" value="Y" th:checked="${goods.erpStockLinkYn == 'Y'}"/>Y</label>
 				<label class="rdoBtn"><input type="radio" name="erpStockLinkYn" id="erpStockLinkYnN" value="N" th:checked="${goods.erpStockLinkYn == 'N'}"/>N</label>

+ 9 - 19
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsMassRegisterForm.html

@@ -28,11 +28,11 @@
 			<ul class="notice">
 				<li>상품을 대량으로 등록하는 페이지입니다.</li>
 				<li>상품을 등록 할 경우 [승인대기] 상태이며, STYLE 관리자의 [승인완료] 상태 변경 후 FRONT애 노출이 가능합니다.</li>
-				<li><th:block th:if="${erpSyncYn == 'N'}"><em><b>ERP연동여부가 [N]입니다. 관리자에게 문의하세요.</b></em></th:block></li>
+				<li><th:block th:if="${erpSyncYn == 'N'}"><em><b>WMS연동여부가 [N]입니다. 관리자에게 문의하세요.</b></em></th:block></li>
 			</ul>
 			<ul class="panelBar">
 				<li class="center">
-					<th:block th:if="${sessionInfo.roleCd == 'G001_0000' 
+					<!-- <th:block th:if="${sessionInfo.roleCd == 'G001_0000' 
 									or sessionInfo.roleCd == 'G001_A000' 
 									or sessionInfo.roleCd == 'G001_A001' 
 									or sessionInfo.roleCd == 'G001_A100' 
@@ -48,7 +48,7 @@
 									or sessionInfo.roleCd == 'G001_A101'
 									}">
 						<button type="button" class="btn btn-default btn-lg" id="btnInit" onclick="cfnDownloadSampleFile('SF005');">입점상품 등록양식 다운로드</button>
-						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsCreate" >입점상품 등록</button>
+						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsCreate" >입점상품 등록</button> -->
 					</th:block>
 					<label class="off"><a href="javascript:void(0);" id="excelList" style="display: none;">엑셀다운로드</a></label>
 					<!--  추후 대량 수정 권한-->
@@ -60,7 +60,7 @@
 								}" 
 							th:style="'padding-left:80px;'">
 						<button type="button" class="btn btn-default btn-lg" id="btnInit" onclick="cfnDownloadSampleFile('SF014');">상품대량수정 등록양식 다운로드</button>
-						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsUpdate" >입점상품 등록</button>
+						<button th:if="${erpSyncYn == 'Y'}" type="button" class="btn btn-primary btn-lg" id="btnGoodsUpdate" >상품 수정</button>
 					</span>
 				</li>
 			</ul>
@@ -95,7 +95,7 @@
 					</tr>
 				</table>
 				<ul class="panelBar">
-					<li>
+					<li class="center">
 						<button type="button" class="btn btn-gray btn-lg" id="btnInit" >초기화</button>
 						<button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
 					</li>
@@ -114,31 +114,21 @@
 						<span class="left aL" style="width:580px;">
 						<!-- class="left" 또는 class="right" -->
 							<em>상품미등록</em><br/>
-							- 상품코드 오류 : 빈값, 길이 11이 아닐경우, '_'가 미존재<br/>
-							- 업체 오류 : 빈값, 'W'나 'F' 가 아닌경우<br/>
+							- 상품코드 오류 : 빈값, 온라인상품코드 미존재<br/>
+							- 업체 오류 : 빈값, 'S0001'나 'S0002' 가 아닌경우<br/>
 							- 상품명 오류 : 빈값<br/>
-							- 제조국 오류 : 빈값<br/>
-							- 제조년월일 오류 : 빈값, 날짜형식이 맞는지<br/>
-							- ERP 미존재 상품코드 : ERP에 상품코드가 존재하는지<br/>
 							- 스타일 연도 오류 : 온라인에서 관리되지 않는 스타일 연도<br/>
 							- 성별 오류 : 온라인에서 관리되지 않는 성별<br/>
 							- 컬러 오류 : 온라인에서 관리되지 않는 컬러<br/>
-							- 상품코드 중복등록요청 : 등록된 상품코드 등록요청<br/>
 							- 품목 오류 : 온라인에서 관리되지 않는 품목<br/>
-							- ERP 브랜드 오류 : 온라인에서 관리되지 않는 ERP 브랜드<br/>
-							- 이미지 유형 오류 : 온라인에서 관리되지 않는 이미지유형<br/>
-							- 상품이미지 필수 오류 : IMG_PATH1
 							- 품목의 고시정보 없음 : 품목의 고시분류 매핑이 안되어 있는 경우<br/>
-							- 고시분류 오류 : 등록요청 고시분류 와 온라인에서 품목과 매핑된 고시분류가 다른 경우<br/>
-							<em>상품등록</em><br/>
-							- ERP 상품 사이즈 정보 없음 : ERP에 상품코드의 사이즈가 없을 경우<br/>
 						</span>
 					</div>
 					<!-- //아이콘 툴팁 -->
 				</li>
-				<!-- <li class="right">
+				<li class="right">
 					<button type="button" class="btn btn-default btn-lg" id="btnGoodsRegExcelDownLoad">엑셀다운로드</button>
-				</li> -->
+				</li>
 			</ul>
 			<!-- //상단버튼 영역  -->
 			<div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham"></div>

+ 6 - 1
style24.admin/src/main/webapp/WEB-INF/views/goods/GoodsWmsInstockForm.html

@@ -70,6 +70,11 @@
 		</div>
 		<!-- 패널 영역1 -->
 		<div class="panelStyle">
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-primary btn-lg"  id="btnGoodsSetMake">사은품 등록</button>
+				</li>
+			</ul>
 			<!-- 검색결과 영역 -->
 			<div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham"></div>
 			<ul class="panelBar">
@@ -89,7 +94,7 @@
 	var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
 	var itemkindList = gagajf.convertToArray([[${itemkindList}]]);
 	var columnDefs = [
-		/* {width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false}, */
+		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false}, 
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: "브랜드", field: "brandCd", width: 100, cellClass: 'text-center'},
 		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},

+ 248 - 133
style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestForm.html

@@ -21,13 +21,20 @@
 		</div>
 			
 		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="cancelRequestFrm">
+			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/order/cancel" method="post" target="hdFrameForOrderCancel">
+				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="chgReason" value=""/>
+				<input type="hidden" name="chgReasonDesc" value=""/>
+				
 				<h3>주문정보</h3>
 				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 
 				<h3>취소정보</h3>
 				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 				
+				<h3>배송비정보</h3>
+				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
 					<button type="button" class="btn btn-success" id="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
 					<label th:if="${sessionInfo.userId == 'jsshin'
@@ -54,7 +61,7 @@
 							<td>
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 									<option value="">[선택하세요]</option>
-									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdDesc}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 								</select>
 							</td>
 							<th>귀책사유</th>
@@ -63,12 +70,12 @@
 						<tr>
 							<th>요청메모</th>
 							<td colspan="3">
-								<textarea name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
 							</td>
 						</tr>
 					</tbody>
 				</table>
-
+				
 				<h4>환불예정금액</h4>
 				<table class="frmStyle">
 					<colgroup>
@@ -80,24 +87,40 @@
 					<tbody>
 						<tr>
 							<th>총 결제 금액</th>
-							<td><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanDeliveryFee"></span>원) </td>
+							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
+						</tr>
+						<tr>
+							<th>주문 상품 금액</th>
+							<td><span id="spanOrdAmt"></span>원</td>
 							<th>취소 상품 금액</th>
-							<td><span id="spanCurrPrice"></span>원</td>
+							<td><span id="spanCnclRtnAmt"></span>원</td>
 						</tr>
 						<tr>
 							<th>취소 사용 포인트</th>
-							<td><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 즉시 사용 마일리지 : <span id="spanPrePntDcAmt"></span>원) </td>
+							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
+						</tr>
+						<tr>
 							<th>취소 사용 쿠폰금액</th>
-							<td><span id="spanTotCpnDcAmt"></span>원</td>
+							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
 						</tr>
+						<tr>
+							<th>취소 다다익선 금액</th>
+							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
+						</tr>
+						
+						<tr>
+							<th>취소 고객 상품권 금액</th>
+							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
+						</tr>
+						
 						<tr>
 							<th>취소 상품 실결제 금액</th>
-							<td><span id="spanCancelPayAmt"></span>원</td>
-							<th>환불 배송금액</th>
+							<td><span id="spanRealCnclRtnAmt"></span>원</td>
+							<th>추가 배송 금액</th>
 							<td><span id="spanTotDeliveryFee"></span>원 </td>
 						</tr>
 						<tr>
-							<th>환불금액</th>
+							<th>환불 금액 합계</th>
 							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
 						</tr>
 					</tbody>
@@ -114,25 +137,17 @@
 var cancelRequestTargetList = [[${cancelRequestTargetList}]];
 
 var temp1 = true;
-var temp2 = true;
+var temp2 = false;
 
 // specify the columns
 var columnCancelReqList = [
-	/*
-	{	
-		width						: 40
-		, minWidth					: 40
-		, cellClass					: 'text-center'
-		, headerCheckboxSelection	: true
-		, checkboxSelection			: true
-		, filter					: false
-	},
-	*/
 	{
 		headerName	: "주문상세정보",
 		children	: [
 			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
 			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
@@ -141,6 +156,7 @@ var columnCancelReqList = [
 	{
 		headerName	: "주문상세단품정보",
 		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
 			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
@@ -211,7 +227,6 @@ var columnCancelReqList = [
 					strVal += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
 					
 					for (i=0 ; i<=ordCanChgQty ; i++) {
-						//alert(i + " :::: " +params.data.ordCanChgQty);
 						if (i == params.data.ordCanChgQty) {
 							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
 						} else {
@@ -222,43 +237,6 @@ var columnCancelReqList = [
 					strVal += "</select>";
 					return strVal;
 				}
-				/*
-				, valueGetter	: function(params) {
-					return params.data.ordCanChgQty;
-				}
-				, valueSetter	: function(params) {
-					var ordQty 			= parseInt(params.data.ordQty);
-					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
-					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
-					
-					if (params.data.ordCanChgQty != params.newValue) {
-						if (!isNaN(parseInt(params.newValue))) {
-							// 2020.12.24 외부몰 취소건에 대해서는 업무 협의
-							if (orderInfo.mallGb == '20') {
-								if (parseInt(params.newValue) != parseInt(params.data.ordQty)) {
-									mcxDialog.alert('외부몰주문건은 전체취소만 가능합니다.'); return false;
-								} else {
-									params.data.chgQty = parseInt(params.newValue);
-								}
-							} else {
-								if (parseInt(params.newValue) > ordCanChgQty) {
-									mcxDialog.alert('취소가능수량보다 큽니다!'); 
-									return false;
-								} else {
-									alert(parseInt(params.newValue));
-									params.data.ordCanChgQty = parseInt(params.newValue);
-								}
-							}
-						} else {
-							mcxDialog.alert('숫자만 입력이 가능합니다!'); return false;
-						}
-						return true;
-					} else {
-						return false;
-					}
-				}
-				*/
 			}
 		]
 	},
@@ -400,7 +378,8 @@ var columnCancelReqList = [
 					return params.value.addComma();
 				}
 				, hide			: temp2
-			}
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
 		]
 	}
 ];
@@ -417,6 +396,8 @@ var columnCancelReqToBeList = [
 		children	: [
 			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
 			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
@@ -425,6 +406,7 @@ var columnCancelReqToBeList = [
 	{
 		headerName	: "주문상세단품정보",
 		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
 			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
@@ -594,9 +576,133 @@ var columnCancelReqToBeList = [
 				}
 			}
 		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+
+//specify the columns
+var columnDelvCdList = [
+	{
+		headerName	: "배송코드기준금액",
+		children	: [
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불"		
+				, field			: "realOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "추가배송비"		
+				, field			: "addDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
 	}
 ];
-var gridOptionsCancelReqLToBeist = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
 </script>
 
 <!-- AgGrid 컬럼 세팅 -->
@@ -640,7 +746,7 @@ var orderAgGrid = {
 <script>
 // 취소정보계산
 var fnCalculateRefundAmt = function (obj) {
-	//취소정보담은목록
+	// 취소정보담은목록
 	var cancelRequestTargetToBeList = [];
 
 	if (obj != null) {
@@ -656,87 +762,96 @@ var fnCalculateRefundAmt = function (obj) {
 		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	}
 	
-	// 취소정보 초기화
-	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
-		var obj = new Object();
-		
-		var itemQty 		= cancelRequestTargetList[i].itemQty;
-		var ordQty 			= cancelRequestTargetList[i].ordQty;
-		var cnclRtnQty 		= cancelRequestTargetList[i].cnclRtnQty;
-		var ordReqChgQty 	= cancelRequestTargetList[i].ordReqChgQty;
-		var ordCanChgQty 	= cancelRequestTargetList[i].ordCanChgQty;
-		var itemPrice 		= cancelRequestTargetList[i].itemPrice;
-		var optAddPrice 	= cancelRequestTargetList[i].optAddPrice;
-		var ordAmt 			= cancelRequestTargetList[i].ordAmt;
-		
-		var cnclRtnAmt 		= cancelRequestTargetList[i].cnclRtnAmt;
-		var cpn1DcAmt 		= cancelRequestTargetList[i].cpn1DcAmt;
-		var tmtb1DcAmt 		= cancelRequestTargetList[i].tmtb1DcAmt;
-		var tmtb2DcAmt 		= cancelRequestTargetList[i].tmtb2DcAmt;
-		var goodsCpnDcAmt 	= cancelRequestTargetList[i].goodsCpnDcAmt;
-		var cartCpnDcAmt 	= cancelRequestTargetList[i].cartCpnDcAmt;
-		var pntDcAmt 		= cancelRequestTargetList[i].pntDcAmt;
-		var prePntDcAmt 	= cancelRequestTargetList[i].prePntDcAmt;
-		var gfcdUseAmt 		= cancelRequestTargetList[i].gfcdUseAmt;
-		var realOrdAmt 		= cancelRequestTargetList[i].realOrdAmt;
-		
-		obj.ordNo			= cancelRequestTargetList[i].ordNo;
-		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
-		obj.goodsCd			= cancelRequestTargetList[i].goodsCd;
-		obj.goodsNm			= cancelRequestTargetList[i].goodsNm;
-		obj.itemCd			= cancelRequestTargetList[i].itemCd;
-		obj.itemNm			= cancelRequestTargetList[i].itemNm;
-		obj.optCd1			= cancelRequestTargetList[i].optCd1;
-		obj.optCd2			= cancelRequestTargetList[i].optCd2;
-		obj.itemQty			= itemQty;
-		obj.ordQty			= ordQty;
-		obj.cnclRtnQty		= cnclRtnQty;
-		obj.ordReqChgQty	= ordReqChgQty;
-		obj.ordCanChgQty	= ordCanChgQty;
-		obj.itemPrice		= itemPrice;
-		obj.optAddPrice		= optAddPrice;
-		obj.ordAmt			= ordAmt;
-		
-		obj.cnclRtnAmt 		= ((itemPrice + optAddPrice) * itemQty) * ordCanChgQty;
-		obj.cpn1DcAmt 		= cpn1DcAmt 		* (ordCanChgQty/ordQty);
-		obj.tmtb1DcAmt 		= tmtb1DcAmt 		* (ordCanChgQty/ordQty);
-		obj.tmtb2DcAmt 		= tmtb2DcAmt 		* (ordCanChgQty/ordQty);
-		obj.goodsCpnDcAmt 	= goodsCpnDcAmt 	* (ordCanChgQty/ordQty);
-		obj.cartCpnDcAmt 	= cartCpnDcAmt 		* (ordCanChgQty/ordQty);
-		obj.pntDcAmt 		= pntDcAmt 			* (ordCanChgQty/ordQty);
-		obj.prePntDcAmt 	= prePntDcAmt 		* (ordCanChgQty/ordQty);
-		obj.gfcdUseAmt 		= gfcdUseAmt 		* (ordCanChgQty/ordQty);
-		
-		obj.realOrdAmt 		= obj.cnclRtnAmt - (obj.cpn1DcAmt  + obj.tmtb1DcAmt + obj.tmtb2DcAmt + obj.goodsCpnDcAmt + obj.cartCpnDcAmt + obj.pntDcAmt + obj.prePntDcAmt + obj.gfcdUseAmt);
-		
-		cancelRequestTargetToBeList[i] = obj;
+	// 환불금액계산호출
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/refundAmt'
+		, jsonData
+		, function(result) {
+			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
+			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
+			
+			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
+			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
+			
+			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
+			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
+			
+			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
+			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
+			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
+			
+			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+			
+			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
+			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
+			
+			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+			
+			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//환불 배송 금액
+			
+			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
+		}
+	);
+}
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var arrREasonCd = reasonCd.split(":");
+	
+	// 취소, 반품, 교환 사유 판단
+	if (arrREasonCd[0] == 'G686_10') {
+		$("#imputeReason").text("고객");
+		isImputationCustomers = true;
+	} else {
+		$("#imputeReason").text("회사");
+		isImputationCustomers = false;
 	}
 
-	gridOptionsCancelReqLToBeist.api.setRowData(cancelRequestTargetToBeList);
+	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+
+	//fnCalculateRefundAmt();			//환불예정금액 계산.
+}
+
+// 취소요청
+var fnCancelRequestPartOk = function () {
+	var jsonObj = {
+		"ordNo"			: $('#cancelRequestFrm input[name=ordNo]').val()
+		,"chgReason" 	: $('#cancelRequestFrm input[name=chgReason]').val()
+		,"chgMemo"		: $('#chgMemo').val()
+		,"cancelReqList" : cancelRequestTargetList
+	}
+	
+	// 취소, 반품, 교환 신청 정보 목록
+	var jsonData = JSON.stringify(jsonObj);
+	
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/'
+		, jsonData
+		, function() {
+			
+		}
+	);
 }
 
 $(document).ready(function() {	
 	// Create a agGrid
-	gagaAgGrid.createGrid('gridOrderCancelRequestList', gridOptionsCancelReqList);			// as-is 정보
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
 	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	
-	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList', gridOptionsCancelReqLToBeist);	// to-be 정보
+	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
 	
 	// 취소정보계산
 	fnCalculateRefundAmt(null);
-	
-	/*
-	// 그리드 클릭마다 환불금액 계산
-	gridOptionsCancelReqList.onRowSelected = function(event){
-		fnCalculateRefundAmt();		//환불예정금액 계산.
-	}
-	gridOptionsCancelReqList.onRowClicked = function(event){
-		fnCalculateRefundAmt();		//환불예정금액 계산.
-	}
-	gridOptionsCancelReqList.onCellValueChanged = function(event){
-		fnCalculateRefundAmt();		//환불예정금액 계산.
-	}
-	*/
 });
 </script>
 </html>

+ 1092 - 0
style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestFormBack.html

@@ -0,0 +1,1092 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CancelRequestForm.html
+ * @desc    : 취소요청 화면
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.12.12   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1400" data-height="600">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>취소요청</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCancelRequestForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/order/cancel" method="post" target="hdFrameForOrderCancel">
+				<input type="hidden" name="chgGb" 		value="30" />
+				<input type="hidden" name="ordDtlNos" 	value="" />
+				<input type="hidden" name="chgQtys" 	value="" />
+				<input type="hidden" name="ordNo" 	 	th:value="${ordNo}" />
+				<input type="hidden" name="mallGb" 		th:value="${orderInfo.mallGb}" />
+				<input type="hidden" name="delvFee" 	value="0" />
+				<input type="hidden" name="pgStat"	 	value="" />
+				<input type="hidden" name="chgReason"	value="" />
+				<input type="hidden" name="chgReasonDesc" value="" />
+				<input type="hidden" name="cncWait" 	th:value="${cncWait}" />
+		
+				<h3>주문정보</h3>
+				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+
+				<h3>취소정보</h3>
+				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+				
+				<h3>배송비정보</h3>
+				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+				
+				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
+					<button type="button" class="btn btn-success" id="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
+					<label th:if="${sessionInfo.userId == 'jsshin'
+									|| sessionInfo.userId == 'dlffyd7942'
+									|| sessionInfo.userId == 'card007'
+									|| sessionInfo.userId == 'hrkim'
+									|| sessionInfo.userId =='666badboy'
+									|| sessionInfo.userId =='yjyy83'}">
+						<input type="checkbox" name="pgStats" value="N">PG 전문 미전송
+					</label>
+					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</button>
+				</div>
+				
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>취소사유 <i class="star"></i></th>
+							<td>
+								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
+									<option value="">[선택하세요]</option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>귀책사유</th>
+							<td><span id="imputeReason"></span></td>
+						</tr>
+						<tr>
+							<th>요청메모</th>
+							<td colspan="3">
+								<textarea name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<h4>환불예정금액</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>총 결제 금액</th>
+							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
+						</tr>
+						<tr>
+							<th>주문 상품 금액</th>
+							<td><span id="spanOrdAmt"></span>원</td>
+							<th>취소 상품 금액</th>
+							<td><span id="spanCnclRtnAmt"></span>원</td>
+						</tr>
+						<tr>
+							<th>취소 사용 포인트</th>
+							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
+						</tr>
+						<tr>
+							<th>취소 사용 쿠폰금액</th>
+							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
+						</tr>
+						<tr>
+							<th>취소 다다익선 금액</th>
+							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
+						</tr>
+						
+						<tr>
+							<th>취소 고객 상품권 금액</th>
+							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
+						</tr>
+						
+						<tr>
+							<th>취소 상품 실결제 금액</th>
+							<td><span id="spanRealCnclRtnAmt"></span>원</td>
+							<th>추가 배송 금액</th>
+							<td><span id="spanTotDeliveryFee"></span>원 </td>
+						</tr>
+						<tr>
+							<th>환불 금액 합계</th>
+							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
+						</tr>
+					</tbody>
+				</table>
+				
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var cancelRequestTargetList = [[${cancelRequestTargetList}]];
+
+var temp1 = true;
+var temp2 = false;
+
+// specify the columns
+var columnCancelReqList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "사이즈코드"		, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "단품수량"		
+				, field			: "itemQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품금액"		
+				, field			: "itemPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품옵션금액"		
+				, field			: "optAddPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세수량",
+		children	: [
+			{
+				headerName		: "주문"		
+				, field			: "ordQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소/요청"		
+				, field			: "cnclRtnQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+					return cnclRtnReqQty;
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "ordCanChgQty"			
+				, width			: 100		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var ordQty 			= parseInt(params.data.ordQty);
+					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
+					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
+					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+					
+					var strVal 			= "";
+					strVal += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
+					
+					for (i=0 ; i<=ordCanChgQty ; i++) {
+						if (i == params.data.ordCanChgQty) {
+							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
+						} else {
+							strVal += "	<option value='"+i+"'>"+i+"</option>";
+						}
+					}
+				
+					strVal += "</select>";
+					return strVal;
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
+// Add on options
+gridOptionsCancelReqList.suppressRowClickSelection = true;
+gridOptionsCancelReqList.rowSelection = 'multiple';
+
+
+//specify the columns
+var columnCancelReqToBeList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "사이즈코드"		, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "단품수량"		
+				, field			: "itemQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품금액"		
+				, field			: "itemPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품옵션금액"		
+				, field			: "optAddPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세수량",
+		children	: [
+			{
+				headerName		: "주문"		
+				, field			: "ordQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소/요청"		
+				, field			: "cnclRtnQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+					return cnclRtnReqQty;
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "ordCanChgQty"			
+				, width			: 100		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+
+//specify the columns
+var columnDelvCdList = [
+	{
+		headerName	: "배송코드기준금액",
+		children	: [
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불"		
+				, field			: "realOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "추가배송비"		
+				, field			: "addDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
+</script>
+
+<!-- AgGrid 컬럼 세팅 -->
+<script>
+// 공통1. 주문상세 그리드 옵션 정보 적용
+var orderAgGrid = {
+	getGridOptions : function(colDefs) {
+		return {
+			columnDefs					: colDefs
+			, detailCellRendererParams	: {
+				detailGridOptions	: {
+					columnDefs				: []
+					, defaultColDef			: {
+						resizable: true
+					}
+					, suppressLoadingOverlay: false
+					, onGridReady			: function (params) {
+						params.api.setDomLayout('autoHeight');
+					}
+					, onFirstDataRendered	: function (params) {
+						params.api.sizeColumnsToFit();
+					}
+				}
+				, getDetailRowData: function (params) {
+					params.successCallback(params.data.orderDetailList);
+				}
+			}
+			, defaultColDef: {
+				resizable: true
+			}
+			, isRowMaster: function (dataItem) {
+				return dataItem ? dataItem.orderDetailList.length > 1 : false;
+			}
+			, suppressRowTransform: true
+			, enableRangeSelection: true
+		};
+	}
+}
+</script>
+
+<script>
+// 취소정보계산
+var fnCalculateRefundAmt = function (obj) {
+	// 취소정보담은목록
+	var cancelRequestTargetToBeList = [];
+
+	if (obj != null) {
+		for (i=0 ; i<cancelRequestTargetList.length ; i++) {
+			var orDtlNo 		= $(obj).attr("ordDtlNo");
+			var ordCanChgQty 	= $(obj).val();
+			
+			if (cancelRequestTargetList[i].ordDtlNo == orDtlNo) {
+				cancelRequestTargetList[i].ordCanChgQty = ordCanChgQty;
+			}
+		}
+		// 주문정보 다시 셋팅 (체크해봐야할문제)
+		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
+	}
+	
+	/*
+	// 취소 후 발생되는 배송정보 설정
+	var delvFeeList 		= [];
+	var delvObj				= new Object();
+	var k					= 0;
+	
+	// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+	delvObj.ordAmt 			= 0;
+	delvObj.cnclRtnAmt 		= 0;
+	delvObj.realOrdAmt 		= 0;
+	delvObj.delvFee 		= cancelRequestTargetList[k].delvFee;
+	delvObj.minOrdAmt 		= cancelRequestTargetList[k].minOrdAmt;
+	delvObj.orgDelvFee 		= cancelRequestTargetList[k].orgDelvFee;
+	delvObj.supplyCompCd 	= cancelRequestTargetList[k].supplyCompCd;
+	delvObj.delvFeeCd 		= cancelRequestTargetList[k].delvFeeCd;
+	delvObj.allCanYn		= cancelRequestTargetList[k].allCanYn;
+
+	delvFeeList[k] 			= delvObj;
+	
+	var spanPayAmt			= 0; // 총 결제 금액
+	var spanSumRealOrdAmt	= 0; // 상품 실결제 금액
+	var spanSumDeliveryFee	= 0; // 배송금액
+	var spanOrdAmt			= 0; // 주문 상품 금액
+	var spanCnclRtnAmt		= 0; // 취소 상품 금액
+	var spanTotPntDcAmt		= 0; // 취소 사용 포인트
+	var spanPntDcAmt		= 0; // 고객 포인트
+	var spanPrePntDcAmt		= 0; // 상품 선포인트
+	var spanCpnDcAmt		= 0; // 취소 사용 쿠폰금액
+	var spanCpn1DcAmt		= 0; // 즉시할인쿠폰
+	var spanGoodsCpnDcAmt	= 0; // 상품쿠폰
+	var spanCartCpnDcAmt	= 0; // 장바구니쿠폰
+	var spanTmtbDcAmt		= 0; // 취소 다다익선 금액
+	var spanTmtb1DcAmt		= 0; // 수량할인
+	var spanTmtb2DcAmt		= 0; // 금액할인
+	var spanGfcdUseAmt		= 0; // 취소 고객 상품권 금액
+	var spanRealCnclRtnAmt	= 0; // 취소 상품 실결제 금액
+	var spanTotDeliveryFee	= 0; // 환불 배송 금액
+	var spanRefundAmt		= 0; // 환불 금액 합계
+
+	// 취소정보 설정
+	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
+		var obj 			= new Object();
+		
+		var itemQty 		= cancelRequestTargetList[i].itemQty;
+		var ordQty 			= cancelRequestTargetList[i].ordQty;
+		var cnclRtnQty 		= cancelRequestTargetList[i].cnclRtnQty;
+		var ordReqChgQty 	= cancelRequestTargetList[i].ordReqChgQty;
+		var ordCanChgQty 	= cancelRequestTargetList[i].ordCanChgQty;
+		var itemPrice 		= cancelRequestTargetList[i].itemPrice;
+		var optAddPrice 	= cancelRequestTargetList[i].optAddPrice;
+		var ordAmt 			= cancelRequestTargetList[i].ordAmt;
+		
+		var cnclRtnAmt 		= cancelRequestTargetList[i].cnclRtnAmt;
+		var cpn1DcAmt 		= cancelRequestTargetList[i].cpn1DcAmt;
+		var tmtb1DcAmt 		= cancelRequestTargetList[i].tmtb1DcAmt;
+		var tmtb2DcAmt 		= cancelRequestTargetList[i].tmtb2DcAmt;
+		var goodsCpnDcAmt 	= cancelRequestTargetList[i].goodsCpnDcAmt;
+		var cartCpnDcAmt 	= cancelRequestTargetList[i].cartCpnDcAmt;
+		var pntDcAmt 		= cancelRequestTargetList[i].pntDcAmt;
+		var prePntDcAmt 	= cancelRequestTargetList[i].prePntDcAmt;
+		var gfcdUseAmt 		= cancelRequestTargetList[i].gfcdUseAmt;
+		var realOrdAmt 		= cancelRequestTargetList[i].realOrdAmt;
+		
+		obj.ordNo			= cancelRequestTargetList[i].ordNo;
+		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
+		obj.goodsCd			= cancelRequestTargetList[i].goodsCd;
+		obj.goodsNm			= cancelRequestTargetList[i].goodsNm;
+		obj.itemCd			= cancelRequestTargetList[i].itemCd;
+		obj.itemNm			= cancelRequestTargetList[i].itemNm;
+		obj.optCd1			= cancelRequestTargetList[i].optCd1;
+		obj.optCd2			= cancelRequestTargetList[i].optCd2;
+		obj.itemQty			= itemQty;
+		obj.ordQty			= ordQty;
+		obj.cnclRtnQty		= cnclRtnQty;
+		obj.ordReqChgQty	= ordReqChgQty;
+		obj.ordCanChgQty	= ordCanChgQty;
+		obj.itemPrice		= itemPrice;
+		obj.optAddPrice		= optAddPrice;
+		obj.ordAmt			= ordAmt;
+		
+		obj.cnclRtnAmt 		= ((itemPrice + optAddPrice) * itemQty) * ordCanChgQty;
+		obj.cpn1DcAmt 		= cpn1DcAmt 		* (ordCanChgQty/ordQty);
+		obj.tmtb1DcAmt 		= tmtb1DcAmt 		* (ordCanChgQty/ordQty);
+		obj.tmtb2DcAmt 		= tmtb2DcAmt 		* (ordCanChgQty/ordQty);
+		obj.goodsCpnDcAmt 	= goodsCpnDcAmt 	* (ordCanChgQty/ordQty);
+		obj.cartCpnDcAmt 	= cartCpnDcAmt 		* (ordCanChgQty/ordQty);
+		obj.pntDcAmt 		= pntDcAmt 			* (ordCanChgQty/ordQty);
+		obj.prePntDcAmt 	= prePntDcAmt 		* (ordCanChgQty/ordQty);
+		obj.gfcdUseAmt 		= gfcdUseAmt 		* (ordCanChgQty/ordQty);
+		
+		obj.realOrdAmt 		= obj.cnclRtnAmt - (obj.cpn1DcAmt  + obj.tmtb1DcAmt + obj.tmtb2DcAmt + obj.goodsCpnDcAmt + obj.cartCpnDcAmt + obj.pntDcAmt + obj.prePntDcAmt + obj.gfcdUseAmt);
+		
+		// 배송관련 설정		
+		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
+		obj.goodsTypeNm		= cancelRequestTargetList[i].goodsTypeNm;
+		obj.delvFee			= cancelRequestTargetList[i].delvFee;
+		obj.supplyCompCd	= cancelRequestTargetList[i].supplyCompCd;
+		obj.delvFeeCd		= cancelRequestTargetList[i].delvFeeCd;
+		obj.minOrdAmt		= cancelRequestTargetList[i].minOrdAmt;
+		obj.orgDelvFee		= cancelRequestTargetList[i].orgDelvFee;
+		
+		// 주문상세상태
+		obj.ordDtlStat		= cancelRequestTargetList[i].ordDtlSat;
+		obj.ordDtlSatNm		= cancelRequestTargetList[i].ordDtlSatNm;
+		obj.allCanYn		= cancelRequestTargetList[i].allCanYn;
+		
+		cancelRequestTargetToBeList[i] = obj;
+
+		// 배송비 정책 기준으로 조건 처리
+		if (delvFeeList[k].supplyCompCd == obj.supplyCompCd && delvFeeList[k].delvFeeCd == obj.delvFeeCd) {
+			// 공급업체 와 배송정책코드가 같으면 주문금액, 취소금액 SUM
+			delvFeeList[k].ordAmt 		+= obj.ordAmt;
+			delvFeeList[k].cnclRtnAmt 	+= obj.cnclRtnAmt;
+			delvFeeList[k].realOrdAmt 	+= obj.realOrdAmt;
+			
+			if (obj.allCanYn == "N") {
+				delvFeeList[k].allCanYn = "N";
+			}
+		} else {			
+			k++;
+			
+			var delvObj					= new Object();
+			
+			// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+			delvObj.ordAmt 				= obj.ordAmt;
+			delvObj.cnclRtnAmt 			= obj.cnclRtnAmt;
+			delvObj.realOrdAmt 			= obj.realOrdAmt;
+			
+			delvObj.delvFee 			= obj.delvFee;
+			delvObj.minOrdAmt 			= obj.minOrdAmt;			
+			delvObj.orgDelvFee 			= obj.orgDelvFee;
+			delvObj.supplyCompCd 		= obj.supplyCompCd;
+			delvObj.delvFeeCd 			= obj.delvFeeCd;
+			delvObj.allCanYn			= obj.allCanYn;
+			
+			delvFeeList[k] 				= delvObj;
+		}
+		
+		spanSumRealOrdAmt	+= realOrdAmt;
+		spanPntDcAmt		+= obj.pntDcAmt;
+		spanPrePntDcAmt		+= obj.prePntDcAmt;
+		spanCpn1DcAmt		+= obj.cpn1DcAmt;
+		spanGoodsCpnDcAmt	+= obj.goodsCpnDcAmt;
+		spanCartCpnDcAmt	+= obj.cartCpnDcAmt;
+		spanTmtb1DcAmt		+= obj.tmtb1DcAmt;
+		spanTmtb2DcAmt		+= obj.tmtb2DcAmt;
+		spanGfcdUseAmt		+= obj.gfcdUseAmt;
+		spanRealCnclRtnAmt	+= obj.realOrdAmt;
+	}
+	
+	// 추가배송비 발생여부 , 추가배송비, 배송비정책단위 전체취소 여부
+	for (i=0 ; i<delvFeeList.length ; i++) {
+		var obj = delvFeeList[i];
+		
+		// 무료배송비용 > (주문금액 - 취소금액)
+		if (obj.minOrdAmt > (obj.ordAmt - obj.cnclRtnAmt)) {
+			// 2020.12.28 
+			// case : 배송정책 기준으로 1,2 상품 주문 후 1번 출고 후 1번반품 2번취소 할 경우 전체 취소 가 아니므로 배송비 부과 있을지 모르겠음 주문업체 단위로 배송되기 때문에 발생하지 않을것 같음
+			if ((obj.ordAmt - obj.cnclRtnAmt) == 0) {
+				if (obj.allCanYn == "N") {
+					obj.addDelvFeeYn 	= "Y";
+					obj.addDelvFee 		= obj.orgDelvFee;
+				} else {
+					// 전체취소의 경우에 해당
+					obj.addDelvFeeYn 	= "N";
+					obj.addDelvFee 		= 0;
+				}
+			} else {
+				// 취소신청화면에서 대부분 아래의 조건에 해당
+				obj.addDelvFeeYn 	= "Y";
+				obj.addDelvFee 		= obj.orgDelvFee;
+			}
+			
+			//obj.addDelvFeeYn 	= "Y";
+			//obj.addDelvFee 		= obj.orgDelvFee;
+		} else {
+			obj.addDelvFeeYn 	= "N";
+			obj.addDelvFee 		= 0;
+		}
+		
+		spanSumDeliveryFee	+= obj.delvFee;
+		spanOrdAmt			+= obj.ordAmt;
+		spanCnclRtnAmt		+= obj.cnclRtnAmt;
+		spanTotDeliveryFee  += obj.addDelvFee;
+				
+		delvFeeList[i] = obj;
+	}
+
+	gridOptionsCancelReqToBeList.api.setRowData(cancelRequestTargetToBeList);
+	gridOptionsDelvCdList.api.setRowData(delvFeeList);
+	
+	// 환불금액표시
+	spanPayAmt 			= spanSumRealOrdAmt + spanSumDeliveryFee;
+	spanTotPntDcAmt 	= spanPntDcAmt + spanPrePntDcAmt;
+	spanCpnDcAmt 		= spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt;
+	spanTmtbDcAmt 		= spanTmtb1DcAmt + spanTmtb2DcAmt;
+	spanRefundAmt 		= spanRealCnclRtnAmt - spanTotDeliveryFee;
+	
+	$("#spanPayAmt").text(spanPayAmt.addComma());					//총 결제 금액
+	$("#spanSumRealOrdAmt").text(spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+	$("#spanSumDeliveryFee").text(spanSumDeliveryFee.addComma());	//배송금액
+	
+	$("#spanOrdAmt").text(spanOrdAmt.addComma());					//주문 상품 금액
+	$("#spanCnclRtnAmt").text(spanCnclRtnAmt.addComma());			//취소 상품 금액
+	
+	$("#spanTotPntDcAmt").text(spanTotPntDcAmt.addComma());			//취소 사용 포인트
+	$("#spanPntDcAmt").text(spanPntDcAmt.addComma());				//고객 포인트
+	$("#spanPrePntDcAmt").text(spanPrePntDcAmt.addComma());			//상품 선포인트
+	
+	$("#spanCpnDcAmt").text(spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+	$("#spanCpn1DcAmt").text(spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+	$("#spanGoodsCpnDcAmt").text(spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+	$("#spanCartCpnDcAmt").text(spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+	
+	$("#spanTmtbDcAmt").text(spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+	$("#spanTmtb1DcAmt").text(spanTmtb1DcAmt.addComma());			//수량할인
+	$("#spanTmtb2DcAmt").text(spanTmtb2DcAmt.addComma());			//금액할인
+	
+	$("#spanGfcdUseAmt").text(spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+	
+	$("#spanRealCnclRtnAmt").text(spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+	$("#spanTotDeliveryFee").text(spanTotDeliveryFee.addComma());	//환불 배송 금액
+	
+	$("#spanRefundAmt").text(spanRefundAmt.addComma());				//환불 금액 합계
+	*/
+	
+	// 환불금액계산호출
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/refundAmt'
+		, jsonData
+		, function(result) {
+			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
+			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
+			
+			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
+			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
+			
+			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
+			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
+			
+			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
+			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
+			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
+			
+			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+			
+			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
+			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
+			
+			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+			
+			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//환불 배송 금액
+			
+			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
+			
+			//alert("a");
+			//$('#btnSearch').trigger('click');
+		}
+	);
+}
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var arrREasonCd = reasonCd.split(":");
+	
+	// 취소, 반품, 교환 사유 판단
+	if (arrREasonCd[0] == 'G686_10') {
+		$("#imputeReason").text("고객");
+		isImputationCustomers = true;
+	} else {
+		$("#imputeReason").text("회사");
+		isImputationCustomers = false;
+	}
+
+	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+
+	//fnCalculateRefundAmt();			//환불예정금액 계산.
+}
+
+// 에스크로 전체취소, 부분취소 요청
+var fnCancelRequestPartOk = function () {
+	// 취소, 반품, 교환 신청 정보 목록
+	//cancelRequestTargetList;
+	
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/'
+		, jsonData
+		, function() {
+			$('#btnSearch').trigger('click');
+		}
+	);
+	
+}
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
+	
+	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
+	
+	// 취소정보계산
+	fnCalculateRefundAmt(null);
+});
+</script>
+</html>
+
+
+
+
+

+ 1 - 1
style24.admin/src/main/webapp/WEB-INF/views/system/CommoncodeForm.html

@@ -183,8 +183,8 @@
 		$('#detailForm input[name=cdGb]').val(rowData.cdGb);
 		$('#detailForm input[name=cd]').val(rowData.cd);
 		$('#detailForm input[name=cdNm]').val(rowData.cdNm);
-		$('#detailForm input[name=cdDesc]').val(rowData.cdDesc);
 		$('#detailForm input[name=dispOrd]').val(rowData.dispOrd);
+		$('#detailForm textarea[name=cdDesc]').val(rowData.cdDesc);
 		
 		$("#detailForm input[name=useYn]").val(rowData.useYn);
 		if (rowData.useYn == 'Y') {

+ 1 - 14
style24.batch/.classpath

@@ -10,7 +10,7 @@
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
-	</classpathentry>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
@@ -28,18 +28,5 @@
 			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/classes"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>

+ 25 - 0
style24.batch/src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -5,6 +5,9 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsIfIncomelot;
+import com.style24.persistence.domain.GoodsIfIncomelotitem;
+import com.style24.persistence.domain.GoodsIfMeasurement;
 import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSummary;
 
@@ -239,5 +242,27 @@ public interface TsbGoodsDao {
 	 */
 	void saveGoodsSafeNo(GoodsSafeNo goodsSafeNo);
 
+	/**
+	 * 실측사이즈 저장
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	void saveGoodsIfMeasurement(GoodsIfMeasurement goodsMeasurement);
 
+	/**
+	 * 입고 저장
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	void saveGoodsIfIncomelot(GoodsIfIncomelot ㅎoodsIfIncomelot);
+
+	/**
+	 * 입고상품 저장
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	void saveGoodsIfIncomelotitem(GoodsIfIncomelotitem goodsIfIncomelotitem);
 }

+ 46 - 0
style24.batch/src/main/java/com/style24/batch/biz/dao/TsbWmsGoodsDao.java

@@ -0,0 +1,46 @@
+package com.style24.batch.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.GoodsIfIncomelot;
+import com.style24.persistence.domain.GoodsIfIncomelotitem;
+import com.style24.persistence.domain.GoodsIfMeasurement;
+
+/**
+ * WMS 상품 연동Dao
+ *
+ * @author eskim
+ * @since 2021. 01. 01
+ */
+@ShopDs
+public interface TsbWmsGoodsDao {
+
+	/**
+	 * 실측사이즈 연동
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	Collection<GoodsIfMeasurement> getWmsMeasurementList();
+
+	/**
+	 * 입고 목록 
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	Collection<GoodsIfIncomelot> getWmsIncomelotList();
+
+	/**
+	 * 입고 상품목록
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	Collection<GoodsIfIncomelotitem> getWmsIncomelotitemList();
+
+}

+ 56 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsWmsIncomelotJob.java

@@ -0,0 +1,56 @@
+package com.style24.batch.biz.job.goods;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbGoodsService;
+import com.style24.persistence.domain.GoodsIfIncomelotitem;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * WMS 입고 연용
+ *
+ * @author eskim
+ * @since 2021. 01. 01
+ */
+@Component
+@Slf4j
+public class TsbGoodsWmsIncomelotJob extends TsbAbstractJob<GoodsIfIncomelotitem, GoodsIfIncomelotitem, GoodsIfIncomelotitem> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public GoodsIfIncomelotitem read() throws Exception {
+
+		GoodsIfIncomelotitem goodsIfIncomelotitem = new GoodsIfIncomelotitem();
+		return goodsIfIncomelotitem;
+	}
+
+	@Override
+	public GoodsIfIncomelotitem process(GoodsIfIncomelotitem goodsIfIncomelotitem) throws Exception {
+		return goodsIfIncomelotitem;
+	}
+
+	@Override
+	public GoodsIfIncomelotitem write(GoodsIfIncomelotitem goodsIfIncomelotitem) throws Exception {
+
+		//wms 입고 정보 처리
+		goodsService.saveGoodsWmsIncomelot();
+
+		//온라인 입고 처리
+		//goodsService.saveGoodsWms();
+		return goodsIfIncomelotitem;
+	}
+
+	@Override
+	public void notify(GoodsIfIncomelotitem goodsIfIncomelotitem) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 52 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsWmsMeasurementJob.java

@@ -0,0 +1,52 @@
+package com.style24.batch.biz.job.goods;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbGoodsService;
+import com.style24.persistence.domain.GoodsIfMeasurement;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * WMS 실측사이즈 연용
+ *
+ * @author eskim
+ * @since 2020. 12. 31
+ */
+@Component
+@Slf4j
+public class TsbGoodsWmsMeasurementJob extends TsbAbstractJob<GoodsIfMeasurement, GoodsIfMeasurement, GoodsIfMeasurement> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public GoodsIfMeasurement read() throws Exception {
+
+		GoodsIfMeasurement goodsIfMeasurement = new GoodsIfMeasurement();
+		return goodsIfMeasurement;
+	}
+
+	@Override
+	public GoodsIfMeasurement process(GoodsIfMeasurement goodsIfMeasurement) throws Exception {
+		return goodsIfMeasurement;
+	}
+
+	@Override
+	public GoodsIfMeasurement write(GoodsIfMeasurement goodsIfMeasurement) throws Exception {
+
+		goodsService.saveGoodsWmsMeasurement();
+		return goodsIfMeasurement;
+	}
+
+	@Override
+	public void notify(GoodsIfMeasurement goodsIfMeasurement) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 52 - 1
style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -13,6 +13,9 @@ import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.core.biz.thirdparty.SafetyKoreaApi;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsIfIncomelot;
+import com.style24.persistence.domain.GoodsIfIncomelotitem;
+import com.style24.persistence.domain.GoodsIfMeasurement;
 import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSummary;
 
@@ -41,6 +44,8 @@ public class TsbGoodsService {
 	@Autowired
 	private SafetyKoreaApi safetyKoreaApi;
 
+	@Autowired
+	private TsbWmsGoodsService wmsGoodsService;
 
 	/**
 	 * 상품 타이틀예약 작업
@@ -323,7 +328,7 @@ public class TsbGoodsService {
 		// 1. 대상 상품 조회
 		Collection<GoodsSafeNo> goodsSafeNoList = goodsDao.getGoodsSafeNoList();
 		// 2. 인증테이블 적용
-		for(GoodsSafeNo goodsSafeNo: goodsSafeNoList) {
+		for (GoodsSafeNo goodsSafeNo : goodsSafeNoList) {
 			try {
 				GagaMap result = safetyKoreaApi.getKoreaCertifyNo(goodsSafeNo.getGoodsNum()); // 품번으로 처리
 				if (result != null || !StringUtil.isNullOrEmpty(result.get("certNum").toString())) {
@@ -341,4 +346,50 @@ public class TsbGoodsService {
 		}
 	}
 
+	/**
+	 * WMS 실측사이즈 연용
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	@Transactional("shopTxnManager")
+	public void saveGoodsWmsMeasurement() {
+
+		// wms 대상건 조회 (등록, 수정건 조회)
+		Collection<GoodsIfMeasurement> goodsMeasurementList = wmsGoodsService.getWmsMeasurementList();
+
+		for (GoodsIfMeasurement goodsMeasurement : goodsMeasurementList) {
+			goodsDao.saveGoodsIfMeasurement(goodsMeasurement);
+		}
+	}
+
+	/**
+	 * WMS 입고정보 연용
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	@Transactional("shopTxnManager")
+	public void saveGoodsWmsIncomelot() {
+
+		// wms 입고목록 조회 (등록, 수정건 조회)
+		Collection<GoodsIfIncomelot> goodsIfIncomelotList = wmsGoodsService.getWmsIncomelotList();
+
+		for (GoodsIfIncomelot goodsIfIncomelot : goodsIfIncomelotList) {
+			goodsDao.saveGoodsIfIncomelot(goodsIfIncomelot);
+		}
+
+		// wms 입고상품목록 조회 (등록, 수정건 조회)
+		Collection<GoodsIfIncomelotitem> goodsIfIncomelotitemList = wmsGoodsService.getWmsIncomelotitemList();
+
+		for (GoodsIfIncomelotitem goodsIfIncomelotitem : goodsIfIncomelotitemList) {
+			goodsDao.saveGoodsIfIncomelotitem(goodsIfIncomelotitem);
+		}
+
+		//
+
+	}
+
 }

+ 61 - 0
style24.batch/src/main/java/com/style24/batch/biz/service/TsbWmsGoodsService.java

@@ -0,0 +1,61 @@
+package com.style24.batch.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.style24.batch.biz.dao.TsbWmsGoodsDao;
+import com.style24.persistence.domain.GoodsIfIncomelot;
+import com.style24.persistence.domain.GoodsIfIncomelotitem;
+import com.style24.persistence.domain.GoodsIfMeasurement;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * WMS 상품 연동  Service
+ *
+ * @author eskim
+ * @since 2021. 01. 01
+ */
+@Service
+@Slf4j
+public class TsbWmsGoodsService {
+
+	@Autowired
+	private TsbWmsGoodsDao wmsGoodsDao;
+
+	/**
+	 * WMS 실측사이즈 연용
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	public Collection<GoodsIfMeasurement> getWmsMeasurementList() {
+		return wmsGoodsDao.getWmsMeasurementList();
+	}
+
+	/**
+	 * WMS 입고 목록
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	public Collection<GoodsIfIncomelot> getWmsIncomelotList() {
+		return wmsGoodsDao.getWmsIncomelotList();
+	}
+
+	/**
+	 * WMS 입고 상품목록 
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 01
+	 */
+	public Collection<GoodsIfIncomelotitem> getWmsIncomelotitemList() {
+		return wmsGoodsDao.getWmsIncomelotitemList();
+	}
+
+}

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

@@ -12,6 +12,8 @@ import com.style24.batch.biz.job.goods.TsbGoodsRelateScoreJob;
 import com.style24.batch.biz.job.goods.TsbGoodsSnmJob;
 import com.style24.batch.biz.job.goods.TsbGoodsSummaryJob;
 import com.style24.batch.biz.job.goods.TsbGoodsTnmJob;
+import com.style24.batch.biz.job.goods.TsbGoodsWmsIncomelotJob;
+import com.style24.batch.biz.job.goods.TsbGoodsWmsMeasurementJob;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -45,6 +47,11 @@ public class TsbGoodsTask {
 	@Autowired
 	private TsbGoodsInfantsSafeNoJob goodsInfantsSafeNoJob;
 
+	@Autowired
+	private TsbGoodsWmsMeasurementJob goodsWmsMeasurementJob;
+
+	@Autowired
+	private TsbGoodsWmsIncomelotJob goodsWmsIncomelotJob;
 
 	/**
 	 * 초 분 시 일 월 주(년)
@@ -154,5 +161,28 @@ public class TsbGoodsTask {
 		goodsInfantsSafeNoJob.run("cron.goods.infants.safe");
 	}
 
+	/**
+	 * WMS 실측사이즈 연동 적용 주기 : 일배치 - 03시
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.wms.measurement}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsWmsMeasurementJob() throws Exception {
+		goodsWmsMeasurementJob.runById("cron.goods.wms.measurement");
+	}
+
+	/**
+	 * WMS 입고상품 연동 적용 주기 : 일배치 - 03시 10분
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.wms.incomelot}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsWmsIncomelotJob() throws Exception {
+		goodsWmsIncomelotJob.runById("cron.goods.wms.incomelot");
+	}
 
 }

+ 25 - 0
style24.batch/src/main/java/com/style24/persistence/domain/GoodsIfIncomelot.java

@@ -0,0 +1,25 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품 입고정보 Domain
+ *
+ * @author eskim
+ * @since 2021. 01. 01
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsIfIncomelot extends TscBaseDomain {
+
+	private Integer lotno;	//입고번호
+	private int purchaseno;	//발주번호
+	private int providerno;	//공급처번호
+	private String providername;	//공급처명
+	private int brandno;	//브랜드번호
+	private String brandname;	//브랜드명
+	private String dateincome;	//wms생성일
+
+}

+ 29 - 0
style24.batch/src/main/java/com/style24/persistence/domain/GoodsIfIncomelotitem.java

@@ -0,0 +1,29 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품 입고상품정보 Domain
+ *
+ * @author eskim
+ * @since 2021. 01. 01
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsIfIncomelotitem extends TscBaseDomain {
+
+	private Integer lotno;	//입고번호
+	private Integer itemno;	//입고항목번호
+	private int wmsitemno;
+	private String dateincome;	//wms생성일
+	private int productno;	//상품번호
+	private String productcode;	//상품코드
+	private String productname;	//상품명
+	private String skucode;	//옵션번호
+	private int normalqty;	//일반수량
+	private int brokenqty;	//불량수량
+	private int totalqty;	//총수량
+
+}

+ 33 - 0
style24.batch/src/main/java/com/style24/persistence/domain/GoodsIfMeasurement.java

@@ -0,0 +1,33 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품 실측사이즈 Domain
+ *
+ * @author eskim
+ * @since 2021. 01. 01
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsIfMeasurement extends TscBaseDomain {
+
+	private String skucode;		//옵션번호
+	private String productno;	//상품 번호
+	private String productcode;	//상품 코드
+	private String typecd;	//상하의 타입
+	private String washingmethod;	//세탁방법
+	private String value1;	//치수1
+	private String value2;	//치수2
+	private String value3;	//치수3
+	private String value4;	//치수4
+	private String value5;	//치수5
+	private String memo;	//메모
+	private String dateinserted;	//등록일 yyyy-mm-dd hh:mi:ss
+	private String datelastmodified;	//수정일 yyyy-mm-dd hh:mi:ss
+	private String isuse;	//사용여부(1:Y, 0 N)
+	private String userlastmodified;	//수정자
+
+}

+ 133 - 1
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -4,7 +4,7 @@
 	
 	<!-- 상품 기본정보 이력 생성 -->
 	<insert id="createGoodsHst" parameterType="Goods">
-		/* AdmGoods.createGoodsHst */
+		/* TsbGoods.createGoodsHst */
 		INSERT INTO TB_GOODS_HST 
 		(       GOODS_CD
 		      , PRODUCT_NO
@@ -445,6 +445,7 @@
 	
 	<!-- 사용자검색어가 있는 상품 조회  -->
 	<select id="getGoodsByGooodsSnm1List"  resultType="Goods">
+		/* TsbGoods.getGoodsByGooodsSnm1List */
 		WITH RECURSIVE TMP_COLOR_GOODS AS (
 		    SELECT Z.GOODS_CD
 		         , REPLACE(CONCAT(GROUP_CONCAT(COLOR_GRP_CD),';',GROUP_CONCAT(COLOR_ENM),';',GROUP_CONCAT(CD_NM)),',',';') AS COLOR_INFO
@@ -1066,4 +1067,135 @@
 		     , UPD_DT = NOW()
 	</insert>
 	
+	<!--실측사이즈 저장-->
+	<insert id="saveGoodsIfMeasurement" parameterType="GoodsIfMeasurement">
+		/* TsbGoods.saveGoodsIfMeasurement */
+		INSERT INTO TB_IF_MEASUREMENT (
+		       SKUCODE
+		     , PRODUCTNO
+		     , PRODUCTCODE
+		     , TYPECD
+		     , WASHINGMETHOD
+		     , VALUE1
+		     , VALUE2
+		     , VALUE3
+		     , VALUE4
+		     , VALUE5
+		     , MEMO
+		     , DATEINSERTED
+		     , DATELASTMODIFIED
+		     , ISUSE
+		     , USERLASTMODIFIED
+		     , UPD_DT
+		)
+		(
+		       #{skucode}
+		     , #{productno}
+		     , #{productcode}
+		     , #{typecd}
+		     , #{washingmethod}
+		     , NVL(#{value1},0)
+		     , NVL(#{value2},0)
+		     , NVL(#{value3},0)
+		     , NVL(#{value4},0)
+		     , NVL(#{value5},0)
+		     , #{memo}
+		     , CONVERT(VARCHAR,#{dateinserted},20)  /* yyyy-mm-dd hh:mi:ss */
+		     , CONVERT(VARCHAR,#{datelastmodified},20) 
+		     , NVL(#{isuse},'1')
+		     , #{userlastmodified}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       WASHINGMETHOD = #{washingmethod}
+		     , VALUE1 = NVL(#{value1},0)
+		     , VALUE2 = NVL(#{value2},0)
+		     , VALUE3 = NVL(#{value3},0)
+		     , VALUE4 = NVL(#{value4},0)
+		     , VALUE5 = NVL(#{value5},0)
+		     , MEMO = #{memo}
+		     , DATEINSERTED = CONVERT(VARCHAR,#{dateinserted},20)  /* yyyy-mm-dd hh:mi:ss */
+		     , DATELASTMODIFIED = CONVERT(VARCHAR,#{datelastmodified},20) 
+		     , ISUSE = NVL(#{isuse},'1')
+		     , USERLASTMODIFIED = #{userlastmodified}
+		     , UPD_DT = NOW()
+	</insert>
+	
+	<!--입고 저장-->
+	<insert id="saveGoodsIfIncomelot" parameterType="GoodsIfMeasurement">
+		/* TsbGoods.saveGoodsIfIncomelot */
+		INSERT INTO TB_IF_INCOMELOT (
+		       LOTNO
+		     , PURCHASENO
+		     , PROVIDERNO
+		     , PROVIDERNAME
+		     , BRANDNO
+		     , BRANDNAME
+		     , DATEINCOME
+		     , UPD_DT
+		)
+		(
+		       #{lotno}
+		     , #{purchaseno}
+		     , #{providerno}
+		     , #{providername}
+		     , #{brandno}
+		     , #{brandname}
+		     , CONVERT(VARCHAR,#{dateincome},20)  /* yyyy-mm-dd hh:mi:ss */
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       PURCHASENO = #{purchaseno}
+		     , PROVIDERNO = #{providerno}
+		     , PROVIDERNAME = #{providername}
+		     , BRANDNO = #{brandno}
+		     , BRANDNAME = #{brandname}
+		     , DATEINCOME = CONVERT(VARCHAR,#{dateincome},20)
+		     , UPD_DT = NOW()
+	</insert>
+	
+	<!--입고상품 저장-->
+	<insert id="saveGoodsIfIncomelotitem" parameterType="GoodsIfMeasurement">
+		/* TsbGoods.saveGoodsIfIncomelotitem */
+		INSERT INTO TB_IF_INCOMELOTITEM (
+		       LOTNO
+		     , ITEMNO
+		     , WMSITEMNO
+		     , DATEINCOME
+		     , PRODUCTNO
+		     , PRODUCTCODE
+		     , PRODUCTNAME
+		     , SKUCODE
+		     , NORMALQTY
+		     , BROKENQTY
+		     , TOTALQTY
+		     , UPD_DT
+		)
+		(
+		       #{lotno}
+		     , #{itemno}
+		     , #{wmsitemno}
+		     , CONVERT(VARCHAR,#{dateincome},20)  /* yyyy-mm-dd hh:mi:ss */
+		     , #{productno}
+		     , #{productcode}
+		     , #{productname}
+		     , #{skucode}
+		     , #{normalqty}
+		     , #{brokenqty}
+		     , #{totalqty}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       WMSITEMNO = #{wmsitemno}
+		     , DATEINCOME = CONVERT(VARCHAR,#{dateincome},20)
+		     , PRODUCTNO = #{productno}
+		     , PRODUCTCODE = #{productcode}
+		     , PRODUCTNAME = #{productname}
+		     , SKUCODE = #{skucode}
+		     , NORMALQTY = #{normalqty}
+		     , BROKENQTY = #{brokenqty}
+		     , TOTALQTY = #{totalqty}
+		     , UPD_DT = NOW()
+	</insert>
+	
 </mapper>

+ 60 - 0
style24.batch/src/main/java/com/style24/persistence/mybatis/wms/TsbWmsGoods.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.batch.biz.dao.TsbWmsGoodsDao">
+	
+	<!-- wms 실측 사이즈 목록   -->
+	<select id="getWmsMeasurementList"  resultType="GoodsIfMeasurement">
+		/* TsbWmsGoods.getWmsMeasurementList */
+		SELECT SKUCODE
+		     , PRODUCTNO
+		     , PRODUCTCODE
+		     , TYPECD
+		     , WASHINGMETHOD
+		     , VALUE1
+		     , VALUE2
+		     , VALUE3
+		     , VALUE4
+		     , VALUE5
+		     , MEMO
+		     , CONVERT(CHAR(19),DATEINSERTED,120) AS DATEINSERTED  /* yyyy-mm-dd hh:mi:ss */
+		     , CONVERT(CHAR(19),DATELASTMODIFIED,120) AS DATELASTMODIFIED 
+		     , ISUSE
+		     , USERLASTMODIFIED
+		FROM TB_IF_MEASUREMENT
+		WHERE CONVERT(CHAR(8),DATELASTMODIFIED,112) = DATEADD(day,-1, GETDATE())
+	</select>
+	
+	<!-- wms 입고 목록   -->
+	<select id="getWmsIncomelotList"  resultType="GoodsIfIncomelot">
+		/* TsbWmsGoods.getWmsIncomelotList */
+		SELECT LOTNO
+		     , PURCHASENO
+		     , PROVIDERNO
+		     , PROVIDERNAME
+		     , BRANDNO
+		     , BRANDNAME
+		     , CONVERT(CHAR(19),DATEINCOME,120) AS DATEINCOME  /* yyyy-mm-dd hh:mi:ss */
+		FROM TB_IF_INCOMELOT
+		WHERE CONVERT(CHAR(8),DATEINCOME,112) = DATEADD(day,-1, GETDATE())
+	</select>
+	
+	<!-- wms 입고 상품목록   -->
+	<select id="getWmsIncomelotitemList"  resultType="GoodsIfIncomelotitem">
+		/* TsbWmsGoods.getWmsIncomelotitemList */
+		SELECT LOTNO
+		     , ITEMNO
+		     , WMSITEMNO
+		     , CONVERT(CHAR(19),DATEINCOME,120) AS DATEINCOME  /* yyyy-mm-dd hh:mi:ss */
+		     , PRODUCTNO
+		     , PRODUCTCODE
+		     , PRODUCTNAME
+		     , SKUCODE
+		     , NORMALQTY
+		     , BROKENQTY
+		     , TOTALQTY
+		FROM TB_IF_INCOMELOTITEM
+		WHERE CONVERT(CHAR(8),DATEINCOME,112) = DATEADD(day,-1, GETDATE())
+	</select>
+	
+
+</mapper>

+ 0 - 13
style24.front/.classpath

@@ -28,18 +28,5 @@
 			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/classes"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>

BIN
style24.front/target/classes/com/style24/front/biz/web/TsfCustomerController.class


+ 1 - 1
style24.front/target/m2e-wtp/web-resources/META-INF/maven/com.style24.front/style24.front/pom.properties

@@ -1,5 +1,5 @@
 #Generated by Maven Integration for Eclipse
-#Mon Dec 28 15:27:40 KST 2020
+#Sun Jan 03 16:55:00 KST 2021
 version=0.0.1-SNAPSHOT
 groupId=com.style24.front
 m2e.projectName=style24.front

+ 2 - 5
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssGoods.xml

@@ -1380,11 +1380,8 @@
 	</update>
 	
 	<!-- 상품코드 생성 -->
-	<insert id="createGoodsSequence" parameterType="Goods">
-		/* TssGoods.createGoodsSequence */
-		<selectKey keyProperty="goodsSq" resultType="int" order="AFTER">
-		SELECT MAX(GOODS_SQ) FROM TB_GOODS_SEQUENCE
-		</selectKey>
+	<insert id="createGoodsSequence" parameterType="Goods" keyProperty="goodsSq">
+		/* TssGoods.createGoodsSequence */ 
 		INSERT INTO TB_GOODS_SEQUENCE (GOODS_SQ) VALUES (NULL)
 	</insert>