|
|
@@ -2397,19 +2397,51 @@ public class TscOrderChangeService {
|
|
|
Order cnclRtn = cnclRtnList.iterator().next();
|
|
|
|
|
|
// 전체 및 마지막 취소여부 설정
|
|
|
+ int cnt = 0;
|
|
|
+ int sumCnclRtnQty = 0;
|
|
|
+ int totOrdQty = 0;
|
|
|
String delvFeeCd = "";
|
|
|
+ String delvFeeCd2 = "";
|
|
|
String allCanYn = "Y";
|
|
|
String allLastCanYn = "Y";
|
|
|
+ String allDelvCanYn = "Y";
|
|
|
List<String> delvFeeCdList = new ArrayList<>();
|
|
|
+ GagaMap delvCanYn = new GagaMap();
|
|
|
+ List<String> delvFeeCdCanList = new ArrayList<>();
|
|
|
+ List<String> allDelvCanYnList = new ArrayList<>();
|
|
|
|
|
|
for (Order order : cnclRtnList) {
|
|
|
int index = ordDtlNoList.indexOf(order.getOrdDtlNo());
|
|
|
int ordQty = order.getOrdQty();
|
|
|
int cnclRtnQty = order.getCnclRtnQty();
|
|
|
|
|
|
+ // 전체 주문 수량
|
|
|
+ totOrdQty = order.getTotOrdQty();
|
|
|
+
|
|
|
+ // 취소 요청 수량 합계
|
|
|
+ if (index >= 0) {
|
|
|
+ sumCnclRtnQty += cnclRtnReqQtyArr[index];
|
|
|
+ }
|
|
|
+
|
|
|
// 전체 취소 여부 설정
|
|
|
- if ("Y".equals(allCanYn) && (index < 0 || cnclRtnReqQtyArr[index] != ordQty)) {
|
|
|
- allCanYn = "N";
|
|
|
+ // if ("Y".equals(allCanYn) && (index < 0 || cnclRtnReqQtyArr[index] != ordQty)) {
|
|
|
+ // allCanYn = "N";
|
|
|
+ // }
|
|
|
+
|
|
|
+ // 배송비 코드 별 전체 취소/반품 여부 처리
|
|
|
+ if (!delvFeeCd2.equals(order.getDelvFeeCd())) {
|
|
|
+ if (cnt > 0) {
|
|
|
+ delvFeeCdCanList.add(delvFeeCd2);
|
|
|
+ allDelvCanYnList.add(allDelvCanYn);
|
|
|
+
|
|
|
+ allDelvCanYn = "Y";
|
|
|
+ }
|
|
|
+
|
|
|
+ delvFeeCd2 = order.getDelvFeeCd();
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("Y".equals(allDelvCanYn) && (index < 0 || cnclRtnReqQtyArr[index] != ordQty)) {
|
|
|
+ allDelvCanYn = "N";
|
|
|
}
|
|
|
|
|
|
// 취소신청
|
|
|
@@ -2441,6 +2473,21 @@ public class TscOrderChangeService {
|
|
|
delvFeeCd = order.getDelvFeeCd();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ cnt++;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 배송비 코드 별 전체 취소/반품 여부 설정
|
|
|
+ if (delvFeeCdCanList.size() == 0) {
|
|
|
+ delvFeeCdCanList.add(delvFeeCd2);
|
|
|
+ allDelvCanYnList.add(allDelvCanYn);
|
|
|
+ }
|
|
|
+ delvCanYn.set("delvFeeCdCanList", delvFeeCdCanList);
|
|
|
+ delvCanYn.set("allDelvCanYnList", allDelvCanYnList);
|
|
|
+
|
|
|
+ // 전체 취소 여부 설정
|
|
|
+ if (totOrdQty != sumCnclRtnQty) {
|
|
|
+ allCanYn = "N";
|
|
|
}
|
|
|
|
|
|
// 무통장입금전 전체취소여부 설정
|
|
|
@@ -2461,7 +2508,7 @@ public class TscOrderChangeService {
|
|
|
} else {
|
|
|
order.setLastCanYn("Y");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 변경 수량 설정
|
|
|
if (index >= 0) {
|
|
|
order.setOrdCanChgQty(cnclRtnReqQtyArr[index]);
|
|
|
@@ -2471,6 +2518,12 @@ public class TscOrderChangeService {
|
|
|
//order.setRtnDelvFee(0);
|
|
|
}
|
|
|
|
|
|
+ // 배송비 정책 별 전체 취소/반품 여부
|
|
|
+ int idx = delvFeeCdCanList.indexOf(order.getDelvFeeCd());
|
|
|
+ if (idx >= 0) {
|
|
|
+ order.setAllDelvCanYn(allDelvCanYnList.get(idx));
|
|
|
+ }
|
|
|
+
|
|
|
cnclReqList.add(order);
|
|
|
}
|
|
|
|
|
|
@@ -2482,6 +2535,7 @@ public class TscOrderChangeService {
|
|
|
result.setString("pgGb" , cnclRtn.getPgGb()); // PG구분
|
|
|
result.setString("cashAuthNo" , cnclRtn.getCashAuthNo()); // 현금영수증 승인번호
|
|
|
result.set("cnclReqList" , cnclReqList); // 취소신청목록
|
|
|
+ result.set("delvCanYn" , delvCanYn); // 배송비 코드 별 전체 취소/반품 여부
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
@@ -2538,6 +2592,7 @@ public class TscOrderChangeService {
|
|
|
orderChange.setOrdNo(ordNo);
|
|
|
orderChange.setChgGb(chgGb);
|
|
|
orderChange.setChgStat(chgStat);
|
|
|
+ orderChange.setDelvFeeCdGrp(delvFeeCd);
|
|
|
orderChange.setOrdDtlNoArr(ordDtlNoArr);
|
|
|
orderChange.setCnclRtnReqQtyArr(cnclRtnReqQtyArr);
|
|
|
|
|
|
@@ -2556,6 +2611,7 @@ public class TscOrderChangeService {
|
|
|
result.set("cashAuthNo", refundPreInfo.get("cashAuthNo"));
|
|
|
result.set("addPayCost", addPayCost);
|
|
|
result.set("delvFeeCd", delvFeeCd);
|
|
|
+ result.set("delvCanYn", refundPreInfo.get("delvCanYn"));
|
|
|
|
|
|
}
|
|
|
return result;
|
|
|
@@ -2599,6 +2655,7 @@ public class TscOrderChangeService {
|
|
|
int enCloseFee = map.getInt("enCloseFee"); // 동봉비
|
|
|
String enCloseFeeYn = map.getString("enCloseFeeYn"); // 동봉비여부
|
|
|
String wdInvoiceNo = map.getString("codFeeYn"); // 회수송장번호
|
|
|
+ String delvFeeCd = map.getString("delvFeeCd"); // 배송비정책코드
|
|
|
int regNo = userNo; // 등록자번호
|
|
|
int updNo = userNo; // 수정자번호
|
|
|
|
|
|
@@ -2614,11 +2671,21 @@ public class TscOrderChangeService {
|
|
|
}
|
|
|
|
|
|
// 3. 환불정보 설정
|
|
|
+ Order returnOrderInfo = new Order();
|
|
|
+ returnOrderInfo.setOrdNo(ordNo);
|
|
|
+ returnOrderInfo.setDelvFeeCd(delvFeeCd);
|
|
|
+ map.set("returnOrderInfo", this.getReturnOrderInfo(returnOrderInfo));
|
|
|
+
|
|
|
OrderChange refundInfo = this.calculateRefundAmt(map);
|
|
|
int refundAmt = refundInfo.getRefundAmt();
|
|
|
int rfGfcdUseAmt = refundInfo.getGfcdUseAmt();
|
|
|
int rfDeliveryFee = refundInfo.getRfDeliveryFee();
|
|
|
|
|
|
+ if (refundInfo.getOrgDelvFee() < 0) {
|
|
|
+ refundAmt += refundInfo.getOrgDelvFee();
|
|
|
+ rfDeliveryFee += refundInfo.getOrgDelvFee();
|
|
|
+ }
|
|
|
+
|
|
|
// 4. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
|
|
|
List<Payment> pgList = new ArrayList<>();
|
|
|
List<GiftCard> cashReceiptsList = new ArrayList<>();
|
|
|
@@ -2978,6 +3045,22 @@ public class TscOrderChangeService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (refundInfo.getOrgDelvFee() < 0) {
|
|
|
+ Order delvFeeOrder = new Order();
|
|
|
+ delvFeeOrder.setOrdNo(ordNo);
|
|
|
+ delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
|
|
|
+ delvFeeOrder.setDelvFeeCd(obj.getDelvFeeCd());
|
|
|
+ delvFeeOrder.setDelvFee(refundInfo.getOrgDelvFee() * -1);
|
|
|
+ delvFeeOrder.setDelvGfcdUseAmt(0);
|
|
|
+ delvFeeOrder.setRealDelvAmt(refundInfo.getOrgDelvFee() * -1);
|
|
|
+ delvFeeOrder.setOrdChgSq(ordChgSq);
|
|
|
+ delvFeeOrder.setSupplyCompCd(obj.getSupplyCompCd());
|
|
|
+ delvFeeOrder.setRegNo(userNo);
|
|
|
+ delvFeeOrder.setUpdNo(userNo);
|
|
|
+
|
|
|
+ orderChangeDao.createDeliveryFee(delvFeeOrder);
|
|
|
+ }
|
|
|
+
|
|
|
// 4-6. 환불 정보 등록
|
|
|
OrderChange chgRefund = new OrderChange();
|
|
|
chgRefund.setRefundAmt(refundAmt);
|
|
|
@@ -3095,6 +3178,7 @@ public class TscOrderChangeService {
|
|
|
}
|
|
|
// 네이버페이 결제형 결제 취소 처리
|
|
|
else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
|
|
|
+ pg.setPayAmt(pg.getPartCancelAmt());
|
|
|
pg.setPayMeans(payMeans);
|
|
|
pg.setChgReasonNm(chgReasonNm);
|
|
|
|
|
|
@@ -3102,6 +3186,7 @@ public class TscOrderChangeService {
|
|
|
}
|
|
|
// 카카오페이 결제 취소 처리
|
|
|
else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
|
|
|
+ pg.setPayAmt(pg.getPartCancelAmt());
|
|
|
pg.setPayMeans(payMeans);
|
|
|
kakaoPayService.cancelKakaoPayment(pg);
|
|
|
}
|
|
|
@@ -3690,6 +3775,12 @@ public class TscOrderChangeService {
|
|
|
int enCloseFee = map.getInt("enCloseFee"); // 동봉비
|
|
|
String wdInvoiceNo = map.getString("wdInvoiceNo"); // 회수송장번호
|
|
|
String delvFeeCd = map.getString("delvFeeCd"); // 배송비정책코드
|
|
|
+ String supplyCompCd = "";
|
|
|
+
|
|
|
+ List<Order> cancelDelvRefundList = (List<Order>) map.get("cancelDelvRefundList"); // 취소환불배송금액 목록 (DELV_FEE_CD 단위)
|
|
|
+ if (cancelDelvRefundList != null && cancelDelvRefundList.size() > 0) {
|
|
|
+ supplyCompCd = cancelDelvRefundList.iterator().next().getSupplyCompCd();
|
|
|
+ }
|
|
|
|
|
|
// 2. 상태값 설정
|
|
|
String ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
|
|
|
@@ -3711,8 +3802,16 @@ public class TscOrderChangeService {
|
|
|
payment = orderChangeDao.getPaymentInfo(payment);
|
|
|
|
|
|
// 5. 환불금액 설정
|
|
|
+ Order returnOrderInfo = new Order();
|
|
|
+ returnOrderInfo.setOrdNo(ordNo);
|
|
|
+ returnOrderInfo.setDelvFeeCd(delvFeeCd);
|
|
|
+ map.set("returnOrderInfo", this.getReturnOrderInfo(returnOrderInfo));
|
|
|
OrderChange refundInfo = this.calculateRefundAmt(map);
|
|
|
int refundAmt = refundInfo.getRefundAmt();
|
|
|
+
|
|
|
+ if (refundInfo.getOrgDelvFee() < 0) {
|
|
|
+ refundAmt += refundInfo.getOrgDelvFee();
|
|
|
+ }
|
|
|
|
|
|
// 6. 주문 전체취소 상태값 설정
|
|
|
String modType;
|
|
|
@@ -3893,6 +3992,8 @@ public class TscOrderChangeService {
|
|
|
|
|
|
if(refundInfo.getOrgDelvFee() > 0 || refundInfo.getRfDeliveryFee() != 0) {
|
|
|
int rfDeliveryFee = refundInfo.getOrgDelvFee() + refundInfo.getRfDeliveryFee();
|
|
|
+
|
|
|
+ // 0보다 크면 원주문 배송비 환불
|
|
|
if (refundInfo.getOrgDelvFee() > 0) {
|
|
|
// 배송비
|
|
|
OrderChange ordDelvFee = new OrderChange();
|
|
|
@@ -3900,10 +4001,27 @@ public class TscOrderChangeService {
|
|
|
ordDelvFee.setOrdChgSq(ordChgSq);
|
|
|
ordDelvFee.setRegNo(regNo);
|
|
|
ordDelvFee.setUpdNo(updNo);
|
|
|
+
|
|
|
orderChangeDao.insertTbDeliveryFeeMinus(ordDelvFee);
|
|
|
}
|
|
|
+ // 0보다 작으면 원주문 배송비 차감
|
|
|
+ else if (refundInfo.getOrgDelvFee() < 0) {
|
|
|
+ Order delvFeeOrder = new Order();
|
|
|
+ delvFeeOrder.setOrdNo(ordNo);
|
|
|
+ delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
|
|
|
+ delvFeeOrder.setDelvFeeCd(delvFeeCd);
|
|
|
+ delvFeeOrder.setDelvFee(refundInfo.getOrgDelvFee() * -1);
|
|
|
+ delvFeeOrder.setDelvGfcdUseAmt(0);
|
|
|
+ delvFeeOrder.setRealDelvAmt(refundInfo.getOrgDelvFee() * -1);
|
|
|
+ delvFeeOrder.setOrdChgSq(ordChgSq);
|
|
|
+ delvFeeOrder.setSupplyCompCd(supplyCompCd);
|
|
|
+ delvFeeOrder.setRegNo(userNo);
|
|
|
+ delvFeeOrder.setUpdNo(userNo);
|
|
|
+
|
|
|
+ orderChangeDao.createDeliveryFee(delvFeeOrder);
|
|
|
+ }
|
|
|
|
|
|
- // 환불
|
|
|
+ // 환불 kjc
|
|
|
// chgRefund.setRfDeliveryFee(addDeliveryFee);
|
|
|
chgRefund.setRfDeliveryFee(rfDeliveryFee);
|
|
|
chgRefund.setRfRealCnclAmt(refundAmt - rfDeliveryFee);
|
|
|
@@ -5780,6 +5898,7 @@ public class TscOrderChangeService {
|
|
|
String chgReason = map.getString("chgReason"); // 변경사유코드
|
|
|
String chgGb = chgReason.split("_")[0]; // 취소/반품 구분
|
|
|
String wdGb = map.getString("wdGb"); // 회수구분
|
|
|
+ String delvFeeCd = map.getString("delvFeeCd"); // 배송비정책코드
|
|
|
String allCanYn = map.getString("allCanYn"); // 전체취소/반품여부
|
|
|
String delvExpnYn = map.getString("delvExpnYn"); // 출고예외여부
|
|
|
int enCloseFee = map.getInt("enCloseFee"); // 동봉비
|
|
|
@@ -5803,6 +5922,29 @@ public class TscOrderChangeService {
|
|
|
int totRtnDelvFee = 0; // 반품배송비 계산
|
|
|
int refundAmt; // 환불금액
|
|
|
int addDelvFee = 0; // 추가배송비 (배송비 허들 깨짐) - 사유계산
|
|
|
+
|
|
|
+ // 전체반품 원주문 배송비 처리
|
|
|
+ GagaMap delvCanYn = (GagaMap) map.get("delvCanYn");
|
|
|
+ String allDelvCanYn = "";
|
|
|
+ int orgRefundDelvFee = 0;
|
|
|
+ if (delvCanYn != null) {
|
|
|
+ List<String> delvFeeCdCanList = (ArrayList<String>) delvCanYn.get("delvFeeCdCanList");
|
|
|
+ List<String> allDelvCanYnList = (ArrayList<String>) delvCanYn.get("allDelvCanYnList");
|
|
|
+
|
|
|
+ int index = delvFeeCdCanList.indexOf(delvFeeCd);
|
|
|
+
|
|
|
+ if (index >= 0) {
|
|
|
+ allDelvCanYn = allDelvCanYnList.get(index);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("Y".equals(allDelvCanYn)) {
|
|
|
+ List<Order> returnOrderInfo = (ArrayList<Order>) map.get("returnOrderInfo");
|
|
|
+
|
|
|
+ if (returnOrderInfo != null && returnOrderInfo.size() > 0 && returnOrderInfo.get(0).getDelvGfcdUseAmt() + returnOrderInfo.get(0).getRealDelvAmt() == 0) {
|
|
|
+ orgRefundDelvFee = returnOrderInfo.get(0).getOrgDelvFee();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// 출고예외(확정후 품절,불량)일 경우
|
|
|
if ("Y".equals(delvExpnYn)) {
|
|
|
@@ -5836,8 +5978,12 @@ public class TscOrderChangeService {
|
|
|
|
|
|
// 추가배송비 = 추가배송비(배송비 허들 깨짐)
|
|
|
// 2021.08.12 회수요청시에 착불비가 발생하면 철회 후 직접배송으로 재접수해야 환불금액에 이상이 없을듯 (모니터링 필요)
|
|
|
- // totRtnDelvFee = spanTotRtnDelvFee + codFee;
|
|
|
- totRtnDelvFee = spanTotRtnDelvFee;
|
|
|
+ // 2021.09.07 card007 착불비 등록 처리
|
|
|
+ totRtnDelvFee = spanTotRtnDelvFee + codFee;
|
|
|
+ // totRtnDelvFee = spanTotRtnDelvFee;
|
|
|
+
|
|
|
+ // 배송비정책 원주문 배송비 차감 처리
|
|
|
+ orgDelvFee = orgRefundDelvFee * -1;
|
|
|
|
|
|
// 환불 배송비 = -추가배송비(배송비 허들 깨짐)
|
|
|
rfDeliveryFee = totRtnDelvFee * -1;
|
|
|
@@ -5848,6 +5994,9 @@ public class TscOrderChangeService {
|
|
|
// 반품
|
|
|
if ("G688".equals(chgGb)) {
|
|
|
refundAmt = spanRealCnclRtnAmt + enCloseFee + addPayCost;
|
|
|
+
|
|
|
+ // 배송비정책 원주문 배송비 차감 처리
|
|
|
+ orgDelvFee = orgRefundDelvFee * -1;
|
|
|
}
|
|
|
// 취소
|
|
|
else {
|
|
|
@@ -5888,6 +6037,9 @@ public class TscOrderChangeService {
|
|
|
totDeliveryFee = spanTotDeliveryFee;
|
|
|
addDelvFee = spanTotDeliveryFee;
|
|
|
|
|
|
+ // 배송비정책 원주문 배송비 차감 처리
|
|
|
+ orgDelvFee = orgRefundDelvFee * -1;
|
|
|
+
|
|
|
// 반품배송비 = 반품배송비
|
|
|
totRtnDelvFee = spanTotRtnDelvFee;
|
|
|
|
|
|
@@ -5900,6 +6052,9 @@ public class TscOrderChangeService {
|
|
|
// 반품
|
|
|
if ("G688".equals(chgGb)) {
|
|
|
refundAmt = spanRealCnclRtnAmt + enCloseFee + addPayCost;
|
|
|
+
|
|
|
+ // 배송비정책 원주문 배송비 차감 처리
|
|
|
+ orgDelvFee = orgRefundDelvFee * -1;
|
|
|
}
|
|
|
// 취소
|
|
|
else {
|
|
|
@@ -5992,4 +6147,16 @@ public class TscOrderChangeService {
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 마이페이지 반품 주문 정보 조회
|
|
|
+ *
|
|
|
+ * @param Order
|
|
|
+ * @return Collection<Order>
|
|
|
+ * @author card007
|
|
|
+ * @since 2021. 09. 07
|
|
|
+ */
|
|
|
+ public Collection<Order> getReturnOrderInfo(Order order) {
|
|
|
+ return orderChangeDao.getReturnOrderInfo(order);
|
|
|
+ }
|
|
|
}
|