dept module

master
masong 5 months ago
parent b24056e1f7
commit 7c8ec8c9ac
  1. 2
      packages/dbgpt-app/src/dbgpt_app/dbgpt_server.py
  2. 0
      packages/dbgpt-system/src/dbgpt_system/dept/__init__.py
  3. 79
      packages/dbgpt-system/src/dbgpt_system/dept/dept.py
  4. 54
      packages/dbgpt-system/src/dbgpt_system/dept/dept_controller.py
  5. 133
      packages/dbgpt-system/src/dbgpt_system/dept/dept_db.py

@ -64,6 +64,7 @@ def mount_routers(app: FastAPI):
from dbgpt_serve.agent.app.endpoints import router as app_v2
from dbgpt_system.login import router as login
from dbgpt_system.system_user.controller import router as user_v1
from dbgpt_system.dept.dept_controller import router as dept_v1
app.include_router(api_v1, prefix="/api", tags=["Chat"])
app.include_router(api_v2, prefix="/api", tags=["ChatV2"])
app.include_router(api_editor_route_v1, prefix="/api", tags=["Editor"])
@ -72,6 +73,7 @@ def mount_routers(app: FastAPI):
app.include_router(app_v2, prefix="/api", tags=["App"])
app.include_router(login,prefix = "/api" , tags=["Login"])
app.include_router(user_v1,prefix = "/api/user", tags=["User"])
app.include_router(dept_v1,prefix = "/api/dept",tags=["Dept"])
app.include_router(knowledge_router, tags=["Knowledge"])
from dbgpt_serve.agent.app.recommend_question.controller import (

@ -0,0 +1,79 @@
import re
from dbgpt._private.pydantic import BaseModel,ConfigDict,Field,field_validator
from typing import Any, Dict, List, Optional
from datetime import datetime
from dbgpt.storage.metadata import Model
from sqlalchemy import (
Column,
DateTime,
Integer,
String,
)
class Dept(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
id: Optional[int] = None
name: Optional[str] = None
sort: Optional[int] = None
leader_user_id: Optional[int] = None
phone: Optional[str] = None
email: Optional[str] = None
status: Optional[int] = None
creator: Optional[str] = None
create_time: Optional[datetime] = None
updater: Optional[str] = None
update_time: Optional[datetime] = None
parent_id : Optional[int] = None
def to_dict(self):
return {k: self._serialize(v) for k, v in self.__dict__.items()}
def _serialize(self, value):
if isinstance(value, BaseModel):
return value.to_dict()
elif isinstance(value, list):
return [self._serialize(item) for item in value]
elif isinstance(value, dict):
return {k: self._serialize(v) for k, v in value.items()}
else:
return value
@classmethod
def from_dict(cls, d: Dict[str, Any]):
return cls(
id=d.get("id", None),
name=d.get("name", None),
sort=d.get("sort", None),
leader_user_id=d.get("leader_user_id", None),
phone=d.get("phone", None),
email=d.get("email", None),
status=d.get("status", None),
creator=d.get("creator", None),
create_time=d.get("create_time", None),
updater=d.get("updater", None),
update_time=d.get("update_time", None),
parent_id = d.get("parent_id",None),
)
class DeptEntity(Model):
__tablename__ ="sys_dept"
id=Column(Integer,primary_key=True)
name=Column(String(255))
sort= Column(Integer)
parent_id = Column(Integer)
leader_user_id = Column(Integer)
phone = Column(String(50))
email = Column(String(50))
status = Column(Integer)
creator = Column(String(50))
create_time = Column(DateTime)
updater = Column(String(50))
update_time = Column(DateTime)
deleted = Column(Integer)
class DeptResponse(BaseModel):
dept_list: Optional[List[Dept]] = Field(
default_factory=list, description="dept tree"
)

@ -0,0 +1,54 @@
from dbgpt_app.openapi.api_view_model import Result
from fastapi import APIRouter, Depends,Header
from dbgpt_system.dept.dept_db import DeptDao
from dbgpt_system.dept.dept import Dept
from dbgpt_serve.utils.auth import UserRequest, get_user_from_headers
router = APIRouter()
deptDao = DeptDao()
@router.get("/list",response_model=Result)
async def select_dept_list(
dept: Dept = Depends(),
user_info: UserRequest = Depends(get_user_from_headers)
):
try:
res = deptDao.select_dept_list(dept)
return Result.succ(res)
except Exception as ex:
print(ex)
return Result.failed(msg=f"query dept error: {ex}")
@router.post("/create")
async def create_dept(dept: Dept,
user_info: UserRequest = Depends(get_user_from_headers)):
try:
return Result.succ(deptDao.create(user_info,dept))
except Exception as ex:
print(ex)
return Result.failed(msg=f"create dept error: {ex}")
@router.put("/update")
async def update_dept(dept: Dept,
user_info: UserRequest = Depends(get_user_from_headers)
):
try:
return Result.succ(deptDao.update(user_info,dept))
except Exception as ex:
print(ex)
return Result.failed(msg=f"update dept error: {ex}")
@router.get("/{dept_id}")
async def select_dept_details(dept_id: int):
try:
return Result.succ(deptDao.select_dept_details(dept_id))
except Exception as ex:
return Result.failed(msg=f"query dept error: {ex}")
@router.delete("/{dept_id}")
async def delete_dept(dept_id:int,
user_info: UserRequest = Depends(get_user_from_headers)):
try:
return Result.succ(deptDao.delete_dept(dept_id))
except Exception as ex:
return Result.failed(msg=f"delete dept error: {ex}")

@ -0,0 +1,133 @@
from dbgpt.storage.metadata import BaseDao
from dbgpt_system.dept.dept import DeptEntity,DeptResponse,Dept
from dbgpt_system.system_user.user import UserEntity
from dbgpt_system.system_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)
if dept.name:
dept_qry = dept_qry.filter(
DeptEntity.name.like(f"%{dept.name}%")
)
if dept.status:
dept_qry = dept_qry.filter(
DeptEntity.status == dept.status
)
results = dept_qry.all()
finally:
session.close()
if results is not None:
depts = []
dept_resp = DeptResponse()
for dept in results:
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.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
Loading…
Cancel
Save