zhczyx@163.com 1 month ago
parent
commit
b620ab5c1f
  1. 57
      data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DataSourceInterceptor.java

57
data-center-business-common/src/main/java/com/techsor/datacenter/business/common/config/DataSourceInterceptor.java

@ -2,6 +2,7 @@ package com.techsor.datacenter.business.common.config;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -12,10 +13,7 @@ import com.techsor.datacenter.business.common.Constants;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
@ -42,23 +40,44 @@ public class DataSourceInterceptor implements HandlerInterceptor {
public long getTopCompanyId(String companyId) { public long getTopCompanyId(String companyId) {
String sql="SELECT " if (StringUtils.isBlank(companyId)) {
+ " bcom.id, bcom.parent_id parentId" throw new IllegalArgumentException("companyId不能为空");
+ " FROM data_center_aeon_admin.basic_company bcom " }
+ " WHERE bcom.flag != 1 and bcom.id = " + companyId;
AtomicLong parentId = new AtomicLong(0); return getTopCompanyIdInternal(Long.parseLong(companyId), new HashSet<>());
AtomicLong id = new AtomicLong(0); }
jdbcTemplate.query(sql,rs -> {
parentId.set(rs.getLong("parentId")); private long getTopCompanyIdInternal(Long companyId, Set<Long> visited) {
id.set(rs.getLong("id"));
}); // 防止循环引用
//Recursive logic if (!visited.add(companyId)) {
if (1 == parentId.get() || -1 == parentId.get()) { throw new IllegalStateException("检测到公司父子结构循环,companyId=" + companyId);
return id.get(); }
} else {
return getTopCompanyId(parentId.get()+""); String sql = """
SELECT id, parent_id
FROM data_center_aeon_admin.basic_company
WHERE flag != 1 AND id = ?
""";
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, companyId);
if (result.isEmpty()) {
throw new IllegalStateException("公司不存在,companyId=" + companyId);
} }
Map<String, Object> row = result.get(0);
Long parentId = row.get("parent_id") == null
? null
: ((Number) row.get("parent_id")).longValue();
// 顶级企业
if (parentId == null || parentId == 1 || parentId == -1) {
return companyId;
}
return getTopCompanyIdInternal(parentId, visited);
} }
/** /**

Loading…
Cancel
Save