聊天对话修改

This commit is contained in:
bonus 2025-06-02 15:51:39 +08:00
parent bdadacb5eb
commit f159763290
1 changed files with 66 additions and 34 deletions

View File

@ -66,53 +66,85 @@ public class BmMessageServiceImpl implements IBmMessageService {
@Override
public List<BmMessage> selectBmMessageListFromCache(BmMessage bmMessage) {
Long companyId = SecurityUtils.getLoginUser().getSysUser().getCompanyId();
Collection<String> keys = SpringUtils.getBean(RedisService.class).keys(MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + "*");
List<BmMessage> list = new ArrayList<>();
keys.stream().forEach(t -> {
JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(t);
list.addAll(arrayCache.toList(BmMessage.class));
});
List<BmMessage> result = list.stream().filter(o -> companyId.equals(o.getFromCompany()) || companyId.equals(o.getToCompany())).collect(Collectors.toList());
List<BmMessage> sortedList = result.stream()
.sorted(Comparator.comparing(BmMessage::getCreateTime))
.collect(Collectors.toList());
List<BmMessage> mergedList = filterAndMerge(sortedList);
/* Optional<BmMessage> lastElement = sortedList.stream()
.reduce((first, second) -> second);
String messageContent = lastElement.map(BmMessage::getMessageContent)
.orElse("");
Integer isRead = lastElement.map(BmMessage::getIsRead)
.orElse(0);*/
if (mergedList.size() > 0) {
// List<BmMessage> messages = sortedList.subList(0, 1);
// messages.get(0).setMessageContent(messageContent);
// messages.get(0).setIsRead(isRead);
return mergedList;
} else {
RedisService redisService = SpringUtils.getBean(RedisService.class);
// 获取所有消息缓存 key
Collection<String> keys = redisService.keys(MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + "*");
if (keys == null || keys.isEmpty()) {
return new ArrayList<>();
}
List<BmMessage> list = new ArrayList<>();
// 遍历 key 获取消息列表
for (String key : keys) {
JSONArray arrayCache = redisService.getCacheObject(key);
if (arrayCache != null && !arrayCache.isEmpty()) {
try {
list.addAll(arrayCache.toList(BmMessage.class));
} catch (Exception e) {
// 可记录日志log.warn("解析缓存失败key={}", key, e);
}
}
}
// 过滤当前公司相关消息并排序
List<BmMessage> filteredList = list.stream()
.filter(o -> companyId.equals(o.getFromCompany()) || companyId.equals(o.getToCompany()))
.sorted(Comparator.comparing(BmMessage::getCreateTime))
.collect(Collectors.toList());
// 合并消息
List<BmMessage> mergedList = filterAndMerge(filteredList);
return mergedList;
}
@Override
public List<BmMessage> selectBmMessageListFromCacheOne(BmMessage bmMessage) {
Long companyId = SecurityUtils.getLoginUser().getSysUser().getCompanyId();
Long toCompany = bmMessage.getToCompany();
Collection<String> keys1 = SpringUtils.getBean(RedisService.class).keys(MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + toCompany + ":" + companyId);
Collection<String> keys2 = SpringUtils.getBean(RedisService.class).keys(MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + companyId + ":" + toCompany);
RedisService redisService = SpringUtils.getBean(RedisService.class);
String keyPattern1 = MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + toCompany + ":" + companyId;
String keyPattern2 = MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + companyId + ":" + toCompany;
Collection<String> keys1 = redisService.keys(keyPattern1);
Collection<String> keys2 = redisService.keys(keyPattern2);
List<String> keys = new ArrayList<>();
keys.addAll(keys1);
keys.addAll(keys2);
if (keys1 != null) {
keys.addAll(keys1);
}
if (keys2 != null) {
keys.addAll(keys2);
}
List<BmMessage> list = new ArrayList<>();
keys.stream().forEach(t -> {
JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(t);
list.addAll(arrayCache.toList(BmMessage.class));
});
List<BmMessage> sortedList = list.stream()
.sorted(Comparator.comparing(t -> t.getCreateTime()))
for (String key : keys) {
JSONArray arrayCache = redisService.getCacheObject(key);
if (arrayCache != null && !arrayCache.isEmpty()) {
try {
list.addAll(arrayCache.toList(BmMessage.class));
} catch (Exception e) {
// 可记录日志或跳过异常条目
// log.warn("Failed to parse BmMessage from cache key: {}", key, e);
}
}
}
return list.stream()
.sorted(Comparator.comparing(BmMessage::getCreateTime))
.collect(Collectors.toList());
return sortedList;
}
/**
* 根据所属公司查询消息未读数量
* @param bmMessage