Administrator
2025-07-25 fc03a0df2edbf308351d3fb4027919e1d1d30e51
src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java
@@ -4,14 +4,17 @@
import cc.mrbird.febs.common.enumerates.*;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.dto.ApiColletDelDto;
import cc.mrbird.febs.mall.dto.clothes.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.ApiClothesSocialService;
import cc.mrbird.febs.mall.vo.activity.ApiScCategoryInfoVo;
import cc.mrbird.febs.mall.vo.clothes.*;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
@@ -27,9 +30,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
@@ -62,11 +63,18 @@
    private final ClothesTypeArtMapper clothesTypeArtMapper;
    private final ClothesLocationRemarkMapper clothesLocationRemarkMapper;
    private final ClothesPatternRemarkMapper clothesPatternRemarkMapper;
    private final ClothesSocialCommentMapper clothesSocialCommentMapper;
    private final AgentProducer agentProducer;
    @Override
    public FebsResponse allCategory() {
        List<ApiClothesCategoryInfoVo> vos = new ArrayList<>();
        ApiClothesCategoryInfoVo apiClothesCategoryInfoVo = new ApiClothesCategoryInfoVo();
        apiClothesCategoryInfoVo.setId(0L);
        apiClothesCategoryInfoVo.setName("全部");
        apiClothesCategoryInfoVo.setType(2);
        vos.add(apiClothesCategoryInfoVo);
        List<ClothesSocialCategory> list = clothesSocialCategoryMapper.selectList(
                Wrappers.lambdaQuery(ClothesSocialCategory.class)
                        .select(ClothesSocialCategory::getId, ClothesSocialCategory::getName)
@@ -75,16 +83,18 @@
                        .orderByAsc(ClothesSocialCategory::getOrderCnt)
        );
        if(CollUtil.isNotEmpty(list)){
            vos = buildApiClothesCategoryInfoVo(list, vos);
            vos = buildApiClothesCategoryInfoVo(list, vos,2);
        }
        return new FebsResponse().success().data(vos);
    }
    private List<ApiClothesCategoryInfoVo> buildApiClothesCategoryInfoVo(List<ClothesSocialCategory> list, List<ApiClothesCategoryInfoVo> vos) {
    private List<ApiClothesCategoryInfoVo> buildApiClothesCategoryInfoVo(List<ClothesSocialCategory> list, List<ApiClothesCategoryInfoVo> vos,Integer  type) {
        for (ClothesSocialCategory entity : list) {
            ApiClothesCategoryInfoVo vo = new ApiClothesCategoryInfoVo();
            vo.setId(entity.getId());
            vo.setName(entity.getName());
            vo.setType(type);
            vos.add(vo);
        }
        return vos;
@@ -102,7 +112,7 @@
                        .orderByAsc(ClothesSocialCategory::getOrderCnt)
        );
        if(CollUtil.isNotEmpty(list)){
            vos = buildApiClothesCategoryInfoVo(list, vos);
            vos = buildApiClothesCategoryInfoVo(list, vos,1);
        }
        return new FebsResponse().success().data(vos);
    }
