HomePageManager.java 17.2 KB
Newer Older
张辰's avatar
张辰 committed
1 2
package com.tanpu.community.manager;

3
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
王亚雷's avatar
王亚雷 committed
4
import com.google.common.collect.Lists;
张辰's avatar
张辰 committed
5 6
import com.tanpu.biz.common.enums.user.UserLevelEnum;
import com.tanpu.biz.common.enums.user.UserTypeEnum;
7 8 9
import com.tanpu.common.api.CommonResp;
import com.tanpu.common.constant.BizStatus;
import com.tanpu.common.exception.BizException;
10
import com.tanpu.common.util.DateUtils;
刘基明's avatar
刘基明 committed
11
import com.tanpu.community.api.CommunityConstant;
刘基明's avatar
刘基明 committed
12
import com.tanpu.community.api.beans.qo.FollowQo;
刘基明's avatar
刘基明 committed
13
import com.tanpu.community.api.beans.req.homepage.FollowRelReq;
刘基明's avatar
刘基明 committed
14 15
import com.tanpu.community.api.beans.req.homepage.QueryFollowReq;
import com.tanpu.community.api.beans.req.page.Page;
吴泽佳's avatar
吴泽佳 committed
16
import com.tanpu.community.api.beans.req.page.Pageable;
17
import com.tanpu.community.api.beans.resp.Customer;
刘基明's avatar
刘基明 committed
18
import com.tanpu.community.api.beans.vo.feign.activity.OfflineActivitySimpleResp;
吴泽佳's avatar
吴泽佳 committed
19
import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoNewChief;
20
import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoOrg;
21 22
import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoResp;
import com.tanpu.community.api.beans.vo.feign.fund.FundCompanySimpleVO;
刘基明's avatar
刘基明 committed
23 24 25 26 27 28
import com.tanpu.community.api.enums.FundCompanyTypeEnum;
import com.tanpu.community.api.enums.NotificationTypeEnum;
import com.tanpu.community.api.enums.OperationTypeEnum;
import com.tanpu.community.api.enums.PersonalCenterTypeEnum;
import com.tanpu.community.api.enums.QueryFollowTypeEnum;
import com.tanpu.community.api.enums.ShowFollowStatusEnum;
刘基明's avatar
刘基明 committed
29
import com.tanpu.community.cache.RedisCache;
30 31
import com.tanpu.community.dao.entity.community.FollowRelEntity;
import com.tanpu.community.dao.mapper.community.FollowRelMapper;
刘基明's avatar
刘基明 committed
32
import com.tanpu.community.feign.activity.FeignClientForActivity;
吴泽佳's avatar
吴泽佳 committed
33
import com.tanpu.community.feign.course.FeignClientForCourse;
34 35
import com.tanpu.community.feign.diagnose.FeignClientForDiagnose;
import com.tanpu.community.feign.fatools.FeignClientForFatools;
36
import com.tanpu.community.feign.product.FeignClientForProducts;
吴泽佳's avatar
吴泽佳 committed
37 38
import com.tanpu.community.feign.product.FeignForFund;
import com.tanpu.community.feign.product.FeignForPublicFund;
刘基明's avatar
刘基明 committed
39
import com.tanpu.community.service.FollowRelService;
刘基明's avatar
刘基明 committed
40
import com.tanpu.community.service.NotificationService;
刘基明's avatar
刘基明 committed
41
import com.tanpu.community.util.ConvertUtil;
刘基明's avatar
刘基明 committed
42
import com.tanpu.community.util.PageUtils;
43
import org.apache.commons.collections.CollectionUtils;
44 45
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
刘基明's avatar
刘基明 committed
46
import org.springframework.beans.factory.annotation.Autowired;
张辰's avatar
张辰 committed
47 48
import org.springframework.stereotype.Service;

49
import javax.annotation.Resource;
王亚雷's avatar
王亚雷 committed
50
import javax.validation.constraints.NotEmpty;
刘基明's avatar
刘基明 committed
51
import java.util.*;
52
import java.util.function.Function;
刘基明's avatar
刘基明 committed
53
import java.util.stream.Collectors;
张辰's avatar
张辰 committed
54

