Browse Source

新增按新闻类型(B2C,B2B等)过滤新闻

wangdy 7 years ago
parent
commit
7813c30f3c

+ 4 - 4
src/main/java/com/uas/cloud/mall/shop/news/api/NewsController.java

@@ -51,10 +51,10 @@ public class NewsController {
      * @return
      */
     @RequestMapping(value="/created" ,method = RequestMethod.GET, produces = "application/json")
-    public List<News> getNewsByCreated(@RequestParam(defaultValue = "1") int pagenumber , @RequestParam(defaultValue = "10") int pagesize) {
+    public List<News> getNewsByCreated(@RequestParam(defaultValue = "1") int pagenumber , @RequestParam(defaultValue = "10") int pagesize , @RequestParam(defaultValue = "B2C") String taxonomySlug) {
         ServiceInstance instance = client.getLocalServiceInstance();
         logger.info("/news, get, host:" + instance.getHost() + ", serviceId:" + instance.getServiceId() + "get news order by created time");
-        List<News> newsList = newsService.findBycreated(pagenumber,pagesize);
+        List<News> newsList = newsService.findBycreated(pagenumber,pagesize,taxonomySlug);
         return newsList;
     }
 
@@ -64,10 +64,10 @@ public class NewsController {
      * @return
      */
     @RequestMapping(value="/viewcount" ,method = RequestMethod.GET, produces = "application/json")
-    public List<News> getNewsByViewCount(@RequestParam(defaultValue = "1") int pagenumber , @RequestParam(defaultValue = "10") int pagesize) {
+    public List<News> getNewsByViewCount(@RequestParam(defaultValue = "1") int pagenumber , @RequestParam(defaultValue = "10") int pagesize , @RequestParam(defaultValue = "B2C") String taxonomySlug) {
         ServiceInstance instance = client.getLocalServiceInstance();
         logger.info("/news, get, host:" + instance.getHost() + ", serviceId:" + instance.getServiceId() + "get news order by viewcount");
-        return newsService.findByViewCount(pagenumber,pagesize);
+        return newsService.findByViewCount(pagenumber,pagesize,taxonomySlug);
     }
 
 }

+ 16 - 0
src/main/java/com/uas/cloud/mall/shop/news/data/NewsRepository.java

@@ -3,12 +3,28 @@ package com.uas.cloud.mall.shop.news.data;
 import com.uas.cloud.mall.shop.news.model.News;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.jpa.repository.QueryHints;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
+import javax.persistence.QueryHint;
+import java.util.List;
+
 /**
  * Created by dongbw on 201722517:56:50.
  */
 @Repository
 public interface NewsRepository extends JpaSpecificationExecutor<News>, JpaRepository<News, Long> {
 
+    /**
+     * 根据新闻类型筛选新闻id
+     * @param taskName
+     * @return
+     */
+    @Query(value = "select c.id from jpress_content c where c.id in (\n" +
+            "\tselect m.content_id from jpress_mapping m where m.taxonomy_id in (\n" +
+            "\t\tselect t.id from jpress_taxonomy t where t.slug= :name ))\n",nativeQuery = true)
+    @QueryHints({@QueryHint(name = "org.hibernate.cacheable", value ="true")})
+    List<Long> findNewsIdByTaxonomySlug (@Param("name")String taskName);
 }

+ 2 - 2
src/main/java/com/uas/cloud/mall/shop/news/service/NewsService.java

@@ -16,7 +16,7 @@ public interface NewsService {
      *
      * @return
      */
-    List<News> findBycreated(int pagenumber , int pagesize);
+    List<News> findBycreated(int pagenumber , int pagesize , String taxonomySlug);
 
 
     /**
@@ -24,5 +24,5 @@ public interface NewsService {
      *
      * @return
      */
-    List<News> findByViewCount(int pagenumber , int pagesize);
+    List<News> findByViewCount(int pagenumber , int pagesize , String taxonomySlug);
 }

+ 10 - 6
src/main/java/com/uas/cloud/mall/shop/news/service/impl/NewsServiceImpl.java

@@ -37,11 +37,13 @@ public class NewsServiceImpl implements NewsService {
     }
 
     @Override
-    public List<News> findBycreated(int pagenumber , int pagesize) {
+    public List<News> findBycreated(int pagenumber , int pagesize , String taxonomySlug) {
+        List<Long> idByTaxonomySlug = newsRepository.findNewsIdByTaxonomySlug(taxonomySlug);
         Pageable pageable = new PageRequest(pagenumber-1 ,pagesize, new Sort(Sort.Direction.DESC, "modified"));
         Page<News> page = newsRepository.findAll((root, query, builder) -> {
-            Predicate predicate = builder.equal(root.get("module"), "news");
-            query.where(predicate);
+            Predicate predicateId = root.get("id").in(idByTaxonomySlug);
+            Predicate predicateModule = builder.equal(root.get("module"), "news");
+            query.where(predicateId,predicateModule);
             return null;
         }, pageable);
         if (page != null && !CollectionUtils.isEmpty(page.getContent())) {
@@ -52,11 +54,13 @@ public class NewsServiceImpl implements NewsService {
 
 
     @Override
-    public List<News> findByViewCount(int pagenumber , int pagesize) {
+    public List<News> findByViewCount(int pagenumber , int pagesize , String taxonomySlug) {
+        List<Long> idByTaxonomySlug = newsRepository.findNewsIdByTaxonomySlug(taxonomySlug);
         Pageable pageable = new PageRequest(pagenumber-1 ,pagesize, new Sort(Sort.Direction.DESC, "viewCount"));
         Page<News> page = newsRepository.findAll((root, query, builder) -> {
-            Predicate predicate = builder.equal(root.get("module"), "news");
-            query.where(predicate);
+            Predicate predicateId = root.get("id").in(idByTaxonomySlug);
+            Predicate predicateModule = builder.equal(root.get("module"), "news");
+            query.where(predicateId,predicateModule);
             return null;
         }, pageable);
         if (page != null && !CollectionUtils.isEmpty(page.getContent())) {

+ 24 - 0
src/test/java/TestNews.java

@@ -0,0 +1,24 @@
+import com.uas.cloud.mall.shop.news.data.NewsRepository;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+/**
+ * Created by wangdy on 2017/6/20.
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootApplication
+public class TestNews {
+
+    @Autowired
+    private NewsRepository newsRepository;
+
+    @Test
+    public void test(){
+        //Long a = newsRepository.findNewsIdByTaxonomySlug("B2C");
+        System.out.println("a");
+    }
+
+}