diff --git a/app/model/ApproveModel.py b/app/model/ApproveModel.py index f737bd0..2405b63 100644 --- a/app/model/ApproveModel.py +++ b/app/model/ApproveModel.py @@ -1,25 +1,9 @@ -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.model.PublicApproveModel import PublicApproveModel from app.utils.create_module_service import create_model_service -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="审批金额") - logs: str = Field(default=None, description="审批日志") - - user_id: str = Field(default=None, description="当前审批人id") - - # 不查询project信息的审批单类 class ApproveModel(PublicApproveModel, table=True): __tablename__ = "pl_approve" @@ -27,47 +11,4 @@ class ApproveModel(PublicApproveModel, table=True): proj_id: str = Field(default=None, description="所属项目id") - 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": "ApproveProjModel.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). - selectinload(ProjectModel.leader) - ) -) diff --git a/app/model/ApproveProjModel.py b/app/model/ApproveProjModel.py new file mode 100644 index 0000000..37b724d --- /dev/null +++ b/app/model/ApproveProjModel.py @@ -0,0 +1,51 @@ +from typing import Optional + +from pydantic import computed_field +from sqlalchemy.orm import selectinload +from sqlmodel import Field, Relationship, select + +from app.model.ProjectModel import ProjectModel +from app.model.PublicApproveModel import PublicApproveModel +from app.utils.create_module_service import create_model_service + + +# 自动查询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": "ApproveProjModel.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). + selectinload(ProjectModel.leader) + ) +) diff --git a/app/model/ProjectModel.py b/app/model/ProjectModel.py index 3245b77..3bf8138 100644 --- a/app/model/ProjectModel.py +++ b/app/model/ProjectModel.py @@ -1,9 +1,11 @@ -from typing import Optional +from decimal import Decimal +from typing import Optional, List from pydantic import computed_field from sqlalchemy.orm import selectinload from sqlmodel import Field, Relationship, select +from app.model.ApproveModel import ApproveModel from app.model.BasicModel import BasicModel from app.model.UserModel import UserServiceModel from app.utils.create_module_service import create_model_service @@ -43,8 +45,41 @@ class ProjectModel(BasicModel, table=True): def leader_name(self, value: Optional[str]) -> None: pass + # /*---------------------------------------approve_list-------------------------------------------*/ + + # approve_list_rel: Optional[List["ApproveModel"]] = Relationship( + # sa_relationship_kwargs={ + # "foreign_keys": "ApproveModel.proj_id", + # "primaryjoin": "ProjectModel.id == ApproveModel.proj_id", + # } + # ) + # + # @computed_field + # @property + # def approve_list(self) -> Optional[List["ApproveModel"]]: + # return self.approve_list_rel + # + # @approve_list.setter + # def approve_list(self, value: Optional[List["ApproveModel"]]) -> None: + # pass + # + # # /*---------------------------------------spent-------------------------------------------*/ + # @computed_field + # @property + # def spent(self) -> Decimal: + # # return sum([approve.amount for approve in self.approve_list_rel if approve.status == 'approved']) + # return 0 + # + # @spent.setter + # def spent(self, value: Decimal) -> None: + # pass + ProjectService = create_model_service( Cls=ProjectModel, - custom_query=lambda: select(ProjectModel).options(selectinload(ProjectModel.leader)), + custom_query=lambda: select(ProjectModel).options( + selectinload(ProjectModel.leader), + + # selectinload(ProjectModel.approve_list_rel), + ), ) diff --git a/app/model/PublicApproveModel.py b/app/model/PublicApproveModel.py new file mode 100644 index 0000000..d2cb74b --- /dev/null +++ b/app/model/PublicApproveModel.py @@ -0,0 +1,15 @@ +from decimal import Decimal + +from sqlmodel import Field + +from app.model.BasicModel import BasicModel + + +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="审批金额") + logs: str = Field(default=None, description="审批日志") + + user_id: str = Field(default=None, description="当前审批人id") diff --git a/app/server.py b/app/server.py index c63677b..af4d465 100644 --- a/app/server.py +++ b/app/server.py @@ -18,7 +18,8 @@ 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 ApproveProjService +from app.model.ApproveModel import ApproveService +from app.model.ApproveProjModel import ApproveProjService from app.model.LgApprove import LgApproveService from app.model.LgChat import LgChatService from app.model.LgMessage import LgMessageService @@ -95,7 +96,7 @@ ReimburseService.add_route(app=app, path="/reimburse") ReimburseTravelService.add_route(app=app, path="/reimburse_travel") ReimburseOtherService.add_route(app=app, path="/reimburse_other") ApproveProjService.add_route(app=app, path="/approve_proj") -# ApproveService.add_route(app=app, path="/approve") +ApproveService.add_route(app=app, path="/approve") if __name__ == "__main__": run_uvicorn()