feat(flow): 新增表达式分配用户策略支持

- 在Node DTO中添加assignExpress和assignExpressName字段
- 实现AssignExpressStrategyImpl表达式分配策略类
- 支持通过表达式动态计算任务执行人列表
- 优化NodeFormatUtil中的用户分配逻辑
- 更新ProcessInstanceConstant添加表达式分配类型常量
This commit is contained in:
lengleng authored and pigcloud committed 2025-10-09 14:48:42 +08:00
1 parent 79b27b6d7d
commit 0eaa4b6d11
6 files changed
+1069 -14

No files matched your search

@@ -0,0 +1,130 @@
package com.pig4cloud.pigx.flow.constant;
/**
* 流程实例常量定义
* <p>
* 定义流程实例执行过程中使用的各种常量,包括: - 无执行人处理策略 - 拒绝处理策略 - 多人审批模式 - 任务分配类型 - 表单权限
* </p>
*
* @author pigx
*/
public class ProcessInstanceConstant {
/**
* 空执行人默认ID 当节点没有找到合适的执行人时使用该默认值
*/
public static final Long DEFAULT_EMPTY_ASSIGN = -99999999L;
/**
* 无执行人处理策略:自动通过 当任务节点没有找到执行人时,自动通过该节点
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_PASS = "TO_PASS";
/**
* 无执行人处理策略:转交给管理员 当任务节点没有找到执行人时,将任务转交给流程管理员处理
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_ADMIN = "TO_ADMIN";
/**
* 无执行人处理策略:指定人员 当任务节点没有找到执行人时,转交给预先指定的人员处理
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_USER = "TO_USER";
/**
* 无执行人处理策略:结束流程 当任务节点没有找到执行人时,直接结束整个流程
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_END = "TO_END";
/**
* 无执行人处理策略:拒绝 当任务节点没有找到执行人时,自动拒绝该任务
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_REFUSE = "TO_REFUSE";
/**
* 拒绝处理策略:结束流程 审批人拒绝后,直接结束整个流程
*/
public static final String USER_TASK_REFUSE_TYPE_TO_END = "TO_END";
/**
* 拒绝处理策略:跳转到指定节点 审批人拒绝后,流程跳转到指定的节点继续执行
*/
public static final String USER_TASK_REFUSE_TYPE_TO_NODE = "TO_NODE";
/**
* 多人审批模式:会签 所有审批人都必须同意才能通过,任何一人拒绝则不通过
*/
public static final int MULTIPLE_MODE_AL_SAME = 1;
/**
* 多人审批模式:或签 只要有一个人同意即可通过,无需等待其他人审批
*/
public static final int MULTIPLE_MODE_ONE = 2;
/**
* 多人审批模式:顺签 按照指定顺序依次审批,前一人通过后才能轮到下一人
*/
public static final int MULTIPLE_MODE_ALL_SORT = 3;
/**
* 任务分配类型 定义审批节点的执行人分配方式
*/
public static class AssignedTypeClass {
/**
* 指定用户 直接指定具体的用户作为执行人
*/
public static final int USER = 1;
/**
* 部门主管 根据发起人或上一节点执行人的部门,找到对应的部门主管作为执行人
*/
public static final int LEADER = 2;
/**
* 发起人自己 由流程发起人自己处理该节点
*/
public static final int SELF = 5;
/**
* 表单人员 从表单中的用户选择字段获取执行人
*/
public static final int FORM_USER = 8;
/**
* 发起人自选 发起流程时由发起人手动选择该节点的执行人
*/
public static final int SELF_SELECT = 4;
/**
* 角色 指定拥有特定角色的所有用户作为执行人
*/
public static final int ROLE = 3;
/** 表达式常量值 */
public static final int EXPRESSION = 10;
}
/**
* 表单权限类型 定义节点对表单字段的操作权限
*/
public static class FormPermClass {
/**
* 隐藏 该字段对当前节点执行人不可见
*/
public static final String HIDE = "H";
/**
* 只读 该字段对当前节点执行人可见但不可编辑
*/
public static final String READ = "R";
/**
* 编辑 该字段对当前节点执行人可见且可编辑
*/
public static final String EDIT = "E";
}
}
@@ -0,0 +1,144 @@
package com.pig4cloud.pigx.flow.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 流程节点数据传输对象
* <p>
* 用于流程定义的节点配置信息传输。该对象包含了节点的所有配置信息, 包括节点类型、审批人配置、表单权限、条件配置等。
* 支持嵌套结构,可以表示复杂的流程结构(如条件分支、并行分支)。
* </p>
*
* @author pigx
*/
@Data
public class Node {
/**
* 节点唯一标识
*/
private String id;
/**
* 父节点ID 用于构建节点的层级关系
*/
private String parentId;
/**
* 头节点ID 用于条件分支和并行分支的开始节点标识
*/
private String headId;
/**
* 尾节点ID 用于条件分支和并行分支的结束节点标识
*/
private String tailId;
/**
* 占位符文本 用于流程设计器中的显示
*/
private String placeHolder;
/**
* 节点类型 对应NodeTypeEnum中的值
*/
private Integer type;
/**
* 节点名称 节点的显示名称
*/
@JsonProperty(value = "nodeName")
private String name;
/**
* 错误标识 标识节点配置是否有错误
*/
private Boolean error;
/**
* 子节点 当前节点的下一个节点,用于构建节点链
*/
@JsonProperty("childNode")
private Node children;
/**
* 事件配置 JSON格式存储节点事件配置(如超时提醒、自动审批等)
*/
private String eventConfig;
/**
* 执行人分配类型 对应AssignedTypeClass中的常量(指定用户、部门主管、角色等)
*/
private Integer assignedType;
/**
* 是否多人审批 true=多人审批,false=单人审批
*/
private Boolean multiple;
/**
* 多人审批模式 1=会签(所有人都同意),2=或签(一人同意即可),3=顺签(依次审批)
*/
private Integer multipleMode;
/**
* 部门主管级别 当assignedType为LEADER时,指定查找第几级主管
*/
private Integer deptLeaderLevel;
/** 分配规则名称 */
private String assignExpressName;
/** 分配表达式 */
private String assignExpress;
/**
* 表单用户字段ID 当assignedType为FORM_USER时,指定从哪个表单字段获取用户
*/
private String formUserId;
/**
* 表单用户字段名称 用于显示
*/
private String formUserName;
/**
* 节点执行人列表 当assignedType为USER或ROLE时,存储具体的用户或角色信息
*/
private List<NodeUser> nodeUserList;
/**
* 条件节点列表 当节点类型为条件分支时,存储所有分支节点
*/
private List<Node> conditionNodes;
/**
* 表单字段权限配置 key=表单字段ID,value=权限类型(H=隐藏,R=只读,E=编辑)
*/
private Map<String, String> formPerms;
/**
* 无执行人处理配置 定义当节点找不到执行人时的处理策略
*/
private Nobody nobody;
/**
* 分组模式标识 用于条件配置的分组模式
*/
private Boolean groupMode;
/**
* 条件列表 当节点为条件分支时,定义各分支的执行条件
*/
private List<GroupCondition> conditionList;
/**
* 拒绝配置 定义节点拒绝后的处理策略
*/
private Refuse refuse;
}