Files
ai-admin-server/app/controller/add_approve_route.py
T

67 lines
2.1 KiB
Python

from typing import TypedDict
from fastapi import FastAPI
from langgraph.graph import StateGraph
from app.model.ApproveModel import ApproveModel, ApproveService
from app.model.ReimburseModel import ReimburseService, ReimburseModel
from app.utils.db_utils import AsyncSessionDep
def add_approve_route(app: FastAPI):
# 提交报销单接口
@app.post('/submit_reimburse')
async def submit_reimburse(reimburse: dict, session: AsyncSessionDep):
reimburse_id = reimburse.get('id')
# 先查一遍报销单信息
reimburse_cls: ReimburseModel = await ReimburseService.query_item(session=session, row_dict={"id": reimburse_id})
# 1. 没有审批单——
# 2. 审批单为审批中状态——不处理
# 3. 审批单为已通过状态——不处理
# 4. 审批单为已驳回状态——
# 5. 审批单为已撤回状态——
# 2,3 的情况下不再提交报销单
if reimburse_cls.approve:
if reimburse_cls.approve.status == 'approving':
return {"message": "报销单已提交审批,请勿重复提交!"}
if reimburse_cls.approve.status == 'approved':
return {"message": "报销单已通过审批,请勿重复提交!"}
# 1,4,5 的情况下新建审批单
# 新建审批单,使用新的审批单走审批流程
new_approve_dict = {
"title": "title",
"description": "description",
"status": "status",
"amount": "amount",
"logs": "logs",
"user_id": "user_id",
"proj_id": "proj_id",
}
return
def create_approve_graph(session: AsyncSessionDep):
class StateSchema(TypedDict):
status: str
insert_approve_id: str
# 要新建的审批单信息
input_approve: dict
builder = StateGraph(StateSchema)
async def node_create_approve(state: StateSchema):
new_approve_dict = state.get('input_approve')
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}
return