update 调整撤销流程申请,当前登录人单据

This commit is contained in:
gssong 2023-07-01 14:46:05 +08:00
parent d03d88a4e6
commit f227c35fb4
3 changed files with 49 additions and 27 deletions

View File

@ -1,6 +1,8 @@
package org.dromara.workflow.domain.vo;
import lombok.Data;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial;
import java.io.Serializable;
@ -51,11 +53,12 @@ public class ActHistoryInfoVo implements Serializable {
/**
* 办理人id
*/
private String assignee;
private Long assignee;
/**
* 办理人名称
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assignee")
private String nickName;
/**

View File

@ -5,6 +5,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 流程实例视图
@ -86,4 +87,9 @@ public class ProcessInstanceVo implements Serializable {
* 流程状态
*/
private String businessStatusName;
/**
* 待办任务集合
*/
private List<TaskVo> taskVoList;
}

View File

@ -13,8 +13,6 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysUserService;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.BusinessStatusEnum;
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
@ -22,6 +20,7 @@ import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
import org.dromara.workflow.domain.vo.GraphicInfoVo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import org.dromara.workflow.domain.vo.TaskVo;
import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator;
import org.dromara.workflow.service.IActProcessInstanceService;
import org.flowable.bpmn.model.*;
@ -62,7 +61,6 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
private final RepositoryService repositoryService;
private final RuntimeService runtimeService;
private final HistoryService historyService;
private final ISysUserService iSysUserService;
private final TaskService taskService;
@Value("${flowable.activity-font-name}")
@ -249,18 +247,14 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
}
if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) {
actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis()));
}
try {
actHistoryInfoVo.setAssignee(StringUtils.isNotBlank(historicTaskInstance.getAssignee()) ? Long.valueOf(historicTaskInstance.getAssignee()) : null);
} catch (NumberFormatException ignored) {
}
actHistoryInfoVoList.add(actHistoryInfoVo);
}
//翻译人员名称
if (CollUtil.isNotEmpty(actHistoryInfoVoList)) {
actHistoryInfoVoList.forEach(e -> {
if (StringUtils.isNotBlank(e.getAssignee())) {
SysUserVo sysUserVo = iSysUserService.selectUserById(Long.valueOf(e.getAssignee()));
e.setNickName(ObjectUtil.isNotEmpty(sysUserVo) ? sysUserVo.getNickName() : "");
}
});
}
List<ActHistoryInfoVo> nodeInfoList = new ArrayList<>();
Map<String, List<ActHistoryInfoVo>> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey);
for (Map.Entry<String, List<ActHistoryInfoVo>> entry : groupByKey.entrySet()) {
@ -421,25 +415,28 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
@Override
@Transactional(rollbackFor = Exception.class)
public boolean cancelProcessApply(String processInstanceId) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).startedBy(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isNull(processInstance)) {
throw new ServiceException("您不是流程发起人,撤销失败!");
}
if (processInstance.isSuspended()) {
throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED);
}
BusinessStatusEnum.checkStatus(processInstance.getBusinessStatus());
List<Task> taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list();
for (Task task : taskList) {
taskService.addComment(task.getId(), processInstanceId, "申请人撤销申请");
}
try {
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().finished().list().get(0);
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).startedBy(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isNull(processInstance)) {
throw new ServiceException("您不是流程发起人,撤销失败!");
}
if (processInstance.isSuspended()) {
throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED);
}
BusinessStatusEnum.checkStatus(processInstance.getBusinessStatus());
List<Task> taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list();
for (Task task : taskList) {
taskService.setAssignee(task.getId(), String.valueOf(LoginHelper.getUserId()));
taskService.addComment(task.getId(), processInstanceId, LoginHelper.getUsername() + ":撤销申请");
}
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0);
List<String> nodeIds = StreamUtils.toList(taskList, Task::getTaskDefinitionKey);
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId)
.moveActivityIdsToSingleActivityId(nodeIds, historicTaskInstance.getTaskDefinitionKey()).changeState();
Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list().get(0);
taskService.setAssignee(task.getId(), historicTaskInstance.getAssignee());
runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus());
return true;
} catch (Exception e) {
@ -465,10 +462,26 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
if (StringUtils.isNotBlank(processInstanceBo.getBusinessKey())) {
query.processInstanceBusinessKey(processInstanceBo.getBusinessKey());
}
if (StringUtils.isNotBlank(processInstanceBo.getCategoryCode())) {
query.processInstanceBusinessKey(processInstanceBo.getCategoryCode());
}
query.orderByProcessInstanceStartTime().desc();
List<HistoricProcessInstance> historicProcessInstanceList = query.listPage(processInstanceBo.getPageNum(), processInstanceBo.getPageSize());
List<TaskVo> taskVoList = new ArrayList<>();
if (CollUtil.isNotEmpty(historicProcessInstanceList)) {
List<String> processInstanceIds = StreamUtils.toList(historicProcessInstanceList, HistoricProcessInstance::getId);
List<Task> taskList = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).taskTenantId(TenantHelper.getTenantId()).list();
for (Task task : taskList) {
taskVoList.add(BeanUtil.toBean(task, TaskVo.class));
}
}
for (HistoricProcessInstance processInstance : historicProcessInstanceList) {
ProcessInstanceVo processInstanceVo = BeanUtil.toBean(processInstance, ProcessInstanceVo.class);
processInstanceVo.setBusinessStatusName(BusinessStatusEnum.getEumByStatus(processInstance.getBusinessStatus()));
if (CollUtil.isNotEmpty(taskVoList)) {
List<TaskVo> collect = taskVoList.stream().filter(e -> e.getProcessInstanceId().equals(processInstance.getId())).collect(Collectors.toList());
processInstanceVo.setTaskVoList(CollUtil.isNotEmpty(collect) ? collect : Collections.emptyList());
}
list.add(processInstanceVo);
}
long count = query.count();