Explorar o código

상품평 등록 안내 알림톡 발송 추가

gagamel %!s(int64=5) %!d(string=hai) anos
pai
achega
3d752076d1

+ 45 - 0
src/main/java/com/style24/batch/biz/dao/TsbReviewDao.java

@@ -0,0 +1,45 @@
+package com.style24.batch.biz.dao;
+
+import java.util.Collection;
+
+import org.springframework.stereotype.Repository;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.ReviewGuide;
+
+/**
+ * 상품평 Dao
+ *
+ * @author gagamel
+ * @since 2021. 5. 17
+ */
+@ShopDs
+@Repository
+public interface TsbReviewDao {
+
+	/**
+	 * 상품평등록안내발송대상건 생성
+	 * @param expireDays - 상품평만료일자
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 5. 17
+	 */
+	int createReviewGuideSendObjectList(int expireDays);
+
+	/**
+	 * 상품평등록안내발송대상 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 17
+	 */
+	Collection<ReviewGuide> getReviewGuideSendObjectList();
+
+	/**
+	 * 상품평등록안내발송완료 처리
+	 * @param reviewGuide - 상품평등록안내 정보
+	 * @author gagamel
+	 * @since 2021. 5. 17
+	 */
+	void updateReviewGuideSendComplete(ReviewGuide reviewGuide);
+
+}

+ 94 - 0
src/main/java/com/style24/batch/biz/job/marketing/TsbReviewGuideJob.java

