Browse Source

新闻公告功能优化,代码优化

wanghaicheng 5 years ago
parent
commit
6e5a9ce2b4

+ 13 - 9
lift-quan-service/src/main/java/cn/com/ty/lift/quan/news/controller/QuanNewsController.java

@@ -4,8 +4,6 @@ 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.service.impl.QuanNewsServiceImpl;
 import cn.com.xwy.boot.web.dto.RestResponse;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
@@ -46,16 +44,16 @@ public class QuanNewsController {
         return quanNewsService.news(quanNews);
     }
 
+
     /**
-     * 根据id获取新闻
+     * 获取新闻
      *
-     * @param quanNews [新闻id]
-     * @return cn.com.xwy.boot.web.dto.RestResponse
-     * @since 2019/12/2 15:48
+     * @param quanNews 新闻id,用户id
+     * @return 新闻信息
      */
     @PostMapping
-    public RestResponse news(@RequestBody QuanNewsReq quanNews) {
-        return quanNewsService.getQuanNews(quanNews);
+    public RestResponse appNews(@RequestBody QuanNewsReq quanNews) {
+        return quanNewsService.getNews(quanNews);
     }
 
     /**
@@ -67,6 +65,9 @@ public class QuanNewsController {
      */
     @PostMapping("/add")
     public RestResponse add(@RequestBody QuanNews quanNews) {
+        if (!quanNews.getIsTop()) {
+            quanNews.setTopSerial(0);
+        }
         return RestResponse.success(quanNewsService.save(quanNews));
     }
 
@@ -77,8 +78,11 @@ public class QuanNewsController {
      * @return org.springframework.http.ResponseEntity
      * @since 2019/12/2 15:49
      */
-    @PostMapping("/update")
+    @PostMapping("/modify")
     public RestResponse updateNews(@RequestBody QuanNews quanNews) {
+        if (!quanNews.getIsTop()) {
+            quanNews.setTopSerial(0);
+        }
         return RestResponse.success(quanNewsService.updateById(quanNews));
     }
 

+ 23 - 0
lift-quan-service/src/main/java/cn/com/ty/lift/quan/news/dao/entity/QuanNews.java

@@ -31,6 +31,12 @@ public class QuanNews implements Serializable {
     @TableId(value = "id", type = IdType.ID_WORKER)
     private Long id;
 
+    /**
+     * 是否置顶
+     */
+    @TableField("is_top")
+    private Boolean isTop;
+
     /**
      * 置顶排序 0不置顶 非0就是置顶(按照数字大小排序)
      */
@@ -73,4 +79,21 @@ public class QuanNews implements Serializable {
     @TableField("release_id")
     private Long releaseId;
 
+    /**
+     * 浏览次数
+     */
+    @TableField(exist = false)
+    private Long lookNum;
+
+    /**
+     * 喜爱次数
+     */
+    @TableField(exist = false)
+    private Long likeNum;
+
+    /**
+     * 是否喜爱
+     */
+    @TableField(exist = false)
+    private Boolean isLike;
 }

+ 0 - 6
lift-quan-service/src/main/java/cn/com/ty/lift/quan/news/dao/entity/model/QuanNewsReq.java

@@ -44,10 +44,4 @@ public class QuanNewsReq extends QuanNews {
      * 点赞的用户id
      */
     private Long userId;
-
-    /**
-     * 新增时标识是否为置顶新闻
-     */
-    private Integer isTop;
-
 }

+ 34 - 112
lift-quan-service/src/main/java/cn/com/ty/lift/quan/news/service/impl/QuanNewsServiceImpl.java

@@ -8,6 +8,7 @@ import cn.com.ty.lift.quan.news.service.QuanNewsService;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -44,8 +45,7 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
      */
     public RestResponse appNews(QuanNewsReq request) {
         Page<QuanNews> page = new Page<>(request.getPageNum(), request.getPageSize());
-        IPage<Map<String, Object>> news = this.pageMaps(page, new QueryWrapper<QuanNews>()
-                .select("id", "title", "content", "top_serial topSerial", "video_url videoUrl", "release_id releaseId", "release_user releaseUser", "release_date releaseDate")
+        IPage<QuanNews> news = this.page(page, Wrappers.<QuanNews>query()
                 .like(null != request.getTitle(), "title", request.getTitle())
                 .eq("top_serial", "0")
                 .orderByDesc("release_date"));
@@ -57,8 +57,7 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
         newsAddLookAndLike(news.getRecords(), lookTimes, likeUsers);
         result.put("news", news);
         if (request.getHaveTops() == 1) {
-            List<Map<String, Object>> topNews = this.listMaps(new QueryWrapper<QuanNews>()
-                    .select("id", "title", "content", "top_serial topSerial", "video_url videoUrl", "release_id releaseId", "release_user releaseUser", "release_date releaseDate")
+            List<QuanNews> topNews = this.list(Wrappers.<QuanNews>query()
                     .ne("top_serial", "0")
                     .orderByAsc("top_serial"));
             //把点赞的用户数量和浏览量整入新闻字段中
@@ -70,8 +69,9 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
 
     public RestResponse news(QuanNewsReq request) {
         Page<QuanNews> page = new Page<>(request.getPageNum(), request.getPageSize());
-        IPage<Map<String, Object>> news = this.pageMaps(page, new QueryWrapper<QuanNews>()
-                .select("id", "title", "content", "top_serial topSerial", "video_url videoUrl", "release_id releaseId", "release_user releaseUser", "release_date releaseDate")
+        IPage<QuanNews> news = this.page(page, Wrappers.<QuanNews>query()
+                .orderByDesc("is_top")
+                .orderByAsc("top_serial")
                 .orderByDesc("release_date"));
         //全部新闻的浏览量列表
         Map<Object, Object> lookTimes = redisTemplate.boundHashOps("system-quanNews-look-time").entries();
@@ -81,123 +81,44 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
         return RestResponse.success(news);
     }
 
-    /**
-     * 将新闻置顶
-     *
-     * @since 2019/12/3 11:23
-     */
-    public RestResponse top(Long id, Integer type) {
-        QuanNews byId = this.getById(id);
-        if (byId == null) {
-            return RestResponse.success();
-        }
-        //1置顶 0取消置顶
-        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) {
-                    if (top.getTopSerial() < serial) {
-                        top.setTopSerial(top.getTopSerial() + 1);
-                    }
-                }
-                byId.setTopSerial(1);
-                //更新排序
-                this.updateBatchById(tops);
-                this.updateById(byId);
-            } else {
-                //如果新闻不是置顶新闻
-                //获取置顶新闻
-                List<QuanNews> news = this.list(new QueryWrapper<QuanNews>().select("id", "top_serial").ne("top_serial", 0));
-                if (!news.isEmpty()) {
-                    //如果有置顶新闻
-                    news.forEach(n -> {
-                        n.setTopSerial(n.getTopSerial() + 1);
-                    });
-                    this.updateBatchById(news, 100);
-                }
-                byId.setTopSerial(1);
-                //更新置顶新闻列表,新闻
-                if (this.updateById(byId)) {
-                    return RestResponse.success(null, "置顶成功");
-                } else {
-                    return RestResponse.fail();
-                }
-            }
-            return RestResponse.success(null, "置顶成功");
-        }
-        //1置顶 0取消置顶
-        if (type == 0) {
-            if (byId.getTopSerial() == 0) {
-                //如果不是置顶新闻
-                return RestResponse.success(null, "不是置顶新闻");
-            }
-            List<QuanNews> tops = this.list(new QueryWrapper<QuanNews>().select("id", "top_serial").ne("top_serial", 0).ne("id", id));
-            //如果置顶新闻为0个
-            if (tops.isEmpty()) {
-                byId.setTopSerial(0);
-                if (this.updateById(byId)) {
-                    return RestResponse.success(null, "取消置顶成功");
-                } else {
-                    return RestResponse.fail();
-                }
-            }
-            //比这个新闻排序大的都 序号-1
-            tops.forEach(top -> {
-                if (top.getTopSerial() > byId.getTopSerial()) {
-                    top.setTopSerial(top.getTopSerial() - 1);
-                }
-            });
-            byId.setTopSerial(0);
-            if (this.updateById(byId) && this.updateBatchById(tops)) {
-                return RestResponse.success(null, "取消置顶成功");
-            } else {
-                return RestResponse.fail();
-            }
-        }
-        return RestResponse.failParam();
-    }
-
     //把点赞的用户数量和浏览量整入新闻字段中
-    void newsAddLookAndLike(List<Map<String, Object>> records, Map<Object, Object> lookTimes, Map<Object, Object> likeUsers) {
-        for (Map<String, Object> record : records) {
-            Object id = record.get("id");
+    void newsAddLookAndLike(List<QuanNews> records, Map<Object, Object> lookTimes, Map<Object, Object> likeUsers) {
+        for (QuanNews quanNews : records) {
+            Long id = quanNews.getId();
             //如果没有浏览量
             if (lookTimes.isEmpty()) {
-                record.put("lookNum", 0);
+                quanNews.setLookNum(0L);
             } else {
                 //遍历lookTimes,查看对应id的新闻浏览量
                 for (Map.Entry<Object, Object> entry : lookTimes.entrySet()) {
                     Object key = entry.getKey();
-                    Object value = entry.getValue();
+                    Long value = Long.valueOf((Integer) entry.getValue());
                     if (key.equals(id.toString())) {
-                        record.put("lookNum", value);
+                        quanNews.setLookNum(value);
                         break;
                     }
-                    record.put("lookNum", 0);
+                    quanNews.setLookNum(0L);
                 }
             }
             //如果没有用户喜爱
             if (likeUsers.isEmpty()) {
-                record.put("likeNum", 0);
+                quanNews.setLikeNum(0L);
             } else {
                 //遍历likeUsers,查看对应id的新闻的点赞量
                 for (Map.Entry<Object, Object> entry : likeUsers.entrySet()) {
                     String k = entry.getKey().toString();
                     ArrayList v = (ArrayList) entry.getValue();
                     if (k.equals(id.toString())) {
-                        record.put("likeNum", v.size());
+                        quanNews.setLikeNum((long) v.size());
                         break;
                     }
-                    record.put("likeNum", 0);
+                    quanNews.setLikeNum(0L);
                 }
             }
         }
     }
 
-
+    @SuppressWarnings({"unchecked", "rawtypes"})
     public RestResponse like(QuanNewsReq request) {
         String userId = request.getUserId().toString();
         String id = request.getId().toString();
@@ -222,24 +143,25 @@ public class QuanNewsServiceImpl extends ServiceImpl<QuanNewsMapper, QuanNews> i
     }
 
     //获取一条新闻
-    public RestResponse getQuanNews(QuanNewsReq request) {
-        Map<String, Object> byId = this.getMap(new QueryWrapper<QuanNews>().eq("id", request.getId()));
-        if (null != byId) {
-            String id = byId.get("id").toString();
-            Long lookNum = redisTemplate.boundHashOps("system-quanNews-look-time").increment(id, 1);
-            int isLike;
-            ArrayList users = (ArrayList) redisTemplate.opsForHash().get("system-quanNews-like-users", id);
-            if (users != null && users.contains(request.getUserId().toString())) {
-                isLike = 1;
-            } else {
-                isLike = 0;
-            }
-            byId.put("lookNum", lookNum);
-            byId.put("isLike", isLike);
-            return RestResponse.success(byId, "成功");
-        } else {
+    @SuppressWarnings("rawtypes")
+    public RestResponse getNews(QuanNewsReq quanNewsReq) {
+        QuanNews byId = this.getById(quanNewsReq);
+        if (null == byId) {
             return RestResponse.success();
         }
+        String id = byId.getId().toString();
+        Long lookNum = redisTemplate
+                .boundHashOps("system-quanNews-look-time").increment(id, 1);
+        ArrayList users = (ArrayList) redisTemplate
+                .opsForHash().get("system-quanNews-like-users", id);
+        Long userId = quanNewsReq.getUserId();
+        boolean isLike = false;
+        if (null != userId) {
+            isLike = users != null && users.contains(userId.toString());
+        }
+        byId.setLookNum(lookNum);
+        byId.setIsLike(isLike);
+        return RestResponse.success(byId, "成功");
     }
 
     public RestResponse areas() {