ThemeService.java 10.5 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.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
刘基明's avatar
刘基明 committed
5
import com.tanpu.common.exception.BizException;
刘基明's avatar
刘基明 committed
6
import com.tanpu.common.uuid.UuidGenHelper;
刘基明's avatar
刘基明 committed
7
import com.tanpu.community.api.enums.DeleteTagEnum;
刘基明's avatar
刘基明 committed
8
import com.tanpu.community.dao.entity.community.ThemeEntity;
刘基明's avatar
刘基明 committed
9
import com.tanpu.community.dao.mapper.community.ThemeMapper;
刘基明's avatar
刘基明 committed
10
import org.apache.commons.collections4.CollectionUtils;
刘基明's avatar
刘基明 committed
11
import org.apache.commons.lang3.StringUtils;
刘基明's avatar
刘基明 committed
12
import org.springframework.beans.factory.annotation.Autowired;
刘基明's avatar
刘基明 committed
13
import org.springframework.stereotype.Service;
刘基明's avatar
刘基明 committed
14
import org.springframework.transaction.annotation.Transactional;
刘基明's avatar
刘基明 committed
15

刘基明's avatar
刘基明 committed
16
import javax.annotation.Resource;
刘基明's avatar
刘基明 committed
17
import java.time.LocalDateTime;
刘基明's avatar
刘基明 committed
18
import java.util.Collections;
刘基明's avatar
刘基明 committed
19
import java.util.List;
刘基明's avatar
刘基明 committed
20 21
import java.util.Set;
import java.util.stream.Collectors;
刘基明's avatar
刘基明 committed
22

刘基明's avatar
刘基明 committed
23 24 25
@Service
public class ThemeService {

刘基明's avatar
刘基明 committed
26
    @Resource
刘基明's avatar
刘基明 committed
27
    private ThemeMapper themeMapper;
刘基明's avatar
刘基明 committed
28

刘基明's avatar
刘基明 committed
29 30 31
    @Autowired
    private UuidGenHelper uuidGenHelper;

刘基明's avatar
刘基明 committed
32
    @Transactional
刘基明's avatar
刘基明 committed
33
    public void insertTheme(ThemeEntity themeEntity) {
刘基明's avatar
刘基明 committed
34
        themeEntity.setThemeId(uuidGenHelper.getUuidStr());
刘基明's avatar
刘基明 committed
35 36 37
        themeMapper.insert(themeEntity);
    }

刘基明's avatar
刘基明 committed
38
    @Transactional
刘基明's avatar
刘基明 committed
39 40
    public void update(ThemeEntity themeEntity, String themeId) {
        themeMapper.update(themeEntity, new LambdaUpdateWrapper<ThemeEntity>().eq(ThemeEntity::getThemeId, themeId));
刘基明's avatar
刘基明 committed
41 42
    }

刘基明's avatar
刘基明 committed
43
    //根据id返回主题详情(未删)
刘基明's avatar
刘基明 committed
44
    public ThemeEntity queryByThemeId(String themeId) {
刘基明's avatar
刘基明 committed
45
        return themeMapper.selectOne(new LambdaQueryWrapper<ThemeEntity>()
刘基明's avatar
刘基明 committed
46 47
                .eq(ThemeEntity::getThemeId, themeId)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode()));
刘基明's avatar
刘基明 committed
48 49
    }

刘基明's avatar
刘基明 committed
50
    public List<ThemeEntity> queryThemesByUserId(String userId) {
刘基明's avatar
刘基明 committed
51
        return themeMapper.selectList(new LambdaQueryWrapper<ThemeEntity>()
刘基明's avatar
刘基明 committed
52 53
                .eq(ThemeEntity::getAuthorId, userId)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode())
刘基明's avatar
刘基明 committed
54 55 56
                .orderByDesc(ThemeEntity::getId));
    }

刘基明's avatar
刘基明 committed
57
    public List<ThemeEntity> queryThemesByUserId(String userId, String lastId, Integer pageSize) {
刘基明's avatar
刘基明 committed
58 59 60 61 62 63
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getAuthorId, userId)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode())
                .orderByDesc(ThemeEntity::getId);
        if (StringUtils.isNotEmpty(lastId)) {
            ThemeEntity lastEntity = queryByThemeId(lastId);
刘基明's avatar
刘基明 committed
64
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
65 66
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
        }
刘基明's avatar
刘基明 committed
67 68
        if (pageSize != null) {
            queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
69 70 71 72
        }
        return themeMapper.selectList(queryWrapper);
    }

