流转工作流程

This commit is contained in:
2024-05-12 16:15:34 +08:00
parent 1a9beeed93
commit eb9818dd7f
71 changed files with 3810 additions and 302 deletions

View File

@@ -0,0 +1,27 @@
package com.njcn.bpm.pojo.dto;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* BPM 发送流程实例被通过 Request DTO
*/
@Data
public class BpmMessageSendWhenProcessInstanceApproveReqDTO {
/**
* 流程实例的编号
*/
@NotEmpty(message = "流程实例的编号不能为空")
private String processInstanceId;
/**
* 流程实例的名字
*/
@NotEmpty(message = "流程实例的名字不能为空")
private String processInstanceName;
@NotNull(message = "发起人的用户编号")
private String startUserId;
}

View File

@@ -0,0 +1,34 @@
package com.njcn.bpm.pojo.dto;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* BPM 发送流程实例被不通过 Request DTO
*/
@Data
public class BpmMessageSendWhenProcessInstanceRejectReqDTO {
/**
* 流程实例的编号
*/
@NotEmpty(message = "流程实例的编号不能为空")
private String processInstanceId;
/**
* 流程实例的名字
*/
@NotEmpty(message = "流程实例的名字不能为空")
private String processInstanceName;
@NotNull(message = "发起人的用户编号")
private String startUserId;
/**
* 不通过理由
*/
@NotEmpty(message = "不通过理由不能为空")
private String reason;
}

View File

