add 添加任务完成状态

This commit is contained in:
songgaoshuai 2023-07-12 13:35:54 +08:00
parent cbbd81f2b9
commit 4554178f1b
4 changed files with 115 additions and 15 deletions

View File

@ -0,0 +1,89 @@
package org.dromara.workflow.common.enums;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
/**
* 任务状态枚举
*
* @author may
*/
@Getter
@AllArgsConstructor
public enum TaskStatusEnum {
/**
* 撤销
*/
CANCEL("cancel", "撤销"),
/**
* 通过
*/
PASS("pass", "通过"),
/**
* 待审核
*/
WAITING("waiting", "待审核"),
/**
* 作废
*/
INVALID("invalid", "作废"),
/**
* 退回
*/
BACK("back", "退回"),
/**
* 终止
*/
TERMINATION("termination", "终止"),
/**
* 转办
*/
TRANSFER("transfer", "转办"),
/**
* 委托
*/
PENDING("pending", "委托"),
/**
* 抄送
*/
COPY("copy", "抄送"),
/**
* 加签
*/
SIGN("sign", "加签"),
/**
* 减签
*/
SIGN_OFF("sign_off", "减签");
/**
* 状态
*/
private final String status;
/**
* 描述
*/
private final String desc;
/**
* 任务业务状态
*
* @param status 状态
*/
public static String getEnumsByStatus(String status) {
if (StringUtils.isBlank(status)) {
return StrUtil.EMPTY;
}
for (TaskStatusEnum statusEnum : TaskStatusEnum.values()) {
if (statusEnum.getStatus().equals(status)) {
return statusEnum.getDesc();
}
}
return StrUtil.EMPTY;
}
}

View File

@ -50,6 +50,10 @@ public class ActHistoryInfoVo implements Serializable {
* 状态 * 状态
*/ */
private String status; private String status;
/**
* 状态
*/
private String statusName;
/** /**
* 办理人id * 办理人id
*/ */

View File

@ -15,6 +15,7 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.BusinessStatusEnum; import org.dromara.workflow.common.enums.BusinessStatusEnum;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo; import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
@ -239,17 +240,22 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
.processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).orderByHistoricTaskInstanceEndTime().desc().list(); .processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).orderByHistoricTaskInstanceEndTime().desc().list();
list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed()); list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed());
List<ActHistoryInfoVo> actHistoryInfoVoList = new ArrayList<>(); List<ActHistoryInfoVo> actHistoryInfoVoList = new ArrayList<>();
List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId);
for (HistoricTaskInstance historicTaskInstance : list) { for (HistoricTaskInstance historicTaskInstance : list) {
ActHistoryInfoVo actHistoryInfoVo = new ActHistoryInfoVo(); ActHistoryInfoVo actHistoryInfoVo = new ActHistoryInfoVo();
BeanUtils.copyProperties(historicTaskInstance, actHistoryInfoVo); BeanUtils.copyProperties(historicTaskInstance, actHistoryInfoVo);
actHistoryInfoVo.setStatus(actHistoryInfoVo.getEndTime() == null ? "待处理" : "已处理"); if (actHistoryInfoVo.getEndTime() == null) {
List<Comment> taskComments = taskService.getTaskComments(historicTaskInstance.getId()); actHistoryInfoVo.setStatus(TaskStatusEnum.WAITING.getStatus());
if (CollUtil.isNotEmpty(taskComments)) { actHistoryInfoVo.setStatusName(TaskStatusEnum.WAITING.getDesc());
actHistoryInfoVo.setCommentId(taskComments.get(0).getId());
String message = taskComments.stream().map(Comment::getFullMessage).collect(Collectors.joining(""));
if (StringUtils.isNotBlank(message)) {
actHistoryInfoVo.setComment(message);
} }
if (CollUtil.isNotEmpty(processInstanceComments)) {
processInstanceComments.stream().filter(e -> e.getTaskId().equals(historicTaskInstance.getId())).findFirst().ifPresent(e -> {
if (StringUtils.isNotBlank(e.getFullMessage())) {
actHistoryInfoVo.setComment(e.getFullMessage());
actHistoryInfoVo.setStatus(e.getType());
actHistoryInfoVo.setStatusName(TaskStatusEnum.getEnumsByStatus(e.getType()));
}
});
} }
if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) { if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) {
actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis())); actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis()));

View File

