瀏覽代碼

상품평의 동영상만 등록 시 포인트지급은 대기로 처리, 그 외는 즉시지급

gagamel 4 年之前
父節點
當前提交
3697c3b9d5

+ 29 - 2
src/main/java/com/style24/admin/biz/dao/TsaReviewDao.java

@@ -60,7 +60,34 @@ public interface TsaReviewDao {
 	void updateReviewUserReply(Review review);
 
 	/**
-	 * 동영상상품평포인트 생성
+	 * 상품평구분 조회 (T:텍스트상품평, I:포토상품평, V:동영상상품평, IV:포토+동영상상품평)
+	 * @param review - 상품평 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 12. 20
+	 */
+	String getReviewGb(Review review);
+	
+	/**
+	 * 상품평포인트 월지급횟수 조회
+	 * @param review - 상품평 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 12. 20
+	 */
+	int getReviewPointGiveMonthCount(Review review);
+	
+	/**
+	 * 상품평포인트 동일상품지급횟수 조회
+	 * @param review - 상품평 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 12. 20
+	 */
+	int getReviewPointGiveCount(Review review);
+	
+	/**
+	 * 동영상상품평포인트 생성(동영상만 등록한 경우 처리)
 	 * @param review - 상품평 정보
 	 * @author gagamel
 	 * @since 2021. 5. 17
@@ -68,7 +95,7 @@ public interface TsaReviewDao {
 	void createVideoReviewPoint(Review review);
 
 	/**
-	 * 동영상상품평포인트이력 생성
+	 * 동영상상품평포인트이력 생성(동영상만 등록한 경우 처리)
 	 * @param review - 상품평 정보
 	 * @author gagamel
 	 * @since 2021. 5. 17

+ 51 - 25
src/main/java/com/style24/admin/biz/service/TsaReviewService.java

@@ -88,34 +88,60 @@ public class TsaReviewService {
 	 */
 	@Transactional("shopTxnManager")
 	public void updateVideoReviewDisplay(Review review) {
-		// 포인트 처리
-		// 동영상(=포토)상품평포인트금액
-		int pntAmt = envsetService.getPhotoReviewPoint(TscConstants.Site.STYLE24.value());
-		review.setGvPntAmt(pntAmt);
-		review.setRmPntAmt(pntAmt);
+		review.setPntGiveStat("G043_30"); // 포인트지급반영
 		review.setRegNo(TsaSession.getInfo().getUserNo());
 		review.setUpdNo(TsaSession.getInfo().getUserNo());
-
-		// 동영상상품평포인트 생성
-		reviewDao.createVideoReviewPoint(review);
-
-		// 고객포인트일련번호 설정
-		Integer custPntSq = review.getCustPntSq();
-		if (review.getCustPntSq() == null) {
-			review.setCustPntSq(custPntSq);
+		
+		// 상품평포인트 월지급횟수 조회
+		int monthCnt = reviewDao.getReviewPointGiveMonthCount(review);
+		if (monthCnt >= 10) {
+			review.setPntGiveStat("G043_50"); // 당월지급횟수(10)초과
+		}
+		
+		// 상품평포인트 동일상품지급횟수 조회
+		int goodsCnt = reviewDao.getReviewPointGiveCount(review);
+		if (goodsCnt >= 1) {
+			review.setPntGiveStat("G043_60"); // 동일상품기지급
+		}
+		
+		// 상품평구분 조회 (T:텍스트상품평, I:포토상품평, V:동영상상품평, IV:포토+동영상상품평)
+		String reviewGb = reviewDao.getReviewGb(review);
+		
+		// 동영상상품평만 등록한 경우는 BOS에서 상품평 노출 시 포인트 지급
+		if ("V".equals(reviewGb)) {
+			// 상품평포인트 월지급횟수(10회) 이내이고 동일상품지급횟수(1회) 이내이면
+			if (monthCnt < 10 && goodsCnt < 1) {
+				// 동영상(=포토)상품평포인트금액
+				int pntAmt = envsetService.getPhotoReviewPoint(TscConstants.Site.STYLE24.value());
+				
+				review.setGvPntAmt(pntAmt);
+				review.setRmPntAmt(pntAmt);
+				
+				// 동영상상품평포인트 생성(동영상만 등록한 경우 처리)
+				reviewDao.createVideoReviewPoint(review);
+		
+				// 고객포인트일련번호 설정
+				Integer custPntSq = review.getCustPntSq();
+				if (review.getCustPntSq() == null) {
+					review.setCustPntSq(custPntSq);
+				}
+		
+				review.setOccurGb(TscConstants.PointOccurGb.REVIEW_POINT.value());
+				review.setOccurDtlDesc("동영상상품평포인트 지급");
+				review.setPntAmt(pntAmt);
+				review.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+		
+				// 동영상상품평포인트이력 생성(동영상만 등록한 경우 처리)
+				reviewDao.createBestReviewPointHistory(review);
+			}
+		}
+		
+		// 동영상 상품평과 포토+동영상 상품평을 등록한 경우
+		if ("V".equals(reviewGb) || "IV".equals(reviewGb)) {
+			// 동영상상품평 노출 처리
+			review.setConfirmUno(TsaSession.getInfo().getUserNo());
+			reviewDao.updateVideoReviewDisplay(review);
 		}
-
-		review.setOccurGb(TscConstants.PointOccurGb.REVIEW_POINT.value());
-		review.setOccurDtlDesc("동영상상품평포인트 지급");
-		review.setPntAmt(pntAmt);
-		review.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
-
-		// 동영상상품평포인트이력 생성
-		reviewDao.createBestReviewPointHistory(review);
-
-		// 동영상상품평 노출 처리
-		review.setGiveDuePnt(pntAmt);
-		reviewDao.updateVideoReviewDisplay(review);
 	}
 
 	/**

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

@@ -268,7 +268,54 @@
 		AND    RPL_CFM_YN = 'N' /*고객이 관리자댓글 확인을 안한넘*/
 	</update>
 
-	<!-- 동영상상품평포인트 생성-->
+	<!-- 상품평구분 조회 (T:텍스트상품평, I:포토상품평, V:동영상상품평, IV:포토+동영상상품평) -->
+	<select id="getReviewGb" parameterType="Review" resultType="String">
+		/* TsaReview.getReviewAttachList */
+		SELECT CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'T' /*텍스트상품평*/
+		            ELSE
+		                CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) > 0 THEN 'I' /*포토상품평*/
+		                     WHEN IFNULL(RA.VIDEO_CNT,0) > 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'V' /*동영상상품평*/
+		                     ELSE 'IV' /*포토+동영상상품평*/
+		                END
+		       END AS REVIEW_GB
+		FROM   TB_REVIEW R
+		LEFT OUTER JOIN (
+		        SELECT REVIEW_SQ
+		             , SUM(CASE WHEN FILE_GB = 'M' AND KUF_KEY IS NOT NULL THEN 1 ELSE 0 END)     AS VIDEO_CNT
+		             , SUM(CASE WHEN FILE_GB = 'I' AND ORG_FILE_NM IS NOT NULL THEN 1 ELSE 0 END) AS IMG_CNT
+		        FROM   TB_REVIEW_ATTACH
+		        WHERE  REVIEW_SQ = #{reviewSq}
+		        GROUP  BY REVIEW_SQ
+		       ) RA ON R.REVIEW_SQ = RA.REVIEW_SQ
+		WHERE  R.REVIEW_SQ = #{reviewSq}
+	</select>
+	
+	<!-- 상품평포인트 월지급횟수 조회 -->
+	<select id="getReviewPointGiveMonthCount" parameterType="Review" resultType="int">
+		/* TsfReivew.getReviewPointGiveMonthCount */	
+		SELECT COUNT(*) AS CNT
+		FROM   TB_REVIEW R
+		WHERE  R.CUST_NO = (SELECT CUST_NO
+		                    FROM   TB_REVIEW
+		                    WHERE  REVIEW_SQ = #{reviewSq}) /*해당 상품평을 등록한 고객*/
+		AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+		AND    R.REG_DT <![CDATA[>=]]> STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d') /*당월1일부터*/
+		AND    R.REG_DT <![CDATA[<]]> DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) /*당월말일까지*/
+	</select>
+		
+	<!-- 상품평포인트 동일상품지급횟수 조회 -->
+	<select id="getReviewPointGiveCount" parameterType="Review" resultType="int">
+		/* TsfReivew.getReviewPointGiveCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_REVIEW R
+		WHERE  (R.CUST_NO,R.GOODS_CD) = (SELECT CUST_NO, GOODS_CD
+		                                 FROM   TB_REVIEW
+		                                 WHERE  REVIEW_SQ = #{reviewSq}) /*해당 상품평을 등록한 고객과 상품코드*/
+		AND    R.REVIEW_SQ != #{reviewSq} /*해당 상품평 외*/
+		AND    R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
+	</select>
+	
+	<!-- 동영상상품평포인트 생성 (동영상만 등록한 경우 처리) -->
 	<insert id="createVideoReviewPoint" parameterType="Review" keyProperty="custPntSq">
 		/* TsaReview.createVideoReviewPoint */
 		INSERT INTO TB_CUST_POINT (
@@ -348,14 +395,14 @@
 	<update id="updateVideoReviewDisplay" parameterType="Review">
 		/* TsaReview.updateVideoReviewDisplay */
 		UPDATE TB_REVIEW
-		SET    CONFIRM_YN = 'Y'
-		     , GIVE_DUE_PNT = #{giveDuePnt}
-		     , PNT_GIVE_STAT = 'G043_30' /*포인트지급반영*/
+		SET    PNT_GIVE_STAT = #{pntGiveStat}
+		     , CONFIRM_YN = 'Y'
+		     , CONFIRM_UNO = #{confirmUno}
+		     , CONFIRM_DT = NOW()
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()
 		WHERE  REVIEW_SQ = #{reviewSq}
 		AND    CONFIRM_YN = 'N' /*동영상노출처리안한넘*/
-		AND    PNT_GIVE_STAT = 'G043_10' /*포인트지급예정 상태*/
 	</update>
 
 	<!-- 베스트상품평포인트 생성-->

+ 1 - 1
src/main/webapp/WEB-INF/views/marketing/ReviewDetailForm.html

@@ -264,7 +264,7 @@
 	// 상품 동영상 노출 처리
 	var fnUpdateVideoReviewDisplay = function(obj) {
 		if ($('#divPicList').find('iframe').length > 0 && $(obj).is(':checked')) {
-			mcxDialog.confirm("동영상이 노출되며 즉시 포인트가 지급됩니다. 계속 진행하시겠습니까?", {
+			mcxDialog.confirm("동영상이 노출됩니다. 계속 진행하시겠습니까?", {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function() {