feat: 项目的子表审批单信息查不出来

This commit is contained in:
martsforever
2025-08-24 00:44:26 +08:00
parent 3a0e4b5032
commit fe758561b6
5 changed files with 108 additions and 65 deletions
+2 -61
View File
@@ -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)
)
)
+51
View File
@@ -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)
)
)
+37 -2
View File
@@ -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),
),
)
+15
View File
@@ -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")
+3 -2
View File
@@ -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()