update 调整流程办理优化撤销,驳回,草稿等动作

This commit is contained in:
gssong 2024-01-04 21:03:17 +08:00
parent 472dfc165d
commit 763d5aa3d2
4 changed files with 37 additions and 37 deletions

View File

@ -209,7 +209,7 @@ public class ActTaskController extends BaseController {
*/ */
@GetMapping("/getBusinessStatus/{taskId}") @GetMapping("/getBusinessStatus/{taskId}")
public R<String> getBusinessStatus(@PathVariable String taskId) { public R<String> getBusinessStatus(@PathVariable String taskId) {
return R.ok("操作成功", WorkflowUtils.getBusinessStatus(taskId)); return R.ok("操作成功", WorkflowUtils.getBusinessStatusByTaskId(taskId));
} }

View File

@ -10,7 +10,7 @@ package org.dromara.workflow.flowable.strategy;
public interface FlowProcessEventHandler { public interface FlowProcessEventHandler {
/** /**
* 执行办理任务监听 * 执行办理任务监听 当状态为草稿驳回撤销时说明流程为申请人节点提交办理
* *
* @param processInstanceId 流程实例id * @param processInstanceId 流程实例id
* @param status 状态 * @param status 状态

View File

@ -77,8 +77,7 @@ public class ActTaskServiceImpl implements IActTaskService {
throw new ServiceException("启动工作流时必须包含业务ID"); throw new ServiceException("启动工作流时必须包含业务ID");
} }
// 判断当前业务是否启动过流程 // 判断当前业务是否启动过流程
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(startProcessBo.getBusinessKey()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
.processInstanceBusinessKey(startProcessBo.getBusinessKey()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
if (ObjectUtil.isNotEmpty(historicProcessInstance)) { if (ObjectUtil.isNotEmpty(historicProcessInstance)) {
BusinessStatusEnum.checkStartStatus(historicProcessInstance.getBusinessStatus()); BusinessStatusEnum.checkStartStatus(historicProcessInstance.getBusinessStatus());
} }
@ -130,8 +129,7 @@ public class ActTaskServiceImpl implements IActTaskService {
List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles(); List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles();
String userId = String.valueOf(LoginHelper.getUserId()); String userId = String.valueOf(LoginHelper.getUserId());
TaskQuery taskQuery = taskService.createTaskQuery(); TaskQuery taskQuery = taskService.createTaskQuery();
taskQuery.taskId(completeTaskBo.getTaskId()) taskQuery.taskId(completeTaskBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(userId);
.taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(userId);
if (CollUtil.isNotEmpty(roles)) { if (CollUtil.isNotEmpty(roles)) {
List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())); List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId()));
taskQuery.taskCandidateGroupIn(groupIds); taskQuery.taskCandidateGroupIn(groupIds);
@ -166,11 +164,18 @@ public class ActTaskServiceImpl implements IActTaskService {
} else { } else {
taskService.complete(completeTaskBo.getTaskId()); taskService.complete(completeTaskBo.getTaskId());
} }
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
String businessStatus = WorkflowUtils.getBusinessStatus(task.getProcessInstanceId());
if (BusinessStatusEnum.DRAFT.getStatus().equals(businessStatus) || BusinessStatusEnum.BACK.getStatus().equals(businessStatus) || BusinessStatusEnum.CANCEL.getStatus().equals(businessStatus)) {
if (processHandler != null) {
processHandler.handleProcess(processInstance.getId(), businessStatus);
}
}
List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list();
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus());
managementService.executeCommand(updateBusinessStatusCmd); managementService.executeCommand(updateBusinessStatusCmd);
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
if (processHandler != null) { if (processHandler != null) {
processHandler.handleProcess(processInstance.getId(), BusinessStatusEnum.FINISH.getStatus()); processHandler.handleProcess(processInstance.getId(), BusinessStatusEnum.FINISH.getStatus());
} }
@ -297,8 +302,7 @@ public class ActTaskServiceImpl implements IActTaskService {
@Override @Override
public TableDataInfo<TaskVo> getTaskFinishByPage(TaskBo taskBo) { public TableDataInfo<TaskVo> getTaskFinishByPage(TaskBo taskBo) {
String userId = String.valueOf(LoginHelper.getUserId()); String userId = String.valueOf(LoginHelper.getUserId());
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery().taskAssignee(userId).taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc();
.taskAssignee(userId).taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc();
if (StringUtils.isNotBlank(taskBo.getName())) { if (StringUtils.isNotBlank(taskBo.getName())) {
query.taskNameLike("%" + taskBo.getName() + "%"); query.taskNameLike("%" + taskBo.getName() + "%");
} }
@ -339,8 +343,7 @@ public class ActTaskServiceImpl implements IActTaskService {
*/ */
@Override @Override
public TableDataInfo<TaskVo> getAllTaskFinishByPage(TaskBo taskBo) { public TableDataInfo<TaskVo> getAllTaskFinishByPage(TaskBo taskBo) {
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery().taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc();
.taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc();
if (StringUtils.isNotBlank(taskBo.getName())) { if (StringUtils.isNotBlank(taskBo.getName())) {
query.taskNameLike("%" + taskBo.getName() + "%"); query.taskNameLike("%" + taskBo.getName() + "%");
} }
@ -382,9 +385,7 @@ public class ActTaskServiceImpl implements IActTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean delegateTask(DelegateBo delegateBo) { public boolean delegateTask(DelegateBo delegateBo) {
TaskEntity task = (TaskEntity) taskService.createTaskQuery() TaskEntity task = (TaskEntity) taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(delegateBo.getTaskId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
.taskTenantId(TenantHelper.getTenantId()).taskId(delegateBo.getTaskId())
.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
} }
@ -413,8 +414,7 @@ public class ActTaskServiceImpl implements IActTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean terminationTask(TerminationBo terminationBo) { public boolean terminationTask(TerminationBo terminationBo) {
Task task = taskService.createTaskQuery() Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(terminationBo.getTaskId()).singleResult();
.taskTenantId(TenantHelper.getTenantId()).taskId(terminationBo.getTaskId()).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
@ -422,8 +422,7 @@ public class ActTaskServiceImpl implements IActTaskService {
if (task.isSuspended()) { if (task.isSuspended()) {
throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED);
} }
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(task.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
.processInstanceBusinessKey(task.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
if (ObjectUtil.isNotEmpty(historicProcessInstance)) { if (ObjectUtil.isNotEmpty(historicProcessInstance)) {
BusinessStatusEnum.checkStatus(historicProcessInstance.getBusinessStatus()); BusinessStatusEnum.checkStatus(historicProcessInstance.getBusinessStatus());
} }
@ -434,8 +433,7 @@ public class ActTaskServiceImpl implements IActTaskService {
terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "终止了申请:" + terminationBo.getComment()); terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "终止了申请:" + terminationBo.getComment());
} }
taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TERMINATION.getStatus(), terminationBo.getComment()); taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TERMINATION.getStatus(), terminationBo.getComment());
List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()) List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list();
.processInstanceId(task.getProcessInstanceId()).list();
if (CollectionUtil.isNotEmpty(list)) { if (CollectionUtil.isNotEmpty(list)) {
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
if (CollectionUtil.isNotEmpty(subTasks)) { if (CollectionUtil.isNotEmpty(subTasks)) {
@ -461,8 +459,7 @@ public class ActTaskServiceImpl implements IActTaskService {
*/ */
@Override @Override
public boolean transferTask(TransmitBo transmitBo) { public boolean transferTask(TransmitBo transmitBo) {
Task task = taskService.createTaskQuery().taskId(transmitBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) Task task = taskService.createTaskQuery().taskId(transmitBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
} }
@ -471,8 +468,7 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
try { try {
TaskEntity newTask = WorkflowUtils.createNewTask(task); TaskEntity newTask = WorkflowUtils.createNewTask(task);
taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.TRANSFER.getStatus(), taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.TRANSFER.getStatus(), StringUtils.isNotBlank(transmitBo.getComment()) ? transmitBo.getComment() : LoginHelper.getUsername() + "转办了任务");
StringUtils.isNotBlank(transmitBo.getComment()) ? transmitBo.getComment() : LoginHelper.getUsername() + "转办了任务");
taskService.complete(newTask.getId()); taskService.complete(newTask.getId());
taskService.setAssignee(task.getId(), transmitBo.getUserId()); taskService.setAssignee(task.getId(), transmitBo.getUserId());
return true; return true;
@ -489,8 +485,7 @@ public class ActTaskServiceImpl implements IActTaskService {
*/ */
@Override @Override
public boolean addMultiInstanceExecution(AddMultiBo addMultiBo) { public boolean addMultiInstanceExecution(AddMultiBo addMultiBo) {
Task task = taskService.createTaskQuery().taskId(addMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) Task task = taskService.createTaskQuery().taskId(addMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
} }
@ -533,8 +528,7 @@ public class ActTaskServiceImpl implements IActTaskService {
*/ */
@Override @Override
public boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo) { public boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo) {
Task task = taskService.createTaskQuery().taskId(deleteMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) Task task = taskService.createTaskQuery().taskId(deleteMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
} }
@ -580,8 +574,7 @@ public class ActTaskServiceImpl implements IActTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String backProcess(BackProcessBo backProcessBo) { public String backProcess(BackProcessBo backProcessBo) {
Task task = taskService.createTaskQuery().taskId(backProcessBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) Task task = taskService.createTaskQuery().taskId(backProcessBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskAssignee(String.valueOf(LoginHelper.getUserId())).singleResult();
.taskAssignee(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
} }
@ -604,14 +597,10 @@ public class ActTaskServiceImpl implements IActTaskService {
taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.BACK.getStatus(), StringUtils.isNotBlank(backProcessBo.getMessage()) ? backProcessBo.getMessage() : "退回"); taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.BACK.getStatus(), StringUtils.isNotBlank(backProcessBo.getMessage()) ? backProcessBo.getMessage() : "退回");
if (taskList.size() > 1) { if (taskList.size() > 1) {
//当前多个任务驳回到单个节点 //当前多个任务驳回到单个节点
runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId) runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdsToSingleActivityId(taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()), backTaskDefinitionKey).changeState();
.moveActivityIdsToSingleActivityId(taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()), backTaskDefinitionKey)
.changeState();
} else { } else {
//当前单个节点驳回单个节点 //当前单个节点驳回单个节点
runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId) runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey).changeState();
.moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey)
.changeState();
} }
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).list(); List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).list();
for (Task t : list) { for (Task t : list) {

View File

@ -297,13 +297,24 @@ public class WorkflowUtils {
* *
* @param taskId 任务id * @param taskId 任务id
*/ */
public static String getBusinessStatus(String taskId) { public static String getBusinessStatusByTaskId(String taskId) {
HistoricTaskInstance historicTaskInstance = PROCESS_ENGINE.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskId).taskTenantId(TenantHelper.getTenantId()).singleResult(); HistoricTaskInstance historicTaskInstance = PROCESS_ENGINE.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskId).taskTenantId(TenantHelper.getTenantId()).singleResult();
HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery() HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery()
.processInstanceId(historicTaskInstance.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); .processInstanceId(historicTaskInstance.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
return historicProcessInstance.getBusinessStatus(); return historicProcessInstance.getBusinessStatus();
} }
/**
* 获取当前流程状态
*
* @param processInstanceId 流程实例id
*/
public static String getBusinessStatus(String processInstanceId) {
HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
return historicProcessInstance.getBusinessStatus();
}
/** /**
* 设置流程实例对象 * 设置流程实例对象
* *