|
@@ -1,7 +1,9 @@
|
|
|
package cn.com.ty.lift.quan.news.service.impl;
|
|
|
|
|
|
+import cn.com.ty.lift.common.constants.ApiConstants;
|
|
|
import cn.com.ty.lift.common.utils.AliyunOSSUtil;
|
|
|
import cn.com.ty.lift.quan.news.dao.entity.QuanNews;
|
|
|
+import cn.com.ty.lift.quan.news.dao.entity.model.QuanNewsReq;
|
|
|
import cn.com.ty.lift.quan.news.dao.mapper.QuanNewsMapper;
|
|
|
import cn.com.ty.lift.quan.news.service.QuanNewsService;
|
|
|
import cn.com.xwy.boot.web.dto.RestResponse;
|
|
@@ -10,13 +12,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -27,9 +31,13 @@ import java.util.List;
|
|
|
* @since 2019-12-02
|
|
|
*/
|
|
|
@Service
|
|
|
+@AllArgsConstructor
|
|
|
@Transactional
|
|
|
public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> implements QuanNewsService {
|
|
|
|
|
|
+ private final RedisTemplate redisTemplate;
|
|
|
+ private final StringRedisTemplate stringRedisTemplate;
|
|
|
+
|
|
|
/**
|
|
|
* @description 将新闻置顶
|
|
|
* @date 2019/12/3 11:23
|
|
@@ -43,9 +51,17 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
|
|
|
if (type == 1) {
|
|
|
if (byId.getTopSerial() != 0) {
|
|
|
//如果新闻在置顶新闻中
|
|
|
+ Integer serial = byId.getTopSerial();
|
|
|
+
|
|
|
List<QuanNews> tops = this.list(new QueryWrapper<QuanNews>().ne("top_serial", 0));
|
|
|
for (QuanNews top : tops) {
|
|
|
- top.setTopSerial(top.getTopSerial() + 1);
|
|
|
+ if (top.getTopSerial() < serial) {
|
|
|
+ top.setTopSerial(top.getTopSerial() + 1);
|
|
|
+ }
|
|
|
+ if (top.getTopSerial().equals(serial)) {
|
|
|
+ top.setTopSerial(1);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
}
|
|
|
QuanNews top = this.getOne(new QueryWrapper<QuanNews>().eq("top_serial", 1));
|
|
|
top.setTopSerial(byId.getTopSerial());
|
|
@@ -107,36 +123,88 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @description 时间倒序查询置顶新闻+普通新闻列表
|
|
|
+ * @description 查询置顶新闻+普通新闻列表
|
|
|
* @date 2019/12/3 10:30
|
|
|
*/
|
|
|
public RestResponse news(Long pageNum, Long pageSize, Integer haveTops) {
|
|
|
Page<QuanNews> page = new Page<>(pageNum, pageSize);
|
|
|
- IPage<QuanNews> news = this.page(page, new QueryWrapper<QuanNews>().eq("top_serial", "0").orderByDesc("release_date"));
|
|
|
+ IPage<Map<String, Object>> news = this.pageMaps(page, new QueryWrapper<QuanNews>().eq("top_serial", "0").orderByDesc("release_date"));
|
|
|
+ //全部新闻的浏览量列表
|
|
|
+ Map<Object, Object> lookTimes = stringRedisTemplate.boundHashOps("system-quanNews-look-time").entries();
|
|
|
+ //全部新闻的点赞用户列表
|
|
|
+ Map<String, TreeSet> likeUsers = redisTemplate.opsForHash().entries("system-quanNews-like-users");
|
|
|
if (haveTops == 0) {
|
|
|
- return RestResponse.ok(news, "1", "查询成功");
|
|
|
+ if (news.getRecords().isEmpty()) {
|
|
|
+ return RestResponse.ok(null, ApiConstants.RESULT_NO_DATA, "无数据");
|
|
|
+ }
|
|
|
+ //把点赞的用户数量和浏览量整入新闻字段中
|
|
|
+ newsAddLookAndLike(news.getRecords(), lookTimes, likeUsers);
|
|
|
+ return RestResponse.ok(news, ApiConstants.RESULT_SUCCESS, "查询成功");
|
|
|
}
|
|
|
- List topNews = this.list(new QueryWrapper<QuanNews>().ne("top_serial", "0").orderByAsc("top_serial"));
|
|
|
+ List<Map<String, Object>> topNews = this.listMaps(new QueryWrapper<QuanNews>().ne("top_serial", "0").orderByAsc("top_serial"));
|
|
|
+ //把点赞的用户数量和浏览量整入新闻字段中
|
|
|
+ newsAddLookAndLike(topNews, lookTimes, likeUsers);
|
|
|
+
|
|
|
HashMap<String, Object> map = new HashMap<>();
|
|
|
map.put("topNews", topNews);
|
|
|
map.put("news", news);
|
|
|
- return RestResponse.ok(map, "1", "查询成功");
|
|
|
+ return RestResponse.ok(map, ApiConstants.RESULT_SUCCESS, "查询成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ //把点赞的用户数量和浏览量整入新闻字段中
|
|
|
+ void newsAddLookAndLike(List<Map<String, Object>> records, Map<Object, Object> lookTimes, Map<String, TreeSet> likeUsers) {
|
|
|
+ for (Map<String, Object> record : records) {
|
|
|
+ Object id = record.get("id");
|
|
|
+ //如果没有浏览量
|
|
|
+ if (lookTimes.isEmpty()) {
|
|
|
+ record.put("lookNum", "0");
|
|
|
+ } else {
|
|
|
+ //遍历lookTimes,查看对应id的新闻浏览量
|
|
|
+ for (Map.Entry<Object, Object> entry : lookTimes.entrySet()) {
|
|
|
+ Object key = entry.getKey();
|
|
|
+ Object value = entry.getValue();
|
|
|
+ if (key.equals(id.toString())) {
|
|
|
+ record.put("lookNum", value);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ record.put("lookNum", "0");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果没有用户喜爱
|
|
|
+ if (likeUsers.isEmpty()) {
|
|
|
+ record.put("likeNum", "0");
|
|
|
+ } else {
|
|
|
+ //遍历likeUsers,查看对应id的新闻的点赞量
|
|
|
+ for (Map.Entry<String, TreeSet> entry : likeUsers.entrySet()) {
|
|
|
+ String k = entry.getKey();
|
|
|
+ TreeSet v = entry.getValue();
|
|
|
+ if (k.equals(id.toString())) {
|
|
|
+ record.put("likeNum", v.size());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ record.put("likeNum", "0");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- public RestResponse addNew(QuanNews quanNews, MultipartFile videoFile, Integer isTop) {
|
|
|
+ public RestResponse addNew(QuanNewsReq req) {
|
|
|
+ QuanNews quanNews = new QuanNews();
|
|
|
+ quanNews.setTitle(req.getTitle())
|
|
|
+ .setContent(req.getContent())
|
|
|
+ .setReleaseId(req.getReleaseId())
|
|
|
+ .setReleaseUser(req.getReleaseUser());
|
|
|
+
|
|
|
if (!videoFile.isEmpty()) {
|
|
|
- quanNews.setVideoPath(this.upFile(videoFile));
|
|
|
+ quanNews.setVideoName(this.upFile(videoFile));
|
|
|
}
|
|
|
|
|
|
List<QuanNews> tops;
|
|
|
- if (isTop != 0) {
|
|
|
+ if (req.getIsTop() != 0) {
|
|
|
//获取置顶新闻列表
|
|
|
tops = this.list(new QueryWrapper<QuanNews>().ne("top_serial", 0));
|
|
|
//设置新添加新闻的数据
|
|
|
- quanNews
|
|
|
- .setReleaseId(quanNews.getReleaseId())
|
|
|
- .setReleaseUser(quanNews.getReleaseUser())
|
|
|
- .setTopSerial(1);
|
|
|
+ quanNews.setTopSerial(1);
|
|
|
//遍历排序加1
|
|
|
if (!tops.isEmpty()) {
|
|
|
tops.forEach(top -> {
|
|
@@ -155,10 +223,7 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //设置新添加新闻的数据
|
|
|
- quanNews
|
|
|
- .setReleaseId(quanNews.getReleaseId())
|
|
|
- .setReleaseUser(quanNews.getReleaseUser());
|
|
|
+ //添加新闻
|
|
|
if (this.save(quanNews)) {
|
|
|
return RestResponse.ok(null, "1", "新增成功");
|
|
|
} else {
|
|
@@ -180,7 +245,7 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
|
|
|
|
|
|
if (!videoFile.isEmpty()) {
|
|
|
//上传视频到Oss,获取视频地址
|
|
|
- byId.setVideoPath(this.upFile(videoFile));
|
|
|
+ byId.setVideoName(this.upFile(videoFile));
|
|
|
}
|
|
|
|
|
|
if (this.updateById(byId)) {
|
|
@@ -227,4 +292,51 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ public RestResponse like(QuanNewsReq req) {
|
|
|
+ String uid = req.getUserId().toString();
|
|
|
+ String id = req.getId().toString();
|
|
|
+ TreeSet users = (TreeSet) redisTemplate.opsForHash().get("system-quanNews-like-users", id);
|
|
|
+ if (users == null) {
|
|
|
+ users = new TreeSet<>();
|
|
|
+ users.add(uid);
|
|
|
+ redisTemplate.opsForHash().put("system-quanNews-like-users", id, users);
|
|
|
+ return RestResponse.ok(1, ApiConstants.RESULT_SUCCESS, "点赞成功");
|
|
|
+ } else {
|
|
|
+ //遍历userId列表
|
|
|
+ for (Object user : users) {
|
|
|
+ if (user.equals(uid)) {
|
|
|
+ //如果列表内有这个uid就删除喜欢,并return
|
|
|
+ users.remove(user);
|
|
|
+ redisTemplate.opsForHash().put("system-quanNews-like-users", id, users);
|
|
|
+ return RestResponse.ok(0, ApiConstants.RESULT_SUCCESS, "取消点赞成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果列表内没有这个uid就标记喜欢
|
|
|
+ users.add(uid);
|
|
|
+ redisTemplate.opsForHash().put("system-quanNews-like-users", id, users);
|
|
|
+ return RestResponse.ok(1, ApiConstants.RESULT_SUCCESS, "点赞成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取一条新闻
|
|
|
+ public RestResponse getQuanNews(QuanNewsReq req) {
|
|
|
+ Map<String, Object> byId = this.getMap(new QueryWrapper<QuanNews>().eq("id", req.getId()));
|
|
|
+ if (null != byId) {
|
|
|
+ String id = byId.get("id").toString();
|
|
|
+ Long lookNum = redisTemplate.boundHashOps("system-quanNews-look-time").increment(id, 1);
|
|
|
+ int isLike;
|
|
|
+ TreeSet users = (TreeSet) redisTemplate.opsForHash().get("system-quanNews-like-users", id);
|
|
|
+ if (users != null && !users.add(req.getUserId().toString())) {
|
|
|
+ isLike = 1;
|
|
|
+ } else {
|
|
|
+ isLike = 0;
|
|
|
+ }
|
|
|
+ byId.put("lookNum", lookNum);
|
|
|
+ byId.put("isLike", isLike);
|
|
|
+ return RestResponse.ok(byId, ApiConstants.RESULT_SUCCESS, "查询成功");
|
|
|
+ } else {
|
|
|
+ return RestResponse.ok(null, ApiConstants.RESULT_NO_DATA, "无数据");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|