刘基明's avatar
刘基明 committed
73
    //根据ids返回主题详情,带分页
刘基明's avatar
刘基明 committed
74
    public List<ThemeEntity> queryByThemeIds(List<String> themeIds, String lastId, Integer pageSize) {
刘基明's avatar
刘基明 committed
75 76 77 78 79
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .in(ThemeEntity::getThemeId, themeIds)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
        if (StringUtils.isNotEmpty(lastId)) {
            ThemeEntity lastEntity = queryByThemeId(lastId);
刘基明's avatar
刘基明 committed
80
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
81 82
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
        }
刘基明's avatar
刘基明 committed
83 84
        if (pageSize != null) {
            queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
85 86
        }
        return themeMapper.selectList(queryWrapper);
刘基明's avatar
刘基明 committed
87 88 89 90
    }

    //根据ids返回主题详情
    public List<ThemeEntity> queryByThemeIds(List<String> themeIds) {
刘基明's avatar
刘基明 committed
91 92 93 94 95
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .in(ThemeEntity::getThemeId, themeIds)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());

        return themeMapper.selectList(queryWrapper);
刘基明's avatar
刘基明 committed
96 97
    }

刘基明's avatar
刘基明 committed
98 99 100 101 102 103 104 105 106 107 108 109
    /**
     * 分页查询,非当前用户的主题
     * @param lastId
     * @param pageSize
     * @param userId
     * @return
     */
    public List<ThemeEntity> selectExcludeUser(String userId,String lastId, Integer pageSize) {
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<>();
        if (!StringUtils.isEmpty(userId)){
            queryWrapper.ne(ThemeEntity::getAuthorId,userId);
        }
刘基明's avatar
刘基明 committed
110

刘基明's avatar
刘基明 committed
111 112
        if (StringUtils.isNotEmpty(lastId)) {
            ThemeEntity lastEntity = queryByThemeId(lastId);
刘基明's avatar
刘基明 committed
113
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
114
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
刘基明's avatar
刘基明 committed
115
        }
刘基明's avatar
刘基明 committed
116

刘基明's avatar
刘基明 committed
117
        queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
118
        queryWrapper.orderByDesc(ThemeEntity::getId);
刘基明's avatar
刘基明 committed
119
        queryWrapper.orderByDesc(ThemeEntity::getCreateTime);
刘基明's avatar
刘基明 committed
120
        queryWrapper.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
刘基明's avatar
刘基明 committed
121 122 123 124
        return themeMapper.selectList(queryWrapper);
    }


刘基明's avatar
刘基明 committed
125
    /**
刘基明's avatar
刘基明 committed
126
     * 根据条件查询最新主题
刘基明's avatar
刘基明 committed
127 128 129
     *
     * @param topidId  话题Id
     * @param lastId   查询此主题Id之前的主题
刘基明's avatar
刘基明 committed
130 131 132
     * @param pageSize 查询数量
     * @return
     */
刘基明's avatar
刘基明 committed
133
    public List<ThemeEntity> queryByTopic(String topidId, String lastId, Integer pageSize) {
刘基明's avatar
刘基明 committed
134 135 136
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getTopicId, topidId);
        if (StringUtils.isNotEmpty(lastId)) {
刘基明's avatar
刘基明 committed
137
            ThemeEntity lastEntity = queryByThemeId(lastId);
刘基明's avatar
刘基明 committed
138
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
139
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
刘基明's avatar
刘基明 committed
140
        }
刘基明's avatar
刘基明 committed
141 142
        if (pageSize != null) {
            queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
143
        }
刘基明's avatar
刘基明 committed
144
        queryWrapper.orderByDesc(ThemeEntity::getCreateTime);
刘基明's avatar
刘基明 committed
145
        queryWrapper.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
刘基明's avatar
刘基明 committed
146
        return themeMapper.selectList(queryWrapper);
刘基明's avatar
刘基明 committed
147
    }
刘基明's avatar
刘基明 committed
148

刘基明's avatar
刘基明 committed
149 150
    //根据话题查询所有的主题Id
    public List<String> queryThemeIdsByTopic(String topidId) {
刘基明's avatar
刘基明 committed
151
        if (StringUtils.isEmpty(topidId)) {
刘基明's avatar
刘基明 committed
152 153
            return Collections.emptyList();
        }
刘基明's avatar
刘基明 committed
154 155 156 157 158 159
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getTopicId, topidId);
        queryWrapper.select(ThemeEntity::getThemeId);
        return themeMapper.selectList(queryWrapper).stream().map(ThemeEntity::getThemeId).collect(Collectors.toList());
    }

