tsit05 5 лет назад
Родитель
Сommit
9def58a651

+ 100 - 6
src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java

@@ -3,7 +3,7 @@ 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;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -19,11 +19,12 @@ import com.style24.persistence.domain.Withdraw;
 import com.style24.persistence.domain.WithdrawExc;
 import com.style24.persistence.domain.WmsWithdraw;
 import com.style24.core.support.env.TscConstants.OrderChangeStat;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.biz.service.TscOrderChangeService;
 import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.support.env.TscConstants.OrderChangeGb;
-
+import com.style24.core.support.util.CryptoUtils;
 
 import com.style24.core.support.message.TscMessageByLocale;
 
@@ -55,6 +56,9 @@ public class TsaWithdrawService {
 	@Autowired
 	private TscOrderRefundService coreOrderRefundService;
 	
+	@Autowired
+	private TscOrderChangeService orderChangeService;
+	
 	//@Autowired
 	//private TsaOrderDao orderDao;
 
@@ -178,9 +182,9 @@ public class TsaWithdrawService {
 		orderChange.setDelvFeeCd(item.getDelvFeeCd());
 		orderChange.setChgGb(item.getChgGb());
 		
-		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo(orderChange);
+		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo2(orderChange);
 		List<Order> returnReqList = (List<Order>)refundPreInfo.get("cnclReqList"); 
-		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(returnReqList);
+		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt2(returnReqList);
 		return result;
 	}
 	
@@ -281,7 +285,27 @@ public class TsaWithdrawService {
 				item.setOrdChgSq(withdrawExc.getOrdChgSq());
 				item.setOrdDtlNo(Integer.parseInt(listDtlNo[i]));
 				item.setUpdNo(userNo);
-				withdrawDao.updateChangeStat(withdrawExc);
+				withdrawDao.updateChangeStat(item);
+				
+				// 주문상세변경 이력 
+				OrderChange ordChg = new OrderChange();
+				ordChg.setRegNo(userNo);
+				ordChg.setUpdNo(userNo);
+				ordChg.setOrdChgSq(item.getOrdChgSq()); 
+				ordChg.setOrdDtlNo(item.getOrdDtlNo()); 
+				ordChg.setChgStat(item.getChgStat());
+				orderChangeDao.createOrderChangeDetailHst(ordChg);
+				
+			}
+		}  else if("S".equals(withdrawExc.getChangeYn())) {
+			String[] listDtlNo = withdrawExc.getOrdDtlNoList().split(",");
+			for(int i=0; i<listDtlNo.length; i++) {
+				WithdrawExc item = new WithdrawExc();
+				item.setChgStat(OrderChangeStat.WITHDRAW_GOODS_CHECK.value());   // G685_31 상품검수중
+				item.setOrdChgSq(withdrawExc.getOrdChgSq());
+				item.setOrdDtlNo(Integer.parseInt(listDtlNo[i]));
+				item.setUpdNo(userNo);
+				withdrawDao.updateChangeStat(item);
 				
 				// 주문상세변경 이력 
 				OrderChange ordChg = new OrderChange();
@@ -296,6 +320,7 @@ public class TsaWithdrawService {
 		}
 		
 		// TB_ORDER_CHANGE 변경 
+		withdrawExc.setUpdNo(userNo);
 		withdrawDao.updateChangeReason(withdrawExc);
 	}
 
@@ -591,7 +616,76 @@ public class TsaWithdrawService {
 	 * @since 2020. 11. 16
 	 */
 	@Transactional("shopTxnManager")
-	public void refundDetailConfirm(Withdraw params) {
+	public void refundDetailConfirm(GagaMap params) {
+		
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		OrderChange change = new OrderChange();
+		
+		change.setOrdNo(params.getInt("ordNo"));
+		change.setCustNo(params.getInt("custNo"));
+		change.setOrderNm(params.getString("ordNm"));
+		change.setPgGb(params.getString("pgGb"));
+		change.setPayMeans(params.getString("payMeans"));
+		change.setBankCd(params.getString("bankCd"));
+		change.setAccountNm(params.getString("accountNm"));
+		change.setAccountNo(CryptoUtils.decryptAES(params.getString("accountNo")));
+		//change.getOrdDtlNoList().add(params.getOrdDtlNo());
+		//change.getCnclRtnReqQtyList().add(params.getCnclRtnQty());
+		change.setChgReason(params.getString("chgReason"));
+		change.setChgReasonNm(params.getString("chgReasonNm"));
+		change.setBatchYn("N");
+		change.setDelvAddrSq(params.getInt("delvAddrSq"));
+		change.setAddDeliveryFeeYn(params.getString("addDeliveryFeeYn"));
+		change.setAddDeliveryFee(params.getInt("addDeliveryFee"));
+		change.setRegNo(userNo);
+		change.setUpdNo(userNo);
+		change.setUserNo(userNo);
+		change.setOrdChgSq(params.getInt("ordChgSq"));
+		change.setMallGb(params.getString("mallGb"));
+		change.setSpanRefundAmt(params.getInt("spanRefundAmt"));
+		change.setPgStat(params.getString("pgStat"));
+		
+		
+		
+		
+		String allCanYn = params.getString("allCanYn");
+		
+		if ("Y".equals(allCanYn)) {
+			
+			orderChangeService.allRefund(change);
+		} else {
+			OrderChange orderChange= new OrderChange();
+			orderChange.setOrdChgSq(params.getInt("ordChgSq"));
+			orderChange.setUserNo(params.getInt("custNo"));
+			
+	
+			GagaMap info = orderChangeService.refundConfirmPreInfo(orderChange);
+			
+			info.set("chgReasonNm", params.getString("chgReasonNm"));
+			info.set("chgReason", params.getString("chgReason"));
+			info.set("accountNm", params.getString("accountNm"));
+			info.set("accountNo", CryptoUtils.decryptAES(params.getString("accountNo")));
+			info.set("bankCd", params.getString("bankCd"));
+			info.set("custNo", params.getInt("custNo"));
+			info.set("ordNm", params.getString("ordNm"));
+			info.set("delvAddrSq", params.getInt("delvAddrSq"));
+			info.set("delvExpnYn", params.getString("delvExpnYn"));
+			info.set("addDeliveryFee", params.getInt("addDeliveryFee"));
+			info.set("addDeliveryFeeYn", params.getString("addDeliveryFeeYn"));
+			info.set("mallGb", params.getString("mallGb"));
+			info.set("ordNo", params.getInt("ordNo"));
+			info.set("ordChgSq", params.getInt("ordChgSq"));
+			info.set("mallGb", params.getString("mallGb"));
+			info.set("pgStat", params.getString("pgStat"));
+			
+			
+			
+			orderChangeService.partialRefund(info, userNo);
+		}
+			
+			
+			
+		
 //		// 기본값 설정
 //		String userId = TsaSession.getInfo().getUserId();
 //		int custNo = params.getCustNo();		// 회원번호

+ 101 - 69
src/main/java/com/style24/admin/biz/web/TsaWithdrawController.java

@@ -28,6 +28,7 @@ import com.style24.persistence.domain.Pos;
 import com.style24.persistence.domain.Withdraw;
 import com.style24.persistence.domain.WithdrawExc;
 import com.style24.persistence.domain.WmsWithdraw;
+import com.style24.persistence.domain.OrderChange;
 import com.style24.admin.biz.service.TsaDeliveryService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.biz.service.TsaWithdrawService;
@@ -35,6 +36,8 @@ import com.style24.admin.biz.service.TsaWmsWithdrawService;
 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.core.biz.service.TscOrderChangeService;
+
 
 /**
  * 회수관리 Controller
@@ -61,6 +64,11 @@ public class TsaWithdrawController extends TsaBaseController {
 	
 	@Autowired
 	private TsaWmsWithdrawService wmsWithdrawService;
+	
+	@Autowired
+	private TscOrderChangeService orderChangeService;	
+	
+	
 
 	
 	/**
@@ -108,6 +116,95 @@ public class TsaWithdrawController extends TsaBaseController {
 		return result;
 	}
 	
+	/**
+	 * 환불관리 상세 화면
+	 * 
+	 * @param ordNo
+	 * @return 회수 상세 화면
+	 * @throws Exception
+	 * @author moon
+	 * @since 2020. 11. 16
+	 */
+	@GetMapping("/refund/detail/form")
+	@ResponseBody
+	public ModelAndView refundDetailForm(Withdraw withdraw) {
+		ModelAndView mav = new ModelAndView();
+		log.info("withdraw {}"+withdraw.toString());
+		mav.addObject("ordChgSq", withdraw.getOrdChgSq());
+		mav.addObject("ordNo", withdraw.getOrdNo());
+		
+		
+		
+		
+		// 남은 상품 정보
+		mav.addObject("remainGoodsInfo", withdraw);//withdrawService.getRemainGoodsInfo(withdraw));
+
+		// 남은 상품 목록
+		mav.addObject("remainGoodsList", withdraw); //withdrawService.getWithdrawRemainOrderDetailList(withdraw));
+
+		// 장바구니 쿠폰 정보
+		mav.addObject("couponInfo", withdraw); // withdrawService.getCouponInfo(withdraw));
+
+		// 주문전체 금액
+		mav.addObject("orderDetailSumAmt", withdraw); //withdrawService.getOrderDetailSumAmt(withdraw.getOrdNo().toString()));
+
+		//
+		mav.addObject("sumQty", withdraw); // withdrawService.getSumChgQtyWdQty(withdraw));
+
+		// TODO: 아래 확인후 구현 (.. ) ( ..)
+		//mav.addObject("ordChgCnt", deliveryService.getOrdChgCnt(withdraw.getOrdNo()));
+		
+		
+		
+		
+		
+		
+		OrderChange orderChange= new OrderChange();
+		orderChange.setOrdChgSq(withdraw.getOrdChgSq());
+		orderChange.setUserNo(withdraw.getUserNo());
+		//orderChangeService.refundConfirmPreInfo(orderChange);
+		
+		mav.addObject("refundConfirmPreInfo", orderChangeService.refundConfirmPreInfo(orderChange));
+		
+		mav.setViewName("withdraw/RefundDetailForm");
+		return mav;
+	}
+
+	/**
+	 * 환불관리상세 정보
+	 * 
+	 * @param
+	 * @return
+	 * @throws Exception
+	 * @author moon
+	 * @since 2020. 11. 16
+	 */
+	@PostMapping("/detail/list")
+	@ResponseBody
+	public Collection<Withdraw> getRefundDetailList(@RequestBody Withdraw withdraw) {
+		Collection<Withdraw> dataList = withdrawService.getRefundDetailList(withdraw);
+		return dataList;
+	}
+
+	/**
+	 * 환불관리상세 - 회수처리
+	 * 
+	 * @param withdraw
+	 * @return GagaResponse
+	 * @author moon
+	 * @since 2021. 05. 31
+	 */
+	@PostMapping("/detail/confirm")
+	@ResponseBody
+	public GagaResponse refundDetailConfirm(@RequestBody GagaMap orderChange) {
+		
+		log.info("orderChange {}"+orderChange);
+		
+		
+		
+		withdrawService.refundDetailConfirm(orderChange);
+		return super.ok(message.getMessage("SUCC_0004"));
+	}	
 	
 	/**
 	 * 회수예외관리 화면 
@@ -122,7 +219,7 @@ public class TsaWithdrawController extends TsaBaseController {
 	@ResponseBody
 	public ModelAndView withdrawExceptionListForm() throws Exception {
 		ModelAndView mav = new ModelAndView();
-		
+		mav.addObject("reasonCodeList", rendererService.getAvailCommonCodeList("G325"));
 		mav.setViewName("/withdraw/WithdrawExceptionListForm");
 
 		return mav;
@@ -247,7 +344,6 @@ public class TsaWithdrawController extends TsaBaseController {
 	@ResponseBody
 	public ModelAndView wmsWithdrawListForm() throws Exception {
 		ModelAndView mav = new ModelAndView();
-		
 		mav.setViewName("/withdraw/WmsWithdrawListForm");
 
 		return mav;
@@ -299,7 +395,9 @@ public class TsaWithdrawController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		mav.addObject("wdShipStateList", rendererService.getAvailCommonCodeList("G320"));
-
+		mav.addObject("chgStatList", rendererService.getAvailCommonCodeList("G685"));
+		
+		
 		mav.setViewName("/withdraw/WithdrawDirectiveListForm");
 
 		return mav;
@@ -573,73 +671,7 @@ public class TsaWithdrawController extends TsaBaseController {
 //		return super.ok(message.getMessage("SUCC_0002"));
 //	}
 
-	/**
-	 * 환불관리 상세 화면
-	 * 
-	 * @param ordNo
-	 * @return 회수 상세 화면
-	 * @throws Exception
-	 * @author moon
-	 * @since 2020. 11. 16
-	 */
-	@GetMapping("/refund/detail/form")
-	@ResponseBody
-	public ModelAndView refundDetailForm(Withdraw withdraw) {
-		ModelAndView mav = new ModelAndView();
-		log.info("withdraw {}"+withdraw.toString());
-		mav.addObject("ordChgSq", withdraw.getOrdChgSq());
-		
-		// 남은 상품 정보
-		mav.addObject("remainGoodsInfo", withdraw);//withdrawService.getRemainGoodsInfo(withdraw));
-
-		// 남은 상품 목록
-		mav.addObject("remainGoodsList", withdraw); //withdrawService.getWithdrawRemainOrderDetailList(withdraw));
-
-		// 장바구니 쿠폰 정보
-		mav.addObject("couponInfo", withdraw); // withdrawService.getCouponInfo(withdraw));
-
-		// 주문전체 금액
-		mav.addObject("orderDetailSumAmt", withdraw); //withdrawService.getOrderDetailSumAmt(withdraw.getOrdNo().toString()));
-
-		//
-		mav.addObject("sumQty", withdraw); // withdrawService.getSumChgQtyWdQty(withdraw));
-
-		// TODO: 아래 확인후 구현 (.. ) ( ..)
-		//mav.addObject("ordChgCnt", deliveryService.getOrdChgCnt(withdraw.getOrdNo()));
-		mav.setViewName("withdraw/RefundDetailForm");
-		return mav;
-	}
-
-	/**
-	 * 환불관리상세 정보
-	 * 
-	 * @param
-	 * @return
-	 * @throws Exception
-	 * @author moon
-	 * @since 2020. 11. 16
-	 */
-	@PostMapping("/detail/list")
-	@ResponseBody
-	public Collection<Withdraw> getRefundDetailList(@RequestBody Withdraw withdraw) {
-		Collection<Withdraw> dataList = withdrawService.getRefundDetailList(withdraw);
-		return dataList;
-	}
 
-	/**
-	 * 환불관리상세 - 회수처리
-	 * 
-	 * @param withdraw
-	 * @return GagaResponse
-	 * @author moon
-	 * @since 2020. 11. 16
-	 */
-	@PostMapping("/detail/confirm")
-	@ResponseBody
-	public GagaResponse refundDetailConfirm(@RequestBody Withdraw withdraw) {
-		withdrawService.refundDetailConfirm(withdraw);
-		return super.ok(message.getMessage("SUCC_0004"));
-	}
 
 	/**
 	 * 회수송장전송목록 화면

+ 25 - 9
src/main/java/com/style24/persistence/domain/Withdraw.java

@@ -70,24 +70,40 @@ public class Withdraw extends TscBaseDomain {
 	private String ordEmail;                            // 주문자이메일	
 	private String wdRegDt;
 	private String rcRegDt;
-	
+	private String wdStat;  		// 환불컨펌상태 
+	private String chgReasonText; 	// 귀책사유 
+	private String wdGbNm; 			// 회수구분 
+	private String mallGb;					// 몰구분(G011_10:자사몰, G011_20:외부몰)
+	private String wdStatYn;
+	private String addDeliveryFeeYn;
+	private String pgTid;					// PG거래 ID
+	private String payMeans;				// 결제수단(공통코드G014)
+	private String pgGb;					// PG구분
+	private String delvExpnYn;		// 확정후 품절,불량 여부
+	private String accountNm;
+	private String accountNo;
+	private String bankCd;	
 	
 	private Integer ordNo;
 	private Integer ordDtlNo; 
 	private Integer ordChgSq;
+	private Integer userNo;
+	private Integer custNo;
+	private Integer delvAddrSq;
 	
 	private int chgQty;
 	private int wdQty;
+	private int encloseFee;  	// 동봉비 
+	private int codFee;      	// 착불비
+	private int addPayCost; 	// 추가결제비용 
+	private int totalOrdQty;    // 주문총수량 
+	private int addDeliveryFee;
 	
 	private String stDate;					// 조회 시작 기간
 	private String edDate;					// 조회 종료 기간
 	private String searchType;
 	private String withdrawType;
-	
-	
-	
-								 
-	
+
 	
 	
 	/*
@@ -245,8 +261,8 @@ public class Withdraw extends TscBaseDomain {
 	private Integer expirePntAmt;			// 소멸포인트 금액
 	private String delvPayGb;				// 배송결제구분
 	private String payStat;					// 결제상태
-	private String pgGb;					// PG구분
-	private String pgTid;					// PG거래 ID
+	
+	
 	private String pgCnclTid;				// PG취소거래ID
 	private String pgTradeNo;				// PG
 	private String pgShopId;				// PG가맹정ID
@@ -283,7 +299,7 @@ public class Withdraw extends TscBaseDomain {
 	private String occurDt;					// 발생일시
 	private String usacGb;					// 정산구분(공통코드G019)
 	private String prtnGb;					// 환입구분(공통코드G020). 정산구분이 "20:환입"일 때 사용
-	private String payMeans;				// 결제수단(공통코드G014)
+	
 	private Integer usacQty;				// 정산수량
 	private String orgUsacGb;
 	private String planSq;					// 기획전일련번호

+ 8 - 0
src/main/java/com/style24/persistence/domain/WithdrawExc.java

@@ -61,12 +61,19 @@ public class WithdrawExc extends TscBaseDomain {
 	private String delvFeeCd;
 	private String changeYn;
 	private String ordDtlNoList;
+	private String banReq;
+	private String chgReq;
+	
 	
 	private int chargeAmount;          // 요금총액
 	private int exceptionQty;          // 수량
 	private int rnum;
 	private int rowspanCnt;            // rowspan 갯수 
 	private int rowspanRank;           // rowspan 순위 
+	private int rowspanDtCnt;            // 
+	private int rowspanDtRank;         //  
+	
+	
 	private int qty;
 	private int seq;
 	private int rfPntAmt;	//환원 포인트
@@ -95,6 +102,7 @@ public class WithdrawExc extends TscBaseDomain {
 	private Integer ordNo;
 	private Integer ordDtlNo;
 	private Integer custNo;
+	private Integer userNo;
 	
 	
 	// 검색

+ 7 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml

@@ -329,7 +329,7 @@
 		AND   A.REG_DT >= STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s')    
 		    </if>
 		    <if test='edDate != null and edDate != ""'>
-		AND   A.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','') +1, '%Y%m%d%H%i%s') 
+		AND   A.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-',''), '%Y%m%d%H%i%s'), INTERVAL 1 DAY) 
 		    </if>
 		</if>
 		<if test='termGb == "delvDt"'>
@@ -337,7 +337,7 @@
 		AND   B.DELV_EDDT >= STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s')
 		    </if>
 		    <if test='edDate != null and edDate != ""'>
-		AND   B.DELV_EDDT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1, '%Y%m%d%H%i%s')
+		AND   B.DELV_EDDT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-',''), '%Y%m%d%H%i%s'), INTERVAL 1 DAY) 
 		    </if>
 		</if>
 		<if test='termGb == "delvStDt"'>
@@ -345,7 +345,7 @@
 		AND   B.DELV_STDT >= STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s')
 		    </if>
 		    <if test='edDate != null and edDate != ""'>
-		AND   B.DELV_STDT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s') 
+		AND   B.DELV_STDT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','') , '%Y%m%d%H%i%s'), INTERVAL 1 DAY)  
 		    </if>
 		</if>
 		AND B.ORD_DTL_STAT != 'G013_00'
@@ -571,7 +571,7 @@
 						AND    O.REG_DT <![CDATA[>=]]> STR_TO_DATE(REPLACE(#{stDate},'-','') , '%Y%m%d%H%i%s')
 						</if>
 						<if test="edDate != null and edDate != ''">
-						AND    O.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s') 
+						AND    O.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','') , '%Y%m%d%H%i%s'), INTERVAL 1 DAY) 
 						</if>
 						<if test="siteCd != null and siteCd != ''">
 						AND    O.SITE_CD = #{siteCd}
@@ -609,7 +609,7 @@
 						AND    OC.REG_DT <![CDATA[>=]]> STR_TO_DATE(REPLACE(#{stDate},'-','') , '%Y%m%d%H%i%s')
 						</if>
 						<if test="edDate != null and edDate != ''">
-						AND    OC.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s')
+						AND    OC.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','') , '%Y%m%d%H%i%s'), INTERVAL 1 DAY)
 						</if>
 						AND    OCD.CHG_STAT IN ('G685_30','G685_31') -- 회수요청 상품검수중
 						<if test="siteCd != null and siteCd != ''">
@@ -660,7 +660,7 @@
 						AND    O.REG_DT <![CDATA[>=]]> STR_TO_DATE(REPLACE(#{stDate},'-','') , '%Y%m%d%H%i%s')
 						</if>
 						<if test="edDate != null and edDate != ''">
-						AND    O.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s') 
+						AND    O.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','') , '%Y%m%d%H%i%s'), INTERVAL 1 DAY) 
 						</if>
 						<if test="siteCd != null and siteCd != ''">
 						AND    O.SITE_CD = #{siteCd}
@@ -709,7 +709,7 @@
 						AND    OC.REG_DT <![CDATA[>=]]> STR_TO_DATE(REPLACE(#{stDate},'-','') , '%Y%m%d%H%i%s')
 						</if>
 						<if test="edDate != null and edDate != ''">
-						AND    OC.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s')
+						AND    OC.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','') , '%Y%m%d%H%i%s'), INTERVAL 1 DAY)
 						</if>
 						AND    OCD.CHG_STAT IN ('G685_30','G685_31') -- 회수요청 상품검수중
 						<if test="siteCd != null and siteCd != ''">

+ 96 - 14
src/main/java/com/style24/persistence/mybatis/shop/TsaWithdraw.xml

@@ -72,6 +72,7 @@
 					, D.CHG_REASON    -- 요청사유 
 					, DATE_FORMAT(B.REG_DT, '%Y-%m-%d') AS WD_REG_DT        -- 회수등록일
 					, DATE_FORMAT(D.REG_DT, '%Y-%m-%d') AS RC_REG_DT        -- 반품신청일
+					, I.CUST_NO AS USER_NO 
 				  FROM TB_WITHDRAW A
 				  JOIN TB_WITHDRAW_DETAIL B ON A.WD_INVOICE_NO  = B.WD_INVOICE_NO AND A.ORD_CHG_SQ = B.ORD_CHG_SQ 
 				  JOIN TB_ORDER_CHANGE_DETAIL C ON B.ORD_CHG_SQ = C.ORD_CHG_SQ AND B.ORD_DTL_NO = C.ORD_DTL_NO AND C.DEL_YN ='N'
@@ -88,13 +89,13 @@
 	<sql id="getRefundListCondition_sql">
 		<if test="stDate != null and stDate != '' and edDate != null and edDate != ''">
 			<if test="searchType == 'withdrawDt'"> -- 회수등록일자
-			AND    B.REG_DT BETWEEN STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') AND STR_TO_DATE(REPLACE(#{edDate},'-','') +1, '%Y%m%d%H%i%s')
+			AND    B.REG_DT BETWEEN STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') AND DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-',''), '%Y%m%d%H%i%s'), INTERVAL 1 DAY)
 			</if>
 			<if test="searchType == 'returnDt'">   -- 반품접수일자
-			AND    D.REG_DT BETWEEN STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') AND STR_TO_DATE(REPLACE(#{edDate},'-','') +1, '%Y%m%d%H%i%s')
+			AND    D.REG_DT BETWEEN STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') AND DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-',''), '%Y%m%d%H%i%s'), INTERVAL 1 DAY)
 			</if>
 			<if test="searchType == 'confirmDt'">  -- 반품완료일자
-			AND    D.WD_EDDT BETWEEN STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') AND STR_TO_DATE(REPLACE(#{edDate},'-','') +1, '%Y%m%d%H%i%s')
+			AND    D.WD_EDDT BETWEEN STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') AND DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-',''), '%Y%m%d%H%i%s'), INTERVAL 1 DAY)
 			</if>
 		</if>
 		<if test="ordNo != null and ordNo != ''">
@@ -133,6 +134,7 @@
 					  A.RECALL_STAT   -- 반품대기처리상태
 					, A.STATUS_CD     -- 처리상태
 					, A.RECALL_EXCEPTION_NO -- 반품예외처리번호 
+					, B.ORDER_DTL_NO
 				  FROM TB_ORDER_RECALL_EXCEPTION A 
 				  JOIN TB_ORDER_RECALL_EXCEPTION_ITEM B ON A.RECALL_EXCEPTION_NO = B.RECALL_EXCEPTION_NO
 				  WHERE B.REASON_CD NOT IN('확정 전 품절(재고없음)','확정 전 불량')
@@ -149,10 +151,24 @@
 					AND   A.DATE_CREATED <![CDATA[>= ]]> STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') 
 					</if>
 					<if test='edDate != null and edDate != ""'>
-					AND   A.DATE_CREATED <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','') + 1 , '%Y%m%d%H%i%s') 
+					AND   A.DATE_CREATED <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','') + 1 , '%Y%m%d%H%i%s'), INTERVAL 1 DAY) 
 					</if>
-			) A
-
+					<if test='reasonCode != null and reasonCode != ""'>
+					AND B.REASON_CODE = #{reasonCode}
+					</if>
+					<if test='userNameCreated != null and userNameCreated != ""'>
+					AND A.USER_NAME_CREATED = #{userNameCreated}
+					</if>					
+				) A
+				LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL  CD ON A.ORDER_DTL_NO = CD.ORD_DTL_NO AND CD.DEL_YN ='N'
+				LEFT OUTER JOIN TB_ORDER_CHANGE         OC ON CD.ORD_CHG_SQ = OC.ORD_CHG_SQ 
+				WHERE 1=1
+				<if test='chgGb != null and chgGb != "" and chgGb !="G680"'>
+				AND OC.CHG_GB  = #{chgGb}
+				</if>
+				<if test='chgGb =="G680"'>
+				AND OC.CHG_GB  IS NULL
+				</if>
 	</select>
 		
 	<!-- 회수예외목록 -->
@@ -161,10 +177,14 @@
 		SELECT Z.*
 			, ROW_NUMBER() OVER W AS ROWSPAN_CNT
 	        , ROW_NUMBER() OVER T AS ROWSPAN_RANK
+	        , ROW_NUMBER() OVER S AS ROWSPAN_DT_CNT 
+	        , ROW_NUMBER() OVER C AS ROWSPAN_DT_RANK
 	        , (SELECT E.EXTMALL_NM FROM TB_EXTMALL E WHERE E.EXTMALL_ID = Z.EXTMALL_ID) AS SITE_CD
 	        , CASE WHEN Z.CHG_GB = 'G680_30' THEN FN_GET_CODE_NM('G688', Z.CHG_REASON)
 			       WHEN Z.CHG_GB = 'G680_40' THEN FN_GET_CODE_NM('G689', Z.CHG_REASON)   ELSE '' END AS CHG_REASON_NM  
 			, IFNULL(FN_GET_CODE_NM('G680', Z.CHG_GB),'출고예외') AS CHG_GB_NM
+			, (SELECT CHG_STAT FROM TB_ORDER_CHANGE_DETAIL C WHERE C.ORD_DTL_NO = Z.ORDER_DTL_NO AND C.DEL_YN = 'N' AND C.ORD_CHG_SQ = Z.ORD_CHG_SQ) AS CHG_STAT
+			, (SELECT D.DELV_FEE_CD FROM TB_ORDER_DETAIL D WHERE D.ORD_DTL_NO = Z.ORDER_DTL_NO ) AS DELV_FEE_CD
 		FROM (
 		    SELECT A.*, ROW_NUMBER() OVER(ORDER BY  A.ORDER_NO, A.RECALL_EXCEPTION_NO, A.RECALL_EXCEPTION_ITEM_NO)  RNUM 
 		          , CASE WHEN A.MALL_GB = 'G011_20' THEN (SELECT MAX(BB.EXTMALL_ID) FROM TB_ORDER_DETAIL BB WHERE BB.ORD_NO = A.ORDER_NO) ELSE 'APISHOP_0054' END AS EXTMALL_ID
@@ -217,14 +237,28 @@
 							AND   A.DATE_CREATED <![CDATA[>= ]]> STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') 
 							</if>
 							<if test='edDate != null and edDate != ""'>
-							AND   A.DATE_CREATED <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+ 1, '%Y%m%d%H%i%s')
+							AND   A.DATE_CREATED <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','')+ 1, '%Y%m%d%H%i%s'), INTERVAL 1 DAY)
+							</if>
+							
+							<if test='reasonCode != null and reasonCode != ""'>
+							AND B.REASON_CODE = #{reasonCode}
+							</if>
+							<if test='userNameCreated != null and userNameCreated != ""'>
+							AND A.USER_NAME_CREATED = #{userNameCreated}
 							</if>
 				) A
 				LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL  CD ON A.ORDER_DTL_NO = CD.ORD_DTL_NO AND CD.DEL_YN ='N'
 				LEFT OUTER JOIN TB_ORDER_CHANGE         OC ON CD.ORD_CHG_SQ = OC.ORD_CHG_SQ 
+				WHERE 1=1
+				<if test='chgGb != null and chgGb != "" and chgGb !="G680"'>
+				AND OC.CHG_GB  = #{chgGb}
+				</if>
+				<if test='chgGb =="G680"'>
+				AND OC.CHG_GB  IS NULL
+				</if>
 				ORDER BY A.ORDER_NO, A.RECALL_EXCEPTION_NO, A.RECALL_EXCEPTION_ITEM_NO
-	<include refid="getListPagingCondition_sql"/>
-	      WINDOW W AS (PARTITION BY ORDER_NO ORDER BY ORDER_NO), T AS (PARTITION BY ORDER_NO ORDER BY ORDER_NO , RECALL_EXCEPTION_ITEM_NO DESC )
+	<include refid="getListPagingCondition_sql"/> 
+	      WINDOW W AS (PARTITION BY ORDER_NO ORDER BY ORDER_NO , RECALL_EXCEPTION_ITEM_NO desc), T AS (PARTITION BY ORDER_NO ORDER BY ORDER_NO , RECALL_EXCEPTION_ITEM_NO ), S AS (PARTITION BY ORDER_NO, ORDER_DTL_NO ORDER BY ORDER_NO ,  ORDER_DTL_NO, RECALL_EXCEPTION_ITEM_NO DESC ), C AS (PARTITION BY ORDER_NO, ORDER_DTL_NO ORDER BY ORDER_NO, ORDER_DTL_NO)
 	</select>
 
 
@@ -349,9 +383,6 @@
 		<if test="chgStat != null and chgStat != ''">
 			AND OCD.CHG_STAT = #{chgStat}
 		</if>
-		<if test="chgStat == null or chgStat == ''">
-			AND OCD.CHG_STAT IN('G685_20','G685_50','G685_30','G685_40','G685_60','G685_49','G685_69')
-		</if>
 		
 		<if test="wdGb != null and wdGb != ''">
 			AND OC.WD_GB = #{wdGb}
@@ -367,7 +398,7 @@
 		AND    OC.REG_DT <![CDATA[>=]]> STR_TO_DATE(REPLACE(#{stDate},'-','') , '%Y%m%d%H%i%s')
 		</if>
 		<if test="edDate != null and edDate != ''">
-		AND    OC.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s')
+		AND    OC.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','') , '%Y%m%d%H%i%s'), INTERVAL 1 DAY)
 		</if>
 		AND    G.SELF_GOODS_YN = 'Y' -- 자사상품만
 		AND    OCD.DEL_YN      = 'N'	
@@ -426,7 +457,7 @@
 		/* TsaWithdraw.updateChangeReason */
 		UPDATE TB_ORDER_CHANGE SET
 			  CHG_REASON   = #{chgReason} 
-			, ADD_PAY_COST = #{addPayCost}
+			, ADD_PAY_COST = CASE WHEN #{chgReason} IN ('G688_10','G689_10') THEN #{addPayCost} ELSE 0 END 
 			, CHG_MEMO     = #{chgMemo}
 			, UPD_NO       = #{updNo}
 			, UPD_DT       = NOW()
@@ -444,5 +475,56 @@
 		  AND ORD_DTL_NO = #{ordDtlNo}
   
 	</update>	
+	
+	<!-- 환불컨펌상세 목록  -->
+	<select id="getRefundDetailList" parameterType="Withdraw" resultType="Withdraw">
+		/* TsaWithdraw.getRefundDetailList */
+		SELECT
+				  CASE WHEN A.WD_GB ='W' THEN '회수요청' ELSE '직접배송' END AS WD_GB_NM -- 회수구분 
+				, B.CHG_STAT  
+				, CASE WHEN F.ARRIVAL_DT IS NULL THEN  DATE_FORMAT(F.REG_DT, '%Y-%m-%d') ELSE DATE_FORMAT(F.ARRIVAL_DT, '%Y-%m-%d') END AS ARRIVAL_DT-- 도착일자 
+				, FN_GET_CODE_NM('G688', A.CHG_REASON) AS CHG_REASON_NM   -- 최종요청사유 G688
+				, A.CHG_REASON
+				, CASE WHEN A.CHG_REASON = 'G688_10' THEN '고객' ELSE '회사' END AS CHG_REASON_TEXT -- 귀책사유 
+				, F.ENCLOSE_FEE  -- 동봉비 
+				, F.COD_FEE      -- 착불비
+				, IFNULL((SELECT P.PAY_AMT FROM TB_PAYMENT P WHERE P.ORD_CHG_SQ = A.ORD_CHG_SQ AND P.PAY_GB ='D' AND P.PAY_STAT = 'G016_30'),0) AS ADD_PAY_COST -- 추가결제비용 
+				, A.CHG_MEMO     -- 클레임메모 
+				, F.WD_MEMO      -- WMS회수메모 
+				, A.WD_GB  -- 회수구분(W:회수요청, D:직접배송) 
+				, E.ORD_NO -- 주문번호
+				, D.ORD_DTL_NO -- 주문상세번호 
+				, (SELECT S.GOODS_NM FROM TB_GOODS S WHERE S.GOODS_CD = C.GOODS_CD) AS GOODS_NM -- 상품명
+				, D.ITEM_CD  AS GOODS_CD -- 상품코드
+				, D.OPT_CD1 -- 옵션1 
+				, D.OPT_CD2 -- 옵션2
+				, B.CHG_QTY * D.ITEM_QTY AS CHG_QTY-- 신청수량 
+				, G.WD_QTY -- 회수수량 
+				, CASE WHEN B.COMPLETE_DT IS NULL THEN '환불대기' ELSE '환불완료' END AS WD_STAT  -- 환불컨펌상태 
+				, CASE WHEN B.COMPLETE_DT IS NULL THEN 'N' ELSE 'Y' END AS WD_STAT_YN   
+				, A.ORD_CHG_SQ -- 주분변경번호 환불컨펌  
+				, DATE_FORMAT(G.REG_DT, '%Y-%m-%d') AS REG_DT  -- 등록일 
+				, E.MALL_GB 
+				, (SELECT SUM((OD.ORD_QTY - OD.CNCL_RTN_QTY) * DI.ITEM_QTY)  FROM TB_ORDER_DETAIL OD JOIN TB_ORDER_DETAIL_ITEM DI ON OD.ORD_NO = DI.ORD_NO AND OD.ORD_DTL_NO = DI.ORD_DTL_NO WHERE OD.ORD_NO= E.ORD_NO AND OD.ORD_DTL_STAT NOT IN ('G013_00','G013_97','G013_98','G013_99')) AS  TOTAL_ORD_QTY -- 주문 총수량  
+				, CASE WHEN (SELECT COUNT(*) FROM TB_ORDER_RECALL_EXCEPTION_ITEM EI  WHERE EI.ORDER_DTL_NO = D.ORD_DTL_NO AND EI.REASON_CODE IN('09','11')) > 0 THEN 'Y' ELSE 'N' END AS DELV_EXPN_YN
+				, CA.ACCOUNT_NO 
+				, CA.ACCOUNT_NM 
+				, CA.BANK_CD 	
+				, E.ORD_NM 	
+				, C.DELV_ADDR_SQ 
+		  FROM TB_ORDER_CHANGE A
+		  JOIN TB_ORDER_CHANGE_DETAIL B ON B.ORD_CHG_SQ = A.ORD_CHG_SQ 
+		  JOIN TB_ORDER_DETAIL C ON C.ORD_DTL_NO = B.ORD_DTL_NO 
+		  JOIN TB_ORDER_DETAIL_ITEM D ON D.ORD_NO = C.ORD_NO AND D.ORD_DTL_NO = C.ORD_DTL_NO 
+		  JOIN TB_ORDER E             ON E.ORD_NO = C.ORD_NO 
+		  JOIN TB_WITHDRAW F ON F.ORD_CHG_SQ = A.ORD_CHG_SQ 
+		  LEFT OUTER JOIN TB_WITHDRAW_DETAIL G ON G.WD_INVOICE_NO = F.WD_INVOICE_NO AND G.ORD_CHG_SQ = F.ORD_CHG_SQ AND D.ITEM_CD = G.GOODS_CD AND D.OPT_CD1 = G.OPT_CD1  AND D.OPT_CD2 = G.OPT_CD2 
+		  LEFT OUTER JOIN TB_CUST_ACCOUNT CA ON CA.CUST_NO = E.CUST_NO 
+		 WHERE A.ORD_CHG_SQ  = #{ordChgSq}
+		   AND A.CHG_GB = 'G680_30' -- 반품요청
+		   AND B.CHG_STAT IN('G685_33','G685_60')		
+	</select>	
+	
+	
 		
 </mapper>

+ 319 - 267
src/main/webapp/WEB-INF/views/withdraw/RefundDetailForm.html

@@ -14,11 +14,11 @@
  * 1.0  2020.11.16   moon        최초 작성
  *******************************************************************************
  -->
-	<div class="modalPopup" data-width="1000" >
+	<div class="modalPopup" data-width="1000" data-height="900">
 		<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
-			<h2>회수 상세</h2>
+			<h2>환불컨펌 상세</h2>
 			<button type="button" class="close" onclick="uifnPopupClose('popupWithdrawDetail')"><i class="fa fa-times"></i></button>
 		</div>
 		<!-- //TITLE -->
@@ -40,8 +40,7 @@
 					<tr>
 						<th>회수구분</th>
 						<td>
-							<span id="returnType"></span>
-							<input type="hidden" name="chgGb"/>
+							<span id="wdGbNm"></span>
 						</td>
 						<th>도착일자</th>
 						<td>
@@ -52,92 +51,107 @@
 					<tr>
 						<th>최종요청사유</th>
 						<td>
-							<select name="chgReason"></select>
+							<span id="chgReasonNm"></span>
 						</td>
 						<th>귀책사유<i class="star"></i></th>
 						<td>
-							<span id="chgReasonText">
-							</span>
+							<span id="chgReasonText"></span>
 						</td>
 					</tr>
-					<tr id="refundArea0">
+					<tr>
 						<th>동봉비</th>
 						<td>
-							<input type="text" name="encloseFee" data-valid-type="integer" onchange="_encloseFee=$(this).val(); $('#withdrawDetailForm select[name=chgReason]').trigger('change');" class="w100 aR"/>원
+							<input type="text" name="encloseFee" data-valid-type="integer" onchange="fnChangeAmt()" class="w100 aR"/>원
 						</td>
 						<th>착불비</th>
 						<td>
-							<span id="codFee"></span>원
+							<input type="text" name="codFee" data-valid-type="integer" onChange="fnChangeAmt()" class="w100 aR"/>원
 						</td>
 					</tr>
 					<tr>
-						<th>회수메모</th>
-						<td>
-							<span id="shipMemo"></span>
+						<th>추가결제비</th>
+						<td colspan="3">
+							<input type="text" name="addPayCost" data-valid-type="integer" readonly="readonly" onChange="fnChangeAmt()" class="w100 aR"/>원
 						</td>
-						<th>회수사유</th>
-						<td><span id="changeReason"></span></td>
 					</tr>
 					<tr>
 						<th>클레임메모</th>
 						<td colspan="3">
-							<span id="claimMemo"></span>
+							<span id="chgMemo"></span>
+						</td>
+					</tr>
+					<tr>
+						<th>회수메모</th>
+						<td colspan="3">
+							<span id="wdMemo"></span>
 						</td>
 					</tr>
 				</table>
 				
-				<div id="divRefundInfo">
-					<h4>환불 예정 정보</h4>
+					<div id="divRefundInfo">
+					<h4>환불예정금액</h4>
 					<table class="frmStyle">
 						<colgroup>
-							<col style="width:10%;" />
-							<col style="width:15%;" />
-							<col style="width:10%;" />
-							<col style="width:15%;" />
-							<col style="width:10%;" />
-							<col style="width:15%;" />
-							<col style="width:10%;" />
-							<col/>
+							<col style="width:20%;"/>
+							<col style="width:30%;"/>
+							<col style="width:20%;"/>
+							<col style="width:30%;"/>
 						</colgroup>
-						<tr id="refundArea1">
-							<th>총 결제 금액</th>
-							<td colspan="3"><span id="totPayAmt"></span>원 (상품 실결제 금액 : <span id="totRealAmt"></span>원, 배송비 : <span id="delvFee"></span>원)</td>
-						</tr>
-						<tr id="refundArea2">
-							<th>취소 상품 금액</th>
-							<td><span id="cnclGoodsAmt"></span>원</td>
-							<th>취소 사용 포인트</th>
-							<td><span id="cnclPointAmt"></span>원</td>
-							<th>취소 사용 쿠폰금액</th>
-							<td><span id="cnclCouponAmt"></span>원</td>
-							<th>취소 상품 환불금액</th>
-							<td><span id="cnclGoodsRefundAmt"></span>원</td>
-						</tr>
-						<tr>
-							<th>추가 고객부담 배송비</th>
-							<td>
-								<span id="custShipAmt"></span>원
-							</td>
-							<td colspan="4">
-								(원주문배송비 : <span id="orgDelvFee"></span>원 + 회수배송비 : <span id="returnDelvFee"></span>원)<span id="delvFeeAddText"></span>
-							</td>
-						</tr>
-						<tr id="refundArea4">
-							<th>환불예정금액</th>
-							<td colspan="7"><span id="totRefundAmt"></span>원</td>
-						</tr>
-					</table>
+						<tbody>
+							<tr>
+								<th>총 결제 금액</th>
+								<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원, 배송비쿠폰할인금액: <span id="spanDelvCpnDcAmt"></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><span id="spanGfcdUseAmt"></span>원</td>
+								<th>추가 반품배송 금액</th>
+								<td><span id="spanTotRtnDelvFee"></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>					
 				</div>
 				
-				<div class="cardArea" style="height: 350px;">
-					<h4 style="width:98%;">
+				<div class="cardArea" style="height: 200px;">
+					<h4 style="width:85%;">
 						회수대상 상품 정보
+					</h4>	
 						<span class="btnRight"  id="pgBtn" >
-							<label><input type="checkbox" name="pgStats" value="N" th:if="${sessionInfo.roleCd == '0000'}">PG 전문 미전송</label>
+							<label ><input type="checkbox" name="pgStats" value="N" th:if="${sessionInfo.roleCd == 'G001_0000'}">&nbsp;&nbsp;PG 전문 미전송</label>
 						</span>
-					</h4>
-		
-					<div id="refundGridList" style="width: 100%; height: 260px; padding-top:10PX;" class="ag-theme-balham"></div>
+					<div id="refundGridList" style="width: 100%; height: 200px; padding-top:10PX;" class="ag-theme-balham"></div>
 				</div>
 			</form>
 		
@@ -148,77 +162,104 @@
 /*<![CDATA[*/
 
 	var ordChgSq = [[${ordChgSq}]];	// 주문변경번호
+	var ordNo    = [[${ordNo}]];	// 주문번호 
 	var remainGoodsInfo = [[${remainGoodsInfo}]]; // 주문 남은 상품 정보
 	var remainGoodsList = [[${remainGoodsList}]]; // 주문 남은 상품 목록
 	var couponInfo = [[${couponInfo}]]; // 쿠폰 정보
 	var orderDetailSumAmt = [[${orderDetailSumAmt}]];
 	var sumQty = [[${sumQty}]];
-	var ordChgCnt = [[${ordChgCnt}]];	//회수신청건수
+	var ordChgCnt = 0;	//회수신청건수
 	var chgGb = "반품";
 	
+	var toTalOrdQty = 0;	// 주문 총수량 
+	var ordInQty  	= 0;	// 반품 입고총수량 
+	var ordChgQty	= 0;	// 반품 신청총수량 
+	var delvExpnYn  = "";   // 출고예외(확정후 품절,불량)여부
+	var wdGb        = "";
+	var mallGb      = "";
+	var reFundInfo  = [[${refundConfirmPreInfo}]]; // 환불컨펌 정보 
+	
 	var columnDefsDetail = [
-		{headerName: "주문번호", 		field: "ordNo", 	width: 150, minWidth: 100, cellClass: 'text-center',
+		{headerName: "주문변경번호", 	field: "ordChgSq",	width: 100, minWidth: 100, cellClass: 'text-center'},
+		{headerName: "주문번호", 		field: "ordNo", 	width: 100, minWidth: 100, cellClass: 'text-center',
 			cellRenderer: function(params) {
 				return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
 			}
 		},
-		{headerName: "상품코드", 		field: "goodsCd", 	width: 150, minWidth: 100, cellClass: 'text-center',
+		{headerName: "상품명", 		field: "goodsNm",	width: 150, minWidth: 100},
+		{headerName: "상품코드", 		field: "goodsCd", 	width: 120, minWidth: 100, cellClass: 'text-center',
 			cellRenderer: function(params) {
 				return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenGoodsDetailPopup('U','" + params.value + "','');\">" + params.value + "</a>";
 			}
 		},
-		{headerName: "사이즈", 		field: "sizeCd", 	width: 70, minWidth: 100, cellClass: 'text-center'},
-		{headerName: "신청수량", 		field: "chgQty", 	width: 100, minWidth: 100, cellClass: 'text-center'},
-		{headerName: "회수수량", 		field: "wdQty", 	width: 100, minWidth: 100, cellClass: 'text-center'},
-		{headerName: "상품명", 		field: "goodsNm",	width: 150, minWidth: 100},
+		{headerName: "옵션1", 		field: "optCd1", 	width: 60, minWidth: 100, cellClass: 'text-center'},
+		{headerName: "옵션2", 		field: "optCd2", 	width: 60, minWidth: 100, cellClass: 'text-center'},
+		{headerName: "신청수량", 		field: "chgQty", 	width: 80, minWidth: 100, cellClass: 'text-center'},
+		{headerName: "회수수량", 		field: "wdQty", 	width: 80, minWidth: 100, cellClass: 'text-center'},
+		
 		{headerName: "회수처리상태", 	field: "wdStat",	width: 120, minWidth: 100, cellClass: 'text-center'},
-		{headerName: "회수처리", 		field: "ordDtlNo",	width: 120, minWidth: 100, cellClass: 'text-center'
+		{headerName: "회수처리", 		field: "chgStat",	width: 120, minWidth: 100, cellClass: 'text-center'
 			, cellRenderer : function(params) {
-				if (params.data.wdStat == 'N') {
+				if (params.data.wdStatYn == 'N') {
 					if (params.data.wdQty > 0) {
-						return "<a href=\"javascript:void(0);\" class=\"btn btn-base btn-sm\">회수컨펌</a>";
+						return "<a href=\"javascript:void(0);\" class=\"btn btn-base btn-sm\">환불컨펌</a>";
 					} else {
 						return "";
 					}
-				} else if (params.data.wdStat == 'Y') {
-					return "회수완료";
+				} else if (params.data.wdStatYn == 'Y') {
+					return "환불완료";
 				}
 			}
 		},
-		{headerName: "등록일", 		field: "regDt", 	width: 100, minWidth: 100, cellClass: 'text-center'},
-		{headerName: "등록자", 		field: "udtId", 	width: 100, minWidth: 100, cellClass: 'text-center'}
+		{headerName: "주문상세번호", 	field: "ordDtlNo", 	width: 100, minWidth: 100, cellClass: 'text-center'},
+		{headerName: "등록일", 		field: "regDt", 	width: 100, minWidth: 100, cellClass: 'text-center'}
+		
 	];
 	
 	// Get withDrawDetailGridOptions
 	var withdrawDetailGridOptions = gagaAgGrid.getGridOptions(columnDefsDetail);
 	withdrawDetailGridOptions.rowSelection = 'multiple';
 	
+	var isCustomer = true;
+	
+	
+	// ??  
 	withdrawDetailGridOptions.getRowStyle = function(params) {
-		if (params.data.wdStat == 'N') {
+		if (params.data.wdStatYn == 'N') {
 			if (params.data.wdQty < 1) {
 				return { 'background-color': '#FF0000'};
 			}
 		} 
 	}
 	
+	
+	/*************************************************************************
+	*  init
+	**************************************************************************/
 	$(document).ready(function() {
 		// Create a agGrid
 		gagaAgGrid.createGrid('refundGridList', withdrawDetailGridOptions);
 		
-		//fnDetailSearch(true);
-	});
+		setTimeout(fnRefundDetailSearch, 200);
+		
+	}); 
 	
+	
+	/*************************************************************************
+	*  회수 상세내역 조회
+	**************************************************************************/
 	var initFlag = '';
-	//회수 상세내역 조회
-	var fnDetailSearch = function(Init) {
-		initFlag = Init;
+	var fnRefundDetailSearch = function() {
+		//initFlag = Init;
 		var data = { 'ordChgSq' : ordChgSq };
 		var jsonData = JSON.stringify(data);
 		
 		gagajf.ajaxJsonSubmit('/withdraw/detail/list', jsonData, fnWithdrawDetailCallback);
 	}
 	
-	// 상세 정보 콜백 함수
+	/*************************************************************************
+	*  상세 정보 콜백 함수
+	**************************************************************************/	
 	var fnWithdrawDetailCallback = function(result) {
 		if (result.length < 1) {
 			mcxDialog.alert('회수데이터 오류입니다. 운영팀에 문의 해주세요! ');
@@ -227,32 +268,35 @@
 		
 		var confirmCnt = 0;
 		$(result).each(function(idx) {
-			if (result[idx].wdStat == 'Y') {
+			if (result[idx].wdStatYn == 'Y') {
 				confirmCnt++;
 			}
+			ordInQty  = ordInQty + result[idx].wdQty;
+			ordChgQty = ordChgQty + result[idx].chgQty;
 			
-			// 전체 회수 완료 일 때.
-			if (result.length == confirmCnt || result[idx].mallGb == '20') {
-				fnSearch();
-				setReadOnly(true);
-				$('#pgBtn').hide();
-				$('#divRefundInfo').hide();
-			}
 		});
 		
+		// 전체 회수 완료 일 때. 제휴몰일때 
+		if (result.length == confirmCnt || result[0].mallGb == 'G011_20') {
+			//fnSearch();
+			setReadOnly(true);
+			$('#pgBtn').hide();
+			//$('#divRefundInfo').hide();
+		}
+		
 		// 회수리스트 설정
 		withdrawDetailGridOptions.api.setRowData(result); 
 		
-		if (!initFlag) return;
+		//if (!initFlag) return;
 		
 		fnSetWithdrawInfo(result[0]);	// 회수정보 설정
-		fnSetCnclInfo(result);			// 취소 관련 설정
-
-		if(chgGb == "40") {
-			$('#divRefundInfo').hide();
-		}
+		
+		//fnSetCnclInfo(result);			// 취소 관련 설정
 	}
 	
+	/*************************************************************************
+	*  회수정보 설정
+	**************************************************************************/		
 	var _orgDelvFee = 0;	// 최초 배송비
 	var _delvFee = 0;		// 배송비
 	var _totRealOrdAmt = 0;	// 상품 실결제금액
@@ -264,209 +308,212 @@
 	var _totCnclCouponAmt = 0;		// 총 취소 사용 쿠폰
 	var _totCnclGoodsRefundAmt = 0;	// 총 취소 상품 환불금액
 	
-	// 회수정보 설정
 	var fnSetWithdrawInfo = function(data) {
-		// 전역변수 설정
-		_orgDelvFee = gagajf.convNull(data.orgDelvFee, 0); // 최초배송비
-		_delvFee = data.delvFee; // 부과배송비
-		if(_orgDelvFee > 0) _delvFee = _orgDelvFee;
-		
-		_totRealOrdAmt = data.totRealOrdAmt;
-		_payAmt = data.payAmt == null ? 0 : data.payAmt;
-		_encloseFee = data.encloseFee;
-		
-		// 회수 상세
-		$('#withdrawDetailForm input[name=chgGb]').val(data.chgGb);
-		chgGb = data.chgGb;
-		$("#returnType").text(data.returnType); 		//회수구분
-		$('#arriValDt').text(data.regDt);				//회수일시
-		$('#shipMemo').text(data.wdMemo);				//회수메모
-		$('#codFee').text(data.codFee);					//착불비
-		$('#withdrawDetailForm input[name=chgReason]').val(data.wdReqReason);
-		$('#withdrawDetailForm input[name=orgChgReason]').val(data.wdReqReason);
-		$('#withdrawDetailForm input[name=encloseFee]').val(_encloseFee);			//동봉비
-		$('#withdrawDetailForm input[name=orgEncloseFee]').val(_encloseFee);			//동봉비
-		
-		$('#delvFee').text(_orgDelvFee.addComma());	//배송비
-		$('#totRealAmt').text(_totRealOrdAmt.addComma());	//상품 실결제 금액
-		$('#totPayAmt').text(_payAmt.addComma());	//총 결제금액
-		$('#claimMemo').text(data.chgMemo);
-		cfnCreateCombo('/renderer/avail/commonCode/list/G688', $('#withdrawDetailForm select[name=chgReason]'), '', data.chgReason);
-	}
-	
-	// 취소 금액 설정
-	var fnSetCnclInfo = function(data) {
-		$(data).each(function(idx, item) {
-			var sumCpn = item.goodsCpnDcAmt + item.cartCpnDcAmt + item.plusCpnDcAmt;
-			var sumPoint = item.pntDcAmt + item.prePntDcAmt;
-			
-			_totCnclCouponAmt += Number((sumCpn / (item.ordQty - item.cnclRtnQty)) * item.wdQty);
-			_totCnclPointAmt  += Number((sumPoint / (item.ordQty - item.cnclRtnQty)) * item.wdQty);
-			_totCnclGoodsAmt  += item.currPrice * Number(item.wdQty);
+		
+		toTalOrdQty = data.totalOrdQty;
+		delvExpnYn  = data.delvExpnYn;
+		wdGb        = data.wdGb;
+		mallGb      = data.mallGb;
+		
+		reFundInfo.chgReasonNm = data.chgReasonNm;
+		reFundInfo.chgReason   = data.chgReason;
+		reFundInfo.accountNm   = data.accountNm;
+		reFundInfo.accountNo   = data.accountNo;
+		reFundInfo.bankCd      = data.bankCd;
+		reFundInfo.custNo      = data.custNo;
+		reFundInfo.ordNm       = data.ordNm;
+		reFundInfo.delvAddrSq  = data.reFundInfo;
+		reFundInfo.delvExpnYn  = data.delvExpnYn;
+		reFundInfo.mallGb           = mallGb;
+		reFundInfo.ordNo            = ordNo;
+		reFundInfo.ordChgSq         = ordChgSq;
+		
+		// 환불컨펌 상세
+		$("#wdGbNm").text(data.wdGbNm); // 회수구분 
+		$("#arriValDt").text(data.arrivalDt); // arriValDt 도착일
+		$("#chgReasonNm").text(data.chgReasonNm); // 최종요청사유 
+		$("#chgReasonText").text(data.chgReasonText); // 귀책사유 
+		$("#withdrawDetailForm input[name=encloseFee]").val(data.encloseFee); //  동봉비 
+		$("#withdrawDetailForm input[name=codFee]").val(data.codFee); //      착불비 
+		$("#withdrawDetailForm input[name=addPayCost]").val(data.addPayCost); //  추가 결제비 
+		$("#chgMemo").text(data.chgMemo); //  클레임메모 
+		$("#wdMemo").text(data.wdMemo); //    회수메모 
+		if(data.chgReason == "G688_10"){
+			isCustomer = true;	
+		} else {
+			isCustomer = false;
+		}
+		
+
+		// 환불예정금액 
+		$("#spanPayAmt").text(reFundInfo.spanPayAmt.addComma());					//총 결제 금액
+		$("#spanSumRealOrdAmt").text(reFundInfo.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+		$("#spanSumDeliveryFee").text(reFundInfo.spanSumDeliveryFee.addComma());	//배송금액
+		$("#spanDelvCpnDcAmt").text(reFundInfo.spanDelvCpnDcAmt.addComma());		//배송비쿠폰할인금액
+		
+		$("#spanOrdAmt").text(reFundInfo.spanOrdAmt.addComma());					//주문 상품 금액
+		$("#spanCnclRtnAmt").text(reFundInfo.spanCnclRtnAmt.addComma());			//취소 상품 금액
+		
+		$("#spanTotPntDcAmt").text(reFundInfo.spanTotPntDcAmt.addComma());			//취소 사용 포인트
+		$("#spanPntDcAmt").text(reFundInfo.spanPntDcAmt.addComma());				//고객 포인트
+		$("#spanPrePntDcAmt").text(reFundInfo.spanPrePntDcAmt.addComma());			//상품 선포인트
+		
+		$("#spanCpnDcAmt").text(reFundInfo.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+		$("#spanCpn1DcAmt").text(reFundInfo.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+		$("#spanGoodsCpnDcAmt").text(reFundInfo.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+		$("#spanCartCpnDcAmt").text(reFundInfo.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+		
+		$("#spanTmtbDcAmt").text(reFundInfo.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+		$("#spanTmtb1DcAmt").text(reFundInfo.spanTmtb1DcAmt.addComma());			//수량할인
+		$("#spanTmtb2DcAmt").text(reFundInfo.spanTmtb2DcAmt.addComma());			//금액할인
+		
+		$("#spanGfcdUseAmt").text(reFundInfo.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+		
+		$("#spanRealCnclRtnAmt").text(reFundInfo.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+		$("#spanTotDeliveryFee").text(reFundInfo.spanTotDeliveryFee.addComma());	//취소 환불 배송 금액
+		
+		$("#spanTotRtnDelvFee").text(reFundInfo.spanTotRtnDelvFee.addComma());		//반품 환불 배송 금액
+		$("#spanTotExcDelvFee").text(reFundInfo.spanTotExcDelvFee.addComma());		//교환 환불 배송 금액
+		
+		
+		
+		
+		
+		if(delvExpnYn == "Y"){
+			$('#withdrawDetailForm input[name=codFee]').attr('readonly', 'readonly');
+			$('#withdrawDetailForm input[name=encloseFee]').attr('readonly', 'readonly');
 			
-			if (item.ordQty != (item.wdQty + item.cnclRtnQty)) {
-				var tempCouponAmt = Number((sumCpn / (item.ordQty - item.cnclRtnQty)) * (item.ordQty - item.cnclRtnQty - item.wdQty));
-				var tempPointAmt = Number((sumPoint / (item.ordQty - item.cnclRtnQty)) * (item.ordQty - item.cnclRtnQty - item.wdQty));
-				var tempGoodsAmt = item.currPrice * (item.ordQty - item.cnclRtnQty - item.wdQty);
-				
-				var tempOrdAmt = Number(tempGoodsAmt - tempPointAmt - tempCouponAmt);
-				remainGoodsInfo.realOrdAmt += tempOrdAmt;
+		} else {
+			if(wdGb == "W"){
+				$('#withdrawDetailForm input[name=codFee]').attr('readonly', 'readonly');
+			} else {
+				$('#withdrawDetailForm input[name=codFee]').remove('readonly');	
 			}
-		});
+			
+		}
 		
-		_totCnclGoodsRefundAmt = Math.floor(_totCnclGoodsAmt) - Math.floor(_totCnclPointAmt) - Math.floor(_totCnclCouponAmt);
-
-		$('#cnclGoodsAmt').text(Math.floor(_totCnclGoodsAmt).addComma());
-		$('#cnclPointAmt').text(Math.floor(_totCnclPointAmt).addComma());
-		$('#cnclCouponAmt').text(Math.floor(_totCnclCouponAmt).addComma());
-		$('#cnclGoodsRefundAmt').text(Math.floor(_totCnclGoodsRefundAmt).addComma());
-
-		fnSetChgReason(data[0].chgReason);
+		fnSetTotRefundData();
 	}
 	
-	// 귀책사유 설정
-	$('#withdrawDetailForm select[name=chgReason]').on('change', function() {
-		fnSetChgReason($(this).val());
-	});
-	
-	// 변경요청설정
-	var fnSetChgReason = function(value) {
-		var checkData = ['10', '11', '12', '13', '15', '21', '30']; //귀책이 고객
-		var orgDelvFee = 0;
-		var custShipAmt = 0;
-		if (gagajf.isNull(value)) return;
+	var addDeliveryFee = 0;
+	var addDeliveryFeeYn = "N";
+	/*************************************************************************
+	*  환불 금액 계산
+	**************************************************************************/		
+	var fnSetTotRefundData = function() {
+		var enCloseFee = $("#withdrawDetailForm input[name=encloseFee]").val(); //  동봉비 
+		var codFee     = $("#withdrawDetailForm input[name=codFee]").val(); //      착불비 
+		var addPaycost = $("#withdrawDetailForm input[name=addPayCost]").val(); //  추가 결제비 
 
-		if(ordChgCnt == 1) {	//1회 회수비 0원
-			_delvFee = 0;
-			$('#delvFeeAddText').text(" 1회 회수비용은 회사가 부담합니다.");
-		} else if (checkData.indexOf(value) != -1) {	// 고객 귀책사유인 경우
-			$('#chgReasonText').text('고객');
-			if(_orgDelvFee == 0) {	// 원주문 배송비가 0 이면
-				// 남은상품의 실주문금액이 최소주문금액보다 작거나 0인 경우 부과배송비(TB_GOODS 의 DELV_FEE)를 원주문 배송비로 저장
-				if (remainGoodsInfo.minOrdAmt > remainGoodsInfo.realOrdAmt || remainGoodsInfo.realOrdAmt == 0) {
-					orgDelvFee = _delvFee;
+		if(delvExpnYn == "Y"){ // 출고예외(확정후 품절,불량)일 경우 
+			if(toTalOrdQty == ordChgQty){ // 총 주문수량  =  반품수량   배송비가 있을시 환불해줌 
+				
+				if(reFundInfo.spanSumDeliveryFee > 0){
+					addDeliveryFee = reFundInfo.spanSumDeliveryFee - reFundInfo.spanDelvCpnDcAmt;
+					addDeliveryFeeYn = "Y";
 				}
+				//alert("총수량 출고예외 ");
+				// 환불금액  = 취소 상품 실결제 금액 + 배송비 
+				reFundInfo.spanRefundAmt = (reFundInfo.spanRealCnclRtnAmt + reFundInfo.spanSumDeliveryFee - reFundInfo.spanDelvCpnDcAmt);
+			} else { // 총 주문수량  <>  반품수량   
+				//alert("출고예외");
+				reFundInfo.spanRefundAmt = reFundInfo.spanRealCnclRtnAmt;
 			}
 			
-			//_orgDelvFee = orgDelvFee;
-			
-			if (couponInfo != null && couponInfo.buyLimitAmt > 0) {
-				if (couponInfo.buyLimitAmt > remainGoodsInfo.realOrdAmt) {	//남은상품의 실주문금액이 쿠폰사용금액기준액보다 작은경우 장바구니 쿠폰 취소
-					
-					$(remainGoodsList).each(function(idx, goods) {
-						_totCnclCouponAmt += Number(goods.cartCpnDcAmt);
-					});
-					
-					_totCnclGoodsRefundAmt = _totCnclGoodsAmt - _totCnclPointAmt - _totCnclCouponAmt;
-					$('#cnclCouponAmt').text(_totCnclCouponAmt.addComma());
-					$('#cnclGoodsRefundAmt').text(_totCnclGoodsRefundAmt.addComma());
+		} else { // 반품일 경우 
+			if(toTalOrdQty == ordChgQty){// 총 주문수량  =  반품수량   
+				if(isCustomer){ //고객귀책 
+					if(wdGb == "W"){ // 회수요청
+						//alert("총수량 고객귀책 - 회수요청");
+						// 환불금액  = 취소 상품 실결제 금액 + 배송비 - 추가배송비 - 반품배송비 
+						reFundInfo.spanRefundAmt = (reFundInfo.spanRealCnclRtnAmt + Number(enCloseFee) + Number(addPaycost)) - (reFundInfo.spanTotDeliveryFee - reFundInfo.spanDelvCpnDcAmt)  - reFundInfo.spanTotRtnDelvFee;
+					} else {         // 직접배송
+						//alert("총수량 고객귀책 - 직접배송");
+						reFundInfo.spanRefundAmt = (reFundInfo.spanRealCnclRtnAmt + Number(enCloseFee) + Number(addPaycost)) - (reFundInfo.spanTotDeliveryFee - reFundInfo.spanDelvCpnDcAmt) - Number(codFee);
+					}
+				} else { // 회사귀책
+					//alert("총수량 회사귀책 ");
+					if(reFundInfo.spanSumDeliveryFee > 0){
+						addDeliveryFee = reFundInfo.spanSumDeliveryFee - reFundInfo.spanDelvCpnDcAmt;
+						addDeliveryFeeYn = "Y";
+					}
+					reFundInfo.spanRefundAmt = (reFundInfo.spanRealCnclRtnAmt + (reFundInfo.spanSumDeliveryFee - reFundInfo.spanDelvCpnDcAmt) - Number(codFee)) 
 				}
-			}
-			
-			$('#orgDelvFee').text(orgDelvFee.addComma());
-			$('#returnDelvFee').text(_delvFee.addComma());
-			
-			// 고객부담 배송비 = 원주문배송비 + 회수배송비 + 착불비
-			custShipAmt = Number(orgDelvFee) + Number(_delvFee) + Number($('#codFee').text().replace(/,/gi, ""));
-		} else {
-			if (couponInfo != null && couponInfo.buyLimitAmt > 0) {
-				if (couponInfo.buyLimitAmt > remainGoodsInfo.realOrdAmt) {
-					
-					$(remainGoodsList).each(function(idx, goods) {
-						_totCnclCouponAmt -= Number(goods.cartCpnDcAmt);
-					});
-					
-					_totCnclGoodsRefundAmt = _totCnclGoodsAmt - _totCnclPointAmt - _totCnclCouponAmt;
-					$('#cnclCouponAmt').text(_totCnclCouponAmt.addComma());
-					$('#cnclGoodsRefundAmt').text(_totCnclGoodsRefundAmt.addComma());
+			} else { // 총 주문수량  <>  반품수량   
+				if(isCustomer){ //고객귀책 
+					if(wdGb == "W"){ // 회수요청
+						//alert(" 고객귀책- 회수요청 ");
+						// 환불금액  = 취소 상품 실결제 금액   - 반품배송비 
+						reFundInfo.spanRefundAmt = (reFundInfo.spanRealCnclRtnAmt + Number(enCloseFee) + Number(addPaycost))  - reFundInfo.spanTotRtnDelvFee;
+					} else {         // 직접배송
+						//alert(" 고객귀책- 직접배송 ");
+						reFundInfo.spanRefundAmt = (reFundInfo.spanRealCnclRtnAmt + Number(enCloseFee) - Number(codFee));
+					}
+				} else { // 회사귀책
+					//alert(" 회사귀책 ");
+					reFundInfo.spanRefundAmt = reFundInfo.spanRealCnclRtnAmt - Number(codFee);
 				}
 			}
-			
-			$('#chgReasonText').text('회사');
-			$('#orgDelvFee').text('0');
-			$('#returnDelvFee').text('0');
 		}
 		
+		$("#spanRefundAmt").text(reFundInfo.spanRefundAmt.addComma());				//환불 금액 합계 
 		
-		// 고객부담배송비 -= 동봉비
-		$('#custShipAmt').text((custShipAmt - $('#withdrawDetailForm input[name=encloseFee]').val().replace(/,/gi, "")).addComma());
-		
-		fnSetTotRefundData(custShipAmt);
 	}
 	
-	// 환불 금액 계산
-	var fnSetTotRefundData = function(custShipAmt) {
-		custShipAmt = (custShipAmt - $('#withdrawDetailForm input[name=encloseFee]').val().replace(/,/gi, ""));	// 배송비(고객부담배송비 - 동봉비)
-
-		if (_totCnclGoodsRefundAmt < 1)
-			return;
+	/*************************************************************************
+	*  동봉비, 착불비, 추가결제비 변경시 재계산
+	**************************************************************************/		
+	var fnChangeAmt = function(){
+		var enCloseFee = $("#withdrawDetailForm input[name=encloseFee]").val(); //  동봉비 
+		var codFee     = $("#withdrawDetailForm input[name=codFee]").val(); //      착불비 
+		var addPaycost = $("#withdrawDetailForm input[name=addPayCost]").val(); //  추가 결제비 
 		
-		if ($('#chgReasonText').text() == '고객') {
-			if (remainGoodsInfo.realOrdAmt == 0) {
-				var tempDelvFee = 0;
-			}
-		} else {	// 귀책사유가 회사에 있고 남은상품의 실주문금액이 0이거나 총취소환불금액과 같을 경우
-			var tempDelvFee = 0;
-			if (remainGoodsInfo.realOrdAmt == 0 || remainGoodsInfo.realOrdAmt == _totCnclGoodsRefundAmt) {
-				//tempDelvFee = _orgDelvFee;
-			}
-		}
-
-		var delvFee = tempDelvFee == 0 ? tempDelvFee : _orgDelvFee;
-		var totRefundAmt = Number(_totCnclGoodsRefundAmt) + Number(delvFee) - Number(custShipAmt);//- Number(custShipAmt);//+ Number(_orgDelvFee) - Number(custShipAmt);
-		$('#totRefundAmt').text(Math.floor(totRefundAmt).addComma());
+		fnSetTotRefundData();
 	}
 	
-	// 회수컨펌 클릭 시
+	
+	var ordInQty  	= 0;	// 반품 입고총수량 
+	var ordChgQty	= 0;	// 반품 신청총수량 
+	/*************************************************************************
+	*  회수컨펌 클릭 시
+	**************************************************************************/
 	withdrawDetailGridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != "ordDtlNo" || event.data.wdQty < 1 || event.data.wdStat == "Y") return;
-		
-		if (sumQty.chgQty != sumQty.wdQty) {
-			mcxDialog.alert('반품신청 수량과 회수등록수량이 맞지 않습니다.<br/>반품신청수량 : ' + sumQty.chgQty + '<br/>회수등록수량 : ' + sumQty.wdQty);
+		if (event.colDef.field != 'chgStat') return;
+		if (ordChgQty != ordInQty) {
+			mcxDialog.alert('반품신청 수량과 회수입고수량이 맞지 않습니다.<br/>반품신청수량 : ' + ordChgQty + '<br/>회수입고수량 : ' + ordInQty);
 			return;
 		}
 		
-		fnWithdrawDetailConfirm(event.data);
+		fnWithdrawDetailConfirm();
 	}
 	
-	// 회수 컨펌
+
+	/*************************************************************************
+	*  회수 컨펌
+	**************************************************************************/	
 	var confirmFlag = true;
-	var fnWithdrawDetailConfirm = function(data) {
-		var totPayAmt = $('#totPayAmt').text().replace(/,/gi,"");
-		var totRefundAmt = $('#totRefundAmt').text().replace(/,/gi,"");
+	var fnWithdrawDetailConfirm = function() {
+		//var totPayAmt = $('#totPayAmt').text().replace(/,/gi,"");
+		//var totRefundAmt = $('#totRefundAmt').text().replace(/,/gi,"");
+		
 		
-		if ( data.mallGb == '10' && chgGb == '30') {
-			if (totRefundAmt <= 0) { // 아웃바운드 필요. (동동 및 계좌이체로 받아야함)
+		if ( mallGb == 'G011_10') {
+			if (reFundInfo.spanRefundAmt <= 0) { // 아웃바운드 필요. (동동 및 계좌이체로 받아야함)
 				mcxDialog.alert('환불금액 부족합니다.');
 				return;
 			}
 			
-			if(Number(totRefundAmt) > Number(totPayAmt)) {
-				mcxDialog.alert('환불금액이 총 결제금액보다 큽니다.<br/>환불금액 : ' + totRefundAmt + '<br/>(남은)결제금액 : ' + totPayAmt);
+			if(reFundInfo.spanRefundAmt > reFundInfo.spanPayAmt) {
+				mcxDialog.alert('환불금액이 총 결제금액보다 큽니다.<br/>환불금액 : ' + reFundInfo.spanRefundAmt + '<br/>총 결제금액 : ' + reFundInfo.spanPayAmt);
 				return;
 			}
 		}
+		var pgStat = $('#withdrawDetailForm input:checkbox[name=pgStats]').is(":checked") ? "Y" : "N"; 
+		reFundInfo.addDeliveryFee   = addDeliveryFee;
+		reFundInfo.addDeliveryFeeYn = addDeliveryFeeYn;
+		reFundInfo.pgStat           = pgStat;
 		
-		var allData = gagaAgGrid.getAllRowData(withdrawDetailGridOptions);
-		var remainCnt = 0;
-		
-		$(allData).each(function(idx) {
-			remainCnt++;
-		});
-		
-		data.chgGb = $('#withdrawDetailForm input[name=chgGb]').val();
-		data.chgReason = $('#withdrawDetailForm select[name=chgReason]').val();	// 최종요청사유
-		data.orgChgReason = $('#withdrawDetailForm input[name=orgChgReason]').val();
-		data.encloseFee = $('#withdrawDetailForm input[name=encloseFee]').val().replace(/,/gi, "");		// 동봉비
-		data.orgEncloseFee = $('#withdrawDetailForm input[name=orgEncloseFee]').val().replace(/,/gi, "");		// 동봉비
-		data.custShipAmt = $('#custShipAmt').text().replace(/,/gi, "");	// 고객부담 배송비
-		data.pgStats = $('#withdrawDetailForm input:checkbox[name=pgStats]').is(":checked") ? "Y" : "N"; 
-		data.totRefundAmt = totRefundAmt;
-		data.mode = allData.length;
-		
-// 		data.searchType = '1'; // 테스트 에러
-
-		var jsonData = JSON.stringify(data);
+		var jsonData = JSON.stringify(reFundInfo);
 		
 		if (!confirmFlag) {
 			mcxDialog.alert('데이터 처리 중입니다.');
@@ -478,27 +525,32 @@
 			sureBtnText: "확인",
 			sureBtnClick: function(){
 				gagajf.ajaxJsonSubmit('/withdraw/detail/confirm', jsonData, function(result) {
-					confirmFlag = true;
-					fnDetailSearch(false);
+					//confirmFlag = true;
+					//fnDetailSearch(false);
+					fnRefundDetailSearch();
 				});
 			}
 		});
 	}
 	
+	
+	
+
+
 	// readonly 설정
 	var setReadOnly = function(flag) {
 		if (flag) {
 			$('#withdrawDetailForm input[name=encloseFee]').attr('readonly', 'readonly');
 			$('#withdrawDetailForm input[name=encloseFee]').addClass('formControl');
 			
-			$('#withdrawDetailForm select[name=chgReason]').attr('disabled', 'disabled');
-			$('#withdrawDetailForm select[name=chgReason]').addClass('formControl');	
+			//$('#withdrawDetailForm select[name=chgReason]').attr('disabled', 'disabled');
+			//$('#withdrawDetailForm select[name=chgReason]').addClass('formControl');	
 		} else {
 			$('#withdrawDetailForm input[name=encloseFee]').remove('readonly');
 			$('#withdrawDetailForm input[name=encloseFee]').removeClass('formControl');
 			
-			$('#withdrawDetailForm select[name=chgReason]').remove('disabled');
-			$('#withdrawDetailForm select[name=chgReason]').removeClass('formControl');
+			//$('#withdrawDetailForm select[name=chgReason]').remove('disabled');
+			//$('#withdrawDetailForm select[name=chgReason]').removeClass('formControl');
 		}
 		
 	}

+ 3 - 3
src/main/webapp/WEB-INF/views/withdraw/RefundRegisterListForm.html

@@ -240,7 +240,7 @@
 		// 회수등록 팝업
 		if (event.data.ordChgSq > 0 && !gagajf.isNull(event.data.ordChgSq) && event.data.wdQty > 0) {
 			// 회수 상세 화면
-			detailPopup(event.data.ordChgSq, event.data.ordNo);
+			detailPopup(event.data.ordChgSq, event.data.ordNo, event.data.userNo);
 		} 
 	}
 
@@ -248,9 +248,9 @@
 	/*************************************************************************
 	*  회수 상세 화면
 	**************************************************************************/		
-	var detailPopup = function(ordChgSq, ordNo) {
+	var detailPopup = function(ordChgSq, ordNo, userNo) {
 		if (ordChgSq == 0) return;
-		var actionUrl = "/withdraw/refund/detail/form?ordChgSq=" + ordChgSq + '&ordNo=' + ordNo;
+		var actionUrl = "/withdraw/refund/detail/form?ordChgSq=" + ordChgSq + '&ordNo=' + ordNo + '&userNo=' + userNo;
 		cfnOpenModalPopup(actionUrl, "popupWithdrawDetail");
 	}
 

+ 30 - 20
src/main/webapp/WEB-INF/views/withdraw/WithdrawChangePopForm.html

@@ -94,7 +94,7 @@
 							<th>귀책사유</th>
 							<td><span id="imputeReason"></span></td>
 							<th>추가비용</th>
-							<td><input type="text" name="addPayAmt" data-valid-type="integer"  readonly="true" class="w100 aR"/>원</td>
+							<td><input type="text" name="addPayAmt" data-valid-type="integer"  readonly class="w100 aR"/>원</td>
 						</tr>
 						<tr>
 							<th>요청메모</th>
@@ -174,7 +174,7 @@ var fnChangeChgReason = function(reasonCd) {
 	if(orgChgReason != rsn){
 		if(chgGb == "G680_30"){   // 반품
 			if(rsn == "G688_10"){ // 고객귀책 
-				if(wdGb == "W"){  // 회수요청 
+				if(wdGb == "W" && spanRefundAmt < rtnDelvFee ){  // 회수요청 
 					changeYn = "Y";
 					addPayCost = rtnDelvFee;
 				}
@@ -233,26 +233,33 @@ $("#changeSaveBtn").on("click", function(){
 	var addPayCost = 0 ;
 	var rsn = $('#cancelRequestFrm input[name=chgReason]').val(); // 사유코드 
 	
-	
-	if(chgGb == "G680_30"){   // 반품
-		if(rsn == "G688_10"){ // 고객귀책 
-			if(wdGb == "W"){  // 회수요청 
-				changeYn = "Y";
-				addPayCost = rtnDelvFee;
+	if(orgChgReason != rsn){
+		if(chgGb == "G680_30"){   // 반품
+			if(rsn == "G688_10"){ // 고객귀책 
+				if(wdGb == "W" && spanRefundAmt < rtnDelvFee){  // 회수요청 
+					changeYn = "Y";
+					addPayCost = rtnDelvFee;
+				}
+			} else if(orgChgReason == "G688_10" &&  rsn != "G688_10"){
+				changeYn = "S";
 			}
-		}
-		
-	} else { // 교환
-		if(rsn == "G689_10"){ // 고객귀책 
-			if(wdGb == "W"){  // 회수요청 
-				changeYn = "Y";
-				addPayCost = rtnDelvFee + delvFee;
-			} else {          // 직접배송
-				changeYn = "Y";
-				addPayCost = rtnDelvFee;
+			
+		} else { // 교환
+			if(rsn == "G689_10"){ // 고객귀책 
+				if(wdGb == "W"){  // 회수요청 
+					changeYn = "Y";
+					addPayCost = rtnDelvFee + delvFee;
+				} else {          // 직접배송
+					changeYn = "Y";
+					addPayCost = rtnDelvFee;
+				}
+			}else if(orgChgReason == "G689_10" &&  rsn != "G689_10"){
+				changeYn = "S";
 			}
 		}
 	}
+	
+	
 	var ordDtlNoList = "";
 	for(var i=0; i<orderWithdrawList.length; i++) {
 		if(i == 0){
@@ -272,11 +279,14 @@ $("#changeSaveBtn").on("click", function(){
 				"changeYn": changeYn,
 				"addPayCost": addPayCost,
 				"chgGb": chgGb,
-				"chgMemo": $("#cancelRequestFrm textarea[name=chgMemo]").val() ,
+				"chgReason" : chgReason,
+				"chgMemo": $("#cancelRequestFrm textarea[name=chgMemo]").val(),
 				"ordDtlNoList": ordDtlNoList
 			};
 			var tranData = JSON.stringify(jsonData);
-			gagajf.ajaxJsonSubmit('/withdraw/change/save', tranData, function() {uifnPopupClose('popupWithdrawChangeForm');});
+			gagajf.ajaxJsonSubmit('/withdraw/change/save', tranData, function() {
+				fnSearchList();
+				uifnPopupClose('popupWithdrawChangeForm');});
 		}
 	});
 });

+ 1 - 8
src/main/webapp/WEB-INF/views/withdraw/WithdrawDirectiveListForm.html

@@ -73,14 +73,7 @@
 							<td>
 								<select name="chgStat">
 									<option value="">전체</option>
-									<option value="G685_20">교환접수</option>
-									<option value="G685_50">반품접수</option>
-									<option value="G685_30">회수요청</option>
-									<option value="G685_40">교환완료</option>
-									<option value="G685_60">반품완료</option>
-									<option value="G685_49">교환철회</option>
-									<option value="G685_69">반품철회</option>
-									
+									<option th:if="${chgStatList}" th:each="oneData, status : ${chgStatList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>									
 								</select>
 							</td>
 							<th>반품방식</th>

+ 77 - 7
src/main/webapp/WEB-INF/views/withdraw/WithdrawExceptionListForm.html

@@ -59,13 +59,35 @@
 							</td>
 							<th class="dashR">처리상태</th>
 							<td class="dashR">
-								<select name="recallStat" id="recallStat">
+								<select name="recallStat" id="recallStat" class="w40p">
 									<option value="">전체</option>
 									<option value="P" selected>대기</option>
 									<option value="S">처리완료</option>
 								</select>
 							</td>
 						</tr>
+						<tr>
+							<th class="dashR">예외사유</th>
+							<td class="dashR">
+								<select name="reasonCode" id="reasonCode">
+									<option value="">전체</option>
+									<option th:if="${reasonCodeList}" th:each="oneData, status : ${reasonCodeList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
+								</select>
+							</td>
+							<th class="dashR">회수요청구분</th>
+							<td class="dashR">
+								<select name="chgGb" id="chgGb" class="w40p">
+									<option value="">전체</option>
+									<option value="G680">출고예외</option>
+									<option value="G680_30">반품요청</option>
+									<option value="G680_40">교환요청</option>
+								</select>
+							</td>
+							<th class="dashR">작업자</th>
+							<td class="dashR">
+								<input type="text" class="w40p" name="userNameCreated" placeholder="" maxlength="20" />
+							</td>
+						</tr>						
 						<tr>
 							<th class="dashR">등록일</th>
 							<td colspan="6" class="dashR">
@@ -132,8 +154,12 @@
 		      },
 			cellRenderer: function(params) {
 				var btnText = '';
-				if(params.data.recallStat === 'P') {
-					btnText= '<a href="javascript:void(0);"  class="btn btn-success btn-ssm">대기</a>';
+				if(params.data.recallStat == 'P') {
+					if(params.data.chgStat == 'G685_21' || params.data.chgStat == 'G685_51'){
+						btnText= '추가결제대기';
+					} else {
+						btnText= '<a href="javascript:void(0);"  class="btn btn-success btn-ssm">대기</a>';
+					}
 				} else { btnText = '완료' }
 				return btnText;
 			}			
@@ -146,7 +172,8 @@
 			
 			cellRenderer: function (params) {
 			if (roleCd.indexOf("C") < 0) {
-				return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenOrderDetailPopup('" + params.data.orderNo + "');\">" + params.data.orderNo + "</a>";
+				
+				return "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailPopup('" + params.data.orderNo + "');\">" + params.data.orderNo + "</a>";
 			} else {
 				return params.value;
 			}
@@ -157,7 +184,7 @@
 		{headerName: "WMS메시지",			field: "adminMemo",			width: 300,	cellClass: 'text-left'},
 		{headerName: "회수요청구분",		field: "chgGbNm",			width: 80,	cellClass: 'text-left'},
 		{headerName: "반품교환사유",		field: "chgReasonNm",		width: 150,	cellClass: 'text-left'},
-		{headerName: "반품교환사유변경",		field: "chgReason",			width: 120,	cellClass: 'text-center',rowSpan: params => params.data.rowspanRank === 1 ? params.data.rowspanCnt : 1,
+		{headerName: "반품/사유변경",		field: "chgReason",			width: 120,	cellClass: 'text-center',rowSpan: params => params.data.rowspanRank === 1 ? params.data.rowspanCnt : 1,
 			    cellClassRules: {
 			        'cell-span': "data.rowspanRank == 1"
 			      },
@@ -165,6 +192,8 @@
 					var btnText = '';
 					if(params.data.recallStat === 'P' && params.data.chgStat != null) {
 						btnText= '<a href="javascript:void(0);"  class="btn btn-success btn-ssm">사유변경</a>';
+					} else if(params.data.recallStat === 'P' && params.data.chgStat == null){
+						btnText= '<a href="javascript:void(0);"  class="btn btn-success btn-ssm">반품요청</a>';
 					} else { btnText = '' }
 					return btnText;
 				}		
@@ -220,13 +249,16 @@
 	//gridOptions.rowSelection = 'multiple';
 	
 	gridOptions.rowHeight = 35;
+	
+	var currOrdNo ="";
+	var refreshFlag = "";
 	/*************************************************************************
 	*  조회 버튼 클릭 시
 	**************************************************************************/
 	$('#btnSearch').on('click', function() {
 		fnSearchList();
 	});
-
+	
 	/*************************************************************************
 	*  조회 
 	**************************************************************************/
@@ -265,6 +297,28 @@
 		
 	}
 	
+	
+	var fnOrderDetailPopup = function(orderNo){
+		currOrdNo = orderNo;
+		refreshFlag = "ordDtl";
+		cfnOpenOrderDetailPopup(currOrdNo);
+	}
+	
+	/*************************************************************************
+	*  팝업 콜백 
+	**************************************************************************/		
+	var fnReOpenOrderDetailPopup = function () {
+		if(refreshFlag == "ordDtl"){
+			cfnOpenOrderDetailPopup(currOrdNo);
+		} else if(refreshFlag == "ban"){
+			alert("11");
+		} else if(refreshFlag == "change"){
+			
+		}
+		fnSearchList();
+	};
+	
+	
 	/*************************************************************************
 	*  달력 초기화 
 	**************************************************************************/		
@@ -276,8 +330,13 @@
 	*  회수예외 처리완료 버튼 - 대기->완료  업데이트
 	**************************************************************************/	
 	gridOptions.onCellClicked = function(event) {
+		//if(params.data.chgStat == 'G685_21' || params.data.chgStat == 'G685_51'){
+			
 		
 		if (event.colDef.field == 'recallStat'){
+			if(event.data.chgStat == "G685_21" || event.data.chgStat == "G685_51"){
+				return;
+			}
 			if(event.data.recallStat == "P" && event.data.rowspanRank == "1"){
 				var params = {};
 				params.recallExceptionNo = event.data.recallExceptionNo;
@@ -294,10 +353,21 @@
 				});
 			}
 		} else if(event.colDef.field == 'chgReason'){
-			if(event.data.recallStat == "P" && event.data.rowspanRank == "1"){
+			if(event.data.recallStat == "P" && event.data.rowspanRank == "1" && event.data.chgStat != null){
 				
 				var actionUrl = "/withdraw/exception/change/form?ordChgSq=" + event.data.ordChgSq + '&chgGb=' + event.data.chgGb;
 				cfnOpenModalPopup(actionUrl, 'popupWithdrawChangeForm');
+			} else if(event.data.recallStat == "P" && event.data.rowspanRank == "1" && event.data.chgStat == null){
+				refreshFlag  = "ban";
+				var ordChgSq = 0;
+				var param    = "";
+				param += "&ordNo=" 			+ event.data.orderNo;
+				param += "&ordDtlNo=" 		+ event.data.orderDtlNo;
+				param += "&delvFeeCd="		+ event.data.delvFeeCd;
+				param += "&delvFeeCdGrp="	+ "WMS";
+				param += "&ordChgSq=" 		+ ordChgSq;
+				var actionUrl = "/orderChange/rtn/req/form?" + param;
+				cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
 			}
 		}
 	}