package com.style24.core.biz.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import com.gagaframework.web.parameter.GagaMap;
import com.style24.persistence.domain.Order;

import lombok.extern.slf4j.Slf4j;

/**
 * 취소, 반품, 교환 Service
 * 
 * @author jsh77b
 * @since 2021. 01. 18
 */
@Service
@Slf4j
public class TscOrderRefundService {

	/**
	 * 취소,반품 환불금액 계산 (admin, front) (백업) (단품단위)
	 * @param Order
	 * @return Order
	 * @author jsh77b
	 * @since 2021. 01. 19
	 */
	public GagaMap cnclRtnRefundAmt(List<Order> cnclRtnList) {
		GagaMap mav = new GagaMap();

		// 1. 변수설정
		int spanPayAmt						= 0;					// 총 결제 금액
		int spanSumRealOrdAmt				= 0;					// 상품 실결제 금액
		int spanSumDeliveryFee				= 0;					// 배송금액
		int spanRtnSumDeliveryFee 			= 0;					// 반품배송금액
		int spanExcSumDeliveryFee 			= 0;					// 교환배송금액
		int spanOrdAmt						= 0;					// 주문 상품 금액
		int spanOrgCnclRtnAmt				= 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 spanDelvCpnDcAmt				= 0;					// 배송비쿠폰
		int spanRefundDelvCpnAmt			= 0;					// 배송비쿠폰 환불 금액
		int spanTmtbDcAmt					= 0;					// 취소 다다익선 금액
		int spanTmtb1DcAmt					= 0;					// 수량할인
		int spanTmtb2DcAmt					= 0;					// 금액할인
		int spanGfcdUseAmt					= 0;					// 취소 고객 상품권 금액
		int spanDelvGfcdUseAmt				= 0;					// 취소 고객 배송비 상품권 금액
		int spanRealCnclRtnAmt				= 0;					// 취소 상품 실결제 금액
		int spanTotDeliveryFee				= 0;					// 환불 배송 금액
		int spanRefundAmt					= 0;					// 환불 금액 합계
		int spanSavePntAmt					= 0;					// 2021.08.04 적립예정포인트 환수금액
		int sumDeliveryFee					= 0;					// 배송금액 (전체 취소시에 배송금액도 같이 환불)
		
		List<Order> cancelOrderRefundList 	= new ArrayList<>();	// 주문환불금액목록
		List<Order> cancelDelvRefundList 	= new ArrayList<>();	// 주문환불배송금액목록
		
		Order orderObj	= new Order();
		Order delvObj	= new Order();
		int k 			= 0 ;
		
		// 2. 초기 배송정보 설정
		delvObj.setOrdAmt(0);
		delvObj.setCnclRtnAmt(0);
		delvObj.setRealOrdAmt(0);
		delvObj.setDelvFee(cnclRtnList.get(k).getDelvFee());
		delvObj.setDelvCpnDcAmt(cnclRtnList.get(k).getDelvCpnDcAmt());
		delvObj.setDelvGfcdUseAmt(cnclRtnList.get(k).getDelvGfcdUseAmt());
		delvObj.setMinOrdAmt(cnclRtnList.get(k).getMinOrdAmt());
		delvObj.setOrgDelvFee(cnclRtnList.get(k).getOrgDelvFee());
		delvObj.setRtnDelvFee(cnclRtnList.get(k).getRtnDelvFee());
		delvObj.setExcDelvFee(cnclRtnList.get(k).getExcDelvFee());
		delvObj.setSupplyCompCd(cnclRtnList.get(k).getSupplyCompCd());
		delvObj.setDelvFeeCd(cnclRtnList.get(k).getDelvFeeCd());
		delvObj.setLastCanYn(cnclRtnList.get(k).getLastCanYn());
		delvObj.setAllDelvCanYn(cnclRtnList.get(k).getAllDelvCanYn());
		// 2021.09.27 delvYn 최최 담기 배송비관련
		delvObj.setDelvYn(cnclRtnList.get(k).getDelvYn());
		cancelDelvRefundList.add(delvObj);
		
		// 3. 취소신청수량 정보를 취소 환불 금액 계산
		for (Order oneData : cnclRtnList) {
			orderObj	= new Order();
			
			// 3.1 주문기본정보 설정
			orderObj.setOrdQty(oneData.getOrdQty());
			orderObj.setCnclRtnQty(oneData.getCnclRtnQty());
			orderObj.setOrdReqChgQty(oneData.getOrdReqChgQty());
			orderObj.setOrdCanChgQty(oneData.getOrdCanChgQty());
			orderObj.setOptAddPrice	(oneData.getOptAddPrice());
			orderObj.setOrdAmt(oneData.getOrdAmt());
			orderObj.setOrdNo(oneData.getOrdNo());
			orderObj.setOrdDtlNo(oneData.getOrdDtlNo());
			orderObj.setGoodsCd(oneData.getGoodsCd());
			orderObj.setGoodsNm(oneData.getGoodsNm());
			
			// 3.2 주문취소수량으로 취소율 정보 설정
			int ordQty 			= oneData.getOrdQty();
			int ordCanChgQty 	= oneData.getOrdCanChgQty();
			int cnclRtnQty		= oneData.getCnclRtnQty();
			
			float _appQty		= (float)ordCanChgQty / (float)(ordQty - cnclRtnQty);
			
			// 3.3 주문취소금액 & 취소할인금액 계산
			int leftAmt = oneData.getOrdAmt() - oneData.getCnclRtnAmt();
			orderObj.setOrgCnclRtnAmt(oneData.getCnclRtnAmt());
			// 2021.05.24 취소금액 = 주문금액 * 취소수량/주문수량 변경 
			//orderObj.setCnclRtnAmt(((oneData.getCurrPrice() + oneData.getOptAddPrice()) * ordQty) * ordCanChgQty);
			orderObj.setCnclRtnAmt((int)(leftAmt							* _appQty));
			orderObj.setCpn1DcAmt((int)(oneData.getCpn1DcAmt() 				* _appQty));
			orderObj.setTmtb1DcAmt((int)(oneData.getTmtb1DcAmt() 			* _appQty));
			orderObj.setTmtb2DcAmt((int)(oneData.getTmtb2DcAmt() 			* _appQty));
			orderObj.setGoodsCpnDcAmt((int)(oneData.getGoodsCpnDcAmt() 		* _appQty));
			orderObj.setCartCpnDcAmt((int)(oneData.getCartCpnDcAmt() 		* _appQty));
			orderObj.setPntDcAmt((int)(oneData.getPntDcAmt() 				* _appQty));
			orderObj.setPrePntDcAmt((int)(oneData.getPrePntDcAmt() 			* _appQty));
			orderObj.setSavePntAmt((int)(oneData.getSavePntAmt() 			* _appQty));
			orderObj.setGfcdUseAmt((int)(oneData.getGfcdUseAmt() 			* _appQty));
			
			// 3.4 취소할인합계금액 적용
			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();
			
			// 3.5 주문취소환불금액 계산
			orderObj.setRealOrdAmt(orderObj.getCnclRtnAmt() - dcTotAmt);
			
			// 3.6 배송정보 관련 설정
			orderObj.setOrdDtlNo(oneData.getOrdDtlNo());
			orderObj.setGoodsTypeNm(oneData.getGoodsTypeNm());
			orderObj.setDelvFee(oneData.getDelvFee());
			orderObj.setDelvCpnDcAmt(oneData.getDelvCpnDcAmt());
			orderObj.setDelvGfcdUseAmt(oneData.getDelvGfcdUseAmt());
			orderObj.setSupplyCompCd(oneData.getSupplyCompCd());
			orderObj.setDelvFeeCd(oneData.getDelvFeeCd());
			orderObj.setMinOrdAmt(oneData.getMinOrdAmt());
			orderObj.setOrgDelvFee(oneData.getOrgDelvFee());
			orderObj.setRtnDelvFee(oneData.getRtnDelvFee());
			orderObj.setExcDelvFee(oneData.getExcDelvFee());
			
			// 3.7 주문상세상태체크
			orderObj.setOrdDtlStat(oneData.getOrdDtlStat());
			orderObj.setOrdDtlStatNm(oneData.getOrdDtlStatNm());
			orderObj.setLastCanYn(oneData.getLastCanYn());
			orderObj.setAllDelvCanYn(oneData.getAllDelvCanYn());
			orderObj.setDelvYn(oneData.getDelvYn());
			
			cancelOrderRefundList.add(orderObj);
			
			// 3.8 배송비정책 조건으로 추가 배송비 금액 설정
			if (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).setOrgCnclRtnAmt(cancelDelvRefundList.get(k).getOrgCnclRtnAmt() + orderObj.getOrgCnclRtnAmt());
				cancelDelvRefundList.get(k).setRealOrdAmt(cancelDelvRefundList.get(k).getRealOrdAmt() + orderObj.getRealOrdAmt());
				
				// 2021.01.25 TB_REFUND 정보 등록을 위해서 분리 작업
				cancelDelvRefundList.get(k).setPntDcAmt(cancelDelvRefundList.get(k).getPntDcAmt() + orderObj.getPntDcAmt());
				cancelDelvRefundList.get(k).setPrePntDcAmt(cancelDelvRefundList.get(k).getPrePntDcAmt() + orderObj.getPrePntDcAmt());
				cancelDelvRefundList.get(k).setCpn1DcAmt(cancelDelvRefundList.get(k).getCpn1DcAmt() + orderObj.getCpn1DcAmt());
				cancelDelvRefundList.get(k).setGoodsCpnDcAmt(cancelDelvRefundList.get(k).getGoodsCpnDcAmt() + orderObj.getGoodsCpnDcAmt());
				cancelDelvRefundList.get(k).setCartCpnDcAmt(cancelDelvRefundList.get(k).getCartCpnDcAmt() + orderObj.getCartCpnDcAmt());
				cancelDelvRefundList.get(k).setTmtb1DcAmt(cancelDelvRefundList.get(k).getTmtb1DcAmt() + orderObj.getTmtb1DcAmt());
				cancelDelvRefundList.get(k).setTmtb2DcAmt(cancelDelvRefundList.get(k).getTmtb2DcAmt() + orderObj.getTmtb2DcAmt());
				cancelDelvRefundList.get(k).setGfcdAmt(cancelDelvRefundList.get(k).getGfcdAmt() + orderObj.getGfcdUseAmt());
				
				if ("Y".equals(orderObj.getDelvYn())) {
					cancelDelvRefundList.get(k).setDelvYn(orderObj.getDelvYn());
				}

				if ("N".equals(orderObj.getLastCanYn())) {
					cancelDelvRefundList.get(k).setLastCanYn("N");
				}

				if ("N".equals(orderObj.getAllDelvCanYn())) {
					cancelDelvRefundList.get(k).setAllDelvCanYn("N");
				}
			} else {
				k++;
				
				delvObj	= new Order();
				
				// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
				delvObj.setOrdAmt(orderObj.getOrdAmt());
				delvObj.setCnclRtnAmt(orderObj.getCnclRtnAmt());
				delvObj.setOrgCnclRtnAmt(orderObj.getOrgCnclRtnAmt());
				delvObj.setRealOrdAmt(orderObj.getRealOrdAmt());
				
				// 2021.01.25 TB_REFUND 정보 등록을 위해서 분리 작업
				delvObj.setPntDcAmt(orderObj.getPntDcAmt());
				delvObj.setPrePntDcAmt(orderObj.getPrePntDcAmt());
				delvObj.setCpn1DcAmt(orderObj.getCpn1DcAmt());
				delvObj.setGoodsCpnDcAmt(orderObj.getGoodsCpnDcAmt());
				delvObj.setCartCpnDcAmt(orderObj.getCartCpnDcAmt());
				delvObj.setDelvCpnDcAmt(orderObj.getDelvCpnDcAmt());
				delvObj.setTmtb1DcAmt(orderObj.getTmtb1DcAmt());
				delvObj.setTmtb2DcAmt(orderObj.getTmtb2DcAmt());
				delvObj.setGfcdAmt(orderObj.getGfcdUseAmt());
				delvObj.setDelvGfcdUseAmt(orderObj.getDelvGfcdUseAmt());
				
				delvObj.setDelvFee(orderObj.getDelvFee());
				delvObj.setMinOrdAmt(orderObj.getMinOrdAmt());
				delvObj.setOrgDelvFee(orderObj.getOrgDelvFee());
				delvObj.setRtnDelvFee(orderObj.getRtnDelvFee());
				delvObj.setExcDelvFee(orderObj.getExcDelvFee());
				delvObj.setSupplyCompCd(orderObj.getSupplyCompCd());
				delvObj.setDelvFeeCd(orderObj.getDelvFeeCd());
				delvObj.setLastCanYn(orderObj.getLastCanYn());
				delvObj.setAllDelvCanYn(orderObj.getAllDelvCanYn());
				delvObj.setDelvYn(orderObj.getDelvYn());
				
				cancelDelvRefundList.add(delvObj);
			}
			
			// 3.9 FRONT 화면에서 사용 하는 변수 값 설정 & 계산
			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();
			spanSavePntAmt		+= orderObj.getSavePntAmt();
		}
		
