feat: 走酒店预定、或者提交报销单审批流时,自动调用AI服务,对比报销规范文档与报销信息给出审批标识以及审批不通过时的意见
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
import uuid
|
||||||
|
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from langchain_core.runnables import RunnableConfig
|
from langchain_core.runnables import RunnableConfig
|
||||||
from langgraph.constants import START
|
from langgraph.constants import START
|
||||||
@@ -7,10 +9,13 @@ from pydantic import BaseModel
|
|||||||
from app.model.ApproveModel import ApproveModel, ApproveService
|
from app.model.ApproveModel import ApproveModel, ApproveService
|
||||||
from app.model.HotelModel import HotelService, HotelModel
|
from app.model.HotelModel import HotelService, HotelModel
|
||||||
from app.model.OrderModel import OrderService
|
from app.model.OrderModel import OrderService
|
||||||
from app.model.ReimburseModel import ReimburseService
|
from app.model.ProjectModel import ProjectModel
|
||||||
|
from app.model.ProjectService import ProjectService
|
||||||
|
from app.model.ReimburseModel import ReimburseService, ReimburseModel
|
||||||
from app.model.ReimburseOtherModel import ReimburseOtherService
|
from app.model.ReimburseOtherModel import ReimburseOtherService
|
||||||
from app.model.UserModel import UserServiceModel, UserService
|
from app.model.UserModel import UserServiceModel, UserService
|
||||||
from app.utils.db_utils import AsyncSessionDep
|
from app.utils.db_utils import AsyncSessionDep, async_session
|
||||||
|
from app.utils.llm_approve_utils import get_llm_approve_result
|
||||||
from app.utils.postgres_checkpointer import AsyncPostgresSaverDep
|
from app.utils.postgres_checkpointer import AsyncPostgresSaverDep
|
||||||
from app.workflow.approve import create_approve_graph, ApproveGraphSchema
|
from app.workflow.approve import create_approve_graph, ApproveGraphSchema
|
||||||
|
|
||||||
@@ -22,11 +27,43 @@ def add_hotel_route(app: FastAPI):
|
|||||||
session: AsyncSessionDep,
|
session: AsyncSessionDep,
|
||||||
checkpointer: AsyncPostgresSaverDep,
|
checkpointer: AsyncPostgresSaverDep,
|
||||||
):
|
):
|
||||||
user_cls: UserServiceModel = await UserService.query_item(session, row_dict={"id": body.user_id})
|
async with async_session() as session2:
|
||||||
hotel_cls: HotelModel = await HotelService.query_item(session, row_dict={"id": body.hotel_id})
|
user_cls: UserServiceModel = await UserService.query_item(session2, row_dict={"id": body.user_id})
|
||||||
|
hotel_cls: HotelModel = await HotelService.query_item(session2, row_dict={"id": body.hotel_id})
|
||||||
|
project_cls: ProjectModel = await ProjectService.query_item(session2, row_dict={"id": body.proj_id})
|
||||||
|
|
||||||
|
new_approve_id = str(uuid.uuid4())
|
||||||
|
reimburse_id = str(uuid.uuid4())
|
||||||
|
|
||||||
|
# 审批通过之后,要创建的报销单信息
|
||||||
|
input_reimburse_dict = {
|
||||||
|
"id": reimburse_id,
|
||||||
|
"title": f"{user_cls.full_name} - 酒店预定",
|
||||||
|
"remarks": f"酒店预定信息:{hotel_cls.title}, {hotel_cls.description}, {hotel_cls.discount_price}",
|
||||||
|
"proj_id": body.proj_id,
|
||||||
|
"amount": str(hotel_cls.discount_price),
|
||||||
|
"project": project_cls.model_dump(),
|
||||||
|
"approve_id": new_approve_id,
|
||||||
|
"user_id": body.user_id,
|
||||||
|
}
|
||||||
|
input_reimburse_other_dict = {
|
||||||
|
"title": f"{user_cls.full_name} - 酒店预定",
|
||||||
|
"type": "酒店宾馆",
|
||||||
|
"amount": str(hotel_cls.discount_price),
|
||||||
|
"recipe_type": "电子普通发票",
|
||||||
|
"reimburse_id": reimburse_id,
|
||||||
|
}
|
||||||
|
|
||||||
|
llm_response_dict = await get_llm_approve_result(session, {
|
||||||
|
**input_reimburse_dict,
|
||||||
|
"user": user_cls.model_dump(),
|
||||||
|
"travel_list": [],
|
||||||
|
"other_list": [input_reimburse_other_dict]
|
||||||
|
})
|
||||||
|
|
||||||
# 新建审批单信息
|
# 新建审批单信息
|
||||||
new_approve_dict = {
|
new_approve_dict = {
|
||||||
|
"id": new_approve_id,
|
||||||
"title": f"{user_cls.full_name} - 酒店预定审批",
|
"title": f"{user_cls.full_name} - 酒店预定审批",
|
||||||
"description": f"酒店预定信息:{hotel_cls.title}, {hotel_cls.description}, {hotel_cls.discount_price}",
|
"description": f"酒店预定信息:{hotel_cls.title}, {hotel_cls.description}, {hotel_cls.discount_price}",
|
||||||
"status": "approving",
|
"status": "approving",
|
||||||
@@ -36,28 +73,13 @@ def add_hotel_route(app: FastAPI):
|
|||||||
"apply_user_id": body.user_id,
|
"apply_user_id": body.user_id,
|
||||||
"proj_id": body.proj_id,
|
"proj_id": body.proj_id,
|
||||||
"approve_from": "book_hotel",
|
"approve_from": "book_hotel",
|
||||||
|
**llm_response_dict,
|
||||||
}
|
}
|
||||||
# 马上插入审批单信息
|
# 马上插入审批单信息
|
||||||
insert_approve_cls: ApproveModel = await ApproveService.item_insert(session=session, row_dict=new_approve_dict)
|
insert_approve_cls: ApproveModel = await ApproveService.item_insert(session=session, row_dict=new_approve_dict)
|
||||||
|
|
||||||
book_hotel_graph = create_book_hotel_graph(session=session, checkpointer=checkpointer)
|
book_hotel_graph = create_book_hotel_graph(session=session, checkpointer=checkpointer)
|
||||||
|
|
||||||
# 审批通过之后,要创建的报销单信息
|
|
||||||
input_reimburse_dict = {
|
|
||||||
"title": f"{user_cls.full_name} - 酒店预定",
|
|
||||||
"remarks": f"酒店预定信息:{hotel_cls.title}, {hotel_cls.description}, {hotel_cls.discount_price}",
|
|
||||||
"proj_id": body.proj_id,
|
|
||||||
"approve_id": insert_approve_cls.id,
|
|
||||||
"user_id": body.user_id,
|
|
||||||
}
|
|
||||||
input_reimburse_other_dict = {
|
|
||||||
"title": f"{user_cls.full_name} - 酒店预定",
|
|
||||||
"type": "酒店宾馆",
|
|
||||||
"amount": str(hotel_cls.discount_price),
|
|
||||||
"recipy_type": "电子普通发票",
|
|
||||||
"reimburse_id": "",
|
|
||||||
}
|
|
||||||
|
|
||||||
graph_state = await book_hotel_graph.ainvoke(
|
graph_state = await book_hotel_graph.ainvoke(
|
||||||
{
|
{
|
||||||
"input_user_id": body.user_id,
|
"input_user_id": body.user_id,
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ def add_reimburse_route(app: FastAPI):
|
|||||||
if reimburse_cls.approve.status == 'approved':
|
if reimburse_cls.approve.status == 'approved':
|
||||||
return {"message": "报销单已通过审批,请勿重复提交!"}
|
return {"message": "报销单已通过审批,请勿重复提交!"}
|
||||||
|
|
||||||
llm_response_dict = await get_llm_approve_result(session, reimburse_cls)
|
llm_response_dict = await get_llm_approve_result(session, reimburse_cls.model_dump())
|
||||||
# 1,4,5 的情况下新建审批单
|
# 1,4,5 的情况下新建审批单
|
||||||
# 创建审批单,使用新的审批单走审批流程
|
# 创建审批单,使用新的审批单走审批流程
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user