fix[project]: 查询团队成员时,返回值新增用户类型作为区分

This commit is contained in:
2026-04-17 14:42:56 +08:00
parent 06d3888673
commit cfbfa1ffbf
5 changed files with 76 additions and 4 deletions

View File

@@ -70,5 +70,10 @@ public class CIDStaffResp implements Serializable {
@Schema(description="关联role集合") @Schema(description="关联role集合")
private List<CIDRoleResp> roleList = new ArrayList<>(); private List<CIDRoleResp> roleList = new ArrayList<>();
/**
* 用户类型0团队成员3项目参与人员
*/
@Schema(description = "用户类型0团队成员3项目参与人员")
private Integer userType = 0;
} }

View File

@@ -62,6 +62,8 @@ public interface SimulationNodeMapper extends BaseMapper<SimulationNode> {
List<SpdmNodeMemberVo> getNodeMemberListByNodeIdList(@Param("nodeIdList") List<String> nodeIdList); List<SpdmNodeMemberVo> getNodeMemberListByNodeIdList(@Param("nodeIdList") List<String> nodeIdList);
List<SpdmNodeMemberVo> getOnlyNodeMemberListByNodeIdList(@Param("nodeIdList") List<String> nodeIdList);
List<ProjectNodePo> allList(@Param("nodeIdList") List<String> deleteNodeList); List<ProjectNodePo> allList(@Param("nodeIdList") List<String> deleteNodeList);
void deleteTaskBatch(List<String> deleteNodeIdList); void deleteTaskBatch(List<String> deleteNodeIdList);

View File

@@ -23,5 +23,7 @@ public class SpdmNodeMemberVo extends BaseEntity {
private Long userId; private Long userId;
private Integer type;
} }

View File

@@ -2042,7 +2042,6 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
return SdmResponse.success(jsonObject); return SdmResponse.success(jsonObject);
} }
List<Long> userIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().collect(Collectors.toList()); List<Long> userIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().collect(Collectors.toList());
;
// 查询node节点下的task的成员仿真负责人和执行人 // 查询node节点下的task的成员仿真负责人和执行人
List<SimulationTask> taskList = simulationTaskService.lambdaQuery().in(SimulationTask::getNodeId, allNodeIdList).list(); List<SimulationTask> taskList = simulationTaskService.lambdaQuery().in(SimulationTask::getNodeId, allNodeIdList).list();
@@ -2067,9 +2066,26 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
jsonObject.put("data", new ArrayList<CIDUserResp>()); jsonObject.put("data", new ArrayList<CIDUserResp>());
return SdmResponse.success(jsonObject); return SdmResponse.success(jsonObject);
} }
jsonObject.put("data", userList.stream().skip((long) (req.getCurrent() - 1) * req.getSize()).limit(req.getSize()).toList());
jsonObject.put("currentPage", req.getCurrent()); int current = req.getCurrent();
jsonObject.put("pageSize", req.getSize()); int size = req.getSize();
Map<Long, List<SpdmNodeMemberVo>> memberMap = spdmNodeMemberVoList.stream()
.collect(Collectors.groupingBy(SpdmNodeMemberVo::getUserId));
// 区分用户类型,前端分为两个表格展示 团队成员和项目参与人员
// 即是团队成语又是项目参与人员,理论上不允许这种情况,可能是脏数据,直接作为团队成员
List<CIDStaffResp> staffRespList = userList.stream()
.skip((long) (current - 1) * size)
.limit(size)
.peek(staff -> Optional.ofNullable(memberMap.get(staff.getUserId()))
.filter(CollectionUtils::isNotEmpty)
.ifPresent(list -> staff.setUserType(
list.size() > 1 ? NodeMemberTypeEnum.PARTICIPANT.getCode() : list.get(0).getType()
)))
.toList();
jsonObject.put("data", staffRespList);
jsonObject.put("currentPage", current);
jsonObject.put("pageSize", size);
jsonObject.put("total", userList.size()); jsonObject.put("total", userList.size());
return SdmResponse.success(jsonObject); return SdmResponse.success(jsonObject);
} }
@@ -5226,12 +5242,46 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
@Override @Override
public SdmResponse addNodeMember(SpdmAddNodeMemberReq req) { public SdmResponse addNodeMember(SpdmAddNodeMemberReq req) {
Long tenantId = ThreadLocalContext.getTenantId();
log.info("addNodeMember params{}",req); log.info("addNodeMember params{}",req);
String projectId = req.getProjectId(); String projectId = req.getProjectId();
List<Long> addNodeMemberIdList = req.getAddNodeMemberIdList(); List<Long> addNodeMemberIdList = req.getAddNodeMemberIdList();
if (StringUtils.isBlank(projectId) || CollectionUtils.isEmpty(addNodeMemberIdList)) { if (StringUtils.isBlank(projectId) || CollectionUtils.isEmpty(addNodeMemberIdList)) {
return SdmResponse.failed("参数不能为空"); return SdmResponse.failed("参数不能为空");
} }
// 查询当前项目的团队成员,如果是团队成员,则不允许添加
List<SpdmNodeMemberVo> spdmNodeMemberVoList = nodeMapper.getOnlyNodeMemberListByNodeIdList(Collections.singletonList(projectId));
List<Long> expUserIdList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(spdmNodeMemberVoList)) {
List<Long> existUserIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).toList();
for (Long userId : addNodeMemberIdList) {
if (existUserIdList.contains(userId)) {
expUserIdList.add(userId);
}
}
}
if (CollectionUtils.isNotEmpty(expUserIdList)) {
expUserIdList = expUserIdList.stream().distinct().toList();
String errorMsg = "";
List<String> expUserNameList = new ArrayList<>();
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(expUserIdList).build());
List<CIDUserResp> userList = cidUserResp.getData();
if (CollectionUtils.isNotEmpty(userList)) {
Map<Long, String> userMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUserId,CIDUserResp::getJobNumber,(oldVal,newVal) -> oldVal));
for (Long expUserId : expUserIdList) {
String userName = userMap.get(expUserId);
if (StringUtils.isBlank(userName)) {
expUserNameList.add(String.valueOf(expUserId));
}else {
expUserNameList.add(userName);
}
}
errorMsg = "用户:" + expUserNameList.stream().collect(Collectors.joining(",")) + "已经是团队成员,不能再添加为项目参与人";
}
return SdmResponse.failed(errorMsg);
}
Long userId = ThreadLocalContext.getUserId(); Long userId = ThreadLocalContext.getUserId();
String currentDateTime = DateUtils.getCurrentDateTime(); String currentDateTime = DateUtils.getCurrentDateTime();
List<SimulationNodeMember> nodeMemberList = new ArrayList<>(); List<SimulationNodeMember> nodeMemberList = new ArrayList<>();

View File

@@ -392,6 +392,19 @@
group by user_id, type,nodeId group by user_id, type,nodeId
</select> </select>
<select id="getOnlyNodeMemberListByNodeIdList" resultType="com.sdm.project.model.vo.SpdmNodeMemberVo">
select
DISTINCT user_id, type,nodeId
from
simulation_node_member
where nodeId in (
<foreach collection='nodeIdList' item='nodeId' index='index' separator=','>
#{nodeId}
</foreach>
) and type = 0
group by user_id, type,nodeId
</select>
<select id="getNodeById" resultType="com.sdm.project.model.vo.SpdmNodeVo"> <select id="getNodeById" resultType="com.sdm.project.model.vo.SpdmNodeVo">
select * select *
from simulation_node from simulation_node