Quellcode durchsuchen

Merge remote-tracking branch 'origin/xodud1202' into card007

# Conflicts:
#	src/main/java/com/style24/core/biz/dao/TscOrderChangeDao.java
card007 vor 5 Jahren
Ursprung
Commit
04d4039481

+ 9 - 0
src/main/java/com/style24/core/biz/dao/TscOrderChangeDao.java

@@ -508,6 +508,15 @@ public interface TscOrderChangeDao {
 	Payment getAddPayCostPaymentInfo(Payment payment);
 
 	/**
+	 * 취소/반품 환불 사전 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Order>
+	 * @author card007
+	 * @since 2021. 03. 25
+	 */
+	Collection<Order> getRefundPreInfo(OrderChange orderChange);
+
 	 * 교환 상품 재고 조회
 	 *
 	 * @param Order

+ 9 - 0
src/main/java/com/style24/core/biz/dao/TscScmDao.java

@@ -108,4 +108,13 @@ public interface TscScmDao {
 	 * @since 2020. 11. 30
 	 */
 	int updateOrderDetailInvoice(Order order);
+
+	/**
+	 * 주문 상세 송장번호 등록
+	 *
+	 * @param Order
+	 * @author xodud1202
+	 * @since 2021. 04. 21
+	 */
+	void createOrderDetailInvoice(Order param);
 }

+ 145 - 0
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -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;
+	}
 }

+ 61 - 2
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -22,6 +22,7 @@ import com.style24.core.biz.dao.TscScmDao;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Point;
 
 import lombok.extern.slf4j.Slf4j;
@@ -2072,8 +2073,66 @@ public class TscOrderService {
 		orderDao.createOrderDetailAllHst(order);
 		
 	}
