彻底解决中国式审批痛点:FlowLong v1.1.14无代码引擎7大突破详解
你是否还在为这些审批难题抓狂?多分支并行审批时流程卡死、复杂条件路由配置繁琐、驳回跳转逻辑混乱、会签或签规则冲突、定时任务与触发器难以协同、审批策略无法灵活调整、历史任务数据迁移异常?作为真正的国产无代码工作流引擎,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版本通过三个层面实现智能驳回:
- 父节点追溯机制:新增
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;
}
- 并行分支自动归档:优化
rejectTask方法,当检测到当前节点属于并行分支时,自动调用archiveParallelTasks处理所有同级分支任务:
// 伪代码逻辑
if (currentNode.isParallelNode()) {
List<NodeModel> siblingNodes = currentNode.getParentNode().getParallelNodes();
for (NodeModel sibling : siblingNodes) {
taskService.archiveTask(sibling.getNodeKey(), instanceId, "rejected_by_parallel");
}
}
- 定时器/触发器状态重置:在
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版本优化了会签任务的处理逻辑,支持三种通过策略:
- 全员通过(默认)
- 按比例通过(如2/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通过事务补偿机制确保所有分支状态一致:
- 记录当前分支状态快照
- 调用
archiveTask归档所有已完成分支 - 重置未完成分支为初始状态
- 恢复父节点为可执行状态
核心代码实现:
@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定义了三级事件体系,可满足不同层次的集成需求:
- 流程级事件:PROCESS_STARTED, PROCESS_ENDED, PROCESS_SUSPENDED
- 任务级事件:TASK_CREATED, TASK_ASSIGNED, TASK_COMPLETED, TASK_REJECTED
- 参与者事件: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万+),可采用以下分库分表策略:
- 按流程KEY分库:不同业务线的流程使用独立数据库
- 按时间分表:历史任务表按季度分表(如flw_his_task_2023Q1)
- 冷热数据分离:将3个月前的历史数据迁移至归档表
2.7.3 数据迁移与版本升级
v1.1.14版本提供兼容旧版本的数据迁移脚本,可通过以下步骤完成升级:
- 执行增量SQL脚本(新增字段和索引)
- 运行数据转换工具(处理节点KEY和参与者类型)
- 验证数据完整性(使用提供的校验工具)
三、企业级实战案例
3.1 某制造业采购审批系统
业务痛点:
- 采购流程需多部门并行审批,常出现部分部门驳回后其他部门仍在审批的情况
- 审批策略复杂:≤1万部门经理审批,1-5万总监审批,>5万VP审批
- 紧急采购单需跳过部分审批环节,人工干预成本高
FlowLong解决方案:
- 使用并行分支(Parallel Nodes)实现多部门同时审批
- 配置条件路由(Condition Nodes)实现金额分档审批
- 开发紧急采购触发器,支持动态跳过审批节点
核心配置示例:
// 紧急采购触发器实现
@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解决方案:
- 使用包容分支(Inclusive Nodes)处理可选流程(如是否配备工牌)
- 开发资产回收检查触发器,未完成时自动发送提醒
- 实现流程状态查询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项目)
- 添加依赖:
<dependency>
<groupId>com.aizuda</groupId>
<artifactId>flowlong-spring-boot-starter</artifactId>
<version>1.1.14</version>
</dependency>
- 配置数据库:
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
-
初始化数据库: 执行db目录下对应数据库的SQL脚本(如flowlong-mysql.sql)
-
部署流程定义:
@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:
- 更新Maven/Gradle依赖版本
- 执行增量SQL脚本(新增字段和索引)
- 检查自定义处理器是否需要适配新API
- 运行回归测试套件验证功能
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与微服务架构的深度集成》实践指南,敬请期待!
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00