update 优化 工作流待办任务查询

dev
疯狂的狮子Li 6 months ago
parent 0b8b47d857
commit 54f04c3cdf

@ -145,6 +145,7 @@ public class FlowTaskVo implements Serializable {
/** /**
* *
*/ */
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assigneeIds")
private String assigneeNames; private String assigneeNames;
/** /**

@ -141,14 +141,6 @@ public interface IFlwInstanceService {
*/ */
FlowInstance selectByTaskId(Long taskId); FlowInstance selectByTaskId(Long taskId);
/**
* id
*
* @param taskIdList id
* @return
*/
List<FlowInstance> selectByTaskIdList(List<Long> taskIdList);
/** /**
* *
* *

@ -14,7 +14,6 @@ import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* *
@ -150,14 +149,6 @@ public interface IFlwTaskService {
*/ */
List<FlowNode> getNextNodeList(FlowNextNodeBo bo); List<FlowNode> getNextNodeList(FlowNextNodeBo bo);
/**
* id
*
* @param taskIdList id
* @return
*/
List<FlowHisTask> selectHisTaskByIdList(List<Long> taskIdList);
/** /**
* id * id
* *
@ -166,14 +157,6 @@ public interface IFlwTaskService {
*/ */
FlowHisTask selectHisTaskById(Long taskId); FlowHisTask selectHisTaskById(Long taskId);
/**
* id
*
* @param instanceIdList id
* @return
*/
List<FlowTask> selectByInstIdList(List<Long> instanceIdList);
/** /**
* id * id
* *
@ -191,14 +174,6 @@ public interface IFlwTaskService {
*/ */
boolean taskOperation(TaskOperationBo bo, String taskOperation); boolean taskOperation(TaskOperationBo bo, String taskOperation);
/**
*
*
* @param taskIdList id
* @return
*/
Map<Long, List<RemoteUserVo>> currentTaskAllUser(List<Long> taskIdList);
/** /**
* *
* *

@ -379,31 +379,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
return null; return null;
} }
/**
* id
*
* @param taskIdList id
*/
@Override
public List<FlowInstance> selectByTaskIdList(List<Long> taskIdList) {
if (CollUtil.isEmpty(taskIdList)) {
return Collections.emptyList();
}
Set<Long> instanceIds = new HashSet<>();
List<FlowTask> flowTaskList = flwTaskService.selectByIdList(taskIdList);
for (FlowTask flowTask : flowTaskList) {
instanceIds.add(flowTask.getInstanceId());
}
List<FlowHisTask> flowHisTaskList = flwTaskService.selectHisTaskByIdList(taskIdList);
for (FlowHisTask flowHisTask : flowHisTaskList) {
instanceIds.add(flowHisTask.getInstanceId());
}
if (!instanceIds.isEmpty()) {
return this.selectInstListByIdList(new ArrayList<>(instanceIds));
}
return Collections.emptyList();
}
/** /**
* *
* *

@ -57,7 +57,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static org.dromara.workflow.common.constant.FlowConstant.*; import static org.dromara.workflow.common.constant.FlowConstant.*;
@ -256,14 +255,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
hisTask.setCreateTime(updateTime); hisTask.setCreateTime(updateTime);
hisTask.setUpdateTime(updateTime); hisTask.setUpdateTime(updateTime);
hisTaskService.save(hisTask); hisTaskService.save(hisTask);
List<User> userList = flowCopyList.stream() List<User> userList = StreamUtils.toList(flowCopyList, x ->
.map(flowCopy -> { new FlowUser()
FlowUser flowUser = new FlowUser(); .setType(TaskAssigneeType.COPY.getCode())
flowUser.setType(TaskAssigneeType.COPY.getCode()); .setProcessedBy(String.valueOf(x.getUserId()))
flowUser.setProcessedBy(String.valueOf(flowCopy.getUserId())); .setAssociated(taskId)
flowUser.setAssociated(taskId); );
return flowUser;
}).collect(Collectors.toList());
// 批量保存抄送人员 // 批量保存抄送人员
FlowEngine.userService().saveBatch(userList); FlowEngine.userService().saveBatch(userList);
} }
@ -280,7 +277,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr());
queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
Page<FlowTaskVo> page = this.getFlowTaskVoPage(pageQuery, queryWrapper); Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
this.wrapAssigneeInfo(page.getRecords());
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -310,25 +308,28 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
public TableDataInfo<FlowTaskVo> pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { public TableDataInfo<FlowTaskVo> pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo); QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
Page<FlowTaskVo> page = getFlowTaskVoPage(pageQuery, queryWrapper); Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
this.wrapAssigneeInfo(page.getRecords());
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
private Page<FlowTaskVo> getFlowTaskVoPage(PageQuery pageQuery, QueryWrapper<FlowTaskBo> queryWrapper) { /**
Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper); * IDassigneeIds
List<FlowTaskVo> records = page.getRecords(); *
if (CollUtil.isNotEmpty(records)) { * @param taskList
List<Long> taskIds = StreamUtils.toList(records, FlowTaskVo::getId); */
Map<Long, List<RemoteUserVo>> listMap = currentTaskAllUser(taskIds); private void wrapAssigneeInfo(List<FlowTaskVo> taskList) {
records.forEach(t -> { if (CollUtil.isEmpty(taskList)) {
List<RemoteUserVo> userList = listMap.getOrDefault(t.getId(), Collections.emptyList()); return;
if (CollUtil.isNotEmpty(userList)) { }
t.setAssigneeIds(StreamUtils.join(userList, e -> String.valueOf(e.getUserId()))); List<User> associatedUsers = FlowEngine.userService()
t.setAssigneeNames(StreamUtils.join(userList, RemoteUserVo::getNickName)); .getByAssociateds(StreamUtils.toList(taskList, FlowTaskVo::getId));
} Map<Long, List<User>> taskUserMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
}); // 组装用户数据回任务列表
for (FlowTaskVo task : taskList) {
List<User> users = taskUserMap.get(task.getId());
task.setAssigneeIds(StreamUtils.join(users, User::getProcessedBy));
} }
return page;
} }
/** /**
@ -552,18 +553,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return nextFlowNodes; return nextFlowNodes;
} }
/**
* id
*
* @param taskIdList id
* @return
*/
@Override
public List<FlowHisTask> selectHisTaskByIdList(List<Long> taskIdList) {
return flowHisTaskMapper.selectList(new LambdaQueryWrapper<>(FlowHisTask.class)
.in(FlowHisTask::getId, taskIdList));
}
/** /**
* id * id
* *
@ -576,17 +565,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
.eq(FlowHisTask::getId, taskId)); .eq(FlowHisTask::getId, taskId));
} }
/**
* id
*
* @param instanceIdList id
*/
@Override
public List<FlowTask> selectByInstIdList(List<Long> instanceIdList) {
return flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class)
.in(FlowTask::getInstanceId, instanceIdList));
}
/** /**
* id * id
* *
@ -687,15 +665,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
// 批量删除现有任务的办理人记录 // 批量删除现有任务的办理人记录
if (CollUtil.isNotEmpty(flowTasks)) { if (CollUtil.isNotEmpty(flowTasks)) {
FlowEngine.userService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId)); FlowEngine.userService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
List<User> userList = flowTasks.stream() List<User> userList = StreamUtils.toList(flowTasks, flowTask ->
.map(flowTask -> { new FlowUser()
FlowUser flowUser = new FlowUser(); .setType(TaskAssigneeType.APPROVER.getCode())
flowUser.setType(TaskAssigneeType.APPROVER.getCode()); .setProcessedBy(userId)
flowUser.setProcessedBy(userId); .setAssociated(flowTask.getId())
flowUser.setAssociated(flowTask.getId()); );
return flowUser;
})
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(userList)) { if (CollUtil.isNotEmpty(userList)) {
FlowEngine.userService().saveBatch(userList); FlowEngine.userService().saveBatch(userList);
} }
@ -707,27 +682,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return true; return true;
} }
/**
*
*
* @param taskIdList id
*/
@Override
public Map<Long, List<RemoteUserVo>> currentTaskAllUser(List<Long> taskIdList) {
Map<Long, List<RemoteUserVo>> map = new HashMap<>();
// 获取与当前任务关联的用户列表
List<User> associatedUsers = FlowEngine.userService().getByAssociateds(taskIdList);
Map<Long, List<User>> listMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
for (Map.Entry<Long, List<User>> entry : listMap.entrySet()) {
List<User> value = entry.getValue();
if (CollUtil.isNotEmpty(value)) {
List<RemoteUserVo> userDtoList = remoteUserService.selectListByIds(StreamUtils.toList(value, e -> Convert.toLong(e.getProcessedBy())));
map.put(entry.getKey(), userDtoList);
}
}
return map;
}
/** /**
* *
* *

Loading…
Cancel
Save