|
|
@@ -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;
|
|
|
}
|