Browse Source

bugfix:图片连接

lyx 1 month ago
parent
commit
a422b6a4e6

+ 55 - 2
alien-store/src/main/java/shop/alien/store/service/impl/StoreCommentServiceImpl.java

@@ -23,6 +23,7 @@ import shop.alien.entity.store.vo.*;
 import shop.alien.mapper.*;
 import shop.alien.store.config.WebSocketProcess;
 import shop.alien.store.service.StoreCommentService;
+import shop.alien.store.service.StoreImgService;
 import shop.alien.store.util.FileUploadUtil;
 import shop.alien.util.common.DateUtils;
 import shop.alien.util.common.netease.ImageCheckUtil;
@@ -37,6 +38,7 @@ import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -76,6 +78,8 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
 
     @Autowired
     private TextModerationUtil textModerationUtil;
+    @Autowired
+    private StoreImgService storeImgService;
 
     /**
      * 评论列表
@@ -737,8 +741,57 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
         List<String> collect = commentOrderPage.getRecords().stream().map(LifeUserOrderCommentVo::getGroupBuyImgId).collect(Collectors.toList());
 
         if (ObjectUtils.isNotEmpty(collect)) {
-            List<StoreImg> storeImgList = storeImgMapper.selectList(new QueryWrapper<StoreImg>().in("id", collect));
-            commentOrderPage.getRecords().forEach(i -> i.setGroupBuyImgUrl(storeImgList.stream().filter(j -> j.getId().toString().equals(i.getGroupBuyImgId())).findFirst().map(StoreImg::getImgUrl).orElse(null)));
+            List<StoreImg> storeImgList = storeImgMapper.selectList(new QueryWrapper<StoreImg>().inSql("id", String.join(",", collect)));
+//            commentOrderPage.getRecords().forEach(i ->
+//                    i.setGroupBuyImgUrl(storeImgList.stream().filter(j -> j.getId().toString().equals(i.getGroupBuyImgId()))
+//                            .findFirst().map(StoreImg::getImgUrl).orElse(null)));
+            // 2. 优化分组:id唯一,直接映射为 Map<Integer, StoreImg>(避免List处理)
+            Map<Integer, StoreImg> imgIdToImgMap = storeImgList.stream()
+                    .collect(Collectors.toMap(
+                            StoreImg::getId,  // 键:图片id
+                            Function.identity(),  // 值:图片对象本身
+                            (existing, replacement) -> existing  // 若有重复id(理论上不会),保留第一个
+                    ));
+
+            // 3. 遍历订单评论记录,处理图片URL拼接
+            for (LifeUserOrderCommentVo record : commentOrderPage.getRecords()) {
+                String groupBuyImgId = record.getGroupBuyImgId();
+                // 空指针防护:如果imgId为空,直接设为空字符串
+                if (groupBuyImgId == null || groupBuyImgId.trim().isEmpty()) {
+                    record.setGroupBuyImgUrl("");
+                    continue;
+                }
+
+                // 分割imgId并一次性转换为Integer(避免重复解析)
+                List<Integer> imgIds = Arrays.stream(groupBuyImgId.split(","))
+                        .map(String::trim)  // 处理可能的空格
+                        .filter(idStr -> !idStr.isEmpty())  // 过滤空字符串(如连续逗号导致的)
+                        .map(idStr -> {
+                            try {
+                                return Integer.parseInt(idStr);
+                            } catch (NumberFormatException e) {
+                                // 处理非数字id的异常(如无效id)
+                                return null;
+                            }
+                        })
+                        .filter(Objects::nonNull)  // 过滤转换失败的null
+                        .collect(Collectors.toList());
+
+                // 拼接图片URL(使用StringBuilder高效拼接)
+                StringBuilder imgUrlBuilder = new StringBuilder();
+                for (Integer imgId : imgIds) {
+                    StoreImg storeImg = imgIdToImgMap.get(imgId);
+                    if (storeImg != null && storeImg.getImgUrl() != null) {
+                        if (imgUrlBuilder.length() > 0) {
+                            imgUrlBuilder.append(",");  // 非第一个元素前加逗号
+                        }
+                        imgUrlBuilder.append(storeImg.getImgUrl());
+                    }
+                }
+
+                // 设置最终的图片URL字符串(去掉末尾可能的逗号,这里通过逻辑避免了)
+                record.setGroupBuyImgUrl(imgUrlBuilder.toString());
+            }
         }
         return commentOrderPage;
     }