| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Result projectSetProcess(ProjectProcessForm form) { |
| | | // 查询该项目是否已经绑定过流程了,检查绑定的流程是否在运行,在运行就删了 |
| | | ProjectProcess pp = new LambdaQueryChainWrapper<>(baseMapper) |
| | | .eq(ProjectProcess::getProjectId, form.getProjectId()) |
| | | .one(); |
| | | if (Objects.nonNull(pp)) { |
| | | // TODO 处理之前绑定过的流程数据 |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .eq(ProjectProcess::getProjectId, form.getProjectId()) |
| | | .set(ProjectProcess::getProcessDefId, form.getProcessDefId()) |
| | | .update(); |
| | | } else { |
| | | ProjectProcess entity = ProjectProcessForm.getEntityByForm(form, null); |
| | | baseMapper.insert(entity); |
| | | if (Objects.isNull(pp)) { |
| | | throw new RuntimeException("该项目未绑定流程"); |
| | | } |
| | | if (Objects.nonNull(pp.getProcessInsId())) { |
| | | HistoricProcessInstance historicProcessInstance = |
| | | historyService.createHistoricProcessInstanceQuery().processInstanceId(pp.getProcessInsId()).singleResult(); |
| | | // 删除之前流程的数据 |
| | | if (historicProcessInstance.getEndTime() != null) { |
| | | historyService.deleteHistoricProcessInstance(historicProcessInstance.getId()); |
| | | } else { |
| | | // 删除流程实例 |
| | | runtimeService.deleteProcessInstance(pp.getProcessInsId(), ""); |
| | | // 删除历史流程实例 |
| | | historyService.deleteHistoricProcessInstance(pp.getProcessInsId()); |
| | | } |
| | | } |
| | | String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId()); |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .eq(ProjectProcess::getProjectId, form.getProjectId()) |
| | | .set(ProjectProcess::getProcessDefId, form.getProcessDefId()) |
| | | .set(ProjectProcess::getProcessInsId, processInsId) |
| | | .update(); |
| | | return Result.ok("流程变更成功"); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Result startProcess(String projectId, String processDefId) { |
| | | public Result startProcess(Long projectId, String processDefId) { |
| | | String processInsId = this.startPro(projectId, processDefId); |
| | | ProjectProcess entity = new ProjectProcess(); |
| | | entity.setProjectId(projectId); |
| | | entity.setProcessDefId(processDefId); |
| | | entity.setProcessInsId(processInsId); |
| | | baseMapper.insert(entity); |
| | | return Result.ok("流程启动成功"); |
| | | } |
| | | |
| | | /** |
| | | * 启动流程 |
| | | * |
| | | * @param projectId |
| | | * @param processDefId |
| | | * @return |
| | | */ |
| | | private String startPro(Long projectId, String processDefId) { |
| | | ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefId) |
| | | .latestVersion().singleResult(); |
| | | if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) { |
| | | return Result.error("该流程已被挂起,请先激活流程"); |
| | | throw new RuntimeException("该流程已被挂起,请先激活流程"); |
| | | } |
| | | Map<String, Object> variables = new HashMap<>(2); |
| | | // 设置流程发起人Id到流程中 |
| | | SysUser sysUser = SecurityUtils.getLoginUser().getUser(); |
| | | identityService.setAuthenticatedUserId(sysUser.getUserId().toString()); |
| | | variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId()); |
| | | ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId, variables); |
| | | // // 流程发起时 跳过发起人节点 |
| | | // // 给第一步申请人节点设置任务执行人和意见 |
| | | // Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); |
| | | // if (Objects.nonNull(task)) { |
| | | // taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getNickName() + "发起流程申请"); |
| | | // taskService.complete(task.getId(), variables); |
| | | // } |
| | | // 项目流程关联流程实例id |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .eq(ProjectProcess::getProjectId, projectId) |
| | | .eq(ProjectProcess::getProcessDefId, processDefId) |
| | | .set(ProjectProcess::getProcessInsId, processInstance.getProcessInstanceId()) |
| | | .update(); |
| | | return Result.ok("流程启动成功"); |
| | | ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId + "", variables); |
| | | return processInstance.getId(); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param identityLinkInfos 如果是已完成的任务,用这个去取关联的用户/用户组 |
| | | */ |
| | | private void setPromoterAndHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) { |
| | | // TODO 发起人是否应为上一节点的处理人 |
| | | // 流程发起人信息 |
| | | HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() |
| | | .processInstanceId(taskVO.getProcessInsId()) |