创巨圆智能体-基于DB-GPT7.1版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

155 lines
6.0 KiB

from dbgpt.storage.metadata import BaseDao
from dbgpt_system.dept.dept import DeptEntity,DeptResponse,Dept
from dbgpt_system.sys_user.user import UserEntity
from dbgpt_system.sys_user.user_db import UserDao
from dbgpt_serve.utils.auth import UserRequest
from datetime import datetime
deptEntity = DeptEntity
userDao = UserDao
class DeptDao(BaseDao):
def select_dept_list(self, dept: Dept):
session = self.get_raw_session()
try:
# 查询本级单位
dept_qry = session.query(DeptEntity).filter(DeptEntity.deleted == 0, DeptEntity.id == dept.id,)
if dept.name:
dept_qry = dept_qry.filter(
DeptEntity.name.like(f"%{dept.name}%")
)
if dept.status is not None:
dept_qry = dept_qry.filter(
DeptEntity.status == dept.status
)
parent_results = dept_qry.all()
# 初始化结果列表
all_depts = []
# 定义递归函数来查找子部门
def find_subdepartments(parent_id):
subdept_qry = session.query(DeptEntity).filter(
DeptEntity.parent_id == parent_id,
DeptEntity.deleted == 0
)
subdepts = subdept_qry.all()
for subdept in subdepts:
all_depts.append(subdept)
find_subdepartments(subdept.id)
# 遍历父部门并查找其子部门
for parent_dept in parent_results:
all_depts.append(parent_dept)
find_subdepartments(parent_dept.id)
finally:
session.close()
if all_depts:
depts = []
dept_resp = DeptResponse()
for dept in all_depts:
depts.append(
Dept.from_dict({
"id": dept.id,
"name": dept.name,
"sort": dept.sort,
"leader_user_id": dept.leader_user_id,
"phone": dept.phone,
"email": dept.email,
"status": dept.status,
"creator": dept.creator,
"create_time": dept.create_time,
"updater": dept.updater,
"update_time": dept.update_time,
"parent_id": dept.parent_id
})
)
dept_resp.dept_list = depts
return dept_resp
def create(self,user_info : UserRequest,dept : Dept):
try:
with self.session() as session:
dept_entity = DeptEntity(
name = dept.name,
sort = dept.sort,
leader_user_id = dept.leader_user_id,
phone = dept.phone,
email = dept.email,
status = dept.status,
creator = user_info.user_id,
create_time = datetime.now(),
updater = user_info.user_id,
update_time = datetime.now(),
parent_id = dept.parent_id,
deleted = 0
)
session.add(dept_entity)
session.commit()
session.close()
return True
except Exception as e:
session.rollback()
raise RuntimeError(f"创建部门失败: {str(e)}")
def update(self,user_info : UserRequest,dept:Dept):
session = self.get_raw_session()
with self.session() as session:
dept_entity = session.query(DeptEntity).filter_by(id=dept.id, deleted=0).first()
if dept_entity:
dept_entity.id =dept.id
dept_entity.name = dept.name
dept.sort = dept.sort
dept.parent_id = dept.parent_id
dept_entity.leader_user_id = dept.leader_user_id
dept_entity.phone = dept.phone
dept_entity.email = dept.email
dept_entity.status = dept.status
dept_entity.updater = user_info.user_id
dept_entity.update_time = datetime.now()
session.commit()
else:
raise ValueError("部门不存在或已被删除")
session.close()
return True
def select_dept_details(self, dept_id:int):
session = self.get_raw_session()
try:
dept_qry = session.query(DeptEntity).filter(DeptEntity.deleted == 0,DeptEntity.id == dept_id)
dept_details = dept_qry.first()
finally:
session.close()
return Dept.from_dict(
{
"id": dept_details.id,
"name": dept_details.name,
"sort": dept_details.sort,
"leader_user_id": dept_details.leader_user_id,
"phone": dept_details.phone,
"email": dept_details.email,
"status": dept_details.status,
"parent_id": dept_details.parent_id,
"create_time": dept_details.create_time,
"creator": dept_details.creator,
"updater": dept_details.updater,
"update_time": dept_details.update_time,
}
)
def delete_dept(self, dept_id :int):
with self.session() as session:
count = session.query(UserEntity).filter_by(dept_id = dept_id, deleted=0).count()
if count >0:
raise ValueError("该单位下存在人员信息,不能删除")
else:
dept_entity = session.query(DeptEntity).filter_by(id=dept_id,deleted=0).first()
if dept_entity is not None:
if dept_entity.id == 1:
raise ValueError("顶级单位不能删除")
dept_entity.deleted =1
else:
raise ValueError("部门信息不存在或已被删除")
session.commit()
return True