| | |
| | | Map<Long, ResearchApplicationDO> applicationMap = applications.stream() |
| | | .collect(Collectors.toMap(ResearchApplicationDO::getId, application -> application, (a, b) -> a)); |
| | | |
| | | // 2. 成员子表聚合:姓名 + 电话 + 单位 相同视为同一成员 |
| | | // 2. 成员子表聚合:姓名 + 所属部门 相同视为同一成员 |
| | | String keyword = StrUtil.trimToNull(reqVO.getKeyword()); |
| | | Map<String, ResearchApplicationMemberStatisticsRespVO> resultMap = new LinkedHashMap<>(); |
| | | Map<String, Set<String>> roleMap = new HashMap<>(); |
| | | Map<String, Set<String>> typeMap = new HashMap<>(); |
| | | Map<String, Set<Long>> projectIdMap = new HashMap<>(); |
| | | Map<String, Set<String>> projectTitleMap = new HashMap<>(); |
| | | for (ResearchApplicationMemberDO member : memberMapper.selectList()) { |
| | |
| | | if (StrUtil.isBlank(vo.getJobTitle()) && StrUtil.isNotBlank(member.getJobTitle())) { |
| | | vo.setJobTitle(StrUtil.trim(member.getJobTitle())); |
| | | } |
| | | if (StrUtil.isNotBlank(member.getMemberType())) { |
| | | typeMap.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(StrUtil.trim(member.getMemberType())); |
| | | } |
| | | if (StrUtil.isNotBlank(member.getMemberRole())) { |
| | | roleMap.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(StrUtil.trim(member.getMemberRole())); |
| | | } |
| | |
| | | for (Map.Entry<String, ResearchApplicationMemberStatisticsRespVO> entry : resultMap.entrySet()) { |
| | | String key = entry.getKey(); |
| | | ResearchApplicationMemberStatisticsRespVO vo = entry.getValue(); |
| | | vo.setMemberTypes(String.join("、", typeMap.getOrDefault(key, Collections.emptySet()))); |
| | | vo.setMemberRoles(String.join("、", roleMap.getOrDefault(key, Collections.emptySet()))); |
| | | vo.setProjectCount(projectIdMap.getOrDefault(key, Collections.emptySet()).size()); |
| | | vo.setProjectTitles(String.join(";", projectTitleMap.getOrDefault(key, Collections.emptySet()))); |
| | |
| | | list.add(ResearchApplicationMemberDO.builder() |
| | | .applicationId(applicationId) |
| | | .name(StrUtil.trim(member.getName())) |
| | | .memberType(StrUtil.trim(member.getMemberType())) |
| | | .contactPhone(StrUtil.trim(member.getContactPhone())) |
| | | .workUnit(StrUtil.trim(member.getWorkUnit())) |
| | | .jobTitle(StrUtil.trim(member.getJobTitle())) |
| | |
| | | |
| | | private String buildMemberKey(ResearchApplicationMemberDO member) { |
| | | return StrUtil.join("|", StrUtil.nullToEmpty(member.getName()).trim(), |
| | | StrUtil.nullToEmpty(member.getContactPhone()).trim(), |
| | | StrUtil.nullToEmpty(member.getWorkUnit()).trim()); |
| | | } |
| | | |
| | |
| | | return true; |
| | | } |
| | | return StrUtil.containsIgnoreCase(member.getName(), keyword) |
| | | || StrUtil.containsIgnoreCase(member.getMemberType(), keyword) |
| | | || StrUtil.containsIgnoreCase(member.getContactPhone(), keyword) |
| | | || StrUtil.containsIgnoreCase(member.getWorkUnit(), keyword); |
| | | } |