package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.StateUpDownEnum; import cc.mrbird.febs.mall.dto.activity.ApiScInfoDto; import cc.mrbird.febs.mall.entity.HappyFollow; import cc.mrbird.febs.mall.entity.HappySocialCircle; import cc.mrbird.febs.mall.entity.HappySocialCircleCategory; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.mapper.HappyFollowMapper; import cc.mrbird.febs.mall.mapper.HappySocialCircleCategoryMapper; import cc.mrbird.febs.mall.mapper.HappySocialCircleMapper; import cc.mrbird.febs.mall.mapper.MallMemberMapper; import cc.mrbird.febs.mall.service.ApiHappySocialCircleService; import cc.mrbird.febs.mall.vo.ApiActivityInfoVo; import cc.mrbird.febs.mall.vo.activity.ApiScCategoryInfoVo; import cc.mrbird.febs.mall.vo.activity.ApiScInfoVo; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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 java.util.*; import java.util.stream.Collectors; @Slf4j @Service @RequiredArgsConstructor public class ApiHappySocialCircleServiceImpl extends ServiceImpl implements ApiHappySocialCircleService { private final HappySocialCircleCategoryMapper happySocialCircleCategoryMapper; private final HappyFollowMapper happyFollowMapper; private final MallMemberMapper mallMemberMapper; @Override public FebsResponse allCategory() { ArrayList objects = new ArrayList<>(); List happySocialCircleCategories = happySocialCircleCategoryMapper.selectList( new LambdaQueryWrapper() .select(HappySocialCircleCategory::getId, HappySocialCircleCategory::getName) .eq(HappySocialCircleCategory::getState, StateUpDownEnum.UP.getCode()) .eq(HappySocialCircleCategory::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) .orderByAsc(HappySocialCircleCategory::getOrderCnt) ); if(CollUtil.isNotEmpty(happySocialCircleCategories)){ for (HappySocialCircleCategory happySocialCircleCategory : happySocialCircleCategories) { ApiScCategoryInfoVo apiScCategoryInfoVo = new ApiScCategoryInfoVo(); apiScCategoryInfoVo.setId(happySocialCircleCategory.getId()); apiScCategoryInfoVo.setName(happySocialCircleCategory.getName()); objects.add(apiScCategoryInfoVo); } } return new FebsResponse().success().data(objects); } @Override public FebsResponse indexCategory() { ArrayList objects = new ArrayList<>(); List happySocialCircleCategories = happySocialCircleCategoryMapper.selectList( new LambdaQueryWrapper() .select(HappySocialCircleCategory::getId, HappySocialCircleCategory::getName) .eq(HappySocialCircleCategory::getState, StateUpDownEnum.UP.getCode()) .eq(HappySocialCircleCategory::getHotState, StateUpDownEnum.UP.getCode()) .eq(HappySocialCircleCategory::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) .orderByAsc(HappySocialCircleCategory::getOrderCnt) ); if(CollUtil.isNotEmpty(happySocialCircleCategories)){ for (HappySocialCircleCategory happySocialCircleCategory : happySocialCircleCategories) { ApiScCategoryInfoVo apiScCategoryInfoVo = new ApiScCategoryInfoVo(); apiScCategoryInfoVo.setId(happySocialCircleCategory.getId()); apiScCategoryInfoVo.setName(happySocialCircleCategory.getName()); objects.add(apiScCategoryInfoVo); } } return new FebsResponse().success().data(objects); } @Override public FebsResponse scList(ApiScInfoDto dto) { // 创建分页对象,传入当前页和每页大小 Page page = new Page<>(dto.getPageNow(), dto.getPageSize()); // 调用Mapper方法获取活动分页数据 Page happyActivityPage = this.baseMapper.selectListInPage(page, dto); return new FebsResponse().success().data(happyActivityPage); } @Override public FebsResponse scInfo(Long id) { ApiScInfoVo apiScInfoVo = new ApiScInfoVo(); HappySocialCircle happySocialCircle = this.baseMapper.selectById(id); if(happySocialCircle!=null){ MallMember mallMember = mallMemberMapper.selectById(happySocialCircle.getMemberId()); apiScInfoVo.setId(happySocialCircle.getId()); apiScInfoVo.setAvatar(mallMember.getAvatar()); apiScInfoVo.setMemberName(mallMember.getName()); apiScInfoVo.setName(happySocialCircle.getName()); apiScInfoVo.setIndexFile(happySocialCircle.getIndexFile()); apiScInfoVo.setContent(happySocialCircle.getContent()); apiScInfoVo.setCreatedTime(happySocialCircle.getCreatedTime()); List happyFollows = happyFollowMapper.selectList( new LambdaQueryWrapper() .select(HappyFollow::getId, HappyFollow::getType) .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode()) .eq(HappyFollow::getSourceId, happySocialCircle.getId()) .in(HappyFollow::getType, Arrays.asList(StateUpDownEnum.FOLLOW.getCode(), StateUpDownEnum.LIKE.getCode(), StateUpDownEnum.SHARE.getCode())) .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) ); if(CollUtil.isNotEmpty(happyFollows)){ // 使用Stream流操作happyFollows,按照type分类,返回每一个不同type的总数量,并返回一个Map Map typeCountMap = happyFollows.stream() .collect(Collectors.groupingBy(HappyFollow::getType, Collectors.counting())); Long zanCnt = ObjectUtil.defaultIfNull(typeCountMap.get(StateUpDownEnum.LIKE.getCode()), 0L); apiScInfoVo.setZanCnt(Math.toIntExact(zanCnt)); Long sendCnt = ObjectUtil.defaultIfNull(typeCountMap.get(StateUpDownEnum.SHARE.getCode()), 0L); apiScInfoVo.setSendCnt(Math.toIntExact(sendCnt)); Long followCnt = ObjectUtil.defaultIfNull(typeCountMap.get(StateUpDownEnum.FOLLOW.getCode()), 0L); apiScInfoVo.setFollowCnt(Math.toIntExact(followCnt)); } } return new FebsResponse().success().data(apiScInfoVo); } }