From 1ad095d298f4211d65273d2197532cc605109b8b Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 15 六月 2023 20:05:10 +0800
Subject: [PATCH] 新增加注册及各种登录、修改密码、忘记密码相关接口

---
 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java |  230 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 225 insertions(+), 5 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
index 1dc073f..04a096f 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -8,6 +8,9 @@
 import com.dsh.account.mapper.TStudentMapper;
 import com.dsh.account.feignclient.other.ImgConfigClient;
 import com.dsh.account.feignclient.other.model.TImgConfig;
+import com.dsh.account.model.AddAppUserVo;
+import com.dsh.account.model.LoginSMSCodeVo;
+import com.dsh.account.model.LoginWeChatVo;
 import com.dsh.account.model.vo.classDetails.RegisteredCourse;
 import com.dsh.account.service.TAppUserService;
 import com.dsh.account.entity.TAppUser;
@@ -15,14 +18,15 @@
 import com.dsh.account.mapper.TAppUserMapper;
 import com.dsh.account.model.vo.classDetails.classInsVo.ClassInfoVo;
 
-import com.dsh.account.util.DateUtil;
-import com.dsh.account.util.ResultUtil;
-import com.dsh.account.util.ToolUtil;
+import com.dsh.account.util.*;
+import com.dsh.account.util.akeylogin.Md5Util;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -41,6 +45,22 @@
 
     @Resource
     private ImgConfigClient configClient;
+
+    @Autowired
+    private ALiSendSms aLiSendSms;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private GDMapGeocodingUtil gdMapGeocodingUtil;
+
+    @Autowired
+    private JwtTokenUtil jwtTokenUtil;
+
+
+
+
 
     @Resource
     private CoursePaymentClient paymentClient;