刘基明's avatar
刘基明 committed
160 161

    //关注的主题列表
刘基明's avatar
刘基明 committed
162
    public List<ThemeEntity> queryByUserIds(List<String> userIds, String lastId, Integer pageSize) {
刘基明's avatar
刘基明 committed
163
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
刘基明's avatar
刘基明 committed
164
                .in(ThemeEntity::getAuthorId, userIds);
刘基明's avatar
刘基明 committed
165
        if (StringUtils.isNotEmpty(lastId)) {
刘基明's avatar
刘基明 committed
166
            ThemeEntity lastEntity = queryByThemeId(lastId);
刘基明's avatar
刘基明 committed
167
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
168
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
刘基明's avatar
刘基明 committed
169
        }
刘基明's avatar
刘基明 committed
170
        queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
171
        queryWrapper.orderByDesc(ThemeEntity::getCreateTime);
刘基明's avatar
刘基明 committed
172
        queryWrapper.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
刘基明's avatar
刘基明 committed
173
        return themeMapper.selectList(queryWrapper);
刘基明's avatar
刘基明 committed
174 175 176

    }

刘基明's avatar
刘基明 committed
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
    /**
     * 根据关键字搜索
     * @param keyword
     * @param lastId
     * @param pageSize
     * @return
     */
    public List<ThemeEntity> search(String keyword, String lastId, Integer pageSize) {
        if (StringUtils.isEmpty(keyword)){
            return Collections.emptyList();
        }
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .like(ThemeEntity::getTitle, keyword);
        if (StringUtils.isNotEmpty(lastId)) {
            ThemeEntity lastEntity = queryByThemeId(lastId);
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
        }
        queryWrapper.last("limit " + pageSize);
        queryWrapper.orderByDesc(ThemeEntity::getCreateTime);
        queryWrapper.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
        return themeMapper.selectList(queryWrapper);

    }

刘基明's avatar
刘基明 committed
202 203

    //查询对应话题的发表用户集合
刘基明's avatar
刘基明 committed
204
    public Set<String> getPostUserCount(List<String> themeIds) {
刘基明's avatar
刘基明 committed
205 206 207 208
        return themeMapper.selectBatchIds(themeIds).stream()
                .map(ThemeEntity::getAuthorId)
                .collect(Collectors.toSet());
    }
刘基明's avatar
刘基明 committed
209 210 211

    public Integer getForwardCountById(String themeId) {
        return themeMapper.selectCount(new LambdaQueryWrapper<ThemeEntity>()
刘基明's avatar
刘基明 committed
212
                .eq(ThemeEntity::getFormerThemeId, themeId)
刘基明's avatar
刘基明 committed
213 214
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED));
    }
刘基明's avatar
刘基明 committed
215

刘基明's avatar
刘基明 committed
216
    public Integer getForwardCountByUser(String themeId, String userId) {
刘基明's avatar
刘基明 committed
217 218 219 220 221
        return themeMapper.selectCount(new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getFormerThemeId, themeId)
                .eq(ThemeEntity::getAuthorId, userId)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED));
    }
刘基明's avatar
刘基明 committed
222

刘基明's avatar
刘基明 committed
223
    @Transactional
刘基明's avatar
刘基明 committed
224
    public void deleteById(String themeId) {
刘基明's avatar
刘基明 committed
225 226
        ThemeEntity themeEntity = themeMapper.selectOne(new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getThemeId, themeId));
刘基明's avatar
刘基明 committed
227 228
        if (themeEntity == null) {
            throw new BizException("主题未找到,id:" + themeId);
刘基明's avatar
刘基明 committed
229 230 231 232
        }
        themeEntity.setDeleteTag(DeleteTagEnum.DELETED.getCode());
        themeMapper.updateById(themeEntity);
    }
刘基明's avatar
刘基明 committed
233

刘基明's avatar
刘基明 committed
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
    /**
     * 查询更新节点后的用户新建主题数
     * @param userIds 用户ids
     * @param lastViewTime 更新时间节点
     * @return
     */
    public Integer queryCountFromLastTime(List<String> userIds, LocalDateTime lastViewTime) {
        if (CollectionUtils.isEmpty(userIds)) {
            return 0;
        }
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .in(ThemeEntity::getAuthorId, userIds)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
        if (lastViewTime != null) {
            queryWrapper.gt(ThemeEntity::getCreateTime, lastViewTime);
        }
        return themeMapper.selectCount(queryWrapper);
    }
刘基明's avatar
刘基明 committed
252 253


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