camunda工作流

一:先画流程图,如下

在这里插入图片描述
流程图详解如下:
在这里插入图片描述

子流程详解如下:
在这里插入图片描述
申请人详解:
在这里插入图片描述

专业核查详解:
在这里插入图片描述
核查不通过详解:
在这里插入图片描述
核查通过:
在这里插入图片描述

二:代码实现

1.添加依赖

        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
            <version>7.15.1</version>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter</artifactId>
            <version>7.15.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>mybatis</artifactId>
                    <groupId>org.mybatis</groupId>
                </exclusion>
            </exclusions>
        </dependency>

2.yml配置

# BPM========================================================================
camunda:
  bpm:
    process-engine-name: route-bpm
    auto-deployment-enabled: false
    admin-user:
      id: demo1		#登陆用户
      password: demo1	#密码
    database:
      schema-update: true	#true:数据库添加bpm表,第一次添加表即可,后续改成false
    job-execution:
      enabled: false
    metrics:
      enabled: false
      db-reporter-activate: false

3.部署刚才画的流程图

    @GetMapping("/addWorkFlow")//把流程图放在resource/bpm文件下
    public Result addWorkFlow1() {
        //读取流程文件,获取文件输入流
        String fileName = "diagram_2_12_31.bpmn";
        InputStream inputStream = BpmController.class.getResourceAsStream("/bpm/" + fileName);
        //获取Deployment对象
        Deployment deployment = repositoryService.createDeployment()
                .name("diagram_2_12_31")
                .addInputStream(fileName, inputStream)
                .deploy();
        if (deployment != null) {
            System.out.println("部署id:" + deployment.getId());
        }
        return Result.success();
    }

4.业务可以发起流程了

三:api调用

1.启动流程

@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
//开始发起流程。    
//businessKey:代表每个流程的id,如:modelRecordsKey-1
//variables:存流程变量,如:
String businessKey="modelRecordsKey-1";
ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();//查询该条流程图是否存在
if (process != null) {
     throw new ParamsException("流程已提交,可返回主页");
 }
Map<String, Object> variables = new HashMap<>();
variables.put("applyUser","张三");
variables.put("platformList", new arrayList());//集合代表子流程集合
ProcessInstance processInstance = this.runtimeService.startProcessInstanceByKey("modelRecordsKey", businessKey, variables)
//查询发起的子流程详情(这个集合数量等于platformList的数量)
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).list();
variables.clear();
for (int i = 0; i < taskList.size(); i++) {
    //每个子流程对应的审核用户
    taskService.setVariable(taskList.get(i).getId(),"accountList", new arrayList());
    //提交即可,每个子流程都会有自己的待办(用的是并行会签)
    taskService.complete(taskList.get(i).getId());
}

2.分页查询待办

 //查询待办总数
long count = this.taskService.createTaskQuery().taskAssignee("当前登陆人").count();
if (count == 0) {
    return ;
}
//获取个人代办
int page = (current - 1) * pageSize;
int limit = pageSize;
List<Task> taskUserList = this.taskService.createTaskQuery().taskAssignee(assignee).orderByTaskCreateTime().desc().listPage(page, limit);

2.分页查询已办

long count = historyService.createHistoricTaskInstanceQuery().taskAssignee(assignee).taskDefinitionKey("Activity_04t7pw1").finished().taskDeleteReason("completed").count();
if (count == 0) {
    return PageUtil.getPage(current, pageSize, 0, null);
}
// 3、查询记录
int page = (current - 1) * pageSize;
int limit = pageSize;
List<HistoricTaskInstance> historyList = historyService.createHistoricTaskInstanceQuery()
        .taskAssignee("当前登陆人")	//当前登陆人
        .taskDefinitionKey("Activity_04t7pw1") //流程id
        .finished()
        .taskDeleteReason("completed")//当前人审核的已办
        .orderByHistoricTaskInstanceEndTime().desc()
        .listPage(page, limit);

4.审核人提交

Map<String,Object> map=new HashMap<>();
map.put("checkYes",type);//审核流程变量
map.put("noCheck","0");//默认审核通过
if(type.equals("2")){
    map.put("noCheck","1");//审核不通过
}
this.taskService.complete(taskId,map);//提交即可。taskId代表待办任务的id

5.其他api

//根据任务id查询该条流程实例。对象有这个流程id和key和名称
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
 //删除代办(是否删除已办需要尝试)
historyService.deleteHistoricTaskInstance(task.getId());
//删除流程图(根据act_re_deployment表id删除流程图)
this.repositoryService.deleteDeployment(deploymentId, true);
//查询单个任务(act_ru_task代办任务表)
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
//流程中再添加子流程
ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
List<String> accountList=new ArrayList<>();
runtimeService.createProcessInstanceModification(process.getProcessInstanceId())
        .startBeforeActivity("Activity_1ufn5b4")//注意是:子流程id
        .setVariableLocal("applyUser","q")//添加变量,全局都会存在,且不会被覆盖
        .setAnnotation("申请人").execute();
List<Task> taskList = taskService.createTaskQuery().processInstanceId(process.getProcessInstanceId())
        .taskAssignee("q").taskName("申请人").orderByTaskCreateTime().desc().list();//查出刚新建的子流程的所有任务
Task task = taskList.get(0);//取出最后一个任务
Map<String, Object> variables = new HashMap<>();
variables.put("accountList",accountList);
variables.put("platform",platform);
taskService.complete(task.getId(),variables);//申请人提交流程

四:流程图页面地址

http://localhost:8088/camunda/app/welcome/default/#!/login

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值