Browse Source

Merge branch 'sit' into dev

# Conflicts:
#	alien-entity/src/main/java/shop/alien/mapper/LifeUserOrderMapper.java
lyx 1 tháng trước cách đây
mục cha
commit
0c45b2ec01

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeGroupBuyThaliVo.java

@@ -256,4 +256,7 @@ public class LifeGroupBuyThaliVo {
     @ApiModelProperty(value = "是否收藏")
     private String isCollect;
 
+    @ApiModelProperty(value = "已售数量")
+    private Integer saleNum;
+
 }

+ 4 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeUserOrderMapper.java

@@ -1,6 +1,7 @@
 package shop.alien.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
@@ -71,4 +72,7 @@ public interface LifeUserOrderMapper extends BaseMapper<LifeUserOrder> {
      * @return
      */
     List<LifeUserOrderVo> selectRefundList(@Param(Constants.WRAPPER) QueryWrapper<LifeUserOrder> selectWrapper);
+
+    @Select("SELECT count( luo.id ) FROM life_user_order luo LEFT JOIN order_coupon_middle ocm ON luo.id = ocm.order_id WHERE luo.`status` IN ( 0, 1, 2, 7 ) AND luo.delete_flag = 0 AND luo.coupon_type = 2 AND ocm.coupon_id = #{groupId}")
+    Integer countBuyGroup(@Param("groupId") String groupId);
 }

+ 6 - 0
alien-store/src/main/java/shop/alien/store/service/impl/LifeGroupBuyServiceImpl.java

@@ -46,6 +46,8 @@ public class LifeGroupBuyServiceImpl extends ServiceImpl<LifeGroupBuyMainMapper,
 
     private final WebAuditMapper webAuditMapper;
 
+    private final LifeUserOrderMapper lifeUserOrderMapper;
+
     @Override
     public boolean saveThali(LifeGroupBuyDto lifeGroupBuyDto) {
         JSONObject currentUserInfo = JwtUtil.getCurrentUserInfo();
@@ -187,6 +189,10 @@ public class LifeGroupBuyServiceImpl extends ServiceImpl<LifeGroupBuyMainMapper,
         }
         lifeGroupBuyThaliVo.setDetails(resultMap);
         getMainImgAndDisableDate(lifeGroupBuyThaliVo);
+
+        //已售数量
+        lifeGroupBuyThaliVo.setSaleNum(lifeUserOrderMapper.countBuyGroup(id));
+
         return lifeGroupBuyThaliVo;
     }
 

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