|
@@ -0,0 +1,158 @@
|
|
|
|
|
+package cn.start.tz.module.system.api.userQualifications;
|
|
|
|
|
+
|
|
|
|
|
+import cn.start.tz.framework.common.pojo.CommonResult;
|
|
|
|
|
+import cn.start.tz.module.system.api.userQualifications.dto.AdminUserQualificationsRespDTO;
|
|
|
|
|
+import cn.start.tz.module.system.dal.dataobject.user.AdminUserDO;
|
|
|
|
|
+import cn.start.tz.module.system.dal.dataobject.userqualifications.UserQualificationsDO;
|
|
|
|
|
+import cn.start.tz.module.system.dal.mysql.userqualifications.UserQualificationsMapper;
|
|
|
|
|
+import cn.start.tz.module.system.service.user.AdminUserService;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
|
+import jakarta.annotation.Resource;
|
|
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.Collections;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Map;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
+
|
|
|
|
|
+import static cn.start.tz.framework.common.pojo.CommonResult.success;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+@RestController // 提供 RESTful API 接口,给 Feign 调用
|
|
|
|
|
+@Validated
|
|
|
|
|
+public class AdminUserQualificationsApiImpl implements AdminUserQualificationsApi {
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private UserQualificationsMapper userQualificationsMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private AdminUserService adminUserService;
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public CommonResult<List<AdminUserQualificationsRespDTO>> all() {
|
|
|
|
|
+ List<AdminUserDO> userAll = adminUserService.getUserAll();
|
|
|
|
|
+
|
|
|
|
|
+ // 分批处理大量用户ID,避免SQL IN查询参数过多的问题
|
|
|
|
|
+ List<UserQualificationsDO> userQualificationsDOS = new ArrayList<>();
|
|
|
|
|
+ int batchSize = 100; // 每批次处理的用户数
|
|
|
|
|
+ List<String> userIds = userAll.stream().map(AdminUserDO::getId).toList();
|
|
|
|
|
+
|
|
|
|
|
+ for (int i = 0; i < userIds.size(); i += batchSize) {
|
|
|
|
|
+ int endIndex = Math.min(i + batchSize, userIds.size());
|
|
|
|
|
+ List<String> batchUserIds = userIds.subList(i, endIndex);
|
|
|
|
|
+
|
|
|
|
|
+ List<UserQualificationsDO> batchQualifications = userQualificationsMapper.selectList(
|
|
|
|
|
+ new LambdaUpdateWrapper<UserQualificationsDO>()
|
|
|
|
|
+ .in(UserQualificationsDO::getUserId, batchUserIds));
|
|
|
|
|
+ userQualificationsDOS.addAll(batchQualifications);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 将资质信息按用户ID分组,提高查找效率
|
|
|
|
|
+ Map<String, List<UserQualificationsDO>> qualificationsGroupedByUser =
|
|
|
|
|
+ userQualificationsDOS.stream().collect(
|
|
|
|
|
+ Collectors.groupingBy(UserQualificationsDO::getUserId));
|
|
|
|
|
+
|
|
|
|
|
+ // 组装数据
|
|
|
|
|
+ List<AdminUserQualificationsRespDTO> adminUserQualificationsRespDTOS = userAll.stream().map(user -> {
|
|
|
|
|
+ AdminUserQualificationsRespDTO adminUserQualificationsRespDTO = new AdminUserQualificationsRespDTO();
|
|
|
|
|
+ adminUserQualificationsRespDTO.setId(user.getId());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setNickname(user.getUsername());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setAvatar(user.getAvatar());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setMobile(user.getMobile());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setDeptId(user.getDeptId());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setEmployeeNo(user.getEmployeeNo());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setPostIds(user.getPostIds());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setSignUrl(user.getEmail());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setStatus(user.getStatus());
|
|
|
|
|
+
|
|
|
|
|
+ // 从分组映射中直接获取该用户的资质信息
|
|
|
|
|
+ List<UserQualificationsDO> userQualifications = qualificationsGroupedByUser.getOrDefault(user.getId(), Collections.emptyList());
|
|
|
|
|
+ adminUserQualificationsRespDTO.setQualifications(
|
|
|
|
|
+ userQualifications.stream()
|
|
|
|
|
+ .map(userQualificationsDO -> new AdminUserQualificationsRespDTO.Qualification().setId(userQualificationsDO.getId())
|
|
|
|
|
+ .setLevel(userQualificationsDO.getLevel())
|
|
|
|
|
+ .setUserId(userQualificationsDO.getUserId())
|
|
|
|
|
+ .setEquipmentType(userQualificationsDO.getEquipmentType())
|
|
|
|
|
+ .setRegistrationCode(userQualificationsDO.getRegistrationCode())
|
|
|
|
|
+ .setQualificationValidityStartTime(userQualificationsDO.getQualificationValidityStartTime())
|
|
|
|
|
+ .setQualificationValidityEndTime(userQualificationsDO.getQualificationValidityEndTime()))
|
|
|
|
|
+ .toList());
|
|
|
|
|
+ return adminUserQualificationsRespDTO;
|
|
|
|
|
+ }).toList();
|
|
|
|
|
+ return success(adminUserQualificationsRespDTOS);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public CommonResult<List<AdminUserQualificationsRespDTO>> getUserQualificationsType(String type) {
|
|
|
|
|
+ // 先查询具有指定设备类型的资质信息
|
|
|
|
|
+ List<UserQualificationsDO> userQualificationsDOS = userQualificationsMapper.selectList(
|
|
|
|
|
+ new LambdaUpdateWrapper<UserQualificationsDO>()
|
|
|
|
|
+ .eq(UserQualificationsDO::getEquipmentType, type));
|
|
|
|
|
+
|
|
|
|
|
+ // 如果没有找到匹配的资质,则返回空列表
|
|
|
|
|
+ if (userQualificationsDOS.isEmpty()) {
|
|
|
|
|
+ return success(Collections.emptyList());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 提取用户ID并去重
|
|
|
|
|
+ List<String> userIds = userQualificationsDOS.stream()
|
|
|
|
|
+ .map(UserQualificationsDO::getUserId)
|
|
|
|
|
+ .distinct()
|
|
|
|
|
+ .toList();
|
|
|
|
|
+
|
|
|
|
|
+ // 根据用户ID查询用户信息
|
|
|
|
|
+ List<AdminUserDO> userAll = adminUserService.getUserList(userIds);
|
|
|
|
|
+
|
|
|
|
|
+ // 将资质信息按用户ID分组,提高查找效率
|
|
|
|
|
+ Map<String, List<UserQualificationsDO>> qualificationsGroupedByUser =
|
|
|
|
|
+ userQualificationsDOS.stream().collect(
|
|
|
|
|
+ Collectors.groupingBy(UserQualificationsDO::getUserId));
|
|
|
|
|
+
|
|
|
|
|
+ // 组装数据
|
|
|
|
|
+ List<AdminUserQualificationsRespDTO> adminUserQualificationsRespDTOS = userAll.stream().filter(user -> user.getStatus() == 0).map(user -> {
|
|
|
|
|
+ AdminUserQualificationsRespDTO adminUserQualificationsRespDTO = new AdminUserQualificationsRespDTO();
|
|
|
|
|
+ adminUserQualificationsRespDTO.setId(user.getId())
|
|
|
|
|
+ .setNickname(user.getNickname())
|
|
|
|
|
+ .setAvatar(user.getAvatar())
|
|
|
|
|
+ .setMobile(user.getMobile())
|
|
|
|
|
+ .setDeptId(user.getDeptId())
|
|
|
|
|
+ .setEmployeeNo(user.getEmployeeNo())
|
|
|
|
|
+ .setPostIds(user.getPostIds())
|
|
|
|
|
+ .setSignUrl(user.getEmail())
|
|
|
|
|
+ .setStatus(user.getStatus());
|
|
|
|
|
+
|
|
|
|
|
+ // 从分组映射中直接获取该用户的资质信息
|
|
|
|
|
+ List<UserQualificationsDO> userQualifications = qualificationsGroupedByUser.get(user.getId());
|
|
|
|
|
+ if (userQualifications != null) {
|
|
|
|
|
+ adminUserQualificationsRespDTO.setQualifications(
|
|
|
|
|
+ userQualifications.stream()
|
|
|
|
|
+ .map(userQualificationsDO -> new AdminUserQualificationsRespDTO.Qualification().setId(userQualificationsDO.getId())
|
|
|
|
|
+ .setLevel(userQualificationsDO.getLevel())
|
|
|
|
|
+ .setUserId(userQualificationsDO.getUserId())
|
|
|
|
|
+ .setEquipmentType(userQualificationsDO.getEquipmentType())
|
|
|
|
|
+ .setRegistrationCode(userQualificationsDO.getRegistrationCode())
|
|
|
|
|
+ .setQualificationValidityStartTime(userQualificationsDO.getQualificationValidityStartTime())
|
|
|
|
|
+ .setQualificationValidityEndTime(userQualificationsDO.getQualificationValidityEndTime()))
|
|
|
|
|
+ .toList());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ adminUserQualificationsRespDTO.setQualifications(Collections.emptyList());
|
|
|
|
|
+ }
|
|
|
|
|
+ return adminUserQualificationsRespDTO;
|
|
|
|
|
+ }).sorted((u1, u2) -> {
|
|
|
|
|
+ // 按拼音排序
|
|
|
|
|
+ String nickname1 = u1.getNickname();
|
|
|
|
|
+ String nickname2 = u2.getNickname();
|
|
|
|
|
+ return java.text.Collator.getInstance(java.util.Locale.CHINA).compare(nickname1, nickname2);
|
|
|
|
|
+ }).toList();
|
|
|
|
|
+
|
|
|
|
|
+ return success(adminUserQualificationsRespDTOS);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public AdminUserQualificationsRespDTO selectById(Object primaryValue) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|