From 0832f385234a8a2f3b69a5c3fc1e1c95e3c4849e Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期一, 09 六月 2025 17:48:20 +0800
Subject: [PATCH] zjh20250609

---
 ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java             |   80 +++++++++++++++++++++++---
 ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java                        |    3 +
 ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java              |   31 +++++++--
 ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java           |   12 ++-
 ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java                        |    3 
 ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java |   17 +++++
 ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java               |    2 
 ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java           |    2 
 ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java                 |    3 
 9 files changed, 125 insertions(+), 28 deletions(-)

diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java
index 5a0ea1f..17c60a4 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java
@@ -100,7 +100,7 @@
         if (loginBody.getMobile()) {
             token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid(),hospId);
         } else {
-            token = loginService.Cuslogin(loginBody.getUsername(),loginBody.getSfzh(),loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid());
+            token = loginService.Cuslogin(loginBody.getUsername(),loginBody.getSfzh(),loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid(),hospId);
             LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>();
             wq.eq(TjCustomer::getCusPhone, loginBody.getUsername());
             TjCustomer tjCustomer = customerService.getOne(wq);
diff --git a/ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java b/ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java
index 7b5d8b9..d1358f7 100644
--- a/ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java
+++ b/ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java
@@ -6,6 +6,9 @@
  * @author ltkj
  */
 public class CacheConstants {
+
+
+
     /**
      * 鐧诲綍鐢ㄦ埛 redis key
      */
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java
index d1fcd41..3c04daf 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java
@@ -94,7 +94,8 @@
             // 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟
             getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
             // 淇濆瓨鏁版嵁搴�
-            AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
+//            AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
+            AsyncFactory.recordOper(operLog);
         } catch (Exception exp) {
             // 璁板綍鏈湴寮傚父鏃ュ織
             log.error("==鍓嶇疆閫氱煡寮傚父==");
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java b/ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java
index b3652b7..a2bc142 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java
@@ -1,7 +1,14 @@
 package com.ltkj.framework.manager.factory;
 
+import java.io.IOException;
 import java.util.TimerTask;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ltkj.db.DataSourceConfig;
+import com.ltkj.db.DataSourceContextHolder;
+import com.ltkj.hosp.domain.DictHosp;
+import com.ltkj.hosp.service.IDictHospService;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.ltkj.common.constant.Constants;
@@ -16,12 +23,17 @@
 import com.ltkj.system.service.ISysLogininforService;
 import com.ltkj.system.service.ISysOperLogService;
 import eu.bitwalker.useragentutils.UserAgent;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * 寮傛宸ュ巶锛堜骇鐢熶换鍔$敤锛�
  *
  * @author ltkj
  */
+//@Component
+    @Slf4j
 public class AsyncFactory {
     private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
 
@@ -34,13 +46,20 @@
      * @param args     鍒楄〃
      * @return 浠诲姟task
      */
-    public static TimerTask recordLogininfor(final String username, final String status, final String message,
+    public static TimerTask recordLogininfor(final String username, final String status, final String message,final String hospId,
                                              final Object... args) {
         final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
         final String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
+
+//        log.info("闄㈠尯鍙傛暟hospId"+hospId);
         return new TimerTask() {
             @Override
             public void run() {
+
+                log.info("闄㈠尯鍙傛暟hospId"+hospId);
+                DataSourceContextHolder.setDataSourceKey(hospId);
+                SpringUtils.getBean(DataSourceConfig.class).addDataSource(hospId);
+
                 String address = AddressUtils.getRealAddressByIP(ip);
                 StringBuilder s = new StringBuilder();
                 s.append(LogUtils.getBlock(ip));
@@ -74,20 +93,61 @@
         };
     }
 
+
+    public static void recordLogininfornew(final String username, final String status, final String message,
+                                             final Object... args) {
+        final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
+        final String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
+        String address = AddressUtils.getRealAddressByIP(ip);
+        StringBuilder s = new StringBuilder();
+        s.append(LogUtils.getBlock(ip));
+        s.append(address);
+        s.append(LogUtils.getBlock(username));
+        s.append(LogUtils.getBlock(status));
+        s.append(LogUtils.getBlock(message));
+        // 鎵撳嵃淇℃伅鍒版棩蹇�
+        sys_user_logger.info(s.toString(), args);
+        // 鑾峰彇瀹㈡埛绔搷浣滅郴缁�
+        String os = userAgent.getOperatingSystem().getName();
+        // 鑾峰彇瀹㈡埛绔祻瑙堝櫒
+        String browser = userAgent.getBrowser().getName();
+        // 灏佽瀵硅薄
+        SysLogininfor logininfor = new SysLogininfor();
+        logininfor.setUserName(username);
+        logininfor.setIpaddr(ip);
+        logininfor.setLoginLocation(address);
+        logininfor.setBrowser(browser);
+        logininfor.setOs(os);
+        logininfor.setMsg(message);
+        // 鏃ュ織鐘舵��
+        if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
+            logininfor.setStatus(Constants.SUCCESS);
+        } else if (Constants.LOGIN_FAIL.equals(status)) {
+            logininfor.setStatus(Constants.FAIL);
+        }
+        // 鎻掑叆鏁版嵁
+        SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor);
+    }
     /**
      * 鎿嶄綔鏃ュ織璁板綍
      *
      * @param operLog 鎿嶄綔鏃ュ織淇℃伅
      * @return 浠诲姟task
      */
-    public static TimerTask recordOper(final SysOperLog operLog) {
-        return new TimerTask() {
-            @Override
-            public void run() {
-                // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣
-                operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
-                SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);
-            }
-        };
+//    public static TimerTask recordOper(final SysOperLog operLog) {
+//        return new TimerTask() {
+//            @Override
+//            public void run() {
+//                // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣
+//                operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
+//                SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);
+//            }
+//        };
+//    }
+
+    public static void recordOper(final SysOperLog operLog) {
+        // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣
+        operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
+        SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);
     }
 }
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java b/ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java
index 53b6d13..4ad0a69 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java
@@ -1,11 +1,16 @@
 package com.ltkj.framework.security.handle;
 
 import java.io.IOException;
+import javax.annotation.Resource;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ltkj.db.DataSourceContextHolder;
 import com.ltkj.framework.web.service.TokenService;
+import com.ltkj.hosp.domain.DictHosp;
+import com.ltkj.hosp.service.IDictHospService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.core.Authentication;
@@ -28,7 +33,8 @@
 public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler {
     @Autowired
     private TokenService tokenService;
-
+    @Resource
+    private IDictHospService hospService;
     /**
      * 閫�鍑哄鐞�
      *
@@ -37,13 +43,20 @@
     @Override
     public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
             throws IOException, ServletException {
+        String hospId = request.getHeader("hospId");
+        LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DictHosp::getCode,hospId);
+        DictHosp hosp = hospService.getOne(wrapper);
+        DataSourceContextHolder.setDataSourceKey(hosp.getDbname());
+
         LoginUser loginUser = tokenService.getLoginUser(request);
         if (StringUtils.isNotNull(loginUser)) {
             String userName = loginUser.getUsername();
             // 鍒犻櫎鐢ㄦ埛缂撳瓨璁板綍
             tokenService.delLoginUser(loginUser.getToken(), loginUser.getUser().getUserId());
             // 璁板綍鐢ㄦ埛閫�鍑烘棩蹇�
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�"));
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�",hosp.getDbname()));
+//            AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�");
         }
         ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success("閫�鍑烘垚鍔�")));
     }
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java
index 34d12c4..eba1b92 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java
@@ -114,12 +114,14 @@
             redisCache.deleteObject(verifyKey);
             if (captcha == null)
             {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"),hosp.getDbname()));
+//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
                 throw new CaptchaExpireException();
             }
             if (!code.equalsIgnoreCase(captcha))
             {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"),hosp.getDbname()));
+//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
                 throw new CaptchaException();
             }
         }
@@ -139,16 +141,21 @@
             authentication = authenticationManager.authenticate(authenticationToken);
         } catch (Exception e) {
             if (e instanceof BadCredentialsException) {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"),hosp.getDbname()));
+//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"));
                 throw new UserPasswordNotMatchException();
             } else {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage(),hosp.getDbname()));
+//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage());
                 throw new ServiceException(e.getMessage());
             }
         } finally {
             AuthenticationContextHolder.clearContext();
         }
-        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+//        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+//       AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname());
+//       AsyncFactory.recordLogininforord(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname());
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname()));
         LoginUser loginUser = (LoginUser) authentication.getPrincipal();
         loginUser.setHospDB(hosp.getDbname());
         loginUser.setHospId(hospId);
@@ -231,7 +238,14 @@
      * @param password 瀵嗙爜
      * @return 缁撴灉
      */
-    public String Cuslogin(String username,String sfzh, String password, Boolean type,String code,String uuid) {
+    public String Cuslogin(String username,String sfzh, String password, Boolean type,String code,String uuid, String hospId) {
+
+        DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name());
+        LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DictHosp::getCode,hospId);
+        DictHosp hosp = hospService.getOne(wrapper);
+
+        DataSourceContextHolder.setDataSourceKey(hosp.getDbname());
 
         String aSwitch = configService.selectConfigByKey("captcha_switch");
         if(null !=aSwitch && aSwitch.equalsIgnoreCase("Y")){
@@ -240,12 +254,13 @@
             redisCache.deleteObject(verifyKey);
             if (captcha == null)
             {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"),hosp.getDbname()));
+//                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
                 throw new CaptchaExpireException();
             }
             if (!code.equalsIgnoreCase(captcha))
             {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
+                AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"),hosp.getDbname());
                 throw new CaptchaException();
             }
         }
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java
index 8d588fd..1d243ab 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java
@@ -56,15 +56,19 @@
         }
 
         if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) {
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
-                    MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime)));
+//            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
+//                    MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime),null));
+            AsyncFactory.recordLogininfornew(username, Constants.LOGIN_FAIL,
+                    MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime));
             throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime);
         }
 
         if (!matches(user, password)) {
             retryCount = retryCount + 1;
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
-                    MessageUtils.message("user.password.retry.limit.count", retryCount)));
+//            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
+//                    MessageUtils.message("user.password.retry.limit.count", retryCount),null));
+            AsyncFactory.recordLogininfornew(username, Constants.LOGIN_FAIL,
+                    MessageUtils.message("user.password.retry.limit.count", retryCount));
             redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES);
             throw new UserPasswordNotMatchException();
         } else {
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java
index f022427..9ac423f 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java
@@ -67,7 +67,7 @@
             if (!regFlag) {
                 msg = "娉ㄥ唽澶辫触,璇疯仈绯荤郴缁熺鐞嗕汉鍛�";
             } else {
-                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success")));
+                AsyncFactory.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"),  null);
             }
         }
         return msg;
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java
index 3c021cd..02769de 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java
@@ -219,7 +219,8 @@
     }
 
     private String getTokenKey(String uuid) {
-        return CacheConstants.LOGIN_TOKEN_KEY + uuid;
+
+        return CacheConstants.LOGIN_TOKEN_KEY+uuid;
     }
 
 

--
Gitblit v1.8.0