diff --git a/servers/boe-server-all/pom.xml b/servers/boe-server-all/pom.xml
index 9f4e7327..505bbb92 100644
--- a/servers/boe-server-all/pom.xml
+++ b/servers/boe-server-all/pom.xml
@@ -239,6 +239,10 @@
xxl-job-core
2.3.0
+
+ org.apache.httpcomponents
+ httpclient
+
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseAuditApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseAuditApi.java
index 44eb3716..d5fe9746 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseAuditApi.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseAuditApi.java
@@ -1,5 +1,6 @@
package com.xboe.module.course.api;
+import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@@ -7,9 +8,21 @@ import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.xboe.api.ThirdApi;
-import com.xboe.module.course.dto.CourseParam;
+import com.xboe.module.course.dto.*;
+import com.xboe.module.course.entity.*;
+import com.xboe.module.course.utils.HttpUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -21,13 +34,6 @@ import com.xboe.core.CurrentUser;
import com.xboe.core.JsonResponse;
import com.xboe.core.api.ApiBaseController;
import com.xboe.core.log.AutoLog;
-import com.xboe.module.course.dto.CourseFullDto;
-import com.xboe.module.course.dto.CourseHRBPAuditDto;
-import com.xboe.module.course.dto.CourseQueryDto;
-import com.xboe.module.course.entity.Course;
-import com.xboe.module.course.entity.CourseAudit;
-import com.xboe.module.course.entity.CourseContent;
-import com.xboe.module.course.entity.CourseHRBPAudit;
import com.xboe.module.course.service.ICourseAuditService;
import com.xboe.module.course.service.ICourseContentService;
import com.xboe.module.course.service.ICourseHRBPAuditService;
@@ -435,16 +441,68 @@ public class CourseAuditApi extends ApiBaseController{
param.setOrgName(dto.getCourse().getOrgName());
thirdApi.updateOrSaveCourse(param,token);
log.info("---------------在线课同步到讲师管理完毕 -------");
+ //AI视频处理-调用接口
+ this.sendMessageToKJB(dto);
+ log.info("---------------AI视频处理-调用接口完毕 -------");
return success(true);
} catch (Exception e) {
log.error("默认管理员提交直接发布处理失败",e);
e.printStackTrace();
return error("发布课程失败",e.getMessage());
}
-
- }
-
+ }
+ public void sendMessageToKJB(CourseFullDto dto) throws JsonProcessingException {
+ Course course = dto.getCourse();
+ List teachers = dto.getTeachers();
+ StringBuilder teacherNames = new StringBuilder();
+ for (CourseTeacher teacher : teachers) {
+ teacherNames.append(teacher.getTeacherName()).append(",");
+ }
+ List cclist = ccontentService.getByCourseId(course.getId());
+ List languageCode = course.getLanguageCode();
+ String code = String.join(",", languageCode);
+ BoeaiCourseDto boeaiCourseDto = new BoeaiCourseDto();
+ List videoList = new ArrayList<>();
+ boeaiCourseDto = BoeaiCourseDto.builder()
+ .courseId(course.getId())
+ .title(course.getName())
+ .description(course.getSummary())
+ .instructor(teacherNames.toString())
+ .chapterCount(1) //章节数
+ .languageCode(code) //语言
+ .build() ;
+ for (CourseContent cc : cclist) {
+ //筛选视频资源
+ if(cc.getContentType() == 10 ){
+ JSONObject json = JSONObject.parseObject(cc.getContent());
+ if(json == null || json.getString("url") == null) {
+ continue;
+ }
+ String videoUrl = json.getString("url");
+ String videoUrlPerfix = "https://u-pre.boe.com/upload"; //测试
+ //String videoUrlPerfix = "https://u.boe.com/upload"; //生产
+ String videoType = videoUrl.substring(videoUrl.lastIndexOf(".")+1);
+ videoList.add(BoeaiVideoResourceDto.builder()
+ .courseId(cc.getCourseId())
+ .videoId(cc.getId())
+ .title(cc.getContentName())
+ .originalUrl(videoUrlPerfix+videoUrl)
+ .duration(cc.getDuration())
+ .format(videoType)
+ .build());
+ }
+ }
+ boeaiCourseDto.setBoeaiVideoResourceReqList(videoList);
+ boeaiCourseDto.setVideoCount(videoList.size());
+ ObjectMapper objectMapper = new ObjectMapper();
+ String message = objectMapper.writeValueAsString(boeaiCourseDto);
+ String url = "http://10.251.160.38:8088/aiVideo/saveCourse";
+ HttpUtils.sendMessage(message,url);
+ }
+
+
+
/***
* 审核
* @param dto
@@ -475,5 +533,8 @@ public class CourseAuditApi extends ApiBaseController{
}
+ public static void main(String[] args) {
+
+ }
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/BoeaiCourseDto.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/BoeaiCourseDto.java
new file mode 100644
index 00000000..c863a41f
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/BoeaiCourseDto.java
@@ -0,0 +1,75 @@
+package com.xboe.module.course.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author
+ * @date 2025年11月18日
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BoeaiCourseDto {
+ List boeaiVideoResourceReqList;
+
+
+ List courseVideoIds;
+
+ private Long id;
+
+ /**
+ * 课程ID
+ */
+ private String courseId;
+ /**
+ * 视频ID
+ */
+ private String videoId;
+
+ /**
+ * 课程标题
+ */
+ private String title;
+
+ /**
+ * 讲师名称
+ */
+ private String instructor;
+
+ /**
+ * 章节数
+ */
+ private Integer chapterCount;
+
+ /**
+ * 视频数
+ */
+ private Integer videoCount;
+
+ /**
+ * 总时长(秒)
+ */
+ private Integer totalDuration;
+
+ private Date createdAt;
+
+ private Date updatedAt;
+
+ /**
+ * 课程描述
+ */
+ private String description;
+ /**
+ * 视频语言编码 如 zh-CN, en-US
+ */
+ private String languageCode;
+
+ private static final long serialVersionUID = 1L;
+}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/BoeaiVideoResourceDto.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/BoeaiVideoResourceDto.java
new file mode 100644
index 00000000..c7415db1
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dto/BoeaiVideoResourceDto.java
@@ -0,0 +1,88 @@
+package com.xboe.module.course.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author
+ * @date 2025年11月18日
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BoeaiVideoResourceDto {
+ /**
+ *
+ */
+
+ private Long id;
+
+ /**
+ * 视频业务ID
+ */
+ private String videoId;
+ /**
+ * 课程ID
+ */
+ private String courseId;
+
+ /**
+ * 视频标题
+ */
+ private String title;
+
+ /**
+ * 原始视频URL
+ */
+ private String originalUrl;
+
+ /**
+ * 视频时长(秒)
+ */
+ private Integer duration;
+
+ /**
+ * 文件大小(字节)
+ */
+ private Long fileSize;
+
+ /**
+ * 视频格式 mp4/avi等
+ */
+ private String format;
+
+ /**
+ * 状态 0-待处理 1-处理中 2-已完成 3-失败
+ */
+ private Integer status;
+
+ /**
+ * 是否已审核 0-否 1-是
+ */
+ private Integer isReviewed;
+
+ /**
+ * 审核人ID
+ */
+ private String reviewerId;
+
+ /**
+ * 审核时间
+ */
+ private Date reviewedAt;
+
+ /**
+ *
+ */
+ private Date createdAt;
+
+ /**
+ *
+ */
+ private Date updatedAt;
+}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java
index 69804e20..d4986689 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/entity/Course.java
@@ -1,6 +1,7 @@
package com.xboe.module.course.entity;
import java.time.LocalDateTime;
+import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -216,6 +217,33 @@ public class Course extends BaseEntity {
@Column(name = "device",length = 1)
private Integer device;
+
+ /**
+ * 0:关闭;1:打开;
+ * */
+ // @Column(name = "ai_set",length = 1)
+ private Integer aiSet;
+ /**
+ * 摘要 0:上架;1:下架;
+ * */
+ //@Column(name = "ai_abstract",length = 1)
+ private Integer aiAbstract;
+ /**
+ * 文稿 0:上架;1:下架;
+ * */
+ // @Column(name = "ai_draft",length = 1)
+ private Integer aiDraft;
+ /**
+ * 翻译 0:上架;1:下架;
+ * */
+ //@Column(name = "ai_translate",length = 1)
+ private Integer aiTranslate;
+ /**
+ * 语言 zh-CN,en-US,ja-JP,ko-KR
+ * */
+ //Column(name = "language_code",length = 120)
+ private List languageCode;
+
/**
* 课程状态,多人审核机制,所以这里并没有审核通过与不通过的状态了
* 课程状态 1:未提交(草稿);2:已提交;3: 审核未通过,5审核完成
diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/utils/HttpUtils.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/utils/HttpUtils.java
new file mode 100644
index 00000000..9213fb04
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/utils/HttpUtils.java
@@ -0,0 +1,38 @@
+package com.xboe.module.course.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+
+/**
+ * @author
+ * @date 2025年11月18日
+ */
+@Slf4j
+public class HttpUtils {
+ public static CloseableHttpResponse sendMessage(String message,String url) {
+ log.info("----------------发送消息开始 -------");
+ //log.info("----------------发送消息url -------{}",url);
+ log.info("----------------发送消息参数 -------{}",message);
+ // POST 请求
+ try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+ // POST 请求
+ HttpPost httpPost = new HttpPost(url);
+ //HttpPost httpPost = new HttpPost("https://jsonplaceholder.typicode.com/posts");
+ httpPost.setEntity(new StringEntity(message));
+ httpPost.setHeader("Content-Type", "application/json");
+ CloseableHttpResponse response = httpClient.execute(httpPost);
+ log.info("---------------发送消息响应 -------{}",response);
+ return response;
+// System.out.println("状态码: " + response.getCode());
+// System.out.println("响应体: " + EntityUtils.toString(response.getEntity()));
+
+ } catch (Exception e) {
+ log.error("KJB-发送消息错误",e);
+ throw new RuntimeException(e);
+ }
+ }
+}