-	
-	
+
+	/**
+	 * 입점 발주 최종 처리
+	 * @param Order
+	 * @return List<Order>
+	 * @author xodud1202
+	 * @since 2021. 04. 21
+	 */
+	@Transactional("shopTxnManager")
+	public void updateSellerDelvStartAndPartCancel(Collection<Order> params, int userNo) {
+		try {
+			/* TODO 조회 후 취소 ? 그냥 취소 ? 추후 결품 취소 로직 나오면 취소 진행
+			 * 주문번호별로 ordDtlNoArr[] 배열과 cnclRtnReqQtyArr[] 배열에 담고, 각 custNo 가져오고, 비회원이면 ordNm, orderNo
+			 * OrderChange 객체에 담아서 넘긴다.
+			 * 무통장입금의 경우 환불계좌가 없을 경우 취소 신청으로 세팅. > 만들어야하나 ?
+			 * 무통장입금 환불계좌가 있으면 넘기면됨. */
+
+			// 주문번호별 상세번호, 취소수량 및 주문정보 세팅
+			List<OrderChange> cancelDataList = new ArrayList<OrderChange>();
+			for(Order param : params) {
+				boolean chkOrd = true;
+
+				for(OrderChange cancelData : cancelDataList) {
+					if(param.getOrdNo().equals(cancelData.getOrdNo())) {
+						chkOrd = false;
+					}
+				}
+
+				if(chkOrd) {
+					OrderChange change = new OrderChange();
+					change.setOrdNo(param.getOrdNo());
+					change.setCustNo(param.getCustNo());
+					change.setOrderNm(param.getOrdNm());
+					// cancelDataList.add(param);
+				}
+			}
+
+			// TODO 취소 완료 알림톡 발송 에정
+
+			// 결품 취소 후 수량이 남은 경우 배송중처리
+			for(Order param : params) {
+				if(param.getOrdQty() - param.getCnclRtnQty() > 0) {
+					// 주문 상세 (TB_ORDER_DETAIL) 배송중으로 변경
+					param.setOrdDtlStat(TscConstants.OrderDetailStat.SHIPPING.value());
+					param.setRegNo(userNo);
+					param.setUpdNo(userNo);
+					orderDao.changedOrdDtlStat(param);
+					// 주문 상품 상세 (TB_ORDER_DETAIL_ITEM) 배송중으로 변경
+					scmDao.updateOrderDetailItemStat(param);
+					// 주문 상세 송장번호 등록
+					scmDao.createOrderDetailInvoice(param);
+					// 주문 변경 이력 저장
+					orderDao.createOrderDetailHst(param);
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw new IllegalArgumentException(e);
+		}
+	}
 
 }
 

+ 3 - 0
src/main/java/com/style24/persistence/domain/OrderChange.java

@@ -62,6 +62,9 @@ public class OrderChange extends TscBaseDomain {
 	private int[] ordDtlNoArr;
 	private int[] cnclRtnReqQtyArr;
 	private String[] chgOptCd2Arr;
+
+	private List<Integer> ordDtlNoList;
+	private List<Integer> cnclRtnReqQtyList;
 	
 	private String wdGb;
 	private String recipNm;

+ 5 - 5
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -1023,9 +1023,9 @@
 		     , PLAN_DTL_SQ
 		     , SOCIAL_SQ
 		     , #{regNo}
-		     , REG_DT
+		     , NOW()
 		     , #{regNo}
-		     , UPD_DT
+		     , NOW()
 		  FROM TB_ORDER_DETAIL
 		 WHERE ORD_DTL_NO = #{ordDtlNo}
 	</insert>
@@ -2782,7 +2782,7 @@
 	
 	<!-- 주문상세이력 생성-->
 	<insert id="createOrderDetailAllHst" parameterType="Order">
-		/* Order.createOrderDetailHst */
+		/* Order.createOrderDetailAllHst */
 		INSERT INTO TB_ORDER_DETAIL_HST (
 		    ORD_DTL_NO
 		    , ORD_NO
@@ -2928,9 +2928,9 @@
 		     , PLAN_DTL_SQ
 		     , SOCIAL_SQ
 		     , #{custNo}
-		     , REG_DT
+		     , NOW()
 		     , #{custNo}
-		     , UPD_DT
+		     , NOW()
 		  FROM TB_ORDER_DETAIL
 		 WHERE ORD_NO = #{ordNo}
 	</insert>

+ 36 - 3
src/main/java/com/style24/persistence/mybatis/shop/TscScm.xml

@@ -29,8 +29,10 @@
 		     , OD.ORD_DTL_NO
 		     , OD.ORD_DTL_STAT
 		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT ) AS ORD_DTL_STAT_NM
+		     , O.CUST_NO
 		     , O.ORD_NM
 		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , P.PG_GB
 		     , P.PAY_MEANS
 		     , FN_GET_CODE_NM('G014', P.PAY_MEANS  ) AS PAY_MEANS_NM
 		     , O.ORD_PHNNO
@@ -50,6 +52,9 @@
 		     , OD.REAL_ORD_AMT
 		     , OD.INVOICE_NO
 		     , OD.SHIP_COMP_CD
+		     , CAC.BANK_CD
+		     , CAC.ACCOUNT_NO
+		     , CAC.ACCOUNT_NM
 		FROM   TB_ORDER O
 		INNER  JOIN TB_ORDER_DETAIL OD
 		ON     O.ORD_NO = OD.ORD_NO
@@ -63,6 +68,10 @@
 		ON     OD.GOODS_CD = G.GOODS_CD
 		INNER  JOIN TB_DELIVERY_ADDR DA
 		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		LEFT   OUTER JOIN TB_CUST_ACCOUNT CAC
+		ON     CAC.CUST_NO = O.CUST_NO
+		AND    CAC.DEFAULT_YN = 'Y'
+		AND    CAC.DEL_YN = 'N'
 		WHERE  1=1
 		AND    DA.RECIP_BASE_ADDR IS NOT NULL
 		AND    G.SELF_GOODS_YN = 'N'
@@ -204,7 +213,7 @@
 
 	<!-- 주문/배송 > 입점업체미발주목록 > 주문상세 목록 -->
 	<select id="getOrderDetailInfo" parameterType="Order" resultType="Order">
-		/* TsaOrder.getOrderDetailInfo */
+		/* tscScm.getOrderDetailInfo */
 		SELECT O.ORD_NO
 			 , O.MALL_GB
 			 , DATE_FORMAT(O.ORD_DT, '%Y%m%d%H%i%S')                             AS ORD_DT
@@ -273,11 +282,11 @@
 
 	<!-- 주문/배송 > 주문상세정보 변경 - 송장번호 적용(입점)  -->
 	<update id="updateOrderDetailInvoice" parameterType="Order">
-		/* TsaOrder.updateOrderDetailInvoice */
+		/* tscScm.updateOrderDetailInvoice */
 		UPDATE TB_ORDER_DETAIL
 		SET ORD_DTL_STAT    = 'G013_40'
 		  , INVOICE_NO      = REPLACE(#{invoiceNo}, '-', '')
-		  , INVOICE_SEND_YN = 'Y'
+		  /* 사용안함 - 20210421 KSU C 확인 , INVOICE_SEND_YN = 'Y' */
 		  , SHIP_COMP_CD    = #{shipCompCd}
 		  , UPD_NO          = #{updNo}
 		  , UPD_DT          = CURRENT_TIMESTAMP()
@@ -285,6 +294,30 @@
 		AND   ORD_DTL_STAT = 'G013_30'
 		AND   SUPPLY_COMP_CD = #{supplyCompCd}
 	</update>
+
+	<!-- 주문 상세 송장번호 등록 -->
+	<insert id="createOrderDetailInvoice" parameterType="Order">
+		/* tscScm.createOrderDetailInvoice : 주문 상세 송장번호 등록 */
+		INSERT INTO TB_ORDER_DETAIL_INVOICE (
+		          ORD_NO
+		        , ORD_DTL_NO
+		        , INVOICE_NO
+		        , DEL_YN
+		        , REG_NO
+		        , REG_DT
+		        , UPD_NO
+		        , UPD_DT
+		) VALUES (
+		          #{ordNo}
+		        , #{ordDtlNo}
+		        , #{invoiceNo}
+		        , 'N'
+		        , #{regNo}
+		        , NOW()
+		        , #{updNo}
+		        , NOW()
+		)
+	</insert>
 </mapper>