From 17cea8fe652d1566e856e168d528a1af628e2140 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 14 Jul 2025 10:22:00 +0800
Subject: [PATCH] feat(mall): 添加订单角标数量接口并优化相关功能
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java | 268 ++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 223 insertions(+), 45 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java
index 69b2836..c9166ad 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java
@@ -19,6 +19,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.swagger.annotations.ApiModelProperty;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -26,9 +27,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@@ -59,6 +58,9 @@
private final ClothesTypeSizeMapper clothesTypeSizeMapper;
private final ClothesTypeLocationMapper clothesTypeLocationMapper;
private final ClothesTypeArtMapper clothesTypeArtMapper;
+ private final ClothesLocationRemarkMapper clothesLocationRemarkMapper;
+ private final ClothesPatternRemarkMapper clothesPatternRemarkMapper;
+ private final ClothesSocialCommentMapper clothesSocialCommentMapper;
@Override
@@ -111,8 +113,36 @@
// 调用Mapper方法获取活动分页数据
Page<ApiAllSocialVo> voPage = clothesSocialMapper.selectPageInSocial(page, dto);
+ List<ApiAllSocialVo> vos = voPage.getRecords();
+ if (CollUtil.isNotEmpty(vos)) {
+ Set<Long> socialIds = vos.stream()
+ .map(ApiAllSocialVo::getId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ if (CollUtil.isNotEmpty(socialIds)) {
+ List<ClothesSocialFollow> clothesSocialFollows = clothesSocialFollowMapper.selectList(
+ Wrappers.lambdaQuery(ClothesSocialFollow.class)
+ .select(ClothesSocialFollow::getId, ClothesSocialFollow::getSourceId)
+ .in(ClothesSocialFollow::getSourceId, socialIds)
+ .eq(ClothesSocialFollow::getType, SocialTypeEnum.LIKE.getValue())
+ );
+
+ Map<Long, Long> likeCountBySocialIdMap = new HashMap<>();
+ if (CollUtil.isNotEmpty(clothesSocialFollows)) {
+ likeCountBySocialIdMap = clothesSocialFollows.stream()
+ .collect(Collectors.groupingBy(ClothesSocialFollow::getSourceId, Collectors.counting()));
+ }
+
+ for (ApiAllSocialVo item : vos){
+ item.setLikeCnt(likeCountBySocialIdMap.getOrDefault(item.getId(), 0L).intValue());
+ }
+ }
+ }
+
return new FebsResponse().success().data(voPage);
}
+
@Override
public FebsResponse socialInfo(ApiSocialInfoDto dto) {
@@ -127,6 +157,7 @@
apiSocialInfoVo.setName(clothesSocial.getName());
apiSocialInfoVo.setContent(clothesSocial.getContent());
apiSocialInfoVo.setCreatedTime(clothesSocial.getCreatedTime());
+ apiSocialInfoVo.setCommentState(clothesSocial.getCommentState());
List<ClothesSocialFile> clothesSocialFiles = clothesSocialFileMapper.selectList(
Wrappers.lambdaQuery(ClothesSocialFile.class)
@@ -147,10 +178,6 @@
if(ObjectUtil.isNotNull(clothesSocialMuse)){
BigDecimal totalAmount = BigDecimal.ZERO;
apiSocialMuseVo.setMuseId(clothesSocialMuse.getId());
-
- apiSocialMuseVo.setPatternImage(clothesSocialMuse.getPatternImage());
- apiSocialMuseVo.setPatternText(clothesSocialMuse.getPatternText());
-
ClothesType clothesType = clothesTypeMapper.selectById(clothesSocialMuse.getTypeId());
if(ObjectUtil.isNotNull(clothesType)){
apiSocialMuseVo.setTypeName(clothesType.getName());
@@ -160,16 +187,6 @@
if(ObjectUtil.isNotNull(clothesSize)){
apiSocialMuseVo.setSizeName(clothesSize.getName());
totalAmount = totalAmount.add(clothesSize.getPrice());
- }
- ClothesPattern clothesPattern = clothesPatternMapper.selectById(clothesSocialMuse.getPatternId());
- if(ObjectUtil.isNotNull(clothesPattern)){
- apiSocialMuseVo.setPatternName(clothesPattern.getName());
- totalAmount = totalAmount.add(clothesPattern.getPrice());
- }
- ClothesLocation clothesLocation = clothesLocationMapper.selectById(clothesSocialMuse.getLocationId());
- if(ObjectUtil.isNotNull(clothesLocation)){
- apiSocialMuseVo.setLocationName(clothesLocation.getName());
- totalAmount = totalAmount.add(clothesLocation.getPrice());
}
ClothesCloth clothesCloth = clothesClothMapper.selectById(clothesSocialMuse.getClothId());
if(ObjectUtil.isNotNull(clothesCloth)){
@@ -181,7 +198,70 @@
apiSocialMuseVo.setArtName(clothesArt.getName());
totalAmount = totalAmount.add(clothesArt.getPrice());
}
+
+
+ List<ApiClothesPatternRemarkVo> patternRemarkList = new ArrayList<>();
+
+ List<ClothesPatternRemark> patternRemarks = clothesPatternRemarkMapper.selectList(
+ Wrappers.lambdaQuery(ClothesPatternRemark.class)
+ .eq(ClothesPatternRemark::getSourceId, clothesSocialMuse.getId())
+ .eq(ClothesPatternRemark::getType, SocialPatternLocationTypeEnum.MUSE.getValue())
+ );
+ if(CollUtil.isNotEmpty(patternRemarks)){
+ for (ClothesPatternRemark entity : patternRemarks){
+ ApiClothesPatternRemarkVo vo = new ApiClothesPatternRemarkVo();
+ ClothesPattern pattern = clothesPatternMapper.selectById(entity.getPatternId());
+ vo.setPatternName(pattern.getName());
+ vo.setPatternRemark(entity.getRemark());
+ patternRemarkList.add( vo);
+
+ totalAmount = totalAmount.add(pattern.getPrice());
+ }
+ apiSocialMuseVo.setPatternRemarkList(patternRemarkList);
+ }
+
+ List<ApiClothesLocationRemarkVo> locationRemarkList = new ArrayList<>();
+ List<ClothesLocationRemark> locationRemarks = clothesLocationRemarkMapper.selectList(
+ Wrappers.lambdaQuery(ClothesLocationRemark.class)
+ .eq(ClothesLocationRemark::getSourceId, clothesSocialMuse.getId())
+ .eq(ClothesLocationRemark::getType, SocialPatternLocationTypeEnum.MUSE.getValue())
+ );
+ if(CollUtil.isNotEmpty(locationRemarks)){
+ for (ClothesLocationRemark entity : locationRemarks){
+ ApiClothesLocationRemarkVo vo = new ApiClothesLocationRemarkVo();
+ ClothesLocation clothesLocation = clothesLocationMapper.selectById(entity.getLocationId());
+ vo.setLocationName(clothesLocation.getName());
+ vo.setLocationRemark(entity.getRemark());
+ locationRemarkList.add(vo);
+
+ totalAmount = totalAmount.add(clothesLocation.getPrice());
+ }
+ apiSocialMuseVo.setLocationRemarkList(locationRemarkList);
+ }
apiSocialMuseVo.setTotalAmount(totalAmount.setScale(2, RoundingMode.DOWN));
+
+ List<ClothesSocialFollow> clothesSocialFollows = clothesSocialFollowMapper.selectList(
+ Wrappers.lambdaQuery(ClothesSocialFollow.class)
+ .select(ClothesSocialFollow::getType)
+ .eq(ClothesSocialFollow::getSourceId, socialId)
+ );
+ if (CollUtil.isNotEmpty(clothesSocialFollows)){
+
+ Map<Integer, Long> collect = clothesSocialFollows.stream()
+ .collect(Collectors.groupingBy(ClothesSocialFollow::getType, Collectors.counting()));
+ apiSocialInfoVo.setLikeCnt(collect.getOrDefault(SocialTypeEnum.LIKE.getValue(), 0L).intValue());
+ apiSocialInfoVo.setCollectCnt(collect.getOrDefault(SocialTypeEnum.COLLECT.getValue(), 0L).intValue());
+ }
+
+ List<ClothesSocialComment> clothesSocialComments = clothesSocialCommentMapper.selectList(
+ Wrappers.lambdaQuery(ClothesSocialComment.class)
+ .eq(ClothesSocialComment::getSocialId, socialId)
+ .eq(ClothesSocialComment::getShowState, ClothesEnum.UP.getCode())
+ .isNull(ClothesSocialComment::getParentId)
+ );
+ if (CollUtil.isNotEmpty(clothesSocialComments)){
+ apiSocialInfoVo.setCommentCnt(clothesSocialComments.size());
+ }
}
}
@@ -239,6 +319,9 @@
Wrappers.lambdaQuery(ClothesOrderItem.class)
.eq(ClothesOrderItem::getOrderId, orderId)
);
+
+ List<ClothesLocationRemark> clothesLocationRemarks = new ArrayList<>();
+ List<ClothesPatternRemark> clothesPatternRemarks = new ArrayList<>();
if(CollUtil.isEmpty(clothesOrderItems)){
for (ClothesOrderItem item : clothesOrderItems){
if (ClothesOrderItemEnum.CLOTH.getCode() == item.getType()) {
@@ -251,12 +334,23 @@
continue;
} else if (ClothesOrderItemEnum.LOCATION.getCode() == item.getType()) {
ClothesLocation location = clothesLocationMapper.selectById(item.getItemId());
- clothesSocialMuse.setLocationId(location.getId());
+ ClothesLocationRemark entity = new ClothesLocationRemark();
+ entity.setLocationId(location.getId());
+ entity.setMemberId(memberId);
+ entity.setSourceId(clothesSocialMuse.getId());
+ entity.setType(SocialPatternLocationTypeEnum.MUSE.getValue());
+ entity.setRemark(item.getRemark());
+ clothesLocationRemarks.add(entity);
continue;
} else if (ClothesOrderItemEnum.PATTERN.getCode() == item.getType()) {
ClothesPattern pattern = clothesPatternMapper.selectById(item.getItemId());
- clothesSocialMuse.setPatternId(pattern.getId());
- clothesSocialMuse.setPatternRemark(item.getRemark());
+ ClothesPatternRemark entity = new ClothesPatternRemark();
+ entity.setPatternId(pattern.getId());
+ entity.setMemberId(memberId);
+ entity.setSourceId(clothesSocialMuse.getId());
+ entity.setType(SocialPatternLocationTypeEnum.MUSE.getValue());
+ entity.setRemark(item.getRemark());
+ clothesPatternRemarks.add(entity);
continue;
} else if (ClothesOrderItemEnum.ART.getCode() == item.getType()) {
ClothesArt art = clothesArtMapper.selectById(item.getItemId());
@@ -268,6 +362,20 @@
}
}
clothesSocialMuseMapper.insert(clothesSocialMuse);
+
+ if (CollUtil.isNotEmpty(clothesLocationRemarks)){
+ for (ClothesLocationRemark entity : clothesLocationRemarks){
+ entity.setSourceId(clothesSocialMuse.getId());
+ clothesLocationRemarkMapper.insert(entity);
+ }
+ }
+
+ if (CollUtil.isNotEmpty(clothesPatternRemarks)){
+ for (ClothesPatternRemark entity : clothesPatternRemarks){
+ entity.setSourceId(clothesSocialMuse.getId());
+ clothesPatternRemarkMapper.insert(entity);
+ }
+ }
return new FebsResponse().success().message("操作成功");
}
@@ -338,7 +446,6 @@
record.setTypeId(typeId);
record.setTypeName(clothesType.getName());
record.setTypeImage(clothesType.getImage());
- record.setPatternRemark(entity.getPatternRemark());
Long sizeId = ObjectUtil.defaultIfNull(entity.getSizeId(),0L);
List<ClothesTypeSize> clothesTypeSizes = clothesTypeSizeMapper.selectList(Wrappers.<ClothesTypeSize>lambdaQuery().eq(ClothesTypeSize::getTypeId, typeId));
@@ -354,32 +461,49 @@
}
}
- Long patternId = ObjectUtil.defaultIfNull(entity.getPatternId(),0L);
- List<ClothesTypePattern> clothesTypePatterns = clothesTypePatternMapper.selectList(Wrappers.<ClothesTypePattern>lambdaQuery().eq(ClothesTypePattern::getTypeId, typeId));
- if (CollUtil.isNotEmpty(clothesTypePatterns)){
- Set<Long> patternIds = clothesTypePatterns.stream().map(ClothesTypePattern::getPatternId).collect(Collectors.toSet());
- if(CollUtil.isNotEmpty( patternIds) && patternIds.contains(patternId)){
- ClothesPattern clothesPattern = clothesPatternMapper.selectById(patternId);
- if (ObjectUtil.isNotNull(clothesPattern)){
- record.setPatternId(patternId);
- record.setPatternName(clothesPattern.getName());
- record.setPatternPrice(clothesPattern.getPrice());
- }
+ BigDecimal totalPatternAmount = BigDecimal.ZERO;
+ List<ApiClothesPatternRemarkVo> patternRemarkList = new ArrayList<>();
+ List<ClothesPatternRemark> patternRemarks = clothesPatternRemarkMapper.selectList(
+ Wrappers.lambdaQuery(ClothesPatternRemark.class)
+ .eq(ClothesPatternRemark::getSourceId, entity.getId())
+ .eq(ClothesPatternRemark::getType, SocialPatternLocationTypeEnum.MUSE.getValue())
+ );
+ if(CollUtil.isNotEmpty(patternRemarks)){
+ for (ClothesPatternRemark patternRemark : patternRemarks){
+ ApiClothesPatternRemarkVo vo = new ApiClothesPatternRemarkVo();
+ ClothesPattern pattern = clothesPatternMapper.selectById(patternRemark.getPatternId());
+ vo.setPatternName(pattern.getName());
+ vo.setPatternPrice(pattern.getPrice());
+ vo.setPatternId(pattern.getId());
+ vo.setPatternRemark(patternRemark.getRemark());
+ patternRemarkList.add( vo);
+
+ totalPatternAmount = totalPatternAmount.add(pattern.getPrice());
}
+ record.setPatternRemarkList(patternRemarkList);
}
- Long locationId = ObjectUtil.defaultIfNull(entity.getLocationId(),0L);
- List<ClothesTypeLocation> clothesTypeLocations = clothesTypeLocationMapper.selectList(Wrappers.<ClothesTypeLocation>lambdaQuery().eq(ClothesTypeLocation::getTypeId, typeId));
- if (CollUtil.isNotEmpty(clothesTypeLocations)){
- Set<Long> locationIds = clothesTypeLocations.stream().map(ClothesTypeLocation::getLocationId).collect(Collectors.toSet());
- if(CollUtil.isNotEmpty( locationIds) && locationIds.contains(locationId)){
- ClothesLocation clothesLocation = clothesLocationMapper.selectById(locationId);
- if (ObjectUtil.isNotNull(clothesLocation)){
- record.setLocationId(locationId);
- record.setLocationName(clothesLocation.getName());
- record.setLocationPrice(clothesLocation.getPrice());
- }
+
+ BigDecimal totalLocationAmount = BigDecimal.ZERO;
+ List<ApiClothesLocationRemarkVo> locationRemarkList = new ArrayList<>();
+ List<ClothesLocationRemark> locationRemarks = clothesLocationRemarkMapper.selectList(
+ Wrappers.lambdaQuery(ClothesLocationRemark.class)
+ .eq(ClothesLocationRemark::getSourceId, entity.getId())
+ .eq(ClothesLocationRemark::getType, SocialPatternLocationTypeEnum.MUSE.getValue())
+ );
+ if(CollUtil.isNotEmpty(locationRemarks)){
+ for (ClothesLocationRemark locationRemark : locationRemarks){
+ ApiClothesLocationRemarkVo vo = new ApiClothesLocationRemarkVo();
+ ClothesLocation clothesLocation = clothesLocationMapper.selectById(locationRemark.getLocationId());
+ vo.setLocationName(clothesLocation.getName());
+ vo.setLocationRemark(locationRemark.getRemark());
+ vo.setLocationPrice(clothesLocation.getPrice());
+ vo.setLocationId(clothesLocation.getId());
+ locationRemarkList.add(vo);
+
+ totalLocationAmount = totalLocationAmount.add(clothesLocation.getPrice());
}
+ record.setLocationRemarkList(locationRemarkList);
}
Long artId = ObjectUtil.defaultIfNull(entity.getArtId(),0L);
@@ -412,16 +536,70 @@
BigDecimal amount =
record.getClothPrice()
- .add(record.getLocationPrice())
+ .add(totalLocationAmount)
.add(record.getArtPrice())
.add(record.getSizePrice())
- .add(record.getPatternPrice()).setScale(2, RoundingMode.DOWN);
+ .add(totalPatternAmount)
+ .setScale(2, RoundingMode.DOWN);
record.setAmount(amount);
}
return new FebsResponse().success().data(record);
}
+ @Override
+ public FebsResponse comment(ApiClothesSocialCommentDto dto) {
+
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ Long socialId = dto.getSocialId();
+ Long commentId = dto.getCommentId();
+ ClothesSocial clothesSocial = clothesSocialMapper.selectById(socialId);
+ if (ObjectUtil.isNull(clothesSocial)){
+ return new FebsResponse().fail().message("社区不存在");
+ }
+ if (ClothesEnum.DOWN.getCode() == clothesSocial.getCommentState()){
+ return new FebsResponse().fail().message("禁止评论");
+ }
+ ClothesSocialComment entity = new ClothesSocialComment();
+ entity.setMemberId(memberId);
+ entity.setSocialId(socialId);
+ entity.setComment(dto.getComment());
+ ClothesSocialComment clothesSocialComment = clothesSocialCommentMapper.selectById(commentId);
+ if(ObjectUtil.isNotNull(clothesSocialComment)){
+ entity.setParentId(clothesSocialComment.getParentId());
+ entity.setCommentId(clothesSocialComment.getId());
+ }
+ clothesSocialCommentMapper.insert(entity);
+
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse allComment(ApiAllCommentDto dto) {
+ // 创建分页对象,传入当前页和每页大小
+ Page<ApiAllCommentVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+ // 调用Mapper方法获取活动分页数据
+ Page<ApiAllCommentVo> voPage = clothesSocialCommentMapper.selectPageInComment(page, dto);
+ List<ApiAllCommentVo> records = voPage.getRecords();
+ if (CollUtil.isNotEmpty(records)){
+ Set<Long> collect = records.stream().map(ApiAllCommentVo::getCommentId).collect(Collectors.toSet());
+ List<ClothesSocialComment> clothesSocialComments = clothesSocialCommentMapper.selectList(
+ Wrappers.lambdaQuery(ClothesSocialComment.class)
+ .select(ClothesSocialComment::getParentId)
+ .in(ClothesSocialComment::getParentId, collect)
+ .eq(ClothesSocialComment::getShowState, ClothesEnum.UP.getCode())
+ );
+ if (CollUtil.isNotEmpty(clothesSocialComments)){
+ Map<Long, Long> collect1 = clothesSocialComments.stream()
+ .collect(Collectors.groupingBy(ClothesSocialComment::getParentId, Collectors.counting()));
+ for (ApiAllCommentVo vo : records){
+ vo.setCommentCnt(collect1.getOrDefault(vo.getCommentId(), 0L).intValue());
+ }
+ }
+ }
+ return new FebsResponse().success().data(voPage);
+ }
+
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.putByPath("text", "123");
--
Gitblit v1.9.1