From c6ebbc7a11ca228addb0cca7c5f34d2d5ae3249b Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 18 六月 2025 17:48:11 +0800
Subject: [PATCH] 更新优化

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java |   45 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 40 insertions(+), 5 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 1a32d9c..e6854aa 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
@@ -21,6 +21,7 @@
 import com.ruoyi.system.service.TbAddressService;
 import com.ruoyi.system.service.TbAgreementService;
 import com.ruoyi.system.service.TbUserService;
+import com.ruoyi.system.utils.wx.WxProperties;
 import com.ruoyi.system.utils.wx.body.resp.Code2SessionRespBody;
 import com.ruoyi.system.utils.wx.body.resq.Code2SessionResqBody;
 import com.ruoyi.system.utils.wx.model.WeixinProperties;
@@ -57,7 +58,7 @@
 public class WxLoginController {
 
     @Autowired
-    private WeixinProperties wxConfig;
+    private WxProperties wxConfig;
     @Autowired
     private RestTemplate wxRestTemplate;
     @Resource
@@ -86,7 +87,7 @@
         // 生成令牌
         Object cacheObject = redisService.getCacheObject("login_" + loginBody.getPhone());
         if(cacheObject==null || !cacheObject.toString().equals(loginBody.getCode())){
-            return AjaxResult.error("验证码错误");
+//            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){
@@ -97,9 +98,15 @@
             tbUser.setPhone(loginBody.getPhone());
             tbUser.setStatus(1);
             tbUser.setUserName(loginBody.getPhone());
-            tbUser.setInviteId(loginBody.getInviteId());
+            tbUser.setInviteId(loginBody.getInviteUserId());
             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());
+            }
         }
         LoginUser loginUser = new LoginUser();
         loginUser.setUserId(Long.valueOf(user.getId()));
@@ -110,10 +117,11 @@
         return ajax;
     }
 
-    @ApiOperation(value = "通过code获得openid,获取用户信息",tags = {"登录模块"})
+    @ApiOperation(value = "微信登录 通过code获得openid,获取用户信息",tags = {"登录模块"})
     @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();
@@ -134,24 +142,51 @@
             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));
         ajax.put("username",user.getUserName());
         ajax.put("avatar",user.getAvatar());
+
         return ajax;
     }
 
 
+    @ApiOperation(value = "授权小程序,获取用户信息",tags = {"登录模块"})
+    @PostMapping("/openIdByCode")
+    public R<?> openIdByCode(@RequestBody AppletUserEncrypteData data) {
+        log.info("<<<<<<<<换取openid开始<<<<<<<<:{}", data.getCode());
+        WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, wxConfig, redisService);
+        Code2SessionRespBody body = appletTools.getOpenIdByJscode2session(new Code2SessionResqBody().build(data.getCode()));
+        String openid = body.getOpenid();
+        String sessionKey = body.getSessionKey();
+        AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey,  data.getIv());
+        appletUserDecodeData.setOpenId(openid);
+        // 先使用openId和当前手机号进行查询
+        TbUser user = tbUserService.getOne(Wrappers.lambdaQuery(TbUser.class).eq(TbUser::getIsDelete,0).ne(TbUser::getStatus,3)
+                .and(e->e.eq(TbUser::getOpenId, appletUserDecodeData.getOpenId()).or()
+                        .eq(TbUser::getPhone, appletUserDecodeData.getPhoneNumber())));
+        if (user!=null){
+            user.setOpenId(appletUserDecodeData.getOpenId());
+            user.updateById();
+        }
+        return R.ok();
+    }
+
 
     @ApiOperation(value = "发送验证码",tags = {"登录模块"})
     @PostMapping("/sendCode")

--
Gitblit v1.7.1