Compare commits

...

12 Commits

Author SHA1 Message Date
huangrun
e97d589423 提交注释 2025-12-11 10:47:05 +08:00
huangrun
39d2681d4c 提交注释 2025-12-10 19:36:48 +08:00
huangrun
9b86026473 课程详情接口优化 2025-12-10 17:07:40 +08:00
huangrun
9219b77895 课程详情接口优化 2025-12-09 10:19:32 +08:00
huangrun
e727f266ec 课程详情接口优化 2025-12-09 10:06:23 +08:00
huangrun
49e42edf6f 课程AI设置优化 2025-12-08 19:38:26 +08:00
huangrun
f4d9847e8b 课程AI设置优化 2025-12-08 18:48:14 +08:00
huangrun
a0e1fea805 课程AI设置优化 2025-12-08 17:55:29 +08:00
huangrun
d0c5d2d561 课程详情 2025-12-08 15:45:45 +08:00
huangrun
951f2b0105 课程详情 2025-12-08 14:56:41 +08:00
huangrun
aa14fffd6c 课程详情 2025-12-08 14:55:07 +08:00
huangrun
1d7e478aac 课程详情 2025-12-08 14:47:41 +08:00
6 changed files with 75 additions and 36 deletions

View File

@@ -450,8 +450,8 @@ public class CourseAuditApi extends ApiBaseController{
log.info("---------------在线课同步到讲师管理完毕 -------"); log.info("---------------在线课同步到讲师管理完毕 -------");
//AI视频处理-调用接口 //AI视频处理-调用接口
//需求调整-课程AI设置放在课程提交审核之前 //需求调整-课程AI设置放在课程提交审核之前
// this.sendMessageToKJB(dto); this.sendMessageToKJB(dto);
// log.info("---------------AI视频处理-调用接口完毕 -------"); log.info("---------------**审核**AI视频处理-调用接口完毕 -------");
return success(true); return success(true);
} catch (Exception e) { } catch (Exception e) {
log.error("默认管理员提交直接发布处理失败",e); log.error("默认管理员提交直接发布处理失败",e);
@@ -462,7 +462,7 @@ public class CourseAuditApi extends ApiBaseController{
} }
public void sendMessageToKJB(CourseFullDto dto) throws JsonProcessingException { public void sendMessageToKJB(CourseFullDto dto) throws JsonProcessingException {
Course course = dto.getCourse(); Course course = dto.getCourse();
log.info("---------------AI视频处理-调用接口 -------"); //log.info("---------------AI视频处理-调用接口 -------");
log.info("aiSet:"+course.getAiSet()+",aiAbstract:"+course.getAiAbstract()+",aiDraft:"+course.getAiDraft()+",aiTranslate:"+course.getAiTranslate()+",languageCode:"+course.getLanguageCode()); log.info("aiSet:"+course.getAiSet()+",aiAbstract:"+course.getAiAbstract()+",aiDraft:"+course.getAiDraft()+",aiTranslate:"+course.getAiTranslate()+",languageCode:"+course.getLanguageCode());
List<CourseTeacher> teachers = dto.getTeachers(); List<CourseTeacher> teachers = dto.getTeachers();
StringBuilder teacherNames = new StringBuilder(); StringBuilder teacherNames = new StringBuilder();
@@ -490,25 +490,27 @@ public class CourseAuditApi extends ApiBaseController{
.aiSet(course.getAiSet()) .aiSet(course.getAiSet())
.languageStatus(course.getLanguageStatus()) .languageStatus(course.getLanguageStatus())
.build() ; .build() ;
for (CourseContent cc : cclist) { if(cclist != null && !cclist.isEmpty()){
//筛选视频资源 for (CourseContent cc : cclist) {
if(cc.getContentType() == 10 ){ //筛选视频资源
JSONObject json = JSONObject.parseObject(cc.getContent()); if(cc.getContentType() == 10 ){
if(json == null || json.getString("url") == null) { JSONObject json = JSONObject.parseObject(cc.getContent());
continue; 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());
} }
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.setBoeaiVideoResourceReqList(videoList);

View File

@@ -50,7 +50,7 @@ import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
//课程AI设置
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping(value="/xboe/m/course/fulltext") @RequestMapping(value="/xboe/m/course/fulltext")
@@ -332,7 +332,7 @@ public class CourseFullTextApi extends ApiBaseController{
cids.add(c.getId()); cids.add(c.getId());
} }
log.info("---- KJB 开始获取课程摘要信息 ---"); log.info("---- KJB 开始获取课程摘要信息 ---");
this.getCourseFromKJB(c); this.getCourseFromKJB(c,new Course());
} }
List<Course> clist=null; List<Course> clist=null;
if(!cids.isEmpty()) { if(!cids.isEmpty()) {
@@ -424,9 +424,9 @@ public class CourseFullTextApi extends ApiBaseController{
} }
public void getCourseFromKJB(CourseFullText courseFull){ public void getCourseFromKJB(CourseFullText courseFull,Course course){
String courseId = courseFull.getId(); String courseId = courseFull.getId();
log.info("------------KJB---获取课程摘要信息---------courseId = " + courseId); log.info("------------KJB---获取课程详情 start ---------courseId = " + courseId);
//String url = env.getProperty("kjb.url") + "/api/course/getCourseFromKJB?courseId=" + courseId; //String url = env.getProperty("kjb.url") + "/api/course/getCourseFromKJB?courseId=" + courseId;
String url = aicoreUrl + "/aiVideo/getCourseList"; String url = aicoreUrl + "/aiVideo/getCourseList";
@@ -445,10 +445,25 @@ public class CourseFullTextApi extends ApiBaseController{
List<BoeaiCourseDto> boeaiCourseDto = JSON.parseArray(data, BoeaiCourseDto.class); List<BoeaiCourseDto> boeaiCourseDto = JSON.parseArray(data, BoeaiCourseDto.class);
//List<BoeaiCourseDto> aiVideoResourceRsp = Collections.singletonList(JSON.parseObject(data, BoeaiCourseDto.class)); //List<BoeaiCourseDto> aiVideoResourceRsp = Collections.singletonList(JSON.parseObject(data, BoeaiCourseDto.class));
if(boeaiCourseDto != null && !boeaiCourseDto.isEmpty()){ if(boeaiCourseDto != null && !boeaiCourseDto.isEmpty()){
log.info("KJB摘要信息"+boeaiCourseDto.get(0).getSummaryContent()); //log.info("KJB摘要信息"+boeaiCourseDto.get(0).getSummaryContent());
courseFull.setAiAbstract(boeaiCourseDto.get(0).getAiAbstract()); courseFull.setAiAbstract(boeaiCourseDto.get(0).getAiAbstract());
courseFull.setSummaryContent(boeaiCourseDto.get(0).getSummaryContent()); courseFull.setSummaryContent(boeaiCourseDto.get(0).getSummaryContent());
courseFull.setAiSet(boeaiCourseDto.get(0).getAiSet());
courseFull.setAiDraft(boeaiCourseDto.get(0).getAiDraft());
courseFull.setAiTranslate(boeaiCourseDto.get(0).getAiTranslate());
courseFull.setLanguageStatus(boeaiCourseDto.get(0).getLanguageStatus());
courseFull.setLanguageCode(boeaiCourseDto.get(0).getLanguageCode() == null ? new ArrayList<>() :Arrays.asList(boeaiCourseDto.get(0).getLanguageCode().split(",")));
course.setAiSet(boeaiCourseDto.get(0).getAiSet());
course.setAiAbstract(boeaiCourseDto.get(0).getAiAbstract());
//course.setSummaryStatus(boeaiCourseDto.get(0).getSummaryStatus());
course.setSummaryContent(boeaiCourseDto.get(0).getSummaryContent());
course.setAiDraft(boeaiCourseDto.get(0).getAiDraft());
course.setAiTranslate(boeaiCourseDto.get(0).getAiTranslate());
course.setLanguageStatus(boeaiCourseDto.get(0).getLanguageStatus());
course.setLanguageCode(boeaiCourseDto.get(0).getLanguageCode() == null ? new ArrayList<>() :Arrays.asList(boeaiCourseDto.get(0).getLanguageCode().split(",")));
} }
log.info("------------KJB---获取课程详情 end ---------");
} }
private void getTeacherStatusByCode(String token, PageList<CourseFullText> coursePageList) { private void getTeacherStatusByCode(String token, PageList<CourseFullText> coursePageList) {

View File

@@ -105,6 +105,9 @@ public class CourseManageApi extends ApiBaseController{
private ThirdApi thirdApi; private ThirdApi thirdApi;
@Resource @Resource
CourseAuditApi courseAuditApi; CourseAuditApi courseAuditApi;
@Resource
CourseFullTextApi courseFullTextApi;
// @PostMapping("/test") // @PostMapping("/test")
// public JsonResponse<PageList<Course>> findTest(Pagination pager,CourseQueryDto dto){ // public JsonResponse<PageList<Course>> findTest(Pagination pager,CourseQueryDto dto){
@@ -186,6 +189,13 @@ public class CourseManageApi extends ApiBaseController{
isPermission = dicts.contains(course.getOrgId()); isPermission = dicts.contains(course.getOrgId());
rs.put("dicts",dicts); rs.put("dicts",dicts);
} }
//void getCourseFromKJB(CourseFullText courseFull,Course course){
log.info("-------课程详情(KJB)查询开始-------");
CourseFullText courseFull = new CourseFullText();
courseFull.setId(course.getId());
courseFullTextApi.getCourseFromKJB(courseFull,course);
log.info("-------课程详情(KJB)查询结束-------");
log.error("-------是否仅内网查看 = " + isPermission); log.error("-------是否仅内网查看 = " + isPermission);
rs.put("course",course); rs.put("course",course);
rs.put("contents",cclist); rs.put("contents",cclist);
@@ -345,7 +355,7 @@ public class CourseManageApi extends ApiBaseController{
log.info("---------------在线课同步到讲师管理完毕 -------"); log.info("---------------在线课同步到讲师管理完毕 -------");
//AI视频处理-调用接口 //AI视频处理-调用接口
log.info("---------------AI视频处理-调用接口开始 -------"); log.info("---------------AI视频处理-调用接口开始 -------");
new CourseAuditApi().sendMessageToKJB(dto); courseAuditApi.sendMessageToKJB(dto);
log.info("---------------AI视频处理-调用接口结束 -------"); log.info("---------------AI视频处理-调用接口结束 -------");
return success(dto); return success(dto);

View File

@@ -462,7 +462,7 @@ public class CourseServiceImpl implements ICourseService {
rs.setCount(listByFilters2.size()); rs.setCount(listByFilters2.size());
rs.setPageSize(pageSize); rs.setPageSize(pageSize);
rs.setList(paginate); rs.setList(paginate);
if (!paginate.isEmpty()) { if (paginate != null && !paginate.isEmpty()) {
log.info("-----KJB------ getCourse"); log.info("-----KJB------ getCourse");
for (Course course : paginate) { for (Course course : paginate) {
this.getCourseFromKJB(course); this.getCourseFromKJB(course);

View File

@@ -18,9 +18,8 @@ import java.nio.charset.StandardCharsets;
@Slf4j @Slf4j
public class HttpUtils { public class HttpUtils {
public static String sendMessage(String message,String url) { public static String sendMessage(String message,String url) {
log.info("----------------发送消息开始 -------"); //log.info("----------------发送消息开始 -------");
//log.info("----------------发送消息url -------{}",url); log.info("----------------发送消息参数 -------{}url:{}",message,url);
log.info("----------------发送消息参数 -------{}",message);
// POST 请求 // POST 请求
try (CloseableHttpClient httpClient = HttpClients.createDefault()) { try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// POST 请求 // POST 请求
@@ -43,7 +42,7 @@ public class HttpUtils {
// System.out.println("响应体: " + EntityUtils.toString(response.getEntity())); // System.out.println("响应体: " + EntityUtils.toString(response.getEntity()));
} catch (Exception e) { } catch (Exception e) {
log.error("KJB-发送消息错误",e); log.error("KJB-接口调用失败",e);
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }

View File

@@ -17,8 +17,10 @@ import com.boe.feign.api.infrastructure.entity.CommonSearchVo;
import com.boe.feign.api.infrastructure.entity.Dict; import com.boe.feign.api.infrastructure.entity.Dict;
import com.xboe.api.ThirdApi; import com.xboe.api.ThirdApi;
import com.xboe.constants.CacheName; import com.xboe.constants.CacheName;
import com.xboe.module.course.api.CourseFullTextApi;
import com.xboe.module.course.dto.AiVideoResourceRsp; import com.xboe.module.course.dto.AiVideoResourceRsp;
import com.xboe.module.course.dto.BoeaiSubtitleRsp; import com.xboe.module.course.dto.BoeaiSubtitleRsp;
import com.xboe.module.course.dto.CourseFullText;
import com.xboe.module.course.utils.HttpUtils; import com.xboe.module.course.utils.HttpUtils;
import com.xboe.module.course.vo.TeacherVo; import com.xboe.module.course.vo.TeacherVo;
import com.xboe.module.usergroup.service.IUserGroupService; import com.xboe.module.usergroup.service.IUserGroupService;
@@ -71,7 +73,7 @@ import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
//添加AI课程学习内容
/** /**
* 课程学习的内容 * 课程学习的内容
*/ */
@@ -110,6 +112,9 @@ public class StudyCourseApi extends ApiBaseController{
@Autowired @Autowired
StringRedisTemplate redisTemplate; StringRedisTemplate redisTemplate;
@Autowired
CourseFullTextApi courseFullTextApi;
@Value("${kjb.aicoreUrl}") @Value("${kjb.aicoreUrl}")
private String aicoreUrl; private String aicoreUrl;
@@ -179,6 +184,12 @@ public class StudyCourseApi extends ApiBaseController{
if(course==null || course.getDeleted()){ if(course==null || course.getDeleted()){
return badRequest("课程不存在或已被删除"); return badRequest("课程不存在或已被删除");
} }
//获取课程AI详情
log.info("---- KJB 获取课程详情 ---");
CourseFullText courseFullText = new CourseFullText();
courseFullText.setId(cid);
courseFullTextApi.getCourseFromKJB(courseFullText,course);
rs.put("course",course); rs.put("course",course);
List<CourseCrowd> courseCrowdList = courseService.findCrowdByCourseId(cid); List<CourseCrowd> courseCrowdList = courseService.findCrowdByCourseId(cid);
@@ -217,9 +228,11 @@ public class StudyCourseApi extends ApiBaseController{
List<CourseSection> sectionlist=sectionService.getByCourseId(cid); List<CourseSection> sectionlist=sectionService.getByCourseId(cid);
List<CourseTeacher> teachers=courseService.findTeachersByCourseId(cid); List<CourseTeacher> teachers=courseService.findTeachersByCourseId(cid);
for (CourseContent cc : cclist) { if(cclist!=null && !cclist.isEmpty()){
log.info("根据视频信息查询AI字幕数据cc = " + cc.toString()); for (CourseContent cc : cclist) {
this.getVtt( cid , cc); log.info("根据视频信息查询AI字幕数据cc = " + cc.toString());
this.getVtt( cid , cc);
}
} }
//获取教师的介绍信息,因为一门课程 的教师不会太多,所以这里简单直接遍历查询,后续再优化 //获取教师的介绍信息,因为一门课程 的教师不会太多,所以这里简单直接遍历查询,后续再优化