From ee29ec0c77c001c562e249efa8c415de7a04f5d4 Mon Sep 17 00:00:00 2001
From: du <13220750630.163.com>
Date: 星期四, 17 四月 2025 08:44:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/CourseMediaController.java        |   22 +++++++
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaRespVO.java         |    3 +
 easegen-front/vite.config.ts                                                                                                                                                 |    2 
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaSubtitlesReqVO.java |   10 +++
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceImpl.java                |  105 ++++++++++++++++++++++++++++++++++-
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java                |    2 
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/coursemedia/CourseMediaDO.java                  |    8 ++
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaService.java                    |    4 +
 8 files changed, 150 insertions(+), 6 deletions(-)

diff --git a/easegen-front/vite.config.ts b/easegen-front/vite.config.ts
index b32a0dd..a69835c 100644
--- a/easegen-front/vite.config.ts
+++ b/easegen-front/vite.config.ts
@@ -36,7 +36,7 @@
             open: env.VITE_OPEN === 'true',
             proxy: {
               '/admin-api': {
-                target: 'http://192.168.3.159:48080',
+                target: 'http://192.168.3.190:48080',
                 changeOrigin: true,
                 // 涓嶈 rewrite锛屽洜涓鸿淇濈暀瀹屾暣璺緞
               }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/CourseMediaController.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/CourseMediaController.java
index 7f9b302..2170434 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/CourseMediaController.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/CourseMediaController.java
@@ -126,9 +126,31 @@
         return courseMediaService.createSubtitlesVideo(courseMediaSubtitlesReqVO);
     }
 
+    /**
+     * 鏇存柊瀛楀箷鏂囦欢
+     * @param updateReqVO
+     * @return
+     */
+
     @PutMapping("/updateSubtitles")
     public CommonResult<Boolean> updateSubtitles(@Valid @RequestBody CourseMediaEditSReqVO updateReqVO) {
         courseMediaService.updateSubtitles(updateReqVO);
         return success(true);
     }
+
+    /**
+     * 涓婁紶鐗囧ご鐗囧熬
+     */
+    @PostMapping("/createTrailer")
+    public CommonResult createTrailer(@RequestBody CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO){
+        return courseMediaService.createTrailer(courseMediaSubtitlesReqVO);
+    }
+
+    /**
+     * 鍚堟垚鐗囧ご鐗囧熬
+     */
+    @PostMapping("/createCompositeVideo")
+    public CommonResult createCompositeVideo(@RequestBody CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO){
+        return courseMediaService.createCompositeVideo(courseMediaSubtitlesReqVO);
+    }
 }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaRespVO.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaRespVO.java
index caa2e83..1cc3472 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaRespVO.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaRespVO.java
@@ -86,4 +86,7 @@
     private String lang;
     private Integer pos;
     private String progressVideo;
+    private String titles;
+    private String trailer;
+    private String compositeVideo;
 }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaSubtitlesReqVO.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaSubtitlesReqVO.java
index 56d38f0..3f577a4 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaSubtitlesReqVO.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaSubtitlesReqVO.java
@@ -10,7 +10,7 @@
 
     @Schema(description = "缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "12757")
     private Long id;
-
+    private String courseName;
     @Schema(description = "瀛楀箷鏂囦欢鍦板潃")
     private String subtitlesUrl;
     @Schema(description = "瀛楀箷鏂囦欢鐢熸垚鐘舵��1鍚堟垚涓紝2鎴愬姛锛�3澶辫触")
@@ -21,4 +21,12 @@
     private String videoUrl;
     private String lang;
     private String sentenceGap;
+    //濯掍綋閾炬帴
+    private String previewUrl;
+    // 鐗囧ご鍦板潃
+    private String titles;
+    //鐗囧熬鍦板潃
+    private String trailer;
+    //鍚堟垚瑙嗛鍦板潃
+    private String compositeVideo;
 }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/coursemedia/CourseMediaDO.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/coursemedia/CourseMediaDO.java
