Просмотр исходного кода

album 假视频 0.01

(cherry picked from commit 97831573dcf80f27ed2e98dec4162f047165053a)
MOKASZ\lw12420 1 год назад
Родитель
Сommit
bed668442a
12 измененных файлов с 373 добавлено и 79 удалено
  1. 314 20
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewCommonOutController.java
  2. 1 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/req/OutDomainRequest.java
  3. 6 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/req/PlanNewCommonMaterialReq.java
  4. 5 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/res/PlanNewCommonMaterialRes.java
  5. 3 3
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/AlbumController.java
  6. 7 2
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/planNew/Ad.java
  7. 9 1
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/otherServices/OtherServicesImpl.java
  8. 1 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/otherServices/OtherServicesInterface.java
  9. 24 49
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/MaterialManagementImpl.java
  10. 1 2
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/MaterialManagementInterface.java
  11. 1 1
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/AlbumItemService.java
  12. 1 1
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/AlbumService.java

+ 314 - 20
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewCommonOutController.java

@@ -10,18 +10,22 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.plumelog.core.util.LogExceptionStackTrace;
 import com.webflux.launchadmin.global.BaseException;
+import com.webflux.launchadmin.mysql.controller.otherServices.res.ByCodeGetImportDomainRes;
 import com.webflux.launchadmin.mysql.controller.planNew.req.*;
 import com.webflux.launchadmin.mysql.controller.planNew.res.*;
+import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.album.AlbumReq;
 import com.webflux.launchadmin.mysql.controller.takeawayController.res.TakeawayH5Data;
 import com.webflux.launchadmin.mysql.entity.groupUsers.GroupUsers;
 import com.webflux.launchadmin.mysql.entity.listening.ListeningPlanNew;
 import com.webflux.launchadmin.mysql.entity.planNew.*;
+import com.webflux.launchadmin.mysql.entity.sourceMaterial.Album;
 import com.webflux.launchadmin.mysql.service.planNew.PlanServiceInterface;
 import com.webflux.launchadmin.mysql.service.planNew.goGenerate.GoGenerateService;
 import com.webflux.launchadmin.mysql.service.planNew.ipAnalyze.IpAnalyzeServiceInterface;
 import com.webflux.launchadmin.mysql.service.planNew.structure.GoRequest;
 import com.webflux.launchadmin.mysql.service.planNew.structure.Item;
 import com.webflux.launchadmin.mysql.service.readBookPlan.ReadBookPlanServicesInterface;
+import com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement.MaterialManagementInterface;
 import com.webflux.launchadmin.mysql.service.takeaway.TakeawayServicesInterface;
 import com.webflux.launchcommon.returnObj.RStatus;
 import com.webflux.launchcommon.utils.StringUtils;
@@ -36,6 +40,7 @@ import org.springframework.data.relational.core.query.Query;
 
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 import java.io.ByteArrayOutputStream;
@@ -45,8 +50,11 @@ import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
+import java.util.stream.Stream;
 import java.util.zip.GZIPOutputStream;
 
