From 2862c3e4da3adbb4bea43151514f0c43b86476d6 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期六, 07 九月 2024 17:49:17 +0800
Subject: [PATCH] APP端冥想首页相关接口

---
 xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java |  138 +++++++++++++++++++++++++++++-----------------
 1 files changed, 87 insertions(+), 51 deletions(-)

diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java b/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java
index 36d0fc3..0b836ed 100644
--- a/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java
+++ b/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java
@@ -6,7 +6,6 @@
 import com.xinquan.auth.form.AppLoginBody;
 import com.xinquan.auth.form.AppRegisterBody;
 import com.xinquan.auth.form.VerifyResultVO;
-import com.xinquan.auth.util.HuaWeiSMSUtil;
 import com.xinquan.common.core.constant.CacheConstants;
 import com.xinquan.common.core.constant.Constants;
 import com.xinquan.common.core.constant.SecurityConstants;
@@ -24,11 +23,10 @@
 import com.xinquan.system.api.domain.SysUser;
 import com.xinquan.system.api.feignClient.SysUserClient;
 import com.xinquan.system.api.model.AppCaptchaBody;
+import com.xinquan.system.api.model.AppLoginUser;
 import com.xinquan.system.api.model.AppVerifyCellPhoneBody;
 import com.xinquan.system.api.model.AppWXLoginBody;
-import com.xinquan.system.api.model.AppleLoginUser;
 import com.xinquan.system.api.model.LoginUser;
-import com.xinquan.system.api.model.WXLoginUser;
 import com.xinquan.user.api.domain.AppUser;
 import com.xinquan.user.api.domain.dto.AppUserDTO;
 import com.xinquan.user.api.feign.RemoteAppUserService;
@@ -36,11 +34,10 @@
 import java.time.LocalDateTime;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 登录校验方法
@@ -173,7 +170,8 @@
     /**
      * 注册
      */
-    public void appRegister(AppRegisterBody appRegisterBody)
+    @Transactional(rollbackFor = Exception.class)
+    public AppLoginUser appRegister(AppRegisterBody appRegisterBody)
     {
         String cellPhone = appRegisterBody.getCellPhone();
         String password = appRegisterBody.getPassword();
@@ -191,16 +189,11 @@
         {
             throw new ServiceException("该手机号已注册");
         }
-
-        if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
-                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
-        {
-            throw new ServiceException("密码长度必须在5到20个字符之间");
-        }
         String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
         // 注册用户信息
         SysUser sysUser = new SysUser();
         sysUser.setUserName(cellPhone);
+        sysUser.setUserType("01");
         sysUser.setNickName(nickname);
         sysUser.setPassword(SecurityUtils.encryptPassword(password));
         R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser, SecurityConstants.INNER);
@@ -209,6 +202,7 @@
         {
             throw new ServiceException(registerResult.getMsg());
         }
+        sysUser = registerResult.getData();
         recordLogService.recordLogininfor(cellPhone, Constants.REGISTER, "注册成功");
         //TODO 默认头像待完善
         AppUserDTO appUserDTO = AppUserDTO.builder().userId(sysUser.getUserId()).cellPhone(cellPhone)
@@ -216,12 +210,21 @@
                         nickname).userStatus(1).sanskritFlag(2).balance(BigDecimal.ZERO)
                 .income(BigDecimal.ZERO).totalEnergyValue(0).registerTime(
                         LocalDateTime.now()).levelSettingId(1).build();
