TopicService.java 9.86 KB
Newer Older
刘基明's avatar
刘基明 committed
1 2
package com.tanpu.community.service;

刘基明's avatar
刘基明 committed
3
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
刘基明's avatar
刘基明 committed
4
import com.tanpu.biz.common.enums.RelTypeEnum;
刘基明's avatar
刘基明 committed
5
import com.tanpu.community.api.beans.qo.ThemeQo;
刘基明's avatar
刘基明 committed
6 7
import com.tanpu.community.api.beans.qo.TopicAttachment;
import com.tanpu.community.api.beans.qo.TopicAttachmentDetail;
刘基明's avatar
刘基明 committed
8
import com.tanpu.community.api.beans.qo.TopicFollowQo;
刘基明's avatar
刘基明 committed
9
import com.tanpu.community.api.beans.qo.TopicPageDetailQo;
刘基明's avatar
刘基明 committed
10
import com.tanpu.community.api.beans.qo.TopicRankQo;
刘基明's avatar
刘基明 committed
11 12 13
import com.tanpu.community.api.beans.resp.CoursePackageSimpleResp;
import com.tanpu.community.api.beans.vo.feign.activity.OfflineActivitySimpleResp;
import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoResp;
刘基明's avatar
刘基明 committed
14
import com.tanpu.community.api.enums.DeleteTagEnum;
刘基明's avatar
刘基明 committed
15
import com.tanpu.community.api.enums.StatusEnum;
刘基明's avatar
刘基明 committed
16
import com.tanpu.community.api.enums.TopicSpecialPermissionEnum;
刘基明's avatar
刘基明 committed
17
import com.tanpu.community.dao.entity.community.TopicEntity;
刘基明's avatar
刘基明 committed
18
import com.tanpu.community.dao.entity.community.TopicFollowRelEntity;
刘基明's avatar
刘基明 committed
19 20
import com.tanpu.community.dao.entity.community.TopicManagerEntity;
import com.tanpu.community.dao.entity.community.TopicSubjectEntity;
刘基明's avatar
刘基明 committed
21
import com.tanpu.community.dao.mapper.community.TopicFollowRelMapper;
刘基明's avatar
刘基明 committed
22
import com.tanpu.community.dao.mapper.community.TopicManagerMapper;
刘基明's avatar
刘基明 committed
23
import com.tanpu.community.dao.mapper.community.TopicMapper;
刘基明's avatar
刘基明 committed
24
import com.tanpu.community.dao.mapper.community.TopicSubjectMapper;
刘基明's avatar
刘基明 committed
25
import com.tanpu.community.util.ConvertUtil;
刘基明's avatar
刘基明 committed
26
import org.apache.commons.collections4.CollectionUtils;
刘基明's avatar
刘基明 committed
27
import org.apache.commons.lang3.StringUtils;
刘基明's avatar
刘基明 committed
28 29 30 31
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
刘基明's avatar
刘基明 committed
32
import java.time.LocalDateTime;
张辰's avatar
张辰 committed
33
import java.util.ArrayList;
刘基明's avatar
刘基明 committed
34
import java.util.Collections;
刘基明's avatar
刘基明 committed
35
import java.util.List;
刘基明's avatar
刘基明 committed
36
import java.util.stream.Collectors;
刘基明's avatar
刘基明 committed
37 38 39 40 41 42 43


@Service
@EnableCaching
public class TopicService {

    @Resource
刘基明's avatar
刘基明 committed
44
    TopicFollowRelMapper topicFollowRelMapper;
刘基明's avatar
刘基明 committed
45

刘基明's avatar
刘基明 committed
46 47 48 49
    @Resource
    TopicMapper topicMapper;

