From b2fef519c89360cf7eeba2c781f1043caca75fc6 Mon Sep 17 00:00:00 2001
From: zhaowenxuan <chacca165@163.com>
Date: 星期四, 13 二月 2025 20:36:56 +0800
Subject: [PATCH] 积木报表拦截切库

---
 ltkj-common/src/main/java/com/ltkj/common/core/domain/model/LoginUser.java       |    4 ++
 ltkj-admin/src/main/java/com/ltkj/web/jmreport/JimuReportTokenService.java       |    3 +
 ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java |   15 +++++++
 ltkj-framework/src/main/java/com/ltkj/framework/interceptor/JimuInterceptor.java |   72 ++++++++++++++++++++++++++++++++++++
 ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java  |    7 ++-
 ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java            |    9 ++++
 6 files changed, 105 insertions(+), 5 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 5a7e354..6418c0b 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
@@ -38,6 +38,7 @@
 import com.ltkj.framework.web.service.SysPermissionService;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 
 import static com.ltkj.common.core.domain.AjaxResult.success;
 
@@ -84,13 +85,13 @@
     @PostMapping("/login")
     @ApiOperation("鐧诲綍鎺ュ彛")
     @RepeatSubmit
-    public AjaxResult login(@RequestBody @ApiParam(value = "鐧诲綍瀵硅薄") LoginBody loginBody) {
-
+    public AjaxResult login(@RequestBody @ApiParam(value = "鐧诲綍瀵硅薄") LoginBody loginBody, HttpServletRequest request) {
+        String hospId = request.getHeader("hospId");
         AjaxResult ajax = success();
         // 鐢熸垚浠ょ墝
         String token;
         if (loginBody.getMobile()) {
-            token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid());
+            token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid(),hospId);
         } else {
             token = loginService.Cuslogin(loginBody.getUsername(), loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid());
         }
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/jmreport/JimuReportTokenService.java b/ltkj-admin/src/main/java/com/ltkj/web/jmreport/JimuReportTokenService.java
index 7420f9a..c167c4a 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/jmreport/JimuReportTokenService.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/jmreport/JimuReportTokenService.java
@@ -98,6 +98,9 @@
 
         header.add("token", getToken());
         header.add("X-Access-Token", getToken());
+        LoginUser loginUser = tokenService.getLoginUser(getToken());
+        header.add("hospId",loginUser.getHospId());
+        header.add("QospId","123");
         return header;
     }
 }
diff --git a/ltkj-common/src/main/java/com/ltkj/common/core/domain/model/LoginUser.java b/ltkj-common/src/main/java/com/ltkj/common/core/domain/model/LoginUser.java
index b681c16..435cb5c 100644
--- a/ltkj-common/src/main/java/com/ltkj/common/core/domain/model/LoginUser.java
+++ b/ltkj-common/src/main/java/com/ltkj/common/core/domain/model/LoginUser.java
@@ -83,6 +83,10 @@
 
     private String hospName;
 
