首页
/ 彻底解决中国式审批痛点:FlowLong v1.1.14无代码引擎7大突破详解

彻底解决中国式审批痛点:FlowLong v1.1.14无代码引擎7大突破详解

2026-02-04 05:15:46作者:薛曦旖Francesca

你是否还在为这些审批难题抓狂?多分支并行审批时流程卡死、复杂条件路由配置繁琐、驳回跳转逻辑混乱、会签或签规则冲突、定时任务与触发器难以协同、审批策略无法灵活调整、历史任务数据迁移异常?作为真正的国产无代码工作流引擎,FlowLong v1.1.14版本带来7大核心突破,彻底重构中国式审批的技术实现路径。本文将深度解析每个功能的技术原理、应用场景与实操案例,带您掌握可落地的企业级工作流解决方案。

一、版本核心价值与技术架构升级

FlowLong工作流引擎(飞龙工作流)是专为中国特色审批场景设计的无代码引擎,采用Java语言开发,支持Spring Boot/Solon双框架集成,提供可视化流程设计、动态路由、复杂审批策略等企业级功能。v1.1.14版本在保持原有轻量化架构(核心包仅200KB)的基础上,针对复杂审批场景进行了11项技术重构与23处细节优化,特别强化了驳回流程、条件路由和并行分支的处理能力。

1.1 版本迭代亮点概览

核心能力 v1.1.14新增特性 解决的核心痛点 适用场景
智能驳回系统 支持多级驳回自动回溯父条件节点 驳回后流程中断或异常跳转 采购报销、请假审批等多级审批流程
条件路由增强 父条件节点子节点KEY列表获取方法 复杂分支条件判断逻辑混乱 费用报销分档审批(如>1万需总监审)
并行分支优化 驳回时自动归档子节点任务 并行任务驳回后数据不一致 项目立项需多部门同时审批
审批策略扩展 角色/部门审批支持认领模式配置 多人审批时任务分配不均 部门预算审批、跨部门协作流程
表达式引擎优化 SpEL语法支持包含/不包含关系判断 复杂业务规则难以配置 客户等级判断、折扣审批规则
任务状态管理 抄送任务空条件分支异常处理 特殊分支下流程卡壳 通知类抄送、流程节点监控
性能优化 动态参与者处理合并到执行对象 高并发场景下审批响应延迟 大型企业全员流程(如年度考核)

1.2 技术架构演进

FlowLong采用分层架构设计,v1.1.14版本重点优化了核心引擎层与任务调度层:

flowchart TD
    A[API接口层] --> B[流程引擎层]
    B --> C{核心服务}
    C --> D[流程部署服务]
    C --> E[实例管理服务]
    C --> F[任务执行服务]
    C --> G[历史归档服务]
    B --> H[任务调度层]
    H --> I[定时器服务]
    H --> J[触发器服务]
    H --> K[事件监听服务]
    B --> L[数据访问层]
    L --> M[关系型数据库]
    L --> N[缓存服务]

核心优化点

  • 任务执行服务(F):重构了TaskTrigger类的executeJump方法,将动态参与者处理逻辑从TaskActorProvider迁移至Execution执行上下文,减少3次数据库查询
  • 触发器服务(J):新增asyncComplete方法支持异步调用,解决长耗时任务阻塞问题
  • 事件监听服务(K):拆分任务分配事件为代理、委派、转办三个独立事件类型,细化事件粒度

二、七大核心功能深度解析

2.1 智能驳回回溯系统:多级审批的流程自愈能力

痛点场景:在传统工作流系统中,当审批人驳回包含并行分支或条件分支的流程时,常出现部分分支未正确归档、子任务残留导致流程卡死的情况。特别是当流程包含定时器(Timer)或触发器(Trigger)节点时,驳回后这些节点仍可能被错误触发。

技术实现:v1.1.14版本通过三个层面实现智能驳回:

  1. 父节点追溯机制:新增getConditionParentNodeKeys方法,能够自动识别当前节点所属的条件分支链,构建完整的驳回路径:
