ThemeService.java 12.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 44 45 46 47 48 49 50 51 52 53
    /**
     * 根据主题Id查询列表
     * @return
     */
    public List<ThemeEntity> queryAll() {
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());

        return themeMapper.selectList(queryWrapper);
    }

刘基明's avatar
刘基明 committed
54
    //根据id返回主题详情(未删)
刘基明's avatar
刘基明 committed
55
    public ThemeEntity queryByThemeId(String themeId) {
刘基明's avatar
刘基明 committed
56
        return themeMapper.selectOne(new LambdaQueryWrapper<ThemeEntity>()
刘基明's avatar
刘基明 committed
57 58
                .eq(ThemeEntity::getThemeId, themeId)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode()));
刘基明's avatar
刘基明 committed
59 60
    }

刘基明's avatar
刘基明 committed
61
    public List<ThemeEntity> queryThemesByUserId(String userId) {
刘基明's avatar
刘基明 committed
62
        return themeMapper.selectList(new LambdaQueryWrapper<ThemeEntity>()
刘基明's avatar
刘基明 committed
63 64
                .eq(ThemeEntity::getAuthorId, userId)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode())
刘基明's avatar
刘基明 committed
65 66 67
                .orderByDesc(ThemeEntity::getId));
    }

刘基明's avatar
刘基明 committed
68
    public List<ThemeEntity> queryThemesByUserId(String userId, String lastId, Integer pageSize) {
刘基明's avatar
刘基明 committed
69 70 71 72 73 74
        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
75
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
76 77
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
        }
刘基明's avatar
刘基明 committed
78 79
        if (pageSize != null) {
            queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
80 81 82 83
        }
        return themeMapper.selectList(queryWrapper);
    }

刘基明's avatar
刘基明 committed
84
    //根据ids返回主题详情,带分页
刘基明's avatar
刘基明 committed
85
    public List<ThemeEntity> queryByThemeIds(List<String> themeIds, String lastId, Integer pageSize) {
刘基明's avatar
刘基明 committed
86 87 88
        if (CollectionUtils.isEmpty(themeIds)){
            return Collections.emptyList();
        }
刘基明's avatar
刘基明 committed
89 90 91 92 93
        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
94
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
95 96
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
        }
刘基明's avatar
刘基明 committed
97 98
        if (pageSize != null) {
            queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
99 100
        }
        return themeMapper.selectList(queryWrapper);
刘基明's avatar
刘基明 committed
101 102
    }

刘基明's avatar
刘基明 committed
103 104 105 106 107
    /**
     * 根据主题Id查询列表
     * @param themeIds
     * @return
     */
刘基明's avatar
刘基明 committed
108
    public List<ThemeEntity> queryByThemeIds(List<String> themeIds) {
刘基明's avatar
刘基明 committed
109 110 111
        if (CollectionUtils.isEmpty(themeIds)){
            return Collections.emptyList();
        }
刘基明's avatar
刘基明 committed
112 113 114 115 116
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .in(ThemeEntity::getThemeId, themeIds)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());

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

刘基明's avatar
刘基明 committed
119 120


刘基明's avatar
刘基明 committed
121
    /**
刘基明's avatar
刘基明 committed
122
     * 查询非传入作者的主题(可分页)
刘基明's avatar
刘基明 committed
123 124 125 126 127 128 129 130 131 132
     * @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
133

刘基明's avatar
刘基明 committed
134 135
        if (StringUtils.isNotEmpty(lastId)) {
            ThemeEntity lastEntity = queryByThemeId(lastId);
刘基明's avatar
刘基明 committed
136
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
137
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
刘基明's avatar
刘基明 committed
138
        }
刘基明's avatar
刘基明 committed
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
        if (pageSize!=null){
            queryWrapper.last("limit " + pageSize);
        }

        queryWrapper.orderByDesc(ThemeEntity::getId);
        queryWrapper.orderByDesc(ThemeEntity::getCreateTime);
        queryWrapper.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
        return themeMapper.selectList(queryWrapper);
    }

    /**
     * 查询非传入作者的主题(可分页)
     * @param lastId
     * @param pageSize
     * @param userId
     * @return
     */
    public List<ThemeEntity> queryByThemeIdsExcludeUser(List<String> themeIds,String userId,String lastId, Integer pageSize) {
        if (CollectionUtils.isEmpty(themeIds)){
            return Collections.emptyList();
        }
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .in(ThemeEntity::getThemeId, themeIds);
        if (!StringUtils.isEmpty(userId)){
            queryWrapper.ne(ThemeEntity::getAuthorId,userId);
        }

        if (StringUtils.isNotEmpty(lastId)) {
            ThemeEntity lastEntity = queryByThemeId(lastId);
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
        }
        if (pageSize!=null){
            queryWrapper.last("limit " + pageSize);
        }
刘基明's avatar
刘基明 committed
174

刘基明's avatar
刘基明 committed
175
        queryWrapper.orderByDesc(ThemeEntity::getId);
刘基明's avatar
刘基明 committed
176
        queryWrapper.orderByDesc(ThemeEntity::getCreateTime);
刘基明's avatar
刘基明 committed
177
        queryWrapper.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
刘基明's avatar
刘基明 committed
178 179 180
        return themeMapper.selectList(queryWrapper);
    }

