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

61
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 org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
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.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
@ -42,24 +40,45 @@ public class DataSourceInterceptor implements HandlerInterceptor {
public long getTopCompanyId(String companyId) {
String sql="SELECT "
+ " bcom.id, bcom.parent_id parentId"
+ " FROM data_center_aeon_admin.basic_company bcom "
+ " WHERE bcom.flag != 1 and bcom.id = " + companyId;
if (StringUtils.isBlank(companyId)) {
throw new IllegalArgumentException("companyId不能为空");
}
AtomicLong parentId = new AtomicLong(0);
AtomicLong id = new AtomicLong(0);
jdbcTemplate.query(sql,rs -> {
parentId.set(rs.getLong("parentId"));
id.set(rs.getLong("id"));
});
//Recursive logic
if (1 == parentId.get() || -1 == parentId.get()) {
return id.get();
} else {
return getTopCompanyId(parentId.get()+"");
}
}
return getTopCompanyIdInternal(Long.parseLong(companyId), new HashSet<>());
}
private long getTopCompanyIdInternal(Long companyId, Set<Long> visited) {
// 防止循环引用
if (!visited.add(companyId)) {
throw new IllegalStateException("检测到公司父子结构循环,companyId=" + companyId);
}
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