+import static reactor.util.concurrent.Queues.get;
+
 /**
  * 通用计划-H5
  *
@@ -70,7 +78,8 @@ public class PlanNewCommonOutController {
 
     @Resource
     private PlanServiceInterface planServiceInterface;
-
+    @Resource
+    private MaterialManagementInterface sourceMaterialInterface;
 
 
 
@@ -482,7 +491,7 @@ public class PlanNewCommonOutController {
         } else if (2 == request.getTypePlan()) {
             // 听书裂变
             return this.getListeningPlan(request);
-        } else if (3 == request.getTypePlan() ||6 == request.getTypePlan() ) {
+        } else if (3 == request.getTypePlan() ||6 == request.getTypePlan() ||7 == request.getTypePlan()) {
             // 交友裂变
             return this.getFriendPlan(request);
         } else if (4 == request.getTypePlan()) {
@@ -754,19 +763,37 @@ public class PlanNewCommonOutController {
             }
             Mono<List<Ad>> adtop ;
             if (Objects.nonNull(request.getTopAdvBl()) && request.getTopAdvBl()) {
-                 adtop = template.select(Query.query(Criteria.where("type").is(1)
-                        .and("deleted_at").isNull()).columns("id,name,type,image,show_beg_at,show_end_at,link".split(",")), Ad.class)
-                        .onErrorResume(throwable -> Mono.error(new BaseException(throwable.getMessage()+"4")))
-                        .collectList();////广告类型1顶部2底部3返回4安卓,ios的返回
+                if(6==plan.type()){
+                    adtop = template.select(Query.query(Criteria.where("type").is(1).and("group_type_id").is(plan.groupId())
+                            .and("deleted_at").isNull()).columns("id,name,type,image,show_beg_at,show_end_at,link".split(",")), Ad.class)
+                            .switchIfEmpty(Mono.error(new BaseException(StrUtil.format("通过计划营销分类:{};查询顶部广告返回结果为空",plan.groupId()))))
+                            .onErrorResume(throwable -> Mono.error(new BaseException(throwable.getMessage()+"4")))
+                            .collectList();////广告类型1顶部2底部3返回4安卓,ios的返回
+                }else {
+                    adtop = template.select(Query.query(Criteria.where("type").is(1)
+                            .and("deleted_at").isNull()).columns("id,name,type,image,show_beg_at,show_end_at,link".split(",")), Ad.class)
+                            .onErrorResume(throwable -> Mono.error(new BaseException(throwable.getMessage()+"4")))
+                            .collectList();////广告类型1顶部2底部3返回4安卓,ios的返回
+                }
+
             }else {
                 adtop=Mono.just(List.of());
             }
             Mono<List<Ad>> adBottom ;
             if (Objects.nonNull(request.getBottomAdvBl()) && request.getBottomAdvBl()) {
-                adBottom = template.select(Query.query(Criteria.where("type").is(2)
-                        .and("deleted_at").isNull()).columns("id,name,type,image,show_beg_at,show_end_at,link".split(",")), Ad.class)
-                        .onErrorResume(throwable -> Mono.error(new BaseException(throwable.getMessage()+"4")))
-                        .collectList();////广告类型1顶部2底部3返回4安卓,ios的返回
+                if (6 == plan.type()) {
+                    adBottom = template.select(Query.query(Criteria.where("type").is(2).and("group_type_id").is(plan.groupId())
+                            .and("deleted_at").isNull()).columns("id,name,type,image,show_beg_at,show_end_at,link".split(",")), Ad.class)
+                            .switchIfEmpty(Mono.error(new BaseException(StrUtil.format("通过计划营销分类:{};查询底部广告返回结果为空",plan.groupId()))))
+                            .onErrorResume(throwable -> Mono.error(new BaseException(throwable.getMessage()+"4")))
+                            .collectList();////广告类型1顶部2底部3返回4安卓,ios的返回
+                }else {
+                    adBottom = template.select(Query.query(Criteria.where("type").is(2)
+                            .and("deleted_at").isNull()).columns("id,name,type,image,show_beg_at,show_end_at,link".split(",")), Ad.class)
+                            .onErrorResume(throwable -> Mono.error(new BaseException(throwable.getMessage()+"4")))
+                            .collectList();////广告类型1顶部2底部3返回4安卓,ios的返回
+                }
+
             }else {
                 adBottom=Mono.just(List.of());
             }
@@ -780,22 +807,88 @@ public class PlanNewCommonOutController {
             }else {
                 imageMono=Mono.just(List.of());
             }
-
-            return Mono.zip(groupAudio, retAudio, returnLoop, backgroupImageItemMono, takeaway,adtop,adBottom,imageMono).flatMap(f -> {
+            Mono<Ad> adTop1 = adtop.flatMap(t6 -> {
+                Mono<Ad> adMono = Mono.just(new Ad(null, null, null, null, null
+                        , null, null, null, null, null, null, null, null, null));
+                if (!t6.isEmpty()) {
+                    Ad ad = t6.get(RandomUtil.randomInt(0, t6.size()));
+                    if(6==plan.type() && Objects.nonNull(request.getTopAdvBl()) && request.getTopAdvBl()){
+                        if (Objects.nonNull(ad.redirectType()) && ad.redirectType() == 1 && Objects.nonNull(ad.planId())&& Objects.nonNull(ad.planType())) {
+                            Mono<String> byCodeGetImportDomainResMono = getByCodeGetImportDomainResMono(ad.planId(), ad.planType()).switchIfEmpty(Mono.just(""));
+                            adMono = Mono.zip(Mono.just(ad), byCodeGetImportDomainResMono).flatMap(tuple -> {
+                                Ad t1 = tuple.getT1();
+                                String t2 = tuple.getT2();
+                                Ad ad1 = new Ad(t1.id(), t1.name(), null, null, null
+                                        , t1.type(), t1.image(), t1.showBegAt(), t1.showBegAt(), t2, t1.redirectType(),
+                                        t1.planType(), t1.planId(), t1.groupTypeId());
+                                return Mono.just(ad1);
+                            });
+                        } else {
+                            adMono=Mono.just(ad);
+                        }
+                    }else {
+                        adMono=Mono.just(ad);
+                    }
+                }
+                return adMono;
+            });
+            Mono<Ad> adBottom2 = adBottom.flatMap(t6 -> {
+                Mono<Ad> adMono = Mono.just(new Ad(null, null, null, null, null
+                        , null, null, null, null, null, null, null, null, null));
+                if (!t6.isEmpty()) {
+                    Ad ad = t6.get(RandomUtil.randomInt(0, t6.size()));
+                    if(6==plan.type() && Objects.nonNull(request.getTopAdvBl()) && request.getTopAdvBl()){
+                        if (Objects.nonNull(ad.redirectType()) && ad.redirectType() == 1 && Objects.nonNull(ad.planId())&& Objects.nonNull(ad.planType())) {
+                            Mono<String> byCodeGetImportDomainResMono = getByCodeGetImportDomainResMono(ad.planId(), ad.planType()).switchIfEmpty(Mono.just(""));
+                            adMono = Mono.zip(Mono.just(ad), byCodeGetImportDomainResMono).flatMap(tuple -> {
+                                Ad t1 = tuple.getT1();
+                                String t2 = tuple.getT2();
+                                Ad ad1 = new Ad(t1.id(), t1.name(), null, null, null
+                                        , t1.type(), t1.image(), t1.showBegAt(), t1.showBegAt(), t2, t1.redirectType(),
+                                        t1.planType(), t1.planId(), t1.groupTypeId());
+                                return Mono.just(ad1);
+                            });
+                        } else {
+                            adMono=Mono.just(ad);
+                        }
+                    }else {
+                        adMono=Mono.just(ad);
+                    }
+                }
+                return adMono;
+            });
+            Mono<List<AlbumReq>> albumList = Mono.just(List.of());
+            if (Objects.nonNull(request.getAlbumNum()) && 0 != request.getAlbumNum()) {
+                Mono<List<Long>> album_id = template.select(Query.query(Criteria.empty()).columns("album_id"), Album.class).flatMap(album -> Mono.just(album.albumId())).collectList();
+                albumList = album_id.flatMap(lists -> {
+                    if (lists.isEmpty() || lists.size() < request.getAlbumNum()) {
+                        return Mono.error(new BaseException(StrUtil.format("相册素材数:{};计划要求素材数:{} 不匹配", lists.size(), request.getAlbumNum())));
+                    }
+                    List<Long> longs = new ArrayList<>();
+                    for (int i = 0; i < request.getAlbumNum(); i++) {
+                        List<Long> collect = lists.stream().filter(f -> !longs.contains(f)).collect(Collectors.toList());
+                        Long aLong = collect.get(RandomUtil.randomInt(0, lists.size()));
+                        longs.add(aLong);
+                    }
+                    Mono<List<AlbumReq>> listMono = Flux.fromIterable(longs).flatMap(id -> {
+                        return sourceMaterialInterface.infoAlbum(id);
+                    }).collectList();
+                    return listMono;
+                });
+            }
+            Mono<PlanNewCommonMaterialRes> planNewCommonMaterialResMono = Mono.zip(groupAudio, retAudio, returnLoop, backgroupImageItemMono, takeaway, adTop1, adBottom2, imageMono).flatMap(f -> {
                 PlanNewCommonMaterialRes materialRes = new PlanNewCommonMaterialRes();
                 materialRes.setGroupAudio(f.getT1());
                 materialRes.setRetAudio(f.getT2());
                 materialRes.setReturnLoop(f.getT3());
                 materialRes.setTakeawayH5Data(f.getT5());
-                List<Ad> t6 = f.getT6();
-                if (!t6.isEmpty()) {
-                    Ad ad = t6.get(RandomUtil.randomInt(0, t6.size()));
-                    materialRes.setTopAdv(ad);
+                Ad t6 = f.getT6();
+                if (Objects.nonNull(t6.id())) {
+                    materialRes.setTopAdv(t6);
                 }
-                List<Ad> t7 = f.getT7();
-                if (!t7.isEmpty()) {
-                    Ad ad = t7.get(RandomUtil.randomInt(0, t7.size()));
-                    materialRes.setBottomAdv(ad);
+                Ad t7 = f.getT7();
+                if (Objects.nonNull(t7.id())) {
+                    materialRes.setBottomAdv(t7);
                 }
                 List<Image> t8 = f.getT8();
                 if (!t8.isEmpty()) {
@@ -807,6 +900,14 @@ public class PlanNewCommonOutController {
                 }
                 return Mono.just(materialRes);
             });
+            return Mono.zip(planNewCommonMaterialResMono,albumList).flatMap(tuple->{
+                List<AlbumReq> t2 = tuple.getT2();
+                PlanNewCommonMaterialRes t1 = tuple.getT1();
+                if(!t2.isEmpty()){
+                    t1.setAlbumList(t2);
+                }
+                return Mono.just(t1);
+            });
         });
         // GZIP压缩
         // Mono<byte[]> res = materialResMono.flatMap(f -> Mono.just(Objects.requireNonNull(this.compressData(JSONUtil.toJsonStr(f)))));
@@ -1164,4 +1265,197 @@ public class PlanNewCommonOutController {
     private Mono<StringBuilder> getEwm(Mono<PlanNewCommon> code) {
         return goGenerateService.getOutImportDomainCommon(code);
     }
+
+
+    public Mono<String> getByCodeGetImportDomainResMono(String planId,Integer planType) {
+        Query query0 = Query.query(Criteria.where("plan_new_id").is(planId));
+        Mono<Long> planNew  = Mono.just(0L);
+        if (1 == planType) {
+             planNew = template.count(query0, PlanNew.class)
+                    .onErrorResume(throwable ->
+                            Mono.error(new Exception(StrUtil
+                                    .format("通过planid:{}查询是否裂变计划异常:::{}",
+                                            planId,
+                                            throwable.getMessage()))));
+        }
+        Query query1 = Query.query(Criteria.where("listening_plan_new_id").is(planId));
+        Mono<Long> listeningPlan = Mono.just(0L) ;
+        if (2 == planType) {
+            listeningPlan = template
+                    .count(query1, ListeningPlanNew.class)
+                    .onErrorResume(throwable ->
+                            Mono.error(new Exception(StrUtil
+                                    .format("通过planId:{}查询是否听书计划异常:::{}",
+                                            planId,
+                                            throwable.getMessage()))));
+        }
+        Mono<Long> common = Mono.just(0L) ;
+        Query query2 = Query.query(Criteria.where("id").is(planId));
+        if (planType > 2) {
+            common = template
+                    .count(query2, PlanNewCommon.class)
+                    .onErrorResume(throwable ->
+                            Mono.error(new Exception(StrUtil
+                                    .format("通过planId:{}查询计划异常:::{}",
+                                            planId,
+                                            throwable.getMessage()))));
+        }
+        Mono<String> stringBuilderMono1 = Mono
+                .zip(planNew, listeningPlan,common)
+                .flatMap(f -> {
+                    Long t1 = f.getT1();
+                    Long t2 = f.getT2();
+                    Long t3 = f.getT3();
+                    Mono<ByCodeGetImportDomainRes> stringBuilderMono;
+                    if (t1 > 0) {
+                        stringBuilderMono = getNewPlan(planId, query0);
+                    } else if (t2 > 0) {
+                        stringBuilderMono = getNewListeningNewPlan(planId, query1);
+                    } else if(t3>0){
+                        stringBuilderMono = getNewPlanCommon(planId, query2);
+                    }else {
+                        throw new BaseException("planId不存在");
+                    }
+                    return stringBuilderMono.flatMap(f1->Mono.just(f1.getDomain()));
+                });
+        return stringBuilderMono1;
+    }
+
+    private Mono<ByCodeGetImportDomainRes> getNewPlanCommon(String planId, Query query) {
+        return template.selectOne(query, PlanNewCommon.class)
+                .switchIfEmpty(Mono
+                        .error(new BaseException(StrUtil
+                                .format("通过planId:{}查询common计划异常:::{}",
+                                        planId,
+                                        "返回结构为空"))))
+                .onErrorResume(throwable ->
+                        Mono.error(new BaseException(StrUtil
+                                .format("通过planId:{}查询common计划异常:::{}",
+                                        planId,
+                                        throwable.getMessage()))))
+                .flatMap(ff -> {
+                    Long groupId = ff.groupId();
+                    if (Objects.isNull(groupId)) {
+                        return Mono.error(new BaseException("查询common计划 groupId 值为 null"));
+                    }
+                    if(Objects.nonNull(ff.type()) && 5==ff.type()){
+                        String configJson = ff.configJson();
+                        if(Objects.nonNull(configJson) ){
+                            JSONObject jsonObject;
+                            try {
+                                jsonObject = JSONUtil.parseObj(configJson);
+                            }catch (Exception e){
+                                throw new BaseException("解析configJson异常"+e.getMessage());
+                            }
+                            if(!jsonObject.containsKey("landingPageDomain")){
+                                throw new BaseException("解析configJson 不包含字段 landingPageDomain");
+                            }
+                            try {
+                                groupId = jsonObject.get("landingPageDomain", Long.class);
+                            }catch (Exception e){
+                                throw new BaseException("解析landingPageDomain异常"+e.getMessage());
+                            }
+                            // String s = byCustomerIdGetUrl(posterCustomerServiceId);
+                            //return Mono.just(new StringBuilder(s));
+                        }
+                        //saveRequest.setImportDomain(String.valueOf(saveRequest.getGroupId()));
+                    }
+                    return getDomainSetV(groupId, planId,2, ff.code());
+                });
+    }
+    private Mono<ByCodeGetImportDomainRes> getNewListeningNewPlan(String planId, Query query) {
+        return template.selectOne(query, ListeningPlanNew.class)
+                .switchIfEmpty(Mono
+                        .error(new BaseException(StrUtil
+                                .format("通过planId:{}查询裂变计划异常:::{}",
+                                        planId,
+                                        "返回结构为空"))))
+                .onErrorResume(throwable ->
+                        Mono.error(new BaseException(StrUtil
+                                .format("通过planId:{}查询裂变计划异常:::{}",
+                                        planId,
+                                        throwable.getMessage()))))
+                .flatMap(ff -> {
+                    Long groupId = ff.groupId();
+                    if (Objects.isNull(groupId)) {
+                        return Mono.error(new BaseException("查询裂变计划 groupId 值为 null"));
+                    }
+                    return getDomainSetV(groupId, planId,1, ff.code());
+                });
+    }
+
+    private Mono<ByCodeGetImportDomainRes> getNewPlan(String planId, Query query) {
+        return template.selectOne(query, PlanNew.class)
+                .switchIfEmpty(Mono
+                        .error(new BaseException(StrUtil
+                                .format("通过planId:{}查询裂变计划异常:::{}",
+                                        planId,
+                                        "返回结构为空"))))
+                .onErrorResume(throwable ->
+                        Mono.error(new BaseException(StrUtil
+                                .format("通过planId:{}查询裂变计划异常:::{}",
+                                        planId,
+                                        throwable.getMessage()))))
+                .flatMap(ff -> {
+                    String groupIdStr = ff.importDomain();
+                    if (Objects.isNull(groupIdStr)) {
+                        return Mono.error(new BaseException("查询听书计划入口域名类型值为 null"));
+                    }
+                    long groupId;
+                    try {
+                        groupId = Long.parseLong(groupIdStr);
+                    }catch (Exception e){
+                        return Mono.error(new BaseException("查询听书计划入口域名类型值解析错误"+e.getMessage()));
+                    }
+                    return getDomainSetV(groupId, planId,1,ff.code());
+                });
+    }
+
+    private Mono<ByCodeGetImportDomainRes> getDomainSetV( Long  groupId, String planId,Integer type,String code) {
+        return template.select(Query.query(Criteria.where("group_type_id").is(groupId)
+                        .and("status").is(1)
+                        .and("type").is(type)
+                        .and("deleted_at").isNull()),
+                DomainSelect.class)
+                .collectList()
+                .switchIfEmpty(Mono.error(new BaseException(StrUtil
+                        .format("通过planId:{},groupId:{};查询域名为空",
+                                planId,
+                                groupId))))
+                .onErrorResume(throwable ->
+                        Mono.error(new Exception(StrUtil
+                                .format("通过planId:{},groupId:{};查询域名Error::{}",
+                                        planId,
+                                        groupId,
+                                        throwable.getMessage()))))
+                .flatMap(f2 -> {
+                    StringBuilder stringBuilder = new StringBuilder();
+                    if(!f2.isEmpty()){
+                        DomainSelect domainSelect = f2.get(RandomUtil.randomInt(0, f2.size()));
+                        stringBuilder.append("http://");
+                        stringBuilder.append(get6Str());
+                        stringBuilder.append(".");
+                        stringBuilder.append(domainSelect.domain());
+                        if(2==type){
+                            stringBuilder.append("?code=");
+                        }else {
+                            stringBuilder.append("/index.html?code=");
+                        }
+
+                        stringBuilder.append(code);
+                        stringBuilder.append("&sk=");
+                        stringBuilder.append(IdUtil.fastSimpleUUID());
+                    }else {
+                        return Mono.error(new BaseException(StrUtil.format("通过code:{},groupId:{};查询域名Error::{}",code,groupId,"错误")));
+                    }
+                    ByCodeGetImportDomainRes domain = new ByCodeGetImportDomainRes();
+                    domain.setDomain(stringBuilder.toString());
+                    return Mono.just(domain);
+                });
+    }
+    private String get6Str() {
+        return RandomUtil.randomString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 6);
+    }
+
+
 }

+ 1 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/req/OutDomainRequest.java

@@ -17,6 +17,7 @@ public class OutDomainRequest {
     private Integer type;
     /** 落地页域名 */
     private String landingPageDomain;
