1、修复任务列表查询接口(没有成员信息)

This commit is contained in:
2026-01-31 12:31:49 +08:00
parent 838a83bb6a
commit 48752f5dd1
5 changed files with 160 additions and 39 deletions

View File

@@ -213,4 +213,10 @@ public class SpdmTaskVo extends BaseEntity {
private String tag9Code;
private String tag10Code;
/**
* 仿真关注人
*/
@JsonProperty(value = "payAttentionMemberList")
private List<CIDUserResp> payAttentionMemberList;
}

View File

@@ -258,4 +258,10 @@ public class SpdmNewTaskVo extends BaseEntity {
private String tag9Code;
private String tag10Code;
/**
* 仿真关注人
*/
@JsonProperty(value = "payAttentionMemberList")
private List<CIDUserResp> payAttentionMemberList;
}

View File

@@ -11,4 +11,11 @@ public interface ISimulationTaskMemberService extends IService<SimulationTaskMem
boolean saveTaskMemberList(String taskId, Integer type, List<Long> userIds);
/**
* 根据任务uuid、成员类型、用户id删除某一类型的成员信息
* @param taskId 任务uuid
* @param type 成员类型(0仿真负责人1仿真执行人23D负责人3关注人)
* @param userIds 用户id
*/
void deleteTaskMemberListByIdList(String taskId, Integer type,List<Long> userIds);
}

View File

@@ -36,4 +36,18 @@ public class SimulationTaskMemberServiceImpl extends ServiceImpl<SimulationTaskM
return true;
}
/**
* 根据任务uuid、成员类型、用户id删除某一类型的成员信息
* @param taskId 任务uuid
* @param type 成员类型(0仿真负责人1仿真执行人23D负责人3关注人)
* @param userIds 用户id
*/
@Override
public void deleteTaskMemberListByIdList(String taskId, Integer type,List<Long> userIds) {
LambdaQueryWrapper<SimulationTaskMember> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SimulationTaskMember::getTaskId, taskId).eq(SimulationTaskMember::getType, type)
.in(SimulationTaskMember::getUserId, userIds);
this.remove(wrapper);
}
}

View File

