Sfoglia il codice sorgente

优化-9

(cherry picked from commit 5f3857b8a2845cf2e362ef61d0587f27fc91af51)
MOKASZ\lw12420 2 anni fa
parent
commit
caf085f48c

+ 54 - 41
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/lbOut/HomePageOutController.java

@@ -3,23 +3,20 @@ package com.webflux.launchadmin.mysql.controller.lbOut;
 import com.webflux.launchadmin.mysql.controller.lbIn.request.HomePageItemRequest;
 import com.webflux.launchadmin.mysql.controller.lbOut.request.HomePageItemOutRequest;
 import com.webflux.launchadmin.mysql.controller.lbOut.resp.DataList;
+import com.webflux.launchadmin.mysql.entity.lb.HomePageTemp;
 import com.webflux.launchadmin.mysql.entity.lb.HomePageTempItem;
+import com.webflux.launchadmin.mysql.entity.lb.Plan;
 import com.webflux.launchadmin.mysql.repository.lb.HomePageTempItemRepository;
 import com.webflux.launchadmin.mysql.repository.lb.HomePageTempRepository;
-import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.RStatus;
 import jakarta.annotation.Resource;
-import org.springframework.data.domain.Sort;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
 import org.springframework.data.relational.core.query.Criteria;
 import org.springframework.data.relational.core.query.Query;
 import org.springframework.web.bind.annotation.*;
 import reactor.core.publisher.Mono;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -56,41 +53,49 @@ public class HomePageOutController {
      */
     @PostMapping("pageTempItem")
     public Mono<RStatus<DataList<HomePageTempItem>>> pageTempItem(@RequestBody HomePageItemOutRequest request)   {
-        Criteria criteria= Criteria.where("home_page_id").is(request.getHomePageId()) ;
-        Query query = Query.query(criteria);
-        Mono<DataList<HomePageTempItem>> map = template.select(query, HomePageTempItem.class).collectList().map(mp -> {
-            Map<String, List<HomePageTempItem>> collect = mp.stream().collect(Collectors.groupingBy(HomePageTempItem::itemType));
-            Integer bannerSize = request.getBannerSize();
-            Integer hotSize = request.getHotSize();
-            Integer recommendSize = request.getRecommendSize();
-            List<HomePageTempItem> bannerList = new ArrayList<>();
-            List<HomePageTempItem> hotList = new ArrayList<>();
-            List<HomePageTempItem> recommendList = new ArrayList<>();
-            collect.forEach((k, v) -> {
-                if ("b".equals(k)) {
-                    if (v.size() <= bannerSize || bannerSize==0) {
-                        bannerList.addAll(v);
-                    } else {
-                        bannerList.addAll(selectRandomData(v, bannerSize));
-                    }
-                } else if ("r".equals(k)) {
-                    if (v.size() <= hotSize|| hotSize==0) {
-                        hotList.addAll(v);
-                    } else {
-                        hotList.addAll(selectRandomData(v, hotSize));
-                    }
-                } else if ("t".equals(k)) {
-                    if (v.size() <= recommendSize|| recommendSize==0) {
-                        recommendList.addAll(v);
-                    } else {
-                        recommendList.addAll(selectRandomData(v, recommendSize));
-                    }
-                }
-            });
-            return new DataList(bannerList, hotList, recommendList);
-        });
-
-        return RStatus.successList(map);
+        String code = request.getCode();
+        Mono<Plan> code1 = template.selectOne(Query.query(Criteria.where("code").is(code)), Plan.class);
+        code1.switchIfEmpty(Mono.error(new Exception("code is match failed")));
+        Mono<DataList<HomePageTempItem>> dataListMono = code1.flatMap(plan ->
+                template.select(Query.query(Criteria.where("type_id").is(plan.groupTypeIdSc())), HomePageTemp.class)
+                        .collectList()
+                .flatMap(fm -> Mono.just(selectRandomDataOne(fm)))
+                .flatMap(homePageTemp -> template.select(Query.query(Criteria.where("home_page_id").is(homePageTemp.homePageId())), HomePageTempItem.class)
+                        .collectList()
+                        .map(mp -> {
+                    Map<String, List<HomePageTempItem>> collect = mp.stream().collect(Collectors.groupingBy(HomePageTempItem::itemType));
+                    Integer bannerSize = request.getBannerSize();
+                    Integer hotSize = request.getHotSize();
+                    Integer recommendSize = request.getRecommendSize();
+                    List<HomePageTempItem> bannerList = new ArrayList<>();
+                    List<HomePageTempItem> hotList = new ArrayList<>();
+                    List<HomePageTempItem> recommendList = new ArrayList<>();
+                    collect.forEach((k, v) -> {
+                        if ("b".equals(k.trim())) {
+                            if (v.size() <= bannerSize || bannerSize == 0) {
+                                bannerList.addAll(v);
+                            } else {
+                                bannerList.addAll(selectRandomData(v, bannerSize));
+                            }
+                        } else if ("r".equals(k.trim())) {
+                            if (v.size() <= hotSize || hotSize == 0) {
+                                hotList.addAll(v);
+                            } else {
+                                hotList.addAll(selectRandomData(v, hotSize));
+                            }
+                        } else if ("t".equals(k.trim())) {
+                            if (v.size() <= recommendSize || recommendSize == 0) {
+                                recommendList.addAll(v);
+                            } else {
+                                recommendList.addAll(selectRandomData(v, recommendSize));
+                            }
+                        }
+                    });
+                    return new DataList<HomePageTempItem>(bannerList, hotList, recommendList);
+                }).switchIfEmpty(Mono.error(new Exception(" match failed")))
+                ).switchIfEmpty(Mono.error(new Exception(" match failed"))))
+                .switchIfEmpty(Mono.error(new Exception(" code match failed")));
+        return RStatus.successList(dataListMono);
     }
 
     public static <T> List<T> selectRandomData(List<T> dataList, int count) {
@@ -108,4 +113,12 @@ public class HomePageOutController {
         return selectedData;
     }
 
+    public static <T> T selectRandomDataOne(List<T> dataList) {
+        List<T> selectedData = new ArrayList<>();
+        Random random = new Random();
+        int randomIndex = random.nextInt(dataList.size());
+        T data = dataList.get(randomIndex);
+        return data;
+    }
+
 }

+ 1 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/lbOut/request/HomePageItemOutRequest.java

@@ -26,6 +26,6 @@ public class HomePageItemOutRequest {
 
 
     @NotNull
-    private String homePageId;
+    private String code;
 
 }

+ 10 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/lb/Plan.java

@@ -0,0 +1,10 @@
+package com.webflux.launchadmin.mysql.entity.lb;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+@Table("plan")
+public record Plan(@Id Long id,
+                   Integer groupTypeIdSc,
+                   String code) {
+}