Files
server/utils/dept_utils.py

34 lines
943 B
Python

from typing import List
from django.core.cache import cache
from users.models import Department
def get_dept_children_ids(dept_id: int) -> List[int]:
"""
递归获取当前部门及所有子部门的 ID 列表
"""
# 尝试从缓存获取
cache_key = f"dept_tree_{dept_id}"
cached_ids = cache.get(cache_key)
if cached_ids:
return cached_ids
# 缓存未命中,执行递归逻辑...
# 1. 初始化列表,包含当前部门 ID
dept_ids = [dept_id]
# 2. 查询直接子部门
children = Department.objects.filter(parent_id=dept_id) # 假设外键是 parent_id
# 3. 递归遍历子部门
for child in children:
# 递归获取子部门的子部门,并将结果扩展到列表中
dept_ids.extend(get_dept_children_ids(child.id))
# 将结果存入缓存,过期时间设为 12 小时
cache.set(cache_key, dept_ids, 12 * 60 * 60)
return dept_ids