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

회원가입 후 쿠폰 지급 및 yes24 로그인 개발 중

jsshin 5 лет назад
Родитель
Сommit
076ebcf3df

+ 11 - 0
src/main/java/com/style24/front/biz/dao/TsfCouponDao.java

@@ -40,4 +40,15 @@ public interface TsfCouponDao {
 	 * @since 2021.02.25
 	 * @since 2021.02.25
 	 */
 	 */
 	Collection<Coupon> getCustGradeCouponInfo(Coupon coupon);
 	Collection<Coupon> getCustGradeCouponInfo(Coupon coupon);
+
+
+	/**
+	 * 회원가입 쿠폰
+	 * @param coupon - 쿠폰정보
+	 * @return Coupon
+	 * @author jsshin
+	 * @since 2021. 03. 03
+	 */
+	Coupon getJoinCoupon(Coupon coupon);
+
 }
 }

+ 3 - 7
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -6,15 +6,12 @@ import com.gagaframework.web.security.GagaPasswordEncoder;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
 import com.style24.core.support.session.TscSession;
-import com.style24.core.support.util.CryptoUtils;
 import com.style24.core.support.util.MaskingUtils;
 import com.style24.core.support.util.MaskingUtils;
 import com.style24.front.support.security.TsfLoginDetails;
 import com.style24.front.support.security.TsfLoginDetails;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.front.support.security.session.TsfSession;
