Merge remote-tracking branch 'base-version/main' into dev
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
package com.zt.plat.framework.common.util.user;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 用户名称填充工具类
|
||||
* 通用的用户信息填充工具,可在各个模块中使用
|
||||
*
|
||||
* @author ZT
|
||||
*/
|
||||
public class UserNameEnrichUtils {
|
||||
|
||||
/**
|
||||
* 批量设置创建人名称
|
||||
*
|
||||
* @param items 需要设置创建人名称的对象列表
|
||||
* @param creatorExtractor 创建人ID提取器
|
||||
* @param creatorNameSetter 创建人名称设置器
|
||||
* @param userNicknameProvider 用户昵称提供者函数
|
||||
*/
|
||||
public static <T> void setCreatorNames(List<T> items,
|
||||
Function<T, String> creatorExtractor,
|
||||
BiConsumer<T, String> creatorNameSetter,
|
||||
Function<Collection<Long>, Map<Long, String>> userNicknameProvider) {
|
||||
if (CollUtil.isEmpty(items) || userNicknameProvider == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 提取所有创建人ID
|
||||
Set<Long> creatorIds = items.stream()
|
||||
.map(creatorExtractor)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(creator -> !creator.isEmpty())
|
||||
.map(creatorId -> {
|
||||
try {
|
||||
return Long.parseLong(creatorId);
|
||||
} catch (NumberFormatException e) {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (creatorIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 批量获取用户昵称
|
||||
Map<Long, String> userNicknameMap = userNicknameProvider.apply(creatorIds);
|
||||
|
||||
// 设置创建人名称
|
||||
items.forEach(item -> {
|
||||
String creatorId = creatorExtractor.apply(item);
|
||||
if (creatorId != null && !creatorId.isEmpty()) {
|
||||
try {
|
||||
Long id = Long.parseLong(creatorId);
|
||||
String nickname = userNicknameMap.get(id);
|
||||
if (nickname != null) {
|
||||
creatorNameSetter.accept(item, nickname);
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
// 忽略无效的ID格式
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置单个对象的创建人名称
|
||||
* 直接复用批量设置的逻辑
|
||||
*
|
||||
* @param item 需要设置创建人名称的对象
|
||||
* @param creatorExtractor 创建人ID提取器
|
||||
* @param creatorNameSetter 创建人名称设置器
|
||||
* @param userNicknameProvider 用户昵称提供者函数
|
||||
*/
|
||||
public static <T> void setCreatorName(T item,
|
||||
Function<T, String> creatorExtractor,
|
||||
BiConsumer<T, String> creatorNameSetter,
|
||||
Function<Collection<Long>, Map<Long, String>> userNicknameProvider) {
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
// 直接复用批量设置的逻辑
|
||||
setCreatorNames(Collections.singletonList(item), creatorExtractor, creatorNameSetter, userNicknameProvider);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建通用的用户昵称提供者
|
||||
* 这是一个通用的实现,可以直接在各个模块中使用
|
||||
*
|
||||
* @param userDataProvider 用户数据提供者,接收用户ID集合,返回用户数据Map
|
||||
* @param nicknameExtractor 从用户数据中提取昵称的函数
|
||||
* @return 用户昵称提供者函数
|
||||
*/
|
||||
public static <UserData> Function<Collection<Long>, Map<Long, String>> createUserNicknameProvider(
|
||||
Function<Collection<Long>, Map<Long, UserData>> userDataProvider,
|
||||
Function<UserData, String> nicknameExtractor) {
|
||||
return userIds -> {
|
||||
if (CollUtil.isEmpty(userIds)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
Map<Long, UserData> userDataMap = userDataProvider.apply(userIds);
|
||||
if (userDataMap == null || userDataMap.isEmpty()) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
return userDataMap.entrySet().stream()
|
||||
.filter(entry -> entry.getValue() != null)
|
||||
.collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
entry -> nicknameExtractor.apply(entry.getValue()),
|
||||
(existing, replacement) -> existing // 处理重复key的情况
|
||||
));
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user