-        Boolean result = remoteAppUserService.registerAppUser(appUserDTO, SecurityConstants.INNER)
-                .getData();
-        if (!result) {
-            throw new ServiceException("注册失败");
+        R<AppUser> result = remoteAppUserService.registerAppUser(appUserDTO,
+                SecurityConstants.INNER);
+        if (R.FAIL == result.getCode()) {
+            throw new ServiceException(result.getMsg());
         }
-
+        // 构建AppLoginUser
+        SysUser sysUserInfo = registerResult.getData();
+        AppUser appUserInfo = result.getData();
+        AppLoginUser appLoginUser = new AppLoginUser();
+        appLoginUser.setUserid(sysUserInfo.getUserId());
+        appLoginUser.setUsername(appUserInfo.getNickname());
+        appLoginUser.setCellPhone(cellPhone);
+        appLoginUser.setAppUserId(appUserInfo.getId());
+        appLoginUser.setSysUser(sysUser);
+        return appLoginUser;
     }
 
     /**
@@ -231,10 +234,13 @@
      * @return true/false
      */
     private boolean verifyCaptcha(String cellPhone, String captcha, String keyPrefix) {
+
         if (StringUtils.isNotBlank(cellPhone) && StringUtils.isNotBlank(captcha)) {
             String key = keyPrefix + cellPhone;
             String code = redisService.getCacheObject(key);
-            if (StringUtils.isNotBlank(code) && code.equals(captcha)) {
+            // 万能验证码
+            if (captcha.equals("123456") || (StringUtils.isNotBlank(code) && code.equals(
+                    captcha))) {
                 redisService.deleteObject(key);
                 return true;
             }
@@ -270,23 +276,19 @@
      */
     public void sendCaptchaCode(String cellPhone, Integer type) {
         String key = getCaptchaCodeByTypePrefix(type);
-        Boolean result = redisService.hasKey(key + cellPhone);
-        if (result) {
-            throw new ServiceException("请勿重复发送验证码");
-        }
         String code = RandomUtil.randomNumbers(6);
         try {
+            // 将验证码放入redis
+            redisService.setCacheObject(key + cellPhone, code, 5L,
+                    TimeUnit.MINUTES);
             log.info("发送验证码成功,手机号:{} 验证码:{}", cellPhone, code);
             // TODO 修改sender参数及templateId
-            HuaWeiSMSUtil.sendSms("[\"" + code + "\"]", cellPhone, "8823121426646",
-                    "cf1707ec44694627b1b483b0277e12fd");
+            // HuaWeiSMSUtil.sendSms("[\"" + code + "\"]", cellPhone, "8823121426646",
+            //         "cf1707ec44694627b1b483b0277e12fd");
         } catch (Exception e) {
             log.error("发送短信失败", e);
             throw new ServiceException("验证码发送失败");
         }
-        //将验证码放入redis
-        redisService.setCacheObject(key + cellPhone, code, 5L,
-                TimeUnit.MINUTES);
     }
 
     /**
@@ -295,7 +297,7 @@
      * @param body
      * @return
      */
-    public LoginUser appLogin(AppLoginBody body) {
+    public AppLoginUser appLogin(AppLoginBody body) {
 
         // IP黑名单校验
         String blackStr = Convert.toStr(
@@ -334,11 +336,14 @@
         }
         // 校验账号密码
         passwordService.validate(sysUser, body.getPassword());
-        LoginUser userInfo = new LoginUser();
-        userInfo.setSysUser(sysUser);
+        AppLoginUser appLoginUser = new AppLoginUser();
+        appLoginUser.setAppUserId(appUser.getUserId());
+        appLoginUser.setCellPhone(appUser.getCellPhone());
+        appLoginUser.setUsername(sysUser.getNickName());
+        appLoginUser.setSysUser(sysUser);
         recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS,
                 "登录成功");
-        return userInfo;
+        return appLoginUser;
     }
 
     /**
@@ -347,14 +352,34 @@
      * @param body
      * @return
      */
-    public WXLoginUser wxLogin(AppWXLoginBody body) {
+    public AppLoginUser wxLogin(AppWXLoginBody body) {
         // 通过wxOpenId查询APP用户信息
-        R<WXLoginUser> userResult = remoteAppUserService.wxLogin(body, SecurityConstants.INNER);
+        R<AppLoginUser> userResult = remoteAppUserService.wxLogin(body,
+                SecurityConstants.INNER);
+        AppLoginUser data = userResult.getData();
+        SysUser sysUser = data.getSysUser();
         if (R.FAIL == userResult.getCode()) {
+            recordLogService.recordLogininfor(body.getNickname(), Constants.LOGIN_FAIL,
+                    userResult.getMsg());
             throw new ServiceException(userResult.getMsg());
         }
+        if (StringUtils.isNull(sysUser)) {
+            recordLogService.recordLogininfor(data.getCellPhone(), Constants.LOGIN_FAIL,
+                    "登录用户不存在");
+            throw new ServiceException("登录用户:" + data.getCellPhone() + " 不存在");
+        }
+        // IP黑名单校验
+        String blackStr = Convert.toStr(
+                redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
+        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
+            recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL,
+                    "很遗憾,访问IP已被列入系统黑名单");
+            throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
+        }
 
-        return userResult.getData();
+        recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS,
+                "登录成功");
+        return data;
     }
 
     /**
@@ -363,13 +388,30 @@
      * @param appleId 苹果id
      * @return
      */
-    public AppleLoginUser appleLogin(String appleId) {
-        R<AppleLoginUser> userResult = remoteAppUserService.appleLogin(appleId,
+    public AppLoginUser appleLogin(String appleId) {
+        R<AppLoginUser> userResult = remoteAppUserService.appleLogin(appleId,
                 SecurityConstants.INNER);
         if (R.FAIL == userResult.getCode()) {
             throw new ServiceException(userResult.getMsg());
         }
-        return userResult.getData();
+        AppLoginUser data = userResult.getData();
+        SysUser sysUser = data.getSysUser();
+        if (StringUtils.isNull(sysUser)) {
+            recordLogService.recordLogininfor(data.getCellPhone(), Constants.LOGIN_FAIL,
+                    "登录用户不存在");
+            throw new ServiceException("登录用户:" + data.getCellPhone() + " 不存在");
+        }
+        // IP黑名单校验
+        String blackStr = Convert.toStr(
+                redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
+        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
+            recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL,
+                    "很遗憾,访问IP已被列入系统黑名单");
+            throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
+        }
+        recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS,
+                "登录成功");
+        return data;
     }
 
     /**
@@ -404,13 +446,6 @@
         if (!body.getSecret().equals(baseSecret.toString())) {
             throw new ServiceException("密码修改秘钥不正确");
         }
-        // 校验密码,密码至少8个字符,不能全是字母或者数字
-        String regex = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$\n";
-        Pattern pattern = Pattern.compile(regex);
-        Matcher matcher = pattern.matcher(body.getPassword());
-        if (!matcher.matches()) {
-            throw new ServiceException("密码至少8个字符,不能全是字母或者数字");
-        }
         // 根据手机号查询用户
         AppUser appUser = remoteAppUserService.getUserByCondition(
                 AppUserDTO.builder().cellPhone(body.getCellPhone()).build(),
@@ -435,13 +470,13 @@
      * @param body
      * @return
      */
-    public LoginUser appCaptchaLogin(AppCaptchaBody body) {
+    public AppLoginUser appCaptchaLogin(AppCaptchaBody body) {
         // 校验验证码
         if (!verifyCaptcha(body.getCellPhone(), body.getCaptcha(),
                 CacheConstants.APP_LOGIN_CAPTCHA_CODE_PREFIX)) {
             throw new ServiceException("验证码不正确");
         }
-        R<LoginUser> loginUserR = remoteAppUserService.appCaptchaLogin(body,
+        R<AppLoginUser> loginUserR = remoteAppUserService.appCaptchaLogin(body,
                 SecurityConstants.INNER);
         if (R.FAIL == loginUserR.getCode()) {
             throw new ServiceException(loginUserR.getMsg());
@@ -449,19 +484,20 @@
         return loginUserR.getData();
     }
 
-    public WXLoginUser verifyCellPhone(AppVerifyCellPhoneBody body) {
-        String captcha = redisService.getCacheObject(
+    public AppLoginUser verifyCellPhone(AppVerifyCellPhoneBody body) {
+        Boolean res = redisService.hasKey(
                 CacheConstants.APP_VERIFY_CAPTCHA_CODE_PREFIX + body.getCellPhone());
-        if (Objects.isNull(captcha)) {
+        if (!res) {
             throw new ServiceException("验证码已失效,请重新获取");
         }
         // 校验验证码
         if (!verifyCaptcha(body.getCellPhone(), body.getCaptcha(),
-                CacheConstants.APP_LOGIN_CAPTCHA_CODE_PREFIX)) {
+                CacheConstants.APP_VERIFY_CAPTCHA_CODE_PREFIX)) {
             throw new ServiceException("验证码不正确");
         }
         // 更新用户系统用户信息
-        R<WXLoginUser> result = remoteAppUserService.verifyCellPhone(body, SecurityConstants.INNER);
+        R<AppLoginUser> result = remoteAppUserService.verifyCellPhone(body,
+                SecurityConstants.INNER);
         if (R.FAIL == result.getCode()) {
             throw new ServiceException(result.getMsg());
         }

--
Gitblit v1.7.1