Explorar el Código

plan-java v0.07

MOKASZ\lw12420 hace 2 años
padre
commit
c6cd34d532

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

@@ -14,8 +14,9 @@ import jakarta.annotation.Resource;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
 import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
 import org.springframework.data.relational.core.query.Criteria;
 import org.springframework.data.relational.core.query.Criteria;
 import org.springframework.data.relational.core.query.Query;
 import org.springframework.data.relational.core.query.Query;
+
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
-import reactor.core.publisher.Flux;
+
 import reactor.core.publisher.Mono;
 import reactor.core.publisher.Mono;
 
 
 import java.util.*;
 import java.util.*;

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

@@ -6,9 +6,11 @@ import com.webflux.launchadmin.mysql.controller.lbOut.resp.DataList;
 import com.webflux.launchadmin.mysql.controller.planNew.req.*;
 import com.webflux.launchadmin.mysql.controller.planNew.req.*;
 import com.webflux.launchadmin.mysql.controller.planNew.res.BackgroupImageRes;
 import com.webflux.launchadmin.mysql.controller.planNew.res.BackgroupImageRes;
 import com.webflux.launchadmin.mysql.controller.planNew.res.DataLists;
 import com.webflux.launchadmin.mysql.controller.planNew.res.DataLists;
+import com.webflux.launchadmin.mysql.controller.planNew.res.PosterRes;
 import com.webflux.launchadmin.mysql.controller.planNew.res.PosterTemplateRes;
 import com.webflux.launchadmin.mysql.controller.planNew.res.PosterTemplateRes;
 import com.webflux.launchadmin.mysql.entity.lb.HomePageTempItem;
 import com.webflux.launchadmin.mysql.entity.lb.HomePageTempItem;
 import com.webflux.launchadmin.mysql.entity.planNew.*;
 import com.webflux.launchadmin.mysql.entity.planNew.*;
+import com.webflux.launchadmin.mysql.service.planNew.goGenerate.GoGenerateService;
 import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.RStatus;
 import com.webflux.launchcommon.returnObj.RStatus;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
@@ -41,6 +43,17 @@ public class PlanNewController {
     @Resource
     @Resource
     private R2dbcEntityTemplate template;
     private R2dbcEntityTemplate template;
 
 
+    @Resource
+    private GoGenerateService goGenerateService;
+
+
+    @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\": \"\"}";
+
+        return goGenerateService.GoGenerate(str);
+    }
+
 
 
     /**
     /**
      * 分享、清水背景组-回显
      * 分享、清水背景组-回显
@@ -155,13 +168,15 @@ public class PlanNewController {
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
      */
     @PostMapping("savePoster")
     @PostMapping("savePoster")
-    public Mono<RStatus<Poster>> savePoster(@RequestBody PosterRequest posterRequset){
-        Poster poster = new Poster(null, posterRequset.getPosterTemplateId()
-                ,posterRequset.getPosterTemplate(), BaseContextHandler.getUserName(),
-                BaseContextHandler.getUserId(), ZonedDateTime.now(),
-                ZonedDateTime.now());
-        Mono<Poster> insert = template.insert(poster);
-        return RStatus.success(insert);
+    public Mono<RStatus<PosterRes>> savePoster(@RequestBody PosterRequest posterRequset){
+
+        return goGenerateService.savePoster(posterRequset);
+//        Poster poster = new Poster(null, posterRequset.getPosterTemplateId()
+//                ,posterRequset.getPosterTemplate(), BaseContextHandler.getUserName(),
+//                BaseContextHandler.getUserId(), ZonedDateTime.now(),
+//                ZonedDateTime.now());
+//        Mono<Poster> insert = template.insert(poster);
+//        return RStatus.success(insert);
     }
     }
 
 
     /**
     /**
@@ -170,15 +185,15 @@ public class PlanNewController {
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      * @return {@link Mono}<{@link RStatus}<{@link PlanNew}>>
      */
      */
     @PostMapping("updatePoster")
     @PostMapping("updatePoster")