-import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Login;
-import com.style24.persistence.domain.Point;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -52,6 +49,9 @@ public class TsfCustomerService {
 	@Autowired
 	@Autowired
 	private TsfLoginService loginService;
 	private TsfLoginService loginService;
 
 
+	@Autowired
+	private TsfCouponService couponService;
+
 	@Autowired
 	@Autowired
 	private ObjectMapper objectMapper;
 	private ObjectMapper objectMapper;
 
 
@@ -340,11 +340,7 @@ public class TsfCustomerService {
 	@Transactional("shopTxnManager")
 	@Transactional("shopTxnManager")
 	public void saveJoinPostProcessing(Customer customer) {
 	public void saveJoinPostProcessing(Customer customer) {
 		// 1. 쿠폰
 		// 1. 쿠폰
-		// 어드민 > 회원등급정책 관리 > 신규회원등급으로 설정된 쿠폰
-
 
 
-		// 2. 포인트
-		// 어드민 > 포인트 정책설정 > 신규회원 등록된 포인트
 
 
 
 
 	}
 	}

+ 49 - 0
src/main/java/com/style24/front/biz/thirdparty/Yes24Login.java

@@ -0,0 +1,49 @@
+package com.style24.front.biz.thirdparty;
+
+import com.gagaframework.web.util.GagaFileUtil;
+import com.style24.front.support.security.session.TsfSession;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+
+/**
+ * Yes24 로그인
+ *
+ * @author jsshin
+ * @since 2021. 03. 03
+ */
+@Component
+@Slf4j
+public class Yes24Login {
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	public static final String PROTOCOL = "http://";
+
+	/**
+	 * YES24 로그인 창
+	 * @param state - 콜백 시 해당 값으로 비교 및 모바일을 redirect 값이 있음
+	 * @return String - 호출 url정보
+	 * @author jsshin
+	 * @since 2021. 03. 03
+	 */
+	public String getAuthorizeUrl(String state) {
+		String authorizeUrl = "https://www.yes24.com/Templates/FTLogin.aspx";
+		String callBackUrl = "/signin/snsLoginCallback?snsType=YS";
+		StringBuilder apiUrlBuilder = new StringBuilder();
+		String redirectUri = GagaFileUtil.getConcatenationPath(PROTOCOL + TsfSession.getHttpServletRequest().getServerName(), callBackUrl);
+		apiUrlBuilder.append(authorizeUrl)
+				.append("?PID=101582")
+				.append("&ReturnURL=")
+				.append(redirectUri);
+		log.info("apiUrlBuilder ===> {}", apiUrlBuilder.toString());
+		return apiUrlBuilder.toString();
+	}
+}

+ 31 - 1
src/main/java/com/style24/front/biz/web/TsfIndexController.java

@@ -17,6 +17,7 @@ import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.thirdparty.KaKaoLogin;
 import com.style24.front.biz.thirdparty.KaKaoLogin;
 import com.style24.front.biz.thirdparty.NaverLogin;
 import com.style24.front.biz.thirdparty.NaverLogin;
+import com.style24.front.biz.thirdparty.Yes24Login;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.CustSnsInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,6 +62,9 @@ public class TsfIndexController extends TsfBaseController {
 	@Autowired
 	@Autowired
 	private NaverLogin naverLogin;
 	private NaverLogin naverLogin;
 
 
+	@Autowired
+	private Yes24Login yes24Login;
+
 	@Autowired
 	@Autowired
 	private ObjectMapper objectMapper;
 	private ObjectMapper objectMapper;
 
 
@@ -187,7 +191,7 @@ public class TsfIndexController extends TsfBaseController {
 	 *
 	 *
 	 * @return String
 	 * @return String
 	 * @author jsshin
 	 * @author jsshin
-	 * @since 2020. 5. 25
+	 * @since 2021. 02. 23
 	 */
 	 */
 	@GetMapping("/signin/naverlogin")
 	@GetMapping("/signin/naverlogin")
 	public String signinNaverLogin(@RequestParam(value = "rememberMe", required = false) String rememberMe
 	public String signinNaverLogin(@RequestParam(value = "rememberMe", required = false) String rememberMe
@@ -208,6 +212,32 @@ public class TsfIndexController extends TsfBaseController {
 		return "redirect:" + redirectUrl;
 		return "redirect:" + redirectUrl;
 	}
 	}
 
 
+	/**
+	 * YES24 로그인 페이지 호출
+	 *
+	 * @return String
+	 * @author jsshin
+	 * @since 2021. 02. 23
+	 */
+	@GetMapping("/signin/yes24login")
+	public String signinYes24Login(@RequestParam(value = "rememberMe", required = false) String rememberMe
+			, @RequestParam(value = "requestGb", required = false) String requestGb) {
+
+		if (StringUtils.isNotBlank(rememberMe)) {
+			// RememberMe 세션 저장
+			TsfSession.setAttribute("rememberMe", rememberMe);
+		}
+		// CSRF 방지를 위한 상태 토큰 생성 코드
+		SecureRandom random = new SecureRandom();
+		String state = new BigInteger(130, random).toString(32);
+		state += "!@!" + requestGb;
+		TsfSession.setAttribute("state", state);
+
+		String redirectUrl = yes24Login.getAuthorizeUrl(state);
+
+		return "redirect:" + redirectUrl;
+	}
+
 
 
 	/**
 	/**
 	 * SNS 로그인
 	 * SNS 로그인

+ 19 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCoupon.xml

@@ -113,4 +113,23 @@
 				) Z
 				) Z
 		 WHERE Z.DOWNLOAD_CNT > 0
 		 WHERE Z.DOWNLOAD_CNT > 0
 	</select>
 	</select>
+
+	<!--회원가입 쿠폰-->
+	<select id="getJoinCoupon" parameterType="Coupon" resultType="Coupon">
+		SELECT CP.CPN_ID
+		     , CP.END_ALIM_YN
+		     , CASE WHEN #{frontGb} = 'P' THEN CP.DC_PVAL
+		            WHEN #{frontGb} = 'M' THEN CP.DC_MVAL
+		            ELSE CP.DC_AVAL                                              END AS DC_VAL
+		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(NOW(), '%Y%M%D%H%I%S')
+		            ELSE DATE_FORMAT(CP.AVAIL_STDT, '%Y%M%D%H%I%S')              END AS AVAIL_STDT
+		     , CASE WHEN CP.PD_GB = 'D' THEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL CP.AVAIL_DAYS DAY), '%Y%M%D%H%I%S')
+		            ELSE  DATE_FORMAT(CP.AVAIL_EDDT, '%Y%M%D%H%I%S')             END AS AVAIL_EDDT
+		FROM  TB_CUST_GRADE_POLICY CGP
+		INNER JOIN
+		      TB_COUPON CP
+		ON    CGP.GRADE_CPN_ID1 = CP.CPN_ID
+		WHERE CP.SITE_CD = #{siteCd}
+	</select>
+	
 </mapper>
 </mapper>

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

@@ -234,7 +234,7 @@
 		     , NOW()                               AS JOIN_DT
 		     , NOW()                               AS JOIN_DT
 		     , IFNULL(#{foreignerYn}, 'N')         AS FOREIGNER_YN
 		     , IFNULL(#{foreignerYn}, 'N')         AS FOREIGNER_YN
 		     , #{custStat}                         AS CUST_STAT
 		     , #{custStat}                         AS CUST_STAT
-		     , #{passwdChgDt}                      AS PASSWD_CHG_DT
+		     , NOW()                               AS PASSWD_CHG_DT
 		     , 'N'                                 AS TEMP_PASSWD_YN
 		     , 'N'                                 AS TEMP_PASSWD_YN
 		     , NOW()                               AS LOGIN_LDT
 		     , NOW()                               AS LOGIN_LDT
 		     , #{ci}                               AS CI
 		     , #{ci}                               AS CI

+ 1 - 1
src/main/webapp/WEB-INF/views/web/customer/JoinTypeFormWeb.html

@@ -51,7 +51,7 @@
 								</a>
 								</a>
 							</li>
 							</li>
 							<li>
 							<li>
-								<a href="javascript:void(0)">
+								<a href="javascript:void(0)" onclick="cfnLoginYes24();">
 									<i class="ico ico_snslogin yes24"></i>
 									<i class="ico ico_snslogin yes24"></i>
 									<span>YES24</span>
 									<span>YES24</span>
 								</a>
 								</a>

+ 37 - 10
src/main/webapp/ux/style24_link.js

@@ -208,11 +208,11 @@ function cfnAddCart(cartList) {
  * @author : jsshin
  * @author : jsshin
  */
  */
 var cfnLoginNaver = function (requestGb, chkRememberMe) {
 var cfnLoginNaver = function (requestGb, chkRememberMe) {
-	var actionUrl = _frontUrl + '/signin/naverlogin?rememberMe=' + chkRememberMe;
-	var popupHeight = 800;
-	var popupWidth = 600;
-	var popupX = (window.screen.width / 2) - (popupWidth / 2);
-	var popupY = (window.screen.height / 3) - (popupHeight / 3);
+	let actionUrl = _frontUrl + '/signin/naverlogin?rememberMe=' + chkRememberMe;
+	let popupHeight = 800;
+	let popupWidth = 600;
+	let popupX = (window.screen.width / 2) - (popupWidth / 2);
+	let popupY = (window.screen.height / 3) - (popupHeight / 3);
 	if ('P' === _frontGb) {
 	if ('P' === _frontGb) {
 		window.open(actionUrl, 'naverLogin', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
 		window.open(actionUrl, 'naverLogin', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
 	} else {
 	} else {
@@ -234,14 +234,41 @@ var cfnLoginNaver = function (requestGb, chkRememberMe) {
  * @author : jsshin
  * @author : jsshin
  */
  */
 var cfnLoginKakao = function (requestGb, chkRememberMe) {
 var cfnLoginKakao = function (requestGb, chkRememberMe) {
-	var actionUrl = _frontUrl + '/signin/kakologin?rememberMe=' + chkRememberMe;
-	var popupWidth = 450;
-	var popupHeight = 700;
-	var popupX = (window.screen.width / 2) - (popupWidth / 2);
-	var popupY = (window.screen.height / 3) - (popupHeight / 3);
+	let actionUrl = _frontUrl + '/signin/kakologin?rememberMe=' + chkRememberMe;
+	let popupWidth = 450;
+	let popupHeight = 700;
+	let popupX = (window.screen.width / 2) - (popupWidth / 2);
+	let popupY = (window.screen.height / 3) - (popupHeight / 3);
 	if ('P' === _frontGb) {
 	if ('P' === _frontGb) {
 		window.open(actionUrl, 'kakaoLogin', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
 		window.open(actionUrl, 'kakaoLogin', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
 	} else {
 	} else {
 		document.location.href = actionUrl + '&requestGb=' + requestGb;
 		document.location.href = actionUrl + '&requestGb=' + requestGb;
 	}
 	}
 };
 };
+
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : Yes24 로그인
+ * <pre>
+ *     cfnLoginYes24();
+ *     호출된 페이지에서
+ *     PC: fnSnsSigninCallback(userInfo) 콜백 함수 생성 후 가지고 호출 처리
+ *     MO :
+ * </pre>
+ * @since  : 2021/02/23
+ * @author : jsshin
+ */
+var cfnLoginYes24 = function (requestGb, chkRememberMe) {
+	let actionUrl = _frontUrl + '/signin/yes24login?rememberMe=' + chkRememberMe;
+	let popupWidth = 484;
+	let popupHeight = 390;
+	let popupX = (window.screen.width / 2) - (popupWidth / 2);
+	let popupY = (window.screen.height / 3) - (popupHeight / 3);
+	if ('P' === _frontGb) {
+		window.open(actionUrl, 'yes24Login', 'top=' + popupY + ',left=' + popupX + ',height=' + popupHeight + ',width=' + popupWidth + ', fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbars=yes', '');
+	} else {
+		document.location.href = actionUrl + '&requestGb=' + requestGb;
+	}
+};