From 27be9dbcb57037a97b64f337fff62a3fab743384 Mon Sep 17 00:00:00 2001 From: martsforever Date: Sat, 23 Aug 2025 23:33:57 +0800 Subject: [PATCH] feat: ApproveProjService --- app/model/ApproveModel.py | 61 +++++++++++++++++++++++++++++++++++---- app/server.py | 4 +-- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/app/model/ApproveModel.py b/app/model/ApproveModel.py index 64c5251..db40821 100644 --- a/app/model/ApproveModel.py +++ b/app/model/ApproveModel.py @@ -1,20 +1,71 @@ from decimal import Decimal +from typing import Optional -from sqlmodel import Field +from pydantic import computed_field +from sqlalchemy.orm import selectinload +from sqlmodel import Field, Relationship, select from app.model.BasicModel import BasicModel +from app.model.ProjectModel import ProjectModel from app.utils.create_module_service import create_model_service -class ApproveModel(BasicModel, table=True): - __tablename__ = "pl_approve" - +class PublicApproveModel(BasicModel): title: str = Field(default=None, description="审批标题") description: str = Field(default=None, description="审批描述信息") status: str = Field(default=None, description="审批状态") amount: Decimal = Field(default=None, description="审批金额") - user_id: str = Field(default=None, description="当前审批人id") logs: str = Field(default=None, description="审批日志") + user_id: str = Field(default=None, description="当前审批人id") + proj_id: str = Field(default=None, description="所属项目id") + + +# 不查询project信息的审批单类 +class ApproveModel(PublicApproveModel, table=True): + __tablename__ = "pl_approve" + __table_args__ = {'extend_existing': True} + ApproveService = create_model_service(Cls=ApproveModel) + + +# 自动查询project信息的审批单类 +class ApproveProjModel(PublicApproveModel, table=True): + __tablename__ = "pl_approve" + __table_args__ = {'extend_existing': True} + + # /*---------------------------------------project-------------------------------------------*/ + + proj_id: str = Field( + default=None, + description="所属项目id", + foreign_key="pl_project.id", # 添加外键约束 + nullable=True + ) + + proj_rel: Optional["ProjectModel"] = Relationship( + sa_relationship_kwargs={ + "foreign_keys": "ReimburseModel.proj_id", + "remote_side": "ProjectModel.id", + "uselist": False + } + ) + + @computed_field + @property + def project(self) -> Optional[ProjectModel]: + return self.proj_rel + + @project.setter + def project(self, value: Optional[ProjectModel]) -> None: + pass + + +ApproveProjService = create_model_service( + Cls=ApproveProjModel, + custom_query=lambda: select(ApproveProjModel) + .options( + selectinload(ApproveProjModel.proj_rel) + ) +) diff --git a/app/server.py b/app/server.py index 6d94cf0..5d48d7b 100644 --- a/app/server.py +++ b/app/server.py @@ -18,7 +18,7 @@ from app.controller.test_sqlmodel import add_test_sqlmodel_route from app.controller.test_sync import add_test_sync_route from app.controller.translate_controller import add_translate_route from app.create_app import create_app -from app.model.ApproveModel import ApproveService +from app.model.ApproveModel import ApproveService, ApproveProjService from app.model.LgApprove import LgApproveService from app.model.LgChat import LgChatService from app.model.LgMessage import LgMessageService @@ -94,7 +94,7 @@ RelProjUserService.add_route(app=app, path="/rel_proj_user") ReimburseService.add_route(app=app, path="/reimburse") ReimburseTravelService.add_route(app=app, path="/reimburse_travel") ReimburseOtherService.add_route(app=app, path="/reimburse_other") -ApproveService.add_route(app=app, path="/approve") +ApproveProjService.add_route(app=app, path="/approve_proj") if __name__ == "__main__": run_uvicorn()