工作流
注意
项目已集成工作流引擎flowable7,由于flowable7移除了流程配置相关功能,可以下载flowable6的流程配置工具先进行流程配置。
将通过flowable6的流程配置工具配置好流程后,将文件保存为XXX.bpmn20.xml格式。
提示
- 单体服务方式启动,将XXX.bpmn20.xml文件放入项目的 mf-start-boot/src/main/resources/processes目录下。
- 微服务方式启动,将XXX.bpmn20.xml文件放入项目的 mf-start-workflow/src/main/resources/processes目录下。
审核类型
审核通过("approved")
审核拒绝("rejected")
暂停("suspended")
终止("terminated")
取消("canceled")例如:
- 审核通过,配置流条件使用
${auditType=='approved'} - 审核不通过,配置流条件使用
${auditType=='rejected'}
审核用户
流程配置中设置用户、候选用户,这里设置的用户系统账号。
也可以设置候选组,这里设置的候选组为组织固定编码。界面上对应组织编码。
启动流程
开启审批需要调用remoteWorkflowService.startProcess方法,进行流程启动。
- 需要设置流程定义的key,在FlowKey枚举中定义,保证唯一。
- 设置业务id,为业务表的id,用于在执行监听器中回调业务模块时能够识别,保证唯一。
- 设置前缀,为业务服务的接口前缀,用于在执行监听器中判断回调哪个服务。
- 设置回调,为业务服务的Feign接口,用于在执行监听器中回调业务模块。
代码样例如下:
javascript
private void startProcess(ScreenResource screenResource) {
Result<String> result = remoteWorkflowService.startProcess(RPCConstants.INNER
, new FlowableParam<String>().setKey(FlowKey.大屏发布.toString())
.setId(screenResource.getId())
.setPrefix("screenResource")
.setCallback("cn.com.mfish.common.nocode.api.remote.RemoteNocodeService"));
if (!result.isSuccess()) {
throw new MyRuntimeException(result.getMsg());
}
}撤回流程
提交审批后,用户可以撤回审批。通过remoteWorkflowService.delProcessByBusinessKey方法,删除流程实例。
代码样例如下:
javascript
remoteWorkflowService.delProcessByBusinessKey(RPCConstants.INNER, screenResource.getId(), "用户撤回大屏资源发布");执行监听器
审核完成后可以配置执行监听器,用于在审核完成后回调执行一些业务模块业务逻辑。
执行监听器中配置cn.com.mfish.workflow.handler.CompleteCallbackHandler
例如:
- 审核通过后,调用业务模块的方法,将业务状态更新为已审核通过。
- 审核拒绝后,调用业务模块的方法,将业务状态更新为已审核拒绝。
- 审核取消后,调用业务模块的方法,将业务状态更新为已审核取消。
如果业务模块在审核完成后,需要更新业务表的状态,需要在Controller层增加三个方法,分别对应审核通过、拒绝、取消。
接口命名规则:
- 审核通过方法:/approved/{id}
- 审核拒绝方法:/rejected/{id}
- 审核取消方法:/canceled/{id}
当审核通过、拒绝或取消时,会触发执行监听器回调业务模块的方法/approved/{id},/rejected/{id},/canceled/{id},自己在Controller层实现这三个方法,调用业务模块的方法更新业务状态。
实现Feign接口
框架采用微服务、单体一体化架构,所有回调请求采用Feign接口方式。 需要先实现RemoteAuditApi接口,定义回调方法。然后Controller层实现这三个方法,调用业务模块的方法更新业务状态。
javascript
@FeignClient(contextId = "RemoteXXXService", value = ServiceConstants.XXX_SERVICE, fallbackFactory = RemoteXXXFallBack.class)
public interface RemoteXXXService extends RemoteAuditApi<String> {
}Controller代码样例如下
javascript
@PostMapping("/approved/{id}")
public Result<String> approved(@PathVariable String id, @RequestBody WorkflowCompleteResult result) {
return screenResourceService.audit(id, 1, result);
}
@PostMapping("/rejected/{id}")
public Result<String> rejected(@PathVariable String id, @RequestBody WorkflowCompleteResult result) {
return screenResourceService.audit(id, 2, result);
}
@PostMapping("/canceled/{id}")
public Result<String> canceled(@PathVariable String id, @RequestBody WorkflowCompleteResult result) {
return screenResourceService.audit(id, null, result);
}
摸鱼低代码 mfish-nocode