@@ -24,14 +24,14 @@ public class BpmCategoryParam implements Serializable {
* 分类名
*/
@ApiModelProperty("分类名")
@NotNull(message = "分类名不能为空")
@NotBlank(message = "分类名不能为空")
private String name;
/**
* 分类标志
*/
@ApiModelProperty("分类标志")
@NotNull(message = "分类标志不能为空")
@NotBlank(message = "分类标志不能为空")
private String code;
/**

View File

@@ -20,21 +20,21 @@ public class BpmFormParam implements Serializable {
* 表单名
*/
@ApiModelProperty("表单名称")
@NotNull(message = "表单名称不能为空")
@NotBlank(message = "表单名称不能为空")
private String name;
/**
* 状态
*/
@ApiModelProperty("表单状态")
@NotNull(message = "表单状态不能为空")
@NotBlank(message = "表单状态不能为空")
private Integer status;
/**
* 表单的配置
*/
@ApiModelProperty("表单的配置-JSON 字符串")
@NotNull(message = "表单的配置不能为空")
@NotBlank(message = "表单的配置不能为空")
private String conf;
/**
@@ -42,7 +42,7 @@ public class BpmFormParam implements Serializable {
*
*/
@ApiModelProperty("表单项的数组-JSON 字符串的数组")
@NotNull(message = "表单项的数组不能为空")
@NotBlank(message = "表单项的数组不能为空")
private List<String> fields;
/**

View File

@@ -20,11 +20,11 @@ public class BpmModelParam implements Serializable {
@ApiModelProperty("流程标识")
@NotNull(message = "流程标识不能为空")
@NotBlank(message = "流程标识不能为空")
private String key;
@ApiModelProperty("流程名称")
@NotNull(message = "流程名称不能为空")
@NotBlank(message = "流程名称不能为空")
private String name;
@ApiModelProperty( "流程图标")

View File

@@ -0,0 +1,21 @@
package com.njcn.bpm.pojo.param.instance;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
@Schema(description = "管理后台 - 流程实例的取消 Request VO")
@Data
public class BpmProcessInstanceCancelParam {
@ApiModelProperty("流程实例的编号")
@NotEmpty(message = "流程实例的编号不能为空")
private String id;
@ApiModelProperty("取消原因")
@NotEmpty(message = "取消原因不能为空")
private String reason;
}

View File

@@ -0,0 +1,26 @@
package com.njcn.bpm.pojo.param.instance;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.util.List;
import java.util.Map;
@Schema(description = "管理后台 - 流程实例的创建 Request VO")
@Data
public class BpmProcessInstanceCreateParam {
@NotEmpty(message = "流程定义编号不能为空")
@ApiModelProperty("流程定义的编号")
private String processDefinitionId;
@Schema(description = "变量实例(动态表单)")
@ApiModelProperty("变量实例(动态表单)")
private Map<String, Object> variables;
@ApiModelProperty("发起人自选审批人 Map")
private Map<String, List<Long>> startUserSelectAssignees;
}

View File

@@ -0,0 +1,28 @@
package com.njcn.bpm.pojo.param.instance;
import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 流程实例分页")
@Data
public class BpmProcessInstancePageParam extends BaseParam {
@ApiModelProperty("流程名称")
private String name;
@ApiModelProperty("流程定义的编号")
private String processDefinitionId;
@ApiModelProperty("流程实例的状态")
private Integer status;
@ApiModelProperty("流程分类")
private String category;
@ApiModelProperty("发起用户编号")
private String startUserId; // 注意,只有在【流程实例】菜单,才使用该参数
}

View File

@@ -0,0 +1,29 @@
package com.njcn.bpm.pojo.param.task;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Collection;
import java.util.Map;
@Schema(description = "管理后台 - 通过流程任务的 Request VO")
@Data
public class BpmTaskApproveParam {
@ApiModelProperty("任务编号")
@NotBlank(message = "任务编号不能为空")
private String id;
@ApiModelProperty("审批意见")
@NotBlank(message = "审批意见不能为空")
private String reason;
@ApiModelProperty("抄送的用户编号数组")
private Collection<String> copyUserIds;
@ApiModelProperty("变量实例(动态表单)")
private Map<String, Object> variables;
}

View File

@@ -0,0 +1,26 @@
package com.njcn.bpm.pojo.param.task;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 委派流程任务的 Request VO")
@Data
public class BpmTaskDelegateParam {
@ApiModelProperty("任务编号")
@NotEmpty(message = "任务编号不能为空")
private String id;
@ApiModelProperty("被委派人ID")
@NotNull(message = "被委派人 ID 不能为空")
private String delegateUserId;
@ApiModelProperty("委派原因")
@NotEmpty(message = "委派原因不能为空")
private String reason;
}

View File

@@ -0,0 +1,35 @@
package com.njcn.bpm.pojo.param.task;
import com.njcn.bpm.pojo.param.PageParam;
import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 流程任务的的分页 Request VO") // 待办、已办,都使用该分页
@Data
public class BpmTaskParam extends PageParam {
@Schema(description = "流程任务名", example = "芋道")
private String name;
/**
* 待办事项分页查询实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
public static class BpmTaskQueryParam extends BaseParam {
/**
* 表单名称
*/
@ApiModelProperty("流程任务名")
private String name;
}
}

View File

@@ -0,0 +1,24 @@
package com.njcn.bpm.pojo.param.task;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
@Schema(description = "管理后台 - 不通过流程任务的 Request VO")
@Data
public class BpmTaskRejectParam {
@ApiModelProperty("任务编号")
@NotBlank(message = "任务编号不能为空")
private String id;
@ApiModelProperty("审批意见")
@NotBlank(message = "审批意见不能为空")
private String reason;
}

View File

@@ -0,0 +1,29 @@
package com.njcn.bpm.pojo.param.task;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
@Schema(description = "管理后台 - 回退流程任务的 Request VO")
@Data
public class BpmTaskReturnParam {
@ApiModelProperty("任务编号")
@NotBlank(message = "任务编号不能为空")
private String id;
@ApiModelProperty("回退到的任务 Key")
@NotBlank(message = "回退到的任务 Key 不能为空")
private String targetTaskDefinitionKey;
@ApiModelProperty("回退意见")
@NotBlank(message = "回退意见不能为空")
private String reason;
}

View File

