Compare commits

...

2 Commits

  1. 64
      dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java

64
dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java

@ -13,7 +13,10 @@ import com.dongjian.dashboard.back.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.*; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
@ -53,46 +56,25 @@ public class DataSourceInterceptor implements HandlerInterceptor {
} }
public long getTopCompanyId(String companyId) { public long getTopCompanyId(String companyId) {
if (StringUtils.isBlank(companyId)) { String sql="SELECT "
throw new IllegalArgumentException("companyId不能为空"); + " bcom.id, bcom.parent_id parentId"
} + " FROM data_center_aeon_admin.basic_company bcom "
+ " WHERE bcom.flag != 1 and bcom.id = " + companyId;
return getTopCompanyIdInternal(Long.parseLong(companyId), new HashSet<>());
} AtomicLong parentId = new AtomicLong(0);
AtomicLong id = new AtomicLong(0);
private long getTopCompanyIdInternal(Long companyId, Set<Long> visited) { jdbcTemplate.query(sql,rs -> {
parentId.set(rs.getLong("parentId"));
// 防止循环引用 id.set(rs.getLong("id"));
if (!visited.add(companyId)) { });
throw new IllegalStateException("检测到公司父子结构循环,companyId=" + companyId); //Recursive logic
} if (1 == parentId.get() || -1 == parentId.get()) {
return id.get();
String sql = """ } else {
SELECT id, parent_id return getTopCompanyId(parentId.get()+"");
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