		// 4. 추가배송비 발생여부, 추가배송비, 배송비정책단위 전체취소 여부 체크
		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
			Order obj = cancelDelvRefundList.get(i);

			// 남은금액 : 주문금액 - 기취소 금액 - 취소요청금액
			int leftOrdAmt = obj.getOrdAmt() - obj.getOrgCnclRtnAmt() - obj.getCnclRtnAmt();

			// 취소금액이 있을때 처리
			if (obj.getCnclRtnAmt() > 0) {
				// 4.1 무료배송비용 > (주문금액 - 취소금액) : 배송비 허들 깨짐
				if (obj.getMinOrdAmt() > leftOrdAmt) {
					// 4.1.1 주문시 배송비가 존재하면 추가 배송비 없음
					if (obj.getDelvFee() > 0) {
						obj.setAddDelvFeeYn("N");
						obj.setAddDelvFee(0);
						
						// 전체취소시 배송비 환불
						if (leftOrdAmt == 0) {
							if ("Y".equals(obj.getLastCanYn())) {
								sumDeliveryFee += obj.getDelvFee();				// 전체취소 시 배송금액도 같이 환불
								spanRefundDelvCpnAmt += obj.getDelvCpnDcAmt();	// 전체취소 시 배송비쿠폰 금액 제외하고 환불
								spanDelvGfcdUseAmt += obj.getDelvGfcdUseAmt();	// 전체취소 시 사용 배송비 상품권 금액 환불
							}
						}
					}
					// 4.1.2 무료배송비
					else {
						// 남은금액이 0 이면 전체취소/반품 이므로 추가배송비(허들깨짐) 발생 안함
						// * 2020.12.28 
						// * case : 배송정책 기준으로 1,2 상품 주문 후 1번 출고 후 1번반품 2번취소 할 경우 전체 취소 가 아니므로 배송비 부과 있을지 모르겠음 주문업체 단위로 배송되기 때문에 발생하지 않을것 같음
						if (leftOrdAmt == 0) {
							// 2021.03.29 delvFeeCd별 기존 출고 여부 확인
							// 미출고(취소)
							if("N".equals(obj.getDelvYn())) {
								// 취소는 남은금액이 0이면 취소는 추가배송비 여부가 없음.
								obj.setAddDelvFee(0);
								obj.setAddDelvFeeYn("N");
							}
							// 출고(반품)
							else {
								// 반품에 남은금액이 0이면 배송비 허들이 깨지지 않음
								obj.setAddDelvFeeYn("N");
								obj.setAddDelvFee(0);
							}
						}
						// 남은금액이 0보다 크면 부분취소/반품 이므로 추가배송비(허들깨짐) 발생 함
						else {
							obj.setAddDelvFeeYn("Y");
							obj.setAddDelvFee(obj.getOrgDelvFee());
						}
					}
				}
				// 4.2 무료배송비용 <= (주문금액 - 취소금액) : 배송비 허들 안깨짐
				else {
					obj.setAddDelvFeeYn("N");
					obj.setAddDelvFee(0);
				}
			}

