Skip to content
当前页

工作流

注意

项目已集成工作流引擎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);
}