+    private String hospId;
+
+    private String hospDB;
+
     /*    */
 
     /**
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java b/ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java
index 4ab71c6..fa7ab2b 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/config/WebConfig.java
@@ -2,6 +2,7 @@
 
 //import com.ltkj.framework.interceptor.DBChangeInterceptor;
 import com.ltkj.framework.interceptor.DBChangeInterceptor;
+import com.ltkj.framework.interceptor.JimuInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.HttpMethod;
@@ -18,6 +19,8 @@
 
     @Autowired
     private DBChangeInterceptor dbChangeInterceptor;
+    @Autowired
+    private JimuInterceptor jimuInterceptor;
 
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
@@ -39,7 +42,8 @@
                         "/system/dict/data/**",
                         "/system/dict/type/**",
                         "/captchaImage","/getCaptchaConfigKey/**",
-                        "/system/role/execUpdateSql"
+                        "/system/role/execUpdateSql",
+                        "/jmreport/**"
 //                        ,
 //                        "/login", "/register", "/captchaImage","/cus/**","/getCaptchaConfigKey","/report/jmreport/**",
 //                        "/sqlserver/getdata/**","/api/His/**","/system/config/zx","/system/config/gxxmpym","/system/report/savePdf",
@@ -48,5 +52,8 @@
 //                        String.valueOf(HttpMethod.GET), "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**",
 //                        "/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**","/jmreport/**","/lis/**","/pacs/**","/callBack/**"
                 });
+
+        registry.addInterceptor(jimuInterceptor)
+                .addPathPatterns("/jmreport/**");
     }
 }
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/interceptor/JimuInterceptor.java b/ltkj-framework/src/main/java/com/ltkj/framework/interceptor/JimuInterceptor.java
new file mode 100644
index 0000000..7753fbe
--- /dev/null
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/interceptor/JimuInterceptor.java
@@ -0,0 +1,72 @@
+package com.ltkj.framework.interceptor;
+
+import cn.hutool.json.JSONUtil;
+import com.ltkj.common.core.domain.model.LoginUser;
+import com.ltkj.db.DataSourceConfig;
+import com.ltkj.db.DataSourceContextHolder;
+import com.ltkj.framework.config.UserHoder;
+import com.ltkj.framework.web.service.TokenService;
+import com.ltkj.hosp.service.IDictHospService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃
+ * @Author: zhaowenxuan
+ * @Date: 2025/2/13 18:44
+ */
+@Order(2)
+@Component
+public class JimuInterceptor implements HandlerInterceptor {
+
+    @Autowired
+    private IDictHospService dictHospService;
+    @Autowired
+    private DataSourceConfig dataSourceConfig;
+    @Autowired
+    private TokenService tokenService;
+    private String db;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        Map<String, String[]> parameterMap = request.getParameterMap();
+        String[] tokens = parameterMap.get("token");
+        if (tokens != null && tokens.length > 0){
+            String token = tokens[0];
+            LoginUser loginUser = tokenService.getLoginUser(token);
+            System.out.println("loginUser.getHospDB() ->"+loginUser.getHospDB());
+            dataSourceConfig.addDataSource(loginUser.getHospDB());
+            DataSourceContextHolder.setDataSourceKey(loginUser.getHospDB());
+//            UserHoder.setLoginUser(loginUser);
+            db = loginUser.getHospDB();
+        }else {
+            LoginUser loginUser = UserHoder.getLoginUser();
+//        System.out.println(JSONUtil.toJsonStr(user));
+            dataSourceConfig.addDataSource(db);
+            DataSourceContextHolder.setDataSourceKey(db);
+//            dataSourceConfig.addDataSource("ltkjpeis10_chkwyy");
+//            DataSourceContextHolder.setDataSourceKey("ltkjpeis10_chkwyy");
+        }
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        DataSourceContextHolder.setDataSourceKey("default");
+        DataSourceContextHolder.clear();
+        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
+    }
+}
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 c5d788c..0fe6028 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
@@ -7,12 +7,15 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ltkj.common.constant.CacheConstants;
 import com.ltkj.common.core.domain.entity.SysDept;
+import com.ltkj.common.enums.DataSourceType;
 import com.ltkj.common.exception.CustomException;
 import com.ltkj.common.exception.user.CaptchaException;
 import com.ltkj.common.exception.user.CaptchaExpireException;
 import com.ltkj.common.exception.user.SecretKeyException;
 import com.ltkj.common.utils.*;
 import com.ltkj.common.utils.sign.RsaUtils;
+import com.ltkj.db.DataSourceConfig;
+import com.ltkj.db.DataSourceContextHolder;
 import com.ltkj.framework.config.JwtUtils;
 import com.ltkj.framework.config.UserHoder;
 import com.ltkj.hosp.domain.DictHosp;
@@ -84,6 +87,8 @@
 
     @Value("${token.secret_key_login}")
     private boolean secretKeyLogin;
+    @Autowired
+    private DataSourceConfig dataSourceConfig;
 
 
     /**
@@ -93,9 +98,14 @@
      * @param password 瀵嗙爜
      * @return 缁撴灉
      */
-    public String login(String username, String password, Boolean type,String code,String uuid) {
+    public String login(String username, 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")){
             String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
@@ -139,6 +149,9 @@
         }
         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
         LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        loginUser.setHospDB(hosp.getDbname());
+        loginUser.setHospId(hospId);
+        tokenService.setLoginUser(loginUser);
 
         recordLoginInfo(Long.valueOf(loginUser.getUserId()));
         //鏍¢獙鍟嗗杩囨湡鍚�

--
Gitblit v1.8.0