@@ -114,8 +134,208 @@
     @Override
     public ResultUtil getSMSCode(Integer type, String phone) throws Exception {
         if(type == 2){
-//            this.baseMapper.selectOne(new EntityWrapper<>())
+            TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", phone).ne("state", 3));
+            if(null != tAppUser){
+                return ResultUtil.error("账号已存在");
+            }
         }
-        return null;
+        String numberRandom = UUIDUtil.getNumberRandom(6);
+        aLiSendSms.sendSms(phone, "SMS_161275250", "{\"code\":\"" + numberRandom + "\"}");
+        redisUtil.setStrValue(phone, numberRandom, 300);
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 注册用户
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil addAppUser(AddAppUserVo addAppUserVo) throws Exception {
+        TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", addAppUserVo.getPhone()).ne("state", 3));
+        if(null != tAppUser){
+            return ResultUtil.error("账号已存在");
+        }
+        String value = redisUtil.getValue(addAppUserVo.getPhone());
+        if(ToolUtil.isEmpty(value) || !value.equals(addAppUserVo.getCode())){
+            return ResultUtil.error("验证码无效");
+        }
+
+        tAppUser = new TAppUser();
+        tAppUser.setPhone(addAppUserVo.getPhone());
+        tAppUser.setPassword(Md5Util.MD5Encode(addAppUserVo.getPassword(), null));
+        tAppUser.setIsVip(0);
+        tAppUser.setState(1);
+        if(ToolUtil.isNotEmpty(addAppUserVo.getLatitude()) && ToolUtil.isNotEmpty(addAppUserVo.getLongitude())){
+            Map<String, String> geocode = gdMapGeocodingUtil.geocode(addAppUserVo.getLongitude(), addAppUserVo.getLatitude());
+            if(null != geocode){
+                String province = geocode.get("province");
+                String provinceCode = geocode.get("provinceCode");
+                String city = geocode.get("city");
+                String cityCode = geocode.get("cityCode");
+                tAppUser.setProvince(province);
+                tAppUser.setProvinceCode(provinceCode);
+                tAppUser.setCity(city);
+                tAppUser.setCityCode(cityCode);
+            }
+        }
+        this.baseMapper.insert(tAppUser);
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 账号密码登录
+     * @param phone
+     * @param password
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil loginPassword(String phone, String password) throws Exception {
+        TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", phone).ne("state", 3));
+        if(null == tAppUser){
+            return ResultUtil.error("请先注册", "");
+        }
+        if(tAppUser.getState() == 2){
+            return ResultUtil.error("您的账号已被冻结", "");
+        }
+        password = Md5Util.MD5Encode(password, null);
+        if(!tAppUser.getPassword().equals(password)){
+            return ResultUtil.error("账号密码错误", "");
+        }
+        String token = getToken(tAppUser);
+        return ResultUtil.success(token);
+    }
+
+
+    /**
+     * 验证码登录
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil loginSMSCode(LoginSMSCodeVo loginSMSCodeVo) throws Exception {
+        String value = redisUtil.getValue(loginSMSCodeVo.getPhone());
+        if(ToolUtil.isEmpty(value) || !value.equals(loginSMSCodeVo.getCode())){
+            return ResultUtil.error("验证码无效");
+        }
+        TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", loginSMSCodeVo.getPhone()).ne("state", 3));
+        if(null == tAppUser){
+            tAppUser = new TAppUser();
+            tAppUser.setPhone(loginSMSCodeVo.getPhone());
+            tAppUser.setPassword(Md5Util.MD5Encode("111111", null));
+            tAppUser.setIsVip(0);
+            tAppUser.setState(1);
+            if(ToolUtil.isNotEmpty(loginSMSCodeVo.getLatitude()) && ToolUtil.isNotEmpty(loginSMSCodeVo.getLongitude())){
+                Map<String, String> geocode = gdMapGeocodingUtil.geocode(loginSMSCodeVo.getLongitude(), loginSMSCodeVo.getLatitude());
+                if(null != geocode){
+                    String province = geocode.get("province");
+                    String provinceCode = geocode.get("provinceCode");
+                    String city = geocode.get("city");
+                    String cityCode = geocode.get("cityCode");
+                    tAppUser.setProvince(province);
+                    tAppUser.setProvinceCode(provinceCode);
+                    tAppUser.setCity(city);
+                    tAppUser.setCityCode(cityCode);
+                }
+            }
+            this.baseMapper.insert(tAppUser);
+        }
+        if(tAppUser.getState() == 2){
+            return ResultUtil.error("您的账号已被冻结", "");
+        }
+        String token = getToken(tAppUser);
+        return ResultUtil.success(token);
+    }
+
+
+    /**
+     * 微信登录
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil loginWechat(LoginWeChatVo loginWechatVo) throws Exception {
+        TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("openid", loginWechatVo.getOpenId()).ne("state", 3));
+        if(null == tAppUser){
+            tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", loginWechatVo.getPhone()).ne("state", 3));
+            if(null == tAppUser){
+                tAppUser = new TAppUser();
+                tAppUser.setOpenid(loginWechatVo.getOpenId());
+                tAppUser.setPhone(loginWechatVo.getPhone());
+                tAppUser.setPassword(Md5Util.MD5Encode("111111", null));
+                tAppUser.setIsVip(0);
+                tAppUser.setState(1);
+                if(ToolUtil.isNotEmpty(loginWechatVo.getLatitude()) && ToolUtil.isNotEmpty(loginWechatVo.getLongitude())){
+                    Map<String, String> geocode = gdMapGeocodingUtil.geocode(loginWechatVo.getLongitude(), loginWechatVo.getLatitude());
+                    if(null != geocode){
+                        String province = geocode.get("province");
+                        String provinceCode = geocode.get("provinceCode");
+                        String city = geocode.get("city");
+                        String cityCode = geocode.get("cityCode");
+                        tAppUser.setProvince(province);
+                        tAppUser.setProvinceCode(provinceCode);
+                        tAppUser.setCity(city);
+                        tAppUser.setCityCode(cityCode);
+                    }
+                }
+                this.baseMapper.insert(tAppUser);
+            }
+        }
+        if(tAppUser.getState() == 2){
+            return ResultUtil.error("您的账号已被冻结", "");
+        }
+
+        if(ToolUtil.isNotEmpty(tAppUser.getOpenid())){
+            tAppUser.setOpenid(loginWechatVo.getOpenId());
+        }
+        if(ToolUtil.isNotEmpty(tAppUser.getPhone())){
+            tAppUser.setPhone(loginWechatVo.getPhone());
+        }
+        this.updateById(tAppUser);
+
+        String token = getToken(tAppUser);
+        return ResultUtil.success(token);
+    }
+
+
+    /**
+     * 获取JWT token和存储个人信息
+     * @param appUser
+     * @return
+     */
+    private String getToken(TAppUser appUser){
+        String randomKey = jwtTokenUtil.getRandomKey();
+        String token = jwtTokenUtil.generateToken(appUser.getId().toString(), randomKey);
+        redisUtil.setStrValue(token.substring(token.length() - 32), String.valueOf(appUser.getId()), 7 * 24 * 60 * 60);
+        redisUtil.setStrValue("USER_" + appUser.getPhone(), token.substring(token.length() - 32));
+        redisUtil.setStrValue("USER_" + appUser.getId(), token);
+        return token;
+    }
+
+
+    /**
+     * 修改密码
+     * @param phone
+     * @param code
+     * @param password
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil updatePassword(String phone, String code, String password) throws Exception {
+        String value = redisUtil.getValue(phone);
+        if(ToolUtil.isEmpty(value) || !value.equals(code)){
+            return ResultUtil.error("验证码无效");
+        }
+        TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", phone).ne("state", 3));
+        if(tAppUser.getState() == 2){
+            return ResultUtil.error("您的账号已被冻结", "");
+        }
+        tAppUser.setPassword(Md5Util.MD5Encode(password, null));
+        this.updateById(tAppUser);
+        return ResultUtil.success();
     }
 }

--
Gitblit v1.7.1