@@ -114,8 +124,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) {
@@ -130,6 +168,9 @@
            apiSocialInfoVo.setName(clothesSocial.getName());
            apiSocialInfoVo.setContent(clothesSocial.getContent());
            apiSocialInfoVo.setCreatedTime(clothesSocial.getCreatedTime());
            apiSocialInfoVo.setCommentState(clothesSocial.getCommentState());
            apiSocialInfoVo.setLikeCnt(clothesSocial.getLikeCnt());
            apiSocialInfoVo.setCollectCnt(clothesSocial.getCollectCnt());
            List<ClothesSocialFile> clothesSocialFiles = clothesSocialFileMapper.selectList(
                    Wrappers.lambdaQuery(ClothesSocialFile.class)
@@ -156,17 +197,17 @@
                    apiSocialMuseVo.setTypeImg(clothesType.getImage());
                }
                ClothesSize clothesSize = clothesSizeMapper.selectById(clothesSocialMuse.getSizeId());
                if(ObjectUtil.isNotNull(clothesSize)){
                if(ObjectUtil.isNotNull(clothesSize) && clothesType.getSizeState() == 1){
                    apiSocialMuseVo.setSizeName(clothesSize.getName());
                    totalAmount = totalAmount.add(clothesSize.getPrice());
                }
                ClothesCloth clothesCloth = clothesClothMapper.selectById(clothesSocialMuse.getClothId());
                if(ObjectUtil.isNotNull(clothesCloth)){
                if(ObjectUtil.isNotNull(clothesCloth) && clothesType.getClothState() == 1){
                    apiSocialMuseVo.setClothName(clothesCloth.getName());
                    totalAmount = totalAmount.add(clothesCloth.getPrice());
                }
                ClothesArt clothesArt = clothesArtMapper.selectById(clothesSocialMuse.getArtId());
                if(ObjectUtil.isNotNull(clothesArt)){
                if(ObjectUtil.isNotNull(clothesArt) && clothesType.getArtState() == 1){
                    apiSocialMuseVo.setArtName(clothesArt.getName());
                    totalAmount = totalAmount.add(clothesArt.getPrice());
                }
@@ -179,7 +220,7 @@
                                .eq(ClothesPatternRemark::getSourceId, clothesSocialMuse.getId())
                                .eq(ClothesPatternRemark::getType, SocialPatternLocationTypeEnum.MUSE.getValue())
                );
                if(CollUtil.isNotEmpty(patternRemarks)){
                if(CollUtil.isNotEmpty(patternRemarks) && clothesType.getPatternState() == 1){
                    for (ClothesPatternRemark entity : patternRemarks){
                        ApiClothesPatternRemarkVo vo = new ApiClothesPatternRemarkVo();
                        ClothesPattern pattern = clothesPatternMapper.selectById(entity.getPatternId());
@@ -198,7 +239,7 @@
                                .eq(ClothesLocationRemark::getSourceId, clothesSocialMuse.getId())
                                .eq(ClothesLocationRemark::getType, SocialPatternLocationTypeEnum.MUSE.getValue())
                );
                if(CollUtil.isNotEmpty(locationRemarks)){
                if(CollUtil.isNotEmpty(locationRemarks)  && clothesType.getLocationState() == 1){
                    for (ClothesLocationRemark entity : locationRemarks){
                        ApiClothesLocationRemarkVo vo = new ApiClothesLocationRemarkVo();
                        ClothesLocation clothesLocation = clothesLocationMapper.selectById(entity.getLocationId());
@@ -211,6 +252,44 @@
                    apiSocialMuseVo.setLocationRemarkList(locationRemarkList);
                }
                apiSocialMuseVo.setTotalAmount(totalAmount.setScale(2, RoundingMode.DOWN));
//                if(
//                        ObjectUtil.isNotNull(clothesArt)
//                        && ObjectUtil.isNotNull(clothesSize)
//                        && ObjectUtil.isNotNull(clothesCloth)
//                ){
//                    apiSocialInfoVo.setMuse(apiSocialMuseVo);
//                }
                apiSocialInfoVo.setMuse(apiSocialMuseVo);
//                Integer likeCnt = clothesSocial.getLikeCnt();
//                Integer collectCnt = clothesSocial.getCollectCnt();
//
//                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()));
//                    likeCnt = likeCnt + collect.getOrDefault(SocialTypeEnum.LIKE.getValue(), 0L).intValue();
//                    collectCnt = collectCnt + collect.getOrDefault(SocialTypeEnum.COLLECT.getValue(), 0L).intValue();
//                }
//                apiSocialInfoVo.setLikeCnt(likeCnt);
//                apiSocialInfoVo.setCollectCnt(collectCnt);
                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());
                }
            }
        }
@@ -271,7 +350,7 @@
        List<ClothesLocationRemark> clothesLocationRemarks = new ArrayList<>();
        List<ClothesPatternRemark> clothesPatternRemarks = new ArrayList<>();
        if(CollUtil.isEmpty(clothesOrderItems)){
        if(CollUtil.isNotEmpty(clothesOrderItems)){
            for (ClothesOrderItem item : clothesOrderItems){
                if (ClothesOrderItemEnum.CLOTH.getCode() == item.getType()) {
                    ClothesCloth cloth = clothesClothMapper.selectById(item.getItemId());
@@ -341,6 +420,8 @@
            clothesSocialFollow.setSourceId(socialId);
            clothesSocialFollow.setType(SocialTypeEnum.LIKE.getValue());
            clothesSocialFollowMapper.insert(clothesSocialFollow);
            agentProducer.sendAddLike(socialId);
        }
        return new FebsResponse().success().message("操作成功");
    }
@@ -369,14 +450,39 @@
        Long socialId = dto.getSocialId();
        ClothesSocial clothesSocial = clothesSocialMapper.selectById(socialId);
        if(ObjectUtil.isNotNull(clothesSocial)){
            List<ClothesSocialFollow> clothesSocialFollows = clothesSocialFollowMapper.selectList(
                    Wrappers.lambdaQuery(ClothesSocialFollow.class)
                            .eq(ClothesSocialFollow::getMemberId, memberId)
                            .eq(ClothesSocialFollow::getSourceType, SocialSourceTypeEnum.SOCIAL.getValue())
                            .eq(ClothesSocialFollow::getSourceId, socialId)
                            .eq(ClothesSocialFollow::getType, SocialTypeEnum.COLLECT.getValue())
            );
            if (CollUtil.isNotEmpty(clothesSocialFollows)){
                return new FebsResponse().success().message("已收藏");
            }
            ClothesSocialFollow clothesSocialFollow = new ClothesSocialFollow();
            clothesSocialFollow.setMemberId(memberId);
            clothesSocialFollow.setSourceType(SocialSourceTypeEnum.SOCIAL.getValue());
            clothesSocialFollow.setSourceId(socialId);
            clothesSocialFollow.setType(SocialTypeEnum.COLLECT.getValue());
            clothesSocialFollowMapper.insert(clothesSocialFollow);
            agentProducer.sendAddCollect(socialId);
        }
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public FebsResponse myCollect(ApiSocialMyCollectAddDto dto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        dto.setMemberId(memberId);
        // 创建分页对象,传入当前页和每页大小
        Page<ApiSocialMyCollectVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        // 调用Mapper方法获取活动分页数据
        Page<ApiSocialMyCollectVo> voPage = clothesSocialFollowMapper.selectPageInMyComment(page, dto);
        return new FebsResponse().success().data(voPage);
    }
    @Override
@@ -405,6 +511,7 @@
                    if(ObjectUtil.isNotNull(clothesSize)){
                        record.setSizeId(sizeId);
                        record.setSizeName(clothesSize.getName());
                        record.setSizeImage(clothesSize.getImage());
                        record.setSizePrice(clothesSize.getPrice());
                    }
                }
@@ -422,9 +529,14 @@
                    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());
                    vo.setBoxHeight(pattern.getBoxHeight());
                    vo.setBoxWidth(pattern.getBoxWidth());
                    vo.setLeftPercent(pattern.getLeftPercent());
                    vo.setTopPercent(pattern.getTopPercent());
                    patternRemarkList.add( vo);
                    totalPatternAmount = totalPatternAmount.add(pattern.getPrice());
@@ -446,8 +558,13 @@
                    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());
                    vo.setBoxHeight(clothesLocation.getBoxHeight());
                    vo.setBoxWidth(clothesLocation.getBoxWidth());
                    vo.setLeftPercent(clothesLocation.getLeftPercent());
                    vo.setTopPercent(clothesLocation.getTopPercent());
                    locationRemarkList.add(vo);
                    totalLocationAmount = totalLocationAmount.add(clothesLocation.getPrice());
@@ -463,6 +580,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());
                    }