@@ -0,0 +1,31 @@
package com.njcn.bpm.pojo.param.task;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.util.List;
import java.util.Set;
@Schema(description = "管理后台 - 加签任务的创建(加签) Request VO")
@Data
public class BpmTaskSignCreateParam {
@ApiModelProperty("需要加签的任务编号")
@NotEmpty(message = "任务编号不能为空")
private String id;
@ApiModelProperty("加签的用户编号")
@NotEmpty(message = "加签用户不能为空")
private List<String> userIds;
@ApiModelProperty("加签类型")
@NotEmpty(message = "加签类型不能为空")
private String type; // 参见 BpmTaskSignTypeEnum 枚举
@ApiModelProperty("加签原因")
@NotEmpty(message = "加签原因不能为空")
private String reason;
}

View File

@@ -0,0 +1,21 @@
package com.njcn.bpm.pojo.param.task;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
@Schema(description = "管理后台 - 加签任务的删除(减签) Request VO")
@Data
public class BpmTaskSignDeleteParam {
@ApiModelProperty("被减签的任务编号")
@NotEmpty(message = "任务编号不能为空")
private String id;
@ApiModelProperty("减签原因")
@NotEmpty(message = "减签原因不能为空")
private String reason;
}

View File

@@ -0,0 +1,26 @@
package com.njcn.bpm.pojo.param.task;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 流程任务的转办 Request VO")
@Data
public class BpmTaskTransferParam {
@ApiModelProperty("任务编号")
@NotEmpty(message = "任务编号不能为空")
private String id;
@ApiModelProperty("新审批人的用户编号")
@NotNull(message = "新审批人的用户编号不能为空")
private String assigneeUserId;
@ApiModelProperty("转办原因")
@NotEmpty(message = "转办原因不能为空")
private String reason;
}

View File

@@ -15,7 +15,7 @@ import java.util.List;
/**
* BPM 流程定义的拓信息
* 主要解决 Flowable {@link org.flowable.engine.repository.ProcessDefinition} 不支持拓展字段,所以新建该表
* 主要解决 Flowable {@link} 不支持拓展字段,所以新建该表
*
*/
@TableName(value = "bpm_process_definition_info", autoResultMap = true)

View File

@@ -0,0 +1,70 @@
package com.njcn.bpm.pojo.po.task;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import java.io.Serializable;
import lombok.Data;
/**
* <p>
* BPM 流程实例抄送表
* </p>
*
* @author hongawen
* @since 2024-05-10
*/
@Data
@TableName("bpm_process_instance_copy")
public class ProcessInstanceCopy extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 编号
*/
private String id;
/**
* 用户编号,被抄送人
*/
private String userId;
/**
* 发起流程的用户编号
*/
private String startUserId;
/**
* 流程实例的id
*/
private String processInstanceId;
/**
* 流程实例的名字
*/
private String processInstanceName;
/**
* 流程定义的分类
*/
private String category;
/**
* 发起抄送的任务编号
*/
private String taskId;
/**
* 任务的名字
*/
private String taskName;
/**
* 状态0-删除 1-正常
*/
private Integer state;
}

View File

@@ -13,7 +13,6 @@ import java.util.List;
/**
* BPM 流程定义的拓信息
* 主要解决 Flowable {@link org.flowable.engine.repository.ProcessDefinition} 不支持拓展字段,所以新建该表
*
*/
@Data

View File

