diff --git a/ljwx-boot/ljwx-boot-modules/src/main/java/com/ljwx/modules/system/service/ISysOrgClosureService.java b/ljwx-boot/ljwx-boot-modules/src/main/java/com/ljwx/modules/system/service/ISysOrgClosureService.java index 9129c4f..6f27bff 100644 --- a/ljwx-boot/ljwx-boot-modules/src/main/java/com/ljwx/modules/system/service/ISysOrgClosureService.java +++ b/ljwx-boot/ljwx-boot-modules/src/main/java/com/ljwx/modules/system/service/ISysOrgClosureService.java @@ -218,4 +218,20 @@ public interface ISysOrgClosureService extends IService { * @return 可接收告警的组织ID列表 */ List getUserAlertScope(Long userId, Long customerId); + + /** + * 根据组织ID查询顶级部门的customerId + * + * @param orgId 组织ID + * @return 顶级部门的customerId + */ + Long getTopLevelCustomerIdByOrgId(Long orgId); + + /** + * 根据组织ID查询顶级部门的customerId (String版本,用于处理类型转换) + * + * @param orgIdStr 组织ID字符串 + * @return 顶级部门的customerId + */ + Long getTopLevelCustomerIdByOrgId(String orgIdStr); } \ No newline at end of file diff --git a/ljwx-boot/ljwx-boot-modules/src/main/java/com/ljwx/modules/system/service/impl/SysOrgClosureServiceImpl.java b/ljwx-boot/ljwx-boot-modules/src/main/java/com/ljwx/modules/system/service/impl/SysOrgClosureServiceImpl.java index 42da896..215fbda 100644 --- a/ljwx-boot/ljwx-boot-modules/src/main/java/com/ljwx/modules/system/service/impl/SysOrgClosureServiceImpl.java +++ b/ljwx-boot/ljwx-boot-modules/src/main/java/com/ljwx/modules/system/service/impl/SysOrgClosureServiceImpl.java @@ -639,4 +639,77 @@ public class SysOrgClosureServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysOrgClosure::getDescendantId, orgId) + .orderByDesc(SysOrgClosure::getDepth) + .last("LIMIT 1"); + + SysOrgClosure topClosure = this.getOne(wrapper); + + if (topClosure == null) { + log.warn("在闭包表中未找到组织: orgId={}", orgId); + return null; + } + + // 获取顶级组织的customerId + Long topOrgId = topClosure.getAncestorId(); + SysOrgUnits topOrg = sysOrgUnitsMapper.selectById(topOrgId); + + if (topOrg == null) { + log.warn("顶级组织不存在: topOrgId={}", topOrgId); + return null; + } + + Long customerId = topOrg.getCustomerId(); + + stopWatch.stop(); + logPerformance("getTopLevelCustomerIdByOrgId", orgId, customerId, + stopWatch.getTotalTimeMillis(), 1, true, null); + + log.debug("组织{}的顶级组织ID={},customerId={},深度={}", + orgId, topOrgId, customerId, topClosure.getDepth()); + + return customerId; + + } catch (Exception e) { + stopWatch.stop(); + logPerformance("getTopLevelCustomerIdByOrgId", orgId, null, + stopWatch.getTotalTimeMillis(), 0, false, e.getMessage()); + log.error("根据组织ID查询顶级部门customerId失败: orgId={}", orgId, e); + return null; + } + } } \ No newline at end of file