From bedff910eb2394a8ce68762a8f3a413d81187ac1 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 10 七月 2026 09:17:34 +0800
Subject: [PATCH] 后台

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java |   87 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 2 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index e4c3061..aab3f29 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -1,7 +1,9 @@
 package com.ruoyi.web.controller.system;
 
 import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.annotation.Anonymous;
 import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysRole;
@@ -13,8 +15,11 @@
 import com.ruoyi.framework.web.service.SysLoginService;
 import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.framework.manager.AsyncManager;
+import com.ruoyi.framework.manager.factory.AsyncFactory;
 import com.ruoyi.system.service.ISysMenuService;
 import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.web.controller.tool.MiddlePlatformDataQuery;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +29,7 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Set;
 
@@ -50,6 +56,8 @@
     private TokenService tokenService;
     @Autowired
     private ISysRoleService roleService;
+    @Autowired
+    private RuoYiConfig ruoyiConfig;
 
     /**
      * 账号密码登录
@@ -61,10 +69,61 @@
     public AjaxResult login(@RequestBody String param)
     {
         LoginBody loginBody = JSON.parseObject(param, LoginBody.class);
-        AjaxResult ajax = AjaxResult.success();
-        // 生成令牌
+        return buildLoginResult(loginBody);
+    }
+
+    @Anonymous
+    @ApiOperation(value = "中台优先账号密码登录", notes = "集群中台模式下先判断中台用户,未命中时由前端回落本地登录")
+    @PostMapping("/api/middle-platform/login")
+    public AjaxResult middlePlatformLogin(@RequestBody String param)
+    {
+        LoginBody loginBody = JSON.parseObject(param, LoginBody.class);
+        if (!ruoyiConfig.isConnectMiddlePlatform())
+        {
+            return buildLoginResult(loginBody);
+        }
+        loginService.validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid());
+        try
+        {
+            String middlePlatformToken = MiddlePlatformDataQuery.login(loginBody.getUsername(), loginBody.getPassword());
+            if (middlePlatformToken == null)
+            {
+                return buildLocalFallbackLoginResult(loginBody);
+            }
+            AjaxResult ajax = buildLoginResult(loginService.loginByTrustedUsername(
+                    loginBody.getUsername(), "middlePlatform", middlePlatformToken));
+            ajax.put("loginSource", "middlePlatform");
+            return ajax;
+        }
+        catch (IOException e)
+        {
+            if (loginBody != null)
+            {
+                return buildLocalFallbackLoginResult(loginBody);
+            }
+            return AjaxResult.error("中台登录失败:" + e.getMessage());
+        }
+    }
+
+    private AjaxResult buildLocalFallbackLoginResult(LoginBody loginBody)
+    {
+        AjaxResult ajax = buildLoginResult(loginService.loginWithoutCaptcha(loginBody.getUsername(), loginBody.getPassword()));
+        ajax.put("loginSource", "local");
+        ajax.put("middlePlatformFallback", true);
+        return ajax;
+    }
+
+    private AjaxResult buildLoginResult(LoginBody loginBody)
+    {
         LoginUser loginUser = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
                 loginBody.getUuid());
+        return buildLoginResult(loginUser);
+    }
+
+    private AjaxResult buildLoginResult(LoginUser loginUser)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        // 生成令牌
         ajax.put(Constants.TOKEN, tokenService.createToken(loginUser));
         List<SysRole> roles = loginUser.getUser().getRoles();
         if(CollectionUtils.isEmpty(roles)){
@@ -82,6 +141,30 @@
         return ajax;
     }
 
+    @PostMapping("/api/middle-platform/logout")
+    public AjaxResult middlePlatformLogout()
+    {
+        AjaxResult ajax = AjaxResult.success("退出成功");
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (loginUser == null)
+        {
+            return ajax;
+        }
+        try
+        {
+            MiddlePlatformDataQuery.logout(loginUser.getMiddlePlatformToken());
+            ajax.put("middlePlatformLogoutSuccess", true);
+        }
+        catch (IOException e)
+        {
+            ajax.put("middlePlatformLogoutSuccess", false);
+            ajax.put("middlePlatformLogoutMessage", e.getMessage());
+        }
+        tokenService.delLoginUser(loginUser.getToken());
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginUser.getUsername(), Constants.LOGOUT, "退出成功"));
+        return ajax;
+    }
+
     /**
      * 账号密码登录
      *

--
Gitblit v1.7.1