3. 审查意见的数据结构
审查意见是工作流节点配置中最核心的动态输入。一个结构完整的意见对象,不仅记录了审批结果,更承载了流程回溯、责任认定与参数路由的全部信息。本章从数据建模角度,拆解审查意见的标准字段及其在节点配置中的映射关系。
3.1 核心字段定义
审查意见的数据结构通常包含以下六个必选字段与两个扩展字段,构成一条完整的审批记录:
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 意见内容 | String / Text | 是 | 审批人填写的文字说明,最长支持 2000 字符 |
| 审批人 | String (UserID) | 是 | 执行审批操作的用户唯一标识 |
| 时间戳 | DateTime | 是 | 意见提交的精确时间,精确到毫秒 |
| 附件 | Array<FileRef> | 否 | 审批人上传的补充文件列表,支持多文件 |
| 意见类型 | Enum | 是 | 同意 / 驳回 / 转办 / 会签 / 加签 |
| 任务 ID | String | 是 | 关联的工作流节点实例 ID |
| 签名哈希 | String | 否 | 防篡改校验值,用于合规审计 |
| 扩展属性 | JSON | 否 | 业务自定义键值对,如部门编码、金额区间 |
建模建议:在 Activiti / Flowable 中,建议将意见内容与意见类型分离存储。意见类型作为独立枚举字段,可直接驱动后续节点路由判断,避免在长文本中做字符串匹配。
3.2 意见类型枚举与路由映射
意见类型是参数配置的触发开关。不同枚举值对应不同的节点流转策略:
- 同意:流程沿主线前进,触发下一节点或结束。
- 驳回:流程回退至指定上游节点,可配置回退层级(直接上级 / 发起人)。
- 转办:当前任务转移给其他审批人,原审批人退出审批链。
- 会签:触发并行审批分支,等待所有会签人完成后再聚合。
- 加签:在当前节点前插入一个额外审批节点,审批通过后继续原流程。
配置要点:在 Camunda 的 BPMN 模型中,建议将意见类型映射为流程变量的字符串值,并在网关条件中使用
${opinionType == 'REJECT'} 表达式进行分支判断。避免在 Java 委托类中硬编码枚举值。
3.3 数据结构关系图
下图展示了审查意见对象与流程实例、任务节点、附件存储之间的关联关系:
3.4 代码示例:审查意见实体定义
以下为 Flowable 工作流引擎中审查意见的 Java 实体类定义,包含完整的字段注解与序列化配置:
public class ApprovalOpinion implements Serializable {
private static final long serialVersionUID = 1L;
/** 意见内容 */
private String content;
/** 审批人用户ID */
private String approverId;
/** 审批人姓名(冗余字段,用于展示) */
private String approverName;
/** 提交时间戳 */
private Date timestamp;
/** 附件列表 */
private List<FileAttachment> attachments;
/** 意见类型枚举 */
private OpinionType opinionType;
/** 关联的任务实例ID */
private String taskId;
/** 签名哈希(防篡改) */
private String signatureHash;
/** 业务扩展属性 */
private Map<String, Object> extensions;
// getters / setters 省略
}
public enum OpinionType {
AGREE, // 同意
REJECT, // 驳回
TRANSFER, // 转办
COUNTERSIGN,// 会签
ADD_SIGN // 加签
}
避坑提示:时间戳字段务必使用服务器端时间,禁止依赖客户端提交的时间值。在分布式部署场景下,建议统一使用 NTP 同步后的数据库时间或工作流引擎内置时钟,避免因时区差异导致审批顺序错乱。
3.5 字段校验规则
在节点配置中,审查意见的每个字段都应设置明确的校验规则,防止脏数据进入流程引擎:
- 意见内容:非空校验 + 最大长度限制(建议 2000 字符),禁止纯空格或重复字符。
- 审批人:必须为系统中已激活的用户,支持 LDAP/AD 同步校验。
- 时间戳:自动生成,不可由前端传入;回写时校验是否早于任务创建时间。
- 附件:文件大小总和不超过 50MB,格式白名单(PDF、图片、Office 文档)。
- 意见类型:仅允许枚举值,拒绝字符串自由输入。
通过上述数据结构设计,审查意见不再是一条简单的文本记录,而是驱动工作流节点参数配置、路由决策与合规审计的标准化数据载体。下一节将基于此结构,讲解如何利用意见类型字段实现动态节点路由。