From da999ba64b3434d6529f4be345b6dd3181322019 Mon Sep 17 00:00:00 2001 From: lihuangbin666 <1361490203@qq.com> Date: Mon, 22 Jun 2026 14:46:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/common-association/pom.xml | 24 +++++++- .../plugin/course/courseFormPlugin.java | 19 +++++++ .../CourseCoursewareFromPlugin.java | 15 +++++ .../plugin/courseVideo/CourseVideoFormPlugin.java | 64 ++++++++++++++++++++++ 4 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java create mode 100644 common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java create mode 100644 common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java diff --git a/common/common-association/pom.xml b/common/common-association/pom.xml index 162d54c..d5df353 100644 --- a/common/common-association/pom.xml +++ b/common/common-association/pom.xml @@ -19,6 +19,16 @@ + org.bytedeco + javacv-platform + 1.5.13 + + + + + + + apelet common-core 1.0.0 @@ -39,7 +49,19 @@ apelet 1.0.0 + + apelet + common-core + 1.0.0 + compile + + + apelet + common-core + 1.0.0 + compile + - \ No newline at end of file + diff --git a/common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java new file mode 100644 index 0000000..738edfd --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java @@ -0,0 +1,19 @@ +package apelet.association.plugin.course; + +import apelet.common.core.object.ObjectValue; +import apelet.common.online.abstractplugin.ExecutePluginParent; +import apelet.common.online.model.constant.AttributeEnum; + +public class courseFormPlugin extends ExecutePluginParent +{ + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + super.formCreated(widgetVariableName, objectValue); + if(objectValue.get("isEnabled") == null){ + this.setWidgetAttribute("isEnabled", AttributeEnum.VALUE_CHANGE,0); + } + if(objectValue.get("faceCapture") == null){ + this.setWidgetAttribute("faceCapture", AttributeEnum.VALUE_CHANGE,0); + } + } +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java new file mode 100644 index 0000000..de3a6fe --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java @@ -0,0 +1,15 @@ +package apelet.association.plugin.courseCourseware; + +import apelet.common.core.object.ObjectValue; +import apelet.common.online.abstractplugin.ExecutePluginParent; +import apelet.common.online.model.constant.AttributeEnum; + +public class CourseCoursewareFromPlugin extends ExecutePluginParent{ + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + super.formCreated(widgetVariableName, objectValue); + if(objectValue.get("isSeqLock") == null){ + this.setWidgetAttribute("isSeqLock", AttributeEnum.VALUE_CHANGE,0); + } + } +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java new file mode 100644 index 0000000..0f75309 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java @@ -0,0 +1,64 @@ +package apelet.association.plugin.courseVideo; + +import apelet.common.core.object.ObjectValue; +import apelet.common.online.abstractplugin.ExecutePluginParent; +import apelet.common.online.model.constant.AttributeEnum; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.bytedeco.javacv.FFmpegFrameGrabber; + +import java.io.File; +import java.net.URL; + +public class CourseVideoFormPlugin extends ExecutePluginParent { + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + super.formCreated(widgetVariableName, objectValue); + } + + @Override + public void uploadSuccess(String widgetVariableName, ObjectValue objectValue) { + super.uploadSuccess(widgetVariableName, objectValue); + Object fileName = objectValue.get("file_name"); + + if (fileName != null) { + JSONArray fileJson = JSON.parseArray(fileName.toString()); + if (!fileJson.isEmpty()) { + this.setWidgetAttribute("fileName", AttributeEnum.DISABLED, true); + } + JSONObject item = fileJson.getJSONObject(0); + String realName = item.getString("fileRealName"); + String fullFilePath = item.getString("uploadPath") + "/" + item.getString("filename"); + + File file = new File(fullFilePath); + + + long durationSec = 0; + FFmpegFrameGrabber grabber = null; + try { + // 核心:直接传入字符串,自动识别本地文件 / 网络URL + grabber = new FFmpegFrameGrabber(fullFilePath); + grabber.start(); + + // 微秒 → 毫秒 → 秒 + long totalMicroSeconds = grabber.getLengthInTime(); + long totalMs = totalMicroSeconds / 1000; + durationSec = totalMs / 1000; + + } catch (Exception e) { + throw new RuntimeException("解析音视频时长失败,资源地址:" + fullFilePath, e); + } finally { + // 强制释放资源,避免句柄、网络连接泄漏 + if (grabber != null) { + try { + grabber.stop(); + grabber.close(); + } catch (Exception ignore) { + } + } + } + } + } + +}