@@ -595,67 +595,144 @@ public class TaskServiceImpl implements ITaskService {
return taskList.subList(start, end);
}
/**
* 根据用户ID列表获取用户信息列表
* @param userIdList 用户ID列表可为空
* @param cidUserMap 用户ID->用户信息的映射
* @return 匹配到的用户信息列表
*/
private List<CIDUserResp> getCidUserListByUserId(List<Long> userIdList, Map<Long, CIDUserResp> cidUserMap) {
if (CollectionUtils.isEmpty(userIdList)) {
return new ArrayList<>();
}
return userIdList.stream()
.map(cidUserMap::get)
.filter(Objects::nonNull) // 过滤掉未匹配到的用户
.collect(Collectors.toList());
}
/**
* 设置任务成员信息(负责人/执行人/关注人)
* @param newTaskVo 目标VO
* @param taskMemberList 该任务的成员列表
* @param cidUserMap 用户ID->用户信息的映射
*/
private void setTaskMemberInfo(SpdmNewTaskVo newTaskVo,
List<SpdmTaskMemberVo> taskMemberList,
Map<Long, CIDUserResp> cidUserMap) {
// 成员列表为空或用户映射为空,直接返回
if (CollectionUtils.isEmpty(taskMemberList) || cidUserMap.isEmpty()) {
return;
}
// 按成员类型分组,减少多次流式过滤(一次分组,多次使用)
Map<Integer, List<Long>> memberType2UserIdMap = taskMemberList.stream()
.collect(Collectors.groupingBy(
SpdmTaskMemberVo::getType,
Collectors.mapping(SpdmTaskMemberVo::getUserId, Collectors.toList())
));
// 设置负责人
newTaskVo.setPMemberList(getCidUserListByUserId(memberType2UserIdMap.get(MemberTypeEnum.PRINCIPAL.getCode()), cidUserMap));
// 设置执行人
newTaskVo.setEMemberList(getCidUserListByUserId(memberType2UserIdMap.get(MemberTypeEnum.EXECUTOR.getCode()), cidUserMap));
// 设置关注人
newTaskVo.setPayAttentionMemberList(getCidUserListByUserId(memberType2UserIdMap.get(MemberTypeEnum.ATTENTION.getCode()), cidUserMap));
}
/**
* 设置需求相关信息(需求名称/提出人/提出人名称)
* @param newTaskVo 目标VO
* @param demandId 需求ID
* @param demandMap 需求ID->需求VO的映射
* @param demandSubmitMap 需求ID->提出人用户ID的映射
*/
private void setDemandRelatedInfo(SpdmNewTaskVo newTaskVo,
String demandId,
Map<String, SpdmDemandVo> demandMap,
Map<String, Long> demandSubmitMap) {
if (StringUtils.isBlank(demandId)) {
return;
}
// 设置需求名称(没有就返回空字符串)
SpdmDemandVo demandVo = demandMap.getOrDefault(demandId, new SpdmDemandVo());
newTaskVo.setDemandName(Optional.ofNullable(demandVo.getDemandName()).orElse(""));
// 设置提出人ID
Long submitterId = demandSubmitMap.get(demandId);
newTaskVo.setSubmitter(submitterId);
// 设置提出人名称提出人ID不为空时查询
if (submitterId != null) {
SdmResponse<CIDUserResp> userResp = sysUserFeignClient.queryUserDetail(
UserQueryReq.builder().userId(submitterId).build()
);
if (ObjectUtils.isNotEmpty(userResp) && ObjectUtils.isNotEmpty(userResp.getData())) {
newTaskVo.setSubmitterName(userResp.getData().getNickname());
}
}
}
/**
* 批量转换为返回VO
*/
private List<SpdmNewTaskVo> convertToNewVoBatch(List<SpdmTaskVo> taskList, BatchAssociatedData batchData) {
// 空值安全处理,直接返回空集合
if (CollectionUtils.isEmpty(taskList)) {
return new ArrayList<>();
}
List<SpdmNewTaskVo> newTaskList = new ArrayList<>();
// 从批量数据中获取各映射关系
Map<String, List<TaskNodeExtraPo>> taskExtraMap = batchData.getTaskExtraMap();
Map<String, SpdmDemandVo> demandMap = batchData.getDemandMap();
Map<String, Long> demandSubmitMap = batchData.getDemandSubmitMap();
Map<String, SimulationNode> workSpaceNodeMap = batchData.getWorkSpaceNodeMap();
TaskNodeTag taskNodeTag = batchData.getTaskNodeTag();
List<SpdmNewTaskVo> newTaskList = new ArrayList<>(taskList.size());
// 1. 处理任务成员&用户信息
Map<String, List<SpdmTaskMemberVo>> taskMemberMap = Collections.emptyMap();
Map<Long, CIDUserResp> cidUserMap = Collections.emptyMap();
List<SpdmTaskMemberVo> allTaskMemberVoList = batchData.getTaskMemberVoList();
if (CollectionUtils.isNotEmpty(allTaskMemberVoList)) {
// 过滤当前批次任务的成员
Set<String> taskIdSet = taskList.stream().map(SpdmTaskVo::getUuid).collect(Collectors.toSet());
List<SpdmTaskMemberVo> currentTaskMemberList = allTaskMemberVoList.stream()
.filter(member -> taskIdSet.contains(member.getTaskId()))
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(currentTaskMemberList)) {
// 任务ID -> 成员列表的映射
taskMemberMap = currentTaskMemberList.stream()
.collect(Collectors.groupingBy(SpdmTaskMemberVo::getTaskId));
// 获取去重的用户ID查询用户并转为MapuserId -> CIDUserResp
Set<Long> userIdSet = currentTaskMemberList.stream()
.map(SpdmTaskMemberVo::getUserId)
.collect(Collectors.toSet());
cidUserMap = getCidUserList(new ArrayList<>(userIdSet)).stream()
.collect(Collectors.toMap(CIDUserResp::getUserId, user -> user, (k1, k2) -> k1)); // 处理重复用户ID保留第一个
}
}
// 2. 批量转换每个任务VO
for (SpdmTaskVo taskVo : taskList) {
SpdmNewTaskVo spdmNewTaskVo = new SpdmNewTaskVo();
SpdmNewTaskVo newTaskVo = new SpdmNewTaskVo();
try {
BeanUtils.copyProperties(taskVo, spdmNewTaskVo);
BeanUtils.copyProperties(taskVo, newTaskVo);
String taskId = taskVo.getUuid();
// 设置标签字段
spdmNewTaskVo.setTag1(taskVo.getTag1());
spdmNewTaskVo.setTag2(taskVo.getTag2());
spdmNewTaskVo.setTag3(taskVo.getTag3());
spdmNewTaskVo.setTag4(taskVo.getTag4());
spdmNewTaskVo.setTag5(taskVo.getTag5());
spdmNewTaskVo.setTag6(taskVo.getTag6());
spdmNewTaskVo.setTag7(taskVo.getTag7());
spdmNewTaskVo.setTag8(taskVo.getTag8());
spdmNewTaskVo.setTag9(taskVo.getTag9());
spdmNewTaskVo.setTag10(taskVo.getTag10());
// 3. 设置任务扩展信息(没有就返回空集合)
newTaskVo.setExtras(taskExtraMap.getOrDefault(taskId, new ArrayList<>()));
// 设置成员列表
spdmNewTaskVo.setPMemberList(taskVo.getPMemberList());
spdmNewTaskVo.setEMemberList(taskVo.getEMemberList());
// 4. 设置任务成员信息(负责人/执行人/关注人)
setTaskMemberInfo(newTaskVo, taskMemberMap.get(taskId), cidUserMap);
// 设置扩展信息
spdmNewTaskVo.setExtras(taskExtraMap.getOrDefault(taskVo.getUuid(), new ArrayList<>()));
// 5. 设置需求相关信息(提出人/提出人名称)
setDemandRelatedInfo(newTaskVo, taskVo.getDemandId(), demandMap, demandSubmitMap);
// 设置需求信息
if (StringUtils.isNotBlank(taskVo.getDemandId())) {
spdmNewTaskVo.setDemandName(demandMap.getOrDefault(taskVo.getDemandId(), new SpdmDemandVo()).getDemandName());
spdmNewTaskVo.setSubmitter(demandSubmitMap.get(taskVo.getDemandId()));
// 6. 设置工位号信息
setWorkSpaceNodeCode(newTaskVo, taskVo, workSpaceNodeMap, taskNodeTag);
// 查询提出人名称
if (spdmNewTaskVo.getSubmitter() != null) {
SdmResponse<CIDUserResp> cidUserResp = sysUserFeignClient.queryUserDetail(
UserQueryReq.builder().userId(spdmNewTaskVo.getSubmitter()).build()
);
if (ObjectUtils.isNotEmpty(cidUserResp.getData())) {
spdmNewTaskVo.setSubmitterName(cidUserResp.getData().getNickname());
}
}
}
// 设置工位号
setWorkSpaceNodeCode(spdmNewTaskVo, taskVo, workSpaceNodeMap, taskNodeTag);
newTaskList.add(spdmNewTaskVo);
newTaskList.add(newTaskVo);
} catch (Exception e) {
log.error("VO转换异常taskId:{}", taskVo.getUuid(), e);
// 单个任务转换失败不影响整体查询
log.error("任务VO转换异常taskId:{}", taskVo.getUuid(), e);
}
}
@@ -862,6 +939,13 @@ public class TaskServiceImpl implements ITaskService {
));
}
List<CIDUserResp> getCidUserList(List<Long> userIdList) {
if (CollectionUtils.isEmpty(userIdList)) return new ArrayList<>();
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(userIdList).build());
if (!cidUserResp.isSuccess() || CollectionUtils.isEmpty(cidUserResp.getData())) return new ArrayList<>();
return cidUserResp.getData();
}
private void setPMemberList(SpdmTaskVo task, List<SpdmTaskMemberVo> eachMemberList) {
// 由于我分发的、我执行的、我关注的、所有任务,都需要展示仿真负责人,故将负责人抽成方法调用
List<Long> pUserIdList = eachMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && StringUtils.equals(task.getUuid(), member.getTaskId())).map(SpdmTaskMemberVo::getUserId).distinct().toList();
@@ -1614,8 +1698,12 @@ public class TaskServiceImpl implements ITaskService {
attentionList.add(spdmTaskAttentionReq);
}
mapper.saveAttentionList(attentionList);
// task_member也新增下兼容新逻辑
simulationTaskMemberService.saveTaskMemberList(taskId, MemberTypeEnum.ATTENTION.getCode(), addUserIdList);
} else {
mapper.deleteAttentionByUserIdList(taskId, cancelUserIdList);
// task_member也删除下兼容新逻辑
simulationTaskMemberService.deleteTaskMemberListByIdList(taskId, MemberTypeEnum.ATTENTION.getCode(), addUserIdList);
}
return SdmResponse.success();
}