    @Resource
刘基明's avatar
刘基明 committed
50
    private TopicManagerMapper topicManagerMapper;
刘基明's avatar
刘基明 committed
51
    @Resource
刘基明's avatar
刘基明 committed
52
    private FeignService feignService;
刘基明's avatar
刘基明 committed
53
    @Resource
刘基明's avatar
刘基明 committed
54
    private TopicSubjectMapper topicSubjectMapper;
刘基明's avatar
刘基明 committed
55

刘基明's avatar
刘基明 committed
56

刘基明's avatar
刘基明 committed
57
    public List<TopicEntity> queryAll() {
张辰's avatar
张辰 committed
58 59 60 61 62 63 64 65 66 67 68 69
        List<TopicEntity> retList = new ArrayList<>();

        Long lastId = 0L;
        while (true) {
            List<TopicEntity> tmpList = topicMapper.selectGtIdPageable(lastId, 100);
            if (tmpList.isEmpty()) {
                break;
            }
            retList.addAll(tmpList);
            lastId = tmpList.stream().map(TopicEntity::getId).max(Long::compareTo).get();
        }
        return retList;
刘基明's avatar
刘基明 committed
70 71
    }

刘基明's avatar
刘基明 committed
72

刘基明's avatar
刘基明 committed
73
    public TopicEntity queryOnlineTopicById(String topicId) {
74 75 76 77
        return topicMapper.selectOne(new LambdaQueryWrapper<TopicEntity>()
                .eq(TopicEntity::getTopicId, topicId)
                .eq(TopicEntity::getIsConceal, StatusEnum.FALSE)
                .eq(TopicEntity::getDeleteTag, StatusEnum.FALSE));
刘基明's avatar
刘基明 committed
78
    }
刘基明's avatar
刘基明 committed
79

80
    // 根据话题id查询title,(包括已删除)
81
    public String queryTitleById(String topicId) {
82
        TopicEntity topicEntity = topicMapper.selectOne(new LambdaQueryWrapper<TopicEntity>()
83
                .eq(TopicEntity::getTopicId, topicId));
刘基明's avatar
刘基明 committed
84
        return topicEntity != null ? topicEntity.getTopicTitle() : null;
85 86
    }

87
    public List<TopicEntity> queryByIds(List<String> topicIds) {
刘基明's avatar
刘基明 committed
88
        if (CollectionUtils.isEmpty(topicIds)) {
刘基明's avatar
刘基明 committed
89 90
            return Collections.emptyList();
        }
刘基明's avatar
刘基明 committed
91
        return topicMapper.selectList(new LambdaQueryWrapper<TopicEntity>().in(TopicEntity::getTopicId, topicIds));
92 93
    }

刘基明's avatar
刘基明 committed
94
    public List<TopicFollowQo> queryFollowTopic(String keyword, String userId) {
刘基明's avatar
刘基明 committed
95 96
        // 用户的关注列表(包括专属)
        List<String> followTopicIds = topicFollowRelMapper.selectTopicIdByUserId(userId);
刘基明's avatar
刘基明 committed
97
        if (CollectionUtils.isEmpty(followTopicIds)) {
刘基明's avatar
刘基明 committed
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
            return Collections.emptyList();
        }

        List<TopicEntity> topicEntities = topicMapper.selectAllByTopicIdIn(followTopicIds);
        List<TopicFollowQo> topicFollowQos = ConvertUtil.topicEntityToFollowQos(topicEntities);
        return topicFollowQos;

    }


    public boolean addFollowTopic(String topicId, String userId) {
        TopicFollowRelEntity searchResult = topicFollowRelMapper.queryOneByTopicIdAndUserId(topicId, userId);
        if (searchResult == null) {
            TopicFollowRelEntity entity = TopicFollowRelEntity.builder()
                    .topicId(topicId)
                    .userId(userId)
                    .followTime(LocalDateTime.now())
                    .build();

            topicFollowRelMapper.insert(entity);
            return true;
        } else {
            searchResult.setFollowTime(LocalDateTime.now());
            searchResult.setDeleteTag(DeleteTagEnum.NOT_DELETED.getCode());
            topicFollowRelMapper.updateById(searchResult);
            return false;
        }
    }

    public void deleteFollowTopic(String topicId, String userId) {
        TopicFollowRelEntity searchResult = topicFollowRelMapper.queryOneByTopicIdAndUserId(topicId, userId);
刘基明's avatar
刘基明 committed
129
        if (searchResult != null) {
刘基明's avatar
刘基明 committed
130 131 132 133
            searchResult.setUnfollowTime(LocalDateTime.now());
            searchResult.setDeleteTag(DeleteTagEnum.DELETED.getCode());
            topicFollowRelMapper.updateById(searchResult);
        }
刘基明's avatar
刘基明 committed
134
    }
刘基明's avatar
刘基明 committed
135 136

    public void batchCheckPermission(List<TopicRankQo> content, String userId) {
刘基明's avatar
刘基明 committed
137
        if (StringUtils.isBlank(userId)) {
刘基明's avatar
刘基明 committed
138 139 140
            return;
        }
    }
刘基明's avatar
刘基明 committed
141

刘基明's avatar
刘基明 committed
142 143 144 145 146 147 148 149 150 151 152 153

    /**
     * 判断用户是否拥有权限(1对1)
     *
     * @param topicId
     * @param userId
     */
    public boolean checkPermission(String topicId, String userId) {

        TopicEntity topicEntity = queryOnlineTopicById(topicId);
        if (TopicSpecialPermissionEnum.FALSE.getCode().equals(topicEntity.getSpecialPermission())) {
            return true;
刘基明's avatar
刘基明 committed
154
        }
刘基明's avatar
刘基明 committed
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
        TopicFollowRelEntity topicFollowRelEntity = topicFollowRelMapper.queryOneByTopicIdAndUserId(topicId, userId);
        if (topicFollowRelEntity != null) {
            return true;
        } else {
            return false;
        }
    }


