链式调用可以用来处理复杂的业务流程

在FastAPI中,链式调用可以用来处理复杂的业务流程,例如MES系统中的工艺流程。链式调用可以帮助你将多个步骤组合在一起,每个步骤可以处理一部分逻辑,并且可以方便地处理异常和驳回。

以下是一个示例代码,展示如何使用链式调用来处理三个工艺流程,每个流程需要录入一些信息,并且中间可能有驳回和异常处理。

示例代码

from fastapi import FastAPI, HTTPException, status
from pydantic import BaseModel

app = FastAPI()

# 定义工艺流程步骤
class ProcessStep(BaseModel):
    step_id: int
    step_name: str
    data: dict
    is_approved: bool = False

# 定义工艺流程
class ProcessFlow:
    def __init__(self, steps: list[ProcessStep]):
        self.steps = steps
        self.current_step_index = 0

    # 开始流程
    def start(self):
        if self.current_step_index >= len(self.steps):
            raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="流程已结束")
        return self._process_step()

    # 处理当前步骤
    def _process_step(self):
        step = self.steps[self.current_step_index]
        if step.is_approved:
            self.current_step_index += 1
            if self.current_step_index < len(self.steps):
                return self._process_step()
            else:
                return {"message": "流程已成功完成"}
        else:
            raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="当前步骤未通过审批")

    # 审批步骤
    def approve_step(self, step_id: int, approval_data: dict):
        for step in self.steps:
            if step.step_id == step_id:
                step.is_approved = True
                step.data.update(approval_data)
                return self._process_step()
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="步骤未找到")

    # 驳回步骤
    def reject_step(self, step_id: int, rejection_data: dict):
        for step in self.steps:
            if step.step_id == step_id:
                step.is_approved = False
                step.data.update(rejection_data)
                return {"message": "步骤已驳回"}
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="步骤未找到")

# 示例工艺流程
steps = [
    ProcessStep(step_id=1, step_name="第一步", data={}),
    ProcessStep(step_id=2, step_name="第二步", data={}),
    ProcessStep(step_id=3, step_name="第三步", data={}),
]

process_flow = ProcessFlow(steps=steps)

# FastAPI路由
@app.post("/process/start")
async def start_process():
    return process_flow.start()

@app.post("/process/approve/{step_id}")
async def approve_process_step(step_id: int, approval_data: dict):
    return process_flow.approve_step(step_id, approval_data)

@app.post("/process/reject/{step_id}")
async def reject_process_step(step_id: int, rejection_data: dict):
    return process_flow.reject_step(step_id, rejection_data)

代码说明

  1. ProcessStep:定义了每个工艺流程步骤的基本结构,包括步骤ID、步骤名称、录入的数据和审批状态。

  2. ProcessFlow:管理整个工艺流程,包括开始流程、审批步骤、驳回步骤等。

  3. start 方法:启动流程,从第一个步骤开始处理。

  4. approve_step 方法:审批某个步骤,更新步骤数据并继续处理下一个步骤。

  5. reject_step 方法:驳回某个步骤,更新步骤数据并停止流程。

  6. FastAPI 路由:提供了三个路由,分别用于启动流程、审批步骤和驳回步骤。

示例流程

  1. 启动流程

    POST /process/start
    

    返回:

    {
        "step_id": 1,
        "step_name": "第一步",
        "data": {},
        "is_approved": false
    }
    
  2. 审批第一步

    POST /process/approve/1
    Content-Type: application/json
    
    {
        "approval_data": {
            "approved_by": "user1",
            "approval_time": "2024-10-10T10:00:00"
        }
    }
    

    返回:

    {
        "step_id": 2,
        "step_name": "第二步",
        "data": {},
        "is_approved": false
    }
    
  3. 驳回第二步

    POST /process/reject/2
    Content-Type: application/json
    
    {
        "rejection_data": {
            "rejected_by": "user2",
            "rejection_reason": "数据不完整"
        }
    }
    

    返回:

    {
        "message": "步骤已驳回"
    }
    
  4. 再次审批第二步

    POST /process/approve/2
    Content-Type: application/json
    
    {
        "approval_data": {
            "approved_by": "user3",
            "approval_time": "2024-10-10T11:00:00"
        }
    }
    

    返回:

    {
        "step_id": 3,
        "step_name": "第三步",
        "data": {},
        "is_approved": false
    }
    
  5. 审批第三步

    POST /process/approve/3
    Content-Type: application/json
    
    {
        "approval_data": {
            "approved_by": "user4",
            "approval_time": "2024-10-10T12:00:00"
        }
    }
    

    返回:

    {
        "message": "流程已成功完成"
    }
    

总结

通过链式调用,可以将复杂的工艺流程分解为多个步骤,并且每个步骤可以独立处理审批和驳回逻辑。这种方式不仅清晰易懂,而且可以方便地扩展和维护。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值