index 761563d..348853c 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/coursemedia/CourseMediaDO.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/coursemedia/CourseMediaDO.java
@@ -99,4 +99,12 @@
     private Integer pos;
     @TableField(exist = false)
     private String progressVideo;
+
+    //鐗囧ご鍦板潃
+    private String titles;
+    //鐗囧熬鍦板潃
+    private String trailer;
+
+    //鍚堟垚瑙嗛鍦板潃
+    private String compositeVideo;
 }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaService.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaService.java
index c07cb5e..d56ed3a 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaService.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaService.java
@@ -63,4 +63,8 @@
     CommonResult createSubtitlesVideo(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO);
 
     void updateSubtitles(CourseMediaEditSReqVO updateReqVO);
+
+    CommonResult createTrailer(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO);
+
+    CommonResult createCompositeVideo(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO);
 }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceImpl.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceImpl.java
index 6b2cd38..cb53709 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceImpl.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceImpl.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.digitalcourse.service.coursemedia;
 
+import cn.hutool.core.io.FileUtil;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -10,6 +11,7 @@
 import cn.iocoder.yudao.module.digitalcourse.manager.MediaTaskManager;
 import cn.iocoder.yudao.module.digitalcourse.model.MediaTask;
 import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import com.alibaba.fastjson.JSON;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -20,9 +22,10 @@
 import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
 
 import static cn.iocoder.yudao.module.digitalcourse.enums.ErrorCodeConstants.COURSE_MEDIA_NOT_EXISTS;
 
@@ -42,6 +45,9 @@
 
     @Resource
     private CourseMediaServiceUtil courseMediaServiceUtil;
+
+    @Resource
+    private FileApi fileApi;
 
     @Override
     public Long createCourseMedia(CourseMediaSaveReqVO createReqVO) {
@@ -120,7 +126,7 @@
                    if (count+1>size){
                        courseMediaDO.setProgressVideo((count) + "/" + size);
                    }else{
-                       courseMediaDO.setProgressVideo((count+1)+"/"+size);
+                       courseMediaDO.setProgressVideo((count)+"/"+size);
 
                    }
                }
@@ -222,4 +228,97 @@
         updateObj.setSubtitlesStatus(2);
         courseMediaMapper.updateById(updateObj);
     }