    public String getPermissionToast(String topicId) {

        String permission = "专业版会员";

        return "暂无权限参与此话题~您可联系官方客服 021- 了解详情";
        // return "该话题仅限" + permission + "可参与哦~";
刘基明's avatar
刘基明 committed
170
    }
刘基明's avatar
刘基明 committed
171 172 173 174 175 176

    public String queryManagers(String topicId) {
        return "小王、小李、小刘";
    }

    public void queryAttachments(TopicPageDetailQo topic) {
刘基明's avatar
刘基明 committed
177 178 179 180
        List<TopicSubjectEntity> topicSubjectEntities = topicSubjectMapper.selectList(new LambdaQueryWrapper<TopicSubjectEntity>().eq(TopicSubjectEntity::getTopicId, topic.getTopicId()));
        if (CollectionUtils.isEmpty(topicSubjectEntities)) {
            topic.setAttachments(null);
        }
刘基明's avatar
刘基明 committed
181

刘基明's avatar
刘基明 committed
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
        ArrayList<TopicAttachment> attachements = new ArrayList<>();
        for (TopicSubjectEntity entity : topicSubjectEntities) {

            if (RelTypeEnum.FUND.type.equals(entity.getSubjectType().toString())) {
                // 基金
                TopicAttachment attach = TopicAttachment.builder().type(RelTypeEnum.FUND.type).detail(null).build();
                attachements.add(attach);
            }else if (RelTypeEnum.FUND_COMPANY.type.equals(entity.getSubjectType().toString())) {
                // 资管人
                TopicAttachment attach = TopicAttachment.builder().type(RelTypeEnum.FUND_COMPANY.type).detail(null).build();
                attachements.add(attach);
            }else if (RelTypeEnum.NEW_COURSE_WARE.type.equals(entity.getSubjectType().toString())) {
                // 课程包
                List<CoursePackageSimpleResp> coursePackage = feignService.getCoursePackageList(Collections.singletonList(entity.getSubjectId()));
                TopicAttachmentDetail detailVo = TopicAttachmentDetail.builder().coursePackage(coursePackage.get(0)).build();
                TopicAttachment attach = TopicAttachment.builder().type(RelTypeEnum.NEW_COURSE_WARE.type).detail(detailVo).build();
                attachements.add(attach);
            }else if (RelTypeEnum.OFFLINE_ACTIVITY.type.equals(entity.getSubjectType().toString())) {
                // 线下活动
                List<OfflineActivitySimpleResp> activitySimpleList = feignService.getActivitySimpleList(Collections.singletonList(entity.getSubjectId()));
                TopicAttachmentDetail detailVo = TopicAttachmentDetail.builder().activity(activitySimpleList.get(0)).build();
                TopicAttachment attach = TopicAttachment.builder().type(RelTypeEnum.OFFLINE_ACTIVITY.type).detail(detailVo).build();
                attachements.add(attach);
            }
        }
刘基明's avatar
刘基明 committed
207

刘基明's avatar
刘基明 committed
208 209

        topic.setAttachments(attachements);
刘基明's avatar
刘基明 committed
210 211
    }

刘基明's avatar
刘基明 committed
212

刘基明's avatar
刘基明 committed
213 214 215 216 217 218 219
    public boolean checkFollow(String topicId, String userId) {
        if (StringUtils.isBlank(userId)) {
            return false;
        }
        TopicFollowRelEntity topicFollowRelEntity = topicFollowRelMapper.queryOneByTopicIdAndUserId(topicId, userId);
        return topicFollowRelEntity != null;
    }
刘基明's avatar
刘基明 committed
220 221 222 223 224 225 226 227 228 229


    public void checkManager(String topicId, List<ThemeQo> themes) {
        String managerId = getManagerId(topicId);
        for (ThemeQo theme : themes) {
            theme.setManager(theme.getAuthorId().equals(managerId));
        }
    }

    public String getManagerId(String topicId) {
刘基明's avatar
刘基明 committed
230 231 232 233 234 235 236 237 238 239 240 241
        List<TopicManagerEntity> topicManagerEntities = topicManagerMapper.selectList(new LambdaQueryWrapper<TopicManagerEntity>().eq(TopicManagerEntity::getTopicId, topicId));

        List<String> managerIds = topicManagerEntities.stream().map(TopicManagerEntity::getUserId).collect(Collectors.toList());

        List<UserInfoResp> userList = feignService.getUserList(managerIds);

        if (CollectionUtils.isEmpty(userList)) {
            return "";
        }
        List<String> userNames = userList.stream().map(UserInfoResp::getNickName).collect(Collectors.toList());

        return StringUtils.join(userNames, "、");
刘基明's avatar
刘基明 committed
242 243

    }
刘基明's avatar
刘基明 committed
244
}