类 OrgCache

java.lang.Object
net.sohelp.boot.admin.core.cache.OrgCache
所有已实现的接口:
ISohelpCache

@Component public class OrgCache extends Object implements ISohelpCache
组织机构缓存(永不过期,按需失效)

Key 规则:

  • "name:{orgId}" → 组织名称
  • "path:{orgId}" → 名称路径(如 /公司/部门)
  • "idpath:{orgId}" → ID 路径(如 /1/2)

NONE 模式每次直接查库。

从以下版本开始:
2023/7/21 15:17
作者:
AaronFung
  • 构造器详细资料

    • OrgCache

      public OrgCache()
  • 方法详细资料

    • init

      @PostConstruct public void init()
      初始化方法,在 Bean 创建后自动调用

      通过 SohelpCacheManager 创建名为 "org"、永不过期(TTL=0)的缓存提供者。

    • cacheName

      public String cacheName()
      获取缓存名称(唯一标识)
      指定者:
      cacheName 在接口中 ISohelpCache
      返回:
      缓存唯一标识名称 "org"
    • cacheDescription

      public String cacheDescription()
      获取缓存描述信息
      指定者:
      cacheDescription 在接口中 ISohelpCache
      返回:
      缓存的中文描述文本 "组织机构缓存"
    • reload

      @Comment("\u52a0\u8f7d\u7ec4\u7ec7\u673a\u6784\u7f13\u5b58") public void reload() throws SQLException
      从数据库重新加载全部组织机构数据到缓存

      先清空现有缓存,然后从 pb_org 表按 ID 升序查询所有组织, 按顺序构建每个组织的名称路径和 ID 路径,最后写入缓存。 父节点必须在子节点之前处理,以确保路径正确拼接。

      指定者:
      reload 在接口中 ISohelpCache
      抛出:
      SQLException - 数据库查询过程中发生异常
    • getByOrgName

      public long getByOrgName(String orgName)
      根据组织名称查询组织 ID

      直接查询数据库 pb_org 表,不走缓存。 若存在同名组织,返回第一条记录的 ID。

      参数:
      orgName - 组织名称,为空时直接返回 0
      返回:
      组织 ID;未找到或名称为空时返回 0
    • getSubOrg

      public List<Long> getSubOrg(Long orgId) throws SQLException
      获取指定组织的所有下级子组织 ID 列表

      查询所有组织并逐一检查其 ID 路径是否以指定组织 ID 开头, 从而找出所有直属或间接下级组织。无论缓存模式如何,此方法均查询数据库获取组织列表, 以避免全量扫描 Redis 的性能问题。

      参数:
      orgId - 父组织 ID,不能为 null
      返回:
      所有下级子组织的 ID 列表;无子组织时返回空列表
      抛出:
      SQLException - 数据库查询过程中发生异常
    • reload

      @Comment("\u6839\u636e\u7ec4\u7ec7ID\u91cd\u65b0\u52a0\u8f7d\u7ec4\u7ec7\u5230\u7f13\u5b58") public void reload(@Comment("\u7ec4\u7ec7ID") Object orgId) throws SQLException
      根据组织 ID 重新加载单个组织到缓存

      先移除该组织的旧缓存条目,再从数据库查询最新数据并写入缓存。 注意:此方法仅更新组织名称缓存,不会更新路径缓存。

      参数:
      orgId - 组织 ID,为 null 或空字符串时不执行任何操作
      抛出:
      SQLException - 数据库查询过程中发生异常
    • getOrgs

      public List<Map<String,Object>> getOrgs(List<Long> orgs) throws SQLException
      批量获取组织信息列表

      根据组织 ID 列表,逐个获取组织名称并组装成包含 idorg_name 的 Map 列表。

      参数:
      orgs - 组织 ID 列表,为 null 或空列表时返回空列表
      返回:
      组织信息列表,每个元素为包含 "id" 和 "org_name" 的 Map
      抛出:
      SQLException - 数据库查询过程中发生异常
    • getOrg

      public Map<String,Object> getOrg(Long orgId) throws SQLException
      获取单个组织信息

      根据组织 ID 获取其名称,并组装成包含 idorg_name 的 Map 返回。

      参数:
      orgId - 组织 ID,不能为 null
      返回:
      包含 "id" 和 "org_name" 的 Map
      抛出:
      SQLException - 数据库查询过程中发生异常
    • getOrgName

      @Comment("\u6839\u636e\u7ec4\u7ec7ID\u83b7\u53d6\u7ec4\u7ec7\u540d\u79f0") public String getOrgName(@Comment("\u7ec4\u7ec7ID") Object orgId) throws SQLException
      根据组织 ID 获取组织名称

      优先从缓存中获取;若缓存未启用(NONE 模式),则直接查询数据库。 若缓存中未命中,会触发全量重载后再次尝试获取。

      参数:
      orgId - 组织 ID,为 null 或空字符串时返回空字符串
      返回:
      组织名称;未找到时返回空字符串
      抛出:
      SQLException - 数据库查询过程中发生异常
    • getOrgPath

      @Comment("\u6839\u636e\u7ec4\u7ec7ID\u83b7\u53d6\u7ec4\u7ec7\u8def\u5f84") public String getOrgPath(@Comment("\u7ec4\u7ec7ID") Object orgId) throws SQLException
      根据组织 ID 获取组织名称路径

      优先从缓存中获取;若缓存未启用(NONE 模式),则通过递归查询数据库构建路径。 若缓存中未命中,会触发全量重载后再次尝试获取。

      参数:
      orgId - 组织 ID,为 null 或空字符串时返回空字符串
      返回:
      组织名称路径,格式如 "/公司/部门";未找到时返回空字符串
      抛出:
      SQLException - 数据库查询过程中发生异常
    • remove

      @Comment("\u6e05\u7a7a\u7ec4\u7ec7\u7f13\u5b58") public void remove(@Comment("\u7ec4\u7ec7ID") Object orgId)
      移除指定组织的全部缓存条目

      同时删除该组织的名称缓存、名称路径缓存和 ID 路径缓存。

      参数:
      orgId - 组织 ID,为 null 或空字符串时不执行任何操作