https://camunda.com/download/...java
这里咱们建立一个简单的流程,该流程中只有一个审核节点,而且不须要判断审核是赞成仍是拒绝。而且在审核节点咱们设置了一个属性,将该节点的任务归属到camunda-admin
这个组。app
将咱们绘制好的bpmn
文件拷贝到上一文建立的项目的resources
目录下,这里咱们在resources
下建立一个子目录bpmn
用于放置咱们的流程图。ide
/** * 发起流程 * * @param param ProcessStartParam * @return ResultBean */ @ApiOperation("发起流程") @PostMapping("/process/start") public ResultBean<?> startProcess(@Valid @RequestBody ProcessStartParam param) { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(param.getProcessDefinitionId()); Map<String, Object> map = new HashMap<>(); map.put("processDefinitionId", processInstance.getProcessDefinitionId()); map.put("processInstanceId", processInstance.getProcessInstanceId()); map.put("businessKey", processInstance.getBusinessKey()); map.put("caseInstanceId", processInstance.getCaseInstanceId()); map.put("rootProcessInstanceId", processInstance.getRootProcessInstanceId()); return new ResultBean<>(HttpServletResponse.SC_OK, "SUCCESS", map); }
/** * 本身的任务列表 * * @param assignee 任务所属者 * @return ResultBean */ @ApiOperation("查询本身的任务列表") @GetMapping("/self/tasks") public ResultBean<?> selfTaskList(@RequestParam("assignee") String assignee) { List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list(); if (tasks != null && !tasks.isEmpty()) { List<Map<String, Object>> resultList = new ArrayList<>(tasks.size()); tasks.forEach(task -> { Map<String, Object> map = new HashMap<>(3); map.put("processDefinitionId", task.getProcessDefinitionId()); map.put("processInstanceId", task.getProcessInstanceId()); map.put("taskId", task.getId()); resultList.add(map); }); return new ResultBean<>(HttpServletResponse.SC_OK, "SUCCESS", resultList); } else { return new ResultBean<>(HttpServletResponse.SC_OK, "SUCCESS", "未查询到任务列表"); } }
/** * 可用任务列表 * * @param username 用户名称 * @return ResultBean */ @ApiOperation("可用任务列表") @GetMapping("/available/tasks") public ResultBean<?> availableTaskList(@RequestParam("username") String username) { //一、根据用户名查询所在组 List<Group> list = identityService.createGroupQuery().groupMember(username).list(); if (list != null && !list.isEmpty()) { //二、获取全部组名 //这里我配置错了,错把id当name了。 List<String> collect = list.stream().map(Group::getId).collect(Collectors.toList()); //三、根据组名查询全部任务 List<Task> tasks = taskService.createTaskQuery().taskCandidateGroupIn(collect).list(); if (tasks != null && !tasks.isEmpty()) { List<Map<String, Object>> resultList = new ArrayList<>(tasks.size()); tasks.forEach(task -> { Map<String, Object> map = new HashMap<>(3); map.put("processDefinitionId", task.getProcessDefinitionId()); map.put("processInstanceId", task.getProcessInstanceId()); map.put("taskId", task.getId()); resultList.add(map); }); return new ResultBean<>(HttpServletResponse.SC_OK, "SUCCESS", resultList); } else { return new ResultBean<>(HttpServletResponse.SC_OK, "SUCCESS", "未查询到任务列表"); } } else { return new ResultBean<>(HttpServletResponse.SC_NOT_FOUND, "ERROR", "未查询到所属组"); } }
/** * 任务领取 * * @param param TaskClaimParam * @return ResultBean */ @ApiOperation("任务领取") @PostMapping("/claim/task") public ResultBean<String> claimTask(@Valid @RequestBody TaskClaimParam param) { //一、查询组名 List<Group> list = identityService.createGroupQuery().groupMember(param.getUsername()).list(); if (list != null && !list.isEmpty()) { List<String> collect = list.stream().map(Group::getId).collect(Collectors.toList()); //二、查询任务 Task task = taskService.createTaskQuery().taskCandidateGroupIn(collect).processInstanceId(param.getProcessInstanceId()).singleResult(); if (task != null) { //三、判断该任务是否被领取 if (StringUtils.isBlank(task.getAssignee())) { taskService.claim(task.getId(), param.getUsername()); return new ResultBean<>(HttpServletResponse.SC_OK, "SUCCESS", "任务领取成功"); } else { return new ResultBean<>(HttpServletResponse.SC_FOUND, "SUCCESS", "任务已被他人领取"); } } else { return new ResultBean<>(HttpServletResponse.SC_NOT_FOUND, "ERROR", "未查询到任务"); } } else { return new ResultBean<>(HttpServletResponse.SC_NOT_FOUND, "ERROR", "未查询到所属组"); } }
/** * 任务审核 * * @param param TaskReviewParam * @return ResultBean */ @ApiOperation("任务审核") @PostMapping("/review/task") public ResultBean<String> review(@Valid @RequestBody TaskReviewParam param) { //一、查询任务 Task task = taskService.createTaskQuery().taskId(param.getTaskId()).taskAssignee(param.getUsername()).singleResult(); if (task != null) { taskService.complete(param.getTaskId()); return new ResultBean<>(HttpServletResponse.SC_OK, "SUCCESS", "任务审核成功"); } else { return new ResultBean<>(HttpServletResponse.SC_NOT_FOUND, "ERROR", "未查询到任务"); } }
/** * 流程历史记录 * * @param processInstanceId 流程实例id * @return ResultBean */ @ApiOperation("流程历史记录") @GetMapping("/histories") public ResultBean<?> processHistories(@RequestParam("processInstanceId") String processInstanceId) { List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).list(); if (list != null && !list.isEmpty()) { return new ResultBean<>(HttpServletResponse.SC_OK, "SUCCCESS", list); } else { return new ResultBean<>(HttpServletResponse.SC_NOT_FOUND, "ERROR", "未查询到流程历史"); } }
懒得写
camunda提供了不少种任务,也提供了很牛X的功能,一切尽在官网,去吧皮卡丘~~~
https://camunda.org