FlowLong 1.2.7:办理人配置与流程紧急程度更实用了

2026-09-20 16 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:11 分钟

FlowLong 1.2.7 的改动没有停留在界面微调,而是补齐了流程落地时经常遇到的两个业务能力:办理节点可以使用节点作为办理人来源,流程实例也可以标记紧急程度。同时,这一版本改善了节点模型扩展属性的读取方式,并继续完善注释、文档与缺陷修复。

这些变化尤其适合审批、工单、客服协同和 AI 辅助决策流程。它们解决的不是“流程能不能跑”,而是任务如何动态流转、紧急实例如何被优先处理,以及自定义节点属性如何更安全地进入业务代码。

节点成为办理人,适合表达动态责任链

固定用户、角色或部门适合静态审批链,但真实业务经常要求“由上一环节的实际处理人继续负责”或“把某个节点的办理结果作为后续任务分配依据”。1.2.7 新增节点作为办理人的配置能力,但该能力仅适用于办理节点。

这项边界值得特别注意:通知、条件判断、自动执行等非办理节点不应被当作人工责任主体。设计模型时,可以在发布前检查节点类型和引用关系,避免流程启动后才发现无法解析办理人。

典型场景包括:

  • 工单初审人员继续负责复核补充材料;
  • 售前方案节点的实际负责人自动承接报价审批;
  • AI 节点完成分类后,将任务交给前序人工节点的办理人;
  • 多级审批中复用某一环节已经确定的责任人,而不是再次查询组织架构。

这里仍要处理两个异常分支:被引用节点尚未完成时如何分配,以及该节点存在多人办理时选择全部人员、首位办理人还是最终办理人。摘要没有给出这些策略的具体实现,因此接入时应以项目文档和实际版本行为为准,并为无法解析办理人的情况准备兜底规则。

紧急程度应该进入查询、排序和审计链路

1.2.7 支持为流程实例设置紧急程度。这个字段只有被消费时才会产生业务价值,不能只停留在启动表单或详情页上。

落地时建议统一定义有限枚举,例如 LOWNORMALHIGHCRITICAL,并让它参与:

  • 待办列表排序;
  • SLA 超时计算;
  • 消息通知渠道选择;
  • 管理台筛选与统计;
  • 紧急程度变更审计。

不要让调用方随意提交 very_urgentP0加急 等互不兼容的值。若业务线已有不同标准,应在接入层完成映射,而不是把混乱直接写入流程实例。

紧急程度也不应等同于审批优先权。它可以影响展示和调度,但不应绕过权限、会签规则或必要的风控节点。对于允许运行中提升紧急程度的系统,还应记录修改人、修改时间和修改原因。

用一个本地校验器检查模型配置

来源摘要没有公开字段名和接口结构,下面使用一份示意模型展示如何在发布流程定义前检查两个约束:节点型办理人只能用于办理节点,且流程实例紧急程度必须属于允许集合。接入真实项目时,请把字段名映射为 FlowLong 1.2.7 实际使用的模型结构。

先创建 process-model.json

{
  "instance": {
    "urgency": "HIGH"
  },
  "nodes": [
    {
      "id": "submit",
      "type": "handle",
      "assignee": {
        "type": "user",
        "value": "user-1001"
      }
    },
    {
      "id": "review",
      "type": "handle",
      "assignee": {
        "type": "node",
        "value": "submit"
      }
    },
    {
      "id": "notify",
      "type": "notification"
    }
  ]
}

再创建可直接运行的 validate_model.py

#!/usr/bin/env python3
import json
import sys
from pathlib import Path

ALLOWED_URGENCY = {"LOW", "NORMAL", "HIGH", "CRITICAL"}
HANDLE_NODE_TYPE = "handle"


def validate(model: dict) -> list[str]:
    errors = []
    urgency = model.get("instance", {}).get("urgency", "NORMAL")
    if urgency not in ALLOWED_URGENCY:
        errors.append(f"不支持的紧急程度: {urgency}")

    nodes = model.get("nodes", [])
    node_by_id = {node.get("id"): node for node in nodes if node.get("id")}

    for node in nodes:
        assignee = node.get("assignee") or {}
        if assignee.get("type") != "node":
            continue

        if node.get("type") != HANDLE_NODE_TYPE:
            errors.append(
                f"节点 {node.get('id')} 不是办理节点,不能使用节点型办理人"
            )

        referenced_id = assignee.get("value")
        referenced = node_by_id.get(referenced_id)
        if referenced is None:
            errors.append(
                f"节点 {node.get('id')} 引用了不存在的节点 {referenced_id}"
            )
        elif referenced.get("type") != HANDLE_NODE_TYPE:
            errors.append(
                f"被引用节点 {referenced_id} 不是办理节点,无法提供办理人"
            )

    return errors


def main() -> int:
    path = Path(sys.argv[1] if len(sys.argv) > 1 else "process-model.json")
    model = json.loads(path.read_text(encoding="utf-8"))
    errors = validate(model)

    if errors:
        print("模型校验失败:")
        for error in errors:
            print(f"- {error}")
        return 1

    print("模型校验通过")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

执行检查:

python3 validate_model.py process-model.json

这类校验可以放进 CI,在流程定义发布前阻止错误配置进入生产环境。真实接入时还可以补充循环引用检测、多人办理策略检查,以及被引用节点未完成时的兜底配置检查。

扩展属性不要继续散落强制转换

本次版本还优化了节点模型扩展属性,提供更友好的获取方式。对于使用自定义字段的项目,这是一个值得跟进的改动。

常见的旧式代码会直接读取原始 Map,再在业务层反复进行字符串转换、空值判断和类型转换。这样做容易出现键名拼写错误,也会让模型升级影响大量业务代码。升级后应优先使用版本提供的友好读取方式;如果现有项目封装较深,也可以在适配层集中处理默认值和类型转换。

迁移时可重点搜索以下代码模式:

grep -RInE 'extension|extend|properties|get\(' src/ \
  --include='*.java' --include='*.kt'

命令中的关键词只是排查入口,需要根据项目实际类名调整。对读取频繁的扩展字段,建议补充“字段不存在”“值类型错误”“旧模型未设置字段”三类测试。

升级前后的检查清单

FlowLong 1.2.7 更适合按小范围流程灰度升级,而不是直接替换全部生产定义:

  • 确认数据库变更是否涉及流程实例紧急程度字段;
  • 验证旧流程实例在没有紧急程度时采用什么默认值;
  • 只在办理节点上启用节点型办理人;
  • 测试被引用节点未执行、撤回或由多人办理时的行为;
  • 将紧急程度接入待办排序、筛选和审计,而不只是展示;
  • 逐步把扩展属性的裸 Map 访问迁移到统一获取方式;
  • 回归已有流程定义,尤其是自定义节点和监听器;
  • 查阅完整修复列表,并针对受影响模块补充回归测试。

从发布内容看,1.2.7 的重点是增强流程治理和模型可扩展性,而不是大幅改变流程设计方式。对于已有项目,最有价值的升级路径是先统一紧急程度语义,再选择一条需要动态责任链的流程验证节点型办理人,最后收敛扩展属性读取代码。这样既能尽快获得新能力,也能控制流程引擎升级对存量业务的影响。


相关推荐