From a208a3bed12248f0d7258752a2759f104d061e54 Mon Sep 17 00:00:00 2001 From: CMM <2198256324@qq.com> Date: Thu, 23 Feb 2023 09:13:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B3=A8=E9=87=8A=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pmapi/todocenter/manage/TodoCenterManage.java | 470 +++------------------ 1 file changed, 53 insertions(+), 417 deletions(-) diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java index c48e2e6..46fd699 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java @@ -43,8 +43,10 @@ import com.wflow.workflow.service.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.assertj.core.util.Lists; +import org.flowable.bpmn.model.*; import org.flowable.engine.*; import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.runtime.ActivityInstance; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletResponse; @@ -55,6 +57,7 @@ import java.util.stream.Collectors; import static cn.hutool.core.collection.CollUtil.isEmpty; import static cn.hutool.core.collection.CollUtil.isNotEmpty; import static com.ningdatech.pmapi.todocenter.constant.WorkNotice.*; +import static com.wflow.workflow.task.TriggerServiceTask.runtimeService; /** * @author ZPF @@ -65,8 +68,6 @@ import static com.ningdatech.pmapi.todocenter.constant.WorkNotice.*; @Slf4j public class TodoCenterManage { - private final TaskService taskService; - private final ProcessTaskService processTaskService; private final HistoryService historyService; private final IUserInfoService userInfoService; @@ -283,7 +284,7 @@ public class TodoCenterManage { processTaskService.handleTask(param, userId); WorkNoticeInfo rejectWorkNoticeInfo = getSendWorkNoticeInfo(startUserInfo); String rejectMsg = String.format(REJECT_MSG_TEMPLATE, projectName, processDefinitionName); - zwddClient.sendWorkNotice(rejectWorkNoticeInfo.getReceiverUserId(),rejectWorkNoticeInfo.getBizMsgId(),rejectMsg); + // zwddClient.sendWorkNotice(rejectWorkNoticeInfo.getReceiverUserId(),rejectWorkNoticeInfo.getBizMsgId(),rejectMsg); // 更新项目状态和流程状态 updateRejectProjectStatus(userId, declaredProject); break; @@ -299,7 +300,7 @@ public class TodoCenterManage { // 给项目创建人、流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被退回,请及时处理。 WorkNoticeInfo backWorkNoticeInfo = getSendWorkNoticeInfo(startUserInfo); String backMsg = String.format(BACK_MSG_TEMPLATE, projectName, processDefinitionName); - zwddClient.sendWorkNotice(backWorkNoticeInfo.getReceiverUserId(),backWorkNoticeInfo.getBizMsgId(),backMsg); + // zwddClient.sendWorkNotice(backWorkNoticeInfo.getReceiverUserId(),backWorkNoticeInfo.getBizMsgId(),backMsg); break; // 撤回(流程发起人和当前流程审核人的前一个审核人操作) case WITHDRAW: @@ -340,51 +341,12 @@ public class TodoCenterManage { processTaskService.handleTask(param, userId); } } + break; default: throw new IllegalStateException("Unexpected value: " + param.getAction()); } } - /** - * 审批任务:驳回 - * - * @param task 当前任务 - * @param userId - * @param param 参数 - */ - //private void doReject(Task task, Long userId, ReqProcessHandlerDTO param) { - // // 获取当前申报项目 - // Project declaredProject = projectService.getOne(Wrappers.lambdaQuery(Project.class) - // .eq(Project::getInstCode, task.getProcessInstanceId()) - // .eq(Project::getId,param.getProjectId())); - // String projectName = declaredProject.getProjectName(); - // - // Map var = new HashMap<>(16); - // var.put("approve_" + task.getId(), param.getAction()); - // // 保存审核意见 - // if (hasComment(param.getAuditInfo())) { - // // 执行自定义的保存评论的功能 - // managementService.executeCommand(new SaveCommentCmd(param.getTaskId(), param.getInstanceId(), - // String.valueOf(userId), JSONObject.toJSONString(param.getAuditInfo()))); - // } - // // 获取bpm对象 - // BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); - // // 获取根节点即流程发起节点 - // FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root"); - // // TODO 中止流程并使项目进入对应状态,给项目创建人、 - // // 流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被驳回,请及时处理。 - // String startUserId = getRootUserId(rootNode, task.getProcessInstanceId()); - // // 获取浙政钉用户ID - // UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(startUserId)); - // WorkNoticeInfo sendWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo); - // WflowModels wflowModels = getLastWflowModels(task); - // String formName = wflowModels.getFormName(); - // String msg = String.format(REJECT_MSG_TEMPLATE, projectName, formName); - // zwddClient.sendWorkNotice(sendWorkNoticeInfo.getReceiverUserId(),sendWorkNoticeInfo.getBizMsgId(),msg); - // // 更新项目状态和流程状态 - // updateRejectProjectStatus(userId, declaredProject); - // taskService.complete(param.getTaskId(), var); - //} /** * 当为驳回操作时,更新项目表中的项目状态 @@ -414,152 +376,6 @@ public class TodoCenterManage { projectService.updateById(declaredProject); } - /** - * 获取最新版本的流程配置 - * - * @param task 当前任务 - * @return com.wflow.bean.entity.WflowModels - * @author CMM - * @since 2023/02/01 17:30 - */ - //private WflowModels getLastWflowModels(Task task) { - // WflowModels wflowModels = processModelService.getOne( - // Wrappers.lambdaQuery(WflowModels.class).eq(WflowModels::getProcessDefId, task.getProcessDefinitionId())); - // if (ObjectUtil.isNull(wflowModels)) { - // log.warn("流程{}不存在", wflowModels.getFormId()); - // throw new BusinessException("不存在该表单"); - // } - // return wflowModels; - //} - - /** - * 审批任务:盖章并通过 - * - * @param task 当前任务 - * @param userId - * @param param 参数 - */ - //private void doSealPass(Task task, Long userId, ReqProcessHandlerDTO param) { - // String processInstanceId = task.getProcessInstanceId(); - // // 获取当前申报项目 - // Project declaredProject = projectService - // .getOne(Wrappers.lambdaQuery(Project.class).eq(Project::getInstCode, task.getProcessInstanceId())); - // String projectName = declaredProject.getProjectName(); - // - // Map var = new HashMap<>(16); - // var.put("approve_" + task.getId(), param.getAction()); - // // 保存审核意见 - // if (hasComment(param.getAuditInfo())) { - // // 执行自定义的保存评论的功能 - // managementService.executeCommand(new SaveCommentCmd(param.getTaskId(), param.getInstanceId(), - // String.valueOf(userId), JSONObject.toJSONString(param.getAuditInfo()))); - // } - // // TODO 判断项目申报单位级别,区县单位申报有上级主管单位意见栏,市级单位没有 - // - // // TODO 市级单位:为大数据局;区县单位:为大数据中心(根据附件区分?) - // taskService.complete(param.getTaskId(), var); - //} - - /** - * 审批任务:通过 - * @param task 当前任务 - * @param userId - * @param param 参数 - */ - //private void doPass(Task task, Long userId, ReqProcessHandlerDTO param) { - // String processInstanceId = task.getProcessInstanceId(); - // // 获取当前申报项目 - // Project declaredProject = projectService.getOne(Wrappers.lambdaQuery(Project.class) - // .eq(Project::getInstCode, task.getProcessInstanceId()) - // .eq(Project::getId,param.getProjectId())); - // String projectName = declaredProject.getProjectName(); - // - // Map var = new HashMap<>(16); - // var.put("approve_" + task.getId(), param.getAction()); - // // 保存审核意见 - // if (hasComment(param.getAuditInfo())) { - // // 执行自定义的保存评论的功能 - // managementService.executeCommand(new SaveCommentCmd(param.getTaskId(), param.getInstanceId(), - // String.valueOf(userId), JSONObject.toJSONString(param.getAuditInfo()))); - // } - // // 如果流程状态是被退回状态,流程通过后,进入下一个审核人,当前通过审核人一定不是最后一个审核人(下一个审核人至多是最后一个),更新流程状态为审核中 - // if (ProcessStatusEnum.BE_BACKED.getCode().equals(declaredProject.getProcessStatus())) { - // // 通过该任务,流程到下一审核人处 - // taskService.complete(param.getTaskId(), var); - // // 更新流程状态为审核中 - // declaredProject.setProcessStatus(ProcessStatusEnum.UNDER_REVIEW.getCode()); - // declaredProject.setUpdateOn(LocalDateTime.now()); - // declaredProject.setUpdateBy(userId); - // projectService.updateById(declaredProject); - // // 获取此时待审核任务 - // Task currentTask = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult(); - // // 获取审核人信息,向审核人发送工作通知 - // String currentUserId = currentTask.getAssignee(); - // UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(currentUserId)); - // // 获取发送浙政钉工作通知必要信息 - // WorkNoticeInfo sendWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo); - // String msg = String.format(PASS_MSG_TEMPLATE, null, projectName); - // zwddClient.sendWorkNotice(sendWorkNoticeInfo.getReceiverUserId(),sendWorkNoticeInfo.getBizMsgId(),msg); - // return; - // } - // // 获取bpm对象 - // BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); - // // 若不是被退回项目,传节点定义key 获取当前节点 - // FlowNode currentNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); - // // TODO 若当前流程是预审流程,需要在提交预审申报的时候,调用状态机判断申报后的项目状态, - // // 若是省级部门联审中,要对接外部接口,获取省级部门联审的结果,更新项目状态(预审申报提交的时候处理) - // // 需要先通过后才能有下一个节点的信息 - // taskService.complete(param.getTaskId(), var); - // // 获取当前项目状态 - // Integer status = declaredProject.getStatus(); - // // 若当前登录用户是最后一个审批人,需更新流程状态为审核完成,项目状态到下个状态 - // // 并向流程发起人发送浙政钉工作通知:【项目名称】已通过【流程名称】,请及时开始下一步操作。 - // HistoricProcessInstance instance = historyService - // .createHistoricProcessInstanceQuery() - // .processInstanceId(processInstanceId) - // .singleResult(); - // if (HisProInsEndActId.END.equals(instance.getEndActivityId())) { - // switch (Objects.requireNonNull(ProjectStatusEnum.getValue(status))) { - // // 当前项目状态是单位内部审核中 - // case UNDER_INTERNAL_AUDIT: - // // 当前项目状态是预审中 - // case PRE_APPLYING: - // // 当前项目状态是部门联审中 - // case DEPARTMENT_JOINT_REVIEW: - // // 当前项目状态是方案评审中 - // case SCHEME_UNDER_REVIEW: - // // 当前项目状态是终验审核中 - // case FINAL_ACCEPTANCE_IS_UNDER_REVIEW: - // updatePassProjectStatus(userId, declaredProject); - // break; - // default: - // throw new IllegalStateException("Unexpected value: " + status); - // } - // } - // // 若有下一个审核人(当前节点的用户), - // // 向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。 - // String nextUserId = getNextUserId(currentNode, processInstanceId); - // if (Objects.nonNull(nextUserId)) { - // // 获取浙政钉用户ID - // UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(nextUserId)); - // WorkNoticeInfo sendWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo); - // String msg = String.format(PASS_MSG_TEMPLATE, sendWorkNoticeInfo.getOrganizationName(), projectName); - // zwddClient.sendWorkNotice(sendWorkNoticeInfo.getReceiverUserId(),sendWorkNoticeInfo.getBizMsgId(),msg); - // } else { - // // 若没有,向发起人发送浙政钉工作通知:【项目名称】已通过【流程名称】,请及时开始下一步操作。 - // // TODO 向其发送浙政钉工作通知 获取根节点的孩子节点(即发起人节点),向其发送浙政钉工作通知 - // // 获取根节点即流程发起节点 - // FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root"); - // String startUserId = getRootUserId(rootNode, task.getProcessInstanceId()); - // // 获取浙政钉用户ID - // UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(startUserId)); - // WorkNoticeInfo sendWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo); - // WflowModels wflowModels = getLastWflowModels(task); - // String formName = wflowModels.getFormName(); - // String msg = String.format(PASS_MSG_TEMPLATE2, projectName, formName); - // zwddClient.sendWorkNotice(sendWorkNoticeInfo.getReceiverUserId(),sendWorkNoticeInfo.getBizMsgId(),msg); - // } - //} /** * 获取发送浙政钉工作通知的信息 @@ -629,28 +445,28 @@ public class TodoCenterManage { * @author CMM * @since 2023/02/02 */ - //private String getRootUserId(FlowNode rootNode, String processInstanceId) { - // String rootUserId = null; - // // 输出连线 - // List outgoingFlows = rootNode.getOutgoingFlows(); - // // 遍历返回下一个节点信息 - // for (SequenceFlow currentOutgoingFlow : outgoingFlows) { - // // 类型自己判断 - // FlowElement targetFlowElement = currentOutgoingFlow.getTargetFlowElement(); - // // TODO 若要会签需判断候选人 - // // 发起事件 - // if (targetFlowElement instanceof StartEvent) { - // String actId = targetFlowElement.getId(); - // ActivityInstance activityInstance = runtimeService.createActivityInstanceQuery() - // .processInstanceId(processInstanceId).activityId(actId).singleResult(); - // String executionId = activityInstance.getExecutionId(); - // rootUserId = runtimeService.getVariable(executionId, "initiator", String.class); - // break; - // } - // } - // return rootUserId; - // - //} + private String getRootUserId(FlowNode rootNode, String processInstanceId) { + String rootUserId = null; + // 输出连线 + List outgoingFlows = rootNode.getOutgoingFlows(); + // 遍历返回下一个节点信息 + for (SequenceFlow currentOutgoingFlow : outgoingFlows) { + // 类型自己判断 + FlowElement targetFlowElement = currentOutgoingFlow.getTargetFlowElement(); + // TODO 若要会签需判断候选人 + // 发起事件 + if (targetFlowElement instanceof StartEvent) { + String actId = targetFlowElement.getId(); + ActivityInstance activityInstance = runtimeService.createActivityInstanceQuery() + .processInstanceId(processInstanceId).activityId(actId).singleResult(); + String executionId = activityInstance.getExecutionId(); + rootUserId = runtimeService.getVariable(executionId, "initiator", String.class); + break; + } + } + return rootUserId; + + } /** * 获取当前节点的下一个节点的审核用户ID * @@ -660,164 +476,33 @@ public class TodoCenterManage { * @author CMM * @since 2023/02/02 */ - //private String getNextUserId(FlowNode currentNode, String processInstanceId) { - // String nextUserId = null; - // // 输出连线 - // List outgoingFlows = currentNode.getOutgoingFlows(); - // // 遍历返回下一个节点信息 - // for (SequenceFlow currentOutgoingFlow : outgoingFlows) { - // // 类型自己判断 - // FlowElement targetFlowElement = currentOutgoingFlow.getTargetFlowElement(); - // // 如果下个审批节点为结束节点,那么跳过该节点 - // if (targetFlowElement instanceof EndEvent) { - // continue; - // } - // // TODO 若要会签需判断候选人 - // // 用户任务 - // if (targetFlowElement instanceof UserTask) { - // String actId = targetFlowElement.getId(); - // ActivityInstance activityInstance = runtimeService.createActivityInstanceQuery() - // .processInstanceId(processInstanceId).activityId(actId).singleResult(); - // String executionId = activityInstance.getExecutionId(); - // nextUserId = runtimeService.getVariable(executionId, "assignee", String.class); - // break; - // } - // } - // return nextUserId; - //} - - /** - * 判断处理操作是否含有审核意见 - * - * @param comment 审核意见 - * @return boolean - * @author CMM - * @since 2023/02/01 - */ - //private boolean hasComment(ProcessComment comment) { - // return Objects.nonNull(comment) - // && (StrUtil.isNotBlank(comment.getText()) || isNotEmpty(comment.getAttachments())); - //} + private String getNextUserId(FlowNode currentNode, String processInstanceId) { + String nextUserId = null; + // 输出连线 + List outgoingFlows = currentNode.getOutgoingFlows(); + // 遍历返回下一个节点信息 + for (SequenceFlow currentOutgoingFlow : outgoingFlows) { + // 类型自己判断 + FlowElement targetFlowElement = currentOutgoingFlow.getTargetFlowElement(); + // 如果下个审批节点为结束节点,那么跳过该节点 + if (targetFlowElement instanceof EndEvent) { + continue; + } + // TODO 若要会签需判断候选人 + // 用户任务 + if (targetFlowElement instanceof UserTask) { + String actId = targetFlowElement.getId(); + ActivityInstance activityInstance = runtimeService.createActivityInstanceQuery() + .processInstanceId(processInstanceId).activityId(actId).singleResult(); + String executionId = activityInstance.getExecutionId(); + nextUserId = runtimeService.getVariable(executionId, "assignee", String.class); + break; + } + } + return nextUserId; + } /** - * 撤销流程处理 - * - * @param handledTaskInstance 已处理的历史任务实例 - * @param userId 当前登录用户ID - * @param projectId - */ - //private void doWithDrawProcess(HistoricTaskInstance handledTaskInstance, Long userId, Long projectId) { - // String processInstanceId = handledTaskInstance.getProcessInstanceId(); - // // 获取当前流程实例待审核任务信息 - // Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult(); - // // 获取当前流程实例信息 - // HistoricProcessInstance historicProcessInstance = historyService - // .createHistoricProcessInstanceQuery() - // .processInstanceId(processInstanceId) - // .singleResult(); - // // 流程发起人ID - // String startUserId = historicProcessInstance.getStartUserId(); - // // 获取当前申报项目 - // Project declaredProject = projectService.getOne(Wrappers.lambdaQuery(Project.class) - // .eq(Project::getInstCode, processInstanceId) - // .eq(Project::getId,projectId)); - // String projectName = declaredProject.getProjectName(); - // - // // 获取bpm对象 - // BpmnModel bpmnModel = repositoryService.getBpmnModel(handledTaskInstance.getProcessDefinitionId()); - // // 传节点定义key 获取传入节点(撤回操作人在流程配置中所在的节点) - // FlowNode handledNode = (FlowNode) bpmnModel.getFlowElement(handledTaskInstance.getTaskDefinitionKey()); - // - // // 获取当前流程状态 - // Integer status = declaredProject.getStatus(); - // - // // 判断当前登录用户是否是流程发起人 - // if (startUserId.equals(String.valueOf(userId))) { - // // TODO 若是流程发起人点击撤回,项目回到上一个状态,并删除当前审核人对应的待办记录 - // // 若是流程发起人点击撤回,项目回到上一个状态,需调用状态机更新项目状态,流程状态更新为审核通过 - // switch (Objects.requireNonNull(ProjectStatusEnum.getValue(status))) { - // // 当前项目状态是单位内部审核中 - // case UNDER_INTERNAL_AUDIT: - // // 当前项目状态是预审中 - // case PRE_APPLYING: - // // 当前项目状态是部门联审中 - // case DEPARTMENT_JOINT_REVIEW: - // // 当前项目状态是方案评审中 - // case SCHEME_UNDER_REVIEW: - // // 当前项目状态是终验审核中 - // case FINAL_ACCEPTANCE_IS_UNDER_REVIEW: - // updateWithdrawProjectStatus(userId, declaredProject); - // break; - // default: - // throw new IllegalStateException("Unexpected value: " + status); - // } - // List executions = runtimeService.createExecutionQuery() - // .processInstanceId(handledTaskInstance.getProcessInstanceId()).onlyChildExecutions().list(); - // // 强制流程指向撤回 - // runtimeService.createChangeActivityStateBuilder() - // .processInstanceId(task.getProcessInstanceId()) - // .moveActivityIdTo(task.getTaskDefinitionKey(), HisProInsEndActId.WITHDRAW) - // .moveExecutionsToSingleActivityId(executions.stream() - // .map(Execution::getId) - // .collect(Collectors.toList()), HisProInsEndActId.WITHDRAW) - // .changeState(); - // } else { - // // 获取当前流程待审核节点 - // FlowNode currentNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); - // SequenceFlow sequenceFlow = currentNode.getIncomingFlows().get(0); - // // 获取上一个节点的activityId - // String sourceRef = sequenceFlow.getSourceRef(); - // - // HistoricActivityInstance lastInstance = historyService.createHistoricActivityInstanceQuery() - // .processInstanceId(task.getProcessInstanceId()) - // .activityId(sourceRef) - // .activityType("userTask") - // .finished() - // .singleResult(); - // // 获取前一个审核节点审核人信息 - // String beforeUserId = lastInstance.getAssignee(); - // // 获取当前审核节点审核人信息 - // String currentUserId = task.getAssignee(); - // //HashSet userSet = new HashSet<>(); - // //userSet.add(beforeUserId); - // //userSet.add(currentUserId); - // //Map userMap = userInfoService.getUserMapByIds(userSet); - // //UserInfoVO beforeUserInfoVO = userMap.get(Long.valueOf(beforeUserId)); - // //UserInfoVO currentUserInfoVO = userMap.get(Long.valueOf(currentUserId)); - // //String beforeUserOrgCode = beforeUserInfoVO.getOrganizationCode(); - // //String currentUserOrgCode = currentUserInfoVO.getOrganizationCode(); - // //Boolean orgFlag = currentUserOrgCode.equals(beforeUserOrgCode) ? true : false; - // - // // TODO 判断前一个审核人的部门和当前登录用户的部门是否是同一个,如果是同一个才可以撤回,否则抛出异常 - // Boolean orgFlag = true; - // if (orgFlag) { - // // 注意:是前一个审核人,说明此时仍在一个审核流程中,项目状态不需要改变,流程状态也不要改变,仍为审核中 - // // 在审核记录中移除前一个审核人提交过的审核意见 - // Comment comment = taskService.getProcessInstanceComments(processInstanceId).stream() - // .filter(c -> c.getTaskId().equals(handledTaskInstance.getId())) - // .findFirst() - // .get(); - // taskService.deleteComment(comment.getId()); - // // 我已处理中去掉自己之前处理的记录 - // String taskInstanceId = handledTaskInstance.getId(); - // historyService.deleteHistoricTaskInstance(taskInstanceId); - // - // List executions = runtimeService.createExecutionQuery() - // .processInstanceId(handledTaskInstance.getProcessInstanceId()).onlyChildExecutions().list(); - // // 强制流程指向前一个审核人节点 - // runtimeService.createChangeActivityStateBuilder() - // .processInstanceId(task.getProcessInstanceId()) - // .moveActivityIdsToSingleActivityId(executions.stream() - // .map(Execution::getActivityId) - // .collect(Collectors.toList()), handledNode.getId()) - // .changeState(); - // } else { - // throw new BizException("下一个审核人和您不是同一个部门,无法撤回!"); - // } - // - // } - //} - /** * 当为撤回操作时,更新项目表中的项目状态为前一个状态 * * @param userId @@ -846,55 +531,6 @@ public class TodoCenterManage { } /** - * 退回流程处理 - * - * @param task 当前任务 - * @param userId 当前登录用户ID - * @param param 参数 - */ - //private void doBackTask(Task task, Long userId, ReqProcessHandlerDTO param) { - // // 获取当前申报项目 - // Project declaredProject = projectService.getOne(Wrappers.lambdaQuery(Project.class) - // .eq(Project::getInstCode, task.getProcessInstanceId()) - // .eq(Project::getId,param.getProjectId())); - // String projectName = declaredProject.getProjectName(); - // // 保存审核意见 - // if (hasComment(param.getAuditInfo())) { - // // 执行自定义的保存评论的功能 - // managementService.executeCommand(new SaveCommentCmd(param.getTaskId(), param.getInstanceId(), - // String.valueOf(userId), JSONObject.toJSONString(param.getAuditInfo()))); - // } - // // 获取bpm对象 - // BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); - // // 传节点定义key 获取根节点即流程发起节点 - // FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root"); - // - // // 流程变成【被退回】状态,待我处理中,为流程发起人增加一条待办记录, - // // 执行自定义回退逻辑,回退到流程发起人 - // // 注意:因为审核人有执行退回的权限,且是退回到流程发起人,说明是在同一个流程实例中,所以项目状态不需要更新 - // managementService.executeCommand(new BackToHisApprovalNodeCmd(runtimeService, bpmnModel, param.getTaskId(), rootNode.getId())); - // runtimeService.setVariables(param.getInstanceId(), - // Maps.newHashMap("approve_" + param.getTaskId(), param.getAction())); - // log.info("用户[{}] 退回流程[{}] [{} -> {}]", userId, param.getInstanceId(), - // task.getTaskDefinitionKey(), - // param.getTargetNode()); - // // 更新申报项目表中的流程状态为被退回 - // declaredProject.setProcessStatus(ProcessStatusEnum.BE_BACKED.getCode()); - // declaredProject.setUpdateOn(LocalDateTime.now()); - // declaredProject.setUpdateBy(userId); - // projectService.updateById(declaredProject); - // // TODO 给项目创建人、流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被退回,请及时处理。 - // String startUserId = getRootUserId(rootNode, task.getProcessInstanceId()); - // UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(startUserId)); - // WorkNoticeInfo sendWorkNoticeInfo = getSendWorkNoticeInfo(auditUserInfo); - // WflowModels wflowModels = getLastWflowModels(task); - // String formName = wflowModels.getFormName(); - // String msg = String.format(BACK_MSG_TEMPLATE, projectName, formName); - // zwddClient.sendWorkNotice(sendWorkNoticeInfo.getReceiverUserId(),sendWorkNoticeInfo.getBizMsgId(),msg); - // - //} - - /** * 查询流程表单数据及审批的进度步骤 * @param instanceId 流程实例ID * @return 流程进度及表单详情