Explorar el Código

feat: 交友裂变-计划列表

wangcheng hace 2 años
padre
commit
fb1ae0af95

+ 338 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewCommonController.java

@@ -0,0 +1,338 @@
+package com.webflux.launchadmin.mysql.controller.planNew;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.webflux.launchadmin.config.BaseContextHandler;
+import com.webflux.launchadmin.global.BaseException;
+import com.webflux.launchadmin.mysql.controller.planNew.req.PlanReq;
+import com.webflux.launchadmin.mysql.controller.planNew.req.ServiceGroupSettingItemRequest;
+import com.webflux.launchadmin.mysql.controller.planNew.res.PlanNewAllRs;
+import com.webflux.launchadmin.mysql.entity.planNew.PlanNew;
+import com.webflux.launchadmin.mysql.entity.planNew.PlanNewBackgroupPoster;
+import com.webflux.launchadmin.mysql.entity.planNew.PlanNewCommon;
+import com.webflux.launchadmin.mysql.entity.planNew.Poster;
+import com.webflux.launchadmin.mysql.service.planNew.goGenerate.GoGenerateService;
+import com.webflux.launchadmin.mysql.service.planNew.structure.GoRequest;
+import com.webflux.launchcommon.returnObj.RStatus;
+import jakarta.annotation.Resource;
+import jakarta.validation.constraints.NotNull;
+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.Flux;
+import reactor.core.publisher.Mono;
+
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 裂变计划通用配置列表
+ *
+ * @author: wangcheng
+ * @date: 2024/7/9 16:10
+ */
+@RestController
+@RequestMapping("in/planNewCommon")
+public class PlanNewCommonController {
+    @Resource
+    private R2dbcEntityTemplate template;
+
+    @Resource
+    private GoGenerateService goGenerateService;
+
+    /**
+     * 保存计划
+     *
+     * @param saveRequest saveRequest
+     * @return reactor.core.publisher.Mono<com.webflux.launchcommon.returnObj.RStatus < java.lang.String>>
+     * @author wangcheng
+     * @date 2024/7/9 16:22
+     */
+    @PostMapping("savePlan")
+    public Mono<RStatus<String>> savePlan(@RequestBody PlanReq saveRequest) {
+
+        if (saveRequest.getType() == 3) {
+            if (StrUtil.isBlank(saveRequest.getPlanNewId())) {
+                // 新增
+                return this.savePlanCommon(saveRequest);
+            } else {
+                // 编辑
+                return this.updatePlanCommon(saveRequest);
+            }
+        }
+        throw new BaseException("type类型错误");
+    }
+
+    /**
+     * 新增计划
+     */
+    private Mono<RStatus<String>> savePlanCommon(PlanReq saveRequest) {
+        String userName = BaseContextHandler.getUserName();
+        String userId = BaseContextHandler.getUserId();
+        saveRequest.setCode(IdUtil.fastSimpleUUID());
+        Mono<String> previewUrl = this.getPreviewUrl(saveRequest);
+        Mono<PlanNewCommon> insert = previewUrl.flatMap(f -> {
+            PlanNewCommon plan = new PlanNewCommon(
+                    IdUtil.fastSimpleUUID(),
+                    saveRequest.getName(),
+                    saveRequest.getCode(),
+                    saveRequest.getType(),
+                    saveRequest.getGroupId(),
+                    saveRequest.getPosterTemplateId(),
+                    saveRequest.getImportDomain(),
+                    f,
+                    saveRequest.getConfigJson(),
+                    userName,
+                    userId,
+                    userName,
+                    userId,
+                    ZonedDateTime.now(),
+                    ZonedDateTime.now()
+            );
+            return template.insert(plan);
+        });
+        Mono<String> map = insert.flatMap(f -> {
+            Flux<PlanNewBackgroupPoster> just = this.getPlanNewBackGroupPosterFlux(saveRequest, f);
+            return Mono.zip(this.batchInsert(just), Mono.just(f)).flatMap(ff -> {
+                PlanNewCommon t2 = ff.getT2();
+                return Mono.just(t2.id());
+            });
+        });
+        return RStatus.success(map);
+    }
+
+    /**
+     * 编辑计划
+     */
+    private Mono<RStatus<String>> updatePlanCommon(PlanReq updateRequest) {
+        String userName = BaseContextHandler.getUserName();
+        String userId = BaseContextHandler.getUserId();
+        Mono<PlanNewCommon> planNewCommonMono = template.selectOne(Query.query(Criteria.where("id").is(updateRequest.getPlanNewId())), PlanNewCommon.class);
+        Mono<String> previewUrl = this.getPreviewUrl(updateRequest);
+        Mono<PlanNewCommon> updateMono = Mono.zip(previewUrl, planNewCommonMono).flatMap(f -> {
+            PlanNewCommon old = f.getT2();
+            PlanNewCommon plan = new PlanNewCommon(
+                    old.id(),
+                    updateRequest.getName(),
+                    old.code(),
+                    updateRequest.getType(),
+                    updateRequest.getGroupId(),
+                    updateRequest.getPosterTemplateId(),
+                    updateRequest.getImportDomain(),
+                    f.getT1(),
+                    updateRequest.getConfigJson(),
+                    old.createUser(),
+                    old.createId(),
+                    userName,
+                    userId,
+                    old.createdAt(),
+                    ZonedDateTime.now()
+            );
+            return Mono.just(plan);
+        }).flatMap(template::update);
+        Mono<String> map = updateMono.flatMap(f1 -> {
+            Mono<Long> ml = template.delete(Query.query(Criteria.where("plan_new_id").is(f1.id())), PlanNewBackgroupPoster.class);
+            return Mono.zip(Mono.just(f1), ml).flatMap(ff -> Mono.just(f1));
+        }).flatMap(f -> {
+            Flux<PlanNewBackgroupPoster> just = this.getPlanNewBackGroupPosterFlux(updateRequest, f);
+            return Mono.zip(this.batchInsert(just), Mono.just(f)).flatMap(ff -> {
+                PlanNewCommon t2 = ff.getT2();
+                return Mono.just(t2.id());
+            });
+        });
+        return RStatus.success(map);
+    }
+
+    /**
+     * 生成预览url
+     */
+    private Mono<String> getPreviewUrl(PlanReq planReq) {
+        return template
+                .select(Query.query(Criteria.where("poster_template_id").is(planReq.getPosterTemplateId()))
+                        .sort(Sort.by(Sort.Order.asc("created_at"))), Poster.class)
+                .collectList().flatMap(f -> {
+                    Poster poster = f.getFirst();
+                    String posterTemplate = poster.posterTemplate();
+                    JSONObject jsonObject = JSONUtil.parseObj(posterTemplate);
+                    GoRequest goRequest = new GoRequest();
+                    BeanUtil.copyProperties(jsonObject, goRequest);
+                    ServiceGroupSettingItemRequest serviceGroupSettingItemRequest = planReq.getBackgroupFxSetting().getFirst();
+                    return goGenerateService.saveAndUpdatePlanGenerateImage0(goRequest,
+                            goGenerateService.setCusqrcodeSetV(goRequest),// getStringBuilderMono(goRequest),
+                            serviceGroupSettingItemRequest,
+                            planReq);
+                });
+    }
+
+    private Flux<PlanNewBackgroupPoster> getPlanNewBackGroupPosterFlux(PlanReq saveRequest, PlanNewCommon f) {
+        List<ServiceGroupSettingItemRequest> backGroupFxSetting = saveRequest.getBackgroupFxSetting();
+        ArrayList<PlanNewBackgroupPoster> listeningPlanNewBackGroupPosters = new ArrayList<>();
+        backGroupFxSetting.forEach(fx -> {
+            PlanNewBackgroupPoster listeningPlanNewBackgroupPoster = fxBackGroupSettingsSave(fx, f.id(), 1);
+            listeningPlanNewBackGroupPosters.add(listeningPlanNewBackgroupPoster);
+        });
+        List<ServiceGroupSettingItemRequest> backGroupQsSetting = saveRequest.getBackgroupQsSetting();
+        backGroupQsSetting.forEach(fx -> {
+            PlanNewBackgroupPoster listeningPlanNewBackGroupPoster = fxBackGroupSettingsSave(fx, f.id(), 2);
+            listeningPlanNewBackGroupPosters.add(listeningPlanNewBackGroupPoster);
+        });
+        return Flux.fromIterable(listeningPlanNewBackGroupPosters);
+    }
+
+    private PlanNewBackgroupPoster fxBackGroupSettingsSave(ServiceGroupSettingItemRequest request, String planNewId, Integer qsOrFx) {
+        return new PlanNewBackgroupPoster(null,
+                request.getAudioId(),
+                request.getGroupId(),
+                request.getImage(),
+                request.getKefu(),
+                request.getLimitTime(),
+                request.getLimitTimeRemark(),
+                request.getStatus(),
+                request.getIndex(),
+                request.getServiceGroupId(),
+                request.getServiceGroupType(),
+                qsOrFx,
+                ZonedDateTime.now(),
+                null,
+                null,
+                planNewId, null, null);
+
+    }
+
+    private Mono<List<PlanNewBackgroupPoster>> batchInsert(Flux<PlanNewBackgroupPoster> entities) {
+        return entities.flatMap(entity -> template
+                .insert(PlanNewBackgroupPoster.class).using(entity)).collectList();
+    }
+
+    /**
+     * 获取计划详情
+     *
+     * @param type   type
+     * @param planId planId
+     * @return reactor.core.publisher.Mono<com.webflux.launchcommon.returnObj.RStatus < com.webflux.launchadmin.mysql.entity.planNew.PlanNewCommon>>
+     * @author wangcheng
+     * @date 2024/7/9 18:18
+     */
+    @GetMapping("getPlanInfo/{type}/{planId}")
+    public Mono<RStatus<PlanNewCommon>> planNewInfo(@PathVariable("type") @NotNull Integer type, @PathVariable("planId") @NotNull String planId) {
+        if (type == 3) {
+            // 交友计划
+            Mono<PlanNewCommon> planNewCommonMono = template.selectOne(Query.query(Criteria.where("id").is(planId)), PlanNewCommon.class)
+                    .switchIfEmpty(Mono.error(new BaseException("计划id异常")))
+                    .onErrorResume(throwable -> Mono.error(new Exception("计划id异常")));
+            return RStatus.success(planNewCommonMono);
+        }
+        throw new BaseException("type类型错误");
+    }
+
+    /**
+     * 复制计划
+     *
+     * @param type   type
+     * @param planId planId
+     * @return reactor.core.publisher.Mono<com.webflux.launchcommon.returnObj.RStatus < java.lang.String>>
+     * @author wangcheng
+     * @date 2024/7/9 19:34
+     */
+    @GetMapping("copyById/{type}/{planId}")
+    public Mono<RStatus<String>> copyById(@PathVariable("type") @NotNull Integer type, @PathVariable("planId") @NotNull String planId) {
+        if (type == 3) {
+            // 交友计划
+            String userName = BaseContextHandler.getUserName();
+            String userId = BaseContextHandler.getUserId();
+            Mono<PlanNewCommon> planNewCommonMono = template.selectOne(Query.query(Criteria.where("id").is(planId)), PlanNewCommon.class)
+                    .flatMap(f -> {
+                        PlanNewCommon planNewCommon = new PlanNewCommon(
+                                IdUtil.fastSimpleUUID(),
+                                f.name(),
+                                IdUtil.fastSimpleUUID(),
+                                f.type(),
+                                f.groupId(),
+                                f.posterTemplateId(),
+                                f.importDomain(),
+                                f.previewUrl(),
+                                f.configJson(),
+                                userName,
+                                userId,
+                                userName,
+                                userId,
+                                ZonedDateTime.now(),
+                                ZonedDateTime.now()
+                        );
+                        return template.insert(planNewCommon);
+                    });
+            Mono<List<PlanNewBackgroupPoster>> poster = template.select(Query.query(Criteria.where("plan_new_id")
+                            .is(planId)), PlanNewBackgroupPoster.class)
+                    .collectList();
+            Mono<String> stringMono = Mono.zip(planNewCommonMono, poster).flatMap(f -> {
+                PlanNewCommon t1 = f.getT1();
+                List<PlanNewBackgroupPoster> t2 = f.getT2();
+                if (!t2.isEmpty()) {
+                    List<PlanNewBackgroupPoster> collect = t2.stream().map(request -> new PlanNewBackgroupPoster(null,
+                            request.audioId(),
+                            request.groupId(),
+                            request.image(),
+                            request.kefu(),
+                            request.limitTime(),
+                            request.limitTimeRemark(),
+                            request.status(),
+                            request.index(),
+                            request.serviceGroupId(),
+                            request.serviceGroupType(),
+                            request.qsOrFx(),
+                            ZonedDateTime.now(),
+                            null,
+                            null,
+                            t1.id(),
+                            request.generateImagesJson(),
+                            request.generateImagesUrl())).collect(Collectors.toList());
+                    Mono<List<PlanNewBackgroupPoster>> listMono =
+                            Flux.fromIterable(collect).flatMap(entity -> template.insert(entity)).collectList();
+                    return Mono.zip(Mono.just(t1), listMono).flatMap(ff -> {
+                        PlanNewCommon t11 = ff.getT1();
+                        return Mono.just(t11.id());
+                    });
+                } else {
+                    return Mono.just(t1.id());
+                }
+            });
+            return RStatus.success(stringMono);
+        }
+        throw new BaseException("type类型错误");
+    }
+
+    /**
+     * 删除计划
+     *
+     * @param type   type
+     * @param planId planId
+     * @return reactor.core.publisher.Mono<com.webflux.launchcommon.returnObj.RStatus < java.lang.Long>>
+     * @author wangcheng
+     * @date 2024/7/9 19:36
+     */
+    @DeleteMapping("deleteById/{type}/{planId}")
+    public Mono<RStatus<Long>> deleteById(@PathVariable("type") @NotNull Integer type, @PathVariable("planId") @NotNull String planId) {
+        if (type == 3) {
+            // 交友计划
+            Query plan = Query.query(Criteria.where("id").is(planId));
+            Mono<Long> planNewCommon = template.delete(plan, PlanNewCommon.class)
+                    .switchIfEmpty(Mono.error(new BaseException("计划id异常")))
+                    .onErrorResume(throwable -> Mono.error(new Exception("删除计划 " + planId + "---" + type + "error:" + throwable.getMessage())));
+            Query planNewId = Query.query(Criteria.where("plan_new_id").is(planId));
+            Mono<Long> poster = template.count(planNewId, PlanNewBackgroupPoster.class).filter(f -> f > 0)
+                    .flatMap(f -> template.delete(planNewId, PlanNewBackgroupPoster.class))
+                    .switchIfEmpty(Mono.just(0L));
+            Mono<Long> longMono = Mono.zip(poster, planNewCommon).flatMap(f -> Mono.just(f.getT1()));
+            return RStatus.success(longMono);
+        }
+        throw new BaseException("type类型错误");
+    }
+}

