package com.tanpu.community.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.tanpu.common.api.CommonResp; import com.tanpu.community.api.beans.qo.FollowQo; import com.tanpu.community.api.beans.qo.feign.fatools.UserInfoCorpReq; import com.tanpu.community.api.beans.req.page.Page; import com.tanpu.community.api.beans.req.page.Pageable; import com.tanpu.community.api.beans.resp.HomeSettingsResp; import com.tanpu.community.api.beans.resp.HotRecommendResp; import com.tanpu.community.api.beans.resp.SysConstantResp; import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoChiefInvAdvResp; import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoCorpResp; import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoResp; import com.tanpu.community.api.enums.DeleteTagEnum; import com.tanpu.community.dao.entity.community.HotRecommend; import com.tanpu.community.dao.entity.community.HotRecommendUser; import com.tanpu.community.dao.mapper.community.HotRecommendMapper; import com.tanpu.community.dao.mapper.community.HotRecommendUserMapper; import com.tanpu.community.feign.fatools.FeignClientForFatools; import com.tanpu.community.util.ConvertUtil; import com.tanpu.community.util.HttpServletHelper; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.validation.constraints.NotEmpty; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * 首页推荐 */ @Service public class HotRecommendService { @Resource private HotRecommendMapper hotRecommendMapper; @Resource private HotRecommendUserMapper hotRecommendUserMapper; @Resource private FeignClientForFatools feignClientForFatools; @Resource private FollowRelService followRelService; @Resource private HttpServletHelper httpServletHelper; /** * 首页热门推荐列表 * * @return */ public List<HotRecommendResp> hotRecommendList() { LambdaQueryWrapper<HotRecommend> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HotRecommend::getDeleteTag, DeleteTagEnum.NOT_DELETED) .eq(HotRecommend::getIsShow, 1) .orderByAsc(HotRecommend::getSort) .orderByDesc(HotRecommend::getCreateTime); List<HotRecommend> hotRecommends = hotRecommendMapper.selectList(queryWrapper); return hotRecommends.stream().map(item -> { List<FollowQo> list = Lists.newArrayList(); if (item.getType() == 1) { list = this.getChiefInvAdv(UserInfoCorpReq.builder() .hotRecommendId(item.getHotRecommendId()) .page(new Pageable(1, 4)).build()).getContent(); } else if (item.getType() == 2) { list = this.getCorpInfo(UserInfoCorpReq.builder() .hotRecommendId(item.getHotRecommendId()) .page(new Pageable(1, 4)).build()).getContent(); } else if (item.getType() == 3) { list = this.getUserInfo(UserInfoCorpReq.builder() .hotRecommendId(item.getHotRecommendId()) .page(new Pageable(1, 4)).build()).getContent(); } return HotRecommendResp.builder() .hotRecommendId(item.getHotRecommendId()) .name(item.getName()) .userInfo(list) .build(); }).collect(Collectors.toList()); } public Page<FollowQo> hotRecommendDetailList(UserInfoCorpReq req) { LambdaQueryWrapper<HotRecommend> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HotRecommend::getHotRecommendId, req.getHotRecommendId()); HotRecommend hotRecommend = hotRecommendMapper.selectOne(queryWrapper); Page<FollowQo> page = null; if (hotRecommend.getType() == 1) { page = this.getChiefInvAdv(req); } else if (hotRecommend.getType() == 2) { page = this.getCorpInfo(req); } else if (hotRecommend.getType() == 3) { page = this.getUserInfo(req); } if (StringUtils.isNotEmpty(httpServletHelper.getCurrentUserId())) { page.setContent(judgeFollowed(page.getContent(), httpServletHelper.getCurrentUserId())); } return page; } //判断返回列表中的用户是否被当前用户关注 public List<FollowQo> judgeFollowed(List<FollowQo> followQos, @NotEmpty String followerId) { Set<String> idolSet = new HashSet<>(followRelService.queryIdolsByFansId(followerId)); return followQos.stream().map(o -> { if (idolSet.contains(o.getUserId())) { o.setFollowed(true); } return o; }).collect(Collectors.toList()); } private Page<FollowQo> getCorpInfo(UserInfoCorpReq req) { LambdaQueryWrapper<HotRecommendUser> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HotRecommendUser::getHotRecommendId, req.getHotRecommendId()).eq(HotRecommendUser::getIsExclude, 1); List<HotRecommendUser> hotRecommendUsers = this.hotRecommendUserMapper.selectList(queryWrapper); CommonResp<Page<UserInfoCorpResp>> pageCommonResp = this.feignClientForFatools.queryCorpListWithExcludeId(UserInfoCorpReq.builder() .excludeIds(hotRecommendUsers.stream().map(HotRecommendUser::getRelId).collect(Collectors.toList())) .page(req.getPage()) .build()); List<String> userIds = pageCommonResp.getData().getContent().stream() .map(UserInfoCorpResp::getApplyUserId).collect(Collectors.toList()); List<UserInfoResp> userInfoResps = this.feignClientForFatools.queryUserListNew(userIds); List<FollowQo> list = userInfoResps.stream().map(item -> { return ConvertUtil.userInfoNew2FollowQo(item); }).collect(Collectors.toList()); Page page = new Page(); page.setPageNum(pageCommonResp.getData().getPageNum()); page.setPageSize(pageCommonResp.getData().getPageSize()); page.setTotalSize(pageCommonResp.getData().getTotalSize()); page.setTotalPages(pageCommonResp.getData().getTotalPages()); page.setContent(list); return page; } private Page<FollowQo> getChiefInvAdv(UserInfoCorpReq req) { LambdaQueryWrapper<HotRecommendUser> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HotRecommendUser::getHotRecommendId, req.getHotRecommendId()).eq(HotRecommendUser::getIsExclude, 1); List<HotRecommendUser> hotRecommendUsers = this.hotRecommendUserMapper.selectList(queryWrapper); CommonResp<Page<UserInfoChiefInvAdvResp>> pageCommonResp = this.feignClientForFatools.queryChiefInvAdvListWithExcludeId(UserInfoCorpReq.builder() .excludeIds(hotRecommendUsers.stream().map(HotRecommendUser::getRelId).collect(Collectors.toList())) .page(req.getPage()) .build()); List<UserInfoResp> userInfoResps = this.feignClientForFatools.queryUserListNew(pageCommonResp.getData().getContent().stream() .map(UserInfoChiefInvAdvResp::getUserId).collect(Collectors.toList())); List<FollowQo> list = userInfoResps.stream().map(item -> { return ConvertUtil.userInfoNew2FollowQo(item); }).collect(Collectors.toList()); Page page = new Page(); page.setPageNum(pageCommonResp.getData().getPageNum()); page.setPageSize(pageCommonResp.getData().getPageSize()); page.setTotalSize(pageCommonResp.getData().getTotalSize()); page.setTotalPages(pageCommonResp.getData().getTotalPages()); page.setContent(list); return page; } private Page<FollowQo> getUserInfo(UserInfoCorpReq req) { LambdaQueryWrapper<HotRecommendUser> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HotRecommendUser::getHotRecommendId, req.getHotRecommendId()).eq(HotRecommendUser::getIsExclude, 0); com.github.pagehelper.Page<HotRecommendUser> page = PageHelper.startPage(req.getPage().getPageNumber(), req.getPage().getPageSize()); PageInfo pageInfo = new PageInfo(this.hotRecommendUserMapper.selectList(queryWrapper)); List<HotRecommendUser> hotRecommendUsers = pageInfo.getList(); if (CollectionUtils.isEmpty(hotRecommendUsers)) { return new Page<>(page, Lists.newArrayList()); } List<UserInfoResp> userInfoResps = this.feignClientForFatools.queryUserListNew(hotRecommendUsers.stream() .map(HotRecommendUser::getRelId).collect(Collectors.toList())); List<FollowQo> list = userInfoResps.stream().map(item -> { return ConvertUtil.userInfoNew2FollowQo(item); }).collect(Collectors.toList()); return new Page<>(page, list); } /** * 获取首页配置 * * @return */ public CommonResp<HomeSettingsResp> getHomeSettings() { HomeSettingsResp resp = HomeSettingsResp.builder() .showHotRecommend(1) .showHotTopic(1) .build(); // community_topic 圈子首页是否展示热门话题 community_home_recommend 圈子首页是否展示热门推荐模块 CommonResp<List<SysConstantResp>> sysConstantResp = feignClientForFatools.queryLabels("community_module_settings"); if (sysConstantResp.isSuccess()) { Map<String, String> collect = sysConstantResp.getData().stream().collect(Collectors.toMap(SysConstantResp::getConstantCode, SysConstantResp::getConstantValue)); resp.setShowHotRecommend(Integer.parseInt(collect.getOrDefault("community_home_recommend", "1"))); resp.setShowHotTopic(Integer.parseInt(collect.getOrDefault("community_topic", "1"))); } return CommonResp.success(resp); } }