| | |
| | | // |
| | | // RepositoryService repositoryService = processEngine.getRepositoryService(); |
| | | // repositoryService.deleteDeployment("1"); |
| | | try { |
| | | // 1. 建立模型 |
| | | BpmnModel model = new BpmnModel(); |
| | | Process process = new Process(); |
| | | model.addProcess(process); |
| | | process.setId(WorkflowDto.DEFAULT_PROCESS + workflowDto.getFlowId()); |
| | | process.setName(workflowDto.getFlowName()); |
| | | process.setDocumentation(workflowDto.getDescrible()); |
| | | //添加流程 |
| | | //开始节点 |
| | | process.addFlowElement(createStartEvent()); |
| | | List<WorkflowStepDto> workflowStepDtos = workflowDto.getWorkflowSteps(); |
| | | for (int i = 0; i < workflowStepDtos.size(); i++) { |
| | | WorkflowStepDto step = workflowStepDtos.get(i); |
| | | //判断是否会签 |
| | | if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(step.getType())) { |
| | | //会签 |
| | | //加入并行网关-分支 |
| | | process.addFlowElement(createParallelGateway("parallelGateway-fork" + i, "parallelGateway-fork" + i)); |
| | | //获取角色下所有用户 |
| | | List<WorkflowStepStaffDto> userList = step.getWorkflowStepStaffs(); |
| | | for (int u = 0; u < userList.size(); u++) { |
| | | //并行网关分支的审核节点 |
| | | process.addFlowElement(createUserTask("userTask" + i + u, "userTask" + i + u, userList.get(u).getStaffId())); |
| | | } |
| | | //并行网关-汇聚 |
| | | process.addFlowElement(createParallelGateway("parallelGateway-join" + i, "parallelGateway-join" + i)); |
| | | |
| | | // 1. 建立模型 |
| | | BpmnModel model = new BpmnModel(); |
| | | Process process = new Process(); |
| | | model.addProcess(process); |
| | | process.setId(WorkflowDto.DEFAULT_PROCESS + workflowDto.getFlowId()); |
| | | process.setName(workflowDto.getFlowName()); |
| | | process.setDocumentation(workflowDto.getDescrible()); |
| | | //添加流程 |
| | | //开始节点 |
| | | process.addFlowElement(createStartEvent()); |
| | | List<WorkflowStepDto> workflowStepDtos = workflowDto.getWorkflowSteps(); |
| | | for (int i = 0; i < workflowStepDtos.size(); i++) { |
| | | WorkflowStepDto step = workflowStepDtos.get(i); |
| | | //判断是否会签 |
| | | if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(step.getType())) { |
| | | //会签 |
| | | //加入并行网关-分支 |
| | | process.addFlowElement(createParallelGateway("parallelGateway-fork" + i, "parallelGateway-fork" + i)); |
| | | //获取角色下所有用户 |
| | | List<WorkflowStepStaffDto> userList = step.getWorkflowStepStaffs(); |
| | | for (int u = 0; u < userList.size(); u++) { |
| | | //并行网关分支的审核节点 |
| | | process.addFlowElement(createUserTask("userTask" + i + u, "userTask" + i + u, userList.get(u).getStaffId())); |
| | | } |
| | | //并行网关-汇聚 |
| | | process.addFlowElement(createParallelGateway("parallelGateway-join" + i, "parallelGateway-join" + i)); |
| | | process.addFlowElement(createUserTask("repulse" + i, "repulse" + i, "${startUserId}")); |
| | | |
| | | process.addFlowElement(createUserTask("repulse" + i, "repulse" + i, "${startUserId}")); |
| | | |
| | | } else { |
| | | //普通流转 |
| | | //审核节点 |
| | | process.addFlowElement(createGroupTask("task" + i, "task" + i, step.getWorkflowStepStaffs().get(0).getStaffId())); |
| | | //回退节点 |
| | | process.addFlowElement(createUserTask("repulse" + i, "repulse" + i, "${startUserId}")); |
| | | } |
| | | } |
| | | //结束节点 |
| | | process.addFlowElement(createEndEvent()); |
| | | |
| | | //连线 |
| | | for (int y = 0; y < workflowStepDtos.size(); y++) { |
| | | WorkflowStepDto step = workflowStepDtos.get(y); |
| | | //是否会签 |
| | | if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(step.getType())) { |
| | | //会签 |
| | | //判断是否第一个节点 |
| | | if (y == 0) { |
| | | //开始节点和并行网关-分支连线 |
| | | process.addFlowElement(createSequenceFlow("startEvent", "parallelGateway-fork" + y, "startEvent-parallelGateway-fork" + y, "")); |
| | | } else { |
| | | //审核节点或者并行网关-汇聚到并行网关-分支 |
| | | //判断上一个节点是否是会签 |
| | | if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(workflowStepDtos.get(y - 1).getType())) { |
| | | process.addFlowElement(createSequenceFlow("parallelGateway-join" + (y - 1), "parallelGateway-fork" + y, "parallelGateway-join-parallelGateway-fork-分支" + y, "")); |
| | | //普通流转 |
| | | //审核节点 |
| | | process.addFlowElement(createGroupTask("task" + i, "task" + i, step.getWorkflowStepStaffs().get(0).getStaffId())); |
| | | //回退节点 |
| | | process.addFlowElement(createUserTask("repulse" + i, "repulse" + i, "${startUserId}")); |
| | | } |
| | | } |
| | | //结束节点 |
| | | process.addFlowElement(createEndEvent()); |
| | | |
| | | //连线 |
| | | for (int y = 0; y < workflowStepDtos.size(); y++) { |
| | | WorkflowStepDto step = workflowStepDtos.get(y); |
| | | //是否会签 |
| | | if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(step.getType())) { |
| | | //会签 |
| | | //判断是否第一个节点 |
| | | if (y == 0) { |
| | | //开始节点和并行网关-分支连线 |
| | | process.addFlowElement(createSequenceFlow("startEvent", "parallelGateway-fork" + y, "startEvent-parallelGateway-fork" + y, "")); |
| | | } else { |
| | | process.addFlowElement(createSequenceFlow("task" + (y - 1), "repulse" + y, "task-repulse" + y, "")); |
| | | //审核节点或者并行网关-汇聚到并行网关-分支 |
| | | //判断上一个节点是否是会签 |
| | | if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(workflowStepDtos.get(y - 1).getType())) { |
| | | process.addFlowElement(createSequenceFlow("parallelGateway-join" + (y - 1), "parallelGateway-fork" + y, "parallelGateway-join-parallelGateway-fork-分支" + y, "")); |
| | | } else { |
| | | process.addFlowElement(createSequenceFlow("task" + (y - 1), "repulse" + y, "task-repulse" + y, "")); |
| | | } |
| | | } |
| | | } |
| | | //并行网关-分支和会签用户连线,会签用户和并行网关-汇聚连线 |
| | | List<WorkflowStepStaffDto> userList = step.getWorkflowStepStaffs(); |
| | | for (int u = 0; u < userList.size(); u++) { |
| | | process.addFlowElement(createSequenceFlow("parallelGateway-fork" + y, "userTask" + y + u, "parallelGateway-fork-userTask" + y + u, "")); |
| | | process.addFlowElement(createSequenceFlow("userTask" + y + u, "parallelGateway-join" + y, "userTask-parallelGateway-join", "")); |
| | | if (u == (userList.size() - 1)) { |
| | | process.addFlowElement(createSequenceFlow("parallelGateway-join" + y, "repulse" + y, "parallelGateway-join-repulse", "${flag=='false'}")); |
| | | process.addFlowElement(createSequenceFlow("repulse" + y, "task" + getNormal(workflowStepDtos, y), "repulse-task" + y, "")); |
| | | //并行网关-分支和会签用户连线,会签用户和并行网关-汇聚连线 |
| | | List<WorkflowStepStaffDto> userList = step.getWorkflowStepStaffs(); |
| | | for (int u = 0; u < userList.size(); u++) { |
| | | process.addFlowElement(createSequenceFlow("parallelGateway-fork" + y, "userTask" + y + u, "parallelGateway-fork-userTask" + y + u, "")); |
| | | process.addFlowElement(createSequenceFlow("userTask" + y + u, "parallelGateway-join" + y, "userTask-parallelGateway-join", "")); |
| | | if (u == (userList.size() - 1)) { |
| | | process.addFlowElement(createSequenceFlow("parallelGateway-join" + y, "repulse" + y, "parallelGateway-join-repulse", "${flag=='false'}")); |
| | | process.addFlowElement(createSequenceFlow("repulse" + y, "task" + getNormal(workflowStepDtos, y), "repulse-task" + y, "")); |
| | | } |
| | | } |
| | | } |
| | | //最后一个节点 并行网关-汇聚到结束节点 |
| | | //最后一个节点 并行网关-汇聚到结束节点 |
| | | // if (y == (userList.size() - 1)) { |
| | | // process.addFlowElement(createSequenceFlow("parallelGateway-join" + y, "endEvent", "parallelGateway-join-endEvent", "")); |
| | | // } |
| | | } else { |
| | | //普通流转 |
| | | //第一个节点 |
| | | if (y == 0) { |
| | | //开始节点和审核节点1 |
| | | process.addFlowElement(createSequenceFlow("startEvent", "task" + y, "startEvent-task" + y, "")); |
| | | } else { |
| | | //判断上一个节点是否会签 |
| | | if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(workflowStepDtos.get(y - 1).getType())) { |
| | | //会签 |
| | | //并行网关-汇聚到审核节点 |
| | | process.addFlowElement(createSequenceFlow("parallelGateway-join" + (y - 1), "task" + y, "parallelGateway-join-task" + y, "")); |
| | | //普通流转 |
| | | //第一个节点 |
| | | if (y == 0) { |
| | | //开始节点和审核节点1 |
| | | process.addFlowElement(createSequenceFlow("startEvent", "task" + y, "startEvent-task" + y, "")); |
| | | } else { |
| | | //普通 |
| | | process.addFlowElement(createSequenceFlow("task" + (y - 1), "task" + y, "task" + (y - 1) + "task" + y, "${flag=='true'}")); |
| | | //判断上一个节点是否会签 |
| | | if (WorkflowStepDto.TYPE_COUNTERSIGN.equals(workflowStepDtos.get(y - 1).getType())) { |
| | | //会签 |
| | | //并行网关-汇聚到审核节点 |
| | | process.addFlowElement(createSequenceFlow("parallelGateway-join" + (y - 1), "task" + y, "parallelGateway-join-task" + y, "")); |
| | | } else { |
| | | //普通 |
| | | process.addFlowElement(createSequenceFlow("task" + (y - 1), "task" + y, "task" + (y - 1) + "task" + y, "${flag=='true'}")); |
| | | } |
| | | } |
| | | //是否最后一个节点 |
| | | if (y == (workflowStepDtos.size() - 1)) { |
| | | //审核节点到结束节点 |
| | | process.addFlowElement(createSequenceFlow("task" + y, "endEvent", "task" + y + "endEvent", "${flag=='true'}")); |
| | | } |
| | | //审核节点到回退节点 |
| | | process.addFlowElement(createSequenceFlow("task" + y, "repulse" + y, "task-repulse" + y, "${flag=='false'}")); |
| | | process.addFlowElement(createSequenceFlow("repulse" + y, "task" + y, "repulse-task" + y, "")); |
| | | } |
| | | //是否最后一个节点 |
| | | if (y == (workflowStepDtos.size() - 1)) { |
| | | //审核节点到结束节点 |
| | | process.addFlowElement(createSequenceFlow("task" + y, "endEvent", "task" + y + "endEvent", "${flag=='true'}")); |
| | | } |
| | | //审核节点到回退节点 |
| | | process.addFlowElement(createSequenceFlow("task" + y, "repulse" + y, "task-repulse" + y, "${flag=='false'}")); |
| | | process.addFlowElement(createSequenceFlow("repulse" + y, "task" + y, "repulse-task" + y, "")); |
| | | } |
| | | } |
| | | |
| | | // 2. 生成的图形信息 |
| | | new BpmnAutoLayout(model).execute(); |
| | | // 2. 生成的图形信息 |
| | | new BpmnAutoLayout(model).execute(); |
| | | |
| | | // 3. 部署流程 |
| | | Deployment deployment = processEngine.getRepositoryService().createDeployment().addBpmnModel(process.getId() + ".bpmn", model).name(process.getId() + "_deployment").deploy(); |
| | | workflowDto.setProcessDefinitionKey(deployment.getId()); |
| | | // // 4. 启动一个流程实例 |
| | | // 3. 部署流程 |
| | | Deployment deployment = processEngine.getRepositoryService().createDeployment().addBpmnModel(process.getId() + ".bpmn", model).name(process.getId() + "_deployment").deploy(); |
| | | workflowDto.setProcessDefinitionKey(deployment.getId()); |
| | | // // 4. 启动一个流程实例 |
| | | // ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(process.getId()); |
| | | // |
| | | // // 5. 获取流程任务 |
| | |
| | | // }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // } |
| | | } catch (Exception e) { |
| | | logger.error("部署工作流失败", e); |
| | | } |
| | | |
| | | logger.debug("工作流部署完成"); |
| | | return workflowDto; |
| | | } |
| | | |