diff --git a/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java b/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java index d94a2d6..372bc72 100644 --- a/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java +++ b/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.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; @@ -53,46 +56,25 @@ public class DataSourceInterceptor implements HandlerInterceptor { } public long getTopCompanyId(String companyId) { - - if (StringUtils.isBlank(companyId)) { - throw new IllegalArgumentException("companyId不能为空"); - } - - return getTopCompanyIdInternal(Long.parseLong(companyId), new HashSet<>()); - } - - private long getTopCompanyIdInternal(Long companyId, Set 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> result = jdbcTemplate.queryForList(sql, companyId); - - if (result.isEmpty()) { - throw new IllegalStateException("公司不存在,companyId=" + companyId); - } - - Map 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); - } + + 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; + + 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()+""); + } + } /** * 获取所有的一级企业