|
|
@@ -1,8 +1,10 @@
|
|
|
package com.style24.core.biz.service;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -44,6 +46,9 @@ public class TscOrderChangeService {
|
|
|
@Autowired
|
|
|
private TscOrderService orderService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private TscOrderRefundService orderRefundService;
|
|
|
+
|
|
|
@Autowired
|
|
|
private TscKcpService kcpService;
|
|
|
|
|
|
@@ -2082,4 +2087,144 @@ public class TscOrderChangeService {
|
|
|
orderChangeDao.updateOrderDetailItemForAllCancel(orderDetail);
|
|
|
orderChangeDao.createOrderDetailItemHstForAllCancel(orderDetail);
|
|
|
}
|
|
|
+
|
|
|
+ public GagaMap orderCancelPreInfo(OrderChange orderChange) {
|
|
|
+ GagaMap result = new GagaMap();
|
|
|
+
|
|
|
+ // 2. 환불 사전 정보 조회
|
|
|
+ GagaMap refundPreInfo = getRefundPreInfo(orderChange);
|
|
|
+ List<Order> cnclReqList = (List<Order>)refundPreInfo.get("cnclReqList");
|
|
|
+ String allCanYn = refundPreInfo.getString("allCanYn");
|
|
|
+ String allLastCanYn = refundPreInfo.getString("allLastCanYn");
|
|
|
+ // String allCanYnBeforePayment = refundPreInfo.getString("allCanYnBeforePayment");
|
|
|
+
|
|
|
+ // 전체취소, 부분취소 구분 처리 진행
|
|
|
+ if ("Y".equals(allCanYn)) {
|
|
|
+ orderChange.setChgGb(TscConstants.OrderChangeGb.CANCEL.value());
|
|
|
+ orderChange.setRegNo(orderChange.getCustNo());
|
|
|
+ orderChange.setUpdNo(orderChange.getCustNo());
|
|
|
+
|
|
|
+ allCnclComplete(orderChange);
|
|
|
+ } else {
|
|
|
+ // 3. 환불금액계산
|
|
|
+ // 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
|
|
|
+ result = orderRefundService.cnclRtnRefundAmt(cnclReqList);
|
|
|
+
|
|
|
+ // 4. 주문변경 기본정보 설정
|
|
|
+ result.setInt("ordNo", orderChange.getOrdNo()); // 주문번호
|
|
|
+ // result.setInt("ordChgSq", orderChange.getOrdChgSq()); // 주문변경번호
|
|
|
+ result.setString("chgReason", orderChange.getChgReason()); // 변경사유
|
|
|
+ result.setString("chgMemo", orderChange.getChgMemo()); // 변경메모
|
|
|
+
|
|
|
+ result.setString("accountNo", orderChange.getAccountNo()); // 환불계좌번호
|
|
|
+ result.setString("accountNm", orderChange.getAccountNm()); // 환불계좌예금주명
|
|
|
+ result.setString("bankCd", orderChange.getBankCd()); // 환불계좌은행코드
|
|
|
+
|
|
|
+ // result.setString("allCanYnBeforePayment", allCanYnBeforePayment); // 무통장입금전 전체취소 여부
|
|
|
+ // result.setString("allCanYn", allCanYn); // 전체취소 여부
|
|
|
+ result.setString("allLastCanYn", allLastCanYn); // 전체 마지막 취소 여부
|
|
|
+ // result.setString("isCustomer", orderChange.getIsCustomer()); // 변경사유 (고객, 회사)
|
|
|
+
|
|
|
+ // 5. 주문변경 회수지정보 추가
|
|
|
+ // result.setString("chgerNm", orderChange.getChgerNm()); // 변경자명
|
|
|
+ // result.setString("chgerEmail", orderChange.getChgerEmail()); // 변경자이메일주소
|
|
|
+ // result.setString("chgerPhnno", orderChange.getChgerPhnno()); // 변경자핸드폰번호
|
|
|
+ // result.setString("chgerTelno", orderChange.getChgerTelno()); // 변경자전화번호
|
|
|
+
|
|
|
+ // result.setString("reqGbn", orderChange.getReqGbn()); // 신청구분
|
|
|
+ result.setString("ipAddress", orderChange.getIpAddress()); // IP주소
|
|
|
+ result.setInt("custNo", orderChange.getCustNo()); // 고객번호
|
|
|
+ result.setString("pgTid", refundPreInfo.getString("pgTid")); // PG거래ID
|
|
|
+ result.setString("payMeans", refundPreInfo.getString("payMeans")); // 결제수단
|
|
|
+ result.setString("pgGb", refundPreInfo.getString("pgGb")); // PG구분
|
|
|
+
|
|
|
+ // 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
|
|
|
+ // coreOrderChangeService.cnclComplete(result, custNo);
|
|
|
+ partialCancel(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 취소/반품 환불 사전 정보 조회
|
|
|
+ *
|
|
|
+ * @param Order
|
|
|
+ * @return Collection<Order>
|
|
|
+ * @author card007
|
|
|
+ * @since 2021. 03. 25
|
|
|
+ */
|
|
|
+ public GagaMap getRefundPreInfo(OrderChange orderChange) {
|
|
|
+ GagaMap result = new GagaMap();
|
|
|
+ List<Order> cnclReqList = new ArrayList<>();
|
|
|
+
|
|
|
+ // 취소/반품 신청 정보 설정
|
|
|
+ int[] ordDtlNoArr = orderChange.getOrdDtlNoArr();
|
|
|
+ int[] cnclRtnReqQtyArr = orderChange.getCnclRtnReqQtyArr();
|
|
|
+ List<Integer> ordDtlNoList = Arrays.stream(ordDtlNoArr).boxed().collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 환불 사전 정보 조회
|
|
|
+ Collection<Order> cnclRtnList = orderChangeDao.getRefundPreInfo(orderChange);
|
|
|
+ Order cnclRtn = cnclRtnList.iterator().next();
|
|
|
+
|
|
|
+ // 전체 및 마지막 취소여부 설정
|
|
|
+ String delvFeeCd = "";
|
|
|
+ String allCanYn = "Y";
|
|
|
+ String allLastCanYn = "Y";
|
|
|
+ List<String> delvFeeCdList = new ArrayList<>();
|
|
|
+ for (Order order : cnclRtnList) {
|
|
|
+ int index = ordDtlNoList.indexOf(order.getOrdDtlNo());
|
|
|
+ int ordQty = order.getOrdQty();
|
|
|
+ int cnclRtnQty = order.getCnclRtnQty();
|
|
|
+
|
|
|
+ // 전체 취소 여부 설정
|
|
|
+ if ("Y".equals(allCanYn) && (index < 0 || cnclRtnReqQtyArr[index] != ordQty)) {
|
|
|
+ allCanYn = "N";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 마지막 취소 여부 설정
|
|
|
+ if ((index < 0 || cnclRtnReqQtyArr[index] != (ordQty - cnclRtnQty)) && !delvFeeCd.equals(order.getDelvFeeCd())) {
|
|
|
+ delvFeeCdList.add(order.getDelvFeeCd());
|
|
|
+ delvFeeCd = order.getDelvFeeCd();
|
|
|
+
|
|
|
+ if ("Y".equals(allLastCanYn)) {
|
|
|
+ allLastCanYn = "N";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 무통장입금 전 전체 취소여부 설정
|
|
|
+ String allCanYnBeforePayment = "N";
|
|
|
+ if ("Y".equals(allCanYnBeforePayment) && TscConstants.PayMeans.BANK_DEPOSIT.value().equals(cnclRtn.getPayMeans()) && TscConstants.PaymentStat.PAYMENT_WAIT.value().equals(cnclRtn.getPayStat())) {
|
|
|
+ allCanYnBeforePayment = "Y";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 전체 취소여부 및 취소/반품 수량 설정
|
|
|
+ for (Order order : cnclRtnList) {
|
|
|
+ int index = ordDtlNoList.indexOf(order.getOrdDtlNo());
|
|
|
+ if (index >= 0) {
|
|
|
+ // 마지막 취소 여부 설정
|
|
|
+ if (delvFeeCdList.contains(order.getDelvFeeCd())) {
|
|
|
+ order.setLastCanYn("N");
|
|
|
+ } else {
|
|
|
+ order.setLastCanYn("Y");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 변경 수량 설정
|
|
|
+ order.setOrdCanChgQty(cnclRtnReqQtyArr[index]);
|
|
|
+
|
|
|
+ cnclReqList.add(order);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ result.setString("allCanYn", allCanYn); // 전체 취소 여부
|
|
|
+ result.setString("allLastCanYn", allLastCanYn); // 전체 마지막 취소 여부
|
|
|
+ result.setString("allCanYnBeforePayment", allCanYnBeforePayment); // 무통장입금전 전체 취소 여부
|
|
|
+ result.setString("pgTid", cnclRtn.getPgTid()); // PG거래ID
|
|
|
+ result.setString("payMeans", cnclRtn.getPayMeans()); // 결제수단
|
|
|
+ result.setString("pgGb", cnclRtn.getPgGb()); // PG구분
|
|
|
+ result.set("cnclReqList", cnclReqList); // 취소신청목록
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|