@@ -477,6 +595,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());
                    }
@@ -496,6 +615,102 @@
        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);
    }
    @Override
    public FebsResponse delCollection(ApiColletDelDto dto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        List<Long> ids = dto.getIds();
        if (CollUtil.isEmpty(ids)) {
            return new FebsResponse().success().message("操作成功");
        }
        LambdaQueryWrapper<ClothesSocialFollow> delQuery = new LambdaQueryWrapper<>();
        delQuery.eq(ClothesSocialFollow::getMemberId, memberId);
        delQuery.eq(ClothesSocialFollow::getSourceType, SocialSourceTypeEnum.SOCIAL.getValue());
        delQuery.in(ClothesSocialFollow::getSourceId, ids);
        delQuery.eq(ClothesSocialFollow::getType, SocialTypeEnum.COLLECT.getValue());
        clothesSocialFollowMapper.delete(delQuery);
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public FebsResponse followState(ApiSocialCollectFollowStateDto dto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
        Integer collectState = clothesSocialFollowMapper.selectCount(
                Wrappers.lambdaQuery(ClothesSocialFollow.class)
                        .eq(ClothesSocialFollow::getMemberId, memberId)
                        .eq(ClothesSocialFollow::getSourceType, SocialSourceTypeEnum.SOCIAL.getValue())
                        .eq(ClothesSocialFollow::getSourceId, dto.getSocialId())
                        .eq(ClothesSocialFollow::getType, SocialTypeEnum.COLLECT.getValue())
        );
        stringObjectHashMap.put("collectState", collectState);
        Integer likeState = clothesSocialFollowMapper.selectCount(
                Wrappers.lambdaQuery(ClothesSocialFollow.class)
                        .eq(ClothesSocialFollow::getMemberId, memberId)
                        .eq(ClothesSocialFollow::getSourceType, SocialSourceTypeEnum.SOCIAL.getValue())
                        .eq(ClothesSocialFollow::getSourceId, dto.getSocialId())
                        .eq(ClothesSocialFollow::getType, SocialTypeEnum.LIKE.getValue())
        );
        stringObjectHashMap.put("likeState", likeState);
        return new FebsResponse().success().data(stringObjectHashMap);
    }
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.putByPath("text", "123");