update 优化获取流程记录

This commit is contained in:
AprilWind 2025-07-02 18:21:53 +08:00
parent 9dfe9f610d
commit f8950d1e20

View File

@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.dto.UserDTO;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
@ -19,11 +18,13 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.warm.flow.core.FlowEngine;
import org.dromara.warm.flow.core.constant.ExceptionCons; import org.dromara.warm.flow.core.constant.ExceptionCons;
import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.entity.Definition;
import org.dromara.warm.flow.core.entity.Instance; import org.dromara.warm.flow.core.entity.Instance;
import org.dromara.warm.flow.core.entity.Task; import org.dromara.warm.flow.core.entity.Task;
import org.dromara.warm.flow.core.entity.User;
import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.NodeType;
import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.core.service.DefService;
import org.dromara.warm.flow.core.service.InsService; import org.dromara.warm.flow.core.service.InsService;
@ -283,37 +284,50 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE); throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
} }
Long instanceId = flowInstance.getId(); Long instanceId = flowInstance.getId();
//运行中的任务
List<FlowHisTaskVo> list = new ArrayList<>(); // 先组装待审批任务运行中的任务
List<FlowTask> flowTaskList = flwTaskService.selectByInstId(instanceId); List<FlowHisTaskVo> runningTaskVos = new ArrayList<>();
if (CollUtil.isNotEmpty(flowTaskList)) { List<FlowTask> runningTasks = flwTaskService.selectByInstId(instanceId);
List<FlowHisTaskVo> flowHisTaskVos = BeanUtil.copyToList(flowTaskList, FlowHisTaskVo.class); if (CollUtil.isNotEmpty(runningTasks)) {
for (FlowHisTaskVo flowHisTaskVo : flowHisTaskVos) { runningTaskVos = BeanUtil.copyToList(runningTasks, FlowHisTaskVo.class);
flowHisTaskVo.setFlowStatus(TaskStatusEnum.WAITING.getStatus());
flowHisTaskVo.setUpdateTime(null); List<User> associatedUsers = FlowEngine.userService()
flowHisTaskVo.setRunDuration(null); .getByAssociateds(StreamUtils.toList(runningTasks, FlowTask::getId));
List<UserDTO> allUser = flwTaskService.currentTaskAllUser(flowHisTaskVo.getId()); Map<Long, List<User>> taskUserMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
if (CollUtil.isNotEmpty(allUser)) {
String join = StreamUtils.join(allUser, e -> String.valueOf(e.getUserId())); for (FlowHisTaskVo vo : runningTaskVos) {
flowHisTaskVo.setApprover(join); vo.setFlowStatus(TaskStatusEnum.WAITING.getStatus());
vo.setUpdateTime(null);
vo.setRunDuration(null);
List<User> users = taskUserMap.get(vo.getId());
if (CollUtil.isNotEmpty(users)) {
vo.setApprover(StreamUtils.join(users, User::getProcessedBy));
} }
if (BusinessStatusEnum.isDraftOrCancelOrBack(flowInstance.getFlowStatus())) { if (BusinessStatusEnum.isDraftOrCancelOrBack(flowInstance.getFlowStatus())) {
flowHisTaskVo.setApprover(LoginHelper.getUserIdStr()); vo.setApprover(LoginHelper.getUserIdStr());
flowHisTaskVo.setApproveName(LoginHelper.getLoginUser().getNickname());
} }
} }
list.addAll(flowHisTaskVos);
} }
//历史任务
LambdaQueryWrapper<FlowHisTask> wrapper = Wrappers.lambdaQuery(); // 再组装历史任务已处理任务
wrapper.eq(FlowHisTask::getInstanceId, instanceId) List<FlowHisTaskVo> hisTaskVos = new ArrayList<>();
.eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey()) List<FlowHisTask> hisTasks = flowHisTaskMapper.selectList(
.orderByDesc(FlowHisTask::getCreateTime, FlowHisTask::getUpdateTime); new LambdaQueryWrapper<FlowHisTask>()
List<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(wrapper); .eq(FlowHisTask::getInstanceId, instanceId)
if (CollUtil.isNotEmpty(flowHisTasks)) { .eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey())
list.addAll(BeanUtil.copyToList(flowHisTasks, FlowHisTaskVo.class)); .orderByDesc(FlowHisTask::getUpdateTime)
);
if (CollUtil.isNotEmpty(hisTasks)) {
hisTaskVos = BeanUtil.copyToList(hisTasks, FlowHisTaskVo.class);
} }
return Map.of("list", list, "instanceId", instanceId);
// 结果列表待审批任务在前历史任务在后
List<FlowHisTaskVo> combinedList = new ArrayList<>();
combinedList.addAll(runningTaskVos);
combinedList.addAll(hisTaskVos);
return Map.of("list", combinedList, "instanceId", instanceId);
} }
/** /**