From cfbfa1ffbf65bb0944b87b0c4ddf342384f2013a Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Fri, 17 Apr 2026 14:42:56 +0800 Subject: [PATCH] =?UTF-8?q?fix[project]:=20=E6=9F=A5=E8=AF=A2=E5=9B=A2?= =?UTF-8?q?=E9=98=9F=E6=88=90=E5=91=98=E6=97=B6=EF=BC=8C=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=80=BC=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/resp/system/CIDStaffResp.java | 5 ++ .../sdm/project/dao/SimulationNodeMapper.java | 2 + .../project/model/vo/SpdmNodeMemberVo.java | 2 + .../project/service/impl/NodeServiceImpl.java | 58 +++++++++++++++++-- .../resources/mapper/SimulationNodeMapper.xml | 13 +++++ 5 files changed, 76 insertions(+), 4 deletions(-) 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 + +