package com.linghu.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.linghu.mapper.SectionalizationMapper; import com.linghu.mapper.UserMapper; import com.linghu.model.entity.Sectionalization; import com.linghu.model.entity.User; import com.linghu.model.vo.SectionalizationUserVO; import com.linghu.service.SectionalizationService; import com.linghu.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author xy * @description 针对表【user】的数据库操作Service实现 * @createDate 2025-07-07 10:26:00 */ @Service public class SectionalizationServiceImpl extends ServiceImpl implements SectionalizationService { @Autowired private UserMapper userMapper; @Override public List SectionalizationUser() { // 1. 查询所有状态为"正常"的用户 List userList = userMapper.selectList( new LambdaQueryWrapper() .eq(User::getStatus, "正常") ); // 2. 提取所有分组ID并去重 List sectionalizationIdList = userList.stream() .map(User::getSectionalization_id) .distinct() .collect(Collectors.toList()); // 3. 查询这些分组的基本信息 List sectionalizationList = this.baseMapper.selectList( new LambdaQueryWrapper() .in(Sectionalization::getSectionalization_id, sectionalizationIdList) ); // 4. 创建分组ID到分组名称的映射 Map sectionalizationNameMap = sectionalizationList.stream() .collect(Collectors.toMap( Sectionalization::getSectionalization_id, Sectionalization::getSectionalization_name )); // 5. 按分组ID对用户进行分组 Map> usersBySectionalization = userList.stream() .collect(Collectors.groupingBy(User::getSectionalization_id)); // 6. 构建最终返回结果 return sectionalizationIdList.stream() .map(id -> { SectionalizationUserVO vo = new SectionalizationUserVO(); vo.setSectionalization_id(id); vo.setSectionalization_name(sectionalizationNameMap.get(id)); vo.setSectionalization_users(usersBySectionalization.getOrDefault(id, Collections.emptyList())); return vo; }) .collect(Collectors.toList()); } }