feat: 审批流基本结构

This commit is contained in:
martsforever
2025-08-24 15:35:41 +08:00
parent f53ed7d16f
commit f23ba6c8c2
2 changed files with 157 additions and 29 deletions
+16 -29
View File
@@ -1,13 +1,12 @@
from typing import TypedDict
from fastapi import FastAPI
from langgraph.constants import START, END
from langgraph.graph import StateGraph
from langchain_core.runnables import RunnableConfig
from langgraph.func import entrypoint
from app.model.ApproveModel import ApproveModel, ApproveService
from app.model.ApproveModel import ApproveService
from app.model.ReimburseModel import ReimburseService, ReimburseModel
from app.utils.db_utils import AsyncSessionDep
from app.utils.postgres_checkpointer import AsyncPostgresSaverDep
from app.workflow.approve import create_approve_workflow, ApproveWorkflowInputs
def add_approve_route(app: FastAPI):
@@ -53,36 +52,24 @@ def add_approve_route(app: FastAPI):
# 将审批单与报销单管理,设置报销单的approve_id为审批单的id
await ReimburseService.item_update(session=session, row_dict={"id": reimburse_id, "approve_id": insert_approve_cls.id}, )
graph = create_approve_graph(session, checkpointer)
reimburse_workflow = create_reimburse_workflow(session=session, checkpointer=checkpointer)
await graph.ainvoke({
"input_approve_dict": insert_approve_cls.model_dump(),
"input_reimburse_user_id": reimburse_cls.user_id
})
await reimburse_workflow.ainvoke({"reimburse_user_id": reimburse_cls.user, "approve_id": insert_approve_cls.id})
return {"message": "报销单提交成功!"}
# 创建一个图来处理审批流
def create_approve_graph(
session: AsyncSessionDep,
def create_reimburse_workflow(
checkpointer: AsyncPostgresSaverDep,
session: AsyncSessionDep,
):
class StateSchema(TypedDict):
input_reimburse_user_id: str
input_approve_dict: dict
approve_workflow = create_approve_workflow(checkpointer, session)
status: str
@entrypoint(checkpointer=checkpointer)
async def reimburse_workflow(input_dict: ApproveWorkflowInputs, config: RunnableConfig):
approve_flag = await approve_workflow.ainvoke(input_dict, config=config)
# 这里审批结束之后可以做一些事情,比如发送邮件、短信、微信消息等通知用户,因为没有实现对应的模块,这里就不做任何处理
print("报销单审批流执行结束::::::::::>>>>>>>>>>>", approve_flag)
return None
builder = StateGraph(StateSchema)
async def node_create_approve(state: StateSchema):
pass
builder.add_node(node_create_approve)
builder.add_edge(START, 'node_create_approve')
builder.add_edge('node_create_approve', END)
graph = builder.compile(checkpointer=checkpointer)
return graph
return reimburse_workflow