+
     /**
      * 中转页域名
      */

+ 6 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/req/PlanNewCommonMaterialReq.java

@@ -27,4 +27,10 @@ public class PlanNewCommonMaterialReq {
     private Boolean topAdvBl;
     private Boolean bottomAdvBl;
 
+    /**
+     * 用户相册数
+     */
+    private Integer albumNum;
+
+
 }

+ 5 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/res/PlanNewCommonMaterialRes.java

@@ -1,5 +1,6 @@
 package com.webflux.launchadmin.mysql.controller.planNew.res;
 
+import com.webflux.launchadmin.mysql.controller.sourceMaterial.data.album.AlbumReq;
 import com.webflux.launchadmin.mysql.controller.takeawayController.res.TakeawayH5Data;
 import com.webflux.launchadmin.mysql.entity.planNew.Ad;
 import com.webflux.launchadmin.mysql.entity.planNew.Audio;
@@ -47,4 +48,8 @@ public class PlanNewCommonMaterialRes {
     private Ad topAdv;
     private Ad bottomAdv;
     private String imageUrl;
+    /**
+     * 相册
+     */
+    private List<AlbumReq> albumList;
 }

+ 3 - 3
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/sourceMaterial/AlbumController.java

@@ -18,7 +18,7 @@ import reactor.core.publisher.Mono;
 /**
  * 相册接口
  * @author lw12420
- * @date 2024/08/07
+ * @date 2024/08/10
  */
 @RestController
 @RequestMapping("out/album")