@@ -0,0 +1,93 @@
package com.njcn.bpm.pojo.vo.instance;
import com.njcn.bpm.pojo.vo.BpmProcessDefinitionInfoVO;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@Schema(description = "管理后台 - 流程实例的VO")
@Data
public class BpmProcessInstanceVO {
@ApiModelProperty("流程实例的编号")
private String id;
@ApiModelProperty("流程名称")
private String name;
@ApiModelProperty("流程分类")
private String category;
@ApiModelProperty("流程分类名称")
private String categoryName;
@ApiModelProperty("流程实例的状态")
private Integer status; // 参见 BpmProcessInstanceStatusEnum 枚举
@ApiModelProperty("发起时间")
private LocalDateTime startTime;
@ApiModelProperty("结束时间")
private LocalDateTime endTime;
@ApiModelProperty("持续时间")
private Long durationInMillis;
@ApiModelProperty("提交的表单值")
private Map<String, Object> formVariables;
@ApiModelProperty("业务的唯一标识")
private String businessKey;
/**
* 发起流程的用户
*/
private User startUser;
@ApiModelProperty("流程定义的编号")
private String processDefinitionId;
/**
* 流程定义
*/
private BpmProcessDefinitionInfoVO processDefinition;
/**
* 当前审批中的任务
*/
private List<Task> tasks; // 仅在流程实例分页才返回
@Schema(description = "用户信息")
@Data
public static class User {
@ApiModelProperty("用户编号")
private String id;
@ApiModelProperty("用户昵称")
private String name;
@ApiModelProperty("部门编号")
private String deptId;
@ApiModelProperty("部门名称")
private String deptName;
}
@Schema(description = "流程任务")
@Data
public static class Task {
@ApiModelProperty("流程任务的编号")
private String id;
@ApiModelProperty("任务名称")
private String name;
}
}

View File

@@ -0,0 +1,27 @@
package com.njcn.bpm.pojo.vo.task;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 流程活动的 Response VO")
@Data
public class BpmActivityVO {
@ApiModelProperty("流程活动的标识")
private String key;
@ApiModelProperty("流程活动的类型")
private String type;
@ApiModelProperty("流程活动的开始时间")
private LocalDateTime startTime;
@ApiModelProperty("流程活动的结束时间")
private LocalDateTime endTime;
@ApiModelProperty("关联的流程任务的编号")
private String taskId; // 关联的流程任务,只有 UserTask 等类型才有
}

View File

@@ -0,0 +1,106 @@
package com.njcn.bpm.pojo.vo.task;
import com.njcn.bpm.pojo.vo.instance.BpmProcessInstanceVO;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@Schema(description = "管理后台-流程任务VO")
@Data
public class BpmTaskVO {
@ApiModelProperty("任务编号")
private String id;
@ApiModelProperty("任务名字")
private String name;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("结束时间")
private LocalDateTime endTime;
@Schema(description = "持续时间", example = "1000")
@ApiModelProperty("持续时间")
private Long durationInMillis;
@ApiModelProperty("任务状态")
private Integer status; // 参见 BpmTaskStatusEnum 枚举
@ApiModelProperty("审批理由")
private String reason;
/**
* 负责人的用户信息
*/
private BpmProcessInstanceVO.User ownerUser;
/**
* 审核的用户信息
*/
private BpmProcessInstanceVO.User assigneeUser;
@ApiModelProperty("任务定义的标识")
private String taskDefinitionKey;
@ApiModelProperty("所属流程实例编号")
private String processInstanceId;
/**
* 所属流程实例
*/
private ProcessInstance processInstance;
@ApiModelProperty("父任务编号")
private String parentTaskId;
@ApiModelProperty("子任务列表(由加签生成)")
private List<BpmTaskVO> children;
@ApiModelProperty("表单编号")
private String formId;
@ApiModelProperty("表单名字")
private String formName;
@ApiModelProperty("表单的配置-JSON 字符串")
private String formConf;
@ApiModelProperty("表单项的数组")
private List<String> formFields;
@ApiModelProperty("提交的表单值")
private Map<String, Object> formVariables;
@Data
@Schema(description = "流程实例")
public static class ProcessInstance {
@ApiModelProperty("流程实例编号")
private String id;
@ApiModelProperty("流程实例名称")
private String name;
@ApiModelProperty("提交时间")
private LocalDateTime createTime;
@ApiModelProperty("流程定义的编号")
private String processDefinitionId;
/**
* 发起人的用户信息
*/
private BpmProcessInstanceVO.User startUser;
}
}