|
|
@@ -1,5 +1,6 @@
|
|
|
package com.webflux.launchadmin.mysql.controller.planNew;
|
|
|
|
|
|
+import com.webflux.launchadmin.context.UserContext;
|
|
|
import com.webflux.launchadmin.mysql.controller.planNew.req.*;
|
|
|
import com.webflux.launchadmin.mysql.controller.planNew.res.DataLists;
|
|
|
import com.webflux.launchadmin.mysql.controller.planNew.res.DataLists0;
|
|
|
@@ -8,9 +9,11 @@ import com.webflux.launchadmin.mysql.controller.planNew.res.H5ImageAndText;
|
|
|
import com.webflux.launchadmin.mysql.entity.planNew.*;
|
|
|
import com.webflux.launchcommon.returnObj.RStatus;
|
|
|
import jakarta.annotation.Resource;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
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.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import reactor.core.publisher.Flux;
|
|
|
import reactor.core.publisher.Mono;
|
|
|
@@ -18,6 +21,8 @@ import reactor.core.publisher.Mono;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.concurrent.atomic.LongAdder;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -31,10 +36,19 @@ import java.util.stream.Stream;
|
|
|
*/
|
|
|
@RestController
|
|
|
@RequestMapping("out/planNew")
|
|
|
+@Slf4j
|
|
|
public class PlanNewOutController {
|
|
|
@Resource
|
|
|
private R2dbcEntityTemplate template;
|
|
|
|
|
|
+ private static final ConcurrentHashMap<String,Integer> map = new ConcurrentHashMap<String,Integer>();
|
|
|
+ //清空用户Map数据
|
|
|
+ @Scheduled(cron="1 1 4 * * ?")
|
|
|
+ public void clearUserContextMap(){
|
|
|
+ log.info("清空计划-H5用户Map数据》》》》》》》》》》》》》》》》》》》》》》开始");
|
|
|
+ map.clear();
|
|
|
+ log.info("清空计划-H5用户Map数据》》》》》》》》》》》》》》》》》》》》》》 结束");
|
|
|
+ }
|
|
|
/**
|
|
|
* h5-通过code (第一个接口)
|
|
|
* @param request
|
|
|
@@ -47,6 +61,15 @@ public class PlanNewOutController {
|
|
|
Mono<List<Domain>> domain = code.flatMap(plan -> template.select(Query.query(Criteria.where("group_type").is(1)), Domain.class).collectList());
|
|
|
Mono<List<Image>> image = template.select(Query.query(Criteria.where("type").is(1)), Image.class).collectList();
|
|
|
Mono<List<Material>> text = template.select(Query.query(Criteria.where("type").is(4)), Material.class).collectList();
|
|
|
+ Mono<UserVisits> insert = template.insert(new UserVisits(null, request.getWx_user_id(), 1));
|
|
|
+ Mono<UserVisits> wx_user_id = template.selectOne(Query.query(Criteria.where("wx_user_id").is(request.getWx_user_id())), UserVisits.class)
|
|
|
+ .flatMap(f -> {
|
|
|
+ if (f.num() >= 4) {
|
|
|
+ return Mono.just(f);
|
|
|
+ }else {
|
|
|
+ return template.update(new UserVisits(f.id(), f.wxUserId(), f.num() + 1));
|
|
|
+ }
|
|
|
+ }).switchIfEmpty(insert);
|
|
|
Mono<List<H5ImageAndText>> arrayListMono = Mono.zip(code, domain, image, text).flatMap(f -> {
|
|
|
//H5ImageAndText
|
|
|
Integer integer = f.getT1().pageShow();//群数量
|
|
|
@@ -66,20 +89,23 @@ public class PlanNewOutController {
|
|
|
});
|
|
|
return Mono.just(h5ImageAndTexts);
|
|
|
});
|
|
|
-
|
|
|
Mono<Audio> listAudio = code.flatMap(plan -> template.selectOne(Query.query(Criteria.where("id").is(plan.listAudioId())), Audio.class));
|
|
|
Mono<Audio> retAudioId = code.flatMap(plan -> template.selectOne(Query.query(Criteria.where("id").is(plan.retAudioId())), Audio.class));
|
|
|
Mono<ReturnLoop> returnLoop = code.flatMap(plan -> template.selectOne(Query.query(Criteria.where("id").is(plan.returnLoopId())), ReturnLoop.class));
|
|
|
Mono<List<Ad>> adtop = template.select(Query.query(Criteria.where("type").is(1)), Ad.class).collectList();////广告类型1顶部2底部3返回4安卓,ios的返回
|
|
|
Mono<List<Ad>> bottom = template.select(Query.query(Criteria.where("type").is(2)), Ad.class).collectList();
|
|
|
-
|
|
|
- Mono<DataLists> dataListsMono = Mono.zip(code, listAudio, retAudioId, returnLoop, arrayListMono,adtop, bottom).flatMap(f -> {
|
|
|
+ Mono<DataLists> dataListsMono = Mono.zip(code, listAudio, retAudioId, returnLoop, arrayListMono,adtop, bottom,wx_user_id).flatMap(f -> {
|
|
|
DataLists dataLists = new DataLists();
|
|
|
dataLists.setPlanNew(f.getT1());
|
|
|
dataLists.setListAudio(f.getT2());
|
|
|
dataLists.setRetAudio(f.getT3());
|
|
|
dataLists.setReturnLoop(f.getT4());
|
|
|
dataLists.setImages(f.getT5());
|
|
|
+ if(f.getT8().num()>=4){
|
|
|
+ dataLists.setIsRet(1);
|
|
|
+ }else {
|
|
|
+ dataLists.setIsRet(-1);
|
|
|
+ }
|
|
|
if (f.getT1().topAdvBl()==1) {
|
|
|
List<Ad> ads = f.getT6().subList(0, f.getT1().topAdvNum());
|
|
|
dataLists.setTopAd(ads);
|
|
|
@@ -100,7 +126,14 @@ public class PlanNewOutController {
|
|
|
*/
|
|
|
@PostMapping("hftInfo")
|
|
|
public Mono<RStatus<DataLists0>> hftInfo(@RequestBody HftRequest request){
|
|
|
-
|
|
|
+ if(map.containsKey(request.getUnique())){
|
|
|
+ Integer integer = map.get(request.getUnique());
|
|
|
+ map.put(request.getUnique(),integer+1);
|
|
|
+ request.setUserVisits(integer+1);
|
|
|
+ }else {
|
|
|
+ map.put(request.getUnique(),1);
|
|
|
+ request.setUserVisits(1);
|
|
|
+ }
|
|
|
Mono<PlanNew> code = template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNew.class);
|
|
|
Mono<PosterTemplate> poster_template = code.flatMap(plan -> template.selectOne(Query.query(Criteria.where("poster_template_id")
|
|
|
.is(plan.posterTemplateId())), PosterTemplate.class));
|
|
|
@@ -113,13 +146,56 @@ public class PlanNewOutController {
|
|
|
DataLists0 dataLists0 = new DataLists0();
|
|
|
dataLists0.setPlanNew(f.getT1());
|
|
|
dataLists0.setPosterTemplate(f.getT2());
|
|
|
- dataLists0.setPoster(f.getT3());
|
|
|
+ List<Poster> t3 = f.getT3();
|
|
|
+ if (t3.size() <= request.getUserVisits()) {
|
|
|
+ dataLists0.setPoster(t3.getLast());
|
|
|
+ }else {
|
|
|
+ dataLists0.setPoster(t3.get(request.getUserVisits()));
|
|
|
+ }
|
|
|
Map<Integer, List<PlanNewBackgroupPoster>> collect = f.getT4().stream().collect(Collectors.groupingBy(PlanNewBackgroupPoster::qsOrFx));
|
|
|
- dataLists0.setFxSetting(collect.get(1));
|
|
|
- dataLists0.setQsSetting(collect.get(2));
|
|
|
+ List<PlanNewBackgroupPoster> fx = collect.get(1);
|
|
|
+ if (fx.size() <= request.getUserVisits()) {
|
|
|
+ dataLists0.setFxSetting(fx.getLast());
|
|
|
+ }else {
|
|
|
+ dataLists0.setFxSetting(fx.get(request.getUserVisits()));
|
|
|
+ }
|
|
|
+ List<PlanNewBackgroupPoster> qs = collect.get(2);
|
|
|
+ if (qs.size() <= request.getUserVisits()) {
|
|
|
+ dataLists0.setQsSetting(qs.getLast());
|
|
|
+ }else {
|
|
|
+ dataLists0.setQsSetting(qs.get(request.getUserVisits()));
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(request.getWx_user_id()) && !"".equals(request.getWx_user_id())) {
|
|
|
+ PlanNewBackgroupPoster qsSetting = dataLists0.getQsSetting();
|
|
|
+ dataLists0.setLimitTime(qsSetting.limitTime());
|
|
|
+ dataLists0.setLimitTimeRemark(qsSetting.limitTimeRemark());
|
|
|
+ }else {
|
|
|
+ PlanNewBackgroupPoster fxSetting = dataLists0.getFxSetting();
|
|
|
+ dataLists0.setLimitTime(fxSetting.limitTime());
|
|
|
+ dataLists0.setLimitTimeRemark(fxSetting.limitTimeRemark());
|
|
|
+ }
|
|
|
+ dataLists0.setLink(dataLists0.getPlanNew().link());
|
|
|
return Mono.just(dataLists0);
|
|
|
});
|
|
|
- return RStatus.successList(dataLists0Mono);
|
|
|
+ Mono<Audio> audioMono = dataLists0Mono.flatMap(f -> {
|
|
|
+ if (Objects.nonNull(request.getWx_user_id()) && !"".equals(request.getWx_user_id())) {
|
|
|
+ PlanNewBackgroupPoster qsSetting = f.getQsSetting();
|
|
|
+ if (Objects.nonNull(qsSetting.audioId()) && 0 != qsSetting.audioId()) {
|
|
|
+ return template.selectOne(Query.query(Criteria.where("id").is(qsSetting.audioId())), Audio.class);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ PlanNewBackgroupPoster fxSetting = f.getFxSetting();
|
|
|
+ if (Objects.nonNull(fxSetting.audioId()) && 0 != fxSetting.audioId()) {
|
|
|
+ return template.selectOne(Query.query(Criteria.where("id").is(fxSetting.audioId())), Audio.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return template.selectOne(Query.query(Criteria.where("id").is(f.getPlanNew().retAudioId())), Audio.class);
|
|
|
+ });
|
|
|
+ Mono<DataLists0> zip = Mono.zip(dataLists0Mono, audioMono, (a, b) -> {
|
|
|
+ a.setAudio(b);
|
|
|
+ return a;
|
|
|
+ });
|
|
|
+ return RStatus.successList(zip);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -206,8 +282,8 @@ public class PlanNewOutController {
|
|
|
.subscribe(dataLists::setPosterTemplate);
|
|
|
return dataLists;
|
|
|
}).map(dataLists -> {
|
|
|
- template.select(Query.query(Criteria.where("poster_template_id").is(dataLists.getPlanNew().posterTemplateId())), Poster.class).collectList()
|
|
|
- .subscribe(dataLists::setPoster);
|
|
|
+// template.select(Query.query(Criteria.where("poster_template_id").is(dataLists.getPlanNew().posterTemplateId())), Poster.class).collectList()
|
|
|
+// .subscribe(dataLists::setPoster);
|
|
|
return dataLists;
|
|
|
}).map(dataLists -> {
|
|
|
Long planNewId = dataLists.getPlanNew().planNewId();
|
|
|
@@ -216,9 +292,9 @@ public class PlanNewOutController {
|
|
|
.collectList().subscribe(lt->{//qsOrFx,//1:分享背景组 2:清水背景组
|
|
|
Map<Integer, List<PlanNewBackgroupPoster>> collect = lt.stream().collect(Collectors.groupingBy(PlanNewBackgroupPoster::qsOrFx));
|
|
|
List<PlanNewBackgroupPoster> planNewBackgroupPosters = collect.get(1);
|
|
|
- dataLists.setFxSetting(planNewBackgroupPosters);
|
|
|
+ // dataLists.setFxSetting(planNewBackgroupPosters);
|
|
|
List<PlanNewBackgroupPoster> planNewBackgroupPosters1 = collect.get(2);
|
|
|
- dataLists.setQsSetting(planNewBackgroupPosters1);
|
|
|
+ // dataLists.setQsSetting(planNewBackgroupPosters1);
|
|
|
});
|
|
|
return dataLists;
|
|
|
});
|