Flex
2025-05-26 db55949fb1f77095e04cbda7ebc3ef7dd407e737
easegen-front/package-lock.json
ÎļþÒÑɾ³ý
easegen-front/package.json
@@ -50,6 +50,7 @@
    "dayjs": "^1.11.10",
    "diagram-js": "^12.8.0",
    "driver.js": "^1.3.1",
    "duix-guiji-light": "^0.2.2",
    "echarts": "^5.5.0",
    "echarts-wordcloud": "^2.1.0",
    "element-plus": "2.8.4",
easegen-front/src/api/dialogue/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
import request from '@/config/axios'
export const getDuixSign = async () => {
  return await request.get({ url: `/system/duix/sign` })
}
easegen-front/src/views/chooseTemplate/index.vue
@@ -1333,7 +1333,7 @@
    message.warning('场景为空,请先上传PPT!')
    return false
  }
  //人脸校验
  while(!IsEndCheckFace.value){} //一个空循环,主要为了避免极端情况下当用户点击保存按钮或者视频合成按钮时,人脸校验未完成的问题
@@ -2225,8 +2225,7 @@
      .host-item {
        position: relative;
        display: inline-block;
        width: 45%;
        height: 200px;
        width: 95%;
        margin: 5px 0;
        margin-left: 10px;
        cursor: pointer;
easegen-front/src/views/dialogue/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
<template>
<div>
  <div class="remote-container"></div>
</div>
</template>
<script>
import DUIX from 'duix-guiji-light'
import {getDuixSign} from "../../api/dialogue";
import * as pptTemplateApi from "../../api/pptTemplate";
export default {
  name: "index"
}
const tempConversationId ='dev-'+ Math.random().toString(36).substring(2, 11);
const duix = new DUIX()
  getDuixSign().then(res => {
    if (res.code === 200) {
      duix.init({
        sign: res.data.sign,
        containerLable: '.remote-container',
        conversationId: tempConversationId,
      })
    }
  })
duix.on('getDuixSign', () => {
  // start session
  duix.start({
    conversationId: tempConversationId,
    openAsr: true
  }).then(res => {
    console.info(res)
  })
})
</script>
<style scoped>
.remote-container{
  width: 500px;
  height: 500px;
}
</style>
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/LambdaQueryWrapperX.java
@@ -5,6 +5,7 @@
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
import org.springframework.util.StringUtils;
import java.util.Collection;
@@ -40,8 +41,8 @@
    }
    public LambdaQueryWrapperX<T> eqIfPresent(SFunction<T, ?> column, Object val) {
        if (ObjectUtil.isNotEmpty(val)) {
            return (LambdaQueryWrapperX<T>) super.eq(column, val);
        if (val != null && !(val instanceof String && StrUtil.isBlank((String) val))) {
            this.eq(column, val);
        }
        return this;
    }
yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceUtil.java
@@ -170,10 +170,10 @@
                // å½“没有人像时,视频放在 cover çš„下层
                builder = new ProcessBuilder(
                        "ffmpeg",
                        "-i", cover1, // èƒŒæ™¯å›¾ 1
                        "-i", substring1, // è§†é¢‘
                        "-i", cover1, // èƒŒæ™¯å›¾ 2
                        "-i", cover, // PPT内容
                        "-i", cover1,     // èƒŒæ™¯å›¾ 1
                        "-i", substring1, // è§†é¢‘(含音频)
                        "-i", cover1,     // èƒŒæ™¯å›¾ 2
                        "-i", cover,      // PPT å†…容
                        "-filter_complex",
                        "[0:v]scale=" + Math.round(scene.getBackground().getWidth()) + ":" + Math.round(scene.getBackground().getHeight()) + "[bg1];" +
                                "[1:v]scale=" + Math.round(scene.getComponents().get(0).getWidth()) + ":" + Math.round(scene.getComponents().get(0).getHeight()) + "[v1];" +
@@ -181,8 +181,14 @@
                                "[2:v]scale=" + Math.round(scene.getBackground().getWidth()) + ":" + Math.round(scene.getBackground().getHeight()) + "[bg2];" +
                                "[img1][bg2]overlay=shortest=1[v2];" +
                                "[3:v]scale=" + Math.round(scene.getComponents().get(1).getWidth()) + ":" + Math.round(scene.getComponents().get(1).getHeight()) + "[v3];" +
                                "[v2][v3]overlay=x=" + Math.round(scene.getComponents().get(1).getMarginLeft()) + ":y=" + Math.round(scene.getComponents().get(1).getTop()),
                        newFileName2 // è¾“出文件名
                                "[v2][v3]overlay=x=" + Math.round(scene.getComponents().get(1).getMarginLeft()) + ":y=" + Math.round(scene.getComponents().get(1).getTop()) + "[outv]",
                        "-map", "[outv]",
                        "-map", "1:a?",   // æ·»åŠ éŸ³é¢‘æµï¼ˆå¦‚æžœå­˜åœ¨ï¼‰
                        "-c:v", "libx264", // è§†é¢‘编码格式(可选但推荐)
                        "-c:a", "aac",     // éŸ³é¢‘编码格式(可选但推荐)
                        "-shortest",       // è®©è¾“出长度与最短流一致,避免黑屏或静音延长
                        "-y",              // è¦†ç›–输出文件
                        newFileName2       // è¾“出文件名
                );
            }
            System.out.println(newFileName2);