From 3d7bdb31c73b4f88bfa989eefe5301b344f88b07 Mon Sep 17 00:00:00 2001
From: 康鲁杰 <60095866+KangLujie@users.noreply.github.com>
Date: 星期一, 14 四月 2025 09:52:11 +0800
Subject: [PATCH] 排队和进度

---
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/coursemedia/vo/CourseMediaRespVO.java |    3 +
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/coursemedia/CourseMediaServiceImpl.java        |   54 ++++++++++++++++++++++++++-
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/coursemedia/CourseMediaDO.java          |    9 ++--
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/manager/MediaTaskManager.java                          |    3 +
 4 files changed, 63 insertions(+), 6 deletions(-)

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 bb7091f..caa2e83 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
@@ -2,6 +2,7 @@
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -83,4 +84,6 @@
     private String videoUrl;
     @Schema(description = "瀛楀箷璇█")
     private String lang;
+    private Integer pos;
+    private String progressVideo;
 }
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 af57fc8..761563d 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
@@ -2,10 +2,7 @@
 
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.AuditionVO;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.*;
 
 /**
@@ -98,4 +95,8 @@
     private Integer subtitlesAddStatus;
     private String videoUrl;
     private String lang;
+    @TableField(exist = false)
+    private Integer pos;
+    @TableField(exist = false)
+    private String progressVideo;
 }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/manager/MediaTaskManager.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/manager/MediaTaskManager.java
index 5cfd878..6ec2774 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/manager/MediaTaskManager.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/manager/MediaTaskManager.java
@@ -72,6 +72,9 @@
         return -1;
     }
 
+    public int getQueueSize() {
+        return queue.size();
+    }
     private void startWorker() {
         executor.submit(() -> {
             while (true) {
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 f69a99f..f460724 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
@@ -9,6 +9,7 @@
 import cn.iocoder.yudao.module.digitalcourse.dal.mysql.coursemedia.CourseMediaMapper;
 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 com.alibaba.fastjson.JSON;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -19,6 +20,7 @@
 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.time.LocalDateTime;
 
@@ -80,9 +82,57 @@
 
     @Override
     public PageResult<CourseMediaDO> getCourseMediaPage(CourseMediaPageReqVO pageReqVO) {
-        return courseMediaMapper.selectPage(pageReqVO);
-    }
+        PageResult<CourseMediaDO> courseMediaDOPageResult = courseMediaMapper.selectPage(pageReqVO);
+        for (CourseMediaDO courseMediaDO : courseMediaDOPageResult.getList()) {
+           if (courseMediaDO.getStatus() == 1) {
+               //瑙嗛鍚堟垚涓� 鏌ヨ鎺掗槦鍜屽悎鎴愯繘搴�
+               Long id = courseMediaDO.getCourseId();
+               int pos = mediaTaskManager.getQueuePosition(id);
+               if (pos == -1) {
+                   //涓嶅湪闃熷垪涓紝璇存槑宸茬粡鍚堟垚瀹屾垚
+                   courseMediaDO.setStatus(3);
+                   courseMediaMapper.updateById(courseMediaDO);
+               }
+               if (pos == 0) {
+                   //姝e湪鍚堟垚涓�
+                   String reqJson = courseMediaDO.getReqJson();
+                   CourseMediaMegerVO courseMediaMegerVO = JSON.parseObject(reqJson, CourseMediaMegerVO.class);
+                   int size = courseMediaMegerVO.getScenes().size();
+                   String s = configApi.getConfigValueByKey(HEYGEM_FACE2FACE) + "/temp/";
+                   //鏌ヨs涓嬮潰鐨勬枃浠�
+                   File folder = new File(s);
+                   int count = 0;
 
+                   if (folder.exists() && folder.isDirectory()) {
+                       File[] files = folder.listFiles();
+                       if (files != null) {
+                           for (File file : files) {
+                               if (file.isFile() && file.getName().endsWith("-r.mp4")) {
+                                   count++;
+                                   System.out.println("鍖归厤鏂囦欢: " + file.getName());
+                               }
+                           }
+                       }
+                       System.out.println("鎬昏鍖归厤 -r.mp4 鏂囦欢鏁伴噺: " + count);
+                   } else {
+                       System.out.println("璺緞涓嶅瓨鍦ㄦ垨涓嶆槸鐩綍");
+                   }
+                   if (count+1>size){
+                       courseMediaDO.setProgressVideo((count) + "/" + size);
+                   }else{
+                       courseMediaDO.setProgressVideo((count+1)+"/"+size);
+
+                   }
+               }
+               courseMediaDO.setPos(pos);
+           }
+
+        }
+        return courseMediaDOPageResult;
+    }
+    private static final String HEYGEM_FACE2FACE = "heygem.face2face";
+    @Resource
+    private ConfigApi configApi;
     @Override
     public CommonResult megerMedia(CourseMediaMegerVO updateReqVO) {
         Long id = updateReqVO.getId();

--
Gitblit v1.9.3