// 核心代码片段:FlowLongEngineImpl.java
public List<String> getConditionParentNodeKeys(String nodeKey) {
    List<String> parentKeys = new ArrayList<>();
    NodeModel currentNode = processModel.getNode(nodeKey);
    while (currentNode != null && currentNode.getParentNode() != null) {
        if (currentNode.getParentNode().getConditionNodes() != null) {
            parentKeys.add(currentNode.getParentNode().getNodeKey());
        }
        currentNode = currentNode.getParentNode();
    }
    return parentKeys;
}
  1. 并行分支自动归档:优化rejectTask方法,当检测到当前节点属于并行分支时,自动调用archiveParallelTasks处理所有同级分支任务:
// 伪代码逻辑
if (currentNode.isParallelNode()) {
    List<NodeModel> siblingNodes = currentNode.getParentNode().getParallelNodes();
    for (NodeModel sibling : siblingNodes) {
        taskService.archiveTask(sibling.getNodeKey(), instanceId, "rejected_by_parallel");
    }
}
  1. 定时器/触发器状态重置:在FlowLongScheduler中新增状态判断,当流程处于驳回状态时,自动暂停相关定时任务:
// 定时器状态控制逻辑
public void checkTaskStatus(Long taskId) {
    TaskState state = taskDao.selectById(taskId).getState();
    if (state == TaskState.REJECTED || state == TaskState.CANCELLED) {
        scheduler.pauseJob("TASK_" + taskId);
    }
}

应用案例:某集团采购审批流程(如图2-1),当部门经理驳回"技术评估"节点时,系统会自动追溯至"采购类型判断"条件节点,并归档"法务审核"和"财务预审"两个并行分支的任务,同时暂停"供应商评估"定时器任务,避免无效执行。

flowchart LR
    start[开始] --> judge{采购类型判断}
    judge -->|固定资产| tech[技术评估]
    judge -->|服务采购| legal[法务审核]
    judge -->|软件采购| finance[财务预审]
    tech --> manager[部门经理审批]
    legal --> manager
    finance --> manager
    manager -->|驳回| archive[归档并行任务]
    archive --> judge
    manager -->|通过| end[结束]

图2-1 采购审批流程的智能驳回处理流程

2.2 条件路由引擎:企业级规则引擎的轻量化实现

FlowLong v1.1.14对条件路由系统进行了架构级优化,新增getConditionParentNodeKeys方法,支持复杂分支条件的精准判断。该功能基于责任链模式设计,将每个条件节点封装为独立的处理器,通过ConditionNodeHandler接口实现灵活扩展。

2.2.1 核心条件类型与处理策略

FlowLong定义了5种基础条件类型(ConditionType),在v1.1.14中新增了"包含"和"不包含"两种判断逻辑:

public enum ConditionType {
    eq(1, "等于"),
    ne(2, "不等于"),
    gt(3, "大于"),
    lt(4, "小于"),
    ge(5, "大于等于"),
    le(6, "小于等于"),
    contains(7, "包含"),  // v1.1.14新增
    notContains(8, "不包含");  // v1.1.14新增
    
    private int value;
    private String desc;
    // getters and setters
}

2.2.2 SpEL表达式增强

为支持更复杂的业务规则判断,v1.1.14优化了SpEL表达式处理能力,允许在条件判断中直接使用流程变量:

// 原表达式:只能进行简单比较
#{day > 3}

// v1.1.14增强后:支持集合操作和字符串处理
#{assigneeList contains 'manager001' && amount >= 10000}

性能优化:表达式解析结果默认缓存30分钟,重复判断相同条件时性能提升80%,特别适合批量审批场景。

2.2.3 复杂路由配置示例

某电商平台的退款审批流程需要根据退款金额、用户等级和商品类型三个维度进行路由判断,v1.1.14版本可通过如下JSON配置实现:

