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<DictHosp> 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);
|
}
|
}
|