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

기획전 접근가능여부 체크 로직 추가

gagamel 5 лет назад
Родитель
Сommit
13b9ae81e3

+ 9 - 0
src/main/java/com/style24/front/biz/dao/TsfCommonDao.java

@@ -33,6 +33,15 @@ public interface TsfCommonDao {
 	 */
 	void createInflowHistory(InflowHst inflow);
 
+	/**
+	 * 웹제휴채널명 조회
+	 * @param afLinkCd - 웹제휴링크코드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 3. 30
+	 */
+	String getAfLinkName(String afLinkCd);
+
 //	/**
 //	 * 기본답변문구내용 조회
 //	 *

+ 46 - 1
src/main/java/com/style24/front/biz/dao/TsfPlanningDao.java

@@ -46,13 +46,58 @@ public interface TsfPlanningDao {
 
 	/**
 	 * 기획전 상품 목록
-	 * @param
+	 * @param plan - 기획전 정보
 	 * @return
 	 * @author gagamel
 	 * @since 2021. 3. 29
 	 */
 	Collection<Plan> getPlanningGoodsList(Plan plan);
 
+	/**
+	 * 디바이스접근가능여부 조회
+	 * @param plan - 기획전 정보
+	 * @return Y:접근가능 / N:접근불가
+	 * @author gagamel
+	 * @since 2021. 3. 30
+	 */
+	String getDeviceAccessibleYn(Plan plan);
+
+	/**
+	 * 신규회원접근가능여부 조회
+	 * @param plan - 기획전 정보
+	 * @return Y:접근가능 / N:접근불가
+	 * @author gagamel
+	 * @since 2021. 3. 30
+	 */
+	String getNewCustomerAccessibleYn(Plan plan);
+
+	/**
+	 * 고객구분접근가능여부 조회
+	 * @param plan - 기획전 정보
+	 * @return Y:접근가능 / N:접근불가
+	 * @author gagamel
+	 * @since 2021. 3. 30
+	 */
+	String getCustomerGubunAccessibleYn(Plan plan);
+
+	/**
+	 * 고객등급접근가능여부 조회
+	 * @param plan - 기획전 정보
+	 * @return Y:접근가능 / N:접근불가
+	 * @author gagamel
+	 * @since 2021. 3. 30
+	 */
+	String getCustomerGradeAccessibleYn(Plan plan);
+
+	/**
+	 * 웹제휴채널접근가능여부 조회
+	 * @param plan - 기획전 정보
+	 * @return Y:접근가능 / N:접근불가
+	 * @author gagamel
+	 * @since 2021. 3. 30
+	 */
+	String getAfLinkAccessibleYn(Plan plan);
+
 //	/**
 //	 * 기획전 목록 + 상품
 //	 *

+ 56 - 0
src/main/java/com/style24/front/biz/service/TsfPlanningService.java

@@ -2,10 +2,12 @@ package com.style24.front.biz.service;
 
 import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.style24.front.biz.dao.TsfCommonDao;
 import com.style24.front.biz.dao.TsfPlanningDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
@@ -30,6 +32,9 @@ public class TsfPlanningService {
 	@Autowired
 	private TsfCouponService couponService;
 
+	@Autowired
+	private TsfCommonDao commonDao;
+
 	/**
 	 * 기획전 카테고리 목록
 	 * @param plan - 기획전 정보
@@ -110,6 +115,57 @@ public class TsfPlanningService {
 //		return planningDao.getPlanGoodsList(plan);
 //	}
 
+	/**
+	 * 기획전에 대해 접근여부 체크
+	 * @param planSq - 기획전번호
+	 * @author gagamel
+	 * @since 2021. 3. 30
+	 */
+	public void checkAccessablePlanning(Integer planSq) {
+		Plan plan = new Plan();
+		plan.setPlanSq(planSq);
+
+		// 디바이스접근가능여부 조회
+		plan.setFrontGb(TsfSession.getFrontGb());
+		if ("N".equals(planningDao.getDeviceAccessibleYn(plan))) {
+			String msg = "PC웹에서만 접근이 가능합니다.";
+			if ("M".equals(TsfSession.getFrontGb())) {
+				msg = "모바일웹에서만 접근이 가능합니다.";
+			} else if ("A".equals(TsfSession.getFrontGb())) {
+				msg = "앱에서만 접근이 가능합니다.";
+			}
+
+			throw new IllegalArgumentException(msg);
+		}
+
+		// 신규회원접근가능여부 조회
+		if ("N".equals(planningDao.getNewCustomerAccessibleYn(plan))) {
+			throw new IllegalArgumentException("신규회원만 접근 가능합니다.");
+		}
+
+		if (TsfSession.isLogin()) {
+			// 고객구분접근가능여부 조회
+			plan.setCustGb(TsfSession.getCustGb());
+			if ("N".equals(planningDao.getCustomerGubunAccessibleYn(plan))) {
+				throw new IllegalArgumentException(TsfSession.getInfo().getCustGbNm() + "만 접근이 가능합니다.");
+			}
+
+			// 고객등급접근가능여부 조회
+			plan.setCustGrade(TsfSession.getInfo().getCustGrade());
+			if ("N".equals(planningDao.getCustomerGradeAccessibleYn(plan))) {
+				throw new IllegalArgumentException(TsfSession.getInfo().getCustGradeNm() + "만 접근 가능합니다.");
+			}
+		}
+
+		if (StringUtils.isNotBlank(TsfSession.getAttribute("afLinkCd"))) {
+			// 웹제휴채널접근가능여부 조회
+			plan.setAfLinkCd(TsfSession.getAttribute("afLinkCd"));
+			if ("N".equals(planningDao.getAfLinkAccessibleYn(plan))) {
+				throw new IllegalArgumentException(commonDao.getAfLinkName(TsfSession.getAttribute("afLinkCd")) + " 채널만 접근 가능합니다.");
+			}
+		}
+	}
+
 	/**
 	 * 기획전 고객등급 목록
 	 *

+ 22 - 21
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -97,23 +97,23 @@ public class TsfPlanningController extends TsfBaseController {
 		return planningService.getPlanningMainList(plan);
 	}
 
-	/**
-	 * 기획전 접근확인
-	 * 
-	 * @return
-	 * @author sowon
-	 * @since 2021. 3. 22
-	 */
-	@PostMapping("/access")
-	@ResponseBody
-	public GagaMap PlanningAccessConfrim(@RequestBody Plan plan) throws Exception {
-		GagaMap result = new GagaMap();
-		// 접근 가능 고객 등급 확인
-		planningService.accessCustGrade(plan);
-		result.set("status", "200");
-
-		return result;
-	}
+//	/**
+//	 * 기획전 접근확인
+//	 * 
+//	 * @return
+//	 * @author sowon
+//	 * @since 2021. 3. 22
+//	 */
+//	@PostMapping("/access")
+//	@ResponseBody
+//	public GagaMap PlanningAccessConfrim(@RequestBody Plan plan) throws Exception {
+//		GagaMap result = new GagaMap();
+//		// 접근 가능 고객 등급 확인
+//		planningService.accessCustGrade(plan);
+//		result.set("status", "200");
+//
+//		return result;
+//	}
 
 	/**
 	 * 기획전 상세화면
@@ -124,7 +124,9 @@ public class TsfPlanningController extends TsfBaseController {
 	 */
 	@GetMapping("/detail/form")
 	@ResponseBody
-	public ModelAndView PlanningDetailForm(@RequestParam(value = "planSq") int planSq) throws Exception {
+	public ModelAndView PlanningDetailForm(@RequestParam(value = "planSq") int planSq) {
+		// 기획전 접근가능여부 체크
+		planningService.checkAccessablePlanning(planSq);
 
 		ModelAndView mav = new ModelAndView();
 		Plan plan = new Plan();
@@ -135,7 +137,7 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setFrontGb(TsfSession.getFrontGb());
 		plan.setCustGb(TsfSession.getCustGb());
 		plan.setCustNo(TsfSession.isLogin() ? TsfSession.getInfo().getCustNo() : 0);
-		
+
 		// 기본 set
 		plan.setExceptPlanSq(planSq);
 		plan.setPlanSq(planSq);
@@ -265,11 +267,10 @@ public class TsfPlanningController extends TsfBaseController {
 		plan.setSiteCd(TscConstants.Site.STYLE24.value());
 		plan.setFrontGb(TsfSession.getFrontGb());
 
-
 		mav.setViewName(super.getDeviceViewName("planning/PlanningEventMainForm"));
 		return mav;
 	}
-	
+
 	/**
 	 * 이벤트 메인 목록
 	 * @param plan - 이벤트 정보

+ 2 - 1
src/main/java/com/style24/persistence/domain/Login.java

@@ -30,6 +30,8 @@ public class Login extends TscBaseDomain {
 	private String passwd;			// 비밀번호
 	private String custGb;			// 고객구분
 	private String custGbNm;		// 고객구분명
+	private String custGrade;		// 고객등급
+	private String custGradeNm;		// 고객등급명
 	private String custStat;		// 고객상태
 	private String cellPhnno;		// 휴대전화번호
 	private String email;			// 이메일
@@ -42,7 +44,6 @@ public class Login extends TscBaseDomain {
 	private String ipAddr;			// IP주소
 	private String loginLdt;		// 최종로그인일시
 	private String loginFailYn;		// 로그인실패여부
-	private String custGrade;		// 고객등급
 	private String tempPasswdYn;	// 임시비밀번호여부
 	private int pwdChgDay;			// 비밀번호변경일자
 	private String ci;				// CI(본인인증여부)

+ 7 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCommon.xml

@@ -44,5 +44,12 @@
 		AND    USE_YN = 'Y'
 	</insert>
 	
+	<!-- 웹제휴채널명 조회 -->
+	<select id="getAfLinkName" parameterType="String" resultType="String">
+		/* TsfCommon.getAfLinkName */
+		SELECT AF_LINK_NM
+		FROM   TB_AF_LINK
+		WHERE  AF_LINK_CD = #{afLinkCd}
+	</select>
 
 </mapper>

+ 17 - 16
src/main/java/com/style24/persistence/mybatis/shop/TsfLogin.xml

@@ -5,27 +5,28 @@
 	<!-- 로그인체크 정보 조회 -->
 	<select id="getLoginCheckInfo" parameterType="Login" resultType="Login">
 		/* TsfLogin.getLoginCheckInfo */
-		SELECT CUST_NO                                                 /*고객번호*/
-		     , CUST_ID                                                 /*고객ID*/
-		     , CUST_NM                                                 /*고객명*/
-		     , PASSWD                                                  /*비밀번호*/
-		     , CUST_GB                                                 /*고객구분*/
-		     , CUST_GRADE                                              /*고객등급*/
-		     , FN_GET_CODE_NM('G100',CUST_GB) AS CUST_GB_NM            /*고객구분명*/
-		     , CUST_STAT                                               /*회원상태*/
-		     , CELL_PHNNO                                              /*휴대전화번호*/
-		     , EMAIL                                                   /*이메일*/
-		     , #{snsType}                     AS SNS_TYPE              /*SNS유형*/
-		     , #{snsId}                       AS SNS_ID                /*SNS가입ID*/
+		SELECT CUST_NO                                                   /*고객번호*/
+		     , CUST_ID                                                   /*고객ID*/
+		     , CUST_NM                                                   /*고객명*/
+		     , PASSWD                                                    /*비밀번호*/
+		     , CUST_GB                                                   /*고객구분*/
+		     , FN_GET_CODE_NM('G100',CUST_GB)          AS CUST_GB_NM     /*고객구분명*/
+		     , CUST_GRADE                                                /*고객등급*/
+		     , FN_GET_CODE_NM('G110',CUST_GRADE)       AS CUST_GRADE_NM  /*고객등급명*/
+		     , CUST_STAT                                                 /*회원상태*/
+		     , CELL_PHNNO                                                /*휴대전화번호*/
+		     , EMAIL                                                     /*이메일*/
+		     , #{snsType}                              AS SNS_TYPE       /*SNS유형*/
+		     , #{snsId}                                AS SNS_ID         /*SNS가입ID*/
 		     , IFNULL((SELECT LOGIN_FAIL_CNT
 		               FROM   TB_LOGIN_FAIL
 		               WHERE  CUST_ID = #{custId}
 		               AND    IP_ADDR = #{ipAddr}
 		               AND    SITE_CD = #{siteCd}
-		              ),0)                    AS LOGIN_FAIL_CNT         /*로그인실패건수*/
-		     , TEMP_PASSWD_YN                                           /*임시비밀번호여부*/
-		     , IFNULL(DATEDIFF(NOW(), PASSWD_CHG_DT), 0) AS PWD_CHG_DAY /*비밀번호변경일자*/
-		     , CI                                                       /*CI본인인증여부*/
+		              ),0)                             AS LOGIN_FAIL_CNT /*로그인실패건수*/
+		     , TEMP_PASSWD_YN                                            /*임시비밀번호여부*/
+		     , IFNULL(DATEDIFF(NOW(),PASSWD_CHG_DT),0) AS PWD_CHG_DAY    /*비밀번호변경일자*/
+		     , CI                                                        /*CI본인인증여부*/
 		FROM   TB_CUSTOMER A
 		WHERE  1 = 1
 		<choose>

+ 75 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfPlanning.xml

@@ -226,6 +226,81 @@
 		</if>
 	</select>
 	
+	<!-- 디바이스접근가능여부 조회 -->
+	<select id="getDeviceAccessibleYn" parameterType="Plan" resultType="String">
+		/* TsfPlanning.getDeviceAccessibleYn */
+		SELECT CASE WHEN COUNT(*) > 0 THEN
+		                'Y' /*접근가능*/
+		            ELSE
+		                'N' /*접근불가*/
+		       END AS ACCESSIBLE_YN
+		FROM   TB_PLAN
+		WHERE  PLAN_SQ = #{planSq}
+		AND    FRONT_GB LIKE CONCAT('%',#{frontGb},'%')
+	</select>
+	
+	<!-- 신규회원접근가능여부 조회 -->
+	<select id="getNewCustomerAccessibleYn" parameterType="Plan" resultType="String">
+		/* TsfPlanning.getNewCustomerAccessibleYn */
+		SELECT CASE WHEN NEW_CUST_YN = 'N' THEN
+		                'Y' /*접근가능*/
+		            ELSE
+		                CASE WHEN NOW() BETWEEN CUST_JOIN_STDT AND CUST_JOIN_EDDT THEN
+		                         'Y' /*접근가능*/
+		                     ELSE
+		                         'N' /*접근불가*/
+		                END
+		       END AS ACCESSIBLE_YN
+		FROM   TB_PLAN
+		WHERE  PLAN_SQ = #{planSq}
+	</select>
+	
+	<!-- 고객구분접근가능여부 조회 -->
+	<select id="getCustomerGubunAccessibleYn" parameterType="Plan" resultType="String">
+		/* TsfPlanning.getCustomerGubunAccessibleYn */
+		SELECT CASE WHEN COUNT(*) > 0 THEN
+		                'Y' /*접근가능*/
+		            ELSE
+		                'N' /*접근불가*/
+		       END AS ACCESSIBLE_YN
+		FROM   TB_PLAN_CUST_DIVISION
+		WHERE  PLAN_SQ = #{planSq}
+		AND    CUST_GB = #{custGb}
+	</select>
+	
+	<!-- 고객등급접근가능여부 조회 -->
+	<select id="getCustomerGradeAccessibleYn" parameterType="Plan" resultType="String">
+		/* TsfPlanning.getCustomerGradeAccessibleYn */
+		SELECT CASE WHEN COUNT(*) > 0 THEN
+		                'Y' /*접근가능*/
+		            ELSE
+		                'N' /*접근불가*/
+		       END AS ACCESSIBLE_YN
+		FROM   TB_PLAN_CUST_GRADE
+		WHERE  PLAN_SQ = #{planSq}
+		AND    CUST_GRADE = #{custGrade}
+	</select>
+	
+	<!-- 웹제휴채널접근가능여부 조회 -->
+	<select id="getAfLinkAccessibleYn" parameterType="Plan" resultType="String">
+		/* TsfPlanning.getAfLinkAccessibleYn */
+		SELECT CASE WHEN CNT1 = 0 THEN
+		                'Y' /*접근가능*/
+		            ELSE
+		                CASE WHEN CNT2 > 0 THEN
+		                         'Y' /*접근가능*/
+		                     ELSE
+		                         'N' /*접근불가*/
+		                END
+		       END AS ACCESSIBLE_YN
+		FROM   (
+		        SELECT COUNT(*)                                             AS CNT1 /*제휴채널전체건수*/
+		             , CASE WHEN AF_LINK_CD = #{afLinkCd} THEN 1 ELSE 0 END AS CNT2 /*특정제휴채널건수*/
+		        FROM   TB_PLAN_AF_CHANNEL
+		        WHERE  PLAN_SQ = #{planSq}
+		       ) Z
+	</select>
+	
 	<!-- 기획전 상세정보 -->
 	<select id="getPlanDetailInfo" parameterType="Plan" resultType="Plan">
 		/* TsfPlanning.getPlanDetailInfo*/