|
|
@@ -24,6 +24,7 @@ import com.ningdatech.pmapi.common.model.entity.ExcelExportWriter; |
|
|
|
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent; |
|
|
|
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; |
|
|
|
import com.ningdatech.pmapi.common.util.ExcelDownUtil; |
|
|
|
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; |
|
|
|
import com.ningdatech.pmapi.projectlib.model.entity.Project; |
|
|
|
import com.ningdatech.pmapi.projectlib.service.IProjectService; |
|
|
|
import com.ningdatech.pmapi.todocenter.bean.entity.ProcessComment; |
|
|
@@ -42,7 +43,6 @@ import com.ningdatech.pmapi.todocenter.zwdd.model.MessageContent; |
|
|
|
import com.ningdatech.pmapi.todocenter.zwdd.model.MessageText; |
|
|
|
import com.ningdatech.pmapi.user.entity.UserInfo; |
|
|
|
import com.ningdatech.pmapi.user.service.IUserInfoService; |
|
|
|
import com.ningdatech.pmapi.user.util.LoginUserUtil; |
|
|
|
import com.wflow.bean.do_.UserDo; |
|
|
|
import com.wflow.bean.entity.WflowCcTasks; |
|
|
|
import com.wflow.bean.entity.WflowModelHistorys; |
|
|
@@ -78,6 +78,7 @@ import org.flowable.engine.history.HistoricProcessInstanceQuery; |
|
|
|
import org.flowable.engine.impl.util.ProcessDefinitionUtil; |
|
|
|
import org.flowable.engine.runtime.ActivityInstance; |
|
|
|
import org.flowable.engine.runtime.Execution; |
|
|
|
import org.flowable.engine.task.Comment; |
|
|
|
import org.flowable.task.api.Task; |
|
|
|
import org.flowable.task.api.TaskInfo; |
|
|
|
import org.flowable.task.api.TaskQuery; |
|
|
@@ -110,7 +111,6 @@ public class TodoCenterManage { |
|
|
|
private final RepositoryService repositoryService; |
|
|
|
private final RuntimeService runtimeService; |
|
|
|
private final UserDeptOrLeaderService userDeptOrLeaderService; |
|
|
|
private final ProcessInstanceService processService; |
|
|
|
private final FormService formService; |
|
|
|
private final ManagementService managementService; |
|
|
|
private final HistoryService historyService; |
|
|
@@ -137,8 +137,9 @@ public class TodoCenterManage { |
|
|
|
// 获取登录用户ID |
|
|
|
// long userId = LoginUserUtil.getUserId(); |
|
|
|
|
|
|
|
Long userId = 381496L; |
|
|
|
// Long userId = 6418616L; |
|
|
|
// Long userId = 381496L; |
|
|
|
Long userId = 6418616L; |
|
|
|
// Long userId = 61769799L; |
|
|
|
TaskQuery taskQuery = taskService.createTaskQuery(); |
|
|
|
taskQuery.active().taskCandidateOrAssigned(String.valueOf(userId)).orderByTaskCreateTime().desc(); |
|
|
|
List<Task> taskList = taskQuery.list(); |
|
|
@@ -300,10 +301,16 @@ public class TodoCenterManage { |
|
|
|
|
|
|
|
// Long userId = LoginUserUtil.getUserId(); |
|
|
|
|
|
|
|
// Long userId = 381496L; |
|
|
|
Long userId = 381496L; |
|
|
|
|
|
|
|
Long userId = 6418616L; |
|
|
|
// Long userId = 6418616L; |
|
|
|
|
|
|
|
// 若进行的是撤回操作(流程发起人和当前流程审核人的前一个审核人操作) |
|
|
|
if (param.getAction().equals(ProcessHandlerEnum.WITHDRAW)){ |
|
|
|
HistoricTaskInstance handledTaskInstance = historyService.createHistoricTaskInstanceQuery().taskId(param.getTaskId()).singleResult(); |
|
|
|
doWithDrawProcess(handledTaskInstance, userId); |
|
|
|
return; |
|
|
|
} |
|
|
|
Task task = taskService.createTaskQuery().taskId(param.getTaskId()).active().singleResult(); |
|
|
|
HashMap<String, Object> formData = new HashMap<>(32); |
|
|
|
if (Objects.isNull(task)) { |
|
|
@@ -330,10 +337,6 @@ public class TodoCenterManage { |
|
|
|
formService.updateInstanceFormData(param.getInstanceId(), formData); |
|
|
|
doBackTask(task, userId, param); |
|
|
|
break; |
|
|
|
// 撤回 |
|
|
|
case WITHDRAW: |
|
|
|
doWithDrawProcess(task, userId); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new IllegalStateException("Unexpected value: " + param.getAction()); |
|
|
|
} |
|
|
@@ -354,33 +357,38 @@ public class TodoCenterManage { |
|
|
|
|
|
|
|
Map<String, Object> 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 中止流程并使项目进入对应状态,给项目创建人、流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被驳回,请及时处理。 |
|
|
|
// 获取流程定义 |
|
|
|
Process process = ProcessDefinitionUtil.getProcess(task.getProcessDefinitionId()); |
|
|
|
|
|
|
|
// 获取bpm对象 |
|
|
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); |
|
|
|
// 获取根节点即流程发起节点 |
|
|
|
FlowNode rootNode = (FlowNode) process.getFlowElement("root", true); |
|
|
|
FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root"); |
|
|
|
|
|
|
|
// TODO 中止流程并使项目进入对应状态,给项目创建人、流程发起人发送浙政钉工作通知:【项目名称】的【流程名称】被驳回,请及时处理。 |
|
|
|
sendWorkNoticeToStartUser(task, projectName, rootNode); |
|
|
|
// sendWorkNoticeToStartUser(task, projectName, rootNode); |
|
|
|
|
|
|
|
// 更新项目状态 |
|
|
|
updateRejectProjectStatus(task); |
|
|
|
updateRejectProjectStatus(userId,declaredProject); |
|
|
|
taskService.complete(param.getTaskId(), var); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 当为驳回操作时,更新项目表中的项目状态 |
|
|
|
* |
|
|
|
* @param task 当前任务 |
|
|
|
* @param userId |
|
|
|
* @param declaredProject |
|
|
|
* @return void |
|
|
|
* @author CMM |
|
|
|
* @since 2023/02/08 |
|
|
|
*/ |
|
|
|
private void updateRejectProjectStatus(Task task) { |
|
|
|
// 获取当前登录用户 |
|
|
|
Long userId = LoginUserUtil.getUserId(); |
|
|
|
// 获取当前申报项目 |
|
|
|
Project declaredProject = projectService |
|
|
|
.getOne(Wrappers.lambdaQuery(Project.class).eq(Project::getInstCode, task.getProcessInstanceId())); |
|
|
|
private void updateRejectProjectStatus(Long userId, Project declaredProject) { |
|
|
|
// 获取当前流程项目状态 |
|
|
|
Integer projectStatusSecond = declaredProject.getStatus(); |
|
|
|
// 根据当前状态获取对应的通过事件 |
|
|
@@ -432,7 +440,7 @@ public class TodoCenterManage { |
|
|
|
Project declaredProject = projectService |
|
|
|
.getOne(Wrappers.lambdaQuery(Project.class).eq(Project::getInstCode, task.getProcessInstanceId())); |
|
|
|
// 更新项目状态到下一个状态 |
|
|
|
updatePassProjectStatus(task, userId, declaredProject); |
|
|
|
updatePassProjectStatus(userId, declaredProject); |
|
|
|
taskService.complete(param.getTaskId(), var); |
|
|
|
} |
|
|
|
|
|
|
@@ -458,19 +466,48 @@ public class TodoCenterManage { |
|
|
|
managementService.executeCommand(new SaveCommentCmd(param.getTaskId(), param.getInstanceId(), |
|
|
|
String.valueOf(userId), JSONObject.toJSONString(param.getAuditInfo()))); |
|
|
|
} |
|
|
|
updatePassProjectStatus(task, userId, declaredProject); |
|
|
|
taskService.complete(param.getTaskId(), var); |
|
|
|
|
|
|
|
// 获取bpm对象 |
|
|
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); |
|
|
|
// 传节点定义key 获取当前节点 |
|
|
|
FlowNode currentNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); |
|
|
|
|
|
|
|
|
|
|
|
// TODO 若当前流程是预审流程,需要在提交预审申报的时候,调用状态机判断申报后的项目状态, |
|
|
|
// 若是省级部门联审中,要对接外部接口,获取省级部门联审的结果,更新项目状态(预审申报提交的时候处理) |
|
|
|
|
|
|
|
// 需要先通过后才能有下一个节点的信息 |
|
|
|
taskService.complete(param.getTaskId(), var); |
|
|
|
|
|
|
|
// 获取流程下一个节点的审核用户ID |
|
|
|
String nextUserId = getNextUserId(currentNode, processInstanceId); |
|
|
|
// 若有下一个审核人,向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。 |
|
|
|
// 获取当前流程状态 |
|
|
|
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); |
|
|
|
} |
|
|
|
} |
|
|
|
// 若有下一个审核人(当前节点的用户),向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。 |
|
|
|
if (Objects.nonNull(nextUserId)) { |
|
|
|
UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(nextUserId)); |
|
|
|
// UserInfo auditUserInfo = userInfoService.getById(Long.valueOf(nextUserId)); |
|
|
|
// TODO 获取浙政钉用户dingKey,向其发送浙政钉工作通知 |
|
|
|
String msg = String.format(PASS_MSG_TEMPLATE, null, projectName); |
|
|
|
// sendWorkNotice(auditUserInfo,msg); |
|
|
@@ -478,22 +515,20 @@ public class TodoCenterManage { |
|
|
|
// 若没有,向发起人发送浙政钉工作通知:【项目名称】已通过【流程名称】,请及时开始下一步操作。 |
|
|
|
// TODO 向其发送浙政钉工作通知 获取根节点的孩子节点(即发起人节点),向其发送浙政钉工作通知 |
|
|
|
// 获取根节点即流程发起节点 |
|
|
|
FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root"); |
|
|
|
// FlowNode rootNode = (FlowNode) bpmnModel.getFlowElement("root"); |
|
|
|
// sendWorkNoticeToStartUser(task, projectName, rootNode); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 当为通过操作时,更新项目表中项目状态 |
|
|
|
* |
|
|
|
* @param task 当前任务 |
|
|
|
* @param userId |
|
|
|
* @param declaredProject |
|
|
|
* @return void |
|
|
|
* @author CMM |
|
|
|
* @since 2023/02/08 |
|
|
|
*/ |
|
|
|
private void updatePassProjectStatus(Task task, Long userId, Project declaredProject) { |
|
|
|
private void updatePassProjectStatus(Long userId, Project declaredProject) { |
|
|
|
// 获取当前流程项目状态 |
|
|
|
Integer projectStatusSecond = declaredProject.getStatus(); |
|
|
|
// 根据当前状态获取对应的通过事件 |
|
|
@@ -520,7 +555,7 @@ public class TodoCenterManage { |
|
|
|
* @since 2023/02/03 |
|
|
|
*/ |
|
|
|
private void sendWorkNoticeToStartUser(Task task, String projectName, FlowNode rootNode) { |
|
|
|
String startUserId = getRootUserId(rootNode); |
|
|
|
String startUserId = getRootUserId(rootNode, task.getProcessInstanceId()); |
|
|
|
UserInfo startUserInfo = userInfoService.getById(Long.valueOf(startUserId)); |
|
|
|
// 从历史表获取最新版本的流程 |
|
|
|
WflowModels wflowModels = getLastWflowModels(task); |
|
|
@@ -530,14 +565,15 @@ public class TodoCenterManage { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取流程发起节点的浙政钉用户ID |
|
|
|
* 获取流程发起节点的用户ID |
|
|
|
* |
|
|
|
* @param rootNode 根节点 |
|
|
|
* @param processInstanceId |
|
|
|
* @return java.lang.String |
|
|
|
* @author CMM |
|
|
|
* @since 2023/02/02 |
|
|
|
*/ |
|
|
|
private String getRootUserId(FlowNode rootNode) { |
|
|
|
private String getRootUserId(FlowNode rootNode, String processInstanceId) { |
|
|
|
String rootUserId = null; |
|
|
|
// 输出连线 |
|
|
|
List<SequenceFlow> outgoingFlows = rootNode.getOutgoingFlows(); |
|
|
@@ -548,8 +584,11 @@ public class TodoCenterManage { |
|
|
|
// TODO 若要会签需判断候选人 |
|
|
|
// 发起事件 |
|
|
|
if (targetFlowElement instanceof StartEvent) { |
|
|
|
UserTask userTask = (UserTask) targetFlowElement; |
|
|
|
rootUserId = userTask.getAssignee(); |
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
@@ -560,7 +599,7 @@ public class TodoCenterManage { |
|
|
|
/** |
|
|
|
* 获取当前节点的下一个节点的审核用户ID |
|
|
|
* |
|
|
|
* @param currentNode 当前节点 |
|
|
|
* @param currentNode 当前节点 |
|
|
|
* @param processInstanceId |
|
|
|
* @return java.lang.String 下一个节点的浙政钉用户ID |
|
|
|
* @author CMM |
|
|
@@ -646,70 +685,106 @@ public class TodoCenterManage { |
|
|
|
/** |
|
|
|
* 撤销流程处理 |
|
|
|
* |
|
|
|
* @param task 当前任务 |
|
|
|
* @param userId |
|
|
|
* @param handledTaskInstance 已处理的历史任务实例 |
|
|
|
* @param userId 当前登录用户ID |
|
|
|
*/ |
|
|
|
private void doWithDrawProcess(Task task, Long userId) { |
|
|
|
// 获取流程定义 |
|
|
|
Process process = ProcessDefinitionUtil.getProcess(task.getProcessDefinitionId()); |
|
|
|
// 获取当前运行流程的发起人节点信息 |
|
|
|
FlowNode rootNode = (FlowNode) process.getFlowElement("root", true); |
|
|
|
// 获取当前节点 |
|
|
|
FlowNode currentNode = (FlowNode) process.getFlowElement(task.getTaskDefinitionKey(), true); |
|
|
|
String rootUserId = getRootUserId(rootNode); |
|
|
|
private void doWithDrawProcess(HistoricTaskInstance handledTaskInstance, Long userId) { |
|
|
|
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)); |
|
|
|
String projectName = declaredProject.getProjectName(); |
|
|
|
|
|
|
|
// 获取bpm对象 |
|
|
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(handledTaskInstance.getProcessDefinitionId()); |
|
|
|
// 传节点定义key 获取传入节点(撤回操作人在流程配置中所在的节点) |
|
|
|
FlowNode handledNode = (FlowNode) bpmnModel.getFlowElement(handledTaskInstance.getTaskDefinitionKey()); |
|
|
|
|
|
|
|
// 获取当前流程状态 |
|
|
|
Integer status = declaredProject.getStatus(); |
|
|
|
|
|
|
|
// 判断当前登录用户是否是流程发起人 |
|
|
|
if (rootUserId.equals(String.valueOf(userId))) { |
|
|
|
if (startUserId.equals(String.valueOf(userId))) { |
|
|
|
// TODO 若是流程发起人点击撤回,项目回到上一个状态,并删除当前审核人对应的待办记录 |
|
|
|
updateWithdrawProjectStatus(task, userId); |
|
|
|
// 若是流程发起人点击撤回,项目回到上一个状态,需调用状态机更新项目状态 |
|
|
|
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<Execution> executions = runtimeService.createExecutionQuery() |
|
|
|
.processInstanceId(task.getProcessInstanceId()).onlyChildExecutions().list(); |
|
|
|
.processInstanceId(handledTaskInstance.getProcessInstanceId()).onlyChildExecutions().list(); |
|
|
|
// 强制流程指向撤回 |
|
|
|
runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId()) |
|
|
|
runtimeService.createChangeActivityStateBuilder() |
|
|
|
.processInstanceId(task.getProcessInstanceId()) |
|
|
|
.moveActivityIdTo(task.getTaskDefinitionKey(), HisProInsEndActId.WITHDRAW) |
|
|
|
.moveExecutionsToSingleActivityId( |
|
|
|
executions.stream().map(Execution::getId).collect(Collectors.toList()), HisProInsEndActId.WITHDRAW) |
|
|
|
.moveExecutionsToSingleActivityId(executions.stream() |
|
|
|
.map(Execution::getId) |
|
|
|
.collect(Collectors.toList()), HisProInsEndActId.WITHDRAW) |
|
|
|
.changeState(); |
|
|
|
} else { |
|
|
|
FlowElementsContainer parentContainer = currentNode.getParentContainer(); |
|
|
|
for (FlowElement flowElement : parentContainer.getFlowElements()) { |
|
|
|
UserTask beforeUserTask = (UserTask) flowElement; |
|
|
|
if (beforeUserTask.getAssignee().equals(String.valueOf(userId))) { |
|
|
|
// TODO 若是前一个审核人点击撤回,在审核记录中移除自己提交过的审核意见、 |
|
|
|
// 待我处理中移除当前审核人的待办记录、 |
|
|
|
// 待我处理中增加自己的待办记录、 |
|
|
|
// 我已处理中去掉自己之前处理的记录 |
|
|
|
// 更新项目状态 |
|
|
|
updateWithdrawProjectStatus(task, userId); |
|
|
|
HistoricTaskInstance beforeTaskInstance = |
|
|
|
historyService.createHistoricTaskInstanceQuery().taskId(beforeUserTask.getId()).singleResult(); |
|
|
|
List<Execution> executions = runtimeService.createExecutionQuery() |
|
|
|
.processInstanceId(beforeTaskInstance.getProcessInstanceId()).onlyChildExecutions().list(); |
|
|
|
// 强制流程指向撤回 |
|
|
|
runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId()) |
|
|
|
.moveActivityIdTo(flowElement.getId(), HisProInsEndActId.WITHDRAW) |
|
|
|
.moveExecutionsToSingleActivityId( |
|
|
|
executions.stream().map(Execution::getId).collect(Collectors.toList()), |
|
|
|
HisProInsEndActId.WITHDRAW) |
|
|
|
.changeState(); |
|
|
|
break; |
|
|
|
} |
|
|
|
// TODO 获取前一个审核节点审核人信息 |
|
|
|
|
|
|
|
// 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<Execution> 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 task 当前任务 |
|
|
|
* @param userId |
|
|
|
* @param declaredProject |
|
|
|
* @return void |
|
|
|
* @author CMM |
|
|
|
* @since 2023/02/08 |
|
|
|
*/ |
|
|
|
private void updateWithdrawProjectStatus(Task task, Long userId) { |
|
|
|
// 获取当前申报项目 |
|
|
|
Project declaredProject = projectService |
|
|
|
.getOne(Wrappers.lambdaQuery(Project.class).eq(Project::getInstCode, task.getProcessInstanceId())); |
|
|
|
private void updateWithdrawProjectStatus(Long userId, Project declaredProject) { |
|
|
|
// 获取当前流程项目状态 |
|
|
|
Integer projectStatusSecond = declaredProject.getStatus(); |
|
|
|
// 根据当前状态获取对应的撤回事件 |
|
|
@@ -923,7 +998,10 @@ public class TodoCenterManage { |
|
|
|
public PageVo<ResToBeProcessedDTO> queryHandledProjectList(ReqToBeProcessedDTO param) { |
|
|
|
// 获取登录用户ID |
|
|
|
// long userId = LoginUserUtil.getUserId(); |
|
|
|
|
|
|
|
Long userId = 381496L; |
|
|
|
// Long userId = 6418616L; |
|
|
|
// Long userId = 61769799L; |
|
|
|
|
|
|
|
// 自定义sql查询所有已办的任务实例 |
|
|
|
String nativeSql = "SELECT aht.* FROM ACT_HI_TASKINST AS aht \n" |
|
|
|