@ -15,6 +15,7 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.BusinessStatusEnum; import org.dromara.workflow.common.enums.BusinessStatusEnum;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.MultiInstanceVo; import org.dromara.workflow.domain.vo.MultiInstanceVo;
import org.dromara.workflow.domain.vo.TaskVo; import org.dromara.workflow.domain.vo.TaskVo;
@ -139,7 +140,7 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus()); runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus());
//办理意见 //办理意见
taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "同意" : completeTaskBo.getMessage()); taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "同意" : completeTaskBo.getMessage());
//办理任务 //办理任务
taskService.complete(completeTaskBo.getTaskId(), completeTaskBo.getVariables()); taskService.complete(completeTaskBo.getTaskId(), completeTaskBo.getVariables());
List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list();
@ -348,7 +349,7 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
try { try {
TaskEntity newTask = WorkflowUtils.createNewTask(task); TaskEntity newTask = WorkflowUtils.createNewTask(task);
taskService.addComment(newTask.getId(), task.getProcessInstanceId(), "" + LoginHelper.getUsername() + "】委派给【" + delegateBo.getNickName() + ""); taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.PENDING.getStatus(), "" + LoginHelper.getUsername() + "】委派给【" + delegateBo.getNickName() + "");
//委托任务 //委托任务
taskService.delegateTask(delegateBo.getTaskId(), delegateBo.getUserId()); taskService.delegateTask(delegateBo.getTaskId(), delegateBo.getUserId());
//办理生成的任务记录 //办理生成的任务记录
@ -388,7 +389,7 @@ public class ActTaskServiceImpl implements IActTaskService {
} else { } else {
terminationBo.setComment(LoginHelper.getUsername() + "终止了申请:" + terminationBo.getComment()); terminationBo.setComment(LoginHelper.getUsername() + "终止了申请:" + terminationBo.getComment());
} }
taskService.addComment(task.getId(), task.getProcessInstanceId(), 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)) {
@ -422,7 +423,7 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
try { try {
TaskEntity newTask = WorkflowUtils.createNewTask(task); TaskEntity newTask = WorkflowUtils.createNewTask(task);
taskService.addComment(newTask.getId(), task.getProcessInstanceId(), 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());
@ -468,7 +469,7 @@ public class ActTaskServiceImpl implements IActTaskService {
List<String> assigneeNames = addMultiBo.getAssigneeNames(); List<String> assigneeNames = addMultiBo.getAssigneeNames();
String username = LoginHelper.getUsername(); String username = LoginHelper.getUsername();
TaskEntity newTask = WorkflowUtils.createNewTask(task); TaskEntity newTask = WorkflowUtils.createNewTask(task);
taskService.addComment(newTask.getId(), processInstanceId, username + "加签【" + String.join(StringUtils.SEPARATOR, assigneeNames) + ""); taskService.addComment(newTask.getId(), processInstanceId, TaskStatusEnum.SIGN.getStatus(), username + "加签【" + String.join(StringUtils.SEPARATOR, assigneeNames) + "");
taskService.complete(newTask.getId()); taskService.complete(newTask.getId());
return true; return true;
} catch (Exception e) { } catch (Exception e) {
@ -514,7 +515,7 @@ public class ActTaskServiceImpl implements IActTaskService {
List<String> assigneeNames = deleteMultiBo.getAssigneeNames(); List<String> assigneeNames = deleteMultiBo.getAssigneeNames();
String username = LoginHelper.getUsername(); String username = LoginHelper.getUsername();
TaskEntity newTask = WorkflowUtils.createNewTask(task); TaskEntity newTask = WorkflowUtils.createNewTask(task);
taskService.addComment(newTask.getId(), processInstanceId, username + "减签【" + String.join(StringUtils.SEPARATOR, assigneeNames) + ""); taskService.addComment(newTask.getId(), processInstanceId, TaskStatusEnum.SIGN_OFF.getStatus(), username + "减签【" + String.join(StringUtils.SEPARATOR, assigneeNames) + "");
taskService.complete(newTask.getId()); taskService.complete(newTask.getId());
return true; return true;
} catch (Exception e) { } catch (Exception e) {
@ -549,7 +550,7 @@ public class ActTaskServiceImpl implements IActTaskService {
//申请人节点 //申请人节点
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0);
String backTaskDefinitionKey = historicTaskInstance.getTaskDefinitionKey(); String backTaskDefinitionKey = historicTaskInstance.getTaskDefinitionKey();
taskService.addComment(task.getId(), processInstanceId, 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)