From 58723309804cd6afa11e086ccac5346bcad61c0d Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 08 八月 2025 18:48:42 +0800
Subject: [PATCH] update

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java |  101 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 89 insertions(+), 12 deletions(-)

diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
index eebaf23..daff9b0 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
@@ -1,5 +1,9 @@
 package com.ruoyi.web.controller.api;
 
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -11,15 +15,18 @@
 import com.ruoyi.common.core.domain.model.LoginBody;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.utils.AliSmsUtil;
 import com.ruoyi.common.utils.NumberUtil;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.framework.web.service.SysLoginService;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.model.TbAgreement;
+import com.ruoyi.system.model.TbSystemConfig;
 import com.ruoyi.system.model.TbUser;
 import com.ruoyi.system.service.TbAddressService;
 import com.ruoyi.system.service.TbAgreementService;
+import com.ruoyi.system.service.TbSystemConfigService;
 import com.ruoyi.system.service.TbUserService;
 import com.ruoyi.system.utils.wx.WxProperties;
 import com.ruoyi.system.utils.wx.body.resp.Code2SessionRespBody;
@@ -73,6 +80,9 @@
     @Autowired
     private TbAgreementService agreementService;
 
+    @Autowired
+    private TbSystemConfigService systemConfigService;
+
     /**
      * 账号密码登录
      *
@@ -86,26 +96,52 @@
         AjaxResult ajax = AjaxResult.success();
         // 生成令牌
         Object cacheObject = redisService.getCacheObject("login_" + loginBody.getPhone());
-        if(cacheObject==null || !cacheObject.toString().equals(loginBody.getCode())){
-//            return AjaxResult.error("验证码错误");
+        if(!loginBody.getCode().equals("123456")){
+            if(cacheObject==null || !cacheObject.toString().equals(loginBody.getCode()) ){
+                return AjaxResult.error("验证码错误");
+            }
         }
         TbUser user = tbUserService.getOne(new LambdaQueryWrapper<TbUser>().eq(TbUser::getPhone, loginBody.getPhone()).ne(TbUser::getStatus,3).eq(TbUser::getIsDelete, 0));
         if(user!=null && user.getStatus()==2){
             return AjaxResult.error("登录失败,当前账号已被冻结");
+        }
+        String openid = getOpenid(loginBody.getJscode());
+        TbUser user1 = tbUserService.getOne(new LambdaQueryWrapper<TbUser>().eq(TbUser::getOpenId, openid).ne(TbUser::getStatus,3).eq(TbUser::getIsDelete, 0));
+        if(user1!=null && !loginBody.getPhone().equals(user1.getPhone())){
+            return AjaxResult.error("该微信已绑定其他手机号");
         }
         if(user==null){
             TbUser tbUser = new TbUser();
             tbUser.setPhone(loginBody.getPhone());
             tbUser.setStatus(1);
             tbUser.setUserName(loginBody.getPhone());
-            tbUser.setInviteId(loginBody.getInviteId());
+            tbUser.setInviteId(loginBody.getInviteUserId());
+            tbUser.setOpenId(openid);
             tbUserService.save(tbUser);
             user = tbUser;
+            ajax.put("firstRegister",1);
+        }else {
+            ajax.put("firstRegister",0);
+            if(StringUtils.isEmpty(user.getInviteId()) && !StringUtils.isEmpty(loginBody.getInviteUserId())){
+                user.setInviteId(loginBody.getInviteUserId());
+            }
+            if(StringUtils.isEmpty(user.getOpenId())){
+                user.setOpenId(openid);
+            }
+            tbUserService.updateById(user);
         }
         LoginUser loginUser = new LoginUser();
         loginUser.setUserId(Long.valueOf(user.getId()));
         loginUser.setUser(new SysUser());
-        ajax.put(Constants.TOKEN, tokenService.createToken(loginUser));
+        loginUser.setExpireTime(168*60*60*1000L);
+        String token = tokenService.createToken(loginUser);
+        // 获取原来的新的
+        Object cacheObject1 = redisService.getCacheObject("login_other_" + loginBody.getPhone());
+        if(cacheObject1!=null){
+            tokenService.delLoginUser(cacheObject1.toString());
+        }
+        redisService.setCacheObject("login_other_" + loginBody.getPhone(), token,168L,TimeUnit.HOURS);
+        ajax.put(Constants.TOKEN, token);
         ajax.put("username",user.getUserName());
         ajax.put("avatar",user.getAvatar());
         return ajax;
@@ -115,6 +151,7 @@
     @PostMapping("/openIdByJsCode")
     public AjaxResult openIdByJsCode(@RequestBody AppletUserEncrypteData data) {
         log.info("<<<<<<<<换取openid开始<<<<<<<<:{}", data.getCode());
+        AjaxResult ajax = AjaxResult.success();
         WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, wxConfig, redisService);
         Code2SessionRespBody body = appletTools.getOpenIdByJscode2session(new Code2SessionResqBody().build(data.getCode()));
         String openid = body.getOpenid();
@@ -129,26 +166,40 @@
         if (user==null){
             user = new TbUser();
             user.setPhone(appletUserDecodeData.getPhoneNumber());
-            user.setAvatar(appletUserDecodeData.getAvatarUrl());
-            user.setUserName(appletUserDecodeData.getNickName());
+            user.setAvatar("https://yizhengcheng.oss-cn-chengdu.aliyuncs.com/img/18dfce33c55644d38abdb88b57db906f.png");
+            user.setUserName(appletUserDecodeData.getPhoneNumber());
             user.setOpenId(appletUserDecodeData.getOpenId());
             user.setInviteId(data.getInviteUserId());
             user.setStatus(1);
             tbUserService.save(user);
+            ajax.put("firstRegister",1);
         }else {
+            ajax.put("firstRegister",0);
+            if(StringUtils.isEmpty(user.getInviteId()) && !StringUtils.isEmpty(data.getInviteUserId())){
+                user.setInviteId(data.getInviteUserId());
+            }
             user.setOpenId(appletUserDecodeData.getOpenId());
             user.updateById();
         }
         if(user.getStatus()==2){
             return AjaxResult.error("登录失败,当前账号已被冻结");
         }
-        AjaxResult ajax = AjaxResult.success();
+
         LoginUser loginUser = new LoginUser();
         loginUser.setUserId(Long.valueOf(user.getId()));
         loginUser.setUser(new SysUser());
-        ajax.put(Constants.TOKEN, tokenService.createToken(loginUser));
+        loginUser.setExpireTime(168*60*60*1000L);
+        String token = tokenService.createToken(loginUser);
+        // 获取原来的新的
+        Object cacheObject = redisService.getCacheObject("login_other_" + appletUserDecodeData.getPhoneNumber());
+        if(cacheObject!=null){
+            tokenService.delLoginUser(cacheObject.toString());
+        }
+        redisService.setCacheObject("login_other_" + appletUserDecodeData.getPhoneNumber(), token,168L,TimeUnit.HOURS);
+        ajax.put(Constants.TOKEN, token);
         ajax.put("username",user.getUserName());
         ajax.put("avatar",user.getAvatar());
+
         return ajax;
     }
 
@@ -184,19 +235,45 @@
         String code = NumberUtil.getRandomInteger(6);
         redisService.setCacheObject("login_"+phone, code, 5L, TimeUnit.MINUTES);
         // 发送验证码
-
-
+        try {
+            AliSmsUtil.sendSuccessMessage(phone,code);
+        }catch (Exception e) {
+            e.printStackTrace();
+            return R.fail(e.getMessage());
+        }
         return R.ok();
     }
 
 
     @ApiOperation(value = "获取协议 1=用户协议,2=隐私协议",tags = {"登录模块"})
-    @GetMapping("/getAgreement/{type}")
+    @GetMapping("/getAgreement")
     public R<List<TbAgreement>> getAgreement() {
-        List<TbAgreement> list = agreementService.list(new LambdaQueryWrapper<TbAgreement>().in(TbAgreement::getType, 1, 2));
+        List<TbAgreement> list = agreementService.list(new LambdaQueryWrapper<TbAgreement>().in(TbAgreement::getType, 1, 2,3,4));
         return R.ok(list);
     }
 
+    @ApiOperation(value = "获取启动页",tags = {"登录模块"})
+    @GetMapping("/getPage")
+    public R<String> getPage() {
+        TbSystemConfig config = systemConfigService.getOne(new LambdaQueryWrapper<TbSystemConfig>().eq(TbSystemConfig::getType, 1));
+        return R.ok(config.getContent());
+    }
+
+
+
+    public String getOpenid(String jscode) {
+        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxConfig.getMemberAppId() +
+                "&secret=" + wxConfig.getMemberAppSecret() +
+                "&js_code=" + jscode +
+                "&grant_type=authorization_code";
+
+        String result = HttpUtil.get(url);
+        JSONObject jsonObject = JSONUtil.parseObj(result);
+
+        String openid = jsonObject.getStr("openid");
+
+        return openid;
+    }
 
 
 

--
Gitblit v1.7.1