From f159763290c1c16b0cf69c0a56587cd838e5bb64 Mon Sep 17 00:00:00 2001 From: bonus <1203338439@qq.com> Date: Mon, 2 Jun 2025 15:51:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E5=AF=B9=E8=AF=9D=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/BmMessageServiceImpl.java | 100 ++++++++++++------ 1 file changed, 66 insertions(+), 34 deletions(-) diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/basic/service/impl/BmMessageServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/basic/service/impl/BmMessageServiceImpl.java index b08b322..300fe40 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/basic/service/impl/BmMessageServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/basic/service/impl/BmMessageServiceImpl.java @@ -66,53 +66,85 @@ public class BmMessageServiceImpl implements IBmMessageService { @Override public List selectBmMessageListFromCache(BmMessage bmMessage) { Long companyId = SecurityUtils.getLoginUser().getSysUser().getCompanyId(); - Collection keys = SpringUtils.getBean(RedisService.class).keys(MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + "*"); - List list = new ArrayList<>(); - keys.stream().forEach(t -> { - JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(t); - list.addAll(arrayCache.toList(BmMessage.class)); - }); - List result = list.stream().filter(o -> companyId.equals(o.getFromCompany()) || companyId.equals(o.getToCompany())).collect(Collectors.toList()); - List sortedList = result.stream() - .sorted(Comparator.comparing(BmMessage::getCreateTime)) - .collect(Collectors.toList()); - List mergedList = filterAndMerge(sortedList); - /* Optional 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 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 keys = redisService.keys(MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + "*"); + if (keys == null || keys.isEmpty()) { return new ArrayList<>(); } + + List 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 filteredList = list.stream() + .filter(o -> companyId.equals(o.getFromCompany()) || companyId.equals(o.getToCompany())) + .sorted(Comparator.comparing(BmMessage::getCreateTime)) + .collect(Collectors.toList()); + + // 合并消息 + List mergedList = filterAndMerge(filteredList); + + return mergedList; } @Override public List selectBmMessageListFromCacheOne(BmMessage bmMessage) { Long companyId = SecurityUtils.getLoginUser().getSysUser().getCompanyId(); Long toCompany = bmMessage.getToCompany(); - Collection keys1 = SpringUtils.getBean(RedisService.class).keys(MaterialConstants.CACHE_MATERIAL_MALL_MESSAGE + toCompany + ":" + companyId); - Collection 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 keys1 = redisService.keys(keyPattern1); + Collection keys2 = redisService.keys(keyPattern2); + List keys = new ArrayList<>(); - keys.addAll(keys1); - keys.addAll(keys2); + if (keys1 != null) { + keys.addAll(keys1); + } + if (keys2 != null) { + keys.addAll(keys2); + } + List list = new ArrayList<>(); - keys.stream().forEach(t -> { - JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(t); - list.addAll(arrayCache.toList(BmMessage.class)); - }); - List 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