From 84dec30ebd89b093e959ef169c7c0e6d2a17231a Mon Sep 17 00:00:00 2001 From: gulongcheng <474084054@qq.com> Date: Thu, 13 Nov 2025 10:48:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9F=BA=E4=BA=8ECID=20?= =?UTF-8?q?=E7=9A=84=E7=94=A8=E6=88=B7=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../req/system}/QueryGroupDetailReq.java | 5 +- .../resp/system}/SysUserGroupDetailResp.java | 5 +- .../entity/resp/system}/SysUserGroupResp.java | 2 +- .../impl/system/SysUserFeignClientImpl.java | 19 ++++ .../inter/system/ISysUserFeignClient.java | 9 ++ .../sdm/project/dao/SimulationNodeMapper.java | 3 +- .../project/service/impl/NodeServiceImpl.java | 88 ++++++++++++------- .../resources/mapper/SimulationNodeMapper.xml | 20 ++--- .../system/controller/SysUserController.java | 6 +- .../sdm/system/service/ISysUserService.java | 5 +- .../impl/CID/CIDISysUserServiceImpl.java | 6 +- .../service/impl/LocalUserServiceImpl.java | 3 +- system/src/main/resources/application.yml | 2 +- 13 files changed, 106 insertions(+), 67 deletions(-) rename {system/src/main/java/com/sdm/system/model/req/user => common/src/main/java/com/sdm/common/entity/req/system}/QueryGroupDetailReq.java (73%) rename {system/src/main/java/com/sdm/system/model/resp => common/src/main/java/com/sdm/common/entity/resp/system}/SysUserGroupDetailResp.java (80%) rename {system/src/main/java/com/sdm/system/model/resp => common/src/main/java/com/sdm/common/entity/resp/system}/SysUserGroupResp.java (95%) diff --git a/system/src/main/java/com/sdm/system/model/req/user/QueryGroupDetailReq.java b/common/src/main/java/com/sdm/common/entity/req/system/QueryGroupDetailReq.java similarity index 73% rename from system/src/main/java/com/sdm/system/model/req/user/QueryGroupDetailReq.java rename to common/src/main/java/com/sdm/common/entity/req/system/QueryGroupDetailReq.java index 65977f6d..000c89d7 100644 --- a/system/src/main/java/com/sdm/system/model/req/user/QueryGroupDetailReq.java +++ b/common/src/main/java/com/sdm/common/entity/req/system/QueryGroupDetailReq.java @@ -1,11 +1,10 @@ -package com.sdm.system.model.req.user; +package com.sdm.common.entity.req.system; -import com.sdm.system.model.req.BaseReq; +import com.sdm.common.entity.BaseReq; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; -import org.springframework.web.bind.annotation.RequestParam; @Data public class QueryGroupDetailReq extends BaseReq { diff --git a/system/src/main/java/com/sdm/system/model/resp/SysUserGroupDetailResp.java b/common/src/main/java/com/sdm/common/entity/resp/system/SysUserGroupDetailResp.java similarity index 80% rename from system/src/main/java/com/sdm/system/model/resp/SysUserGroupDetailResp.java rename to common/src/main/java/com/sdm/common/entity/resp/system/SysUserGroupDetailResp.java index 479f090e..b591aeed 100644 --- a/system/src/main/java/com/sdm/system/model/resp/SysUserGroupDetailResp.java +++ b/common/src/main/java/com/sdm/common/entity/resp/system/SysUserGroupDetailResp.java @@ -1,15 +1,12 @@ -package com.sdm.system.model.resp; +package com.sdm.common.entity.resp.system; -import com.fasterxml.jackson.annotation.JsonFormat; import com.sdm.common.entity.resp.PageDataResp; -import com.sdm.common.entity.resp.system.CIDUserResp; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; -import java.time.LocalDateTime; import java.util.List; /** diff --git a/system/src/main/java/com/sdm/system/model/resp/SysUserGroupResp.java b/common/src/main/java/com/sdm/common/entity/resp/system/SysUserGroupResp.java similarity index 95% rename from system/src/main/java/com/sdm/system/model/resp/SysUserGroupResp.java rename to common/src/main/java/com/sdm/common/entity/resp/system/SysUserGroupResp.java index 39851e96..766eb409 100644 --- a/system/src/main/java/com/sdm/system/model/resp/SysUserGroupResp.java +++ b/common/src/main/java/com/sdm/common/entity/resp/system/SysUserGroupResp.java @@ -1,4 +1,4 @@ -package com.sdm.system.model.resp; +package com.sdm.common.entity.resp.system; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/common/src/main/java/com/sdm/common/feign/impl/system/SysUserFeignClientImpl.java b/common/src/main/java/com/sdm/common/feign/impl/system/SysUserFeignClientImpl.java index 33e2b29e..c6d3206e 100644 --- a/common/src/main/java/com/sdm/common/feign/impl/system/SysUserFeignClientImpl.java +++ b/common/src/main/java/com/sdm/common/feign/impl/system/SysUserFeignClientImpl.java @@ -3,10 +3,12 @@ package com.sdm.common.feign.impl.system; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.sdm.common.common.SdmResponse; import com.sdm.common.entity.req.system.LaunchApproveReq; +import com.sdm.common.entity.req.system.QueryGroupDetailReq; import com.sdm.common.entity.req.system.UserListReq; import com.sdm.common.entity.req.system.UserQueryReq; import com.sdm.common.entity.resp.PageDataResp; import com.sdm.common.entity.resp.system.CIDUserResp; +import com.sdm.common.entity.resp.system.SysUserGroupDetailResp; import com.sdm.common.feign.inter.system.ISysUserFeignClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -64,4 +66,21 @@ public class SysUserFeignClientImpl implements ISysUserFeignClient { return SdmResponse.failed("人员信息未查到"); } } + + @Override + public SdmResponse queryGroupDetail(QueryGroupDetailReq req) { + SdmResponse sdmResponse; + try { + log.info("查询用户组信息开始,请求参数:{}",req.toString()); + sdmResponse = sysUserClient.queryGroupDetail(req); + log.info("查询用户组信息结束,返回结果:{}",sdmResponse); + if (!sdmResponse.isSuccess() || sdmResponse.getData() == null){ + return SdmResponse.failed("查询用户组信息失败"); + } + return sdmResponse; + } catch (Exception e) { + log.error("查询用户组信息失败", e); + return SdmResponse.failed("查询用户组信息失败"); + } + } } diff --git a/common/src/main/java/com/sdm/common/feign/inter/system/ISysUserFeignClient.java b/common/src/main/java/com/sdm/common/feign/inter/system/ISysUserFeignClient.java index 257a62ad..bc623030 100644 --- a/common/src/main/java/com/sdm/common/feign/inter/system/ISysUserFeignClient.java +++ b/common/src/main/java/com/sdm/common/feign/inter/system/ISysUserFeignClient.java @@ -2,10 +2,13 @@ package com.sdm.common.feign.inter.system; import com.sdm.common.common.SdmResponse; import com.sdm.common.entity.req.system.LaunchApproveReq; +import com.sdm.common.entity.req.system.QueryGroupDetailReq; import com.sdm.common.entity.req.system.UserListReq; import com.sdm.common.entity.req.system.UserQueryReq; import com.sdm.common.entity.resp.system.CIDUserResp; import com.sdm.common.entity.resp.PageDataResp; +import com.sdm.common.entity.resp.system.SysUserGroupDetailResp; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; @@ -26,4 +29,10 @@ public interface ISysUserFeignClient { @PostMapping("/user/listUser") SdmResponse>> listUser(@RequestBody UserListReq req); + + /** + * 根据用户组id查询用户组及组成员列表详情 + */ + @PostMapping("/queryGroupDetail") + SdmResponse queryGroupDetail(@RequestBody @Validated QueryGroupDetailReq req); } 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 0f3b2656..617a6e59 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationNodeMapper.java @@ -12,6 +12,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; @Mapper public interface SimulationNodeMapper extends BaseMapper { @@ -73,7 +74,7 @@ public interface SimulationNodeMapper extends BaseMapper { List getNodeListByIds(@Param("nodeIdList") List nodeIdList); - List getUserGroupProjectStatistics(@Param("userGroupId") Long userGroupId, @Param("userId") Long userId); + List getUserGroupProjectStatistics(@Param("userIds")Set userIds ); List getUserGroupTaskCompleteStatistics(@Param("req") GetUserGroupTaskCompleteStatisticsReq req); 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 b5490ec9..6ac6c5e5 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 @@ -10,9 +10,11 @@ import com.sdm.common.entity.req.data.CreateDirReq; import com.sdm.common.entity.req.project.DelNodeReq; import com.sdm.common.entity.req.project.RenameNodeReq; import com.sdm.common.entity.req.project.SpdmNodeListReq; +import com.sdm.common.entity.req.system.QueryGroupDetailReq; import com.sdm.common.entity.req.system.UserQueryReq; import com.sdm.common.entity.resp.AllNodeByProjectIdAndTypeResp; import com.sdm.common.entity.resp.system.CIDUserResp; +import com.sdm.common.entity.resp.system.SysUserGroupDetailResp; import com.sdm.common.feign.impl.data.DataClientFeignClientImpl; import com.sdm.common.feign.impl.system.SysUserFeignClientImpl; import com.sdm.common.utils.RandomUtil; @@ -204,7 +206,7 @@ public class NodeServiceImpl extends ServiceImpl spdmNodeMemberVoList = nodeMapper.getNodeMemberListByNodeIdList(nodeIdList); if (CollectionUtils.isNotEmpty(spdmNodeMemberVoList)) { List usewrIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().toList(); - SdmResponse> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(usewrIdList).build()); + SdmResponse> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(usewrIdList).build()); List userList = cidUserResp.getData(); Map> userMap = Map.of(); @@ -319,7 +321,7 @@ public class NodeServiceImpl extends ServiceImpl projectNodePoList = mapper.queryNodeListByNodeId(addNodeList.get(0).getPid()); if (CollectionUtils.isEmpty(projectNodePoList)) { @@ -386,7 +388,7 @@ public class NodeServiceImpl extends ServiceImpl spdmNodeMemberVoList = nodeMapper.getNodeMemberListByNodeIdList(Collections.singletonList(projectNode.getUuid())); if (CollectionUtils.isNotEmpty(spdmNodeMemberVoList)) { List usewrIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().toList(); - SdmResponse> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(usewrIdList).build()); + SdmResponse> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(usewrIdList).build()); List userList = cidUserResp.getData(); Map> userMap = Map.of(); @@ -562,7 +564,8 @@ public class NodeServiceImpl extends ServiceImpl()); } - List userIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().collect(Collectors.toList());; + List userIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().collect(Collectors.toList()); + ; // 查询node节点下的task的成员(仿真负责人和执行人) List taskList = simulationTaskService.lambdaQuery().in(SimulationTask::getNodeId, allNodeIdList).list(); @@ -572,7 +575,7 @@ public class NodeServiceImpl extends ServiceImpl> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(userIdList).build()); + SdmResponse> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(userIdList).build()); List userList = cidUserResp.getData(); if (CollectionUtils.isEmpty(userList)) { @@ -613,10 +616,10 @@ public class NodeServiceImpl extends ServiceImpl allNodeByProjectIdAndTypeRespList = new ArrayList<>(); List nodeList = this.lambdaQuery() .eq(ObjectUtils.isNotEmpty(nodeId), SimulationNode::getId, nodeId) - .eq(ObjectUtils.isNotEmpty(nodeType),SimulationNode::getNodeType, nodeType) + .eq(ObjectUtils.isNotEmpty(nodeType), SimulationNode::getNodeType, nodeType) .list(); if (CollectionUtils.isEmpty(nodeList)) { return SdmResponse.failed("未找到节点"); @@ -701,23 +704,40 @@ public class NodeServiceImpl extends ServiceImpl userGroupProjectStatistics = this.baseMapper.getUserGroupProjectStatistics(userGroupId, userId); - if(CollectionUtils.isEmpty(userGroupProjectStatistics)) { + QueryGroupDetailReq req = new QueryGroupDetailReq(); + req.setCurrent(1); + req.setSize(1000); + req.setId(userGroupId); + req.setTenantId(ThreadLocalContext.getTenantId()); + SdmResponse sysUserGroupDetailRespSdmResponse = sysUserFeignClient.queryGroupDetail(req); + if (!sysUserGroupDetailRespSdmResponse.isSuccess() + || ObjectUtils.isEmpty(sysUserGroupDetailRespSdmResponse.getData()) + || ObjectUtils.isEmpty(sysUserGroupDetailRespSdmResponse.getData().getUsers()) + || ObjectUtils.isEmpty(sysUserGroupDetailRespSdmResponse.getData().getUsers().getData())) { + return SdmResponse.success(); + } + Map userId2Nickname = sysUserGroupDetailRespSdmResponse.getData().getUsers().getData().stream().collect(Collectors.toMap(CIDUserResp::getUserId, CIDUserResp::getNickname)); + + + Set userIds = new HashSet<>(); + if (ObjectUtils.isEmpty(userId)) { + userIds = userId2Nickname.keySet(); + }else { + userIds.add(userId); + } + + + List userGroupProjectStatistics = this.baseMapper.getUserGroupProjectStatistics(userIds); + if (CollectionUtils.isEmpty(userGroupProjectStatistics)) { return SdmResponse.success(new ArrayList<>()); } // 按用户ID统计项目数量 Map userProjectCountMap = new HashMap<>(); - // 存储每个用户的详细信息,使用LinkedHashMap保持插入顺序 - Map userId2UserGroupProjectVo = new LinkedHashMap<>(); - for (UserGroupProjectVo vo : userGroupProjectStatistics) { Long userIdKey = vo.getUserId(); userProjectCountMap.put(userIdKey, userProjectCountMap.getOrDefault(userIdKey, 0) + 1); - // 只保存第一个遇到的用户信息,或者可以考虑保存最新的 - if (!userId2UserGroupProjectVo.containsKey(userIdKey)) { - userId2UserGroupProjectVo.put(userIdKey, vo); - } + } // 转换为List>格式,便于前端展示 @@ -726,7 +746,7 @@ public class NodeServiceImpl extends ServiceImpl entry : userProjectCountMap.entrySet()) { Map item = new HashMap<>(); item.put("userId", entry.getKey()); - item.put("userName", userId2UserGroupProjectVo.get(entry.getKey()).getNickname()); + item.put("userName", userId2Nickname.get(entry.getKey())); item.put("projectCount", entry.getValue()); userResult.add(item); } @@ -793,7 +813,7 @@ public class NodeServiceImpl extends ServiceImpl statusCount = userStat.getDifficultyCount(); + Map statusCount = userStat.getDifficultyCount(); if (statusCount == null) { statusCount = new HashMap<>(); userStat.setDifficultyCount(statusCount); @@ -821,7 +841,7 @@ public class NodeServiceImpl extends ServiceImpl commonCompleteStatisticsFromTask = this.baseMapper.getCommonCompleteStatisticsFromTask(req); - + // 按tag分组统计任务状态 Map taskStatisticsMap = new HashMap<>(); @@ -853,7 +873,7 @@ public class NodeServiceImpl extends ServiceImpl commonCompleteStatisticsFromPerformance = this.baseMapper.getCommonCompleteStatisticsFromPerformance(req); - + // 按tag分组统计指标状态 Map performanceStatisticsMap = new HashMap<>(); @@ -890,32 +910,32 @@ public class NodeServiceImpl extends ServiceImpl workstationApproveStatus = this.baseMapper.getWorkstationApproveStatus(req); - + // 按tag分组统计审批状态 Map reviewStatisticsMap = new HashMap<>(); - + // 所有审批状态 Set allApprovalStatus = new HashSet<>(); - + // 统计每个tag的各种审批状态数量 for (WorkstationApproveStatusVo item : workstationApproveStatus) { String nodeName = item.getNodeName(); - + CommonStatisticsVo stat = reviewStatisticsMap.getOrDefault(nodeName, new CommonStatisticsVo()); stat.setName(nodeName); - + Map statusCount = stat.getStatusCount(); if (statusCount == null) { statusCount = new HashMap<>(); stat.setStatusCount(statusCount); } - + String approvalStatus = item.getApprovalStatus(); allApprovalStatus.add(approvalStatus); statusCount.put(approvalStatus, statusCount.getOrDefault(approvalStatus, 0) + 1); reviewStatisticsMap.put(nodeName, stat); } - + // 转换为列表返回 List result = new ArrayList<>(reviewStatisticsMap.values()); JSONObject resultResponse = new JSONObject(); @@ -926,12 +946,12 @@ public class NodeServiceImpl extends ServiceImpl - nm.user_id is not null and sur.groupId is not null - - and sur.groupId = #{userGroupId} - - - and nm.user_id = #{userId} - - + from simulation_node_member + where user_id in ( + + #{userId} + + )