|
|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
}
|