dzx 1 рік тому
батько
коміт
e80be0ff0c

+ 27 - 6
src/main/java/com/xjrsoft/module/system/controller/LoginController.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.system.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.jwt.JWT;
@@ -30,6 +31,8 @@ import com.xjrsoft.module.system.dto.LoginDto;
 import com.xjrsoft.module.system.dto.LoginQRCodeDto;
 import com.xjrsoft.module.system.service.ILoginService;
 import com.xjrsoft.module.system.service.IOauthService;
+import com.xjrsoft.module.system.vo.LoginCheckQRCodeVo;
+import com.xjrsoft.module.system.vo.LoginQRCodeVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -94,29 +97,47 @@ public class LoginController {
     @GetMapping(value = "/loginQRCode")
     @ApiOperation(value="登录-二维码")
     @SaCheckPermission("wfstudenttextbookclaim:detail")
-    public RT<String> qrcode() throws Exception {
-        String url = commonPropertiesConfig.getDomainApp() + "/system/QR-code-login";
+    public RT<LoginQRCodeVo> qrcode() throws Exception {
+        String url = commonPropertiesConfig.getDomainApp() + "/system/QR-code-login?";
         int width = 200;
         int height = 200;
         int margin = 1;
 
         try {
             String base64 = QrCodeUtil.createBase64(url, width, height, margin);
-            return RT.ok(base64);
+            LoginQRCodeVo loginQRCodeVo = new LoginQRCodeVo();
+            loginQRCodeVo.setImgBase64(base64);
+            long loginCode = IdUtil.getSnowflakeNextId();
+            loginQRCodeVo.setLoginCode(loginCode + "");
+            return RT.ok(loginQRCodeVo);
         } catch (Exception e) {
-            throw e;
+            return RT.error(e.getMessage());
         }
     }
 
     @PostMapping("/QR-code-login")
-    @ApiOperation(value = "登录", notes = "code")
+    @ApiOperation(value = "二维码登录", notes = "code")
     @XjrLog(value = "二维码登录")
     public R loginQRCode(@RequestBody @Valid LoginQRCodeDto dto) throws Exception {
         return R.ok(loginService.loginQRCode(dto));
     }
 
+    @PostMapping("/check-QR-code-login")
+    @ApiOperation(value = "验证是否登录成功", notes = "验证是否登录成功")
+    @XjrLog(value = "验证是否登录成功")
+    public RT<LoginCheckQRCodeVo> checkLoginQRCode(@RequestBody @Valid String loginCode) {
+        String token = redisUtil.get(loginCode);
+        LoginCheckQRCodeVo loginCheckQRCodeVo = new LoginCheckQRCodeVo();
+        loginCheckQRCodeVo.setToken(token);
+        loginCheckQRCodeVo.setStatus(0);
+        if(StrUtil.isEmpty(token)){
+            loginCheckQRCodeVo.setStatus(1);
+        }
+        return RT.ok(loginCheckQRCodeVo);
+    }
+
     @PostMapping("/bindOpenid")
-    @ApiOperation(value = "登录", notes = "code")
+    @ApiOperation(value = "登录", notes = "登录")
     @XjrLog(value = "code换Openid并绑定")
     public R bindOpenid(@RequestBody @Valid LoginByCodeDto dto) throws Exception {
         return R.ok(loginService.bindOpenid(dto));

+ 5 - 1
src/main/java/com/xjrsoft/module/system/dto/LoginQRCodeDto.java

@@ -8,7 +8,11 @@ import javax.validation.constraints.NotBlank;
 @Data
 public class LoginQRCodeDto {
     @ApiModelProperty("openId")
-    @NotBlank(message = "Code不能为空!")
+    @NotBlank(message = "openId不能为空!")
     private String openId;
 
+    @ApiModelProperty("loginCode")
+    @NotBlank(message = "loginCode不能为空!")
+    private String loginCode;
+
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/system/service/ILoginService.java

@@ -34,5 +34,5 @@ public interface ILoginService {
      * @return
      * @throws Exception
      */
-    LoginVo loginQRCode(LoginQRCodeDto dto) throws Exception;
+    Boolean loginQRCode(LoginQRCodeDto dto) throws Exception;
 }

+ 4 - 3
src/main/java/com/xjrsoft/module/system/service/impl/LoginServiceImpl.java

@@ -194,7 +194,7 @@ public class LoginServiceImpl implements ILoginService {
     }
 
     @Override
-    public LoginVo loginQRCode(LoginQRCodeDto dto) throws Exception {
+    public Boolean loginQRCode(LoginQRCodeDto dto) throws Exception {
         if (licenseConfig.getEnabled()) {
             //查出所有在线用户
             List<String> onlineUser = StpUtil.searchSessionId("", 0, -1, true);
@@ -213,8 +213,9 @@ public class LoginServiceImpl implements ILoginService {
         if (loginUser == null) {
             throw new MyException("未能查询到您的用户信息");
         }
-
-        return getLoginInfo(loginUser, "PC");
+        LoginVo pc = getLoginInfo(loginUser, "PC");
+        redisUtil.set(dto.getLoginCode(), pc.getToken(), 5 * 60);
+        return Boolean.TRUE;
     }
 
     private LoginVo getLoginInfo(User loginUser, String loginType) throws Exception {

+ 19 - 0
src/main/java/com/xjrsoft/module/system/vo/LoginCheckQRCodeVo.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.system.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author dzx
+ * @date 2024/3/22
+ */
+@Data
+public class LoginCheckQRCodeVo {
+
+    @ApiModelProperty("token")
+    private String token;
+
+    @ApiModelProperty("状态(0:未失效 1:失效)")
+    private Integer status;
+
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/system/vo/LoginQRCodeVo.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.system.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author dzx
+ * @date 2024/3/22
+ */
+@Data
+public class LoginQRCodeVo {
+
+    @ApiModelProperty("二维码base64")
+    private String imgBase64;
+
+    @ApiModelProperty("登录编码")
+    private String loginCode;
+
+}