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 数据结构关系图

下图展示了审查意见对象与流程实例、任务节点、附件存储之间的关联关系:

审查意见数据结构关系图 审查意见数据结构关系图 流程实例 ProcessInstance 任务节点 Task / UserTask 审查意见 Opinion 附件列表 FileRef[] 意见类型枚举 AGREE / REJECT / TRANSFER 扩展属性 JSON 1:N 关系 一个任务可有多条意见

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 文档)。
  • 意见类型:仅允许枚举值,拒绝字符串自由输入。

通过上述数据结构设计,审查意见不再是一条简单的文本记录,而是驱动工作流节点参数配置、路由决策与合规审计的标准化数据载体。下一节将基于此结构,讲解如何利用意见类型字段实现动态节点路由。