parent
b24056e1f7
commit
7c8ec8c9ac
@ -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…
Reference in new issue