From 31b74e8fffa1dbe37bd8fea9c6efde44c7b658b5 Mon Sep 17 00:00:00 2001 From: MiLla <18826902282@163.com> Date: Wed, 20 Nov 2024 18:31:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E4=BA=86=E4=BA=9B=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=9A=84bug=EF=BC=8C=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=BA=86=E4=B8=8D=E5=B8=A6=E6=9D=83=E9=99=90=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=9A=84=E5=88=97=E4=B8=BE=E6=89=80=E6=9C=89=E7=A7=9F=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/manage_project.py | 6 +-- api/manage_tanant.py | 99 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 98 insertions(+), 7 deletions(-) diff --git a/api/manage_project.py b/api/manage_project.py index ac20ed7..0a3132b 100644 --- a/api/manage_project.py +++ b/api/manage_project.py @@ -43,8 +43,8 @@ async def create_project(data: dict, session: SessionDep): raise HTTPException(status_code=400, detail="Need more name/requirement/start_time/deadline") # 验证开始时间是否早于结束时间 - start_time = datetime.strptime(start_time_str, "%Y-%m-%d") - deadline = datetime.strptime(deadline_str, "%Y-%m-%d") + start_time = datetime.strptime(start_time_str, "%Y-%m-%dT%H:%M:%S") + deadline = datetime.strptime(deadline_str, "%Y-%m-%dT%H:%M:%S") if start_time > deadline: raise HTTPException(status_code=400, detail="Start time must be before deadline") @@ -82,7 +82,7 @@ async def create_project(data: dict, session: SessionDep): requirement=requirement, start_time=start_time, deadline=deadline, - owner_id=1 # 假设owner_id是1 + owner_id=1 # 假设owner_id是1,之后应该是通过token获取owner_id吧 ) session.add(project) diff --git a/api/manage_tanant.py b/api/manage_tanant.py index 250e259..4aafaa6 100644 --- a/api/manage_tanant.py +++ b/api/manage_tanant.py @@ -20,11 +20,102 @@ router = APIRouter() # return "hello" # 列举所有租户 +from fastapi import HTTPException, Response +from sqlalchemy.orm import Session +from models import Tenant, User # 假设你已导入 Tenant 和 User 模型 +from dependencies import SessionDep # 假设 SessionDep 是数据库会话的依赖 + + +#列举所有租户 +from fastapi import HTTPException, Response +from sqlalchemy.orm import Session +from models import Tenant, User # 假设你已导入 Tenant 和 User 模型 +from dependencies import SessionDep # 假设 SessionDep 是数据库会话的依赖 + + @router.get("/api/s1/tenant") async def get_tenant(response: Response, session: SessionDep): - tenant = session.query(Tenant).filter().all() - if not tenant: - raise HTTPException(status_code=404, detail="Tenant not found") - return {"tenant": tenant} + tenants = session.query(Tenant).all() # 获取所有租户 + if not tenants: + raise HTTPException(status_code=404, detail="No tenants found") + + tenant_data = [] + for tenant in tenants: + # 获取该租户中 role=1 的第一个用户(如果存在) + tenant_user = next((user for user in tenant.users if user.role == 1), None) + + # 获取该租户中除了 role=1 以外的用户数量 + user_num = len([user for user in tenant.users if user.role != 1]) + + # 构建租户信息 + tenant_info = { + "name": tenant.name, + "username": tenant_user.username if tenant_user else None, # 如果找到 role=1 的用户,返回其 username + "user_num": user_num # 除去 role=1 的用户数量 + } + + tenant_data.append(tenant_info) + + return {"tenants": tenant_data} # 新增和修改租户 +@router.post("/api/s1/tenant") +async def create_tenant(data: dict, session: SessionDep): + tenant_id = data.get("tenant_id") + name = data["name"] + username = data["username"] + password = data["password"] + + # 验证是否缺少必要参数 + if not name: + raise HTTPException(status_code=400, detail="Need to provide name") + + + # 更新租户还是新增租户 + if tenant_id: + # 查找现有租户 + tenant = session.get(Tenant, tenant_id) + if not tenant: + raise HTTPException(status_code=404, detail="Tenant not found") + + # 更新项目内容 + tenant.name = name + else: + # 新增项目 + project = Project( + name=name, + requirement=requirement, + start_time=start_time, + deadline=deadline, + owner_id=1 # 假设owner_id是1,之后应该是通过token获取owner_id吧 + ) + session.add(project) + + # 处理项目和用户的关联 + # 先清除现有的关联 + # 生成删除语句并执行 + print(project_id) #测试用 + stmt = delete(ProjectUserLink).where(ProjectUserLink.project_id == project.id) + session.execute(stmt) + session.commit() # 提交事务 + + # 重新建立与评估员和审核员的关系 + for username in estimators: + user = next((user for user in users_estimators if user.username == username), None) + if user: + project_user_link = ProjectUserLink(project_id=project.id, user_id=user.id) + session.add(project_user_link) + + for username in auditors: + user = next((user for user in users_auditors if user.username == username), None) + if user: + project_user_link = ProjectUserLink(project_id=project.id, user_id=user.id) + session.add(project_user_link) + + # 提交事务 + session.commit() + session.refresh(project) + + return {"message": "Added or updated successfully", + "information": project, + } \ No newline at end of file