{
  "nodeKey": "refund_judge",
  "conditionNodes": [
    {
      "condition": "#{refundAmount > 5000 && userLevel >= 4}",
      "childNode": {
        "nodeKey": "vip_manager_audit"
      }
    },
    {
      "condition": "#{refundAmount <= 5000 && goodsType notContains 'digital'}",
      "childNode": {
        "nodeKey": "normal_audit"
      }
    }
  ]
}

2.3 审批模式全解:从基础签到到复杂会签

FlowLong定义了6种核心审批模式(PerformType),v1.1.14版本重点优化了排序审批、会签和或签的处理逻辑,新增"认领模式"配置,允许参与者主动认领审批任务。

2.3.1 审批模式对比与应用场景

审批模式 技术实现原理 适用场景 核心参数配置
顺序审批 基于FIFO队列的任务调度 层级审批(如:经理→总监→VP) sortOrder:1,2,3
会签 基于CountDownLatch的并发控制 项目立项需多部门全部通过 passWeight:100(权重总和)
或签 基于AtomicBoolean的状态标记 请假审批(直属上级或HR审批) minApproval:1
票签 加权投票算法 预算审批(按职位权重计算) weightMap:{"manager":30}
抄送 异步通知机制 审批结果知会相关人员 notifyType:EMAIL,SMS
自动审批 定时任务+条件判断 小额报销自动通过(如<500元) autoPassCondition: "#{amount<500}"

2.3.2 会签模式的高级配置

v1.1.14版本优化了会签任务的处理逻辑,支持三种通过策略:

  1. 全员通过(默认)
  2. 按比例通过(如2/3以上)
  3. 权重总和达标(如权重总和>100)

配置示例:

// 会签配置示例
NodeModel countersignNode = new NodeModel();
countersignNode.setNodeKey("dept_countersign");
countersignNode.setPerformType(PerformType.countersign);
countersignNode.setPassStrategy(PassStrategy.WEIGHT_SUM);
countersignNode.setPassWeight(100);
countersignNode.setAssignees(Arrays.asList(
    new NodeAssignee("manager", ActorType.ROLE, 40),  // 经理权重40
    new NodeAssignee("director", ActorType.ROLE, 60)  // 总监权重60
));

2.3.3 认领模式实现

针对多人共同负责的审批场景,v1.1.14新增认领模式,参与者可主动抢单处理:

// 前端调用示例
@PostMapping("/claim-task")
public Result claimTask(@RequestParam Long taskId, @RequestParam String userId) {
    flowLongEngine.taskService().claimTask(taskId, userId);
    return Result.success();
}

// 后端处理逻辑(TaskServiceImpl.java)
public void claimTask(Long taskId, String userId) {
    FlwTask task = taskDao.selectById(taskId);
    if (task.getState() == TaskState.CLAIMABLE) {
        task.setState(TaskState.PROCESSING);
        task.setAssignee(userId);
        taskDao.updateById(task);
        // 触发任务认领事件
        eventPublisher.publishEvent(new TaskClaimedEvent(task));
    }
}

2.4 并行分支与包容分支处理

并行分支(Parallel Gateway)和包容分支(Inclusive Gateway)是企业级工作流的核心能力,v1.1.14版本针对这两种分支的创建、执行和驳回流程进行了全面优化,解决了分支任务状态同步和数据一致性问题。

2.4.1 并行分支的技术实现

FlowLong采用"令牌传递"模型实现并行分支,每个分支对应一个独立的执行令牌:

sequenceDiagram
    participant 流程引擎
    participant 并行网关
    participant 分支A
    participant 分支B
    participant 汇聚网关
    
    流程引擎->>并行网关: 启动并行分支
    parallel 分支处理
        并行网关->>分支A: 分配令牌(token=A1)
        分支A->>分支A: 执行任务
        分支A->>汇聚网关: 完成(token=A1)
    and
        并行网关->>分支B: 分配令牌(token=B1)
        分支B->>分支B: 执行任务
        分支B->>汇聚网关: 完成(token=B1)
    end
    汇聚网关->>流程引擎: 所有分支完成

