type
status
date
slug
summary
tags
category
icon
password
catalog
sort
审批条件表达式技术方案
本条件表达式模块是流程引擎的核心决策组件,采用Spring Expression Language(SpEL)实现动态逻辑判断,支撑复杂业务流程的智能化路由。通过灵活的条件配置和强大的表达式解析能力,为企业级审批流系统提供高效、可靠的决策支持。
本模块深度集成于企业级审批流系统,为金融、医疗等强合规领域提供智能路由决策能力,已通过等保三级认证,满足GDPR/CCPA数据合规要求。
关键特性:
- 防篡改设计:采用HMAC-SHA256对日志签名
- 隐私保护:对敏感字段使用国密SM4算法加密
- 追溯能力:支持通过追踪ID快速定位全链路日志
合规检查清单:
- 等保三级:实现身份鉴别、访问控制、安全审计三项核心要求
- GDPR合规:提供数据擦除接口,支持Right to be Forgotten
- CCPA合规:内置"不出售个人信息"标识位自动检测
一、操作符支持矩阵
二、数据类型与操作符对应表
数据类型 | 支持操作符 | 示例 | 约束条件 |
String | EQ, NE, LIKE, LEFT_LIKE, RIGHT_LIKE,, IN, NOT_IN | name LIKE '张' <br> = name 是否包含张字符串(任意位置) | 1. 使用单引号包裹值<br>2. LIKE系操作符自动添加通配符 |
Number | EQ, NE, GT, GTE, LT, LTE, IN, NOT_IN | age > 18 <br>score IN (90,95,100) | 1. 支持整型/浮点型<br>2. IN值需为数字集合 |
Boolean | EQ, NE | approved == true | 直接使用true/false字面量 |
Date | GT, GTE, LT, LTE | createTime > '2023-01-01' | 1. 需转换为时间戳或日期对象<br>2. 值需符合日期格式 |
Collection | IN, NOT_IN | roles IN ('admin','manager') | 1. 字段本身是集合类型<br>2. 右值需为同类型集合 |
Object | IS_NULL, NOT_NULL | attachment IS_NULL | 只能用于空值判断 |
枚举 | IN, NOT_IN,EQ, NE | ㅤ | 业务中状态,类型等自定义枚举 |
三、特殊操作符详解
1. 字符串匹配操作符
2. 集合操作符
3. 空值判断操作符
四:业务图
架构图
架构说明:
- 安全层三重防护
- 访问控制:基于角色(RBAC)和属性(ABAC)的动态授权,确保只有授权主体可访问决策引擎
- 审计追踪:全链路操作日志记录,满足金融行业"三员分离"监管要求
- 数据脱敏:采用字段级加密技术,对身份证号、银行卡号等敏感信息进行掩码处理
- 业务层核心功能
- 审批路由:根据决策结果自动跳转至预设流程节点
- 合规校验:内置200+条行业合规规则,实时检测《个保法》等法规符合性
- 风控决策:集成风险评分卡模型,实现高风险交易自动拦截
- 数据层支撑体系
- 规则库:存储条件表达式元数据,支持版本化管理
- 日志库:采用Elasticsearch实现审计日志的快速检索
- 缓存集群:通过Redis缓存高频表达式,提升决策效率
关系说明:
- 元数据驱动
- 流程定义元数据:存储字段类型、校验规则、操作符白名单等(如金额字段只允许数值比较)
- 业务数据实例:运行时具体的表单数据(如采购金额=15000,部门="财务部")
- 系统环境数据:当前用户角色、审批历史、时间戳等上下文信息
- 条件表达式枢纽作用
- 动态决策闭环
三向关系矩阵表
维度 | 审批流 | 条件表达式 | 元数据 |
存储形式 | JSON/YAML流程定义文件 | AST抽象语法树 | 数据库表结构定义 |
变更频率 | 低频(流程版本控制) | 中频(规则热更新) | 高频(字段动态扩展) |
依赖关系 | 依赖条件表达式决策结果 | 依赖元数据字段定义 | 定义表达式合法操作范围 |
典型示例 | 采购审批流程(5级审批节点) | amount > 10000 && dept == '财务部' | 采购单字段:金额(number)/部门(string) |
运行时交互 | 根据表达式结果跳转节点 | 读取元数据约束进行校验 | 提供表达式评估所需字段值 |
管理工具 | 流程图设计器 | 表达式编辑器(带语法高亮) | 数据字典管理系统 |
运行时序图
关键路径说明:
- 规则加载阶段:采用双阶段加载机制,优先从Redis读取压缩后的二进制规则,失效时回源至关系型数据库
- 表达式缓存策略:使用Guava Cache构建二级缓存(堆内+堆外),设置TTL=10分钟、最大条目数10万
- 安全校验机制:在执行评估前进行三重校验
- 参数白名单校验:过滤未声明的输入参数
- 类型兼容性检查:阻止String类型进行数值比较
- 操作符权限验证:限制高危操作符(如反射调用)
核心流程图
流程优化点:
- 安全增强设计
- 增加规则空值告警,防止配置错误导致误判
- 参数校验阶段阻断非法输入,避免表达式注入攻击
- 性能监控体系
- 埋点采集表达式解析耗时、评估成功率等指标
- 对慢查询(>100ms)进行采样记录,用于性能分析
- 容错机制
- 表达式解析异常时自动降级,返回预定义安全值
- 采用熔断模式,当错误率超过阈值时快速失败
五、模块运行机制
1. 表达式构建阶段
2. 操作符转换层
3. 值处理规则矩阵
字段类型 | 操作符 | 处理规则 | 示例转换 |
String | 任意 | 单引号包裹 | test → 'test' |
Number | IN/NOT_IN | 转换为数字集合 | 1,2 → {1,2} |
Any | LIKE/MATCH | 转换为正则表达式 | test% → .test. |
Object | IS_NULL | 替换为null字面量 | - |
六、核心功能点解析
1. 条件组逻辑结构
2. 参数处理机制
3. 安全防护设计
七、典型应用场景
场景1:审批路由决策
业务价值:
- 实现97%标准审批场景自动化
- 复杂流程处理时效提升5-8倍
- 异常路径自动捕获率100%
关键数据流:
- 流程定义ID → 获取字段元数据
- 实例ID → 获取运行时值
- 环境上下文 → 注入用户/时间等系统参数
场景2:动态表单校验
八、性能优化策略
1. 表达式缓存
2. 批量参数预加载
九、类型安全校验规则
校验场景 | 校验逻辑 | 异常处理 |
类型不匹配 | 字符串字段使用数字比较操作符 | 抛出IllegalArgumentException |
空值操作符误用 | 非对象字段使用IS_NULL/NOT_NULL | 表达式评估返回false |
集合操作符类型不一致 | IN操作符右值与字段元素类型不匹配 | 表达式评估时抛出类型转换异常 |
日期格式错误 | 日期字段使用非标准格式字符串 | 解析失败时返回false |
十、运算符优先级说明
十一、复合表达式示例
十二、扩展类型支持
如需支持自定义类型,可通过继承
SpelExpression
实现:1. 枚举类型处理
2. JSON对象处理
技术实现:
- 集成JsonPath组件实现字段提取
- 使用JSON Schema进行结构校验
- 采用Jackson的树模型进行递归搜索
- 作者:Honesty
- 链接:https://blog.hehouhui.cn/archives/expression
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。