-    public Mono<RStatus<Long>> updatePoster(@RequestBody PosterRequest posterRequset){
-
-        Criteria empty = Criteria.where("poster_id").is(posterRequset.getPosterId());
-        Update update = Update.update("updated_at", ZonedDateTime.now());
-        if(Objects.nonNull(posterRequset.getPosterTemplate()) && !"".equals(posterRequset.getPosterTemplate())){
-            update.set("poster_template",posterRequset.getPosterTemplate());
-        }
-        Mono<Long> update1 = template.update(Query.query(empty), update, Poster.class);
-        return  RStatus.success(update1);
+    public Mono<RStatus<PosterRes>> updatePoster(@RequestBody PosterRequest posterRequset){
+        return goGenerateService.updatePoster(posterRequset);
+//        Criteria empty = Criteria.where("poster_id").is(posterRequset.getPosterId());
+//        Update update = Update.update("updated_at", ZonedDateTime.now());
+//        if(Objects.nonNull(posterRequset.getPosterTemplate()) && !"".equals(posterRequset.getPosterTemplate())){
+//            update.set("poster_template",posterRequset.getPosterTemplate());
+//        }
+//        Mono<Long> update1 = template.update(Query.query(empty), update, Poster.class);
+//        return  RStatus.success(update1);
     }
     }
 
 
     /**
     /**

+ 94 - 4
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/planNew/PlanNewOutController.java

@@ -12,6 +12,7 @@ import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
 import org.springframework.data.relational.core.query.Criteria;
 import org.springframework.data.relational.core.query.Criteria;
 import org.springframework.data.relational.core.query.Query;
 import org.springframework.data.relational.core.query.Query;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 import reactor.core.publisher.Mono;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -20,6 +21,8 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.LongAdder;
 import java.util.concurrent.atomic.LongAdder;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
 
 
 /**
 /**
  * 计划-H5
  * 计划-H5
@@ -39,6 +42,93 @@ public class PlanNewOutController {
      */
      */
     @PostMapping("hfoInfo")
     @PostMapping("hfoInfo")
     public Mono<RStatus<DataLists>> hfoInfo(@RequestBody HfoRequest request){
     public Mono<RStatus<DataLists>> hfoInfo(@RequestBody HfoRequest request){
+        Mono<PlanNew> code = template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNew.class);
+        // //类型 1素材分类2清水分类
+        Mono<List<Domain>> domain = code.flatMap(plan -> template.select(Query.query(Criteria.where("group_type").is(1)), Domain.class).collectList());
+        Mono<List<Image>> image = template.select(Query.query(Criteria.where("type").is(1)), Image.class).collectList();
+        Mono<List<Material>> text = template.select(Query.query(Criteria.where("type").is(4)), Material.class).collectList();
+        Mono<List<H5ImageAndText>> arrayListMono = Mono.zip(code, domain, image, text).flatMap(f -> {
+            //H5ImageAndText
+            Integer integer = f.getT1().pageShow();//群数量
+            List<Domain> t2 = f.getT2();
+            List<Image> t3 = f.getT3();
+            List<Material> t4 = f.getT4();
+            List<H5ImageAndText> h5ImageAndTexts = new ArrayList<>();
+            IntStream.range(0, integer).forEach(i -> {
+                Image image1 = t3.get(Math.min(i, t3.size()));
+                Domain domain1 = t2.get(Math.min(i, t2.size()));
+                Material material = t4.get(Math.min(i, t4.size()));
+                H5ImageAndText h5ImageAndText = new H5ImageAndText();
+                h5ImageAndText.setImage(image1.image());
+                h5ImageAndText.setDomain(domain1.domain());
+                h5ImageAndText.setName(material.content());
+                h5ImageAndTexts.add(h5ImageAndText);
+            });
+            return Mono.just(h5ImageAndTexts);
+        });
+
+        Mono<Audio> listAudio = code.flatMap(plan -> template.selectOne(Query.query(Criteria.where("code").is(plan.listAudioId())), Audio.class));
+        Mono<Audio> retAudioId = code.flatMap(plan -> template.selectOne(Query.query(Criteria.where("code").is(plan.retAudioId())), Audio.class));
+        Mono<ReturnLoop> returnLoop = code.flatMap(plan -> template.selectOne(Query.query(Criteria.where("id").is(plan.returnLoopId())), ReturnLoop.class));
+        Mono<List<Ad>> adtop = template.select(Query.query(Criteria.where("type").is(1)), Ad.class).collectList();////广告类型1顶部2底部3返回4安卓,ios的返回
+        Mono<List<Ad>> bottom = template.select(Query.query(Criteria.where("type").is(2)), Ad.class).collectList();
+
+        Mono<DataLists> dataListsMono = Mono.zip(code, listAudio, retAudioId, returnLoop, arrayListMono,adtop, bottom).flatMap(f -> {
+            DataLists dataLists = new DataLists();
+            dataLists.setPlanNew(f.getT1());
+            dataLists.setListAudio(f.getT2());
+            dataLists.setRetAudio(f.getT3());
+            dataLists.setReturnLoop(f.getT4());
+            dataLists.setImages(f.getT5());
+            if (f.getT1().topAdvBl()==1) {
+                List<Ad> ads = f.getT6().subList(0, f.getT1().topAdvNum());
+                dataLists.setTopAd(ads);
+            }
+            if (f.getT1().bottomAdvBl()==1) {
+                List<Ad> ads = f.getT7().subList(0, f.getT1().bottomAdvNum());
+                dataLists.setBottomAd(ads);
+            }
+            return Mono.just(dataLists);
+        });
+
+        return RStatus.successList(dataListsMono);
+    }
+    /**
+     * h5-通过code (第二个接口)
+     * @param request
+     * @return {@link Mono}<{@link RStatus}<{@link DataLists}>>
+     */
+    @PostMapping("hftInfo")
+    public Mono<RStatus<DataLists0>> hftInfo(@RequestBody HftRequest request){
+
+        Mono<PlanNew> code = template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNew.class);
+        Mono<PosterTemplate> poster_template = code.flatMap(plan -> template.selectOne(Query.query(Criteria.where("poster_template_id")
+                .is(plan.posterTemplateId())), PosterTemplate.class));
+        Mono<List<Poster>> Poster = code.flatMap(plan -> template.select(Query.query(Criteria.where("poster_template_id")
+                .is(plan.posterTemplateId())), Poster.class).collectList());
+        Mono<List<PlanNewBackgroupPoster>> planNewBackgroupPoster = code.flatMap(plan -> template.select(Query.query(Criteria.where("plan_new_id")
+                .is(plan.planNewId())), PlanNewBackgroupPoster.class)
+                .collectList());
+        Mono<DataLists0> dataLists0Mono = Mono.zip(code, poster_template, Poster, planNewBackgroupPoster).flatMap(f -> {
+            DataLists0 dataLists0 = new DataLists0();
+            dataLists0.setPlanNew(f.getT1());
+            dataLists0.setPosterTemplate(f.getT2());
+            dataLists0.setPoster(f.getT3());
+            Map<Integer, List<PlanNewBackgroupPoster>> collect = f.getT4().stream().collect(Collectors.groupingBy(PlanNewBackgroupPoster::qsOrFx));
+            dataLists0.setFxSetting(collect.get(1));
+            dataLists0.setQsSetting(collect.get(2));
+            return Mono.just(dataLists0);
+        });
+        return RStatus.successList(dataLists0Mono);
+    }
+
+    /**
+     * 废弃/废弃/废弃/废弃/废弃/废弃/ h5-通过code (第一个接口)
+     * @param request
+     * @return {@link Mono}<{@link RStatus}<{@link DataLists}>>
+     */
+    @PostMapping("hfoInfo1")
+    public Mono<RStatus<DataLists>> hfoInfo1(@RequestBody HfoRequest request){
         Mono<DataLists> map = Mono.just(new DataLists()).map(dataLists -> {
         Mono<DataLists> map = Mono.just(new DataLists()).map(dataLists -> {
             template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNew.class)
             template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNew.class)
                     .subscribe(dataLists::setPlanNew);
                     .subscribe(dataLists::setPlanNew);
@@ -101,12 +191,12 @@ public class PlanNewOutController {
         return RStatus.successList(map);
         return RStatus.successList(map);
     }
     }
     /**
     /**
-     * h5-通过code (第二个接口)
+     *废弃/废弃/废弃/废弃/废弃/废弃/  h5-通过code (第二个接口)
      * @param request
      * @param request
      * @return {@link Mono}<{@link RStatus}<{@link DataLists}>>
      * @return {@link Mono}<{@link RStatus}<{@link DataLists}>>
      */
      */
-    @PostMapping("hftInfo")
-    public Mono<RStatus<DataLists0>> hftInfo(@RequestBody HftRequest request){
+    @PostMapping("hftInfo1")
+    public Mono<RStatus<DataLists0>> hftInfo1(@RequestBody HftRequest request){
         Mono<DataLists0> map = Mono.just(new DataLists0()).map(dataLists -> {
         Mono<DataLists0> map = Mono.just(new DataLists0()).map(dataLists -> {
             template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNew.class)
             template.selectOne(Query.query(Criteria.where("code").is(request.getCode())), PlanNew.class)
                     .subscribe(dataLists::setPlanNew);
                     .subscribe(dataLists::setPlanNew);
@@ -137,7 +227,7 @@ public class PlanNewOutController {
 
 
 
 
     /**
     /**
-     * H5 接口(第一版废弃)
+     * 废弃/废弃/废弃/废弃/废弃/废弃/ H5 接口(第一版废弃)
      * @param request
      * @param request
      * @return {@link Mono}<{@link RStatus}<{@link DataLists1}>>
      * @return {@link Mono}<{@link RStatus}<{@link DataLists1}>>
      */
      */

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

@@ -1,5 +1,6 @@
 package com.webflux.launchadmin.mysql.controller.planNew.req;
 package com.webflux.launchadmin.mysql.controller.planNew.req;
 
 
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.Data;
 
 
 @Data
 @Data
@@ -13,5 +14,6 @@ public class PosterRequest {
     /**
     /**
      * 内容
      * 内容
      */
      */
+    @NotNull
    private String posterTemplate;
    private String posterTemplate;
 }
 }

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

@@ -12,4 +12,8 @@ public class H5ImageAndText {
      * 群封面名称
      * 群封面名称
      */
      */
   private String name;
   private String name;
+    /**
+     * 域名
+     */
+  private String  domain;
 }
 }

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

@@ -0,0 +1,25 @@
+package com.webflux.launchadmin.mysql.controller.planNew.res;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class PosterRes {
+
+   private Long posterId;
+    /**
+     * 模版Id
+     */
+   private Long posterTemplateId;
+    /**
+     * 内容
+     */
+    @NotNull
+   private String posterTemplate;
+
+    /**
+     * 生成url
+     */
+    String generateImagesUrl;
+
+}

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

@@ -0,0 +1,13 @@
+package com.webflux.launchadmin.mysql.entity.planNew;
+
+import io.r2dbc.spi.Parameter;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+@Table("domain")
+public record Domain(
+        @Id Long id,
+        Integer groupType, //类型 1素材分类2清水分类
+        String domain //域名
+) {
+}

+ 9 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/planNew/Poster.java

@@ -14,6 +14,14 @@ public record Poster(
         String createUser,
         String createUser,
         String createId,
         String createId,
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime createdAt,
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime createdAt,
-        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime updatedAt
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime updatedAt,
+        /**
+         * go 返回结构
+         */
+        String generateImagesJson,
+        /**
+         * 生成图片
+         */
+        String generateImagesUrl
 ) {
 ) {
 }
 }

+ 186 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/planNew/goGenerate/GoGenerateService.java

@@ -1,8 +1,194 @@
 package com.webflux.launchadmin.mysql.service.planNew.goGenerate;
 package com.webflux.launchadmin.mysql.service.planNew.goGenerate;
 
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.http.HttpUtil;
+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.AudioRequest;
+import com.webflux.launchadmin.mysql.controller.planNew.req.PosterRequest;
+import com.webflux.launchadmin.mysql.controller.planNew.res.PosterRes;
+import com.webflux.launchadmin.mysql.entity.planNew.Ad;
+import com.webflux.launchadmin.mysql.entity.planNew.Image;
+import com.webflux.launchadmin.mysql.entity.planNew.Material;
+import com.webflux.launchadmin.mysql.entity.planNew.Poster;
+import com.webflux.launchadmin.mysql.service.planNew.structure.GoRequest;
+import com.webflux.launchadmin.mysql.service.planNew.structure.Item;
+import com.webflux.launchcommon.returnObj.RStatus;
+import jakarta.annotation.Resource;
+import org.springframework.beans.factory.annotation.Value;
+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.data.relational.core.query.Update;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+import reactor.core.publisher.Mono;
+
+import java.time.ZonedDateTime;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.locks.Lock;
 
 
 @Service
 @Service
 public class GoGenerateService {
 public class GoGenerateService {
 
 
+    @Value("${go.data.createImage}")
+    private String value;
+
+    @Resource
+    private R2dbcEntityTemplate template;
+
+    //http://wx-share-test.duiweize.com
+    ///api/image/createImage
+
+    //http://wx-share-8.duiweize.com 正式
+    public String GoGenerate(String temStr){
+        JSONObject jsonObject = JSONUtil.parseObj(temStr);
+        GoRequest goRequest = new GoRequest();
+        BeanUtil.copyProperties(jsonObject,goRequest);
+        String post = HttpUtil.post(value + "/api/image/createImage", JSONUtil.parseObj(goRequest));
+        return post;
+
+    }
+
+    public Mono<RStatus<PosterRes>> savePoster(PosterRequest posterRequset){
+        Poster poster = new Poster(null, posterRequset.getPosterTemplateId()
+                ,posterRequset.getPosterTemplate(), BaseContextHandler.getUserName(),
+                BaseContextHandler.getUserId(), ZonedDateTime.now(),
+                ZonedDateTime.now(),null,null);
+        Mono<Poster> insert = template.insert(poster)
+                .switchIfEmpty(Mono.error(new BaseException(" 操作失败")))
+                .onErrorResume(throwable -> Mono.error(new Exception(throwable.getMessage())));;
+
+        String posterTemplate = posterRequset.getPosterTemplate();
+        JSONObject jsonObject = JSONUtil.parseObj(posterTemplate);
+        GoRequest goRequest = new GoRequest();
+        BeanUtil.copyProperties(jsonObject,goRequest);
+        if (goRequest.getIsRandom()) {
+            // 背景
+            Mono<List<Image>> bgImage = template.select(Query.query(Criteria.where("type").is(2)), Image.class).collectList();
+            //封面
+            Mono<List<Image>> fmImage = template.select(Query.query(Criteria.where("type").is(1)), Image.class).collectList();
+            //文字
+            Mono<List<Material>> text = template.select(Query.query(Criteria.where("type").is(1)), Material.class).collectList();
+            Mono<String> stringMono = Mono.zip(bgImage, fmImage, text).flatMap(f -> {
+                Optional<Image> first = f.getT1().stream().findFirst();
+                first.ifPresent(image -> goRequest.setBg_img_src(image.image()));
+                Optional<Image> first1 = f.getT2().stream().findFirst();
+                first1.ifPresent(image -> goRequest.getItem().stream()
+                        .filter(ff -> "image".equals(ff.getT()))
+                        .findFirst()
+                        .ifPresent(item -> item.setV(image.image())));
+                Optional<Material> first2 = f.getT3().stream().findFirst();
+                first2.ifPresent(material -> goRequest.getItem().stream()
+                        .filter(ff -> "text".equals(ff.getT()))
+                        .findFirst()
+                        .ifPresent(item -> item.setV(material.content())));
+                String s = GoGenerate(JSONUtil.toJsonStr(goRequest));
+                return Mono.just(s);
+            });
+            Mono<PosterRes> zip = getPosterResMono(insert, stringMono);
+            return RStatus.success(zip);
+        }else {
+            String s = GoGenerate(JSONUtil.toJsonStr(goRequest));
+            Mono<PosterRes> zip = getPosterResMono(insert, Mono.just(s));
+            return RStatus.success(zip);
+        }
+    }
+
+    private Mono<PosterRes> getPosterResMono(Mono<Poster> insert, Mono<String> stringMono) {
+        Mono<PosterRes> zip = Mono.zip(insert, stringMono, (entry, ret) -> {
+            PosterRes posterRes = new PosterRes();
+            posterRes.setPosterId(entry.posterId());
+            posterRes.setPosterTemplate(entry.posterTemplate());
+            posterRes.setPosterTemplateId(entry.posterTemplateId());
+            JSONObject jsonObject1 = JSONUtil.parseObj(ret);
+            Criteria empty = Criteria.where("poster_id").is(entry.posterId());
+            Update update = Update.update("updated_at", ZonedDateTime.now());
+            if (jsonObject1.containsKey("code") && jsonObject1.get("code", Integer.class) == 0 && jsonObject1.containsKey("data")) {
+                JSONObject data = jsonObject1.get("data", JSONObject.class);
+                if (data.containsKey("url")) {
+                    String url = data.get("url", String.class);
+                    update.set("generate_images_url", url);
+                    update.set("generate_images_Jjson", ret);
+                    posterRes.setGenerateImagesUrl(url);
+                    template.update(Query.query(empty), update, Poster.class)
+                            .switchIfEmpty(Mono.error(new BaseException(" 操作失败")))
+                            .onErrorResume(throwable -> Mono.error(new Exception(throwable.getMessage())));
+                }
+            }
+            return posterRes;
+        });
+        return zip;
+    }
+
+    public Mono<RStatus<PosterRes>> updatePoster(@RequestBody PosterRequest posterRequset){
+
+        String posterTemplate = posterRequset.getPosterTemplate();
+        JSONObject jsonObject = JSONUtil.parseObj(posterTemplate);
+        GoRequest goRequest = new GoRequest();
+        BeanUtil.copyProperties(jsonObject,goRequest);
+        if (goRequest.getIsRandom()) {
+            // 背景
+            Mono<List<Image>> bgImage = template.select(Query.query(Criteria.where("type").is(2)), Image.class).collectList();
+            //封面
+            Mono<List<Image>> fmImage = template.select(Query.query(Criteria.where("type").is(1)), Image.class).collectList();
+            //文字
+            Mono<List<Material>> text = template.select(Query.query(Criteria.where("type").is(1)), Material.class).collectList();
+            Mono<String> stringMono = Mono.zip(bgImage, fmImage, text).flatMap(f -> {
+                Optional<Image> first = f.getT1().stream().findFirst();
+                first.ifPresent(image -> goRequest.setBg_img_src(image.image()));
+                Optional<Image> first1 = f.getT2().stream().findFirst();
+                first1.ifPresent(image -> goRequest.getItem().stream()
+                        .filter(ff -> "image".equals(ff.getT()))
+                        .findFirst()
+                        .ifPresent(item -> item.setV(image.image())));
+                Optional<Material> first2 = f.getT3().stream().findFirst();
+                first2.ifPresent(material -> goRequest.getItem().stream()
+                        .filter(ff -> "text".equals(ff.getT()))
+                        .findFirst()
+                        .ifPresent(item -> item.setV(material.content())));
+                String s = GoGenerate(JSONUtil.toJsonStr(goRequest));
+                return Mono.just(s);
+            });
+            Mono<PosterRes> zip = getPosterResMono2(Mono.just(posterRequset), stringMono);
+            return RStatus.success(zip);
+        }else {
+            String s = GoGenerate(JSONUtil.toJsonStr(goRequest));
+            Mono<PosterRes> zip = getPosterResMono2(Mono.just(posterRequset), Mono.just(s));
+            return RStatus.success(zip);
+        }
+    }
+
+    private Mono<PosterRes> getPosterResMono2(Mono<PosterRequest> insert, Mono<String> stringMono) {
+        Mono<PosterRes> zip = Mono.zip(insert, stringMono, (entry, ret) -> {
+            PosterRes posterRes = new PosterRes();
+            posterRes.setPosterId(entry.getPosterId());
+            posterRes.setPosterTemplate(entry.getPosterTemplate());
+            posterRes.setPosterTemplateId(entry.getPosterTemplateId());
+            JSONObject jsonObject1 = JSONUtil.parseObj(ret);
+            Criteria empty = Criteria.where("poster_id").is(entry.getPosterId());
+            Update update = Update.update("updated_at", ZonedDateTime.now());
+            update.set("poster_template",entry.getPosterTemplate());
+            if (jsonObject1.containsKey("code") && jsonObject1.get("code", Integer.class) == 0 && jsonObject1.containsKey("data")) {
+                JSONObject data = jsonObject1.get("data", JSONObject.class);
+                if (data.containsKey("url")) {
+                    String url = data.get("url", String.class);
+                    update.set("generate_images_url", url);
+                    update.set("generate_images_Jjson", ret);
+                    posterRes.setGenerateImagesUrl(url);
+                    template.update(Query.query(empty), update, Poster.class)
+                            .switchIfEmpty(Mono.error(new BaseException(" 操作失败")))
+                            .onErrorResume(throwable -> Mono.error(new Exception(throwable.getMessage())));
+                }
+            }
+            return posterRes;
+        });
+        return zip;
+    }
 }
 }

+ 1 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/planNew/structure/GoRequest.java

@@ -9,6 +9,7 @@ public class GoRequest {
    private  Integer width;
    private  Integer width;
    private  Integer height;
    private  Integer height;
    private  String bg_img_src;
    private  String bg_img_src;
+   private  Boolean isRandom;
    private List<Item> item;
    private List<Item> item;
 
 
 }
 }

+ 4 - 0
launch-admin/src/main/resources/application-dev.yml

@@ -10,3 +10,7 @@ spring:
     url: r2dbcs:mysql://rm-uf6xylut5n33hb3o5.mysql.rds.aliyuncs.com:3306/wx_share_8?serverZoneId=GMT%2b8&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&ssl=false&sslMode=DISABLED
     url: r2dbcs:mysql://rm-uf6xylut5n33hb3o5.mysql.rds.aliyuncs.com:3306/wx_share_8?serverZoneId=GMT%2b8&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&ssl=false&sslMode=DISABLED
     username: wx_share_liuwei
     username: wx_share_liuwei
     password: Wx_ShARe56578AwCH
     password: Wx_ShARe56578AwCH
+
+go:
+  data:
+    createImage: "http://wx-share-test.duiweize.com"

+ 5 - 0
launch-admin/src/main/resources/application-prod.yml

@@ -10,3 +10,8 @@ spring:
     url: r2dbcs:mysql://rm-uf6xylut5n33hb3o5.mysql.rds.aliyuncs.com:3306/wx_share_8?serverZoneId=GMT%2b8&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&ssl=false&sslMode=DISABLED
     url: r2dbcs:mysql://rm-uf6xylut5n33hb3o5.mysql.rds.aliyuncs.com:3306/wx_share_8?serverZoneId=GMT%2b8&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&ssl=false&sslMode=DISABLED
     username: wx_share_liuwei
     username: wx_share_liuwei
     password: Wx_ShARe56578AwCH
     password: Wx_ShARe56578AwCH
+
+
+go:
+  data:
+    createImage: "http://wx-share-8.duiweize.com"

+ 17 - 0
launch-admin/src/main/resources/application-test.yml

@@ -0,0 +1,17 @@
+spring:
+  data:
+    redis:
+      host: 47.103.172.247
+      port: 52525
+      password: NTZY_LOg666%$_redis
+      database: 0
+      timeout: 10000
+  r2dbc:
+    url: r2dbcs:mysql://rm-uf6xylut5n33hb3o5ro.mysql.rds.aliyuncs.com:3306/wx_share_test?serverZoneId=GMT%2b8&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&ssl=false&sslMode=DISABLED
+    username: wx_share_liuwei
+    password: Wx_ShARe56578AwCH
+
+
+go:
+  data:
+    createImage: "http://wx-share-test.duiweize.com"