import sys,os current_path = os.getcwd() sys.path.append(current_path) from typing import Optional from pydantic import BaseModel from db.database import get_db from sqlalchemy.orm import Session from fastapi import APIRouter, Depends from agent.libs.sys import SysOrganBusiness from agent.models.web.response import StandardResponse,FAILED,SUCCESS class SysOrganRequest(BaseModel): id: Optional[int] = None name: str manager: Optional[str] = None phone: Optional[str] = None parent_id: Optional[int] = None router = APIRouter(prefix="/organ", tags=["机构&科室管理接口"]) @router.get("/loadData", response_model=StandardResponse) def loadData(db: Session = Depends(get_db)): datas = SysOrganBusiness(db).get_all_data() sysOrgan_map = {p.id: { "id": p.id, "name": p.name, "manager": p.manager, "phone": p.phone, "parent_id": p.parent_id, "children": [] } for p in datas} tree = [] for p_id, p_data in sysOrgan_map.items(): parent_id = p_data["parent_id"] if parent_id != 0 and parent_id in sysOrgan_map: sysOrgan_map[parent_id]["children"].append(p_data) else: tree.append(p_data) return StandardResponse(code=SUCCESS, message="机构&科室获取成功", records=tree) @router.get("/loadDataById/{id}", response_model=StandardResponse) def loadDataByParentId(id:int,db: Session = Depends(get_db)): datas = SysOrganBusiness(db).get_all_data() sysOrgan_map = {p.id: { "id": p.id, "name": p.name, "manager": p.manager, "phone": p.phone, "parent_id": p.parent_id, "children": [] } for p in datas} tree = [] for p_id, p_data in sysOrgan_map.items(): parent_id1 = p_data["parent_id"] if parent_id1 != 0 and parent_id1 in sysOrgan_map: sysOrgan_map[parent_id1]["children"].append(p_data) else: tree.append(p_data) tree2 = [] tree2.append(sysOrgan_map[id]) return StandardResponse(code=SUCCESS, message="机构&科室获取成功", records=tree2) @router.post("/insert", response_model=StandardResponse) def insertData(request: SysOrganRequest, db: Session = Depends(get_db)): biz = SysOrganBusiness(db) request_name = request.name request_manager = request.manager request_phone = request.phone request_parentId = request.parent_id if request_name is None or request_name.strip() == '': return StandardResponse(code=FAILED, message="机构&科室名称不能为空") data = biz.get_data_by_nameAndParent(request_name,request_parentId) if data is not None: return StandardResponse(code=FAILED, message="机构&科室名称已经存在") user = biz.insert_data(request_name, request_manager,request_phone,request_parentId) if user is None: return StandardResponse(code=FAILED, message="创建机构&科室失败") return StandardResponse(code=SUCCESS, message="创建机构&科室成功") @router.post("/update", response_model=StandardResponse) def updateData(request: SysOrganRequest, db: Session = Depends(get_db)): biz = SysOrganBusiness(db) if request.name is None or request.name.strip() == '': return StandardResponse(code=FAILED, message="机构&科室名称不能为空") data = biz.get_data_by_nameAndParent(request.name,request.parent_id) if data is not None and data.id != request.id: return StandardResponse(code=FAILED, message="机构&科室名称已经存在") biz.update_data(request.id,request.name, request.manager,request.phone,request.parent_id) return StandardResponse(code=SUCCESS, message="更新机构&科室成功") @router.post("/delete/{id}", response_model=StandardResponse) def deleteData(id:int, db: Session = Depends(get_db)): biz = SysOrganBusiness(db) data = biz.get_all_data_by_parentId(id) if data is not None and len(data) > 0: return StandardResponse(code=FAILED, message="含有子机构&科室,请先删除后再操作") biz.delete_data(id) return StandardResponse(code=SUCCESS, message="删除机构&科室成功") sys_organ = router