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 sqlmodel import Field
from typing import Optional
from pydantic import computed_field from app.model.PublicApproveModel import PublicApproveModel
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 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信息的审批单类 # 不查询project信息的审批单类
class ApproveModel(PublicApproveModel, table=True): class ApproveModel(PublicApproveModel, table=True):
__tablename__ = "pl_approve" __tablename__ = "pl_approve"
@@ -27,47 +11,4 @@ class ApproveModel(PublicApproveModel, table=True):
proj_id: str = Field(default=None, description="所属项目id") proj_id: str = Field(default=None, description="所属项目id")
ApproveService = create_model_service(Cls=ApproveModel) 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 pydantic import computed_field
from sqlalchemy.orm import selectinload from sqlalchemy.orm import selectinload
from sqlmodel import Field, Relationship, select from sqlmodel import Field, Relationship, select
from app.model.ApproveModel import ApproveModel
from app.model.BasicModel import BasicModel from app.model.BasicModel import BasicModel
from app.model.UserModel import UserServiceModel from app.model.UserModel import UserServiceModel
from app.utils.create_module_service import create_model_service 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: def leader_name(self, value: Optional[str]) -> None:
pass 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( ProjectService = create_model_service(
Cls=ProjectModel, 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.test_sync import add_test_sync_route
from app.controller.translate_controller import add_translate_route from app.controller.translate_controller import add_translate_route
from app.create_app import create_app 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.LgApprove import LgApproveService
from app.model.LgChat import LgChatService from app.model.LgChat import LgChatService
from app.model.LgMessage import LgMessageService 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") ReimburseTravelService.add_route(app=app, path="/reimburse_travel")
ReimburseOtherService.add_route(app=app, path="/reimburse_other") ReimburseOtherService.add_route(app=app, path="/reimburse_other")
ApproveProjService.add_route(app=app, path="/approve_proj") 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__": if __name__ == "__main__":
run_uvicorn() run_uvicorn()