diff --git a/common/src/main/java/com/sdm/common/entity/resp/system/CIDStaffResp.java b/common/src/main/java/com/sdm/common/entity/resp/system/CIDStaffResp.java index 8b2e30b8..ff345f8e 100644 --- a/common/src/main/java/com/sdm/common/entity/resp/system/CIDStaffResp.java +++ b/common/src/main/java/com/sdm/common/entity/resp/system/CIDStaffResp.java @@ -70,5 +70,10 @@ public class CIDStaffResp implements Serializable { @Schema(description="关联role集合") private List roleList = new ArrayList<>(); + /** + * 用户类型,0:团队成员,3:项目参与人员 + */ + @Schema(description = "用户类型,0:团队成员,3:项目参与人员") + private Integer userType = 0; } diff --git a/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java index a2aa8793..a54aea1b 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java @@ -62,6 +62,8 @@ public interface SimulationNodeMapper extends BaseMapper { List getNodeMemberListByNodeIdList(@Param("nodeIdList") List nodeIdList); + List getOnlyNodeMemberListByNodeIdList(@Param("nodeIdList") List nodeIdList); + List allList(@Param("nodeIdList") List deleteNodeList); void deleteTaskBatch(List deleteNodeIdList); diff --git a/project/src/main/java/com/sdm/project/model/vo/SpdmNodeMemberVo.java b/project/src/main/java/com/sdm/project/model/vo/SpdmNodeMemberVo.java index 0d53deb1..867540c8 100644 --- a/project/src/main/java/com/sdm/project/model/vo/SpdmNodeMemberVo.java +++ b/project/src/main/java/com/sdm/project/model/vo/SpdmNodeMemberVo.java @@ -23,5 +23,7 @@ public class SpdmNodeMemberVo extends BaseEntity { private Long userId; + private Integer type; + } diff --git a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java index 9b463624..ef48800f 100644 --- a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java @@ -2042,7 +2042,6 @@ public class NodeServiceImpl extends ServiceImpl userIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().collect(Collectors.toList()); - ; // 查询node节点下的task的成员(仿真负责人和执行人) List taskList = simulationTaskService.lambdaQuery().in(SimulationTask::getNodeId, allNodeIdList).list(); @@ -2067,9 +2066,26 @@ public class NodeServiceImpl extends ServiceImpl()); 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()); - jsonObject.put("pageSize", req.getSize()); + + int current = req.getCurrent(); + int size = req.getSize(); + Map> memberMap = spdmNodeMemberVoList.stream() + .collect(Collectors.groupingBy(SpdmNodeMemberVo::getUserId)); + // 区分用户类型,前端分为两个表格展示 团队成员和项目参与人员 + // 即是团队成语又是项目参与人员,理论上不允许这种情况,可能是脏数据,直接作为团队成员 + List 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()); return SdmResponse.success(jsonObject); } @@ -5226,12 +5242,46 @@ public class NodeServiceImpl extends ServiceImpl addNodeMemberIdList = req.getAddNodeMemberIdList(); if (StringUtils.isBlank(projectId) || CollectionUtils.isEmpty(addNodeMemberIdList)) { return SdmResponse.failed("参数不能为空"); } + // 查询当前项目的团队成员,如果是团队成员,则不允许添加 + List spdmNodeMemberVoList = nodeMapper.getOnlyNodeMemberListByNodeIdList(Collections.singletonList(projectId)); + List expUserIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(spdmNodeMemberVoList)) { + List 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 expUserNameList = new ArrayList<>(); + SdmResponse> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(expUserIdList).build()); + List userList = cidUserResp.getData(); + if (CollectionUtils.isNotEmpty(userList)) { + Map 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(); String currentDateTime = DateUtils.getCurrentDateTime(); List nodeMemberList = new ArrayList<>(); diff --git a/project/src/main/resources/mapper/SimulationNodeMapper.xml b/project/src/main/resources/mapper/SimulationNodeMapper.xml index b9982c71..6c2fd9e5 100644 --- a/project/src/main/resources/mapper/SimulationNodeMapper.xml +++ b/project/src/main/resources/mapper/SimulationNodeMapper.xml @@ -392,6 +392,19 @@ group by user_id, type,nodeId + +