2.4.2 包容分支的条件判断优化

包容分支结合了条件分支和并行分支的特点,v1.1.14版本优化了条件判断逻辑,支持动态生成符合条件的分支列表:

// 包容分支处理核心代码
public List<NodeModel> getInclusiveBranches(ProcessModel model, String nodeKey, Map<String, Object> variables) {
    NodeModel currentNode = model.getNode(nodeKey);
    List<NodeModel> eligibleBranches = new ArrayList<>();
    
    for (ConditionNode conditionNode : currentNode.getInclusiveNodes()) {
        boolean conditionMet = conditionHandler.eval(conditionNode.getCondition(), variables);
        if (conditionMet) {
            eligibleBranches.add(conditionNode.getChildNode());
        }
    }
    
    return eligibleBranches;
}

2.4.3 分支驳回与数据一致性保障

当并行分支中某个任务被驳回时,v1.1.14通过事务补偿机制确保所有分支状态一致:

  1. 记录当前分支状态快照
  2. 调用archiveTask归档所有已完成分支
  3. 重置未完成分支为初始状态
  4. 恢复父节点为可执行状态

核心代码实现:

@Transactional
public void rejectParallelTask(Long taskId, String reason) {
    // 1. 获取当前任务及实例信息
    FlwTask task = taskDao.selectById(taskId);
    FlwInstance instance = instanceDao.selectById(task.getInstanceId());
    
    // 2. 归档所有并行分支任务
    List<FlwTask> parallelTasks = taskDao.selectByInstanceIdAndNodeKey(
        task.getInstanceId(), instance.getCurrentNodeKey()
    );
    for (FlwTask parallelTask : parallelTasks) {
        archiveService.archiveTask(parallelTask, "rejected_by_parallel");
    }
    
    // 3. 重置实例状态
    instance.setCurrentNodeKey(instance.getPreviousNodeKey());
    instance.setState(InstanceState.RUNNING);
    instanceDao.updateById(instance);
    
    // 4. 触发并行驳回事件
    eventPublisher.publishEvent(new ParallelTaskRejectedEvent(instance, parallelTasks));
}

2.5 定时任务与触发器

v1.1.14版本强化了定时器(Timer)和触发器(Trigger)的协同工作能力,支持触发器暂存、定时任务延迟配置和事件驱动的任务唤醒。

2.5.1 定时器的高级配置

FlowLong定时器支持三种触发模式,可满足不同精度的定时需求:

触发模式 时间精度 技术实现 适用场景
CRON表达式 分钟级 Quartz调度器 每日9点自动提醒
延迟执行 秒级 ScheduledExecutorService 审批超时提醒(3天后)
周期执行 分钟级 Spring Scheduler 每周汇总未处理任务

配置示例(流程定义JSON):

{
  "nodeKey": "payment_reminder",
  "performType": 6,  // timer类型
  "timerConfig": {
    "type": "DELAY",
    "delay": 86400000,  // 延迟24小时
    "action": "SEND_REMINDER",
    "params": {
      "template": "payment_reminder"
    }
  }
}

2.5.2 触发器的事件驱动模型

触发器支持多种事件源,可实现复杂的业务联动:

public enum TriggerEvent {
    TASK_CREATED,    // 任务创建时
    TASK_COMPLETED,  // 任务完成时
    PROCESS_STARTED, // 流程启动时
    PROCESS_ENDED,   // 流程结束时
    VARIABLE_UPDATED // 变量更新时
}

v1.1.14新增触发器暂存功能,允许将触发条件暂时保存,待满足特定条件后再执行:

// 触发器暂存与激活示例
triggerService.stashTrigger("order_timeout", 
    TriggerCondition.builder()
        .event(TriggerEvent.PROCESS_STARTED)
        .condition("#{orderType == 'PREORDER'}")
        .delay(3, TimeUnit.DAYS)
        .build()
);

// 当订单支付后激活触发器
triggerService.activateTrigger("order_timeout", orderId);

2.6 流程监听器与事件扩展

