add 抄送任务

This commit is contained in:
songgaoshuai 2024-02-29 20:01:04 +08:00
parent c3b8681a03
commit bc218cb23a
4 changed files with 74 additions and 17 deletions

View File

@ -3,6 +3,7 @@ package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.workflow.domain.vo.WfCopy;
import java.io.Serial;
import java.io.Serializable;
@ -33,6 +34,11 @@ public class CompleteTaskBo implements Serializable {
*/
private String fileId;
/**
* 抄送人员
*/
private List<WfCopy> wfCopyList;
/**
* 消息类型
*/

View File

@ -0,0 +1,23 @@
package org.dromara.workflow.domain.vo;
import lombok.Data;
/**
* 抄送
*
* @author may
*/
@Data
public class WfCopy {
/**
* 用户id
*/
private Long userId;
/**
* 用户名称
*/
private String userName;
}

View File

@ -20,6 +20,7 @@ import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.MultiInstanceVo;
import org.dromara.workflow.domain.vo.TaskVo;
import org.dromara.workflow.domain.vo.WfCopy;
import org.dromara.workflow.flowable.strategy.FlowEventStrategy;
import org.dromara.workflow.flowable.cmd.*;
import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler;
@ -190,6 +191,14 @@ public class ActTaskServiceImpl implements IActTaskService {
}
} else {
List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list();
if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(completeTaskBo.getWfCopyList())) {
TaskEntity newTask = WorkflowUtils.createNewTask(task);
taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(),
LoginHelper.getLoginUser().getNickname() + "【抄送】给" + String.join(",", StreamUtils.toList(completeTaskBo.getWfCopyList(), WfCopy::getUserName)));
taskService.complete(newTask.getId());
List<Task> taskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();
WorkflowUtils.createCopyTask(taskList, StreamUtils.toList(completeTaskBo.getWfCopyList(), WfCopy::getUserId));
}
sendMessage(list, processInstance.getName(), completeTaskBo.getMessageType(), null);
}
return true;

View File

@ -2,15 +2,11 @@ package org.dromara.workflow.utils;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.reflect.ReflectUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mail.utils.MailUtils;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.common.websocket.dto.WebSocketMessageDto;
@ -28,10 +24,8 @@ import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd;
import org.dromara.workflow.service.IActHiProcinstService;
import org.dromara.workflow.service.IWorkflowUserService;
import org.dromara.workflow.service.impl.WorkflowUserServiceImpl;
import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.*;
import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.editor.language.json.converter.BpmnJsonConverter;
import org.flowable.engine.ProcessEngine;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
@ -41,14 +35,7 @@ import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.rmi.ServerException;
import java.util.*;
import java.util.stream.Collectors;
import static org.dromara.workflow.common.constant.FlowConstant.*;
@ -95,6 +82,40 @@ public class WorkflowUtils {
return task;
}
/**
* 抄送任务
*
* @param parentTaskList 父级任务
* @param userIds 人员id
*/
public static void createCopyTask(List<Task> parentTaskList, List<Long> userIds) {
List<Task> list = new ArrayList<>();
for (Task parentTask : parentTaskList) {
for (Long userId : userIds) {
TaskEntity newTask = (TaskEntity) PROCESS_ENGINE.getTaskService().newTask();
newTask.setParentTaskId(parentTask.getId());
newTask.setAssignee(userId.toString());
newTask.setName("【抄送】-" + parentTask.getName());
newTask.setProcessDefinitionId(parentTask.getProcessDefinitionId());
newTask.setProcessInstanceId(parentTask.getProcessInstanceId());
newTask.setTaskDefinitionKey(parentTask.getTaskDefinitionKey());
list.add(newTask);
}
}
PROCESS_ENGINE.getTaskService().bulkSaveTasks(list);
/*if (CollectionUtil.isNotEmpty(list) && CollectionUtil.isNotEmpty(parentTaskList)) {
String processInstanceId = parentTaskList.get(0).getProcessInstanceId();
String processDefinitionId = parentTaskList.get(0).getProcessDefinitionId();
List<String> taskIds = list.stream().map(Task::getId).collect(Collectors.toList());
ActHiTaskinst actHiTaskinst = new ActHiTaskinst();
actHiTaskinst.setProcDefId(processDefinitionId);
actHiTaskinst.setProcInstId(processInstanceId);
LambdaUpdateWrapper<ActHiTaskinst> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ActHiTaskinst::getId, Collections.singletonList(taskIds));
actHiTaskinstMapper.update(actHiTaskinst, updateWrapper);
}*/
}
/**
* 获取当前任务参与者
*
@ -188,8 +209,7 @@ public class WorkflowUtils {
*/
public static String getBusinessStatusByTaskId(String taskId) {
HistoricTaskInstance historicTaskInstance = PROCESS_ENGINE.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskId).taskTenantId(TenantHelper.getTenantId()).singleResult();
HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery()
.processInstanceId(historicTaskInstance.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(historicTaskInstance.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
return historicProcessInstance.getBusinessStatus();
}
@ -199,8 +219,7 @@ public class WorkflowUtils {
* @param processInstanceId 流程实例id
*/
public static String getBusinessStatus(String processInstanceId) {
HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
return historicProcessInstance.getBusinessStatus();
}