From c17ee7624b28485794e956a17631ce2d41a623ff Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 27 十一月 2024 09:05:22 +0800
Subject: [PATCH] 合并代码

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java |  151 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 150 insertions(+), 1 deletions(-)

diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
index 749a5b7..de64b48 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -1,10 +1,21 @@
 package com.ruoyi.account.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.mapper.AppUserMapper;
 import com.ruoyi.account.api.model.AppUser;
 import com.ruoyi.account.service.AppUserService;
+import com.ruoyi.account.util.weChat.WeChatUtil;
+import com.ruoyi.account.vo.*;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.system.api.vo.LoginUser;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * <p>
@@ -16,5 +27,143 @@
  */
 @Service
 public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> implements AppUserService {
-
+	
+	@Resource
+	private WeChatUtil weChatUtil;
+	
+	@Resource
+	private TokenService tokenService;
+	
+	@Resource
+	private RedisService redisService;
+	
+	
+	/**
+	 * 小程序一键登录
+	 * @param appletLogin
+	 * @return
+	 */
+	@Override
+	public AjaxResult appletLogin(AppletLogin appletLogin) {
+		//使用jscode获取微信openid
+		Map<String, Object> map = weChatUtil.code2Session(appletLogin.getJscode());
+		Integer errcode = Integer.valueOf(map.get("errcode").toString());
+		if(0 != errcode){
+			return AjaxResult.error(map.get("msg").toString());
+		}
+		String openid = map.get("openid").toString();
+		//查询用户是否注册,没有注册则跳转到注册页面
+		AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getWxOpenid, openid).ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0));
+		if(null == appUser){
+			LoginVo loginVo = new LoginVo();
+			loginVo.setSkipPage(2);
+			return AjaxResult.success(loginVo);
+		}
+		//账户被冻结,给出提示
+		if(2 == appUser.getStatus()){
+			return AjaxResult.error("账户已被冻结,请联系管理员!");
+		}
+		LoginVo loginVo = new LoginVo();
+		loginVo.setSkipPage(1);
+		loginVo.setFirstTime(false);
+		loginVo.setPhone(appUser.getPhone());
+		//构建token
+		LoginUser loginUser = new LoginUser();
+		loginUser.setUserId(appUser.getId());
+		loginUser.setName(appUser.getName());
+		Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser);
+		loginVo.setToken(tokenApplet.get("access_token").toString());
+		loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
+		return AjaxResult.success(loginVo);
+	}
+	
+	
+	/**
+	 * 手机号码登录
+	 * @param mobileLogin
+	 * @return
+	 */
+	@Override
+	public AjaxResult<LoginVo> mobileLogin(MobileLogin mobileLogin) {
+		//校验验证码
+		String code = redisService.getCacheObject(mobileLogin.getPhone());
+		if(null == code || !code.equals(mobileLogin.getCode())){
+			return AjaxResult.error("验证码错误");
+		}
+		
+		//查询用户是否注册,没有注册则跳转到注册页面
+		AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getPhone, mobileLogin.getPhone()).ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0));
+		if(null == appUser){
+			LoginVo loginVo = new LoginVo();
+			loginVo.setSkipPage(2);
+			return AjaxResult.success(loginVo);
+		}
+		//账户被冻结,给出提示
+		if(2 == appUser.getStatus()){
+			return AjaxResult.error("账户已被冻结,请联系管理员!");
+		}
+		LoginVo loginVo = new LoginVo();
+		loginVo.setSkipPage(1);
+		loginVo.setFirstTime(false);
+		loginVo.setPhone(appUser.getPhone());
+		//构建token
+		LoginUser loginUser = new LoginUser();
+		loginUser.setUserId(appUser.getId());
+		loginUser.setName(appUser.getName());
+		Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser);
+		loginVo.setToken(tokenApplet.get("access_token").toString());
+		loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
+		return AjaxResult.success(loginVo);
+	}
+	
+	
+	/**
+	 * 获取短信验证码
+	 * @param smsCode
+	 * @return
+	 */
+	@Override
+	public AjaxResult getSMSCode(SMSCode smsCode) {
+		//校验验证码获取评率(1分钟5次)
+		String key = smsCode.getType() + "&" + smsCode.getPhone();
+		Map<String, Object> cacheMap = redisService.getCacheMap(key);
+		if(null != cacheMap){
+			Integer number = Integer.valueOf(cacheMap.get("number").toString()) + 1;
+			Long startTime = Long.valueOf(cacheMap.get("startTime").toString());
+			if(number > 5 && (System.currentTimeMillis() - startTime) < 60000){
+				return AjaxResult.error("获取验证码太频繁,请稍后重试!");
+			}
+			if(number <= 5){
+				cacheMap.put("number", number);
+			}else{
+				cacheMap.put("number", 1);
+				cacheMap.put("startTime", System.currentTimeMillis());
+			}
+		}else{
+			cacheMap = new HashMap<>();
+			cacheMap.put("number", 1);
+			cacheMap.put("startTime", System.currentTimeMillis());
+		}
+		//存储计数器到缓存中,5分钟有效期
+		redisService.setCacheMap(key, cacheMap, 300);
+		
+		//开始构建验证码内容
+		String code = "";
+		for (int i = 0; i < 6; i++) {
+			code += Double.valueOf(Math.random() * 10).intValue();
+		}
+		//发送短信 todo 待对接短信
+		return AjaxResult.success();
+	}
+	
+	
+	/**
+	 * 注册账号
+	 * @param registerAccount
+	 * @return
+	 */
+	@Override
+	public AjaxResult<LoginVo> registerAccount(RegisterAccount registerAccount) {
+		return null;
+	}
 }

--
Gitblit v1.7.1