package com.ltkj.framework.interceptor; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.gson.Gson; import com.ltkj.db.DataSourceConfig; import com.ltkj.db.DataSourceContextHolder; import com.ltkj.framework.config.DruidConfig; import com.ltkj.hosp.domain.DictHosp; import com.ltkj.hosp.service.IDictHospService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @Company: 西安路泰科技有限公司 * @Author: zhaowenxuan * @Date: 2025/2/7 11:07 */ @Component @Order(1) public class DBChangeInterceptor implements HandlerInterceptor { @Autowired private IDictHospService dictHospService; @Autowired private DataSourceConfig dataSourceConfig; // @Autowired // private DruidConfig druidConfig; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { String hospId = request.getHeader("hospId"); if (StrUtil.isBlank(hospId)){ response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setContentType("application/json;charset=UTF-8"); JSONObject object = JSONUtil.createObj(); object.putOpt("code",401); object.putOpt("msg","找不到院区编号"); response.getWriter().write(JSONUtil.toJsonStr(object)); return false; } // DictHosp hosp = null; try { DataSourceContextHolder.setDataSourceKey("default"); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(DictHosp::getCode,hospId); DictHosp hosp = dictHospService.getOne(wrapper); if (hosp == null || hosp.getDbname() == null || hosp.getDbname().trim().isEmpty()) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setContentType("application/json;charset=UTF-8"); response.getWriter().write("{\"message\":\"401:找不到院区数据\"}"); return false; } dataSourceConfig.addDataSource(hosp.getDbname()); // druidConfig.addDataSource(hosp.getDbname()); DataSourceContextHolder.setDataSourceKey(hosp.getDbname()); } catch (IOException e) { return false; } return true; } @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); } }