From 4af46a604589220b7d1c37dd5ebcdb05081f4132 Mon Sep 17 00:00:00 2001
From: 秋辞未寒 <545073804@qq.com>
Date: 星期六, 23 十一月 2024 14:57:11 +0800
Subject: [PATCH] update 优化 校验租户判空逻辑
---
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java | 102 ++++++++++++++++++++++++--------------------------
1 files changed, 49 insertions(+), 53 deletions(-)
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
index 84a3749..d9a674a 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
@@ -7,9 +7,11 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.dto.RoleDTO;
import org.dromara.common.core.domain.dto.UserDTO;
import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.service.OssService;
import org.dromara.common.core.service.UserService;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
@@ -18,16 +20,14 @@
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.workflow.common.constant.FlowConstant;
-import org.dromara.workflow.common.enums.BusinessStatusEnum;
+import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.ActHiTaskinst;
import org.dromara.workflow.domain.WfTaskBackNode;
import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.*;
import org.dromara.workflow.flowable.cmd.*;
-import org.dromara.workflow.flowable.strategy.FlowEventStrategy;
-import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler;
-import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
+import org.dromara.workflow.flowable.handler.FlowProcessEventHandler;
import org.dromara.workflow.mapper.ActHiTaskinstMapper;
import org.dromara.workflow.mapper.ActTaskMapper;
import org.dromara.workflow.service.IActTaskService;
@@ -52,6 +52,7 @@
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.variable.api.persistence.entity.VariableInstance;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -66,22 +67,29 @@
*
* @author may
*/
+@Slf4j
@RequiredArgsConstructor
@Service
public class ActTaskServiceImpl implements IActTaskService {
- private final RuntimeService runtimeService;
- private final TaskService taskService;
- private final HistoryService historyService;
- private final IdentityService identityService;
- private final ManagementService managementService;
- private final FlowEventStrategy flowEventStrategy;
+ @Autowired(required = false)
+ private RuntimeService runtimeService;
+ @Autowired(required = false)
+ private TaskService taskService;
+ @Autowired(required = false)
+ private HistoryService historyService;
+ @Autowired(required = false)
+ private IdentityService identityService;
+ @Autowired(required = false)
+ private ManagementService managementService;
private final ActTaskMapper actTaskMapper;
private final IWfTaskBackNodeService wfTaskBackNodeService;
private final ActHiTaskinstMapper actHiTaskinstMapper;
private final IWfNodeConfigService wfNodeConfigService;
private final IWfDefinitionConfigService wfDefinitionConfigService;
+ private final FlowProcessEventHandler flowProcessEventHandler;
private final UserService userService;
+ private final OssService ossService;
/**
* 鍚姩浠诲姟
@@ -177,21 +185,17 @@
return true;
}
//闄勪欢涓婁紶
- AttachmentCmd attachmentCmd = new AttachmentCmd(completeTaskBo.getFileId(), task.getId(), task.getProcessInstanceId());
+ AttachmentCmd attachmentCmd = new AttachmentCmd(completeTaskBo.getFileId(), task.getId(), task.getProcessInstanceId(), ossService);
managementService.executeCommand(attachmentCmd);
- FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
String businessStatus = WorkflowUtils.getBusinessStatus(processInstance.getBusinessKey());
+ //娴佺▼鎻愪氦鐩戝惉
if (BusinessStatusEnum.DRAFT.getStatus().equals(businessStatus) || BusinessStatusEnum.BACK.getStatus().equals(businessStatus) || BusinessStatusEnum.CANCEL.getStatus().equals(businessStatus)) {
- if (processHandler != null) {
- processHandler.handleProcess(processInstance.getBusinessKey(), businessStatus, true);
- }
+ flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), processInstance.getBusinessKey(), businessStatus, true);
}
runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus());
- String key = processInstance.getProcessDefinitionKey() + "_" + task.getTaskDefinitionKey();
- FlowTaskEventHandler taskHandler = flowEventStrategy.getTaskHandler(key);
- if (taskHandler != null) {
- taskHandler.handleTask(task.getId(), processInstance.getBusinessKey());
- }
+ //鍔炵悊鐩戝惉
+ flowProcessEventHandler.processTaskHandler(processInstance.getProcessDefinitionKey(), task.getTaskDefinitionKey(),
+ task.getId(), processInstance.getBusinessKey());
//鍔炵悊鎰忚
taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "鍚屾剰" : completeTaskBo.getMessage());
//鍔炵悊浠诲姟
@@ -207,9 +211,8 @@
if (pi == null) {
UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus());
managementService.executeCommand(updateBusinessStatusCmd);
- if (processHandler != null) {
- processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.FINISH.getStatus(), false);
- }
+ flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), processInstance.getBusinessKey(),
+ BusinessStatusEnum.FINISH.getStatus(), false);
} else {
List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list();
for (Task t : list) {
@@ -232,6 +235,7 @@
}
return true;
} catch (Exception e) {
+ log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
}
@@ -246,7 +250,7 @@
*/
@Async
public void sendMessage(List<Task> list, String name, List<String> messageType, String message) {
- WorkflowUtils.sendMessage(list, name, messageType, message);
+ WorkflowUtils.sendMessage(list, name, messageType, message, userService);
}
/**
@@ -262,7 +266,8 @@
String userId = String.valueOf(LoginHelper.getUserId());
queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus());
queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId());
- queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' " + "and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN " + getInParam(roleIds) + " ) ))", userId)));
+ String ids = StreamUtils.join(roleIds, x -> "'" + x + "'");
+ queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN (" + ids + ") ) ))", userId)));
if (StringUtils.isNotBlank(taskBo.getName())) {
queryWrapper.like("t.name_", taskBo.getName());
}
@@ -272,6 +277,7 @@
if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) {
queryWrapper.eq("t.processDefinitionKey", taskBo.getProcessDefinitionKey());
}
+ queryWrapper.orderByDesc("t.CREATE_TIME_");
Page<TaskVo> page = actTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
List<TaskVo> taskList = page.getRecords();
@@ -280,7 +286,7 @@
List<WfNodeConfigVo> wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds);
for (TaskVo task : taskList) {
task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus()));
- task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId()));
+ task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId(), userService));
task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null);
if (CollUtil.isNotEmpty(wfNodeConfigVoList)) {
wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo);
@@ -289,19 +295,6 @@
}
}
return TableDataInfo.build(page);
- }
-
- private String getInParam(List<String> param) {
- StringBuilder sb = new StringBuilder();
- sb.append("(");
- for (int i = 0; i < param.size(); i++) {
- sb.append("'").append(param.get(i)).append("'");
- if (i != param.size() - 1) {
- sb.append(",");
- }
- }
- sb.append(")");
- return sb.toString();
}
/**
@@ -345,7 +338,7 @@
});
}
taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null);
- taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId()));
+ taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId(), userService));
taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null);
if (CollUtil.isNotEmpty(wfNodeConfigVoList)) {
wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(taskVo::setWfNodeConfigVo);
@@ -374,6 +367,7 @@
queryWrapper.like(StringUtils.isNotBlank(taskBo.getProcessDefinitionName()), "t.processDefinitionName", taskBo.getProcessDefinitionName());
queryWrapper.eq(StringUtils.isNotBlank(taskBo.getProcessDefinitionKey()), "t.processDefinitionKey", taskBo.getProcessDefinitionKey());
queryWrapper.eq("t.assignee_", userId);
+ queryWrapper.orderByDesc("t.START_TIME_");
Page<TaskVo> page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper);
List<TaskVo> taskList = page.getRecords();
@@ -410,6 +404,7 @@
queryWrapper.eq("t.processDefinitionKey", taskBo.getProcessDefinitionKey());
}
queryWrapper.eq("t.assignee_", userId);
+ queryWrapper.orderByDesc("t.START_TIME_");
Page<TaskVo> page = actTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper);
List<TaskVo> taskList = page.getRecords();
@@ -480,7 +475,7 @@
taskService.complete(newTask.getId());
return true;
} catch (Exception e) {
- e.printStackTrace();
+ log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
}
@@ -520,10 +515,9 @@
runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus());
runtimeService.deleteProcessInstance(task.getProcessInstanceId(), StrUtil.EMPTY);
}
- FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey());
- if (processHandler != null) {
- processHandler.handleProcess(historicProcessInstance.getBusinessKey(), BusinessStatusEnum.TERMINATION.getStatus(), false);
- }
+ //娴佺▼缁堟鐩戝惉
+ flowProcessEventHandler.processHandler(historicProcessInstance.getProcessDefinitionKey(),
+ historicProcessInstance.getBusinessKey(), BusinessStatusEnum.TERMINATION.getStatus(), false);
return true;
} catch (Exception e) {
throw new ServiceException(e.getMessage());
@@ -551,7 +545,7 @@
taskService.setAssignee(task.getId(), transmitBo.getUserId());
return true;
} catch (Exception e) {
- e.printStackTrace();
+ log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
}
@@ -599,7 +593,7 @@
taskService.complete(newTask.getId());
return true;
} catch (Exception e) {
- e.printStackTrace();
+ log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
}
@@ -649,7 +643,7 @@
taskService.complete(newTask.getId());
return true;
} catch (Exception e) {
- e.printStackTrace();
+ log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
}
@@ -698,7 +692,9 @@
MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
if (multiInstance == null && taskList.size() > 1) {
List<Task> tasks = StreamUtils.filter(taskList, e -> !e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey()));
- actHiTaskinstMapper.deleteBatchIds(StreamUtils.toList(tasks, Task::getId));
+ if (CollUtil.isNotEmpty(tasks)) {
+ actHiTaskinstMapper.deleteByIds(StreamUtils.toList(tasks, Task::getId));
+ }
}
@@ -721,14 +717,13 @@
WfTaskBackNode wfTaskBackNode = wfTaskBackNodeService.getListByInstanceIdAndNodeId(task.getProcessInstanceId(), backProcessBo.getTargetActivityId());
if (ObjectUtil.isNotNull(wfTaskBackNode) && wfTaskBackNode.getOrderNo() == 0) {
runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus());
- FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
- if (processHandler != null) {
- processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.BACK.getStatus(), false);
- }
+ flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(),
+ processInstance.getBusinessKey(), BusinessStatusEnum.BACK.getStatus(), false);
}
//鍒犻櫎椹冲洖鍚庣殑娴佺▼鑺傜偣
wfTaskBackNodeService.deleteBackTaskNode(processInstanceId, backProcessBo.getTargetActivityId());
} catch (Exception e) {
+ log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
return task.getProcessInstanceId();
@@ -749,6 +744,7 @@
taskService.setAssignee(task.getId(), userId);
}
} catch (Exception e) {
+ log.error("淇敼澶辫触锛�" + e.getMessage(), e);
throw new ServiceException("淇敼澶辫触锛�" + e.getMessage());
}
return true;
--
Gitblit v1.9.3