Administrator
2025-07-18 4888ef96061e19769427bf52b0a644da7910331e
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
@@ -74,6 +76,11 @@
        if(CollUtil.isNotEmpty(list)){
            vos = buildApiClothesCategoryInfoVo(list, vos);
        }
        ApiClothesCategoryInfoVo apiClothesCategoryInfoVo = new ApiClothesCategoryInfoVo();
        apiClothesCategoryInfoVo.setId(0L);
        apiClothesCategoryInfoVo.setName("全部");
        vos.add(apiClothesCategoryInfoVo);
        return new FebsResponse().success().data(vos);
    }
@@ -111,8 +118,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::getSourceType, SocialSourceTypeEnum.SOCIAL.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 +162,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 +183,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 +192,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 +203,73 @@
                    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));
                apiSocialInfoVo.setMuse(apiSocialMuseVo);
                List<ClothesSocialFollow> clothesSocialFollows = clothesSocialFollowMapper.selectList(
                        Wrappers.lambdaQuery(ClothesSocialFollow.class)
                                .select(ClothesSocialFollow::getType)
                                .eq(ClothesSocialFollow::getSourceId, socialId)
                                .eq(ClothesSocialFollow::getSourceType, SocialSourceTypeEnum.SOCIAL.getValue())
                );
                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,7 +327,10 @@
                Wrappers.lambdaQuery(ClothesOrderItem.class)
                        .eq(ClothesOrderItem::getOrderId, orderId)
        );
        if(CollUtil.isEmpty(clothesOrderItems)){
        List<ClothesLocationRemark> clothesLocationRemarks = new ArrayList<>();
        List<ClothesPatternRemark> clothesPatternRemarks = new ArrayList<>();
        if(CollUtil.isNotEmpty(clothesOrderItems)){
            for (ClothesOrderItem item : clothesOrderItems){
                if (ClothesOrderItemEnum.CLOTH.getCode() == item.getType()) {
                    ClothesCloth cloth = clothesClothMapper.selectById(item.getItemId());
@@ -251,12 +342,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 +370,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 +454,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));
@@ -349,37 +464,57 @@
                    if(ObjectUtil.isNotNull(clothesSize)){
                        record.setSizeId(sizeId);
                        record.setSizeName(clothesSize.getName());
                        record.setSizeImage(clothesSize.getImage());
                        record.setSizePrice(clothesSize.getPrice());
                    }
                }
            }
            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.setPatternImage(pattern.getImage());
                    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.setLocationImage(clothesLocation.getImage());
                    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);
@@ -390,6 +525,7 @@
                    ClothesArt clothesArt = clothesArtMapper.selectById(artId);
                    if (ObjectUtil.isNotNull(clothesArt)){
                        record.setArtId(artId);
                        record.setArtImage(clothesArt.getImage());
                        record.setArtName(clothesArt.getName());
                        record.setArtPrice(clothesArt.getPrice());
                    }
@@ -404,6 +540,7 @@
                    ClothesCloth clothesCloth = clothesClothMapper.selectById(clothId);
                    if (ObjectUtil.isNotNull(clothesCloth)){
                        record.setClothId(clothId);
                        record.setClothImage(clothesCloth.getImage());
                        record.setClothName(clothesCloth.getName());
                        record.setClothPrice(clothesCloth.getPrice());
                    }
@@ -412,16 +549,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.getId());
            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");