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