为满足企业级系统的集成需求,v1.1.14版本扩展了事件监听体系,提供更细粒度的事件类型和更丰富的上下文信息。

2.6.1 事件类型体系

FlowLong定义了三级事件体系,可满足不同层次的集成需求:

  1. 流程级事件:PROCESS_STARTED, PROCESS_ENDED, PROCESS_SUSPENDED
  2. 任务级事件:TASK_CREATED, TASK_ASSIGNED, TASK_COMPLETED, TASK_REJECTED
  3. 参与者事件:ACTOR_ADDED, ACTOR_REMOVED, ACTOR_CLAIMED

2.6.2 事件监听实现示例

通过实现InstanceListener接口,可自定义流程事件处理逻辑:

@Component
public class OrderProcessListener implements InstanceListener {
    
    @Override
    public void onProcessStarted(InstanceEvent event) {
        // 流程启动时自动创建订单记录
        Order order = new Order();
        order.setOrderNo(event.getBusinessKey());
        order.setStatus("PROCESSING");
        orderMapper.insert(order);
    }
    
    @Override
    public void onProcessEnded(InstanceEvent event) {
        // 流程结束时更新订单状态
        Order order = orderMapper.selectByOrderNo(event.getBusinessKey());
        order.setStatus("COMPLETED");
        order.setApprovalResult(event.getResult());
        orderMapper.updateById(order);
        
        // 发送通知
        notificationService.sendSms(order.getCustomerPhone(), "您的订单已审批通过");
    }
}

2.6.3 事件驱动的微服务集成

通过事件总线(如Spring Cloud Stream),可实现工作流引擎与其他微服务的解耦集成:

@Service
public class EventBridgeService {
    
    @Autowired
    private StreamBridge streamBridge;
    
    @EventListener
    public void bridgeInstanceEvent(InstanceEvent event) {
        // 将工作流事件转发到Kafka主题
        streamBridge.send("workflow-events", 
            JsonUtils.toJson(new EventMessage<>(
                event.getEventType().name(),
                event.getPayload(),
                System.currentTimeMillis()
            ))
        );
    }
}

2.7 数据持久化与多数据库支持

FlowLong支持MySQL、Oracle、PostgreSQL等主流关系型数据库,v1.1.14版本优化了SQL脚本,补充了字段注释,增强了数据库兼容性。

2.7.1 核心数据表结构

FlowLong工作流引擎由8张核心表组成,存储流程定义、实例、任务和参与者等信息:

表名 作用 核心字段 索引设计
flw_process 流程定义 id,key,name,node_config KEY_idx(key),VERSION_idx(key,version)
flw_instance 流程实例 id,process_id,business_key,current_node INSTANCE_IDX(process_id,state)
flw_task 任务实例 id,instance_id,task_key,assignee TASK_IDX(instance_id,state)
flw_task_actor 任务参与者 id,task_id,actor_id,actor_type ACTOR_IDX(task_id,actor_id)
flw_his_instance 历史实例 同flw_instance + end_time HIST_INST_IDX(business_key)

2.7.2 分库分表策略

对于超大规模应用(如:日活100万+),可采用以下分库分表策略:

  1. 按流程KEY分库:不同业务线的流程使用独立数据库
  2. 按时间分表:历史任务表按季度分表(如flw_his_task_2023Q1)
  3. 冷热数据分离:将3个月前的历史数据迁移至归档表

2.7.3 数据迁移与版本升级

v1.1.14版本提供兼容旧版本的数据迁移脚本,可通过以下步骤完成升级:

  1. 执行增量SQL脚本(新增字段和索引)
  2. 运行数据转换工具(处理节点KEY和参与者类型)
  3. 验证数据完整性(使用提供的校验工具)

三、企业级实战案例

3.1 某制造业采购审批系统

业务痛点

  • 采购流程需多部门并行审批,常出现部分部门驳回后其他部门仍在审批的情况
  • 审批策略复杂:≤1万部门经理审批,1-5万总监审批,>5万VP审批
  • 紧急采购单需跳过部分审批环节,人工干预成本高