刘基明's avatar
刘基明 committed
55 56
import static com.tanpu.community.api.constants.RedisKeyConstant.CACHE_FEIGN_USER_INFO;

张辰's avatar
张辰 committed
57 58 59
@Service
public class HomePageManager {

吴泽佳's avatar
吴泽佳 committed
60
    @Resource
刘基明's avatar
刘基明 committed
61
    private FollowRelService followRelService;
吴泽佳's avatar
吴泽佳 committed
62
    @Resource
63 64 65 66 67
    private FeignClientForFatools feignClientForFatools;
    @Resource
    private FollowRelMapper followRelMapper;
    @Resource
    private FeignClientForDiagnose feignClientForDiagnose;
吴泽佳's avatar
吴泽佳 committed
68 69
    @Resource
    private FeignClientForCourse feignClientForCourse;
70
    @Resource
吴泽佳's avatar
吴泽佳 committed
71
    private FeignForFund feignForFund;
72
    @Resource
吴泽佳's avatar
吴泽佳 committed
73
    private FeignForPublicFund feignForPublicFund;
刘基明's avatar
刘基明 committed
74 75
    @Resource
    private RedisCache redisCache;
刘基明's avatar
刘基明 committed
76 77
    @Resource
    private FeignClientForActivity feignClientForActivity;
78 79
    @Resource
    private FeignClientForProducts feignClientForProducts;
80

刘基明's avatar
刘基明 committed
81 82 83
    @Autowired
    private NotificationService notificationService;

84
    //查询 个人中心 相关信息
85
    public UserInfoResp queryUsersInfo(String userIdMyself, String userId) {
王亚雷's avatar
王亚雷 committed
86
        CommonResp<UserInfoResp> queryUsersListNew = feignClientForFatools.queryUserInfoNew(userId);
刘基明's avatar
刘基明 committed
87 88
        if (queryUsersListNew.isNotSuccess() || !ObjectUtils.anyNotNull(queryUsersListNew.getData()))
            throw new BizException("内部接口调用失败");
89
        UserInfoResp userInfoNew = queryUsersListNew.getData();
吴泽佳's avatar
吴泽佳 committed
90

王亚雷's avatar
王亚雷 committed
91
        userInfoNew.setShowFollowStatus(ShowFollowStatusEnum.NOT_FOLLOWED.getCode());
王亚雷's avatar
王亚雷 committed
92 93 94 95 96 97 98 99 100
        if (StringUtils.isNotBlank(userIdMyself)) {
            if (!StringUtils.equals(userIdMyself, userId)) {
                // 查询别人的个人主页
                // 关注 按钮的显示逻辑
                FollowRelEntity followRelEntity = followRelService.queryRecord(userId, userIdMyself);
                if (ObjectUtils.allNotNull(followRelEntity) && BizStatus.DeleteTag.tag_init == followRelEntity.getDeleteTag()) {
                    userInfoNew.setShowFollowStatus(ShowFollowStatusEnum.FOLLOWED.getCode()); // 已关注
                }
                if (userInfoNew.getWorkshopStatus() == 2) userInfoNew.setWorkshopStatus(1); //别人的主页不需要展示 工作室
101 102
            }
        }
吴泽佳's avatar
吴泽佳 committed
103
        //获取粉丝数 关注数
104 105 106
        getFansNUmAndFollowNum(userInfoNew);

        // 主页类型 显示逻辑
刘基明's avatar
刘基明 committed
107
        if (UserLevelEnum.USER_CHIEF_FINANCIAL_ADVISER.getCode() == userInfoNew.getLevelGrade()) {
吴泽佳's avatar
吴泽佳 committed
108
            // 首席投顾
吴泽佳's avatar
吴泽佳 committed
109
            userInfoNew.setPersonalCenterType(PersonalCenterTypeEnum.CHIEF.getCode());
110 111
            // 成功案例客户
            // 默认显示该投顾管理的客户里,总资产最高的客户
吴泽佳's avatar
吴泽佳 committed
112
            if (StringUtils.isBlank(userInfoNew.getUserInfoNewChief().getClientId())) {
113
                List<Customer> customers = queryUserCustomerList(userId);
吴泽佳's avatar
吴泽佳 committed
114
                Optional<Customer> first = customers.stream().max(Comparator.comparing(Customer::getTotalMarket));
115
                if (first.isPresent()) {
吴泽佳's avatar
吴泽佳 committed
116
                    userInfoNew.getUserInfoNewChief().setClientId(first.get().getCustomerId());
117
                } else {
吴泽佳's avatar
吴泽佳 committed
118
                    userInfoNew.getUserInfoNewChief().setClientId(null);
119 120
                }
            }
121 122
            // 查询首席投顾数量
            CommonResp<Page<UserInfoNewChief>> pageCommonResp = feignClientForFatools.queryChiefFinancialAdviserList(1, 1);
刘基明's avatar
刘基明 committed
123
            if (pageCommonResp.isSuccess()) {
吴泽佳's avatar
吴泽佳 committed
124
                userInfoNew.getUserInfoNewChief().setChiefCount(pageCommonResp.getData().getTotalSize());
125
            } else {
吴泽佳's avatar
吴泽佳 committed
126
                userInfoNew.getUserInfoNewChief().setChiefCount(0L);
127
            }
128 129


刘基明's avatar
刘基明 committed
130
        } else if (UserTypeEnum.USER_ORG.getCode() == userInfoNew.getUserType()) {
131
            // 机构账号
吴泽佳's avatar
吴泽佳 committed
132
            userInfoNew.setPersonalCenterType(PersonalCenterTypeEnum.ORG.getCode());
吴泽佳's avatar
吴泽佳 committed
133
            if (FundCompanyTypeEnum.PUBLIC.getCode() == userInfoNew.getUserInfoNewOrg().getRelationFundCompanyType() && StringUtils.isNotBlank(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId())) { // 公募
134
                // 设置 基金数
吴泽佳's avatar
吴泽佳 committed
135
                CommonResp<FundCompanySimpleVO> companyFundCount = feignForPublicFund.getCompanyFundCount(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId());
136 137
                userInfoNew.setFundNumber(companyFundCount.isSuccess() ? companyFundCount.getData().getFundCount() : 0);
                // 设置成立时间 和 备案编号(公募没有备案编号)
吴泽佳's avatar
吴泽佳 committed
138
                CommonResp<FundCompanySimpleVO> fundCompanyInfoSimple = feignForPublicFund.getFundCompanyInfoSimple(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId());
139 140
                if (fundCompanyInfoSimple.isSuccess()) {
                    FundCompanySimpleVO data = fundCompanyInfoSimple.getData();
141
                    userInfoNew.setFounded(data.getEstablishDate() > 0 ? DateUtils.formatYMD(new Date(data.getEstablishDate())) : null);
142 143
                    userInfoNew.setRecordNumber(data.getRegisterNumber());
                }
144
            }
吴泽佳's avatar
吴泽佳 committed
145
            if (FundCompanyTypeEnum.PRIVATE.getCode() == userInfoNew.getUserInfoNewOrg().getRelationFundCompanyType() && StringUtils.isNotBlank(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId())) { // 私募
146
                // 设置成立时间 和 备案编号
吴泽佳's avatar
吴泽佳 committed
147
                CommonResp<FundCompanySimpleVO> fundCompanyInfoSimple = feignForFund.getFundCompanyInfoSimple(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId());
148 149
                if (fundCompanyInfoSimple.isSuccess()) {
                    FundCompanySimpleVO data = fundCompanyInfoSimple.getData();
150
                    userInfoNew.setFounded(data.getEstablishDate() > 0 ? DateUtils.formatYMD(new Date(data.getEstablishDate())) : null);
151
                    userInfoNew.setRecordNumber(data.getRegisterNumber());
152
                }
153
                // 设置 基金数
吴泽佳's avatar
吴泽佳 committed
154
                CommonResp<FundCompanySimpleVO> companyFundCount = feignForFund.getCompanyFundCount(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId());
155
                userInfoNew.setFundNumber(companyFundCount.isSuccess() ? companyFundCount.getData().getFundCount() : 0);
156
            }
157 158 159 160 161 162 163 164 165 166 167 168
            if (FundCompanyTypeEnum.WHITELIST.getCode() == userInfoNew.getUserInfoNewOrg().getRelationFundCompanyType() && StringUtils.isNotBlank(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId())) { // 私募
                // 设置成立时间 和 备案编号
                CommonResp<FundCompanySimpleVO> fundCompanyInfoSimple = feignClientForProducts.getFundCompanyInfoSimple(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId());
                if (fundCompanyInfoSimple.isSuccess()) {
                    FundCompanySimpleVO data = fundCompanyInfoSimple.getData();
                    userInfoNew.setFounded(data.getEstablishDate() > 0 ? DateUtils.formatYMD(new Date(data.getEstablishDate())) : null);
                    userInfoNew.setRecordNumber(data.getRegisterNumber());
                }
                // 设置 基金数
                CommonResp<FundCompanySimpleVO> companyFundCount = feignClientForProducts.getCompanyFundCount(userInfoNew.getUserInfoNewOrg().getRelationFundCompanyId());
                userInfoNew.setFundNumber(companyFundCount.isSuccess() ? companyFundCount.getData().getFundCount() : 0);
            }
169 170
            //设置团队成员
            CommonResp<List<UserInfoOrg>> usetInfoByOrgUserId = feignClientForFatools.getUsetInfoByOrgUserId(userId);
吴泽佳's avatar
吴泽佳 committed
171
            if (usetInfoByOrgUserId.isSuccess() && CollectionUtils.isNotEmpty(usetInfoByOrgUserId.getData())) {
172 173 174 175
                List<UserInfoOrg> userInfoOrgs = usetInfoByOrgUserId.getData();
                // 设置关注列表
                List<String> collect = userInfoOrgs.stream().map(UserInfoOrg::getUserId).collect(Collectors.toList());
                List<FollowRelEntity> followRelEntities = followRelMapper.selectList(new LambdaQueryWrapper<FollowRelEntity>()
176 177
                        .in(FollowRelEntity::getIdolId, collect)
                        .eq(FollowRelEntity::getFansId, userIdMyself)
178
                        .eq(FollowRelEntity::getDeleteTag, BizStatus.DeleteTag.tag_init));
刘基明's avatar
刘基明 committed
179
                Map<String, FollowRelEntity> collect1 = followRelEntities.stream().collect(Collectors.toMap(FollowRelEntity::getIdolId, Function.identity()));
180
                userInfoOrgs.forEach(userInfoOrg -> {
刘基明's avatar
刘基明 committed
181 182
                    if (collect1.containsKey(userInfoOrg.getUserId()))
                        userInfoOrg.setIsFollower(ShowFollowStatusEnum.FOLLOWED.getCode());//1已关注
183 184 185
                });
                userInfoNew.setUserInfoOrgList(userInfoOrgs);
            }
刘基明's avatar
刘基明 committed
186
            // 家办活动
刘基明's avatar
刘基明 committed
187 188
            CommonResp<List<OfflineActivitySimpleResp>> activitySimpleResps = feignClientForActivity.queryCorpHomeActivityList(
                    userInfoNew.getUserInfoNewOrg().getCorpId(), userId);
刘基明's avatar
刘基明 committed
189
            if (activitySimpleResps.isSuccess() && CollectionUtils.isNotEmpty(activitySimpleResps.getData())) {
刘基明's avatar
刘基明 committed
190
                List<OfflineActivitySimpleResp> activities = activitySimpleResps.getData();
胡定国's avatar
胡定国 committed
191 192 193
                if (CollectionUtils.isNotEmpty(activities)) {
                    userInfoNew.setHoldActivities(activities.stream().filter(o -> o.getActivityType().equals(1)).collect(Collectors.toList()));
                    userInfoNew.setTeamRecruitment(activities.stream().filter(o -> o.getActivityType().equals(2)).collect(Collectors.toList()));
刘基明's avatar
刘基明 committed
194
                }
刘基明's avatar
刘基明 committed
195
            }
196 197 198

        } else {
            //普通主页
吴泽佳's avatar
吴泽佳 committed
199
            userInfoNew.setPersonalCenterType(PersonalCenterTypeEnum.GENERAL.getCode());
吴泽佳's avatar
吴泽佳 committed
200 201
            //设置课程数(学习数)
            CommonResp<Integer> integerCommonResp = feignClientForCourse.getStudyCourseCount(userId);
202 203
            if (integerCommonResp.isSuccess()) userInfoNew.setCourseNumber(integerCommonResp.getData());
        }
刘基明's avatar
刘基明 committed
204
        // 主页背景图
胡定国's avatar
胡定国 committed
205
        if (CommunityConstant.BACKGROUND_IMG_URL_MAP.containsKey(userInfoNew.getUserId())) {
刘基明's avatar
刘基明 committed
206
            userInfoNew.setBackgroundImgUrl(CommunityConstant.BACKGROUND_IMG_URL_MAP.get(userInfoNew.getUserId()));
胡定国's avatar
胡定国 committed
207
        } else {
刘基明's avatar
刘基明 committed
208 209 210 211
            userInfoNew.setBackgroundImgUrl(CommunityConstant.BACKGROUND_IMG_URL_MAP.get("default"));

        }

刘基明's avatar
刘基明 committed
212 213 214
        //刷新用户缓存
        redisCache.put(StringUtils.joinWith("_", CACHE_FEIGN_USER_INFO, userId), userInfoNew, 60);

215 216 217
        return userInfoNew;
    }

吴泽佳's avatar
吴泽佳 committed
218
    public Page<UserInfoNewChief> queryChiefFinancialAdviserList(Pageable page) {
吴泽佳's avatar
吴泽佳 committed
219
        CommonResp<Page<UserInfoNewChief>> pageCommonResp = feignClientForFatools.queryChiefFinancialAdviserList(page.pageNumber, page.pageSize);
吴泽佳's avatar
吴泽佳 committed
220 221 222 223
        return pageCommonResp.getData();

    }

224
    private void getFansNUmAndFollowNum(UserInfoResp userInfoNew) {
刘基明's avatar
刘基明 committed
225
        Integer fansNumber = followRelMapper.selectCount(new LambdaQueryWrapper<FollowRelEntity>().eq(FollowRelEntity::getIdolId, userInfoNew.getUserId())
226
                .eq(FollowRelEntity::getDeleteTag, BizStatus.DeleteTag.tag_init));
刘基明's avatar
刘基明 committed
227
        Integer followNumber = followRelMapper.selectCount(new LambdaQueryWrapper<FollowRelEntity>().eq(FollowRelEntity::getFansId, userInfoNew.getUserId())
228 229 230 231
                .eq(FollowRelEntity::getDeleteTag, BizStatus.DeleteTag.tag_init));
        userInfoNew.setFollowNumber(followNumber);
        userInfoNew.setFansNumber(fansNumber);
    }
刘基明's avatar
刘基明 committed
232

233 234 235 236 237
    public List<Customer> queryUserCustomerList(String userId) {
        CommonResp<List<Customer>> ifaCustomerList = feignClientForDiagnose.getIfaCustomerList(userId);
        if (ifaCustomerList.isSuccess()) return ifaCustomerList.getData();
        return new ArrayList<>();
    }
刘基明's avatar
刘基明 committed
238

张辰's avatar
张辰 committed
239

刘基明's avatar
刘基明 committed
240 241
    /**
     * 用户关注列表
刘基明's avatar
刘基明 committed
242 243
     *
     * @param req    目标用户
刘基明's avatar
刘基明 committed
244 245 246
     * @param userId 当前用户
     * @return
     */
刘基明's avatar
刘基明 committed
247
    public Page<FollowQo> queryFollow(QueryFollowReq req, String userId) {
刘基明's avatar
刘基明 committed
248 249 250 251 252 253 254
        //数据库分页
        Integer pageSize = req.page.pageSize;
        Integer pageNumber = req.page.pageNumber;

        Page<String> userIdsPage = QueryFollowTypeEnum.QUERY_FANS.getCode().equals(req.getQueryType()) ?
                followRelService.queryFansByIdolId(req.userId, pageNumber, pageSize)
                : followRelService.queryIdolsByFansId(req.userId, pageNumber, pageSize);
王亚雷's avatar
王亚雷 committed
255
        if (CollectionUtils.isEmpty(userIdsPage.getContent())) {
胡定国's avatar
胡定国 committed
256
            return PageUtils.page(userIdsPage, Lists.newArrayListWithCapacity(0));
王亚雷's avatar
王亚雷 committed
257 258 259 260
        }
        List<UserInfoResp> userInfoNews = feignClientForFatools.queryUserListNew(userIdsPage.getContent());
        List<FollowQo> followQos = userInfoNews.stream().map(ConvertUtil::userInfoNew2FollowQo).collect(Collectors.toList());
        if (StringUtils.isNotEmpty(userId)) {
王亚雷's avatar
王亚雷 committed
261
            followQos = judgeFollowed(followQos, userId);
刘基明's avatar
刘基明 committed
262
        }
刘基明's avatar
刘基明 committed
263
        return PageUtils.page(userIdsPage, followQos);
张辰's avatar
张辰 committed
264 265
    }

刘基明's avatar
刘基明 committed
266

刘基明's avatar
刘基明 committed
267
    //判断返回列表中的用户是否被当前用户关注
王亚雷's avatar
王亚雷 committed
268
    public List<FollowQo> judgeFollowed(List<FollowQo> followQos, @NotEmpty String followerId) {
刘基明's avatar
刘基明 committed
269
        Set<String> idolSet = new HashSet<>(followRelService.queryIdolsByFansId(followerId));
王亚雷's avatar
王亚雷 committed
270
        return followQos.stream().map(o -> {
刘基明's avatar
刘基明 committed
271
            if (idolSet.contains(o.getUserId())) {
刘基明's avatar
刘基明 committed
272 273
                o.setFollowed(true);
            }
王亚雷's avatar
王亚雷 committed
274 275
            return o;
        }).collect(Collectors.toList());
刘基明's avatar
刘基明 committed
276 277
    }

刘基明's avatar
刘基明 committed
278 279
    public void addFollowRel(FollowRelReq req, String followerId) {
        if (OperationTypeEnum.CONFIRM.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
280 281 282
            // 第一次关注才有消息通知
            if (followRelService.addFollowRel(req.getFollowUserId(), followerId)) {
                notificationService.insert(followerId, req.getFollowUserId(), NotificationTypeEnum.FOLLOW, req.getFollowUserId(), null);
胡定国's avatar
胡定国 committed
283
                notificationService.putNotifyCache(req.getFollowUserId(), followerId, NotificationTypeEnum.FOLLOW);
刘基明's avatar
刘基明 committed
284
            }
刘基明's avatar
刘基明 committed
285 286 287
        } else if (OperationTypeEnum.CANCEL.getCode().equals(req.getType())) {
            followRelService.deleteFollowRel(req.getFollowUserId(), followerId);
        }
张辰's avatar
张辰 committed
288
    }
289

刘基明's avatar
刘基明 committed
290 291 292 293 294 295 296
    private UserInfoResp getUserInfo(String authorId) {
        CommonResp<UserInfoResp> userInfoNewCommonResp = feignClientForFatools.queryUserInfoNew(authorId);
        if (userInfoNewCommonResp.isNotSuccess()) {
            throw new BizException("内部接口调用失败");
        }
        return userInfoNewCommonResp.getData();
    }
297

刘基明's avatar
刘基明 committed
298
    public List<FollowQo> userNameSerach(String keyword, Integer pageNumber, Integer pageSize, String ident, String userId) {
胡定国's avatar
胡定国 committed
299
        if (StringUtils.isBlank(keyword)) {
刘基明's avatar
刘基明 committed
300 301
            return Collections.emptyList();
        }
胡定国's avatar
胡定国 committed
302
        List<UserInfoResp> userInfoResps = feignClientForFatools.queryByUserNameMp(keyword, pageSize, pageNumber);
刘基明's avatar
刘基明 committed
303 304 305 306 307 308
        List<FollowQo> followQos = userInfoResps.stream().map(ConvertUtil::userInfoNew2FollowQo).collect(Collectors.toList());
        if (StringUtils.isNotEmpty(userId)) {
            judgeFollowed(followQos, userId);
        }
        return followQos;
    }
张辰's avatar
张辰 committed
309
}