Administrator
2025-07-09 44aa87717297bb4fca4bb83ba631646a87749174
src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesSocialServiceImpl.java
@@ -1,26 +1,35 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.ClothesEnum;
import cc.mrbird.febs.common.enumerates.StateUpDownEnum;
import cc.mrbird.febs.mall.entity.ClothesSocial;
import cc.mrbird.febs.mall.entity.ClothesSocialCategory;
import cc.mrbird.febs.mall.entity.HappySocialCircleCategory;
import cc.mrbird.febs.mall.mapper.ClothesSocialCategoryMapper;
import cc.mrbird.febs.mall.mapper.ClothesSocialMapper;
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.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.ApiClothesCategoryInfoVo;
import cc.mrbird.febs.mall.vo.clothes.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
@Service
@@ -28,7 +37,29 @@
public class ApiClothesSocialServiceImpl extends ServiceImpl<ClothesSocialMapper, ClothesSocial> implements ApiClothesSocialService {
    private final ClothesSocialMapper clothesSocialMapper;
    private final ClothesSocialFileMapper clothesSocialFileMapper;
    private final ClothesSocialMuseMapper clothesSocialMuseMapper;
    private final ClothesSocialCategoryMapper clothesSocialCategoryMapper;
    private final MallMemberMapper mallMemberMapper;
    private final ClothesTypeMapper clothesTypeMapper;
    private final ClothesSizeMapper clothesSizeMapper;
    private final ClothesPatternMapper clothesPatternMapper;
    private final ClothesLocationMapper clothesLocationMapper;
    private final ClothesClothMapper clothesClothMapper;
    private final ClothesArtMapper clothesArtMapper;
    private final ClothesOrderMapper clothesOrderMapper;
    private final ClothesOrderItemMapper clothesOrderItemMapper;
    private final ClothesSocialFollowMapper clothesSocialFollowMapper;
    private final ClothesTypeClothMapper clothesTypeClothMapper;
    private final ClothesTypePatternMapper clothesTypePatternMapper;
    private final ClothesTypeSizeMapper clothesTypeSizeMapper;
    private final ClothesTypeLocationMapper clothesTypeLocationMapper;
    private final ClothesTypeArtMapper clothesTypeArtMapper;
    @Override
    public FebsResponse allCategory() {
@@ -72,4 +103,331 @@
        }
        return new FebsResponse().success().data(vos);
    }
    @Override
    public FebsResponse allSocial(ApiAllSocialDto dto) {
        // 创建分页对象,传入当前页和每页大小
        Page<ApiAllSocialVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        // 调用Mapper方法获取活动分页数据
        Page<ApiAllSocialVo> voPage = clothesSocialMapper.selectPageInSocial(page, dto);
        return new FebsResponse().success().data(voPage);
    }
    @Override
    public FebsResponse socialInfo(ApiSocialInfoDto dto) {
        ApiSocialInfoVo apiSocialInfoVo = new ApiSocialInfoVo();
        Long socialId = dto.getSocialId();
        ClothesSocial clothesSocial = clothesSocialMapper.selectById(socialId);
        if(ObjectUtil.isNotNull(clothesSocial)){
            MallMember mallMember = mallMemberMapper.selectById(clothesSocial.getMemberId());
            apiSocialInfoVo.setId(clothesSocial.getId());
            apiSocialInfoVo.setMemberName(mallMember.getName());
            apiSocialInfoVo.setMemberAvatar(mallMember.getAvatar());
            apiSocialInfoVo.setName(clothesSocial.getName());
            apiSocialInfoVo.setContent(clothesSocial.getContent());
            apiSocialInfoVo.setCreatedTime(clothesSocial.getCreatedTime());
            List<ClothesSocialFile> clothesSocialFiles = clothesSocialFileMapper.selectList(
                    Wrappers.lambdaQuery(ClothesSocialFile.class)
                            .select(ClothesSocialFile::getFileUrl)
                            .eq(ClothesSocialFile::getSocialId, socialId)
                            .orderByAsc(ClothesSocialFile::getSeq)
            );
            if(CollUtil.isNotEmpty(clothesSocialFiles)){
                apiSocialInfoVo.setImages(clothesSocialFiles.stream().map(ClothesSocialFile::getFileUrl).collect(Collectors.toList()));
            }
            ApiSocialMuseVo apiSocialMuseVo = new ApiSocialMuseVo();
            ClothesSocialMuse clothesSocialMuse = clothesSocialMuseMapper.selectOne(
                    Wrappers.lambdaQuery(ClothesSocialMuse.class)
                            .eq(ClothesSocialMuse::getSocialId, socialId)
                            .last("LIMIT 1")
            );
            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());
                    apiSocialMuseVo.setTypeImg(clothesType.getImage());
                }
                ClothesSize clothesSize = clothesSizeMapper.selectById(clothesSocialMuse.getSizeId());
                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)){
                    apiSocialMuseVo.setClothName(clothesCloth.getName());
                    totalAmount = totalAmount.add(clothesCloth.getPrice());
                }
                ClothesArt clothesArt = clothesArtMapper.selectById(clothesSocialMuse.getArtId());
                if(ObjectUtil.isNotNull(clothesArt)){
                    apiSocialMuseVo.setArtName(clothesArt.getName());
                    totalAmount = totalAmount.add(clothesArt.getPrice());
                }
                apiSocialMuseVo.setTotalAmount(totalAmount.setScale(2, RoundingMode.DOWN));
            }
        }
        return new FebsResponse().success().data(apiSocialInfoVo);
    }
    @Override
    @Transactional
    public FebsResponse socialAdd(ApiSocialAddDto dto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        Long orderId = dto.getOrderId();
        ClothesOrder order = clothesOrderMapper.selectOne(
                Wrappers.lambdaQuery(ClothesOrder.class)
                        .eq(ClothesOrder::getId, orderId)
                        .eq(ClothesOrder::getMemberId, memberId)
        );
        if(ObjectUtil.isNull( order)){
            throw new FebsException("请选择订单");
        }
        if(ClothesOrderStatusEnum.FINISH.getValue() != order.getStatus()){
            throw new FebsException("订单未确认收货");
        }
        String content = dto.getContent();
        List<String> contentFile = dto.getContentFile();
        String indexFile = dto.getIndexFile();
        String title = dto.getTitle();
        ClothesSocial clothesSocial = new ClothesSocial();
        clothesSocial.setMemberId(memberId);
        clothesSocial.setName(title);
        clothesSocial.setContent(content);
        clothesSocial.setIndexFile(indexFile);
        clothesSocialMapper.insert(clothesSocial);
        if(CollUtil.isNotEmpty(contentFile)){
            int i = 0;
            for (String file : contentFile){
                ClothesSocialFile clothesSocialFile = new ClothesSocialFile();
                clothesSocialFile.setSocialId(clothesSocial.getId());
                clothesSocialFile.setFileUrl(file);
                clothesSocialFile.setSeq(i);
                clothesSocialFileMapper.insert(clothesSocialFile);
                i++;
            }
        }
        ClothesSocialMuse clothesSocialMuse = new ClothesSocialMuse();
        clothesSocialMuse.setSocialId(clothesSocial.getId());
        clothesSocialMuse.setTypeId(order.getTypeId());
        List<ClothesOrderItem> clothesOrderItems = clothesOrderItemMapper.selectList(
                Wrappers.lambdaQuery(ClothesOrderItem.class)
                        .eq(ClothesOrderItem::getOrderId, orderId)
        );
        if(CollUtil.isEmpty(clothesOrderItems)){
            for (ClothesOrderItem item : clothesOrderItems){
                if (ClothesOrderItemEnum.CLOTH.getCode() == item.getType()) {
                    ClothesCloth cloth = clothesClothMapper.selectById(item.getItemId());
                    clothesSocialMuse.setClothId(cloth.getId());
                    continue;
                } else if (ClothesOrderItemEnum.SIZE.getCode() == item.getType()) {
                    ClothesSize size = clothesSizeMapper.selectById(item.getItemId());
                    clothesSocialMuse.setSizeId(size.getId());
                    continue;
                } else if (ClothesOrderItemEnum.LOCATION.getCode() == item.getType()) {
                    ClothesLocation location = clothesLocationMapper.selectById(item.getItemId());
                    clothesSocialMuse.setLocationId(location.getId());
                    continue;
                } else if (ClothesOrderItemEnum.PATTERN.getCode() == item.getType()) {
                    ClothesPattern pattern = clothesPatternMapper.selectById(item.getItemId());
                    clothesSocialMuse.setPatternId(pattern.getId());
                    clothesSocialMuse.setPatternRemark(item.getRemark());
                    continue;
                } else if (ClothesOrderItemEnum.ART.getCode() == item.getType()) {
                    ClothesArt art = clothesArtMapper.selectById(item.getItemId());
                    clothesSocialMuse.setArtId(art.getId());
                    continue;
                }else{
                    continue;
                }
            }
        }
        clothesSocialMuseMapper.insert(clothesSocialMuse);
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public FebsResponse addLike(ApiSocialLikeAddDto dto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        Long socialId = dto.getSocialId();
        ClothesSocial clothesSocial = clothesSocialMapper.selectById(socialId);
        if(ObjectUtil.isNotNull(clothesSocial)){
            ClothesSocialFollow clothesSocialFollow = new ClothesSocialFollow();
            clothesSocialFollow.setMemberId(memberId);
            clothesSocialFollow.setSourceType(SocialSourceTypeEnum.SOCIAL.getValue());
            clothesSocialFollow.setSourceId(socialId);
            clothesSocialFollow.setType(SocialTypeEnum.LIKE.getValue());
            clothesSocialFollowMapper.insert(clothesSocialFollow);
        }
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public FebsResponse addCommentLike(ApiSocialCommentLikeAddDto dto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        Long socialId = dto.getSocialId();
        ClothesSocial clothesSocial = clothesSocialMapper.selectById(socialId);
        if(ObjectUtil.isNotNull(clothesSocial)){
            ClothesSocialFollow clothesSocialFollow = new ClothesSocialFollow();
            clothesSocialFollow.setMemberId(memberId);
            clothesSocialFollow.setSourceType(SocialSourceTypeEnum.COMMENT.getValue());
            clothesSocialFollow.setSourceId(socialId);
            clothesSocialFollow.setSourceOptionId(dto.getCommentId());
            clothesSocialFollow.setType(SocialTypeEnum.LIKE.getValue());
            clothesSocialFollowMapper.insert(clothesSocialFollow);
        }
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public FebsResponse addCollect(ApiSocialCollectAddDto dto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        Long socialId = dto.getSocialId();
        ClothesSocial clothesSocial = clothesSocialMapper.selectById(socialId);
        if(ObjectUtil.isNotNull(clothesSocial)){
            ClothesSocialFollow clothesSocialFollow = new ClothesSocialFollow();
            clothesSocialFollow.setMemberId(memberId);
            clothesSocialFollow.setSourceType(SocialSourceTypeEnum.SOCIAL.getValue());
            clothesSocialFollow.setSourceId(socialId);
            clothesSocialFollow.setType(SocialTypeEnum.COLLECT.getValue());
            clothesSocialFollowMapper.insert(clothesSocialFollow);
        }
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public FebsResponse museToDesign(ApiClothesSocialMuseDto dto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        ApiClothesSocialMuseVo record = new ApiClothesSocialMuseVo();
        Long id = dto.getMuseId();
        ClothesSocialMuse entity = clothesSocialMuseMapper.selectById(id);
        if (ObjectUtil.isNotNull(entity)){
            Long typeId = entity.getTypeId();
            ClothesType clothesType = clothesTypeMapper.selectById(typeId);
            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));
            if (CollUtil.isNotEmpty(clothesTypeSizes)){
                Set<Long> collect = clothesTypeSizes.stream().map(ClothesTypeSize::getSizeId).collect(Collectors.toSet());
                if(CollUtil.isNotEmpty( collect) && collect.contains(sizeId)){
                    ClothesSize clothesSize = clothesSizeMapper.selectById(sizeId);
                    if(ObjectUtil.isNotNull(clothesSize)){
                        record.setSizeId(sizeId);
                        record.setSizeName(clothesSize.getName());
                        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());
                    }
                }
            }
            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());
                    }
                }
            }
            Long artId = ObjectUtil.defaultIfNull(entity.getArtId(),0L);
            List<ClothesTypeArt> clothesTypeArts = clothesTypeArtMapper.selectList(Wrappers.lambdaQuery(ClothesTypeArt.class).eq(ClothesTypeArt::getTypeId, typeId));
            if(CollUtil.isNotEmpty(clothesTypeArts)){
                Set<Long> artIds = clothesTypeArts.stream().map(ClothesTypeArt::getArtId).collect(Collectors.toSet());
                if (CollUtil.isNotEmpty(artIds) && artIds.contains(artId)){
                    ClothesArt clothesArt = clothesArtMapper.selectById(artId);
                    if (ObjectUtil.isNotNull(clothesArt)){
                        record.setArtId(artId);
                        record.setArtName(clothesArt.getName());
                        record.setArtPrice(clothesArt.getPrice());
                    }
                }
            }
            Long clothId = ObjectUtil.defaultIfNull(entity.getClothId(),0L);
            List<ClothesTypeCloth> clothesTypeCloths = clothesTypeClothMapper.selectList(Wrappers.lambdaQuery(ClothesTypeCloth.class).eq(ClothesTypeCloth::getTypeId, typeId));
            if(CollUtil.isNotEmpty(clothesTypeCloths)){
                Set<Long> clothIds = clothesTypeCloths.stream().map(ClothesTypeCloth::getClothId).collect(Collectors.toSet());
                if (CollUtil.isNotEmpty(clothIds) && clothIds.contains(clothId)){
                    ClothesCloth clothesCloth = clothesClothMapper.selectById(clothId);
                    if (ObjectUtil.isNotNull(clothesCloth)){
                        record.setClothId(clothId);
                        record.setClothName(clothesCloth.getName());
                        record.setClothPrice(clothesCloth.getPrice());
                    }
                }
            }
            BigDecimal amount =
                    record.getClothPrice()
                            .add(record.getLocationPrice())
                            .add(record.getArtPrice())
                            .add(record.getSizePrice())
                            .add(record.getPatternPrice()).setScale(2, RoundingMode.DOWN);
            record.setAmount(amount);
        }
        return new FebsResponse().success().data(record);
    }
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.putByPath("text", "123");
        jsonObject.putByPath("file", "https://excoin.oss-cn-hangzhou.aliyuncs.com/hc/175196952995698f416e2e70648328d04364340c3a36d.png");
        String jsonStr = jsonObject.toString();
        System.out.println(jsonStr);
    }
}