			spanDelvCpnDcAmt		+= obj.getDelvCpnDcAmt();
			spanSumDeliveryFee		+= obj.getDelvFee();
			spanRtnSumDeliveryFee	+= obj.getRtnDelvFee();
			spanExcSumDeliveryFee	+= obj.getExcDelvFee();
			spanOrdAmt				+= obj.getOrdAmt();
			spanOrgCnclRtnAmt		+= obj.getOrgCnclRtnAmt();
			spanCnclRtnAmt			+= obj.getCnclRtnAmt();
			spanTotDeliveryFee  	+= obj.getAddDelvFee();

			cancelDelvRefundList.set(i, obj);
		}
		// 5. FRONT 화면에서 필요한 금액 설정
		// 2020.12.30 프론트에서 필요한 부분 작업 필요
		// 관리자 화면에서 사용하는 환불 칼럼 정보
		// 환불금액표시
		// 2021.05.18 배송비쿠폰 사용금액 제외 후 환불금액 계산 처리

		spanPayAmt 			= spanSumRealOrdAmt + spanSumDeliveryFee - spanDelvCpnDcAmt;
		spanTotPntDcAmt 	= spanPntDcAmt + spanPrePntDcAmt;
		spanCpnDcAmt 		= spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt + spanRefundDelvCpnAmt;
		spanTmtbDcAmt 		= spanTmtb1DcAmt + spanTmtb2DcAmt;
		spanRefundAmt 		= (spanRealCnclRtnAmt + sumDeliveryFee) - spanRefundDelvCpnAmt - spanTotDeliveryFee;

		// 2021.07.01 관리자 주문상품금액 기취소금액 포함 로직 추가
		spanOrdAmt			= spanOrdAmt - spanOrgCnclRtnAmt;

		mav.set("cnclRtnList"			, cnclRtnList);				//주문 취소 신청 목록
		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("spanDelvCpnDcAmt"		, spanDelvCpnDcAmt);		//배송비쿠폰
		mav.set("spanRefundDelvCpnAmt"	, spanRefundDelvCpnAmt);	//취소 배송비쿠폰 금액
		mav.set("spanTmtbDcAmt"			, spanTmtbDcAmt);			//취소 다다익선 금액
		mav.set("spanTmtb1DcAmt"		, spanTmtb1DcAmt);			//수량할인
		mav.set("spanTmtb2DcAmt"		, spanTmtb2DcAmt);			//금액할인
		mav.set("spanGfcdUseAmt"		, spanGfcdUseAmt);			//취소 고객 상품권 금액
		mav.set("spanDelvGfcdUseAmt"	, spanDelvGfcdUseAmt);		//취소 고객 배송비 상품권 금액
		mav.set("spanRealCnclRtnAmt"	, spanRealCnclRtnAmt);		//취소 상품 실결제 금액
		mav.set("sumDeliveryFee"		, sumDeliveryFee);			//배송비 합계 금액
		mav.set("spanTotDeliveryFee"	, spanTotDeliveryFee);		//추가 배송 금액
		mav.set("spanTotRtnDelvFee"		, spanRtnSumDeliveryFee);	//추가 반품 배송 금액
		mav.set("spanTotExcDelvFee"		, spanExcSumDeliveryFee);	//추가 교환 배송 금액
		mav.set("spanRefundAmt"			, spanRefundAmt);			//환불 금액 합계
		mav.set("spanSavePntAmt"		, spanSavePntAmt);			//적립예정 포인트 환수금액

		// 로그 생성
		log.info("spanPayAmt(총 결제 금액) ::: {}"						, spanSumRealOrdAmt);
		log.info("spanSumRealOrdAmt(상품 실결제 금액) ::: {}"				, spanSumRealOrdAmt);
		log.info("spanSumDeliveryFee(배송금액) ::: {}"					, spanSumDeliveryFee);
		log.info("spanOrdAmt(주문 상품 금액) ::: {}"						, spanOrdAmt);
		log.info("spanCnclRtnAmt(취소 상품 금액) ::: {}"					, spanCnclRtnAmt);
		log.info("spanTotPntDcAmt(취소 사용 포인트) ::: {}"				, spanTotPntDcAmt);
		log.info("spanPntDcAmt(고객 포인트) ::: {}"						, spanPntDcAmt);
		log.info("spanPrePntDcAmt(상품 선포인트) ::: {}"					, spanPrePntDcAmt);
		log.info("spanCpnDcAmt(취소 사용 쿠폰금액) ::: {}"					, spanCpnDcAmt);
		log.info("spanCpn1DcAmt(즉시할인쿠폰) ::: {}"						, spanCpn1DcAmt);
		log.info("spanGoodsCpnDcAmt(상품쿠폰) ::: {}"						, spanGoodsCpnDcAmt);
		log.info("spanCartCpnDcAmt(장바구니쿠폰) ::: {}"					, spanCartCpnDcAmt);
		log.info("spanDelvCpnDcAmt(배송비쿠폰) ::: {}"					, spanDelvCpnDcAmt);
		log.info("spanRefundDelvCpnAmt(취소 배송비쿠폰 금액) ::: {}"		, spanRefundDelvCpnAmt);
		log.info("spanTmtbDcAmt(취소 다다익선 금액) ::: {}"				, spanTmtbDcAmt);
		log.info("spanTmtb1DcAmt(수량할인) ::: {}"						, spanTmtb1DcAmt);
		log.info("spanTmtb2DcAmt(금액할인) ::: {}"						, spanTmtb2DcAmt);
		log.info("spanGfcdUseAmt(취소 고객 상품권 금액) ::: {}"				, spanGfcdUseAmt);
		log.info("spanDelvGfcdUseAmt(취소 고객 배송비 상품권 금액) ::: {}"	, spanDelvGfcdUseAmt);
		log.info("spanRealCnclRtnAmt(취소 상품 실결제 금액) ::: {}"			, spanRealCnclRtnAmt);
		log.info("sumDeliveryFee(배송비 합계 금액) ::: {}"					, sumDeliveryFee);
		log.info("spanTotDeliveryFee(추가 배송 금액) ::: {}"				, spanTotDeliveryFee);
		log.info("spanTotRtnDelvFee(추가 반품 배송 금액) ::: {}"			, spanRtnSumDeliveryFee);
		log.info("spanTotExcDelvFee(추가 교환 배송 금액) ::: {}"			, spanExcSumDeliveryFee);
		log.info("spanRefundAmt(취소 상품 실결제 금액) ::: {}"				, spanRefundAmt);
		log.info("spanRealCnclRtnAmt(환불 금액 합계) ::: {}"				, spanRealCnclRtnAmt);
		log.info("spanSavePntAmt(적립예정 포인트 환수금액) ::: {}"			, spanSavePntAmt);

		return mav;
	}
}