+
+    /**
+     * 涓婁紶鐗囧ご鐗囧熬
+     * @param courseMediaSubtitlesReqVO
+     * @return
+     */
+    @Override
+    public CommonResult createTrailer(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO) {
+        CourseMediaDO courseMediaDO = new CourseMediaDO();
+        courseMediaDO.setId(courseMediaSubtitlesReqVO.getId());
+        courseMediaDO.setTrailer(courseMediaSubtitlesReqVO.getTrailer());
+        courseMediaDO.setTitles(courseMediaSubtitlesReqVO.getTitles());
+        int i = courseMediaMapper.updateById(courseMediaDO);
+        if (i>0){
+            return CommonResult.success("鐗囧ご鐗囧熬涓婁紶鎴愬姛");
+        }
+        return CommonResult.error(BAD_REQUEST.getCode(),"鐗囧ご鐗囧熬涓婁紶澶辫触");
+    }
+
+    /**
+     * 鍚堟垚鐗囧ご鐗囧熬瑙嗛
+     * @param courseMediaSubtitlesReqVO
+     * @return
+     */
+    @Override
+    public CommonResult createCompositeVideo(CourseMediaSubtitlesReqVO courseMediaSubtitlesReqVO) {
+        //鐗囧ご鍦板潃
+        String titles = courseMediaSubtitlesReqVO.getTitles();
+        titles = configApi.getConfigValueByKey("easegen.url") + titles.substring(titles.lastIndexOf("/"));
+        //鐗囧熬鍦板潃
+        String trailer = courseMediaSubtitlesReqVO.getTrailer();
+        trailer = configApi.getConfigValueByKey("easegen.url") + trailer.substring(trailer.lastIndexOf("/"));
+        String videoUrl = courseMediaSubtitlesReqVO.getVideoUrl();
+        String previewUrl = courseMediaSubtitlesReqVO.getPreviewUrl();
+        List<String> videoUrls = new ArrayList<>();
+        videoUrls.add(titles);
+        if (videoUrl != null){
+            videoUrl = configApi.getConfigValueByKey("easegen.url") + videoUrl.substring(videoUrl.lastIndexOf("/"));
+            videoUrls.add(videoUrl);
+            videoUrls.add(trailer);
+        } else if (previewUrl != null) {
+            previewUrl = configApi.getConfigValueByKey("easegen.url") + previewUrl.substring(previewUrl.lastIndexOf("/"));
+            videoUrls.add(previewUrl);
+            videoUrls.add(trailer);
+        }
+        //鍒ゆ柇鏂囦欢澶规槸鍚﹀瓨鍦紝濡傛灉涓嶅瓨鍦ㄥ氨鍒涘缓
+        String filePath = configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/compositeVideo/";
+        File file = new File(filePath);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        String fileListPath = configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/compositeVideo/filelist.txt";
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileListPath))) {
+            for (String path : videoUrls) {
+                writer.write("file '" + path + "'\n");
+            }
+            System.out.println("鏂囦欢鍒楄〃宸茬敓鎴愶細" + fileListPath);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        //鍘绘帀updateReqVO.getName()涓殑绌烘牸鍜岀壒娈婂瓧绗�
+        String newFileName = courseMediaSubtitlesReqVO.getCourseName().replaceAll("[\\s\\p{Punct}]", "");
+        ProcessBuilder builder = new ProcessBuilder(
+                "ffmpeg", "-f", "concat", "-safe","0", "-i",fileListPath , "-c", "copy", configApi.getConfigValueByKey(HEYGEM_FACE2FACE)+"/compositeVideo/"+newFileName+".mp4"
+//                q
+        );
+        builder.redirectErrorStream(true);
+        Process process = null;
+        try {
+            process = builder.start();
+            // 璇诲彇 FFmpeg 杈撳嚭锛堝彲閫夛級
+            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+            System.out.println(builder.command());
+            System.out.println("鏈�缁堣棰戝凡鐢熸垚");
+            String line;
+            while ((line = reader.readLine()) != null) {
+                System.out.println(line);
+            }
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        byte[] bytes = FileUtil.readBytes(FileUtil.file(configApi.getConfigValueByKey(HEYGEM_FACE2FACE) +"/compositeVideo/"+newFileName+".mp4"));
+        String compositeVideo = fileApi.createFile(bytes);
+        CourseMediaDO courseMediaDO = new CourseMediaDO();
+        courseMediaDO.setId(courseMediaSubtitlesReqVO.getId());
+        courseMediaDO.setCompositeVideo(compositeVideo);
+        int i = courseMediaMapper.updateById(courseMediaDO);
+        if (i>0){
+            return CommonResult.success("瑙嗛鍚堟垚鎴愬姛");
+        }
+        return CommonResult.error(BAD_REQUEST.getCode(),"瑙嗛鍚堟垚澶辫触");
+    }
 }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java
index 041fc22..e147a34 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java
@@ -304,7 +304,7 @@
         //鍘绘帀updateReqVO.getName()涓殑绌烘牸鍜岀壒娈婂瓧绗�
         String newFileName = updateReqVO.getName().replaceAll("[\\s\\p{Punct}]", "");
         ProcessBuilder builder = new ProcessBuilder(
-                "ffmpeg", "-f", "concat", "-safe","0", "-i",fileListPath , "-c", "copy", "D:/heygem_data/face2face/temp/"+"111111.mp4"
+                "ffmpeg", "-f", "concat", "-safe","0", "-i",fileListPath , "-c", "copy", configApi.getConfigValueByKey(HEYGEM_FACE2FACE)+"/temp/"+"111111.mp4"
 //                q
         );
         builder.redirectErrorStream(true);

--
Gitblit v1.9.3