34 lines
943 B
Python
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
|