feat: 准备实现图来处理审批流
This commit is contained in:
@@ -1,17 +1,23 @@
|
|||||||
from typing import TypedDict
|
from typing import TypedDict
|
||||||
|
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
|
from langgraph.constants import START, END
|
||||||
from langgraph.graph import StateGraph
|
from langgraph.graph import StateGraph
|
||||||
|
|
||||||
from app.model.ApproveModel import ApproveModel, ApproveService
|
from app.model.ApproveModel import ApproveModel, ApproveService
|
||||||
from app.model.ReimburseModel import ReimburseService, ReimburseModel
|
from app.model.ReimburseModel import ReimburseService, ReimburseModel
|
||||||
from app.utils.db_utils import AsyncSessionDep
|
from app.utils.db_utils import AsyncSessionDep
|
||||||
|
from app.utils.postgres_checkpointer import AsyncPostgresSaverDep
|
||||||
|
|
||||||
|
|
||||||
def add_approve_route(app: FastAPI):
|
def add_approve_route(app: FastAPI):
|
||||||
# 提交报销单接口
|
# 提交报销单接口
|
||||||
@app.post('/submit_reimburse')
|
@app.post('/submit_reimburse')
|
||||||
async def submit_reimburse(reimburse: dict, session: AsyncSessionDep):
|
async def submit_reimburse(
|
||||||
|
reimburse: dict,
|
||||||
|
session: AsyncSessionDep,
|
||||||
|
checkpointer: AsyncPostgresSaverDep,
|
||||||
|
):
|
||||||
reimburse_id = reimburse.get('id')
|
reimburse_id = reimburse.get('id')
|
||||||
# 先查一遍报销单信息
|
# 先查一遍报销单信息
|
||||||
reimburse_cls: ReimburseModel = await ReimburseService.query_item(session=session, row_dict={"id": reimburse_id})
|
reimburse_cls: ReimburseModel = await ReimburseService.query_item(session=session, row_dict={"id": reimburse_id})
|
||||||
@@ -31,36 +37,52 @@ def add_approve_route(app: FastAPI):
|
|||||||
return {"message": "报销单已通过审批,请勿重复提交!"}
|
return {"message": "报销单已通过审批,请勿重复提交!"}
|
||||||
|
|
||||||
# 1,4,5 的情况下新建审批单
|
# 1,4,5 的情况下新建审批单
|
||||||
# 新建审批单,使用新的审批单走审批流程
|
# 创建审批单,使用新的审批单走审批流程
|
||||||
|
|
||||||
new_approve_dict = {
|
new_approve_dict = {
|
||||||
"title": "title",
|
"title": f"{reimburse_cls.user.full_name} - 报销单审批",
|
||||||
"description": "description",
|
"description": reimburse_cls.title + (f" / {reimburse_cls.remarks}" if reimburse_cls.remarks else ""),
|
||||||
"status": "status",
|
"status": "approving",
|
||||||
"amount": "amount",
|
"amount": reimburse_cls.amount,
|
||||||
"logs": "logs",
|
"logs": "[]",
|
||||||
"user_id": "user_id",
|
"user_id": reimburse_cls.user_id, # 先把审批人的id设置为申请人
|
||||||
"proj_id": "proj_id",
|
"proj_id": reimburse_cls.proj_id,
|
||||||
}
|
}
|
||||||
|
insert_approve_cls = await ApproveService.item_insert(session=session, row_dict=new_approve_dict)
|
||||||
|
|
||||||
return
|
# 将审批单与报销单管理,设置报销单的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)
|
||||||
|
|
||||||
|
await graph.ainvoke({
|
||||||
|
"input_approve_dict": insert_approve_cls.model_dump(),
|
||||||
|
"input_reimburse_user_id": reimburse_cls.user_id
|
||||||
|
})
|
||||||
|
|
||||||
|
return {"message": "报销单提交成功!"}
|
||||||
|
|
||||||
|
|
||||||
def create_approve_graph(session: AsyncSessionDep):
|
# 创建一个图来处理审批流
|
||||||
|
def create_approve_graph(
|
||||||
|
session: AsyncSessionDep,
|
||||||
|
checkpointer: AsyncPostgresSaverDep,
|
||||||
|
):
|
||||||
class StateSchema(TypedDict):
|
class StateSchema(TypedDict):
|
||||||
|
input_reimburse_user_id: str
|
||||||
|
input_approve_dict: dict
|
||||||
|
|
||||||
status: str
|
status: str
|
||||||
insert_approve_id: str
|
|
||||||
# 要新建的审批单信息
|
|
||||||
input_approve: dict
|
|
||||||
|
|
||||||
builder = StateGraph(StateSchema)
|
builder = StateGraph(StateSchema)
|
||||||
|
|
||||||
async def node_create_approve(state: StateSchema):
|
async def node_create_approve(state: StateSchema):
|
||||||
new_approve_dict = state.get('input_approve')
|
pass
|
||||||
if not new_approve_dict:
|
|
||||||
raise Exception('缺少审批单信息参数!')
|
|
||||||
insert_approve_cls = await ApproveService.item_insert(session=session, row_dict=new_approve_dict)
|
|
||||||
|
|
||||||
return {"insert_approve_id": insert_approve_cls.id}
|
builder.add_node(node_create_approve)
|
||||||
|
builder.add_edge(START, 'node_create_approve')
|
||||||
|
builder.add_edge('node_create_approve', END)
|
||||||
|
|
||||||
return
|
graph = builder.compile(checkpointer=checkpointer)
|
||||||
|
|
||||||
|
return graph
|
||||||
|
|||||||
Reference in New Issue
Block a user