feat: ApproveProjService

This commit is contained in:
martsforever
2025-08-23 23:33:57 +08:00
parent 30e1523ed4
commit 27be9dbcb5
2 changed files with 58 additions and 7 deletions
+56 -5
View File
@@ -1,20 +1,71 @@
from decimal import Decimal 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.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 ApproveModel(BasicModel, table=True): class PublicApproveModel(BasicModel):
__tablename__ = "pl_approve"
title: str = Field(default=None, description="审批标题") title: str = Field(default=None, description="审批标题")
description: str = Field(default=None, description="审批描述信息") description: str = Field(default=None, description="审批描述信息")
status: str = Field(default=None, description="审批状态") status: str = Field(default=None, description="审批状态")
amount: Decimal = Field(default=None, description="审批金额") amount: Decimal = Field(default=None, description="审批金额")
user_id: str = Field(default=None, description="当前审批人id")
logs: str = Field(default=None, description="审批日志") 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) 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)
)
)
+2 -2
View File
@@ -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.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 ApproveService from app.model.ApproveModel import ApproveService, 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
@@ -94,7 +94,7 @@ RelProjUserService.add_route(app=app, path="/rel_proj_user")
ReimburseService.add_route(app=app, path="/reimburse") 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")
ApproveService.add_route(app=app, path="/approve") ApproveProjService.add_route(app=app, path="/approve_proj")
if __name__ == "__main__": if __name__ == "__main__":
run_uvicorn() run_uvicorn()