1、修改任务列表的任务数量计算接口
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user