FlowLong解决方案

  1. 使用并行分支(Parallel Nodes)实现多部门同时审批
  2. 配置条件路由(Condition Nodes)实现金额分档审批
  3. 开发紧急采购触发器,支持动态跳过审批节点

核心配置示例

// 紧急采购触发器实现
@Component
public class EmergencyPurchaseTrigger implements TriggerHandler {
    
    @Override
    public void execute(TriggerParam param) {
        Map<String, Object> variables = param.getVariables();
        if (Boolean.TRUE.equals(variables.get("emergency"))) {
            // 跳过总监审批节点
            flowLongEngine.runtimeService().skipNode(
                param.getInstanceId(), "director_approval"
            );
            // 发送紧急通知
            notificationService.sendUrgentAlert(variables.get("purchaseNo"));
        }
    }
}

实施效果

  • 采购审批周期从平均5天缩短至2天
  • 异常流程处理时间减少70%
  • 系统稳定性提升(99.9%可用性)

3.2 某互联网公司员工入离职流程

业务痛点

  • 入职流程涉及IT、HR、部门等多角色协作,任务依赖复杂
  • 离职员工资产回收常遗漏(如笔记本电脑、门禁卡)
  • 流程状态不透明,员工多次咨询进度

FlowLong解决方案

  1. 使用包容分支(Inclusive Nodes)处理可选流程(如是否配备工牌)
  2. 开发资产回收检查触发器,未完成时自动发送提醒
  3. 实现流程状态查询API,集成到企业门户

核心技术实现

// 资产回收检查触发器
@Slf4j
@Component
public class AssetRecoveryTrigger implements TriggerHandler {
    
    @Autowired
    private AssetService assetService;
    
    @Override
    public void execute(TriggerParam param) {
        String employeeId = param.getVariables().get("employeeId").toString();
        List<Asset> unreturnedAssets = assetService.getUnreturnedAssets(employeeId);
        
        if (!unreturnedAssets.isEmpty()) {
            // 发送提醒
            reminderService.sendAssetReminder(employeeId, unreturnedAssets);
            
            // 暂停离职流程
            flowLongEngine.runtimeService().suspendInstance(param.getInstanceId(), 
                "ASSET_NOT_RETURNED", "有未归还资产:" + unreturnedAssets);
        } else {
            // 继续流程
            flowLongEngine.taskService().complete(param.getTaskId(), "ASSET_CHECK_PASSED");
        }
    }
}

实施效果

  • 资产回收率从75%提升至100%
  • 入离职流程处理效率提升60%
  • 员工咨询量减少80%

四、快速上手指南

4.1 环境准备与安装

4.1.1 系统要求

环境 版本要求
JDK 8+
Spring Boot 2.3.x-2.7.x
数据库 MySQL 5.7+, Oracle 11g+, PostgreSQL 10+
构建工具 Maven 3.6+, Gradle 7.0+

4.1.2 快速开始(Spring Boot项目)

  1. 添加依赖
<dependency>
    <groupId>com.aizuda</groupId>
    <artifactId>flowlong-spring-boot-starter</artifactId>
    <version>1.1.14</version>
</dependency>
  1. 配置数据库
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/flowlong?useUnicode=true&characterEncoding=utf8
    username: root
    password: 123456
flowlong:
  database: mysql
  table-prefix: flw_
  cache:
    type: caffeine
    expire: 3600
  1. 初始化数据库: 执行db目录下对应数据库的SQL脚本(如flowlong-mysql.sql)

  2. 部署流程定义

@SpringBootApplication
public class FlowLongDemoApplication implements CommandLineRunner {
    
    @Autowired
    private FlowLongEngine flowLongEngine;
    
    public static void main(String[] args) {
        SpringApplication.run(FlowLongDemoApplication.class, args);
    }
    
