MOKASZ\lw12420 hai 1 ano
pai
achega
11a5d754ff

+ 21 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/ArticleOutController.java

@@ -37,6 +37,11 @@ public class ArticleOutController {
     public Mono<Boolean> init(){
        return articleServiceInterface.ArticleData();
     }
+    @GetMapping("refresh")
+    public Mono<Boolean> refresh(){
+        return articleServiceInterface.refresh();
+    }
+
     /**
      * 分类列表查询
      * @return
@@ -143,6 +148,22 @@ public class ArticleOutController {
     }
 
     /**
+     * 随机3页
+     * @return {@link Mono}<{@link RStatus}<{@link ArticleOutRes}>>
+     */
+    @GetMapping("random3Page")
+    public Mono<RStatus<List<ArticleOutRes>>> random3Page(){
+        return articleServiceInterface.random3Page();
+    }
+    /**
+     * 随机6页
+     * @return {@link Mono}<{@link RStatus}<{@link ArticleOutRes}>>
+     */
+    @GetMapping("random6Page")
+    public Mono<RStatus<List<ArticleOutRes>>> random6Page(){
+        return articleServiceInterface.random6Page();
+    }
+    /**
      * 通过 userId 和文章 id 获取观看视频状态
      * @param userId unique
      * @param id 相册id

+ 59 - 14
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/article/ArticleSercieImp.java

@@ -16,6 +16,7 @@ import com.webflux.launchcommon.returnObj.RStatus;
 import com.webflux.launchcommon.utils.R;
 import io.r2dbc.spi.Parameter;
 import jakarta.annotation.Resource;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
@@ -28,10 +29,7 @@ import reactor.core.publisher.Mono;
 
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -45,13 +43,14 @@ public class ArticleSercieImp implements ArticleServiceInterface {
 
 
    // @Scheduled(fixedDelay = 160000)
+    //@Scheduled(cron = "0 0 10 * * ?")
     public Mono<Boolean> refresh(){
-        DateTime yesterday = DateUtil.yesterday();
-        String format = DateUtil.format(yesterday, "yyyy-MM-dd");
-        Query query = Query.query(Criteria.where("status").is(1)
-                .and("crawler_collection_time").greaterThan(format+" 00:00:01")
-                .and("crawler_collection_time").lessThan(format+" 23:59:59")
-        );
+      //  DateTime yesterday = DateUtil.yesterday();
+        String format = DateUtil.format(new Date(), "yyyy-MM-dd");
+        Criteria criteria = Criteria.where("status").is(1)
+                .and("crawler_collection_time").greaterThan(format + " 00:00:01")
+                .and("crawler_collection_time").lessThan(format + " 23:59:59");
+        Query query = Query.query(criteria);
         int size=50;
         return template.count(query, ArticleData.class).flatMap(fm -> {
             long page = fm % 50L;
@@ -62,7 +61,7 @@ public class ArticleSercieImp implements ArticleServiceInterface {
             int i = 0;
             while (i < page0) {
                 // 循环体
-                refreshInitialization(i, size).subscribe();
+                refreshInitialization(i, size,criteria).subscribe();
                 i++;
             }
             return Mono.just(true);
@@ -84,7 +83,7 @@ public class ArticleSercieImp implements ArticleServiceInterface {
                     int i = 0;
                     while (i < page0) {
                         // 循环体
-                        refreshInitialization(i, size).subscribe();
+                        refreshInitialization(i, size,Criteria.empty()).subscribe();
                         try {
                             Thread.sleep(10000L);
                         } catch (Exception e) {
@@ -99,9 +98,9 @@ public class ArticleSercieImp implements ArticleServiceInterface {
             }
         });
     }
-    public Mono<Boolean> refreshInitialization(Integer page ,Integer size){
+    public Mono<Boolean> refreshInitialization(Integer page ,Integer size,Criteria criteria){
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        return getArticle(page, size,Criteria.empty())
+        return getArticle(page, size,criteria)
                 .switchIfEmpty(Mono.just(List.of()))
                 .flatMap(articleData -> {
                     if (articleData.isEmpty()) {
@@ -750,4 +749,50 @@ public class ArticleSercieImp implements ArticleServiceInterface {
         return RStatus.successList(pagedMono);
     }
 
+    @Override
+    public Mono<RStatus<List<ArticleOutRes>>> random3Page() {
+        return getSizeArticle( 3);
+    }
+
+    @NotNull
+    private Mono<RStatus<List<ArticleOutRes>>> getSizeArticle(Integer size) {
+        StringBuilder startSql = new StringBuilder();
+        startSql.append("SELECT id,front_cover,title,date_time_str FROM article WHERE deleted_at IS  NULL ");
+        startSql.append( "AND date_time_str ='");
+        String format = DateUtil.format(new Date(), "yyyy-MM-dd");
+        startSql.append( format);
+        startSql.append( "'");
+        Mono<List<ArticleOutRes>> listMono1 = template.getDatabaseClient().sql(startSql.toString()).map((row, rowMetadata) -> {
+            ArticleOutRes articleRes = new ArticleOutRes();
+            articleRes.setId(row.get("id", Long.class));
+            articleRes.setTitle(row.get("title", String.class));
+            articleRes.setDateTimeStr(row.get("date_time_str", String.class));
+            articleRes.setFrontCover(row.get("front_cover", String.class));
+            return articleRes;
+        }).all().collectList().flatMap(articleOutRes -> {
+            ArrayList<ArticleOutRes> articleOutRes1 = new ArrayList<>();
+            if (!articleOutRes.isEmpty() &&articleOutRes.size()>size) {
+                for (int i =0 ;i<size;i++){
+                    List<ArticleOutRes> collect = articleOutRes.stream()
+                            .filter(articleOutRes2 ->
+                                    articleOutRes1.stream().noneMatch(articleOutRes3 -> articleOutRes3.getId().equals(articleOutRes2.getId()))).collect(Collectors.toList());
+                    int i1 = RandomUtil.randomInt(0, collect.size());
+                    ArticleOutRes articleOutRes2 = collect.get(i1);
+                    articleOutRes1.add(articleOutRes2);
+                }
+
+            }else{
+                articleOutRes1.addAll(articleOutRes);
+            }
+            return Mono.just(articleOutRes1);
+
+        });
+        return RStatus.successList(listMono1);
+    }
+
+    @Override
+    public Mono<RStatus<List<ArticleOutRes>>> random6Page() {
+        return getSizeArticle(6);
+    }
+
 }

+ 5 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/article/ArticleServiceInterface.java

@@ -12,7 +12,7 @@ import reactor.core.publisher.Mono;
 import java.util.List;
 
 public interface ArticleServiceInterface {
-
+     Mono<Boolean> refresh();
     Mono<Boolean> ArticleData();
 
     Mono<RStatus<Paged<Classification>>> getClassificationList();
@@ -62,4 +62,8 @@ public interface ArticleServiceInterface {
     Mono<RStatus<ArticleOutRes>> randomNextPage();
 
     Mono<RStatus<Paged<ArticleOutRes>>> byLableNameGetArticle(String name, Integer page, Integer size);
+
+    Mono<RStatus<List<ArticleOutRes>>> random3Page();
+
+    Mono<RStatus<List<ArticleOutRes>>> random6Page();
 }