@@ -32,7 +32,7 @@ public class AlbumController {
      * @param albumDto
      * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link BackgroupImage}>>>
      */
-    @GetMapping("list")
+    @PostMapping("list")
     public Mono<RStatus<Paged<Album>>> pageAlbum(@RequestBody AlbumDto albumDto){
         return  sourceMaterialInterface.pageAlbum(albumDto);
     }
@@ -55,7 +55,7 @@ public class AlbumController {
      */
     @GetMapping("infoAlbum/{id}")
     public Mono<RStatus<AlbumReq>> infoAlbum(@PathVariable("id") Long id) {
-        return  sourceMaterialInterface.infoAlbum(id);
+        return  RStatus.success(sourceMaterialInterface.infoAlbum(id));
     }
 
     /**

+ 7 - 2
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/planNew/Ad.java

@@ -16,7 +16,12 @@ public record Ad(@Id Long id,
                  String image,
                  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime showBegAt,
                  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime showEndAt,
-                 String link
+                 String link,
+                 Integer redirectType,
+                 Integer planType,
+                 String planId,
+                 Integer groupTypeId
 
-                 ) {
+
+) {
 }

+ 9 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/otherServices/OtherServicesImpl.java

@@ -15,6 +15,7 @@ import com.webflux.launchadmin.mysql.entity.planNew.PlanNewCommon;
 import com.webflux.launchadmin.mysql.service.planNew.structure.Item;
 import com.webflux.launchcommon.returnObj.RStatus;
 import jakarta.annotation.Resource;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
 import org.springframework.data.relational.core.query.Criteria;
 import org.springframework.data.relational.core.query.Query;
@@ -31,6 +32,12 @@ public class OtherServicesImpl implements   OtherServicesInterface {
     private R2dbcEntityTemplate template;
     @Override
     public Mono<RStatus<ByCodeGetImportDomainRes>> byCodeGetImportDomain(String code) {
+        Mono<ByCodeGetImportDomainRes> stringBuilderMono1 = getByCodeGetImportDomainResMono(code);
+        return RStatus.success(stringBuilderMono1);
+    }
+
+    @Override
+    public Mono<ByCodeGetImportDomainRes> getByCodeGetImportDomainResMono(String code) {
         Query query = Query.query(Criteria.where("code").is(code));
         Mono<Long> planNew = template.count(query, PlanNew.class)
                 .onErrorResume(throwable ->
@@ -71,8 +78,9 @@ public class OtherServicesImpl implements   OtherServicesInterface {
             }
             return stringBuilderMono;
         });
-        return RStatus.success(stringBuilderMono1);
+        return stringBuilderMono1;
     }
+
     private Mono<ByCodeGetImportDomainRes> getNewPlanCommon(String code, Query query) {
         return template.selectOne(query, PlanNewCommon.class)
                 .switchIfEmpty(Mono

+ 1 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/otherServices/OtherServicesInterface.java

@@ -7,4 +7,5 @@ import reactor.core.publisher.Mono;
 
 public interface OtherServicesInterface {
     Mono<RStatus<ByCodeGetImportDomainRes>> byCodeGetImportDomain(String code);
+     Mono<ByCodeGetImportDomainRes> getByCodeGetImportDomainResMono(String code);
 }

+ 24 - 49
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/MaterialManagementImpl.java

@@ -1,5 +1,4 @@
 package com.webflux.launchadmin.mysql.service.sourceMaterial.materialManagement;
-
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
@@ -51,10 +50,8 @@ import java.time.ZonedDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
-
 @Service
 public class MaterialManagementImpl implements MaterialManagementInterface {
-
     @Resource
     private SourceMaterialInterface sourceMaterialInterface;
     @Resource
@@ -79,8 +76,6 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
     BackgroupImageItemService backgroupImageItemInterface;
     //素材图片缓存
     private static final String hashKey = "execel_upload_cache_Image_";
-
-
     //Todo  GroupType
     @Override
     public Mono<GroupType> saveMysqlAndRedisGroupType( GroupType groupType) {
@@ -88,28 +83,22 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
                 .onErrorResume(throwable -> Mono.error(new BaseException("保存GroupType失败" + throwable.getMessage())))
                 .flatMap(groupTypeinterface::saveMysqlAndRedisGroupType);
     }
-
-
-
     //Todo  BackgroupImage <<<<<<<<<<<<<<
     @Override
     public Mono<Void> saveMysqlAndRedisBackgroupItem(BackgroupImageItem backgroupImageItem) {
         return backgroupImageItemRepository.insertImageItem(backgroupImageItem.image(),backgroupImageItem.index(),backgroupImageItem.groupId());
     }
-
     @Override
     public Mono<BackgroupImage> saveMysqlAndRedisBackgroupImage(BackgroupImage backgroupImage) {
         return template.insert(backgroupImage)
                 .onErrorResume(throwable -> Mono.error(new BaseException("保存backgroupImage失败" + throwable.getMessage())))
                 .flatMap(backgroupImageInterface::saveMysqlAndRedisBackgroupImageCache);
     }
-
     public Mono<BackgroupImage> updateMysqlAndRedisBackgroupImage(BackgroupImage backgroupImage) {
         return template.update(backgroupImage)
                 .onErrorResume(throwable -> Mono.error(new BaseException("保存backgroupImage失败" + throwable.getMessage())))
                 .flatMap(backgroupImageInterface::saveMysqlAndRedisBackgroupImageCache);
     }
-
     @Override
     public Mono<BackgroupImage> removeRedisAndMysqlBackgroupImage(Long id) {
         return backgroupImageRepository.deleteLogicFor(ZonedDateTime.now(),id)
@@ -135,7 +124,6 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
             Mono<List<BackgroupImageItem>> listMono =
                     template.select(Query.query(Criteria.where("group_id").is(fe.id())),
                             BackgroupImageItem.class).collectList();
-
             return Mono.zip(Mono.just(backgroupImageRes), listMono).flatMap(all -> {
                 BackgroupImageResNew t1 = all.getT1();
                 List<BackgroupImageItem> t2 = all.getT2();
@@ -310,7 +298,6 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
                             backgroupImageMono=Mono.just(all.getT2());
                         }
                         return  backgroupImageMono.then(Mono.just(backgroupImageSaveResNew));
-
                     });
                 });
         return RStatus.success(end);
@@ -370,9 +357,7 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
         });
         return RStatus.success(backgroupImageSaveResNewMono);
     }
-
     //Todo  BackgroupImage >>>>>>>>>>>>>>>>>
-
     //Todo  Image <<<<<<<<<<<<<<
     @Override
     public Mono<ExcelDataRes> importExcel(Mono<FilePart> file) {
@@ -407,7 +392,7 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
                         }
                     });
                 } catch (IOException e) {
-                    throw new RuntimeException("文件处理失败", e);
+                    return Mono.error(new RuntimeException("文件处理失败", e));
                 }
                 if (!images.isEmpty()) {
                     long currentTimeMillis = System.currentTimeMillis();
@@ -465,7 +450,6 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
 
             }
             return Mono.just(f.toString());
-
         });
 
 //        reactiveRedisImageTemplate.opsForHash().scan(hashKey+id).(entry->{
@@ -474,12 +458,8 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
 //        })
         return objectMono;
     }
-
-
-
     //Todo  Image >>>>>>>>>>>>>>>>>
     //Todo  相册 Album <<<<<<<<<<<<<<
-
     @Resource
     private AlbumInterface albumInterface;
     @Resource
@@ -509,7 +489,6 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
         Mono<RStatus<Paged<Album>>> page = sourceMaterialInterface.page(wheres, Album.class, albumDto.getSize(), albumDto.getPage());
         return page;
     }
-
     @Override
     @Transactional
     public Mono<RStatus<Boolean>> addOrUpdate(AlbumReq albumReq) {
@@ -518,9 +497,8 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
                 addAlbum(albumReq,BaseContextHandler.getUserName(),BaseContextHandler.getUserId(),list)
                 :updateAlbum(albumReq, list);
     }
-
     @Override
-    public Mono<RStatus<AlbumReq>> infoAlbum(Long id) {
+    public Mono<AlbumReq> infoAlbum(Long id) {
         Mono<AlbumReq> albumReqMono = albumInterface.getRedisOrMysql(id).flatMap(album -> {
             AlbumReq albumReq = new AlbumReq();
             albumReq.setAlbumId(album.albumId());
@@ -532,9 +510,9 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
             Mono<List<AlbumItemReq>> listMono = Mono.just(List.of());
             if (StringUtils.isNotEmpty(s)) {
                 List<Long> list1 = JSONUtil.parseArray(s).toList(Long.class);
-                listMono = Flux.fromIterable(list1).flatMap(itemid -> {
-                    return albumItemInterface.getRedisOrMysql(itemid);
-                }).flatMap(item -> {
+                listMono = Flux.fromIterable(list1).flatMap(itemid ->
+                        albumItemInterface.getRedisOrMysql(itemid))
+                        .flatMap(item -> {
                     AlbumItemReq albumItemReq = new AlbumItemReq();
                     albumItemReq.setId(item.id());
                     albumItemReq.setUrl(item.url());
@@ -552,9 +530,8 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
                 return Mono.just(t2);
             });
         });
-        return RStatus.success(albumReqMono);
+        return albumReqMono;
     }
-
     @Override
     @Transactional
     public Mono<RStatus<Boolean>> deleteAlbum(Long id) {
@@ -562,20 +539,19 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
             Mono<Boolean> then = Mono.just(true);
             if (StringUtils.isNotEmpty(album.imageListId())) {
                 List<Long> list1 = JSONUtil.parseArray(album.imageListId()).toList(Long.class);
-                then = Flux.fromIterable(list1).flatMap(item -> {
-                    return albumItemInterface.deleteMysqlAndRedisCache(item);
-                }).then(Mono.just(true));
+                then = Flux.fromIterable(list1).flatMap(item ->
+                        albumItemInterface.deleteMysqlAndRedisCache(item)).then(Mono.just(true));
             }
             return then.then(albumInterface.deleteMysqlAndRedisCache(album.albumId())).then(Mono.just(true));
         });
         return RStatus.success(booleanMono);
     }
-
     private Mono<RStatus<Boolean>> addAlbum(AlbumReq albumReq, String userName, String userId, List<AlbumItemReq> list) {
-
-        Mono<Boolean> then = Flux.fromIterable(list).flatMap(item -> {
-            return albumItemInterface.saveMysqlAndRedisCache(new AlbumItem(null, item.getUrl(), item.getStatus()));
-        }).collectList().switchIfEmpty(Mono.just(List.of()))
+        Mono<Boolean> then = Flux.fromIterable(list).flatMap(item -> albumItemRepository
+                .save(new AlbumItem(null, item.getUrl(), item.getStatus()))
+                .flatMap(albumItemInterface::saveMysqlAndRedisCache))
+                .collectList()
+                .switchIfEmpty(Mono.just(List.of()))
                 .flatMap(items -> {
                     Album album = new Album(albumReq.getAlbumId(),
                             albumReq.getHeadUrl(),
@@ -587,10 +563,10 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
                             ZonedDateTime.now(),
                             null,
                             null,
-                            JSONUtil.toJsonStr(items.stream().map(AlbumItem::id).collect(Collectors.toList())),
+                            JSONUtil.toJsonStr(items.stream().filter(f->Objects.nonNull(f.id())).map(AlbumItem::id).collect(Collectors.toList())),// todo 不要修改提醒
                             albumReq.getUserName()
                     );
-                    return albumInterface.saveMysqlAndRedisCache(album);
+                    return albumRepository.save(album).flatMap(albumInterface::saveMysqlAndRedisCache);
                 }).then(Mono.just(true));
         return RStatus.success(then);
     }
@@ -600,13 +576,13 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
             Mono<Boolean> then = Mono.just(true);
             if (StringUtils.isNotEmpty(s)) {
                 List<Long> list1 = JSONUtil.parseArray(s).toList(Long.class);
-                then = Flux.fromIterable(list1).flatMap(id -> {
-                    return albumItemInterface.deleteMysqlAndRedisCache(id);
-                }).then(Mono.just(true));
+                then = Flux.fromIterable(list1).flatMap(id ->
+                        albumItemInterface.deleteMysqlAndRedisCache(id)).then(Mono.just(true));
             }
-            return then.then(Flux.fromIterable(list).flatMap(item -> {
-                return albumItemInterface.saveMysqlAndRedisCache(new AlbumItem(null, item.getUrl(), item.getStatus()));
-            }).collectList().switchIfEmpty(Mono.just(List.of()))
+            return then.then(Flux.fromIterable(list).flatMap(item -> albumItemRepository
+                    .save(new AlbumItem(null, item.getUrl(), item.getStatus()))
+                    .flatMap(albumItemInterface::saveMysqlAndRedisCache))
+                    .collectList().switchIfEmpty(Mono.just(List.of()))
                     .flatMap(items -> {
                         Album albumNew = new Album(albumReq.getAlbumId(),
                                 albumReq.getHeadUrl(),
@@ -615,17 +591,16 @@ public class MaterialManagementImpl implements MaterialManagementInterface {
                                 items.size(),
                                 album.createUser(),
                                 album.createId(),
-                               null,
+                                album.createdAt(),
                                 ZonedDateTime.now(),
                                 null,
-                                JSONUtil.toJsonStr(items.stream().map(AlbumItem::id).collect(Collectors.toList())),
+                                JSONUtil.toJsonStr(items.stream().filter(f->Objects.nonNull(f.id())).map(AlbumItem::id).collect(Collectors.toList())),//todo 不要修改提醒
                                 albumReq.getUserName()
                         );
-                        return albumInterface.saveMysqlAndRedisCache(albumNew);
+                        return albumRepository.save(albumNew).flatMap(albumInterface::saveMysqlAndRedisCache);
                     }).then(Mono.just(true)));
         });
         return RStatus.success(booleanMono);
     }
-
     //Todo  相册 Album >>>>>>>>>>>>>>>>
 }

+ 1 - 2
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/MaterialManagementInterface.java

@@ -71,8 +71,7 @@ public interface MaterialManagementInterface {
 
     Mono<RStatus<Boolean>> addOrUpdate(AlbumReq albumReq);
 
-
-    Mono<RStatus<AlbumReq>> infoAlbum(Long id);
+    Mono<AlbumReq> infoAlbum(Long id);
 
     Mono<RStatus<Boolean>> deleteAlbum(Long id);
 }

+ 1 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/AlbumItemService.java

@@ -23,7 +23,7 @@ public class AlbumItemService implements AlbumItemInterface {
     @Override
     @CachePut(cacheNames = MaterialManagementRedisKey.ALBUMITEM, key = "#albumItem.id")
     public Mono<AlbumItem> saveMysqlAndRedisCache(AlbumItem albumItem) {
-        return albumItemRepository.save(albumItem);
+        return Mono.just(albumItem);
     }
 
     // 删除缓存

+ 1 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/materialManagement/redisCache/AlbumService.java

@@ -23,7 +23,7 @@ public class AlbumService implements AlbumInterface {
     @Override
     @CachePut(cacheNames = MaterialManagementRedisKey.ALBUM, key = "#album.albumId")
     public Mono<Album> saveMysqlAndRedisCache(Album album) {
-        return albumRepository.save(album);
+        return Mono.just(album);
     }
 
     // 删除缓存