@@ -0,0 +1,94 @@
+package com.style24.batch.biz.job.marketing;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbReviewService;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.biz.thirdparty.SsgKakaoSender;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.ReviewGuide;
+import com.style24.persistence.domain.SsgDirectMessage;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.gagaframework.web.parameter.GagaMap;
+
+/**
+ * 상품평등록안내 발송 Job
+ * 
+ * @author gagamel
+ * @since 2021. 5. 17
+ */
+@Component
+@Slf4j
+public class TsbReviewGuideJob extends TsbAbstractJob<String, String, String> {
+
+	@Autowired
+	private TscEnvsetService envsetService;
+
+	@Autowired
+	private TsbReviewService reviewService;
+
+	@Autowired
+	private SsgKakaoSender kakaoSender;
+
+	@Override
+	public String read() throws Exception {
+		return "OK";
+	}
+
+	@Override
+	public String process(String result) throws Exception {
+		// 1.상품평등록가능일수 조회
+		int expireDays = envsetService.getGoodsReviewRegisterDays(TscConstants.Site.STYLE24.value());
+		log.info("1.상품평등록가능일수(구매일로부터): {}일", expireDays);
+
+		// 2.상품평등록안내발송대상건 생성
+		int cnt = reviewService.createReviewGuideSendObjectList(expireDays);
+		log.info("2.상품평등록안내발송대상건: {}건", cnt);
+
+		if (cnt == 0) {
+			log.info("상품평등록안내발송대상건이 없습니다. 서비스를 종료합니다.");
+			return result;
+		}
+
+		// 3.상품평등록안내발송대상 목록
+		Collection<ReviewGuide> reviewGuideList = reviewService.getReviewGuideSendObjectList();
+		if (reviewGuideList != null && !reviewGuideList.isEmpty()) {
+			for (ReviewGuide reviewGuide : reviewGuideList) {
+				SsgDirectMessage dm = new SsgDirectMessage();
+				dm.setFuserid(String.valueOf(reviewGuide.getCustNo()));
+				dm.setFkkoresendtype("LMS");
+				dm.setFdestine(reviewGuide.getCellPhnno());
+
+				// 대체할 문자열 설정
+				GagaMap replaceInfo = new GagaMap();
+				replaceInfo.set("ordNo", reviewGuide.getOrdNo());
+				replaceInfo.setString("custNm", reviewGuide.getCustNm());
+
+				// 4.알림톡 발송
+				kakaoSender.send(SsgKakaoSender.KakaoAnswerSq.ReviewWrite.value(), dm, replaceInfo);
+
+				// 5.상품평등록안내발송완료 처리
+				reviewService.updateReviewGuideSendComplete(reviewGuide);
+			}
+		}
+
+		return result;
+	}
+
+	@Override
+	public String write(String result) throws Exception {
+		return result;
+	}
+
+	@Override
+	public void notify(String result) throws Exception {
+		// Do nothing
+	}
+
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 271 - 276
src/main/java/com/style24/batch/biz/service/TsbDeliveryService.java


+ 60 - 0
src/main/java/com/style24/batch/biz/service/TsbReviewService.java

@@ -0,0 +1,60 @@
+package com.style24.batch.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.batch.biz.dao.TsbReviewDao;
+import com.style24.persistence.domain.ReviewGuide;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상품평 Service
+ *
+ * @author gagamel
+ * @since 2021. 5. 17
+ */
+@Service
+@Slf4j
+public class TsbReviewService {
+
+	@Autowired
+	private TsbReviewDao reviewDao;
+
+	/**
+	 * 상품평등록안내발송대상건 생성
+	 * @param expireDays - 상품평만료일자
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 5. 17
+	 */
+	@Transactional("shopTxnManager")
+	public int createReviewGuideSendObjectList(int expireDays) {
+		return reviewDao.createReviewGuideSendObjectList(expireDays);
+	}
+
+	/**
+	 * 상품평등록안내발송대상 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 17
+	 */
+	public Collection<ReviewGuide> getReviewGuideSendObjectList() {
+		return reviewDao.getReviewGuideSendObjectList();
+	}
+
+	/**
+	 * 상품평등록안내발송완료 처리
+	 * @param reviewGuide - 상품평등록안내 정보
+	 * @author gagamel
+	 * @since 2021. 5. 17
+	 */
+	@Transactional("shopTxnManager")
+	public void updateReviewGuideSendComplete(ReviewGuide reviewGuide) {
+		reviewDao.updateReviewGuideSendComplete(reviewGuide);
+	}
+
+}

+ 17 - 4
src/main/java/com/style24/batch/biz/task/TsbMarketingTask.java

@@ -1,14 +1,15 @@
 package com.style24.batch.biz.task;
 
-import com.style24.batch.biz.job.marketing.TsbBirthdayCouponNoticeJob;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import com.style24.batch.biz.job.marketing.TsbAutoBuyConfirmJob;
+import com.style24.batch.biz.job.marketing.TsbBirthdayCouponNoticeJob;
 import com.style24.batch.biz.job.marketing.TsbCartExpirationJob;
 import com.style24.batch.biz.job.marketing.TsbExpirePointJob;
+import com.style24.batch.biz.job.marketing.TsbReviewGuideJob;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -27,13 +28,15 @@ public class TsbMarketingTask {
 
 	@Autowired
 	private TsbCartExpirationJob cartExpirationJob;
-	
+
 	@Autowired
 	private TsbExpirePointJob expirePointJob;
 
 	@Autowired
 	private TsbBirthdayCouponNoticeJob birthdayCouponNoticeJob;
 
+	@Autowired
+	private TsbReviewGuideJob reviewGuideJob;
 
 	/**
 	 * 자동구매확정 포인트 지급
@@ -49,7 +52,6 @@ public class TsbMarketingTask {
 		autoBuyConfirmJob.runById("cron.marketing.auto.buy.confirm");
 	}
 
-
 	/**
 	 * 생일쿠폰 다운로드 안내
 	 *
@@ -63,7 +65,7 @@ public class TsbMarketingTask {
 	public void birthdayCouponNoticeJob() throws Exception {
 		birthdayCouponNoticeJob.runById("cron.marketing.birthday.coupon.notice");
 	}
-	
+
 	/**
 	 * 포인트 소멸처리
 	 *
@@ -92,5 +94,16 @@ public class TsbMarketingTask {
 		cartExpirationJob.runById("cron.marketing.cart.expiration");
 	}
 
+	/**
+	 * 상품평등록안내발송 처리
+	 * @throws Exception - 예외처리
+	 * @author gagamel
+	 * @since 2021. 5. 17
+	 */
+	@Scheduled(cron = "${cron.marketing.review.guide}")
+	@Async
+	public void sendReviewRegisterGuide() throws Exception {
+		reviewGuideJob.runById("cron.marketing.review.guide");
+	}
 
 }

+ 36 - 0
src/main/java/com/style24/persistence/domain/ReviewGuide.java

@@ -0,0 +1,36 @@
+package com.style24.persistence.domain;
+
+import com.style24.core.support.util.CryptoUtils;
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품평등록안내 Domain
+ *
+ * @author gagamel
+ * @since 2021. 5. 17
+ */
+@SuppressWarnings("serial")
+@Data
+public class ReviewGuide extends TscBaseDomain {
+
+	private Integer custNo;		// 고객번호
+	private Integer ordNo;		// 주문번호
+	private Integer ordDtlNo;	// 주문상세번호
+	private String goodsCd;		// 상품코드
+	private String custNm;		// 고객명
+	private String cellPhnno;	// 휴대전화번호
+
+	// 암호화 대상 복호화 처리
+	public String getCustNm() {
+		this.custNm = CryptoUtils.decryptAES(this.custNm);
+		return this.custNm;
+	}
+
+	public String getCellPhnno() {
+		this.cellPhnno = CryptoUtils.decryptAES(this.cellPhnno);
+		return this.cellPhnno;
+	}
+
+}

+ 62 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsbReview.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.batch.biz.dao.TsbReviewDao">
+
+	<!-- 상품평등록안내발송대상건 생성 -->
+	<insert id="createReviewGuideSendObjectList" parameterType="int">
+		/* TsbReviewDao.createReviewGuideSendObjectList */
+		INSERT INTO TB_REVIEW_GUIDE (
+		       CUST_NO
+		     , ORD_NO
+		     , ORD_DTL_NO
+		     , GOODS_CD
+		     , SEND_YN
+		     , REG_DT
+		)
+		SELECT O.CUST_NO
+		     , OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , OD.GOODS_CD
+		     , 'N'           AS SEND_YN
+		     , NOW()         AS REG_DT
+		FROM   TB_ORDER O
+		     , TB_ORDER_DETAIL OD
+		WHERE  O.ORD_NO = OD.ORD_NO
+		AND    O.ORD_DT <![CDATA[>=]]> DATE_ADD(NOW(), INTERVAL -1 * #{expireDays} DAY) /*구매일로부터 90일 이내*/
+		AND    OD.ORD_DTL_STAT IN ('G013_50','G013_60','G013_70') /*배송중,배송완료,구매확정*/
+		AND    NOT EXISTS (SELECT 1
+		                   FROM   TB_REVIEW_GUIDE
+		                   WHERE  CUST_NO = O.CUST_NO
+		                   AND    ORD_NO = OD.ORD_NO
+		                   AND    ORD_DTL_NO = OD.ORD_DTL_NO
+		                   AND    GOODS_CD = OD.GOODS_CD
+		                  )
+	</insert>
+	
+	<!-- 상품평등록안내발송대상 목록 -->
+	<select id="getReviewGuideSendObjectList" resultType="ReviewGuide">
+		/* TsbReviewDao.getReviewGuideSendObjectList */
+		SELECT RG.CUST_NO
+		     , RG.ORD_NO
+		     , RG.ORD_DTL_NO
+		     , RG.GOODS_CD
+		     , C.CUST_NM
+		     , C.CELL_PHNNO
+		FROM   TB_REVIEW_GUIDE RG
+		     , TB_CUSTOMER C
+		WHERE  RG.CUST_NO = C.CUST_NO
+		AND    RG.SEND_YN = 'N' /*미발송건*/
+	</select>
+	
+	<!-- 상품평등록안내발송완료 처리 -->
+	<update id="updateReviewGuideSendComplete" parameterType="ReviewGuide">
+		/* TsbReviewDao.updateReviewGuideSendComplete */
+		UPDATE TB_REVIEW_GUIDE
+		SET    SEND_YN = 'Y'
+		WHERE  CUST_NO = #{custNo}
+		AND    ORD_NO = #{ordNo}
+		AND    ORD_DTL_NO = #{ordDtlNo}
+		AND    GOODS_CD = #{goodsCd}
+	</update>
+	
+</mapper>

+ 1 - 0
src/main/resources/config/application-locd.yml

@@ -137,6 +137,7 @@ cron:
         comback.coupon.notice : 2 22 2 29 2 ?   # 복귀할인쿠폰발급안내(매월 5일)(해야함)
         expire.point : 2 22 2 29 2 ?            # 포인트 소멸
         cart.expiration : 2 22 2 29 2 ?         # 만료기간 지난 장바구니 삭제
+        review.guide: 2 22 2 29 2 ?             # 상품평등록안내 발송 (일배치)
 
     # 주문
     order:

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio