Procházet zdrojové kódy

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

네이버페이 주문형 개발 중
xodud lee před 5 roky
rodič
revize
db8298ffb8

+ 50 - 0
pom.xml

@@ -121,6 +121,56 @@
 			<scope>system</scope>
 			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/SimpleCryptLib-1.1.0.jar</systemPath>
 		</dependency>
+
+		<dependency>
+			<groupId>org.apache.commons.discovery</groupId>
+			<artifactId>common-discovery</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/commons-discovery-0.2.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons.logging</groupId>
+			<artifactId>common-logging</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/commons-logging.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>javax.xml.soap</groupId>
+			<artifactId>saaj</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/saaj.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>wsdl4j</groupId>
+			<artifactId>wsdl4j</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/wsdl4j.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>jsr173api</groupId>
+			<artifactId>jsr173api</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/jsr173_1.0_api.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>xalan</groupId>
+			<artifactId>xalan</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xalan.jar</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>xbean</groupId>
+			<artifactId>xbean</artifactId>
+			<version>1.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xbean.jar</systemPath>
+		</dependency>
 		<!-- \\\ WEB-INF lib -->
 	</dependencies>
 	

+ 7 - 0
src/main/java/com/style24/batch/biz/checkout/base/ProductOrderChangeType.java

@@ -7,11 +7,18 @@
 
 package com.style24.batch.biz.checkout.base;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
+@JsonSerialize
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class ProductOrderChangeType implements java.io.Serializable {
     private String _value_;
     private static java.util.HashMap _table_ = new java.util.HashMap();
 
     // Constructor
+    public ProductOrderChangeType() {}
+
     protected ProductOrderChangeType(String value) {
         _value_ = value;
         _table_.put(_value_,this);

+ 8 - 0
src/main/java/com/style24/batch/biz/dao/TsbNaverPayDao.java

@@ -22,4 +22,12 @@ public interface TsbNaverPayDao {
 	 * @since  2021. 05. 27
 	 */
 	Order getSelectDt();
+
+	/**
+	 * 네이버페이 연동 실패 로그 생성
+	 * @param param
+	 * @author xodud1202
+	 * @since  2021. 05. 28
+	 */
+	void createNaverPayErrorLog(Order param);
 }

+ 11 - 10
src/main/java/com/style24/batch/biz/job/naverpay/TsbNaverPayRecvOrderCompleteJob.java

@@ -26,7 +26,7 @@ import java.util.Collection;
  */
 @Component
 @Slf4j
-public class TsbNaverPayRecvOrderCompleteJob extends TsbAbstractJob<Order, Collection<Order>, OrderChange> {
+public class TsbNaverPayRecvOrderCompleteJob extends TsbAbstractJob<ChangedProductOrderInfo[], ChangedProductOrderInfo[], Order> {
 	@Autowired
 	private TsbNaverPayService naverPayService;
 
@@ -34,29 +34,30 @@ public class TsbNaverPayRecvOrderCompleteJob extends TsbAbstractJob<Order, Colle
 	private int failCnt = 0;
 
 	@Override
-	public Order read() throws Exception {
+	public ChangedProductOrderInfo[] read() throws Exception {
 		log.info("<<<< 결제완료 수신 시작 >>>>");
 		Order time = naverPayService.setInitData();
-		ChangedProductOrderInfo[] changedProductOrderList = naverPayService.changedProductOrderList(ProductOrderChangeType.PAYED, time.getFrom(), time.getTo()); // 변경 상품주문 조회
-
-		return null;
+		return naverPayService.changedProductOrderList(ProductOrderChangeType.PAYED, time.getFrom(), time.getTo()); // 변경 상품주문 조회;
 	}
 
 	@Override
-	public Collection<Order> process(Order params) throws Exception {
-
-		return null;
+	public ChangedProductOrderInfo[] process(ChangedProductOrderInfo[] changedProductOrderList) throws Exception {
+		log.info("<<<< 수신건수: [{}]건 >>>>", changedProductOrderList.length);
+		return changedProductOrderList;
 	}
 
 	@Override
-	public OrderChange write(Collection<Order> params) throws Exception {
+	public Order write(ChangedProductOrderInfo[] changedProductOrderList) throws Exception {
+		if (changedProductOrderList != null) {
+			naverPayService.createOrderInfo(changedProductOrderList);
+		}
 
 		log.info("<<<< 결제완료 수신 종료 >>>>");
 		return null;
 	}
 
 	@Override
-	public void notify(OrderChange param) throws Exception {
+	public void notify(Order param) throws Exception {
 		super.printResult(succCnt, failCnt);
 	}
 

+ 4 - 0
src/main/java/com/style24/batch/biz/job/order/TsbOrderDepositExpirationJob.java

@@ -37,8 +37,12 @@ public class TsbOrderDepositExpirationJob extends TsbAbstractJob<Collection<Orde
 	private int succCnt = 0;
 	private int failCnt = 0;
 
+	private static Order temp;
+
 	@Override
 	public Collection<Order> read() throws Exception {
+		temp = new Order();
+		temp.setOrdNo(11);
 		return orderService.getOrderDepositExpirationList();
 	}
 

+ 156 - 34
src/main/java/com/style24/batch/biz/service/TsbNaverPayService.java

@@ -6,25 +6,29 @@ import com.style24.batch.biz.checkout.MallServiceSOAP11BindingStub;
 import com.style24.batch.biz.checkout.base.AccessCredentialsType;
 import com.style24.batch.biz.checkout.base.ChangedProductOrderInfo;
 import com.style24.batch.biz.checkout.base.ProductOrderChangeType;
+import com.style24.batch.biz.checkout.base.ProductOrderInfo;
 import com.style24.batch.biz.checkout.mall.GetChangedProductOrderListRequest;
 import com.style24.batch.biz.checkout.mall.GetChangedProductOrderListResponse;
+import com.style24.batch.biz.checkout.mall.GetProductOrderInfoListRequest;
+import com.style24.batch.biz.checkout.mall.GetProductOrderInfoListResponse;
 import com.style24.batch.biz.dao.TsbNaverPayDao;
-import com.style24.batch.biz.dao.TsbOrderDao;
+import com.style24.core.support.env.TscConstants;
 import com.style24.persistence.domain.Order;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.axis.AxisFault;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.security.Security;
 import java.security.SignatureException;
 import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Collection;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 네이버페이 Service
@@ -41,14 +45,9 @@ public class TsbNaverPayService {
 	@Autowired
 	private Environment env;
 
-	private Calendar from;
-	private Calendar to;
 
-	private String stdt;
-	private String eddt;
-
-	private String timeStamp;
-	private String signature;
+	private Calendar from, to;
+	private String stdt, eddt, timeStamp, signature;
 
 	public Order setInitData() {
 		Order time = this.getSelectDt();
@@ -59,7 +58,7 @@ public class TsbNaverPayService {
 			stdt		= "20200616000000";
 			eddt		= "20200616235959";
 
-			log.debug("stdt : eddt ---> " + stdt + " : " + eddt);
+			log.info("stdt : eddt ---> " + stdt + " : " + eddt);
 		}
 
 		Date tmp1 	= new SimpleDateFormat("yyyyMMddHHmmss").parse(stdt, new ParsePosition(0));
@@ -93,6 +92,15 @@ public class TsbNaverPayService {
 		return naverPayDao.getSelectDt();
 	}
 
+	/**
+	 * 네이버페이 주문 변경 리스트 조회
+	 * @param option, from, to
+	 * @return
+	 * @throws Exception
+	 * @author xodud1202
+	 * @since  2021. 05. 28
+	 */
+	@Transactional("shopTxnManager")
 	public ChangedProductOrderInfo[] changedProductOrderList(ProductOrderChangeType option, Calendar from, Calendar to) throws Exception {
 		ChangedProductOrderInfo[] result = null;
 
@@ -113,7 +121,7 @@ public class TsbNaverPayService {
 
 		//서명생성
 		generateSignature("GetChangedProductOrderList", secretKey);
-		log.debug("GetChangedProductOrderList(변경 상품주문 조회) :: timeStamp === " + timeStamp);
+		log.info("GetChangedProductOrderList(변경 상품주문 조회) :: timeStamp === " + timeStamp);
 
 		//인증정보
 		accessCredentialsType.setAccessLicense(accessLicense);
@@ -139,45 +147,159 @@ public class TsbNaverPayService {
 		}
 
 		//결과 출력
-		/*if ("SUCCESS".equals(resultStr)) {
+		if ("SUCCESS".equals(resultStr)) {
 			result = response.getChangedProductOrderInfoList();
 		} else {
-			CommonTemp commonTemp = new CommonTemp();
+			Order fail = new Order();
+
+			log.info("response.getResponseType()) : " + response.getResponseType());
+			log.info("option.toString() : " + option.toString());
+			log.info("Code : " + response.getError().getCode());
+			log.info("Message : " + response.getError().getMessage());
+			log.info("Detail : " + response.getError().getDetail());
+
+			fail.setErrorReason("변경상품주문조회 에러");
+			fail.setOptCd(option.toString());
+			fail.setResultCd(response.getError().getCode());
+			fail.setResultMsg(response.getError().getMessage());
+			fail.setSiteCd(mallId);
+			fail.setAccessLicense(accessLicense);
+			fail.setSecretKey(secretKey);
+			fail.setRegNo(0);
+
+			naverPayDao.createNaverPayErrorLog(fail);
+		}
+
+		return result;
+	}
+
+	/**
+	 * 결제 정보 수정
+	 * @param changedProductOrderList
+	 * @return
+	 * @author xodud1202
+	 * @since  2021. 05. 28
+	 */
+	@Transactional("shopTxnManager")
+	public Order createOrderInfo(ChangedProductOrderInfo[] changedProductOrderList) throws Exception {
+		String[] productOrderIdList = new String[changedProductOrderList.length];
+		String orderStat = TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value();	// 결제완료
+
+		for (int i=0; i<changedProductOrderList.length; i++) {
+			productOrderIdList[i] = changedProductOrderList[i].getProductOrderID();
+		}
+
+		ProductOrderInfo[] productOrderInfo = productOrderInfoList(productOrderIdList);
+
+		byte[] encryptKey = null;
+		encryptKey = SimpleCryptLib.generateKey(timeStamp, env.getProperty("naver.pay.secret.key"));
 
-			log.debug("response.getResponseType()) : " + response.getResponseType());
-			log.debug("option.toString() : " + option.toString());
-			log.debug("Code : " + response.getError().getCode());
-			log.debug("Message : " + response.getError().getMessage());
-			log.debug("Detail : " + response.getError().getDetail());
+		// SMS 주문번호 보내기 ??
+		List<Order> naverPayList = new ArrayList<Order>();
 
-			commonTemp.setData_01("변경상품주문조회 에러");
-			commonTemp.setData_02(option.toString());
-			commonTemp.setData_03(response.getError().getCode());
-			commonTemp.setData_04(response.getError().getMessage());
-			commonTemp.setData_05("");
+		String rcpDtlAddr 	= "";
+		String orderNo = "";
+		String naverSeq = "";
 
-			commonTemp.setData_06(siteName);
-			commonTemp.setData_07(mallId);
-			commonTemp.setData_08(accessLicense);
-			commonTemp.setData_09(secretKey);
-			commonTemp.setData_10("");
+		if (productOrderInfo != null) {
+			for (int i=0; i<productOrderInfo.length; i++) {
+				rcpDtlAddr 	= "";
 
-			commonTempService.insertCommonTempNpayLog(commonTemp);
-		}*/
+				Order naverParams = new Order();
+				orderNo 	= productOrderInfo[i].getProductOrder().getMerchantCustomCode1();	// 가맹점 주문번호
+				// naverSeq 	= productOrderInfo[i].getProductOrder().getProductOrderID();		// 네이버주문번호순번
+
+				if (orderNo != null) {
+					naverParams.setOrdNo(Integer.parseInt(orderNo));
+					naverParams.setNpayOrdNo(Integer.parseInt(productOrderInfo[i].getOrder().getOrderID())); // 네이버 주문번호
+
+					// 2019.01.04 전석훈 추가
+					naverParams.setSiteCd(productOrderInfo[i].getProductOrder().getMallID());
+
+					// 이어서 추가 >> 주문 데이터 확인하는데 세트상품 확인 방법 체크할것.
+				}
+			}
+		}
 
 		return null;
 	}
 
-	/*
+	/**
+	 * 주문상세 정보 조회
+	 * @param productOrderIdList
+	 * @return
+	 * @author xodud1202
+	 * @since  2021. 05. 28
+	 */
+	@Transactional("shopTxnManager")
+	public ProductOrderInfo[] productOrderInfoList(String[] productOrderIdList) {
+		ProductOrderInfo[] result =  null;
+		try {
+			if (productOrderIdList != null) {
+				Security.addProvider(new BouncyCastleProvider());
+				AccessCredentialsType accessCredentialsType = new AccessCredentialsType();
+				MallServiceLocator MSL = new MallServiceLocator(env.getProperty("naver.pay.port.address"));
+				MallServiceSOAP11BindingStub stub = new MallServiceSOAP11BindingStub();
+				stub = (MallServiceSOAP11BindingStub) MSL.getMallServiceSOAP11Port();
+				GetProductOrderInfoListRequest request = new GetProductOrderInfoListRequest();
+				GetProductOrderInfoListResponse response = new GetProductOrderInfoListResponse();
+
+				//서명생성
+				generateSignature("GetProductOrderInfoList", env.getProperty("naver.pay.secret.key"));
+				log.info("GetProductOrderInfoList(상품주문 내역 상세 조회) :: timeStamp === " + timeStamp);
+
+				//인증정보
+				accessCredentialsType.setAccessLicense(env.getProperty("naver.pay.access.license"));
+				accessCredentialsType.setSignature(signature);
+				accessCredentialsType.setTimestamp(timeStamp);
+
+				request.setAccessCredentials(accessCredentialsType);
+				request.setDetailLevel("Full");
+				request.setVersion(env.getProperty("naver.pay.version"));
+				request.setRequestID("");
+				request.setProductOrderIDList(productOrderIdList);
+
+				//GetChangedProductOrderList Response 수신
+				response = stub.getProductOrderInfoList(request);
+
+				String resultStr = "";
+				if (response.getResponseType() != null) {
+					resultStr = response.getResponseType().toUpperCase();
+				}
+
+				//결과 출력
+				if ("SUCCESS".equals(resultStr)) {
+					result = response.getProductOrderInfoList();
+				} else {
+					log.info("상품주문내역조회 에러");
+					log.info("Code    : " + response.getError().getCode());
+					log.info("Message : " + response.getError().getMessage());
+					log.info("Detail  : " + response.getError().getDetail());
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		log.info("***** productOrderInfoList end *****");
+
+		return result;
+	}
+
+	/**
 	 * 서명생성
+	 * @param operationName
+	 * @param secreKey
+	 * @author xodud1202
+	 * @since  2021. 05. 28
 	 */
-	private void generateSignature(String operationName, String secreKey) {
+	private void generateSignature(String operationName, String secretKey) {
 		timeStamp = SimpleCryptLib.getTimestamp();
 
 		String data = timeStamp + env.getProperty("naver.pay.service.name") + operationName;
 
 		try {
-			signature = SimpleCryptLib.generateSign(data, secreKey);
+			signature = SimpleCryptLib.generateSign(data, secretKey);
 		} catch (SignatureException e) {
 			log.error(e.getMessage()); //서명정보 실패
 		}

+ 1 - 1
src/main/java/com/style24/batch/biz/task/TsbGoodsTask.java

@@ -233,7 +233,7 @@ public class TsbGoodsTask {
 	 * @throws Exception
 	 */
 	@Scheduled(cron = "${cron.goods.wms.stock.receive}")
-//	@Scheduled(fixedDelay = 3500000)
+	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void wmsStockReceiveJob() throws Exception {
 		goodsWmsGoodsStockJob.runById("cron.goods.wms.stock.receive");

+ 1 - 1
src/main/java/com/style24/batch/biz/task/TsbHealthCheckTask.java

@@ -21,7 +21,7 @@ public class TsbHealthCheckTask {
 	/**
 	 * fixedDelay = 30000: 이전 수행이 종료되고, 30초 이후 해당 job을 수행함
 	 */
-	@Scheduled(fixedDelay = 30000)
+	//@Scheduled(fixedDelay = 30000)
 	@Async
 	public void printCurrentTime() throws Exception {
 		log.info("STYLE24 Batch is running. (now : {})", (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).format(new Date()));

+ 3 - 2
src/main/java/com/style24/batch/biz/task/TsbNaverPayTask.java

@@ -31,8 +31,9 @@ public class TsbNaverPayTask {
 	 * @since 2021. 05. 27
 	 */
 	@Scheduled(cron = "${cron.naverPay.order.batch}")
-	@Async
-	public void cartDeadlineExpireJob() throws Exception {
+	//@Scheduled(fixedDelay = 3500000)
+	//@Async
+	public void naverPayOrderCompleteJob() throws Exception {
 		recvOrderCompleteJob.runById("cron.naverpay.recv.order");
 	}
 }

+ 1 - 0
src/main/java/com/style24/batch/biz/task/TsbOrderTask.java

@@ -38,6 +38,7 @@ public class TsbOrderTask {
 	 * @since 2021. 05. 03
 	 */
 	@Scheduled(cron = "${cron.order.cart.deadline.expire}")
+	// @Scheduled(fixedDelay = 3500000)
 	@Async
 	public void cartDeadlineExpireJob() throws Exception {
 		cartExpirationJob.runById("cron.order.cart.deadline.expire");

+ 27 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsbNaverPay.xml

@@ -4,9 +4,35 @@
 
 	<!-- 네이버페이 조회 시간(최근 3시간) -->
 	<select id="getSelectDt" resultType="Order">
-		/* TsbNaverPay.getSelectDt : 무통장입금 입금기한 만료 주문 조회 */
+		/* TsbNaverPay.getSelectDt : 네이버페이 조회 시간(최근 3시간) */
 		SELECT CONCAT(DATE_FORMAT(NOW() + 'INTERVAL -3 HOUR', '%Y%m%d%H'), '0000') AS STDT
 			 , CONCAT(DATE_FORMAT(NOW() + 'INTERVAL -3 HOUR', '%Y%m%d%H'), '5959') AS STDT
 		FROM   DUAL
 	</select>
+
+	<!-- 네이버페이 연동 실패 로그 생성 -->
+	<insert id="createNaverPayErrorLog" parameterType="Order">
+		/* TsbNaverPay.createNaverPayErrorLog : 네이버페이 연동 실패 로그 생성 */
+		INSERT INTO TB_NAVERPAY_FAIL_LOG (
+			  ERROR_REASON
+			, OPT_CD
+			, RESULT_CD
+			, RESULT_MSG
+			, SITE_CD
+			, ACCESS_LICENSE
+			, SECRET_KEY
+			, REG_NO
+			, REG_DT
+		) VALUES (
+		      #{errorReason}
+		    , #{optCd}
+		    , #{resultCd}
+		    , #{resultMsg}
+		    , #{siteCd}
+		    , #{accessLicense}
+		    , #{secretKey}
+		    , #{regNo}
+		    , NOW()
+		)
+	</insert>
 </mapper>

binární
src/main/webapp/WEB-INF/lib/commons-discovery-0.2.jar


binární
src/main/webapp/WEB-INF/lib/commons-logging.jar


binární
src/main/webapp/WEB-INF/lib/jsr173_1.0_api.jar


binární
src/main/webapp/WEB-INF/lib/saaj.jar


binární
src/main/webapp/WEB-INF/lib/wsdl4j.jar


binární
src/main/webapp/WEB-INF/lib/xalan.jar


binární
src/main/webapp/WEB-INF/lib/xbean.jar