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); + } + } +}