|
@@ -0,0 +1,933 @@
|
|
|
|
|
+package com.style24.core.biz.service;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.Collection;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+
|
|
|
|
|
+import com.gagaframework.web.parameter.GagaMap;
|
|
|
|
|
+import com.style24.core.biz.dao.TscOrderChangeDao;
|
|
|
|
|
+import com.style24.core.support.env.TscConstants;
|
|
|
|
|
+import com.style24.persistence.domain.Order;
|
|
|
|
|
+import com.style24.persistence.domain.OrderChange;
|
|
|
|
|
+
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 취소, 반품, 교환 Service
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 18
|
|
|
|
|
+ */
|
|
|
|
|
+@Service
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+public class TscOrderChangeService {
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private TscOrderChangeDao orderChangeDao;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 주문변경정보 (상세번호배열, 취소수량배열) 취소 목록으로 변환
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2020. 12. 16
|
|
|
|
|
+ */
|
|
|
|
|
+ public List<Order> getCnclReqList(OrderChange cnclReq) {
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 주문번호설정
|
|
|
|
|
+ Order order = new Order();
|
|
|
|
|
+ order.setOrdNo(cnclReq.getOrdNo());
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 취소가능 주문상세상태값 설정
|
|
|
|
|
+ String[] ordDtlStatArr = new String[4];
|
|
|
|
|
+ ordDtlStatArr[0] = TscConstants.OrderDetailStat.DEPOSIT_WAIT.value();
|
|
|
|
|
+ ordDtlStatArr[1] = TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value();
|
|
|
|
|
+ ordDtlStatArr[2] = TscConstants.OrderDetailStat.GOODS_PREPARE.value();
|
|
|
|
|
+ ordDtlStatArr[3] = TscConstants.OrderDetailStat.DELIVERY_PREPARE.value();
|
|
|
|
|
+ order.setOrdDtlStatArr(ordDtlStatArr);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 취소가능 주문목록을 조회 후 취소신청을 수량을 셋팅
|
|
|
|
|
+ List<Order> cnclReqList = getCancelRequestTargetList(order);
|
|
|
|
|
+ int[] ordDtlNoArr = cnclReq.getOrdDtlNoArr();
|
|
|
|
|
+ int[] cnclRtnReqQtyArr = cnclReq.getCnclRtnReqQtyArr();
|
|
|
|
|
+
|
|
|
|
|
+ for (int i=0 ; i<cnclReqList.size() ; i++) {
|
|
|
|
|
+ Order vo = cnclReqList.get(i);
|
|
|
|
|
+
|
|
|
|
|
+ if (ordDtlNoArr[i] == vo.getOrdDtlNo()) {
|
|
|
|
|
+ vo.setOrdCanChgQty(cnclRtnReqQtyArr[i]);
|
|
|
|
|
+ }
|
|
|
|
|
+ cnclReqList.add(vo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return cnclReqList;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 주문상세 > 주문취소신청 > 주문취소,반품,교환 대상목록
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2020. 12. 16
|
|
|
|
|
+ */
|
|
|
|
|
+ public List<Order> getCancelRequestTargetList(Order order) {
|
|
|
|
|
+ return orderChangeDao.getCancelRequestTargetList(order);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 취소,반품 환불금액 계산 (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 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; // 환불 금액 합계
|
|
|
|
|
+
|
|
|
|
|
+ int sumDeliveryFee = 0; // 배송금액 (전체 취소시에 배송금액도 같이 환불)
|
|
|
|
|
+
|
|
|
|
|
+ List<Order> cancelOrderRefundList = new ArrayList<Order>(); // 주문환불금액목록
|
|
|
|
|
+ List<Order> cancelDelvRefundList = new ArrayList<Order>(); // 주문환불배송금액목록
|
|
|
|
|
+
|
|
|
|
|
+ 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.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.setAllCanYn(cnclRtnList.get(k).getAllCanYn());
|
|
|
|
|
+ cancelDelvRefundList.add(delvObj);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 취소신청수량 정보를 취소 환불 금액 계산
|
|
|
|
|
+ for (Order oneData : cnclRtnList) {
|
|
|
|
|
+ orderObj = new Order();
|
|
|
|
|
+
|
|
|
|
|
+ // 3.1 주문기본정보 설정
|
|
|
|
|
+ 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());
|
|
|
|
|
+
|
|
|
|
|
+ // 3.2 주문취소수량으로 취소율 정보 설정
|
|
|
|
|
+ int ordQty = oneData.getOrdQty();
|
|
|
|
|
+ int itemQty = oneData.getItemQty();
|
|
|
|
|
+ int ordCanChgQty = oneData.getOrdCanChgQty();
|
|
|
|
|
+
|
|
|
|
|
+ float _appQty = (float)ordCanChgQty / (float)ordQty;
|
|
|
|
|
+
|
|
|
|
|
+ // 3.3 주문취소금액 & 취소할인금액 계산
|
|
|
|
|
+ orderObj.setCnclRtnAmt(((oneData.getItemPrice() + oneData.getOptAddPrice()) * itemQty) * ordCanChgQty);
|
|
|
|
|
+ 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.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.setAllCanYn(oneData.getAllCanYn()); // 전체취소 여부 (기존의 취소 또는 출고, 반품, 교환 의 경우에는 전체취소 불가능)
|
|
|
|
|
+
|
|
|
|
|
+ cancelOrderRefundList.add(orderObj);
|
|
|
|
|
+
|
|
|
|
|
+ // 3.8 배송업체 & 배송비정책 조건으로 추가 배송비 금액 설정
|
|
|
|
|
+ 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.setRtnDelvFee(orderObj.getRtnDelvFee());
|
|
|
|
|
+ delvObj.setExcDelvFee(orderObj.getExcDelvFee());
|
|
|
|
|
+ delvObj.setSupplyCompCd(orderObj.getSupplyCompCd());
|
|
|
|
|
+ delvObj.setDelvFeeCd(orderObj.getDelvFeeCd());
|
|
|
|
|
+ delvObj.setAllCanYn(orderObj.getAllCanYn());
|
|
|
|
|
+
|
|
|
|
|
+ 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();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 추가배송비 발생여부, 추가배송비, 배송비정책단위 전체취소 여부 체크
|
|
|
|
|
+ for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
|
|
|
|
|
+ Order obj = cancelDelvRefundList.get(i);
|
|
|
|
|
+
|
|
|
|
|
+ // 취소금액이 있을때 처리
|
|
|
|
|
+ if (obj.getCnclRtnAmt() > 0) {
|
|
|
|
|
+
|
|
|
|
|
+ // 4.1 무료배송비용 > (주문금액 - 취소금액)
|
|
|
|
|
+ if (obj.getMinOrdAmt() > (obj.getOrdAmt() - obj.getCnclRtnAmt())) {
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2 주문시 배송비가 존재하면 추가 배송비 없음
|
|
|
|
|
+ if (obj.getDelvFee() > 0) {
|
|
|
|
|
+ obj.setAddDelvFeeYn("N");
|
|
|
|
|
+ obj.setAddDelvFee(0);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2.1 전체취소시 배송비 환불
|
|
|
|
|
+ if ((obj.getOrdAmt() - obj.getCnclRtnAmt()) == 0) {
|
|
|
|
|
+ if ("Y".equals(obj.getAllCanYn())) {
|
|
|
|
|
+ sumDeliveryFee += obj.getDelvFee(); // 전체취소시 배송금액도 같이 환불
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 4.3 주문금액 - 취소금액 == 0 이면 전체취소 이므로 배송비 발생 안함
|
|
|
|
|
+ // * 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 {
|
|
|
|
|
+ // 4.4 전체취소의 경우에 해당
|
|
|
|
|
+ obj.setAddDelvFeeYn("N");
|
|
|
|
|
+ obj.setAddDelvFee(0);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 4.5 추가배송비 발생 (취소신청화면에서 대부분 아래의 조건에 해당)
|
|
|
|
|
+ obj.setAddDelvFeeYn("Y");
|
|
|
|
|
+ obj.setAddDelvFee(obj.getOrgDelvFee());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ obj.setAddDelvFeeYn("N");
|
|
|
|
|
+ obj.setAddDelvFee(0);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ spanSumDeliveryFee += obj.getDelvFee();
|
|
|
|
|
+ spanRtnSumDeliveryFee += obj.getRtnDelvFee();
|
|
|
|
|
+ spanExcSumDeliveryFee += obj.getExcDelvFee();
|
|
|
|
|
+ spanOrdAmt += obj.getOrdAmt();
|
|
|
|
|
+ spanCnclRtnAmt += obj.getCnclRtnAmt();
|
|
|
|
|
+ spanTotDeliveryFee += obj.getAddDelvFee();
|
|
|
|
|
+
|
|
|
|
|
+ cancelDelvRefundList.set(i, obj);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5. FRONT 화면엣 필요한 금액 설정
|
|
|
|
|
+ // 2020.12.30 프론트에서 필요한 부분 작업 필여
|
|
|
|
|
+ // 관리자 화면에서 사용하는 환불 칼럼 정보
|
|
|
|
|
+ // 환불금액표시
|
|
|
|
|
+ spanPayAmt = spanSumRealOrdAmt + spanSumDeliveryFee;
|
|
|
|
|
+ spanTotPntDcAmt = spanPntDcAmt + spanPrePntDcAmt;
|
|
|
|
|
+ spanCpnDcAmt = spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt;
|
|
|
|
|
+ spanTmtbDcAmt = spanTmtb1DcAmt + spanTmtb2DcAmt;
|
|
|
|
|
+ spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee;
|
|
|
|
|
+
|
|
|
|
|
+ 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("spanTmtbDcAmt" , spanTmtbDcAmt); //취소 다다익선 금액
|
|
|
|
|
+ mav.set("spanTmtb1DcAmt" , spanTmtb1DcAmt); //수량할인
|
|
|
|
|
+ mav.set("spanTmtb2DcAmt" , spanTmtb2DcAmt); //금액할인
|
|
|
|
|
+ mav.set("spanGfcdUseAmt" , spanGfcdUseAmt); //취소 고객 상품권 금액
|
|
|
|
|
+ mav.set("spanRealCnclRtnAmt" , spanRealCnclRtnAmt); //취소 상품 실결제 금액
|
|
|
|
|
+ mav.set("sumDeliveryFee" , sumDeliveryFee); //배송비 합계 금액
|
|
|
|
|
+ mav.set("spanTotDeliveryFee" , spanTotDeliveryFee); //추가 배송 금액
|
|
|
|
|
+ mav.set("spanTotRtnDelvFee" , spanRtnSumDeliveryFee); //추가 반품 배송 금액
|
|
|
|
|
+ mav.set("spanTotExcDelvFee" , spanExcSumDeliveryFee); //추가 교환 배송 금액
|
|
|
|
|
+ mav.set("spanRefundAmt" , spanRefundAmt); //환불 금액 합계
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 취소신청 (batch(napy), batch(extmall))
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 19
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
|
|
+ public GagaMap cnclReq(GagaMap mav, int userNo) {
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 세션회원조회
|
|
|
|
|
+ //userNo = userNo;
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 취소요정정보목록
|
|
|
|
|
+ //List<Order> cancelReqList = (List<Order>) mav.get("cancelReqList"); //주문 취소 신청 목록
|
|
|
|
|
+ List<Order> cancelOrderRefundList = (List<Order>) mav.get("cancelOrderRefundList"); //주문 환불 금액 목록
|
|
|
|
|
+ List<Order> cancelDelvRefundList = (List<Order>) mav.get("cancelDelvRefundList"); //주문 환불 배송 금액 목록
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 주문정보등록 (TB_ORDER_DETAIL_HST) (등록)
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 주문변경정보등록 (TB_ORDER_CHAGNE) (등록)
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 주문변경상세정보등록 (TB_ORDER_CHANGE_DETAIL) (등록)
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 취소신청완료 (admin)
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 19
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
|
|
+ public GagaMap cnclReqComplete(GagaMap mav, int userNo) {
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 환불금액계산
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 사용포인트원복 (TB_CUST_POINT(수정), TB_CUST_POINT_HST(등록))
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 사용쿠폰원복 (TB_CUST_COUPON(수정))
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 상품권금액원복 (TB_CUST_GIFTCARD(수정), TB_CUST_GIFTCARD_HST(등록))
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 사은품취소 (TB_ORD_FREEGIFT(수정), TB_ORD_FREEGIFT(등록), TB_ORD_FREEGIFT_VAL(수정))
|
|
|
|
|
+
|
|
|
|
|
+ // 6. 주문정보 수정 (TB_ORDER_DETAIL(수정), TB_ORDER_DETAIL_HST(등록), TB_ORDER_DETAIL_ITEM(수정), TB_ORDER_DETAIL_ITEM_HST(등록))
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 재고정보 (TB_SELL_QTY(등록))
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 주문변경정보 (TB_ORDER_CHANGE(수정), TB_ORDER_CHANGE_DTL(수정), TB_REFUND(수정))
|
|
|
|
|
+
|
|
|
|
|
+ // PG 결제 금액 체크
|
|
|
|
|
+ // 9. PG 실행
|
|
|
|
|
+
|
|
|
|
|
+ // 10. 결제정보 (TB_PAYMENT(등록))
|
|
|
|
|
+
|
|
|
|
|
+ // 11. 추가배송비발생 (TB_PAYMENT(등록))
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 취소완료 (admin, front, batch(soldout), batch(gift), batch(napy), batch(extmall))
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 19
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
|
|
+ public GagaMap cnclComplete(GagaMap mav, int userNo) {
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 세션회원조회
|
|
|
|
|
+ //userNo = userNo;
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 취소요정정보목록
|
|
|
|
|
+ List<Order> cancelReqList = (List<Order>) mav.get("cancelReqList"); //주문 취소 신청 목록
|
|
|
|
|
+ List<Order> cancelOrderRefundList = (List<Order>) mav.get("cancelOrderRefundList"); //주문 환불 금액 목록
|
|
|
|
|
+ List<Order> cancelDelvRefundList = (List<Order>) mav.get("cancelDelvRefundList"); //주문 환불 배송 금액 목록
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 취소신청정보
|
|
|
|
|
+ int ordNo = Integer.parseInt(mav.getString("ordNo").toString());
|
|
|
|
|
+ String chgReason = mav.getString("chgReason").toString();
|
|
|
|
|
+ String chgMemo = mav.getString("chgMemo").toString();
|
|
|
|
|
+ String allCanYn = mav.getString("allCanYn").toString();
|
|
|
|
|
+ String isCustomer = mav.getString("isCustomer").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);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2 주문변경 추가정조 등록하기
|
|
|
|
|
+ // 4.2 반품회수지 정보 등록
|
|
|
|
|
+ String chgerNm = mav.getString("chgerNm").toString();
|
|
|
|
|
+ String chgerPhnno = mav.getString("chgerPhnno").toString();
|
|
|
|
|
+ String chgerTelno = mav.getString("chgerTelno").toString();
|
|
|
|
|
+ String chgerEmail = mav.getString("chgerEmail").toString();
|
|
|
|
|
+
|
|
|
|
|
+ orderChange.setChgerNm(chgerNm);
|
|
|
|
|
+ orderChange.setChgerPhnno(chgerPhnno);
|
|
|
|
|
+ orderChange.setChgerTelno(chgerTelno);
|
|
|
|
|
+ orderChange.setChgerEmail(chgerEmail);
|
|
|
|
|
+ orderChange.setChgerRtnMemo("");
|
|
|
|
|
+
|
|
|
|
|
+ orderChangeDao.createOrderChange(orderChange);
|
|
|
|
|
+
|
|
|
|
|
+ List<Order> cancelOrderDetailList = new ArrayList<Order>();
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2 주문변경 상세 단품 정보 등록 (단품단위)
|
|
|
|
|
+ for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
|
|
|
|
|
+ Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
|
|
|
|
|
+ cancelOrderRefundPo.setRegNo(userNo);
|
|
|
|
|
+ cancelOrderRefundPo.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ // 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
|
|
|
|
|
+ if ("Y".equals(allCanYn)) {
|
|
|
|
|
+ cancelOrderRefundPo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cancelOrderRefundPo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
|
|
|
|
|
+ if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
|
|
|
|
|
+ // 4.2.3 주문상세단품정보 수정
|
|
|
|
|
+ orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2.4 주문상세단품정보 이력 등록
|
|
|
|
|
+ orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.3 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
|
|
|
|
|
+ Boolean temp = false;
|
|
|
|
|
+
|
|
|
|
|
+ if (cancelOrderDetailList.size() > 0) {
|
|
|
|
|
+ for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
|
|
|
|
|
+ if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
|
|
|
|
|
+ temp = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4.4 주문상세단위 데이타 저장
|
|
|
|
|
+ if (!temp) {
|
|
|
|
|
+ cancelOrderDetailList.add(cancelOrderRefundPo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4.5 상품옵션 재고 원복
|
|
|
|
|
+ orderChangeDao.updateOptionQty(cancelOrderRefundPo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 주문상세단위 취소 데이타 처리
|
|
|
|
|
+ for (int i=0 ; i<cancelOrderDetailList.size() ; i++) {
|
|
|
|
|
+ Order vo = cancelOrderRefundList.get(i);
|
|
|
|
|
+ vo.setRegNo(userNo);
|
|
|
|
|
+ vo.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ // 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
|
|
|
|
|
+ if ("Y".equals(allCanYn)) {
|
|
|
|
|
+ vo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
|
|
|
|
|
+ } else {
|
|
|
|
|
+ vo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5.1 주문변경상세정보 이력 등록
|
|
|
|
|
+ orderChangeDao.createOrderDetailHstCnclRtn(vo);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2 주문변경상세정보 수정
|
|
|
|
|
+ orderChangeDao.updateOrderDetail(vo);
|
|
|
|
|
+
|
|
|
|
|
+ // * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음
|
|
|
|
|
+ // 5.3 주문변경상세정보 등록
|
|
|
|
|
+ OrderChange changeDetailPo = new OrderChange();
|
|
|
|
|
+ changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
|
|
+ changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
|
|
|
|
|
+ changeDetailPo.setChgQty(vo.getOrdCanChgQty());
|
|
|
|
|
+ changeDetailPo.setChgStat("G685_21"); // 취소완료 : 공통코드로관리예정
|
|
|
|
|
+ changeDetailPo.setRegNo(userNo);
|
|
|
|
|
+ changeDetailPo.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ orderChangeDao.createOrderChangeDetail(changeDetailPo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
|
|
|
|
|
+ int spanRealCnclRtnAmt = Integer.parseInt(mav.get("spanRealCnclRtnAmt").toString()); // 취소금액합계
|
|
|
|
|
+ int sumDeliveryFee = Integer.parseInt(mav.get("sumDeliveryFee").toString()); // 배송비합계
|
|
|
|
|
+ int spanTotDeliveryFee = Integer.parseInt(mav.get("spanTotDeliveryFee").toString()); // 추가배송비합계
|
|
|
|
|
+ int spanTotRtnDelvFee = Integer.parseInt(mav.get("spanTotRtnDelvFee").toString()); // 반품배송비합계
|
|
|
|
|
+ int spanRefundAmt = 0;
|
|
|
|
|
+
|
|
|
|
|
+ // 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
|
|
|
|
|
+ if ("true".equals(isCustomer)) {
|
|
|
|
|
+ spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
|
|
|
|
|
+ //Integer.parseInt(mav.get("spanRefundAmt").toString());
|
|
|
|
|
+ }
|
|
|
|
|
+ // 회사사유 : 환불금액계산 = (취소금액 + 배송비)
|
|
|
|
|
+ else {
|
|
|
|
|
+ spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
|
|
|
|
|
+ }
|
|
|
|
|
+ mav.set("spanRefundAmt", spanRefundAmt);
|
|
|
|
|
+
|
|
|
|
|
+ // 6. 환불결제 정보 등록
|
|
|
|
|
+ Order paymentOrder = new Order();
|
|
|
|
|
+ paymentOrder.setOrdNo(ordNo);
|
|
|
|
|
+ paymentOrder.setPayAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()) * -1);
|
|
|
|
|
+ paymentOrder.setPayStat("G016_99");
|
|
|
|
|
+ paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
|
|
+ paymentOrder.setRegNo(userNo);
|
|
|
|
|
+ paymentOrder.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ orderChangeDao.createPayment(paymentOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 환불금액 등록
|
|
|
|
|
+ Order refundOrder = new Order();
|
|
|
|
|
+ refundOrder.setOrdNo(ordNo);
|
|
|
|
|
+ refundOrder.setPaySq(paymentOrder.getPaySq());
|
|
|
|
|
+ refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
|
|
+ refundOrder.setRegNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ refundOrder.setRefundAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfCpn1Amt(Integer.parseInt(mav.get("spanCpn1DcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfTmtb1Amt(Integer.parseInt(mav.get("spanTmtb1DcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfTmtb2Amt(Integer.parseInt(mav.get("spanTmtb2DcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfGoodsCpnAmt(Integer.parseInt(mav.get("spanGoodsCpnDcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfCartCpnAmt(Integer.parseInt(mav.get("spanCartCpnDcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfPntAmt(Integer.parseInt(mav.get("spanPntDcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfPrePntAmt(Integer.parseInt(mav.get("spanPrePntDcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfGfcdUseAmt(Integer.parseInt(mav.get("spanGfcdUseAmt").toString()));
|
|
|
|
|
+
|
|
|
|
|
+ refundOrder.setRaNo(mav.get("accountNo").toString());
|
|
|
|
|
+ refundOrder.setRaNm(mav.get("accountNm").toString());
|
|
|
|
|
+ refundOrder.setRaBank(mav.get("bankCd").toString());
|
|
|
|
|
+
|
|
|
|
|
+ orderChangeDao.createRefund(refundOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
|
|
|
|
|
+ for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
|
|
|
|
|
+ Order vo = cancelDelvRefundList.get(i);
|
|
|
|
|
+
|
|
|
|
|
+ if (vo.getAddDelvFee() > 0) {
|
|
|
|
|
+ Order delvFeeOrder = new Order();
|
|
|
|
|
+
|
|
|
|
|
+ delvFeeOrder.setPaySq(paymentOrder.getPaySq());
|
|
|
|
|
+ delvFeeOrder.setOrdNo(ordNo);
|
|
|
|
|
+ delvFeeOrder.setDelvFeeGb("G018_10");
|
|
|
|
|
+ delvFeeOrder.setDelvFeeCd(vo.getDelvFeeCd());
|
|
|
|
|
+ delvFeeOrder.setDelvFee(vo.getAddDelvFee());
|
|
|
|
|
+ delvFeeOrder.setRealDelvAmt(vo.getDelvFee());
|
|
|
|
|
+ delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
|
|
+ delvFeeOrder.setSupplyCompCd(vo.getSupplyCompCd());
|
|
|
|
|
+ delvFeeOrder.setRegNo(userNo);
|
|
|
|
|
+ delvFeeOrder.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ orderChangeDao.createDeliveryFee(delvFeeOrder);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 9. 포인트원복 (사용포인트, 주문상세단위)
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 11. 상품권원복
|
|
|
|
|
+
|
|
|
|
|
+ // 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
|
|
|
|
|
+ Order freegiftOrder = new Order();
|
|
|
|
|
+ freegiftOrder.setOrdNo(ordNo);
|
|
|
|
|
+ freegiftOrder.setUpdNo(userNo);
|
|
|
|
|
+ orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 13. PG 연동
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 14. 취소 완료 알림톡 발송 에정
|
|
|
|
|
+
|
|
|
|
|
+ //int a = 100/0;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 반품신청 (admin, front,
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 19
|
|
|
|
|
+ */
|
|
|
|
|
+ public GagaMap rtnReq(GagaMap mav, int userNo) {
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 세션회원조회
|
|
|
|
|
+ //userNo = userNo;
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 취소요정정보목록
|
|
|
|
|
+ List<Order> cancelReqList = (List<Order>) mav.get("cancelReqList"); //주문 취소 신청 목록
|
|
|
|
|
+ List<Order> cancelOrderRefundList = (List<Order>) mav.get("cancelOrderRefundList"); //주문 환불 금액 목록
|
|
|
|
|
+ List<Order> cancelDelvRefundList = (List<Order>) mav.get("cancelDelvRefundList"); //주문 환불 배송 금액 목록
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 취소신청정보
|
|
|
|
|
+ int ordNo = Integer.parseInt(mav.getString("ordNo").toString());
|
|
|
|
|
+ String chgReason = mav.getString("chgReason").toString();
|
|
|
|
|
+ String chgMemo = mav.getString("chgMemo").toString();
|
|
|
|
|
+ String allCanYn = mav.getString("allCanYn").toString();
|
|
|
|
|
+ String isCustomer = mav.getString("isCustomer").toString();
|
|
|
|
|
+ String chgGb = "G680_30"; //반품요청
|
|
|
|
|
+
|
|
|
|
|
+ // 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);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2 반품추가정보, 반품회수지 정보 등록
|
|
|
|
|
+ String chgerNm = mav.getString("chgerNm").toString();
|
|
|
|
|
+ String chgerPhnno = mav.getString("chgerPhnno").toString();
|
|
|
|
|
+ String chgerTelno = mav.getString("chgerTelno").toString();
|
|
|
|
|
+ String chgerEmail = mav.getString("chgerEmail").toString();
|
|
|
|
|
+ String chgerZipNo = mav.getString("chgerZipNo").toString();
|
|
|
|
|
+ String chgerBaseAddr = mav.getString("chgerBaseAddr").toString();
|
|
|
|
|
+ String chgerDtlAddr = mav.getString("chgerDtlAddr").toString();
|
|
|
|
|
+
|
|
|
|
|
+ orderChange.setChgerNm(chgerNm);
|
|
|
|
|
+ orderChange.setChgerPhnno(chgerPhnno);
|
|
|
|
|
+ orderChange.setChgerTelno(chgerTelno);
|
|
|
|
|
+ orderChange.setChgerEmail(chgerEmail);
|
|
|
|
|
+ orderChange.setChgerZipNo(chgerZipNo);
|
|
|
|
|
+ orderChange.setChgerBaseAddr(chgerBaseAddr);
|
|
|
|
|
+ orderChange.setChgerDtlAddr(chgerDtlAddr);
|
|
|
|
|
+ orderChange.setChgerRtnMemo("");
|
|
|
|
|
+
|
|
|
|
|
+ orderChangeDao.createOrderChange(orderChange);
|
|
|
|
|
+
|
|
|
|
|
+ List<Order> cancelOrderDetailList = new ArrayList<Order>();
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2 주문변경 상세 단품 정보 등록 (단품단위)
|
|
|
|
|
+ for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
|
|
|
|
|
+ Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
|
|
|
|
|
+ cancelOrderRefundPo.setRegNo(userNo);
|
|
|
|
|
+ cancelOrderRefundPo.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ // 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
|
|
|
|
|
+ if ("Y".equals(allCanYn)) {
|
|
|
|
|
+ cancelOrderRefundPo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cancelOrderRefundPo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
|
|
|
|
|
+ if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
|
|
|
|
|
+ // 4.2.3 주문상세단품정보 수정
|
|
|
|
|
+ //orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2.4 주문상세단품정보 이력 등록
|
|
|
|
|
+ //orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.3 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
|
|
|
|
|
+ Boolean temp = false;
|
|
|
|
|
+
|
|
|
|
|
+ if (cancelOrderDetailList.size() > 0) {
|
|
|
|
|
+ for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
|
|
|
|
|
+ if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
|
|
|
|
|
+ temp = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4.4 주문상세단위 데이타 저장
|
|
|
|
|
+ if (!temp) {
|
|
|
|
|
+ cancelOrderDetailList.add(cancelOrderRefundPo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4.5 상품옵션 재고 원복
|
|
|
|
|
+ //orderChangeDao.updateOptionQty(cancelOrderRefundPo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 주문상세단위 취소 데이타 처리
|
|
|
|
|
+ for (int i=0 ; i<cancelOrderDetailList.size() ; i++) {
|
|
|
|
|
+ Order vo = cancelOrderRefundList.get(i);
|
|
|
|
|
+ vo.setRegNo(userNo);
|
|
|
|
|
+ vo.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ // 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
|
|
|
|
|
+ if ("Y".equals(allCanYn)) {
|
|
|
|
|
+ vo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
|
|
|
|
|
+ } else {
|
|
|
|
|
+ vo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5.1 주문변경상세정보 이력 등록
|
|
|
|
|
+ orderChangeDao.createOrderDetailHstCnclRtn(vo);
|
|
|
|
|
+
|
|
|
|
|
+ // 4.2 주문변경상세정보 수정
|
|
|
|
|
+ //orderChangeDao.updateOrderDetail(vo);
|
|
|
|
|
+
|
|
|
|
|
+ // * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음
|
|
|
|
|
+ // 5.3 주문변경상세정보 등록
|
|
|
|
|
+ OrderChange changeDetailPo = new OrderChange();
|
|
|
|
|
+ changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
|
|
+ changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
|
|
|
|
|
+ changeDetailPo.setChgQty(vo.getOrdCanChgQty());
|
|
|
|
|
+ changeDetailPo.setChgStat("G685_40"); // 반품요청 : 공통코드로관리예정
|
|
|
|
|
+ changeDetailPo.setRegNo(userNo);
|
|
|
|
|
+ changeDetailPo.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ orderChangeDao.createOrderChangeDetail(changeDetailPo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
|
|
|
|
|
+ int spanRealCnclRtnAmt = Integer.parseInt(mav.get("spanRealCnclRtnAmt").toString()); // 취소금액합계
|
|
|
|
|
+ int sumDeliveryFee = Integer.parseInt(mav.get("sumDeliveryFee").toString()); // 배송비합계
|
|
|
|
|
+ int spanTotDeliveryFee = Integer.parseInt(mav.get("spanTotDeliveryFee").toString()); // 추가배송비합계
|
|
|
|
|
+ int spanTotRtnDelvFee = Integer.parseInt(mav.get("spanTotRtnDelvFee").toString()); // 반품배송비합계
|
|
|
|
|
+ int spanRefundAmt = 0;
|
|
|
|
|
+
|
|
|
|
|
+ // 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
|
|
|
|
|
+ if ("true".equals(isCustomer)) {
|
|
|
|
|
+ spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
|
|
|
|
|
+ //Integer.parseInt(mav.get("spanRefundAmt").toString());
|
|
|
|
|
+ }
|
|
|
|
|
+ // 회사사유 : 환불금액계산 = (취소금액 + 배송비)
|
|
|
|
|
+ else {
|
|
|
|
|
+ spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
|
|
|
|
|
+ }
|
|
|
|
|
+ mav.set("spanRefundAmt", spanRefundAmt);
|
|
|
|
|
+
|
|
|
|
|
+ // 6. 환불결제 정보 등록
|
|
|
|
|
+ Order paymentOrder = new Order();
|
|
|
|
|
+ paymentOrder.setOrdNo(ordNo);
|
|
|
|
|
+ paymentOrder.setPayAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()) * -1);
|
|
|
|
|
+ paymentOrder.setPayStat("G016_99");
|
|
|
|
|
+ paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
|
|
+ paymentOrder.setRegNo(userNo);
|
|
|
|
|
+ paymentOrder.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ //orderChangeDao.createPayment(paymentOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 환불금액 등록
|
|
|
|
|
+ Order refundOrder = new Order();
|
|
|
|
|
+ refundOrder.setOrdNo(ordNo);
|
|
|
|
|
+ refundOrder.setPaySq(paymentOrder.getPaySq());
|
|
|
|
|
+ refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
|
|
+ refundOrder.setRegNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ refundOrder.setRefundAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfCpn1Amt(Integer.parseInt(mav.get("spanCpn1DcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfTmtb1Amt(Integer.parseInt(mav.get("spanTmtb1DcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfTmtb2Amt(Integer.parseInt(mav.get("spanTmtb2DcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfGoodsCpnAmt(Integer.parseInt(mav.get("spanGoodsCpnDcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfCartCpnAmt(Integer.parseInt(mav.get("spanCartCpnDcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfPntAmt(Integer.parseInt(mav.get("spanPntDcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfPrePntAmt(Integer.parseInt(mav.get("spanPrePntDcAmt").toString()));
|
|
|
|
|
+ refundOrder.setRfGfcdUseAmt(Integer.parseInt(mav.get("spanGfcdUseAmt").toString()));
|
|
|
|
|
+
|
|
|
|
|
+ refundOrder.setRaNo(mav.get("accountNo").toString());
|
|
|
|
|
+ refundOrder.setRaNm(mav.get("accountNm").toString());
|
|
|
|
|
+ refundOrder.setRaBank(mav.get("bankCd").toString());
|
|
|
|
|
+
|
|
|
|
|
+ //orderChangeDao.createRefund(refundOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
|
|
|
|
|
+ for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
|
|
|
|
|
+ Order vo = cancelDelvRefundList.get(i);
|
|
|
|
|
+
|
|
|
|
|
+ if (vo.getAddDelvFee() > 0) {
|
|
|
|
|
+ Order delvFeeOrder = new Order();
|
|
|
|
|
+
|
|
|
|
|
+ delvFeeOrder.setPaySq(paymentOrder.getPaySq());
|
|
|
|
|
+ delvFeeOrder.setOrdNo(ordNo);
|
|
|
|
|
+ delvFeeOrder.setDelvFeeGb("G018_10");
|
|
|
|
|
+ delvFeeOrder.setDelvFeeCd(vo.getDelvFeeCd());
|
|
|
|
|
+ delvFeeOrder.setDelvFee(vo.getAddDelvFee());
|
|
|
|
|
+ delvFeeOrder.setRealDelvAmt(vo.getDelvFee());
|
|
|
|
|
+ delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
|
|
|
|
|
+ delvFeeOrder.setSupplyCompCd(vo.getSupplyCompCd());
|
|
|
|
|
+ delvFeeOrder.setRegNo(userNo);
|
|
|
|
|
+ delvFeeOrder.setUpdNo(userNo);
|
|
|
|
|
+
|
|
|
|
|
+ //orderChangeDao.createDeliveryFee(delvFeeOrder);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 9. 포인트원복 (사용포인트, 주문상세단위)
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 11. 상품권원복
|
|
|
|
|
+
|
|
|
|
|
+ // 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
|
|
|
|
|
+ Order freegiftOrder = new Order();
|
|
|
|
|
+ freegiftOrder.setOrdNo(ordNo);
|
|
|
|
|
+ freegiftOrder.setUpdNo(userNo);
|
|
|
|
|
+ //orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 13. PG 연동
|
|
|
|
|
+
|
|
|
|
|
+ // To Do List
|
|
|
|
|
+ // 14. 취소 완료 알림톡 발송 에정
|
|
|
|
|
+
|
|
|
|
|
+ //int a = 100/0;
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 반품완료
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 19
|
|
|
|
|
+ */
|
|
|
|
|
+ public GagaMap rtnComplete(List<Order> cnclRtnList) {
|
|
|
|
|
+ GagaMap mav = new GagaMap();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 교환신청
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 19
|
|
|
|
|
+ */
|
|
|
|
|
+ public GagaMap exchReq(List<Order> cnclRtnList) {
|
|
|
|
|
+ GagaMap mav = new GagaMap();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 교환회수
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 19
|
|
|
|
|
+ */
|
|
|
|
|
+ public GagaMap exchRtn(List<Order> cnclRtnList) {
|
|
|
|
|
+ GagaMap mav = new GagaMap();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 교환발송완료
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Order
|
|
|
|
|
+ * @author jsh77b
|
|
|
|
|
+ * @since 2021. 01. 19
|
|
|
|
|
+ */
|
|
|
|
|
+ public GagaMap exchComplete(List<Order> cnclRtnList) {
|
|
|
|
|
+ GagaMap mav = new GagaMap();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ return mav;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|