HotRecommendService.java 9.99 KB
Newer Older
1 2 3 4
package com.tanpu.community.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageHelper;
5
import com.github.pagehelper.PageInfo;
6 7
import com.google.common.collect.Lists;
import com.tanpu.common.api.CommonResp;
胡定国's avatar
胡定国 committed
8
import com.tanpu.community.api.beans.qo.FollowQo;
9 10 11
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;
12
import com.tanpu.community.api.beans.resp.HomeSettingsResp;
13
import com.tanpu.community.api.beans.resp.HotRecommendResp;
14
import com.tanpu.community.api.beans.resp.SysConstantResp;
15 16 17 18 19 20 21 22 23
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;
胡定国's avatar
胡定国 committed
24
import com.tanpu.community.util.ConvertUtil;
25
import com.tanpu.community.util.HttpServletHelper;
26
import org.apache.commons.collections4.CollectionUtils;
27
import org.apache.commons.lang3.StringUtils;
28 29 30
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
31 32
import javax.validation.constraints.NotEmpty;
import java.util.HashSet;
33 34
import java.util.List;
import java.util.Map;
35
import java.util.Set;
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
import java.util.stream.Collectors;

/**
 * 首页推荐
 */
@Service
public class HotRecommendService {

    @Resource
    private HotRecommendMapper hotRecommendMapper;

    @Resource
    private HotRecommendUserMapper hotRecommendUserMapper;

    @Resource
    private FeignClientForFatools feignClientForFatools;
52 53 54 55 56 57
    @Resource
    private FollowRelService followRelService;

    @Resource
    private HttpServletHelper httpServletHelper;

58 59 60 61 62 63 64 65 66

    /**
     * 首页热门推荐列表
     *
     * @return
     */
    public List<HotRecommendResp> hotRecommendList() {
        LambdaQueryWrapper<HotRecommend> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(HotRecommend::getDeleteTag, DeleteTagEnum.NOT_DELETED)
胡定国's avatar
胡定国 committed
67
                .eq(HotRecommend::getIsShow, 1)
68 69 70 71
                .orderByAsc(HotRecommend::getSort)
                .orderByDesc(HotRecommend::getCreateTime);
        List<HotRecommend> hotRecommends = hotRecommendMapper.selectList(queryWrapper);
        return hotRecommends.stream().map(item -> {
胡定国's avatar
胡定国 committed
72
            List<FollowQo> list = Lists.newArrayList();
73 74 75
            if (item.getType() == 1) {
                list = this.getChiefInvAdv(UserInfoCorpReq.builder()
                        .hotRecommendId(item.getHotRecommendId())
胡定国's avatar
胡定国 committed
76
                        .page(new Pageable(1, 4)).build()).getContent();
77 78 79
            } else if (item.getType() == 2) {
                list = this.getCorpInfo(UserInfoCorpReq.builder()
                        .hotRecommendId(item.getHotRecommendId())
胡定国's avatar
胡定国 committed
80
                        .page(new Pageable(1, 4)).build()).getContent();
81 82 83
            } else if (item.getType() == 3) {
                list = this.getUserInfo(UserInfoCorpReq.builder()
                        .hotRecommendId(item.getHotRecommendId())
胡定国's avatar
胡定国 committed
84
                        .page(new Pageable(1, 4)).build()).getContent();
85 86
            }
            return HotRecommendResp.builder()
87
                    .hotRecommendId(item.getHotRecommendId())
88
                    .name(item.getName())
胡定国's avatar
胡定国 committed
89
                    .userInfo(list)
90 91 92 93
                    .build();
        }).collect(Collectors.toList());
    }

胡定国's avatar
胡定国 committed
94
    public Page<FollowQo> hotRecommendDetailList(UserInfoCorpReq req) {
95 96 97
        LambdaQueryWrapper<HotRecommend> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(HotRecommend::getHotRecommendId, req.getHotRecommendId());
        HotRecommend hotRecommend = hotRecommendMapper.selectOne(queryWrapper);
98
        Page<FollowQo> page = null;
99
        if (hotRecommend.getType() == 1) {
100
            page = this.getChiefInvAdv(req);
101
        } else if (hotRecommend.getType() == 2) {
102
            page = this.getCorpInfo(req);
103
        } else if (hotRecommend.getType() == 3) {
104 105 106 107
            page = this.getUserInfo(req);
        }
        if (StringUtils.isNotEmpty(httpServletHelper.getCurrentUserId())) {
            page.setContent(judgeFollowed(page.getContent(), httpServletHelper.getCurrentUserId()));
108
        }
109 110 111 112 113 114 115 116 117 118 119 120
        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());
121 122
    }

胡定国's avatar
胡定国 committed
123
    private Page<FollowQo> getCorpInfo(UserInfoCorpReq req) {
124 125 126 127 128 129 130 131 132

        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());
133
        List<String> userIds = pageCommonResp.getData().getContent().stream()
134 135
                .map(UserInfoCorpResp::getApplyUserId).collect(Collectors.toList());
        List<UserInfoResp> userInfoResps = this.feignClientForFatools.queryUserListNew(userIds);
胡定国's avatar
胡定国 committed
136 137 138

        List<FollowQo> list = userInfoResps.stream().map(item -> {
            return ConvertUtil.userInfoNew2FollowQo(item);
139 140
        }).collect(Collectors.toList());
        Page page = new Page();
141 142 143 144
        page.setPageNum(pageCommonResp.getData().getPageNum());
        page.setPageSize(pageCommonResp.getData().getPageSize());
        page.setTotalSize(pageCommonResp.getData().getTotalSize());
        page.setTotalPages(pageCommonResp.getData().getTotalPages());
145 146 147 148
        page.setContent(list);
        return page;
    }

胡定国's avatar
胡定国 committed
149
    private Page<FollowQo> getChiefInvAdv(UserInfoCorpReq req) {
150 151 152 153 154 155 156 157
        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());
胡定国's avatar
胡定国 committed
158 159 160 161
        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);
162 163
        }).collect(Collectors.toList());
        Page page = new Page();
164 165 166 167
        page.setPageNum(pageCommonResp.getData().getPageNum());
        page.setPageSize(pageCommonResp.getData().getPageSize());
        page.setTotalSize(pageCommonResp.getData().getTotalSize());
        page.setTotalPages(pageCommonResp.getData().getTotalPages());
168 169 170 171
        page.setContent(list);
        return page;
    }

胡定国's avatar
胡定国 committed
172
    private Page<FollowQo> getUserInfo(UserInfoCorpReq req) {
173 174 175
        LambdaQueryWrapper<HotRecommendUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(HotRecommendUser::getHotRecommendId, req.getHotRecommendId()).eq(HotRecommendUser::getIsExclude, 0);

176 177 178
        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();
179 180 181 182 183
        if (CollectionUtils.isEmpty(hotRecommendUsers)) {
            return new Page<>(page, Lists.newArrayList());
        }
        List<UserInfoResp> userInfoResps = this.feignClientForFatools.queryUserListNew(hotRecommendUsers.stream()
                .map(HotRecommendUser::getRelId).collect(Collectors.toList()));
胡定国's avatar
胡定国 committed
184 185
        List<FollowQo> list = userInfoResps.stream().map(item -> {
            return ConvertUtil.userInfoNew2FollowQo(item);
186 187 188
        }).collect(Collectors.toList());
        return new Page<>(page, list);
    }
189 190 191

    /**
     * 获取首页配置
胡定国's avatar
胡定国 committed
192
     *
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
     * @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);
    }
209
}