Просмотр исходного кода

이태영 - 20210616 네이버페이 주문형 개발 중

xodud lee 4 лет назад
Родитель
Сommit
e5958c2ef3

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

@@ -602,6 +602,15 @@ public interface TscOrderDao {
 	 * @since 2021. 03. 09
 	 */
 	int updateOrder(Order order);
+
+	/**
+	 * 31. 주문정보 결제완료 상태 업데이트 (무통장입금 입금 전 PAY_DT NULL로 변경
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 06. 24
+	 */
+	int updateOrderPayDtNull(Order order);
 	
 	/**
 	 * 32. 주문상세정보 결제완료 상태 업데이트 

+ 79 - 0
src/main/java/com/style24/core/biz/service/TscNaverPayService.java

@@ -469,6 +469,85 @@ public class TscNaverPayService {
 		}
 	}
 
+	/**
+	 * 네이버페이 반품 반려 정보 송부
+	 * @param chnge
+	 * @param userNo
+	 * @author xodud1202
+	 * @since  2021. 06. 24
+	 */
+	public void sendNaverPayRejectReturn(OrderChange param, int userNo) throws Exception {
+		Collection<OrderChange> rejectList = orderChangeDao.approveCancelRequestInfo(param);
+
+		Security.addProvider(new BouncyCastleProvider());
+		AccessCredentialsType accessCredentialsType = new AccessCredentialsType();
+		MallServiceLocator MSL = new MallServiceLocator(env.getProperty("naverPay.port.address"));
+		MallServiceSOAP11BindingStub stub = new MallServiceSOAP11BindingStub();
+
+		stub = (MallServiceSOAP11BindingStub) MSL.getMallServiceSOAP11Port();
+
+		RejectReturnRequest rejectReturnRequest 	= null;
+		RejectReturnResponse rejectReturnResponse 	= null;
+
+		for (OrderChange change : rejectList) {
+			// 서명생성
+			generateSignature("RejectReturn", env.getProperty("naverPay.secret.key"));
+			log.debug("RejectReturn(취소반려 주문 네이버로 송신) :: timeStamp === " + timeStamp);
+
+			//인증정보
+			accessCredentialsType.setAccessLicense(env.getProperty("naverPay.access.license"));
+			accessCredentialsType.setSignature(signature);
+			accessCredentialsType.setTimestamp(timeStamp);
+
+			rejectReturnRequest = new RejectReturnRequest();
+			rejectReturnRequest.setAccessCredentials(accessCredentialsType);
+			rejectReturnRequest.setDetailLevel("Full");
+			rejectReturnRequest.setVersion(env.getProperty("naverPay.version"));
+			rejectReturnRequest.setRequestID("");
+			rejectReturnRequest.setProductOrderID(change.getNpayOrdDtlNo());
+			rejectReturnRequest.setRejectDetailContent("취소반려");
+
+			rejectReturnResponse = stub.rejectReturn(rejectReturnRequest);
+
+			String resultStr = "";
+			if (rejectReturnResponse.getResponseType() != null) {
+				resultStr = rejectReturnResponse.getResponseType().toUpperCase();
+			}
+
+			if ("SUCCESS".equals(resultStr)) {
+				log.debug("반품반려 성공 주문번호===>"+change.getOrdNo());
+				log.debug("반품반려 성공 네이버상품주문번호===>"+change.getNpayOrdDtlNo());
+			} else {
+				log.debug("반품반려 에러");
+				log.debug("주문번호 ===> " + change.getOrdNo());
+				log.debug("네이버상품주문번호 ===> " + change.getNpayOrdDtlNo());
+				log.debug("Code : " + rejectReturnResponse.getError().getCode());
+				log.debug("Message : " + rejectReturnResponse.getError().getMessage());
+				log.debug("Detail : " + rejectReturnResponse.getError().getDetail());
+
+				try {
+					Order fail = new Order();
+					fail.setErrorReason("반품 반려 데이터 송부 에러");
+					fail.setOrdNo(change.getOrdNo());
+					fail.setNpayOrdDtlNo(change.getNpayOrdDtlNo());
+					fail.setOptCd("sendNaverPayRejectReturn");
+					fail.setResultCd(rejectReturnResponse.getError().getCode());
+					fail.setResultMsg(rejectReturnResponse.getError().getMessage());
+					fail.setMallCd(env.getProperty("naverPay.shop.id"));
+					fail.setAccessLicense(env.getProperty("naverPay.access.license"));
+					fail.setSecretKey(env.getProperty("naverPay.secret.key"));
+					fail.setRegNo(userNo);
+
+					orderDao.createNaverPayErrorLog(fail);
+				} catch(Exception e) {
+					e.printStackTrace();
+				}
+
+				throw new IllegalStateException("실패");
+			}
+		}
+	}
+
 	/**
 	 * 서명생성
 	 * @param operationName

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

@@ -610,6 +610,7 @@ public class TscOrderChangeService {
 				
 				kakaoPayService.cancelKakaoPayment(pg);
 			} else if (TscConstants.PgGb.NAVER_ORDER.value().equals(pgGb)) {
+				pg.setPayAmt(-pg.getPartCancelAmt());
 				orderDao.insertPaymentCancel(pg);
 			}
 
@@ -1302,6 +1303,7 @@ public class TscOrderChangeService {
 
 			// 4. 부분취소 처리 정보 설정
 			result.setInt("ordNo"			, orderChange.getOrdNo());					// 주문번호
+			result.setInt("ordChgSq"		, orderChange.getOrdChgSq());					// 주문번호
 			result.setString("chgReason"	, orderChange.getChgReason());				// 변경사유
 			result.setString("chgReasonNm"	, orderChange.getChgReasonNm());			// 변경사유명
 			result.setString("chgMemo"		, orderChange.getChgMemo());				// 변경메모
@@ -3955,4 +3957,54 @@ public class TscOrderChangeService {
 	public Payment getPaymentInfo(Payment param) {
 		return orderChangeDao.getPaymentInfo(param);
 	}
+
+	/**
+	 * 반품 신청
+	 * @param orderChange
+	 * @return
+	 * @author card007
+	 * @since 2021. 03. 30
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap returnReq(OrderChange orderChange) {
+		// 2. 환불 사전 정보 조회
+		GagaMap refundPreInfo = getRefundPreInfo(orderChange);
+		List<Order> returnReqList = (List<Order>)refundPreInfo.get("cnclReqList");
+		String allLastCanYn = refundPreInfo.getString("allLastCanYn");
+		String supplyCompCd = refundPreInfo.getString("supplyCompCd");
+
+		// 3. 환불금액계산
+		GagaMap result = orderRefundService.cnclRtnRefundAmt(returnReqList);
+
+		// 4. 주문변경 기본정보 설정
+		result.set("ordNo", orderChange.getOrdNo());					// 주문번호
+		result.setInt("custNo", orderChange.getCustNo());				// 고객번호
+		// result.set("ordChgSq", orderChange.getOrdChgSq());			// 주문변경번호
+		result.set("chgReason", orderChange.getChgReason());			// 변경사유
+		result.set("chgMemo", orderChange.getChgMemo());				// 변경메모
+
+		result.set("accountNo", orderChange.getAccountNo());			// 환불계좌번호
+		result.set("accountNm", orderChange.getAccountNm());			// 환불계좌예금주명
+		result.set("bankCd", orderChange.getBankCd());					// 환불계좌은행코드
+
+		result.setString("allLastCanYn", allLastCanYn);					// 전체 마지막 취소 여부
+		result.set("isCustomer", orderChange.getIsCustomer());			// 변경사유 (고객, 회사)
+		result.set("wdGb", orderChange.getWdGb());						// 회수방법
+		result.set("wdInvoiceNo", orderChange.getWdInvoiceNo());		// 회수송장번호
+
+		// 5. 주문변경 회수지정보 추가
+		result.set("chgerNm", orderChange.getChgerNm());				// 변경자명
+		result.set("chgerEmail", orderChange.getChgerEmail());			// 변경자이메일주소
+		result.set("chgerZipcode", orderChange.getChgerZipcode());		// 회수지우편번호
+		result.set("chgerBaseAddr", orderChange.getChgerBaseAddr());	// 회수지기본주소
+		result.set("chgerDtlAddr", orderChange.getChgerDtlAddr());		// 회수지상세주소
+		result.set("chgerPhnno", orderChange.getChgerPhnno());			// 변경자핸드폰번호
+		result.set("chgerTelno", orderChange.getChgerTelno());			// 변경자전화번호
+		result.set("chgerRtnMemo", orderChange.getChgerRtnMemo());		// 반품메모
+
+		// 6. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
+		GagaMap map = returnRequest(result);
+
+		return map;
+	}
 }

+ 7 - 3
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -1640,14 +1640,15 @@ public class TscOrderService {
 		// 1.1 무통장입금시 입금대기 
 		if (TscConstants.PayMeans.BANK_DEPOSIT.value().equals(order.getPayMeans())) {
 			order.setOrdDtlStat(TscConstants.OrderDetailStat.DEPOSIT_WAIT.value());
+			// 2. 주문 결제시간 업데이트 (무통장 입금 대기시 PAY_DT를 NULL로 변경)
+			orderDao.updateOrderPayDtNull(order);
 		}
 		// 1.2 그외는 결제완료 표기
 		else {
 			order.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value());
+			// 2. 주문 결제시간 업데이트
+			orderDao.updateOrder(order);
 		}
-				
-		// 2. 주문 결제시간 업데이트
-		orderDao.updateOrder(order);
 		
 		// 3. 주문상세 결제완료 상태 업데이트
 		orderDao.updateOrderDetail(order);
@@ -1831,6 +1832,9 @@ public class TscOrderService {
 		// 1. 무통장입금시 입금 결제완료
 		order.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value());
 		order.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());
+
+		// 1.5 TB_ORDER DATA PAY_DT UPDATE >> 김성욱차장님 요청으로 추가 : 20210624 - xodud1202
+		orderDao.updateOrder(order);
 		
 		// 2. 주문상세 결제완료 상태 업데이트
 		orderDao.updateOrderDetail(order);

+ 19 - 0
src/main/java/com/style24/core/support/env/TscConstants.java

@@ -308,6 +308,25 @@ public class TscConstants {
 		}
 	}
 
+	// 반품 요청 사유
+	public enum OrderReturnReason {
+		CHANGE_MIND("G688_10"),		// 단순변심
+		NG_GOODS("G688_11"),			// 상품의 결함이 있음
+		INCORRECT_DELV("G688_12"),	// 주문상품과 다른상품이 배송됨
+		DELAY_DELV("G688_13"),		// 상품이 늦게 배송됨
+		BROKEN("G688_14"),			// 상품이 파손되어 배송됨
+		NOT_DELV_ALL("G688_15"),		// 일부상품이 배송되지 않음
+		INCORRECT_OPTION("G688_16");	// 상품 정보와 상이함
+
+		private String value;
+		private OrderReturnReason(String value) {
+			this.value = value;
+		}
+		public String value() {
+			return value;
+		}
+	}
+
 	// 교환 요청 사유
 	public enum OrderChangeReason {
 		CHANGE_OPTION("G689_10"),		// 사이즈 변경

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

@@ -226,4 +226,5 @@ public class OrderChange extends TscBaseDomain {
 	private int encloseFee;	
 	private int goodsCnt;
 	private String ordChgGb;
+	private String npayOrdDtlNo;
 }

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

@@ -2727,7 +2727,7 @@
 	<update id="updatePaymentOrderComplete" parameterType="Payment" keyProperty="paySq">
 		/* TscOrder.updatePaymentOrderComplete : TB_PAYMENT 결제승인 데이터 */
 		UPDATE TB_PAYMENT SET
-		      PAY_DT = NOW()
+		      PAY_DT = CASE WHEN #{payStat} = 'G016_30' THEN NOW() ELSE NULL END
 		    , PG_CPN_AMT = #{pgCpnAmt}
 		    , NPAY_PNT_AMT = #{npayPntAmt}
 		    , PAY_STAT = #{payStat}
@@ -3375,6 +3375,16 @@
 		WHERE  1=1
 		AND    ORD_NO = #{ordNo}
 	</update>
+
+	<!-- 31. 주문정보 결제완료 상태 업데이트 -->
+	<update id="updateOrderPayDtNull" parameterType="Order">
+		UPDATE TB_ORDER
+		SET    PAY_DT = NULL
+		     , UPD_NO = #{custNo}
+		     , UPD_DT = NOW()
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo}
+	</update>
 	
 	<!-- 32. 주문상세정보 결제완료 상태 업데이트 -->
 	<update id="updateOrderDetail" parameterType="Order">

+ 1 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -3000,6 +3000,7 @@
 	<select id="approveCancelRequestInfo" parameterType="OrderChange" resultType="OrderChange">
 		/* TscOrderChange.approveCancelRequestInfo */
 		SELECT OD.ORD_NO
+		     , OD.NPAY_ORD_DTL_NO
 		     , O.CUST_NO
 		     , O.ORD_NM
 		     , OCD.ORD_DTL_NO