1、修改任务列表的任务数量计算接口

This commit is contained in:
2026-01-30 15:14:29 +08:00
parent 17cbb860d1
commit 4a34623206

View File

@@ -71,6 +71,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.mybatis.spring.MyBatisSystemException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -937,88 +938,14 @@ public class TaskServiceImpl implements ITaskService {
// taskList = taskList.stream().filter(task -> realTaskIdList.contains(task.getUuid())).toList();
if (type == 2) {
// 最终返回的有权限任务列表用LinkedHashSet保证有序+去重,避免同一任务多次添加)
Set<SpdmTaskVo> returnTaskSet = new LinkedHashSet<>();
// 当前用户工号
String jobNumber = ThreadLocalContext.getJobNumber();
// 维度1项目参与人员根据工号匹配任务名称
if (StringUtils.isNotBlank(jobNumber) && lyricFlag == 1) {
try {
// 直接查询并收集用户参与的唯一任务名称
Set<String> userJoinTaskNameSet = lyricVProjectResourcePlanDMService.lambdaQuery()
.eq(LyricVProjectResourcePlanDM::getUser, jobNumber)
.eq(LyricVProjectResourcePlanDM::getDelFlag, DelFlagTypeEnum.NORMAL.getValue())
.list()
.stream()
.map(LyricVProjectResourcePlanDM::getJobname)
.filter(StringUtils::isNotBlank) // 过滤空的任务名称,避免无效匹配
.collect(Collectors.toSet());
// 匹配任务:任务名称在用户参与的任务名称集合中
if (CollectionUtils.isNotEmpty(userJoinTaskNameSet)) {
taskList.stream()
.filter(task -> userJoinTaskNameSet.contains(task.getTaskName()))
.forEach(returnTaskSet::add);
}
} catch (MyBatisSystemException ex) {
log.warn("查询项目参与人员异常(测试环境可能为预期异常),用户工号:{},异常信息:{}", jobNumber, ex.getMessage());
}
}
// 项目节点授权人员根据tag1=项目节点ID匹配用户ID
// 提取原始任务中的非空项目节点ID去重
Set<String> projectNodeIdSet = taskList.stream()
.map(SpdmTaskVo::getTag1)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet());
if (CollectionUtils.isNotEmpty(projectNodeIdSet)) {
// 查询节点授权人员并构建【节点ID -> 授权用户ID】集合的Map做快速匹配
Map<String, Set<Long>> nodeAuthUserIdMap = nodeMapper.getNodeMemberListByNodeIdList(new ArrayList<>(projectNodeIdSet))
.stream()
// 过滤无效数据节点ID/用户ID非空
.filter(member -> member != null
&& StringUtils.isNotBlank(member.getNodeId())
&& member.getUserId() != null)
// 分组节点ID为key用户ID去重为value用Set避免重复
.collect(Collectors.groupingBy(
SpdmNodeMemberVo::getNodeId,
Collectors.mapping(SpdmNodeMemberVo::getUserId, Collectors.toSet())
));
// 匹配任务当前用户ID在任务对应节点的有权限查询的用户集合中
if (MapUtils.isNotEmpty(nodeAuthUserIdMap) && userId != null) {
taskList.stream()
.filter(task -> StringUtils.isNotBlank(task.getTag1()))
.filter(task -> nodeAuthUserIdMap.getOrDefault(task.getTag1(), Collections.emptySet()).contains(userId))
.forEach(returnTaskSet::add);
}
}
// 任务成员根据任务UUID匹配用户ID
if (CollectionUtils.isNotEmpty(taskMemberVoList) && userId != null) {
// 构建【任务ID -> 任务成员用户ID集合】的Map
Map<String, Set<Long>> taskAuthUserIdMap = taskMemberVoList.stream()
// 过滤无效数据任务ID/用户ID非空
.filter(member -> member != null
&& StringUtils.isNotBlank(member.getTaskId())
&& member.getUserId() != null)
// 分组任务ID为key用户ID去重为value
.collect(Collectors.groupingBy(
SpdmTaskMemberVo::getTaskId,
Collectors.mapping(SpdmTaskMemberVo::getUserId, Collectors.toSet())
));
// 匹配任务当前用户ID在任务的成员用户集合中
if (MapUtils.isNotEmpty(taskAuthUserIdMap)) {
taskList.stream()
.filter(task -> StringUtils.isNotBlank(task.getUuid()))
.filter(task -> taskAuthUserIdMap.getOrDefault(task.getUuid(), Collections.emptySet()).contains(userId))
.forEach(returnTaskSet::add);
}
}
// 过滤所有任务
Set<SpdmTaskVo> returnTaskSet = getSpdmTaskVos(taskList, userId, taskMemberVoList);
// 过滤今明任务
Set<SpdmTaskVo> todayReturnTaskSet = getSpdmTaskVos(todayTmrTaskList, userId, taskMemberVoList);
// 去重后的Set转List赋值回任务列表
taskList = new ArrayList<>(returnTaskSet);
todayTmrTaskList = new ArrayList<>(todayReturnTaskSet);
// 所有任务
countTask(taskList, todayTmrTaskList, taskCountResp);
@@ -1078,6 +1005,89 @@ public class TaskServiceImpl implements ITaskService {
return SdmResponse.success(taskCountResp);
}
private Set<SpdmTaskVo> getSpdmTaskVos(List<SpdmTaskVo> taskList, Long userId, List<SpdmTaskMemberVo> taskMemberVoList) {
// 最终返回的有权限任务列表用LinkedHashSet保证有序+去重,避免同一任务多次添加)
Set<SpdmTaskVo> returnTaskSet = new LinkedHashSet<>();
// 当前用户工号
String jobNumber = ThreadLocalContext.getJobNumber();
// 维度1项目参与人员根据工号匹配任务名称
if (StringUtils.isNotBlank(jobNumber) && lyricFlag == 1) {
try {
// 直接查询并收集用户参与的唯一任务名称
Set<String> userJoinTaskNameSet = lyricVProjectResourcePlanDMService.lambdaQuery()
.eq(LyricVProjectResourcePlanDM::getUser, jobNumber)
.eq(LyricVProjectResourcePlanDM::getDelFlag, DelFlagTypeEnum.NORMAL.getValue())
.list()
.stream()
.map(LyricVProjectResourcePlanDM::getJobname)
.filter(StringUtils::isNotBlank) // 过滤空的任务名称,避免无效匹配
.collect(Collectors.toSet());
// 匹配任务:任务名称在用户参与的任务名称集合中
if (CollectionUtils.isNotEmpty(userJoinTaskNameSet)) {
taskList.stream()
.filter(task -> userJoinTaskNameSet.contains(task.getTaskName()))
.forEach(returnTaskSet::add);
}
} catch (MyBatisSystemException ex) {
log.warn("查询项目参与人员异常(测试环境可能为预期异常),用户工号:{},异常信息:{}", jobNumber, ex.getMessage());
}
}
// 项目节点授权人员根据tag1=项目节点ID匹配用户ID
// 提取原始任务中的非空项目节点ID去重
Set<String> projectNodeIdSet = taskList.stream()
.map(SpdmTaskVo::getTag1)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet());
if (CollectionUtils.isNotEmpty(projectNodeIdSet)) {
// 查询节点授权人员并构建【节点ID -> 授权用户ID】集合的Map做快速匹配
Map<String, Set<Long>> nodeAuthUserIdMap = nodeMapper.getNodeMemberListByNodeIdList(new ArrayList<>(projectNodeIdSet))
.stream()
// 过滤无效数据节点ID/用户ID非空
.filter(member -> member != null
&& StringUtils.isNotBlank(member.getNodeId())
&& member.getUserId() != null)
// 分组节点ID为key用户ID去重为value用Set避免重复
.collect(Collectors.groupingBy(
SpdmNodeMemberVo::getNodeId,
Collectors.mapping(SpdmNodeMemberVo::getUserId, Collectors.toSet())
));
// 匹配任务当前用户ID在任务对应节点的有权限查询的用户集合中
if (MapUtils.isNotEmpty(nodeAuthUserIdMap) && userId != null) {
taskList.stream()
.filter(task -> StringUtils.isNotBlank(task.getTag1()))
.filter(task -> nodeAuthUserIdMap.getOrDefault(task.getTag1(), Collections.emptySet()).contains(userId))
.forEach(returnTaskSet::add);
}
}
// 任务成员根据任务UUID匹配用户ID
if (CollectionUtils.isNotEmpty(taskMemberVoList) && userId != null) {
// 构建【任务ID -> 任务成员用户ID集合】的Map
Map<String, Set<Long>> taskAuthUserIdMap = taskMemberVoList.stream()
// 过滤无效数据任务ID/用户ID非空
.filter(member -> member != null
&& StringUtils.isNotBlank(member.getTaskId())
&& member.getUserId() != null)
// 分组任务ID为key用户ID去重为value
.collect(Collectors.groupingBy(
SpdmTaskMemberVo::getTaskId,
Collectors.mapping(SpdmTaskMemberVo::getUserId, Collectors.toSet())
));
// 匹配任务当前用户ID在任务的成员用户集合中
if (MapUtils.isNotEmpty(taskAuthUserIdMap)) {
taskList.stream()
.filter(task -> StringUtils.isNotBlank(task.getUuid()))
.filter(task -> taskAuthUserIdMap.getOrDefault(task.getUuid(), Collections.emptySet()).contains(userId))
.forEach(returnTaskSet::add);
}
}
return returnTaskSet;
}
private void countTask(List<SpdmTaskVo> taskList, List<SpdmTaskVo> todayTmrTaskList, TaskCountResp taskCountResp) {
// 计数
taskCountResp.setTotal(taskList.size());