    @Override
    public void run(String... args) throws Exception {
        // 部署流程定义
        String processJson = FileUtils.readFileToString(new File("process.json"), StandardCharsets.UTF_8);
        flowLongEngine.processService().deployByJson("leave_process", "请假流程", processJson);
        log.info("请假流程部署成功");
    }
}

4.2 第一个流程:简单请假审批

4.2.1 流程定义(JSON)

创建process.json文件,定义一个包含"提交申请"、"经理审批"和"HR归档"的简单流程:

{
  "name": "请假流程",
  "key": "leave_process",
  "nodeConfig": {
    "nodeKey": "start",
    "name": "提交申请",
    "performType": 0,
    "childNode": {
      "nodeKey": "manager_approval",
      "name": "经理审批",
      "performType": 1,
      "nodeAssigneeList": [
        {
          "actorId": "#{managerId}",
          "actorType": 1
        }
      ],
      "childNode": {
        "nodeKey": "hr_archive",
        "name": "HR归档",
        "performType": 1,
        "nodeAssigneeList": [
          {
            "actorId": "hr_group",
            "actorType": 2
          }
        ]
      }
    }
  }
}

4.2.2 启动流程实例

@RestController
@RequestMapping("/leave")
public class LeaveController {
    
    @Autowired
    private FlowLongEngine flowLongEngine;
    
    @PostMapping("/apply")
    public Result apply(@RequestBody LeaveApplyRequest request) {
        // 设置流程创建者
        FlowCreator creator = FlowCreator.of(request.getApplicantId(), request.getApplicantName());
        
        // 设置流程变量
        Map<String, Object> variables = new HashMap<>();
        variables.put("leaveType", request.getLeaveType());
        variables.put("startTime", request.getStartTime());
        variables.put("endTime", request.getEndTime());
        variables.put("reason", request.getReason());
        variables.put("managerId", request.getManagerId());  // 经理ID
        
        // 启动流程实例
        FlwInstance instance = flowLongEngine.startInstanceByKey("leave_process", 
            request.getBusinessKey(), creator, variables).get();
            
        return Result.success(instance);
    }
}

4.2.3 处理审批任务

@PostMapping("/approve")
public Result approve(@RequestBody TaskApproveRequest request) {
    // 设置审批结果和意见
    Map<String, Object> variables = new HashMap<>();
    variables.put("approved", true);
    variables.put("comment", request.getComment());
    
    // 完成审批任务
    flowLongEngine.taskService().complete(request.getTaskId(), request.getUserId(), variables);
    return Result.success();
}

五、总结与未来展望

FlowLong v1.1.14版本通过7大核心功能升级,显著提升了复杂审批场景的处理能力,特别是在多级驳回、并行分支和条件路由等方面实现了技术突破。其轻量化架构(核心包<200KB)、无代码配置和丰富的扩展点,使其成为中小微企业数字化转型的理想选择。

5.1 版本升级建议

现有用户可通过以下步骤平滑升级至v1.1.14:

  1. 更新Maven/Gradle依赖版本
  2. 执行增量SQL脚本(新增字段和索引)
  3. 检查自定义处理器是否需要适配新API
  4. 运行回归测试套件验证功能

5.2 未来版本规划

FlowLong团队计划在后续版本中推出以下重要功能:

  • 可视化流程设计器(Web版)
  • 流程版本管理与灰度发布
  • 与低代码平台集成(如JeecgBoot)
  • AI辅助流程优化建议

5.3 社区与资源

  • 官方仓库:https://gitcode.com/aizuda/flowlong
  • 文档中心:https://flowlong.aizuda.com/docs
  • 社区支持:QQ群 123456789
  • 商业支持:contact@aizuda.com

FlowLong工作流引擎秉持"让流程自动化更简单"的理念,持续优化产品体验,欢迎广大开发者参与贡献代码、提交Issue或提供使用反馈。

如果您觉得本文对您有帮助,请点赞、收藏并关注我们,下期将为您带来《FlowLong与微服务架构的深度集成》实践指南,敬请期待!

登录后查看全文
热门项目推荐
相关项目推荐