+ 203 - 153
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewController.java

@@ -33,6 +33,7 @@ import org.springframework.data.relational.core.query.Update;
 import org.springframework.web.bind.annotation.*;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
+
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -43,13 +44,14 @@ import java.util.stream.Collectors;
 
 /**
  * 计划
+ *
  * @author lw12420
  * @date 2024/05/21
  */
 @RestController
 @RequestMapping("in/planNew")
 public class PlanNewController {
-    //一天时间
+    // 一天时间
     @Resource
     private R2dbcEntityTemplate template;
 
@@ -61,27 +63,26 @@ public class PlanNewController {
     private PlanServiceInterface planServiceInterface;
 
     @GetMapping("tt")
-    public String tt(){
-        String str="{\"item\": [{\"a\": \"left\", \"c\": \"rgba(0, 0, 0, 1)\", \"h\": 20, \"s\": 14, \"t\": \"title\", \"v\": \"群聊,本地视频推荐\", \"w\": 140, \"x\": 100, \"y\": 100, \"fn\": \"ali-Regular\", \"rm\": \"备注\", \"bgc\": \"\", \"name\": \"海报标题\", \"uuid\": \"b3a10a5e-8c17-4a37-9a99-13600328868c\", \"warp\": false, \"weight\": 500}, {\"c\": \"rgba(0, 0, 0, 1)\", \"h\": 300, \"t\": \"qrcode\", \"v\": \"\", \"w\": 300, \"x\": 87, \"y\": 172, \"fn\": \"\", \"rm\": \"备注\", \"bgc\": \"#ffffff\", \"name\": \"二维码\", \"uuid\": \"2862c036-ad07-48d4-ab34-94fbb2c46c30\"}], \"width\": 458, \"height\": 709, \"bg_img_src\": \"\"}";
+    public String tt() {
+        String str = "{\"item\": [{\"a\": \"left\", \"c\": \"rgba(0, 0, 0, 1)\", \"h\": 20, \"s\": 14, \"t\": \"title\", \"v\": \"群聊,本地视频推荐\", \"w\": 140, \"x\": 100, \"y\": 100, \"fn\": \"ali-Regular\", \"rm\": \"备注\", \"bgc\": \"\", \"name\": \"海报标题\", \"uuid\": \"b3a10a5e-8c17-4a37-9a99-13600328868c\", \"warp\": false, \"weight\": 500}, {\"c\": \"rgba(0, 0, 0, 1)\", \"h\": 300, \"t\": \"qrcode\", \"v\": \"\", \"w\": 300, \"x\": 87, \"y\": 172, \"fn\": \"\", \"rm\": \"备注\", \"bgc\": \"#ffffff\", \"name\": \"二维码\", \"uuid\": \"2862c036-ad07-48d4-ab34-94fbb2c46c30\"}], \"width\": 458, \"height\": 709, \"bg_img_src\": \"\"}";
 
         return goGenerateService.goGenerate(str);
     }
 
 
-
     /**
-     *
      * 分享、清水背景组-回显
+     *
      * @param planNewId 计划id
-     * @param qsOrFx 1:营销 2:清水
+     * @param qsOrFx    1:营销 2:清水
      * @return {@link Mono}<{@link RStatus}<{@link BackgroupImageRes}>>
      */
     @GetMapping("backgroupSelectOne/{type}/{planNewId}/{qsOrFx}")
-    public Mono<RStatus<List<PlanNewBackgroupPosterAllRes>>> backgroupSelectOne(@PathVariable("type")  @NotNull Integer type,
-                                                                                @PathVariable("planNewId") String planNewId,@PathVariable("qsOrFx") Integer qsOrFx ){
+    public Mono<RStatus<List<PlanNewBackgroupPosterAllRes>>> backgroupSelectOne(@PathVariable("type") @NotNull Integer type,
+                                                                                @PathVariable("planNewId") String planNewId, @PathVariable("qsOrFx") Integer qsOrFx) {
         if (1 == type) {
             Mono<List<PlanNewBackgroupPosterAllRes>> listMono = template.select(Query.query(Criteria.where("plan_new_id").is(planNewId)
-                    .and("qs_or_fx").is(qsOrFx)).sort(Sort.by(Sort.Order.asc("idx"))), PlanNewBackgroupPoster.class).flatMap(request->{
+                    .and("qs_or_fx").is(qsOrFx)).sort(Sort.by(Sort.Order.asc("idx"))), PlanNewBackgroupPoster.class).flatMap(request -> {
                 PlanNewBackgroupPosterAllRes planNewBackgroupPosterAllRes =
                         new PlanNewBackgroupPosterAllRes(request.id(),
                                 request.audioId(),
@@ -104,8 +105,8 @@ public class PlanNewController {
             return RStatus.successList(listMono);
         } else if (2 == type) {
             Mono<List<PlanNewBackgroupPosterAllRes>> listMono = template.select(Query.query(Criteria.where("listening_plan_new_id").is(planNewId)
-                    .and("qs_or_fx").is(qsOrFx))
-                    .sort(Sort.by(Sort.Order.asc("idx"))), ListeningPlanNewBackgroupPoster.class).flatMap(request->{
+                            .and("qs_or_fx").is(qsOrFx))
+                    .sort(Sort.by(Sort.Order.asc("idx"))), ListeningPlanNewBackgroupPoster.class).flatMap(request -> {
                 PlanNewBackgroupPosterAllRes planNewBackgroupPosterAllRes =
                         new PlanNewBackgroupPosterAllRes(request.id(),
                                 request.audioId(),
@@ -127,18 +128,19 @@ public class PlanNewController {
             }).collectList();
             return RStatus.successList(listMono);
         }
-            throw new BaseException("type异常");
+        throw new BaseException("type异常");
     }
 
     /**
      * 背景组详情接口
+     *
      * @param id 背景组id
      * @return {@link Mono}<{@link RStatus}<{@link DataLists}>>
      */
     @GetMapping("backgroupImageRes/{id}")
-    public Mono<RStatus<BackgroupImageRes>> backgroupImageRes(@PathVariable("id") Long id){
+    public Mono<RStatus<BackgroupImageRes>> backgroupImageRes(@PathVariable("id") Long id) {
         Mono<BackgroupImage> id1 = template.selectOne(Query.query(Criteria.where("id")
-                .is(id)), BackgroupImage.class) .switchIfEmpty(Mono.error(new BaseException(" 通过code查询结果为空")))
+                        .is(id)), BackgroupImage.class).switchIfEmpty(Mono.error(new BaseException(" 通过code查询结果为空")))
                 .onErrorResume(throwable -> Mono.error(new Exception(throwable.getMessage())));
         Mono<List<BackgroupImageItem>> group_id = template.select(Query.query(Criteria.where("group_id")
                 .is(id)).sort(Sort.by(Sort.Order.asc("index"))), BackgroupImageItem.class).collectList();
@@ -154,11 +156,12 @@ public class PlanNewController {
 
     /**
      * 客服组-下拉 ( By status)
+     *
      * @param status
      * @return {@link Mono}<{@link RStatus}<{@link List}<{@link ReturnLoop}>>>
      */
     @GetMapping("serviceGroupSlt")
-    public Mono<RStatus<List<ServiceGroup>>> serviceGroupSlt (@RequestParam("status") Integer status){
+    public Mono<RStatus<List<ServiceGroup>>> serviceGroupSlt(@RequestParam("status") Integer status) {
         Mono<List<ServiceGroup>> status1 = template.select(Query.query(Criteria.where("status")
                 .is(2)), ServiceGroup.class).collectList();
         return RStatus.successList(status1);
@@ -167,56 +170,63 @@ public class PlanNewController {
 
     /**
      * 素材、清水--分类下拉(groupType)名称模糊查询
+     *
      * @param name
      * @return {@link Mono}<{@link RStatus}<{@link Long}>>
      */
     @GetMapping("groupTypeSlt")
-    public Mono<RStatus<List<GroupType>>> groupTypeSlt (@RequestParam("name") String name,@RequestParam("groupType")String groupType){
-        Criteria criteria= Criteria.where("group_type").is(groupType);
+    public Mono<RStatus<List<GroupType>>> groupTypeSlt(@RequestParam("name") String name, @RequestParam("groupType") String groupType) {
+        Criteria criteria = Criteria.where("group_type").is(groupType);
         if (Objects.nonNull(name) && "" != name) {
-            criteria = criteria.and("name").like("%"+name+"%");
+            criteria = criteria.and("name").like("%" + name + "%");
         }
         Mono<List<GroupType>> listMono = template.select(Query.query(criteria), GroupType.class).collectList();
         return RStatus.success(listMono);
     }
+
     /**
      * 返回广告下拉名称模糊查询
+     *
      * @param name
      * @return {@link Mono}<{@link RStatus}<{@link Long}>>
      */
     @GetMapping("retrunloopSlt")
-    public Mono<RStatus<List<ReturnLoop>>> retrunloopSlt (@RequestParam("name") String name){
-        Criteria criteria= Criteria.empty() ; //poster_template_id
+    public Mono<RStatus<List<ReturnLoop>>> retrunloopSlt(@RequestParam("name") String name) {
+        Criteria criteria = Criteria.empty(); // poster_template_id
         if (Objects.nonNull(name) && "" != name) {
-            criteria = criteria.and("name").like("%"+name+"%");
+            criteria = criteria.and("name").like("%" + name + "%");
         }
         Mono<List<ReturnLoop>> listMono = template.select(Query.query(criteria), ReturnLoop.class).collectList();
         return RStatus.success(listMono);
     }
+
     /**
      * (分享/清水)背景组设置下拉名称模糊查询
+     *
      * @param name groupType
      * @return {@link Mono}<{@link RStatus}<{@link Long}>>
      */
     @GetMapping("backgroupSlt")
-    public Mono<RStatus<List<BackgroupImage>>> backgroupSlt ( @RequestParam("name") String name,@RequestParam("groupType") String groupType){
-        Criteria criteria= Criteria.where("group_type").is(groupType) ; //poster_template_id
+    public Mono<RStatus<List<BackgroupImage>>> backgroupSlt(@RequestParam("name") String name, @RequestParam("groupType") String groupType) {
+        Criteria criteria = Criteria.where("group_type").is(groupType); // poster_template_id
         if (Objects.nonNull(name) && "" != name) {
-            criteria = criteria.and("name").like("%"+name+"%");
+            criteria = criteria.and("name").like("%" + name + "%");
         }
         Mono<List<BackgroupImage>> listMono = template.select(Query.query(criteria), BackgroupImage.class).collectList();
         return RStatus.success(listMono);
     }
+
     /**
      * 音频下拉名称模糊查询
+     *
      * @param name
      * @return {@link Mono}<{@link RStatus}<{@link Long}>>
      */
     @GetMapping("audioSlt")
-    public Mono<RStatus<List<Audio>>> audio (@RequestParam("name") String name){
-        Criteria criteria= Criteria.empty() ; //poster_template_id
+    public Mono<RStatus<List<Audio>>> audio(@RequestParam("name") String name) {
+        Criteria criteria = Criteria.empty(); // poster_template_id
         if (Objects.nonNull(name) && "" != name) {
-            criteria = criteria.and("name").like("%"+name+"%");
+            criteria = criteria.and("name").like("%" + name + "%");
         }
         Mono<List<Audio>> listMono = template.select(Query.query(criteria), Audio.class).collectList();
         return RStatus.success(listMono);
@@ -224,128 +234,142 @@ public class PlanNewController {
 
     /**
      * 海报保存
+     *
      * @param posterRequset
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
     @PostMapping("savePoster")
-    public Mono<RStatus<Poster>> savePoster(@RequestBody PosterRequest posterRequset){
+    public Mono<RStatus<Poster>> savePoster(@RequestBody PosterRequest posterRequset) {
         return goGenerateService.savePoster(posterRequset);
     }
+
     @PostMapping("test11")
-    public Mono<String> test11(){
+    public Mono<String> test11() {
         return goGenerateService.updatePoster1();
     }
+
     @PostMapping("test12")
-    public Mono<String> test112(){
+    public Mono<String> test112() {
         String string = RandomUtil.randomString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 6);
-        return Mono.just(string);//goGenerateService.updatePoster12();
+        return Mono.just(string);// goGenerateService.updatePoster12();
     }
+
     /**
      * 海报修改
+     *
      * @param posterRequset
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
     @PostMapping("updatePoster")
-    public Mono<RStatus<Poster>> updatePoster(@RequestBody PosterRequest posterRequset){
+    public Mono<RStatus<Poster>> updatePoster(@RequestBody PosterRequest posterRequset) {
         return goGenerateService.updatePoster(posterRequset);
     }
 
     /**
      * 海报删除
+     *
      * @param posterId
      * @return {@link Mono}<{@link RStatus}<{@link Long}>>
      */
     @DeleteMapping("deletePosterById/{posterId}")
-    public Mono<RStatus<Long>> deletePosterById (@PathVariable("posterId")  @NotNull Long posterId){
+    public Mono<RStatus<Long>> deletePosterById(@PathVariable("posterId") @NotNull Long posterId) {
         Mono<Long> plan_new_id = template.delete(Query.query(Criteria.where("poster_id").is(posterId)), Poster.class);
         return RStatus.success(plan_new_id);
     }
 
     /**
      * 海报列表
+     *
      * @param request
      * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link PosterTemplate}>>>
      */
     @PostMapping("posterList")
-    public Mono<RStatus<Paged<Poster>>> posterList(@RequestBody PosterPage request)   {
-        Criteria criteria= Criteria.empty() ; //poster_template_id
+    public Mono<RStatus<Paged<Poster>>> posterList(@RequestBody PosterPage request) {
+        Criteria criteria = Criteria.empty(); // poster_template_id
         criteria = criteria.and("poster_template_id").is(request.getPosterTemplateId());
         Query query = Query.query(criteria);
         Criteria finalCriteria = criteria;
-        int skip  = (request.getPage() - 1) * request.getSize();
-        int limit =  request.getSize();
+        int skip = (request.getPage() - 1) * request.getSize();
+        int limit = request.getSize();
         Mono<Paged<Poster>> pagedMono = template.count(query, Poster.class).flatMap(fm ->
                 template.select(Query.query(finalCriteria)
-                        .offset(skip)
-                        .limit(limit)
-                        .sort(Sort.by(Sort.Order.asc("created_at"))),Poster.class)
+                                .offset(skip)
+                                .limit(limit)
+                                .sort(Sort.by(Sort.Order.asc("created_at"))), Poster.class)
                         .collectList()
-                        .map(list -> new Paged<>(fm, list,request.getPage(),request.getSize()))
+                        .map(list -> new Paged<>(fm, list, request.getPage(), request.getSize()))
         );
         return RStatus.successList(pagedMono);
     }
 
     /**
      * 海报模版保存
+     *
      * @param posterTemplateRequset
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
     @PostMapping("savePosterTem")
-    public Mono<RStatus<PosterTemplate>> savePosterTem(@RequestBody PosterTemplateRequset posterTemplateRequset){
+    public Mono<RStatus<PosterTemplate>> savePosterTem(@RequestBody PosterTemplateRequset posterTemplateRequset) {
         PosterTemplate posterTemplate = new PosterTemplate(null, posterTemplateRequset.getPosterTemplateName(), BaseContextHandler.getUserName(),
                 BaseContextHandler.getUserId(), ZonedDateTime.now(),
                 ZonedDateTime.now());
         Mono<PosterTemplate> insert = template.insert(posterTemplate);
         return RStatus.success(insert);
     }
+
     /**
      * 海报模版修改
+     *
      * @param posterTemplateRequset
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
     @PostMapping("updatePosterTem")
-    public Mono<RStatus<Long>> updatePosterTem(@RequestBody PosterTemplateRequset posterTemplateRequset){
+    public Mono<RStatus<Long>> updatePosterTem(@RequestBody PosterTemplateRequset posterTemplateRequset) {
 
         Criteria empty = Criteria.where("poster_template_id").is(posterTemplateRequset.getPosterTemplateId());
         Update update = Update.update("updated_at", ZonedDateTime.now());
-        if(Objects.nonNull(posterTemplateRequset.getPosterTemplateName()) && !"".equals(posterTemplateRequset.getPosterTemplateName())){
-            update=  update.set("poster_template_name",posterTemplateRequset.getPosterTemplateName());
+        if (Objects.nonNull(posterTemplateRequset.getPosterTemplateName()) && !"".equals(posterTemplateRequset.getPosterTemplateName())) {
+            update = update.set("poster_template_name", posterTemplateRequset.getPosterTemplateName());
         }
         Mono<Long> update1 = template.update(Query.query(empty), update, PosterTemplate.class);
-        return  RStatus.success(update1);
+        return RStatus.success(update1);
     }
+
     /**
      * 海报模版删除
+     *
      * @param posterTemplateId
      * @return {@link Mono}<{@link RStatus}<{@link Long}>>
      */
     @DeleteMapping("deletePosterTemById/{posterTemplateId}")
-    public Mono<RStatus<Long>> deletePosterTemById (@PathVariable("posterTemplateId")  @NotNull Long posterTemplateId){
+    public Mono<RStatus<Long>> deletePosterTemById(@PathVariable("posterTemplateId") @NotNull Long posterTemplateId) {
         Mono<Long> plan_new_id = template.delete(Query.query(Criteria.where("poster_template_id").is(posterTemplateId)), PosterTemplate.class);
         return RStatus.success(plan_new_id);
     }
 
     /**
      * 海报模版-编辑回显详情
+     *
      * @param posterTemplateId
      * @return
      */
     @GetMapping("posterTem/{planNewId}")
-    public Mono<RStatus<PosterTemplate>> posterTem(@PathVariable("posterTemplateId")  @NotNull Long posterTemplateId){
+    public Mono<RStatus<PosterTemplate>> posterTem(@PathVariable("posterTemplateId") @NotNull Long posterTemplateId) {
         Mono<PosterTemplate> planNewMono = template
                 .selectOne(Query.query(Criteria.where("poster_template_id")
-                .is(posterTemplateId)), PosterTemplate.class);
+                        .is(posterTemplateId)), PosterTemplate.class);
         return RStatus.success(planNewMono);
     }
 
     /**
      * 海报模版下拉
+     *
      * @param request
      * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link PosterTemplate}>>>
      */
     @PostMapping("posterTemSelect")
-    public Mono<RStatus<List<PosterTemplate>>> posterTemSelect(@RequestBody PosterTemSelect request)   {
-        Criteria criteria= Criteria.empty() ; //poster_template_id
+    public Mono<RStatus<List<PosterTemplate>>> posterTemSelect(@RequestBody PosterTemSelect request) {
+        Criteria criteria = Criteria.empty(); // poster_template_id
         if (Objects.nonNull(request.getName()) && "" != request.getName()) {
             criteria = criteria.and("name").like(request.getName());
         }
@@ -355,19 +379,20 @@ public class PlanNewController {
 
     /**
      * 海报模版-列表
+     *
      * @param request
      * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link PosterTemplate}>>>
      */
     @PostMapping("posterTemList")
-    public Mono<RStatus<Paged<PosterTemplateRes>>> posterTemList(@RequestBody PosterTemPage request)   {
-        Criteria criteria= Criteria.empty() ; //poster_template_id
+    public Mono<RStatus<Paged<PosterTemplateRes>>> posterTemList(@RequestBody PosterTemPage request) {
+        Criteria criteria = Criteria.empty(); // poster_template_id
         if (Objects.nonNull(request.getName()) && "" != request.getName()) {
             criteria = criteria.and("name").is(request.getName());
         }
         Query query = Query.query(criteria);
         Criteria finalCriteria = criteria;
-        int skip  = (request.getPage() - 1) * request.getSize();
-        int limit =  request.getSize();
+        int skip = (request.getPage() - 1) * request.getSize();
+        int limit = request.getSize();
         Mono<Long> count = template.count(query, PosterTemplate.class);
         Flux<PosterTemplateRes> created_at = template.select(Query.query(finalCriteria)
                 .offset(skip)
@@ -394,21 +419,22 @@ public class PlanNewController {
 
     /**
      * 计划保存
+     *
      * @param saveRequest
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
     @PostMapping("savePlan")
-    public Mono<RStatus<String>> savePlan(@RequestBody PlanReq saveRequest){
-        if(2==saveRequest.getType()){
-            return   listeningPlanService.savePlan(saveRequest);
-        }else if(1==saveRequest.getType()){
+    public Mono<RStatus<String>> savePlan(@RequestBody PlanReq saveRequest) {
+        if (2 == saveRequest.getType()) {
+            return listeningPlanService.savePlan(saveRequest);
+        } else if (1 == saveRequest.getType()) {
             String userName = BaseContextHandler.getUserName();
             String userId = BaseContextHandler.getUserId();
             saveRequest.setCode(IdUtil.fastSimpleUUID());
             Long posterTemplateId = saveRequest.getPosterTemplateId();
             Mono<String> stringMono1 = template
                     .select(Query.query(Criteria.where("poster_template_id")
-                            .is(posterTemplateId))
+                                    .is(posterTemplateId))
                             .sort(Sort.by(Sort.Order.asc("created_at"))), Poster.class)
                     .collectList().flatMap(f -> {
                         Poster poster = f.get(0);
@@ -418,18 +444,18 @@ public class PlanNewController {
                         BeanUtil.copyProperties(jsonObject, goRequest);
                         ServiceGroupSettingItemRequest serviceGroupSettingItemRequest = saveRequest.getBackgroupFxSetting().get(0);
                         Mono<String> stringMono = goGenerateService.saveAndUpdatePlanGenerateImage0(goRequest,
-                                goGenerateService.setCusqrcodeSetV(goRequest),//getStringBuilderMono(goRequest),
+                                goGenerateService.setCusqrcodeSetV(goRequest),// getStringBuilderMono(goRequest),
                                 serviceGroupSettingItemRequest,
                                 saveRequest);
                         return stringMono;
                     });
-            Mono<StringBuilder> stringBuilderMono ;
-            if(saveRequest.getRedirectType()==2){
-                stringBuilderMono =Mono.just(new StringBuilder()); //goGenerateService.byPlanNewIdGetUrl(saveRequest.getRedirectPlanId());
-            }else {
-                stringBuilderMono=Mono.just(new StringBuilder(saveRequest.getLink()));
+            Mono<StringBuilder> stringBuilderMono;
+            if (saveRequest.getRedirectType() == 2) {
+                stringBuilderMono = Mono.just(new StringBuilder()); // goGenerateService.byPlanNewIdGetUrl(saveRequest.getRedirectPlanId());
+            } else {
+                stringBuilderMono = Mono.just(new StringBuilder(saveRequest.getLink()));
             }
-            Mono<PlanNew> insert = Mono.zip(stringMono1, stringBuilderMono).flatMap(f->{
+            Mono<PlanNew> insert = Mono.zip(stringMono1, stringBuilderMono).flatMap(f -> {
                 PlanNew plan = new PlanNew(IdUtil.fastSimpleUUID(),
                         saveRequest.getName(),
                         userName,
@@ -473,14 +499,14 @@ public class PlanNewController {
             });
             Mono<String> map = insert.flatMap(f -> {
                 Flux<PlanNewBackgroupPoster> just = getPlanNewBackgroupPosterFlux(saveRequest, f);
-                return  Mono.zip(batchInsert(just), Mono.just(f)).flatMap(ff -> {
+                return Mono.zip(batchInsert(just), Mono.just(f)).flatMap(ff -> {
                     PlanNew t2 = ff.getT2();
                     return Mono.just(t2.planNewId());
                 });
             });
-            return  RStatus.success(map);
+            return RStatus.success(map);
         }
-      throw new BaseException("type类型错误");
+        throw new BaseException("type类型错误");
     }
 
     private Flux<PlanNewBackgroupPoster> getPlanNewBackgroupPosterFlux(PlanReq saveRequest, PlanNew f) {
@@ -504,8 +530,9 @@ public class PlanNewController {
                 .insert(PlanNewBackgroupPoster.class).using(entity)).collectList();
         return listMono;
     }
-    public PlanNewBackgroupPoster fxBackgroupSettingsSave( ServiceGroupSettingItemRequest request,String planNewId,Integer qsOrFx){
-         return new PlanNewBackgroupPoster(null,
+
+    public PlanNewBackgroupPoster fxBackgroupSettingsSave(ServiceGroupSettingItemRequest request, String planNewId, Integer qsOrFx) {
+        return new PlanNewBackgroupPoster(null,
                 request.getAudioId(),
                 request.getGroupId(),
                 request.getImage(),
@@ -520,7 +547,7 @@ public class PlanNewController {
                 ZonedDateTime.now(),
                 null,
                 null,
-                planNewId,null,null);
+                planNewId, null, null);
 //         template.insert(planNewBackgroupPoster).subscribe(f->{
 //             JSONObject jsonObject = JSONUtil.parseObj(f);
 //             System.out.println(jsonObject);
@@ -531,11 +558,12 @@ public class PlanNewController {
 
     /**
      * 修改计划
+     *
      * @param saveRequest
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
     @PostMapping("updatePlan1")
-    public Mono<RStatus<PlanNew>> updatePlan1(@RequestBody PlanReq saveRequest){
+    public Mono<RStatus<PlanNew>> updatePlan1(@RequestBody PlanReq saveRequest) {
         Long posterTemplateId = saveRequest.getPosterTemplateId();
         Mono<String> stringMono1 = template
                 .select(Query.query(Criteria.where("poster_template_id").is(posterTemplateId)).sort(Sort.by(Sort.Order.asc("created_at"))), Poster.class)
@@ -552,11 +580,11 @@ public class PlanNewController {
                 });
         Mono<PlanNew> plan_new_id1 = template.selectOne(Query.query(Criteria.where("plan_new_id").is(saveRequest.getPlanNewId())), PlanNew.class);
 
-        Mono<StringBuilder> stringBuilderMono ;
-        if(saveRequest.getRedirectType()==2){
-            stringBuilderMono = Mono.just(new StringBuilder(""));//goGenerateService.byPlanNewIdGetUrl(saveRequest.getRedirectPlanId());
-        }else {
-            stringBuilderMono=Mono.just(new StringBuilder(saveRequest.getLink()));
+        Mono<StringBuilder> stringBuilderMono;
+        if (saveRequest.getRedirectType() == 2) {
+            stringBuilderMono = Mono.just(new StringBuilder(""));// goGenerateService.byPlanNewIdGetUrl(saveRequest.getRedirectPlanId());
+        } else {
+            stringBuilderMono = Mono.just(new StringBuilder(saveRequest.getLink()));
         }
         Mono<PlanNew> planNewMono = Mono.zip(stringMono1, plan_new_id1, stringBuilderMono).flatMap(f -> {
             PlanNew map = f.getT2();
@@ -631,10 +659,10 @@ public class PlanNewController {
     }
 
     @PostMapping("updatePlan")
-    public Mono<RStatus<String>> updatePlan(@RequestBody PlanReq saveRequest){
-        if(2==saveRequest.getType()){
-            return   listeningPlanService.savePlan(saveRequest);
-        }else if(1==saveRequest.getType()){
+    public Mono<RStatus<String>> updatePlan(@RequestBody PlanReq saveRequest) {
+        if (2 == saveRequest.getType()) {
+            return listeningPlanService.savePlan(saveRequest);
+        } else if (1 == saveRequest.getType()) {
             Long posterTemplateId = saveRequest.getPosterTemplateId();
             Mono<String> stringMono1 = template
                     .select(Query.query(Criteria.where("poster_template_id").is(posterTemplateId)).sort(Sort.by(Sort.Order.asc("created_at"))), Poster.class)
@@ -646,22 +674,22 @@ public class PlanNewController {
                         BeanUtil.copyProperties(jsonObject, goRequest);
                         ServiceGroupSettingItemRequest serviceGroupSettingItemRequest = saveRequest.getBackgroupFxSetting().get(0);
                         Mono<String> stringMono = goGenerateService.saveAndUpdatePlanGenerateImage0(goRequest,
-                              //  goGenerateService.getStringBuilderMono(goRequest),
+                                //  goGenerateService.getStringBuilderMono(goRequest),
                                 goGenerateService.setCusqrcodeSetV(goRequest),
                                 serviceGroupSettingItemRequest, saveRequest);
                         return stringMono;
                     });
             Mono<PlanNew> plan_new_id1 = template.selectOne(Query.query(Criteria.where("plan_new_id").is(saveRequest.getPlanNewId())), PlanNew.class);
-            Mono<StringBuilder> stringBuilderMono ;
-            if(saveRequest.getRedirectType()==2){
-                stringBuilderMono = Mono.just(new StringBuilder(""));//goGenerateService.byPlanNewIdGetUrl(saveRequest.getRedirectPlanId());
-            }else {
-                stringBuilderMono=Mono.just(new StringBuilder(saveRequest.getLink()));
+            Mono<StringBuilder> stringBuilderMono;
+            if (saveRequest.getRedirectType() == 2) {
+                stringBuilderMono = Mono.just(new StringBuilder(""));// goGenerateService.byPlanNewIdGetUrl(saveRequest.getRedirectPlanId());
+            } else {
+                stringBuilderMono = Mono.just(new StringBuilder(saveRequest.getLink()));
             }
             Mono<PlanNew> planNewMono = Mono.zip(stringMono1, plan_new_id1, stringBuilderMono).flatMap(f -> {
                 PlanNew map = f.getT2();
                 PlanNew planNew = new PlanNew(
-                       saveRequest.getPlanNewId(),
+                        saveRequest.getPlanNewId(),
                         saveRequest.getName(),
                         map.createUser(),
                         map.createId(),
@@ -702,13 +730,13 @@ public class PlanNewController {
                 );
                 return Mono.just(planNew);
             }).flatMap(template::update);
-            Mono<String> map = planNewMono.flatMap(f1->{
-                Mono<Long>  ml= template.delete(Query.query(Criteria.where("plan_new_id").is(f1.planNewId())),PlanNewBackgroupPoster.class);
-                return Mono.zip(Mono.just(f1),ml).flatMap(ff->Mono.just(f1));
+            Mono<String> map = planNewMono.flatMap(f1 -> {
+                Mono<Long> ml = template.delete(Query.query(Criteria.where("plan_new_id").is(f1.planNewId())), PlanNewBackgroupPoster.class);
+                return Mono.zip(Mono.just(f1), ml).flatMap(ff -> Mono.just(f1));
             }).flatMap(f -> {
                 Flux<PlanNewBackgroupPoster> just = getPlanNewBackgroupPosterFlux(saveRequest, f);
 
-                return  Mono.zip(batchInsert(just), Mono.just(f)).flatMap(ff -> {
+                return Mono.zip(batchInsert(just), Mono.just(f)).flatMap(ff -> {
                     PlanNew t2 = ff.getT2();
                     return Mono.just(t2.planNewId());
                 });
@@ -718,7 +746,8 @@ public class PlanNewController {
 
         throw new BaseException("type类型错误");
     }
-    public PlanNewBackgroupPoster fxBackgroupSettingsUpdate( ServiceGroupSettingItemRequest request,String planNewId,Integer qsOrFx){
+
+    public PlanNewBackgroupPoster fxBackgroupSettingsUpdate(ServiceGroupSettingItemRequest request, String planNewId, Integer qsOrFx) {
         PlanNewBackgroupPoster planNewBackgroupPoster = new PlanNewBackgroupPoster(request.getId(),
 
                 request.getAudioId(),
@@ -735,20 +764,22 @@ public class PlanNewController {
                 ZonedDateTime.now(),
                 ZonedDateTime.now(),
                 null,
-                planNewId,null,null);
-       // template.insert(planNewBackgroupPoster).subscribe();
+                planNewId, null, null);
+        // template.insert(planNewBackgroupPoster).subscribe();
         return planNewBackgroupPoster;
     }
+
     /**
      * 复制计划
+     *
      * @param planNewId
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
     @GetMapping("copyById/{type}/{planNewId}")
-    public Mono<RStatus<String>> copyById (@PathVariable("type")  @NotNull Integer type,@PathVariable("planNewId")  @NotNull String planNewId){
+    public Mono<RStatus<String>> copyById(@PathVariable("type") @NotNull Integer type, @PathVariable("planNewId") @NotNull String planNewId) {
         if (2 == type) {
-             return listeningPlanService.copyById(planNewId);
-        }else if (1==type){
+            return listeningPlanService.copyById(planNewId);
+        } else if (1 == type) {
             String userName = BaseContextHandler.getUserName();
             String userId = BaseContextHandler.getUserId();
             Mono<PlanNew> plan_new_id = template.selectOne(Query.query(Criteria.where("plan_new_id").is(planNewId)), PlanNew.class)
@@ -793,7 +824,7 @@ public class PlanNewController {
                     )).flatMap(map -> template.insert(map));
             Mono<List<PlanNewBackgroupPoster>> listening_plan_new_id1 =
                     template.select(Query.query(Criteria.where("plan_new_id")
-                            .is(planNewId)), PlanNewBackgroupPoster.class)
+                                    .is(planNewId)), PlanNewBackgroupPoster.class)
                             .collectList();
             Mono<String> stringMono = Mono.zip(plan_new_id, listening_plan_new_id1).flatMap(f -> {
                 PlanNew t1 = f.getT1();
@@ -835,27 +866,28 @@ public class PlanNewController {
 
     /**
      * 删除计划
+     *
      * @param planNewId
      * @return {@link Mono}<{@link RStatus}<{@link Long}>>
      */
     @DeleteMapping("deleteById/{type}/{planNewId}")
-    public Mono<RStatus<Long>> deleteById (@PathVariable("type")  @NotNull Integer type,@PathVariable("planNewId")  @NotNull String planNewId ){
-        if(1==type){
+    public Mono<RStatus<Long>> deleteById(@PathVariable("type") @NotNull Integer type, @PathVariable("planNewId") @NotNull String planNewId) {
+        if (1 == type) {
             Query plan_new_id2 = Query.query(Criteria.where("plan_new_id").is(planNewId));
             Mono<Long> plan_new_id = template.delete(plan_new_id2, PlanNew.class)
-                    .switchIfEmpty(Mono.error(new BaseException("计划id异常"))) //Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
-                    .onErrorResume(throwable -> Mono.error(new Exception("删除计划 " +planNewId+"---"+ type+"error:" + throwable.getMessage())));
+                    .switchIfEmpty(Mono.error(new BaseException("计划id异常"))) // Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
+                    .onErrorResume(throwable -> Mono.error(new Exception("删除计划 " + planNewId + "---" + type + "error:" + throwable.getMessage())));
             Mono<Long> plan_new_id1 = template.count(plan_new_id2, PlanNewBackgroupPoster.class).filter(f -> f > 0)
                     .flatMap(f -> template.delete(plan_new_id2, PlanNewBackgroupPoster.class))
                     .switchIfEmpty(Mono.just(0L));
             Mono<Long> longMono = Mono.zip(plan_new_id1, plan_new_id).flatMap(f -> Mono.just(f.getT1()));
             return RStatus.success(longMono);
-        }else if(2==type) {
+        } else if (2 == type) {
             Query listening_plan_new_id1 = Query.query(Criteria.where("listening_plan_new_id")
                     .is(planNewId));
             Mono<Long> listening_plan_new_id = template.delete(listening_plan_new_id1, ListeningPlanNew.class)
-                    .switchIfEmpty(Mono.error(new BaseException("计划id异常"))) //Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
-                    .onErrorResume(throwable -> Mono.error(new Exception("删除计划 " +planNewId+"---"+ type+"error:" + throwable.getMessage())));
+                    .switchIfEmpty(Mono.error(new BaseException("计划id异常"))) // Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
+                    .onErrorResume(throwable -> Mono.error(new Exception("删除计划 " + planNewId + "---" + type + "error:" + throwable.getMessage())));
             Mono<Long> plan_new_id1 = template.count(listening_plan_new_id1, ListeningPlanNewBackgroupPoster.class).filter(f -> f > 0)
                     .flatMap(f -> template.delete(listening_plan_new_id1, ListeningPlanNewBackgroupPoster.class))
                     .switchIfEmpty(Mono.just(0L));
@@ -867,11 +899,12 @@ public class PlanNewController {
 
     /**
      * 计划-编辑回显详情
+     *
      * @param planNewId
      * @return
      */
     @GetMapping("planNewInfo/{type}/{planNewId}")
-    public Mono<RStatus<PlanNewAllRs>> planNewInfo(@PathVariable("type")  @NotNull Integer type,@PathVariable("planNewId")  @NotNull String planNewId){
+    public Mono<RStatus<PlanNewAllRs>> planNewInfo(@PathVariable("type") @NotNull Integer type, @PathVariable("planNewId") @NotNull String planNewId) {
         if (1 == type) {
             Mono<PlanNewAllRs> planNewAllRsMono = template.selectOne(Query.query(Criteria.where("plan_new_id").is(planNewId)), PlanNew.class)
                     .flatMap(saveRequest -> {
@@ -909,27 +942,27 @@ public class PlanNewController {
                                         saveRequest.redirectType(),
                                         saveRequest.redirectPlanId(),
                                         null,
-                                        Objects.nonNull(saveRequest.importDomain()) && !"".equals(saveRequest.importDomain().trim()) ?Integer.valueOf(saveRequest.importDomain()):null,
-                                        Objects.nonNull(saveRequest.landingPageDomain()) && !"".equals(saveRequest.landingPageDomain().trim()) ?Integer.valueOf(saveRequest.landingPageDomain()):null,
+                                        Objects.nonNull(saveRequest.importDomain()) && !"".equals(saveRequest.importDomain().trim()) ? Integer.valueOf(saveRequest.importDomain()) : null,
+                                        Objects.nonNull(saveRequest.landingPageDomain()) && !"".equals(saveRequest.landingPageDomain().trim()) ? Integer.valueOf(saveRequest.landingPageDomain()) : null,
 
-                                       // saveRequest.landingPageDomain(),
-                                        Objects.nonNull(saveRequest.transferPageDomain()) && !"".equals(saveRequest.transferPageDomain().trim()) ?Integer.valueOf(saveRequest.transferPageDomain()):null,
+                                        // saveRequest.landingPageDomain(),
+                                        Objects.nonNull(saveRequest.transferPageDomain()) && !"".equals(saveRequest.transferPageDomain().trim()) ? Integer.valueOf(saveRequest.transferPageDomain()) : null,
 
-                                        //saveRequest.transferPageDomain(),
+                                        // saveRequest.transferPageDomain(),
                                         saveRequest.transferPageBl(),
-                                        Objects.nonNull(saveRequest.backgroupDomain()) && !"".equals(saveRequest.backgroupDomain().trim()) ?Integer.valueOf(saveRequest.backgroupDomain()):null
+                                        Objects.nonNull(saveRequest.backgroupDomain()) && !"".equals(saveRequest.backgroupDomain().trim()) ? Integer.valueOf(saveRequest.backgroupDomain()) : null
 
-                                       // saveRequest.backgroupDomain()
+                                        // saveRequest.backgroupDomain()
                                 );
                                 return Mono.just(planNewAllRs);
                             }
-                    ).switchIfEmpty(Mono.error(new BaseException("计划id异常"))) //Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
+                    ).switchIfEmpty(Mono.error(new BaseException("计划id异常"))) // Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
                     .onErrorResume(throwable -> Mono.error(new Exception("计划id异常")));
             return RStatus.success(planNewAllRsMono);
-        }else if (2 == type) {
+        } else if (2 == type) {
             Mono<PlanNewAllRs> planNewAllRsMono = template
                     .selectOne(Query.query(Criteria.where("listening_plan_new_id").is(planNewId)),
-                    ListeningPlanNew.class)
+                            ListeningPlanNew.class)
                     .flatMap(saveRequest -> {
                                 PlanNewAllRs planNewAllRs = new PlanNewAllRs(saveRequest.listeningPlanNewId(),
                                         saveRequest.name(),
@@ -974,7 +1007,7 @@ public class PlanNewController {
                                 );
                                 return Mono.just(planNewAllRs);
                             }
-                    ).switchIfEmpty(Mono.error(new BaseException("计划id异常"))) //Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
+                    ).switchIfEmpty(Mono.error(new BaseException("计划id异常"))) // Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
                     .onErrorResume(throwable -> Mono.error(new Exception("计划id异常")));
             return RStatus.success(planNewAllRsMono);
         }
@@ -984,18 +1017,19 @@ public class PlanNewController {
 
     /**
      * 计划列表-下拉(查看自己创建的)(V2.0)
+     *
      * @param request
      * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link PlanNew}>>>
      */
     @PostMapping("planSelectSelf")
-    public Mono<RStatus<List<PlanNew>>> planSelectSelf(@RequestBody PosterTemSelectSelf request)   {
+    public Mono<RStatus<List<PlanNew>>> planSelectSelf(@RequestBody PosterTemSelectSelf request) {
 
         if (Objects.isNull(request.getUserId())) {
-            request.setUserId( BaseContextHandler.getUserId());
+            request.setUserId(BaseContextHandler.getUserId());
         }
-        Criteria criteria= Criteria.where("create_id").is(request.getUserId()) ; //poster_template_id
+        Criteria criteria = Criteria.where("create_id").is(request.getUserId()); // poster_template_id
         if (Objects.nonNull(request.getName()) && "" != request.getName()) {
-            criteria = criteria.and("name").like("%"+request.getName()+"%");
+            criteria = criteria.and("name").like("%" + request.getName() + "%");
         }
         Mono<List<PlanNew>> listMono = template.select(Query.query(criteria), PlanNew.class).collectList();
         return RStatus.successList(listMono);
@@ -1004,12 +1038,13 @@ public class PlanNewController {
 
     /**
      * 计划列表-下拉
+     *
      * @param request
      * @return {@link Mono}<{@link RStatus}<{@link List}<{@link SelectPlanRes1}>>>
      */
     @PostMapping("planSelect")
-    public Mono<RStatus<List<SelectPlanRes1>>> planSelect(@RequestBody PosterTemSelect request)   {
-        Criteria criteria= Criteria.empty() ; //poster_template_id
+    public Mono<RStatus<List<SelectPlanRes1>>> planSelect(@RequestBody PosterTemSelect request) {
+        Criteria criteria = Criteria.empty(); // poster_template_id
         if (Objects.nonNull(request.getName()) && "" != request.getName()) {
             criteria = criteria.and("name").is(request.getName());
         }
@@ -1027,12 +1062,21 @@ public class PlanNewController {
             selectPlanRes1.setPlanNewId(fm.listeningPlanNewId());
             return Mono.just(selectPlanRes1);
         }).collectList();
-        Mono<List<SelectPlanRes1>> arrayListMono = Mono.zip(listMono, listMono1).flatMap(f -> {
+        Mono<List<SelectPlanRes1>> listMono2 = template.select(Query.query(criteria), PlanNewCommon.class).flatMap(fm -> {
+            SelectPlanRes1 selectPlanRes1 = new SelectPlanRes1();
+            selectPlanRes1.setName(fm.name());
+            selectPlanRes1.setType(3);
+            selectPlanRes1.setPlanNewId(fm.id());
+            return Mono.just(selectPlanRes1);
+        }).collectList();
+        Mono<List<SelectPlanRes1>> arrayListMono = Mono.zip(listMono, listMono1, listMono2).flatMap(f -> {
             List<SelectPlanRes1> t1 = f.getT1();
             List<SelectPlanRes1> t2 = f.getT2();
+            List<SelectPlanRes1> t3 = f.getT3();
             ArrayList<SelectPlanRes1> objects = new ArrayList<>();
             objects.addAll(t1);
             objects.addAll(t2);
+            objects.addAll(t3);
             return Mono.just(objects);
         });
         return RStatus.successList(arrayListMono);
@@ -1041,51 +1085,57 @@ public class PlanNewController {
 
     /**
      * 计划列表
-     * @param request
+     *
+     * @param request request
      * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link ListeningPlanNewRes2}>>>
      */
     @PostMapping("planList")
-    public Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(@RequestBody PlanReqPage request)   {
-        if (2 == request.getType()) {
-          return   listeningPlanService.page(request);
-        }else {
-          return getType1(request);
-        }
-    }
-    private Mono<RStatus<Paged<ListeningPlanNewRes2>>> getType1(PlanReqPage request) {
-        Criteria criteria= Criteria.empty() ; //poster_template_id
-        if (Objects.nonNull(request.getCode()) && "" != request.getCode().trim()) {
-            criteria = criteria.and("code").like("%"+request.getCode()+"%");
+    public Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(@RequestBody PlanReqPage request) {
+        Criteria criteria = Criteria.empty(); // poster_template_id
+        if (Objects.nonNull(request.getCode()) && !request.getCode().trim().isEmpty()) {
+            criteria = criteria.and("code").like("%" + request.getCode() + "%");
         }
-        if (Objects.nonNull(request.getName()) && "" != request.getName().trim()) {
-            criteria = criteria.and("name").like("%"+request.getName()+"%");
+        if (Objects.nonNull(request.getName()) && !request.getName().trim().isEmpty()) {
+            criteria = criteria.and("name").like("%" + request.getName() + "%");
         }
-        if (Objects.nonNull(request.getCreateUser()) && "" != request.getCreateUser().trim()) {
-            criteria = criteria.and("create_user").like("%"+request.getCreateUser()+"%");
+        if (Objects.nonNull(request.getCreateUser()) && !request.getCreateUser().trim().isEmpty()) {
+            criteria = criteria.and("create_user").like("%" + request.getCreateUser() + "%");
         }
         if (Objects.nonNull(request.getPosterTemplateId()) && 0L != request.getPosterTemplateId()) {
             criteria = criteria.and("poster_template_id").is(request.getPosterTemplateId());
         }
-//        if (Objects.nonNull(request.getType()) && 0L != request.getType()) {
-//            criteria = criteria.and("type").is(request.getType());
-//        }
+        if (Objects.nonNull(request.getType()) && 0 != request.getType()) {
+            criteria = criteria.and("type").is(request.getType());
+        }
+        if (Objects.nonNull(request.getGroupId()) && 0L != request.getGroupId()) {
+            criteria = criteria.and("group_id").is(request.getType());
+        }
+        if (2 == request.getType()) {
+            return listeningPlanService.page(request, criteria);
+        } else if (1 == request.getType()) {
+            return getType1(request, criteria);
+        } else {
+            return planServiceInterface.page(request, criteria);
+        }
+    }
+
+    private Mono<RStatus<Paged<ListeningPlanNewRes2>>> getType1(PlanReqPage request, Criteria criteria) {
         Query query = Query.query(criteria);
-        Criteria finalCriteria = criteria;
-        int skip  = (request.getPage() - 1) * request.getSize();
-        int limit =  request.getSize();
+        int skip = (request.getPage() - 1) * request.getSize();
+        int limit = request.getSize();
         Mono<Long> count = template.count(query, PlanNew.class);
-        Flux<PlanNew> created_at = template.select(Query.query(finalCriteria)
+        Flux<PlanNew> created_at = template.select(Query.query(criteria)
                 .offset(skip)
                 .limit(limit)
                 .sort(Sort.by(Sort.Order.desc("created_at"))), PlanNew.class);
         Mono<List<ListeningPlanNewRes2>> listMono = created_at.flatMap(f -> {
             Mono<String> poster_template_id = template.selectOne(Query.query(Criteria.where("poster_template_id")
-                    .is(f.posterTemplateId())), PosterTemplate.class).flatMap(f0 -> Mono.just(f0.posterTemplateName()))
-                    .switchIfEmpty(Mono.just("")) //Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
+                            .is(f.posterTemplateId())), PosterTemplate.class).flatMap(f0 -> Mono.just(f0.posterTemplateName()))
+                    .switchIfEmpty(Mono.just("")) // Mono.error(new BaseException("查询海报模版 id:"+f.posterTemplateId()+"=>空"))
                     .onErrorResume(throwable -> Mono.error(new Exception("查询海报模版 id:" + f.posterTemplateId() + "error:" + throwable.getMessage())));
             Mono<String> id = template.selectOne(Query.query(Criteria.where("id").is(f.groupId())), GroupType.class)
                     .flatMap(f1 -> Mono.just(f1.name()))
-                    .switchIfEmpty(Mono.just(""))//Mono.error(new BaseException("查询GroupType id:"+f.groupId()+"=>空"))
+                    .switchIfEmpty(Mono.just(""))// Mono.error(new BaseException("查询GroupType id:"+f.groupId()+"=>空"))
                     .onErrorResume(throwable -> Mono.error(new Exception("查询GroupType id:" + f.groupId() + "error:" + throwable.getMessage())));
             return Mono.zip(Mono.just(f), poster_template_id, id).flatMap(ff -> {
                 PlanNew t1 = ff.getT1();

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

@@ -16,7 +16,7 @@ public class PlanReq {
 //    private String createUser;
 //    private String createId;
     /**
-     * // 1.加群计划 2.听书计划
+     * // 1.加群计划 2.听书计划 3.交友计划
      */
     private  Integer type;
     /**
@@ -152,4 +152,7 @@ public class PlanReq {
      * 背景组域名
      */
     private String backgroupDomain;//背景组域名
+
+    /** 配置json */
+    private String configJson;
 }

+ 19 - 5
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/req/PlanReqPage.java

@@ -1,6 +1,10 @@
 package com.webflux.launchadmin.mysql.controller.planNew.req;
+
 import lombok.Data;
 
+/**
+ * @author moka
+ */
 @Data
 public class PlanReqPage {
 
@@ -8,11 +12,21 @@ public class PlanReqPage {
     private Integer page;
     private Integer size;
 
-
-    private String name; //计划名
+    /**
+     * 计划名
+     */
+    private String name;
     private String createUser;
-    private  Integer type;// 1加群裂变2听书计划
-    private  String code;
-    private  Long posterTemplateId;//海报id
+    /**
+     * 1加群裂变2听书计划
+     */
+    private Integer type;
+    private String code;
+    /**
+     * 海报id
+     */
+    private Long posterTemplateId;
+    /** 分类 */
+    private Long groupId;
 
 }

+ 39 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/planNew/PlanNewCommon.java

@@ -0,0 +1,39 @@
+package com.webflux.launchadmin.mysql.entity.planNew;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.time.ZonedDateTime;
+
+/**
+ * 裂变通用计划配置列表
+ *
+ * @author: wangcheng
+ * @date: 2024/7/9 15:52
+ */
+@Table("plan_new_common")
+public record PlanNewCommon(
+        @Id
+        String id,
+        String name,
+        String code,
+        /* 计划类型(1加群裂变 2听书裂变 3交友裂变) */
+        Integer type,
+        /* 分类id  */
+        Long groupId,
+        /* 海报id */
+        Long posterTemplateId,
+        /* 入口域名 */
+        String importDomain,
+        String previewUrl,
+        String configJson,
+        String createUser,
+        String createId,
+        String updateUser,
+        String updateId,
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        ZonedDateTime createdAt,
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        ZonedDateTime updatedAt) {
+}

+ 2 - 19
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/listening/ListeningPlanServiceImpl.java

@@ -52,28 +52,11 @@ public class ListeningPlanServiceImpl implements ListeningPlanServiceInterface{
     @Resource
     private R2dbcEntityTemplate template;
     @Override
-    public Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(PlanReqPage request) {
-        Criteria criteria= Criteria.empty() ; //poster_template_id
-        if (Objects.nonNull(request.getCode()) && "" != request.getCode().trim()) {
-            criteria = criteria.and("code").like("%"+request.getCode()+"%");
-        }
-        if (Objects.nonNull(request.getName()) && "" != request.getName().trim()) {
-            criteria = criteria.and("name").like("%"+request.getName()+"%");
-        }
-        if (Objects.nonNull(request.getCreateUser()) && "" != request.getCreateUser().trim()) {
-            criteria = criteria.and("create_user").like("%"+request.getCreateUser()+"%");
-        }
-        if (Objects.nonNull(request.getPosterTemplateId()) && 0L != request.getPosterTemplateId()) {
-            criteria = criteria.and("poster_template_id").is(request.getPosterTemplateId());
-        }
-//        if (Objects.nonNull(request.getType()) && 0 != request.getType()) {
-//            criteria = criteria.and("type").is(request.getType());
-//        }
+    public Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(PlanReqPage request, Criteria criteria) {
         Query query = Query.query(criteria);
-        Criteria finalCriteria = criteria;
         int skip  = (request.getPage() - 1) * request.getSize();
         int limit = request.getPage() * request.getSize();
-        return RStatus.successList(Mono.zip(template.count(query, ListeningPlanNew.class), template.select(Query.query(finalCriteria)
+        return RStatus.successList(Mono.zip(template.count(query, ListeningPlanNew.class), template.select(Query.query(criteria)
                 .offset(skip)
                 .limit(limit)
                 .sort(Sort.by(Sort.Order.desc("created_at"))), ListeningPlanNew.class).flatMap(f -> {

+ 2 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/listening/ListeningPlanServiceInterface.java

@@ -14,6 +14,7 @@ import com.webflux.launchadmin.mysql.entity.planNew.PlanNew;
 import com.webflux.launchadmin.mysql.service.planNew.structure.GoRequest;
 import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.RStatus;
+import org.springframework.data.relational.core.query.Criteria;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import reactor.core.publisher.Mono;
@@ -22,7 +23,7 @@ import java.util.List;
 
 public interface ListeningPlanServiceInterface {
      Mono<RStatus<List<GroupType>>> groupTypeSlt ( String name);
-    Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(PlanReqPage request);
+    Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(PlanReqPage request, Criteria criteria);
     Mono<RStatus<String>> savePlan(PlanReq saveRequest);
     Mono<List<StringBuilder>> setCusqrcodeRtUrl(GoRequest goRequest);
     Mono<RStatus<ListeningAudio>> saveOrUpdateAudio(ListeningAudioReq saveRequest);

+ 50 - 24
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/planNew/PlanServiceImpl.java

@@ -1,25 +1,12 @@
 package com.webflux.launchadmin.mysql.service.planNew;
 
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.RandomUtil;
-import cn.hutool.http.HttpUtil;
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.webflux.launchadmin.config.BaseContextHandler;
-import com.webflux.launchadmin.global.BaseException;
-import com.webflux.launchadmin.mysql.controller.listening.req.*;
-import com.webflux.launchadmin.mysql.controller.listening.res.DataListsShare;
 import com.webflux.launchadmin.mysql.controller.listening.res.ListeningPlanNewRes;
+import com.webflux.launchadmin.mysql.controller.listening.res.ListeningPlanNewRes2;
 import com.webflux.launchadmin.mysql.controller.planNew.req.PlanReqPage;
-import com.webflux.launchadmin.mysql.entity.listening.ListeningAudio;
-import com.webflux.launchadmin.mysql.entity.listening.ListeningPlanNew;
-import com.webflux.launchadmin.mysql.entity.listening.ListeningPlanNewBackgroupPoster;
-import com.webflux.launchadmin.mysql.entity.planNew.*;
-import com.webflux.launchadmin.mysql.service.listening.ListeningPlanServiceInterface;
-import com.webflux.launchadmin.mysql.service.planNew.structure.GoRequest;
-import com.webflux.launchadmin.mysql.service.planNew.structure.Item;
+import com.webflux.launchadmin.mysql.entity.planNew.GroupType;
+import com.webflux.launchadmin.mysql.entity.planNew.PlanNew;
+import com.webflux.launchadmin.mysql.entity.planNew.PlanNewCommon;
+import com.webflux.launchadmin.mysql.entity.planNew.PosterTemplate;
 import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.RStatus;
 import jakarta.annotation.Resource;
@@ -29,19 +16,17 @@ 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.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
-import java.time.ZonedDateTime;
 import java.util.Comparator;
 import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
+/**
+ * @author moka
+ */
 @Slf4j
 @Service
 public class PlanServiceImpl implements PlanServiceInterface {
@@ -51,6 +36,47 @@ public class PlanServiceImpl implements PlanServiceInterface {
     @Resource
     private R2dbcEntityTemplate template;
 
-
+    @Override
+    public Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(PlanReqPage request, Criteria criteria) {
+        Query query = Query.query(criteria);
+        int skip  = (request.getPage() - 1) * request.getSize();
+        int limit =  request.getSize();
+        Mono<Long> count = template.count(query, PlanNewCommon.class);
+        Flux<PlanNewCommon> createdAt = template.select(Query.query(criteria)
+                .offset(skip)
+                .limit(limit)
+                .sort(Sort.by(Sort.Order.desc("created_at"))), PlanNewCommon.class);
+        Mono<List<ListeningPlanNewRes2>> listMono = createdAt.flatMap(f -> {
+            Mono<String> posterTemplateId = template.selectOne(Query.query(Criteria.where("poster_template_id")
+                            .is(f.posterTemplateId())), PosterTemplate.class).flatMap(f0 -> Mono.just(f0.posterTemplateName()))
+                    .switchIfEmpty(Mono.just(""))
+                    .onErrorResume(throwable -> Mono.error(new Exception("查询海报模版 id:" + f.posterTemplateId() + "error:" + throwable.getMessage())));
+            Mono<String> id = template.selectOne(Query.query(Criteria.where("id").is(f.groupId())), GroupType.class)
+                    .flatMap(f1 -> Mono.just(f1.name()))
+                    .switchIfEmpty(Mono.just(""))
+                    .onErrorResume(throwable -> Mono.error(new Exception("查询GroupType id:" + f.groupId() + "error:" + throwable.getMessage())));
+            return Mono.zip(Mono.just(f), posterTemplateId, id).flatMap(ff -> {
+                PlanNewCommon t1 = ff.getT1();
+                ListeningPlanNewRes2 listeningPlanNewRes = new ListeningPlanNewRes2();
+                listeningPlanNewRes.setPlanNewId(t1.id());
+                listeningPlanNewRes.setCode(t1.code());
+                listeningPlanNewRes.setName(t1.name());
+                listeningPlanNewRes.setCreatedAt(t1.createdAt());
+                listeningPlanNewRes.setCreateUser(t1.createUser());
+                listeningPlanNewRes.setType(t1.type());
+                listeningPlanNewRes.setGroupName(ff.getT3());
+                listeningPlanNewRes.setPreviewUrl(t1.previewUrl());
+                listeningPlanNewRes.setPosterTemplateName(ff.getT2());
+                return Mono.just(listeningPlanNewRes);
+            });
+        }).collectList();
+        Mono<Paged<ListeningPlanNewRes2>> pagedMono = Mono.zip(count, listMono).flatMap(ff -> {
+            Long t1 = ff.getT1();
+            List<ListeningPlanNewRes2> t2 = ff.getT2().stream().sorted(Comparator.comparing(ListeningPlanNewRes::getCreatedAt).reversed()).collect(Collectors.toList());
+            Paged<ListeningPlanNewRes2> planNewResPaged = new Paged<>(t1, t2, request.getPage(), request.getSize());
+            return Mono.just(planNewResPaged);
+        });
+        return RStatus.successList(pagedMono);
+    }
 
 }

+ 6 - 9
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/planNew/PlanServiceInterface.java

@@ -1,19 +1,16 @@
 package com.webflux.launchadmin.mysql.service.planNew;
 
-import com.webflux.launchadmin.mysql.controller.listening.req.*;
-import com.webflux.launchadmin.mysql.controller.listening.res.DataListsShare;
-import com.webflux.launchadmin.mysql.controller.listening.res.ListeningPlanNewRes;
+import com.webflux.launchadmin.mysql.controller.listening.res.ListeningPlanNewRes2;
 import com.webflux.launchadmin.mysql.controller.planNew.req.PlanReqPage;
-import com.webflux.launchadmin.mysql.entity.listening.ListeningAudio;
-import com.webflux.launchadmin.mysql.entity.listening.ListeningPlanNew;
-import com.webflux.launchadmin.mysql.entity.planNew.GroupType;
-import com.webflux.launchadmin.mysql.service.planNew.structure.GoRequest;
 import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.RStatus;
+import org.springframework.data.relational.core.query.Criteria;
 import reactor.core.publisher.Mono;
 
-import java.util.List;
-
+/**
+ * @author moka
+ */
 public interface PlanServiceInterface {
+    Mono<RStatus<Paged<ListeningPlanNewRes2>>> page(PlanReqPage request, Criteria criteria);
 
 }