刘基明's avatar
刘基明 committed
181
    /**
刘基明's avatar
刘基明 committed
182
     * 根据话题查询最新主题(可分页)
刘基明's avatar
刘基明 committed
183 184 185
     *
     * @param topidId  话题Id
     * @param lastId   查询此主题Id之前的主题
刘基明's avatar
刘基明 committed
186 187 188
     * @param pageSize 查询数量
     * @return
     */
刘基明's avatar
刘基明 committed
189
    public List<ThemeEntity> queryByTopic(String topidId, String lastId, Integer pageSize) {
刘基明's avatar
刘基明 committed
190 191 192
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getTopicId, topidId);
        if (StringUtils.isNotEmpty(lastId)) {
刘基明's avatar
刘基明 committed
193
            ThemeEntity lastEntity = queryByThemeId(lastId);
刘基明's avatar
刘基明 committed
194
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
195
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
刘基明's avatar
刘基明 committed
196
        }
刘基明's avatar
刘基明 committed
197 198
        if (pageSize != null) {
            queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
199
        }
刘基明's avatar
刘基明 committed
200
        queryWrapper.orderByDesc(ThemeEntity::getCreateTime);
刘基明's avatar
刘基明 committed
201
        queryWrapper.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
刘基明's avatar
刘基明 committed
202
        return themeMapper.selectList(queryWrapper);
刘基明's avatar
刘基明 committed
203
    }
刘基明's avatar
刘基明 committed
204

刘基明's avatar
刘基明 committed
205 206
    //根据话题查询所有的主题Id
    public List<String> queryThemeIdsByTopic(String topidId) {
刘基明's avatar
刘基明 committed
207
        if (StringUtils.isEmpty(topidId)) {
刘基明's avatar
刘基明 committed
208 209
            return Collections.emptyList();
        }
刘基明's avatar
刘基明 committed
210 211 212 213 214 215
        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
216

刘基明's avatar
刘基明 committed
217 218 219 220 221 222 223
    /**
     * 根据作者查询主题列表(可分页)
     * @param userIds
     * @param lastId
     * @param pageSize
     * @return
     */
刘基明's avatar
刘基明 committed
224
    public List<ThemeEntity> queryByUserIds(List<String> userIds, String lastId, Integer pageSize) {
刘基明's avatar
刘基明 committed
225
        LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
刘基明's avatar
刘基明 committed
226
                .in(ThemeEntity::getAuthorId, userIds);
刘基明's avatar
刘基明 committed
227
        if (StringUtils.isNotEmpty(lastId)) {
刘基明's avatar
刘基明 committed
228
            ThemeEntity lastEntity = queryByThemeId(lastId);
刘基明's avatar
刘基明 committed
229
            if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
刘基明's avatar
刘基明 committed
230
            queryWrapper.lt(ThemeEntity::getUpdateTime, lastEntity.getCreateTime());
刘基明's avatar
刘基明 committed
231
        }
刘基明's avatar
刘基明 committed
232
        queryWrapper.last("limit " + pageSize);
刘基明's avatar
刘基明 committed
233
        queryWrapper.orderByDesc(ThemeEntity::getCreateTime);
刘基明's avatar
刘基明 committed
234
        queryWrapper.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
刘基明's avatar
刘基明 committed
235
        return themeMapper.selectList(queryWrapper);
刘基明's avatar
刘基明 committed
236 237 238

    }

刘基明's avatar
刘基明 committed
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263
    /**
     * 根据关键字搜索
     * @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
264 265

    //查询对应话题的发表用户集合
刘基明's avatar
刘基明 committed
266
    public Set<String> getPostUserCount(List<String> themeIds) {
刘基明's avatar
刘基明 committed
267 268 269 270
        return themeMapper.selectBatchIds(themeIds).stream()
                .map(ThemeEntity::getAuthorId)
                .collect(Collectors.toSet());
    }
刘基明's avatar
刘基明 committed
271 272 273

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

刘基明's avatar
刘基明 committed
278
    public Integer getForwardCountByUser(String themeId, String userId) {
刘基明's avatar
刘基明 committed
279 280 281 282 283
        return themeMapper.selectCount(new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getFormerThemeId, themeId)
                .eq(ThemeEntity::getAuthorId, userId)
                .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED));
    }
刘基明's avatar
刘基明 committed
284

刘基明's avatar
刘基明 committed
285
    @Transactional
刘基明's avatar
刘基明 committed
286
    public void deleteById(String themeId) {
刘基明's avatar
刘基明 committed
287 288
        ThemeEntity themeEntity = themeMapper.selectOne(new LambdaQueryWrapper<ThemeEntity>()
                .eq(ThemeEntity::getThemeId, themeId));
刘基明's avatar
刘基明 committed
289 290
        if (themeEntity == null) {
            throw new BizException("主题未找到,id:" + themeId);
刘基明's avatar
刘基明 committed
291 292 293 294
        }
        themeEntity.setDeleteTag(DeleteTagEnum.DELETED.getCode());
        themeMapper.updateById(themeEntity);
    }
刘基明's avatar
刘基明 committed
295

刘基明's avatar
刘基明 committed
296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
    /**
     * 查询更新节点后的用户新建主题数
     * @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
314 315


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