HotRecommendService.java 10 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 8 9 10
import com.google.common.collect.Lists;
import com.tanpu.common.api.CommonResp;
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;
11
import com.tanpu.community.api.beans.resp.HomeSettingsResp;
12 13
import com.tanpu.community.api.beans.resp.HotRecommendDetailResp;
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 24 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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
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 org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
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 -> {
            List<HotRecommendDetailResp> list = Lists.newArrayList();
            if (item.getType() == 1) {
                list = this.getChiefInvAdv(UserInfoCorpReq.builder()
                        .hotRecommendId(item.getHotRecommendId())
                        .page(new Pageable(1, 10)).build()).getContent();
            } else if (item.getType() == 2) {
                list = this.getCorpInfo(UserInfoCorpReq.builder()
                        .hotRecommendId(item.getHotRecommendId())
                        .page(new Pageable(1, 10)).build()).getContent();
            } else if (item.getType() == 3) {
                list = this.getUserInfo(UserInfoCorpReq.builder()
                        .hotRecommendId(item.getHotRecommendId())
                        .page(new Pageable(1, 10)).build()).getContent();
            }
            return HotRecommendResp.builder()
75
                    .hotRecommendId(item.getHotRecommendId())
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
                    .name(item.getName())
                    .headimg(list.stream().map(HotRecommendDetailResp::getHeadimg).collect(Collectors.toList()))
                    .build();
        }).collect(Collectors.toList());
    }

    public Page<HotRecommendDetailResp> hotRecommendDetailList(UserInfoCorpReq req) {
        LambdaQueryWrapper<HotRecommend> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(HotRecommend::getHotRecommendId, req.getHotRecommendId());
        HotRecommend hotRecommend = hotRecommendMapper.selectOne(queryWrapper);
        List<HotRecommendDetailResp> list = null;
        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;
    }

    private Page<HotRecommendDetailResp> 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());
107
        List<String> userIds = pageCommonResp.getData().getContent().stream()
108 109 110 111 112
                .map(UserInfoCorpResp::getApplyUserId).collect(Collectors.toList());
        List<UserInfoResp> userInfoResps = this.feignClientForFatools.queryUserListNew(userIds);
        Map<String, String> headimgMap = userInfoResps.stream().collect(Collectors.toMap(UserInfoResp::getUserId,
                UserInfoResp::getHeadImageUrl, (v1, v2) -> v1));

113
        List<HotRecommendDetailResp> list = pageCommonResp.getData().getContent().stream().map(item -> {
114 115 116 117 118 119 120 121 122 123
            return HotRecommendDetailResp.builder()
                    .relId(item.getCorpId())
                    .userId(item.getApplyUserId())
                    .certName(item.getCertName())
                    .type(2)
                    .name(item.getCorpName())
                    .headimg(headimgMap.get(item.getApplyUserId()))
                    .build();
        }).collect(Collectors.toList());
        Page page = new Page();
124 125 126 127
        page.setPageNum(pageCommonResp.getData().getPageNum());
        page.setPageSize(pageCommonResp.getData().getPageSize());
        page.setTotalSize(pageCommonResp.getData().getTotalSize());
        page.setTotalPages(pageCommonResp.getData().getTotalPages());
128 129 130 131 132 133 134 135 136 137 138 139 140
        page.setContent(list);
        return page;
    }

    private Page<HotRecommendDetailResp> 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());
141
        List<HotRecommendDetailResp> list = pageCommonResp.getData().getContent().stream().map(item -> {
142 143 144 145 146 147 148 149 150
            return HotRecommendDetailResp.builder()
                    .relId(item.getId() + "")
                    .userId(item.getUserId())
                    .type(1)
                    .name(item.getUserName())
                    .headimg(item.getHeadImageUrl())
                    .build();
        }).collect(Collectors.toList());
        Page page = new Page();
151 152 153 154
        page.setPageNum(pageCommonResp.getData().getPageNum());
        page.setPageSize(pageCommonResp.getData().getPageSize());
        page.setTotalSize(pageCommonResp.getData().getTotalSize());
        page.setTotalPages(pageCommonResp.getData().getTotalPages());
155 156 157 158 159 160 161 162
        page.setContent(list);
        return page;
    }

    private Page<HotRecommendDetailResp> getUserInfo(UserInfoCorpReq req) {
        LambdaQueryWrapper<HotRecommendUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(HotRecommendUser::getHotRecommendId, req.getHotRecommendId()).eq(HotRecommendUser::getIsExclude, 0);

163 164 165
        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();
166 167 168 169 170 171 172 173 174 175
        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<HotRecommendDetailResp> list = userInfoResps.stream().map(item -> {
            return HotRecommendDetailResp.builder()
                    .relId(item.getUserId())
                    .userId(item.getUserId())
                    .type(1)
176
                    .name(item.getNickName())
177 178 179 180 181 182
                    .headimg(item.getHeadImageUrl())
                    .certName(item.getCertPosition())
                    .build();
        }).collect(Collectors.toList());
        return new Page<>(page, list);
    }
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201

    /**
     * 获取首页配置
     * @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);
    }
202
}