工作流
工作流是指一类能够完全自动执行的经营过程,根据一系列过程规则,将文档、信息或任务在不同的执行者之间进行传递与执行。说的直白一点工作流就是封装好的一种框架,我们利用这种框架来解决需要多个人或者多个部门协同完成的某项工作。SOFAST基于 Flowable 6.6实现协同流程,支持在线设计流程图,提供流程定义管理、流程实例管理、我的申请、待办任务和已办任务模块。
流程定义管理
新增流程定义
- 流程编码:全局唯一编码。
- 流程分类:用于区分不同业务的流程。
- 流程前缀:用于生成流水单号,例:QJ2021092100001=QJ(请假申请)20211010(日期)00001(流水号)
流程设计
流程基本信息
PS:点击空白处可切换至流程基本信息
- 流程完成回调:流程正常结束时回调地址
- 服务名称:Nacos注册中心中的服务名称
- 流程终止回调:流程取消或流程终止时回调地址
流程设计-节点基本信息
PS:点击任务节点可切换至节点基本信息
- 通知方式为邮件通知,暂时仅支持待办通知和流程完成通知,抄送人通知暂不支持
- 待办通知:发送邮件至办理人,提醒处理待办
- 完成通知:发送邮件至申请人,提醒申请已结束
- 流程通知开关配置:true为开启通知,false为关闭通知,默认为关闭通知
sofast: #工作流通知 flowable: notice-enable: true
- 表单组件地址:创建业务信息的地址
- 详情组件地址:显示业务信息的地址
节点事件监听
节点事件监听仅支持执行事件,在任务开始前或完成后调用配置的请求地址。
流程设计完成后,点击发布按钮发布流程。
流程实例管理
查看所有流程实例,对于流转中的流程实例,具备转办、挂起、激活、终止等功能。
- 转办:当前审批任务转给指定人员
- 挂起:暂停流程实例,待办任务中无此流程实例的任务
- 激活:激活处于挂起的流程实例,待办任务中可以继续操作此流程实例的任务
- 终止:跳过中间任务节点到达结束节点,同时调用配置好的流程终止回调地址
- 流程状态说明:
- 流程进行中:流转中的流程实例
- 流程完成:处理完成的流程实例
- 流程终止:执行终止操作的流程实例
- 流程已挂起:执行挂起操作的流程实例
- 流程已取消:执行取消申请操作的流程实例
我的申请
查看本人提出的所有申请,具备撤回、编辑、取消申请等功能
撤回:未被处理过的流程实例,可以执行撤回操作
编辑:撤回的流程实例可以重新编辑后再提交审批
取消申请:撤回的流程实例可以执行取消申请操作,此流程实例状态为流程已取消
待办任务
查看本人需要处理的任务
已办任务
查看本人处理过的任务
后台使用方式
pom.xml中添加工作流SDK依赖:
<!-- 工作流模块依赖 -->
<dependency>
<groupId>com.sofast.cloud</groupId>
<artifactId>so-fast-flowable-sdk</artifactId>
</dependency>
工作流SDK依赖提供如下接口:
- 流程实例开始接口
- 流程任务驳回后再申请接口
- 流程任务审批同意接口
- 流程任务审批拒绝接口
- 创建流程流水单号接口
例:启动流程实例接口
// 启动新的流程
ProcStartDto procStartDto = new ProcStartDto();
procStartDto.setBusId("业务ID");
procStartDto.setProcSerialNo("流程单号");
procStartDto.setProcDefCode("流程编码");
procStartDto.setComment("备注");
procStartDto.setVariables("流程全局变量");
R<ProcStateDto> procInsStartResult = iFlowableFeign.flowableInstanceStart(procStartDto);
更多详细使用方式可参照流程业务演示功能(ProcBusDemoController)
回调接口说明
流程回调和事件监听回调都是通过HttpClient(暂定,后期会优化)调用业务服务的Rest接口实现的,回调服务需集成Seata。
回调接口如下:
/**
* 流程业务演示远程调用
*
* @author NCIT
* @date 2021-09-09
*/
@Api(tags = "流程业务演示远程调用")
@RestController
public class ProcBusDemoProvider {
@Resource
private IProcBusDemoService iProcBusDemoService;
@ApiOperation(value = "流程业务演示回调接口")
@PostMapping(FlowableFeignConstants.FEIGN_PROC_BUS_DEMO_CALLBACK)
public R<Boolean> procBusDemoCallback(@RequestBody ProcCallBackParamDto param) {
iProcBusDemoService.callBack(param);
return R.ok();
}
}
回调接口参数如下:
/**
* 流程回调参数DTO
*
* @author NCIT
* @date 2021-09-7
**/
@ApiModel(value = "流程回调参数DTO")
@Data
@EqualsAndHashCode(callSuper = false)
public class ProcCallBackParamDto {
@ApiModelProperty(value = "流程定义ID")
private String procDefId;
@ApiModelProperty(value = "流程编码")
private String procDefCode;
@ApiModelProperty(value = "流程实例ID")
private String procInsId;
@ApiModelProperty(value = "业务ID")
private String busId;
@ApiModelProperty(value = "流程实例状态")
private String procInsState;
@ApiModelProperty(value = "流程任务说明类型")
private String processTaskCommentType;
@ApiModelProperty(value = "流程变量")
private Map<String, Object> variables;
}
注意事项
工作流服务内部集成了Seata,用于回调业务接口,所以启动时需要先启动Seata服务,Seata服务端部署请参考分布式事务文档。
工作流服务内部集成了Rabbit MQ,用于发送邮件通知消息,服务启动时需要先启动Rabbit MQ。Rabbit MQ需要安装延迟插件(rabbitmq_delayed_message_exchange)。
如开启邮件通知,需启动通知服务(so-fast-notice),并在邮箱设置中设置邮箱服务器相关配置。
邮件标题和内容需修改Nacos中so-fast-notice-dev.yml配置文件
sofast: #通知配置 notice: #工作流邮件通知 proc: mail: #待办邮件标题 todo-title: 工作流待办通知 #待办邮件内容 todo-content: 您有一条{}待办,流水号:{},请处理! #完成邮件标题 done-title: 工作流完成通知 #完成邮件内容 done-content: 工作流{}已完成,流水号:{},请确认!