HotRecommendService.java 9 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

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

    @Resource
    private HotRecommendMapper hotRecommendMapper;

    @Resource
    private HotRecommendUserMapper hotRecommendUserMapper;

    @Resource
    private FeignClientForFatools feignClientForFatools;

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

胡定国's avatar
胡定国 committed
82
    public Page<FollowQo> hotRecommendDetailList(UserInfoCorpReq req) {
83 84 85
        LambdaQueryWrapper<HotRecommend> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(HotRecommend::getHotRecommendId, req.getHotRecommendId());
        HotRecommend hotRecommend = hotRecommendMapper.selectOne(queryWrapper);
胡定国's avatar
胡定国 committed
86
        List<FollowQo> list = null;
87 88 89 90 91 92 93 94 95 96
        if (hotRecommend.getType() == 1) {
            return this.getChiefInvAdv(req);
        } else if (hotRecommend.getType() == 2) {
            return this.getCorpInfo(req);
        } else if (hotRecommend.getType() == 3) {
            return this.getUserInfo(req);
        }
        return null;
    }

胡定国's avatar
胡定国 committed
97
    private Page<FollowQo> getCorpInfo(UserInfoCorpReq req) {
98 99 100 101 102 103 104 105 106

        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());
107
        List<String> userIds = pageCommonResp.getData().getContent().stream()
108 109
                .map(UserInfoCorpResp::getApplyUserId).collect(Collectors.toList());
        List<UserInfoResp> userInfoResps = this.feignClientForFatools.queryUserListNew(userIds);
胡定国's avatar
胡定国 committed
110 111 112

        List<FollowQo> list = userInfoResps.stream().map(item -> {
            return ConvertUtil.userInfoNew2FollowQo(item);
113 114
        }).collect(Collectors.toList());
        Page page = new Page();
115 116 117 118
        page.setPageNum(pageCommonResp.getData().getPageNum());
        page.setPageSize(pageCommonResp.getData().getPageSize());
        page.setTotalSize(pageCommonResp.getData().getTotalSize());
        page.setTotalPages(pageCommonResp.getData().getTotalPages());
119 120 121 122
        page.setContent(list);
        return page;
    }

胡定国's avatar
胡定国 committed
123
    private Page<FollowQo> getChiefInvAdv(UserInfoCorpReq req) {
124 125 126 127 128 129 130 131
        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
132 133 134 135
        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);
136 137
        }).collect(Collectors.toList());
        Page page = new Page();
138 139 140 141
        page.setPageNum(pageCommonResp.getData().getPageNum());
        page.setPageSize(pageCommonResp.getData().getPageSize());
        page.setTotalSize(pageCommonResp.getData().getTotalSize());
        page.setTotalPages(pageCommonResp.getData().getTotalPages());
142 143 144 145
        page.setContent(list);
        return page;
    }

胡定国's avatar
胡定国 committed
146
    private Page<FollowQo> getUserInfo(UserInfoCorpReq req) {
147 148 149
        LambdaQueryWrapper<HotRecommendUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(HotRecommendUser::getHotRecommendId, req.getHotRecommendId()).eq(HotRecommendUser::getIsExclude, 0);

150 151 152
        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();
153 154 155 156 157
        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
158 159
        List<FollowQo> list = userInfoResps.stream().map(item -> {
            return ConvertUtil.userInfoNew2FollowQo(item);
160 161 162
        }).collect(Collectors.toList());
        return new Page<>(page, list);
    }
163 164 165

    /**
     * 获取首页配置
胡定国's avatar
胡定国 committed
166
     *
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
     * @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);
    }
183
}