Files
nuttyreading-java/src/main/java/com/peanut/modules/master/controller/CourseController.java
2025-07-07 13:21:16 +08:00

315 lines
13 KiB
Java

package com.peanut.modules.master.controller;
import com.aliyun.vod20170321.models.GenerateKMSDataKeyResponseBody;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.peanut.common.utils.R;
import com.peanut.common.utils.SpdbUtil;
import com.peanut.modules.common.dao.CourseCatalogueChapterVideoDao;
import com.peanut.modules.common.dao.VideoM3u8Dao;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.to.EditCourseRecordDto;
import com.peanut.modules.common.to.ParamTo;
import com.peanut.modules.common.to.ChangeCatalogueFeeDto;
import com.peanut.modules.master.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ws.schild.jave.MultimediaObject;
import java.net.URL;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController("masterCourse")
@RequestMapping("master/course")
public class
CourseController {
@Autowired
private CourseService courseService;
@Autowired
private CourseCatalogueService courseCatalogueService;
@Autowired
private CourseCatalogueChapterService courseCatalogueChapterService;
@Autowired
private CourseCatalogueChapterVideoService courseCatalogueChapterVideoService;
@Autowired
private CourseCatalogueChapterVideoDao courseCatalogueChapterVideoDao;
@Autowired
private SysCourseDirectService sysCourseDirectService;
@Autowired
private ShopProductService shopProductService;
@Autowired
private VideoM3u8Dao videoM3u8Dao;
@Autowired
private SpdbUtil spdbUtil;
@RequestMapping("/getCourseList")
public R getCourseList(@RequestBody Map<String,Object> map){
Page courseList = courseService.getCourseList(map);
return R.ok().put("page",courseList);
}
@RequestMapping("/addCourse")
public R addCourse(@RequestBody CourseEntity course){
courseService.save(course);
return R.ok();
}
@RequestMapping("/delCourse")
public R delCourse(int id){
return courseService.delCourse(id);
}
@RequestMapping("/editCourse")
public R editCourse(@RequestBody CourseEntity course){
courseService.updateById(course);
return R.ok();
}
@RequestMapping("/pushM3u8Video")
public R pushM3u8Video(@RequestBody Map<String,String> map) throws Exception {
String s = map.get("vid");
GenerateKMSDataKeyResponseBody kms = SpdbUtil.KMS();
VideoM3u8Entity videoM3u8Entity = new VideoM3u8Entity();
assert kms != null;
videoM3u8Entity.setEdk(kms.getCiphertextBlob());
videoM3u8Entity.setVid(s);
videoM3u8Dao.insert(videoM3u8Entity);
SpdbUtil.startM3u8(s,kms.getCiphertextBlob());
return R.ok();
}
@RequestMapping("/searchCourse")
public R searchCourse(@RequestBody ParamTo param){
List<CourseEntity> courseEntities = courseService.searchCourse(param.getKeywords());
return R.ok().put("List",courseEntities);
}
@RequestMapping("/cossVod")
public R cossVod(@RequestBody Map<String,Integer> map) throws Exception {
int p = map.get("page");
int l = map.get("limit");
LambdaQueryWrapper<CourseCatalogueChapterVideoEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CourseCatalogueChapterVideoEntity::getType,1);
Page<CourseCatalogueChapterVideoEntity> courseCatalogueChapterVideoEntityPage = courseCatalogueChapterVideoService.getBaseMapper().selectPage(new Page<>(p, l), wrapper);
for (CourseCatalogueChapterVideoEntity c :courseCatalogueChapterVideoEntityPage.getRecords()){
spdbUtil.vodTranslationM3u8(c.getVideo());
}
return R.ok();
}
@RequestMapping("/cossVod1")
public R cossVod1() throws Exception {
MPJLambdaWrapper<CourseCatalogueChapterVideoEntity> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAll(CourseCatalogueChapterVideoEntity.class);
wrapper.leftJoin(VideoM3u8Entity.class,VideoM3u8Entity::getVid,CourseCatalogueChapterVideoEntity::getVideo);
wrapper.eq(CourseCatalogueChapterVideoEntity::getType,1);
wrapper.isNull(VideoM3u8Entity::getId);
List<CourseCatalogueChapterVideoEntity> courseCatalogueChapterVideoEntities = courseCatalogueChapterVideoDao.selectJoinList(CourseCatalogueChapterVideoEntity.class, wrapper);
for (CourseCatalogueChapterVideoEntity c:courseCatalogueChapterVideoEntities){
spdbUtil.vodTranslationM3u8(c.getVideo());
}
return R.ok().put("list",courseCatalogueChapterVideoEntities);
}
@RequestMapping("/getCoursedetail")
public R getCoursedetail(@RequestBody ParamTo param){
CourseEntity course = courseService.getById(param.getId());
List<ShopProduct> shopProductList = null;
//课程关联商品
if (StringUtils.isNotEmpty(course.getRelationProductIds())){
String[] ids = course.getRelationProductIds().split(",");
shopProductList = shopProductService.list(new LambdaQueryWrapper<ShopProduct>()
.in(ShopProduct::getProductId, ids)
.orderByAsc(ShopProduct::getSort));
}
return R.ok().put("course",course).put("shopProductList",shopProductList);
}
@RequestMapping("/getCourseCatalogues")
public R getCourseCatalogues(@RequestBody ParamTo param){
List<CourseCatalogueEntity> courseCatalogues = courseCatalogueService.getCourseCatalogues(param.getId());
return R.ok().put("catalogues",courseCatalogues);
}
@RequestMapping("/createProductForCatalogue")
public R createProductForCatalogue(@RequestBody Map<String,Integer> map){
int id = map.get("id");
return courseCatalogueService.createProductForCatalogue(id);
}
@RequestMapping("/addCourseCatalogue")
public R addCourseCatalogue(@RequestBody CourseCatalogueEntity courseCatalogue){
courseCatalogueService.addCourseCatalogue(courseCatalogue);
return R.ok();
}
@RequestMapping("/delCourseCatalogue")
public R delCourseCatalogue(@RequestBody ParamTo param){
return courseCatalogueService.delCourseCatalogue(param.getId());
}
@RequestMapping("/editCourseCatalogue")
public R editCourseCatalogue(@RequestBody CourseCatalogueEntity c){
courseCatalogueService.updateById(c);
return R.ok();
}
@RequestMapping("/getCourseCatalogueChapterList")
public R getCourseCatalogueChapterList(@RequestBody ParamTo param){
Page courseCatalogueChapterList = courseCatalogueChapterService.getCourseCatalogueChapterList(param);
return R.ok().put("page",courseCatalogueChapterList);
}
@RequestMapping("/addCourseCatalogueChapter")
public R addCourseCatalogueChapter(@RequestBody CourseCatalogueChapterEntity courseCatalogueChapterEntity){
if (courseCatalogueChapterService.save(courseCatalogueChapterEntity)){
if (courseCatalogueChapterEntity.getVideoList()!=null&&courseCatalogueChapterEntity.getVideoList().size() > 0){
for (CourseCatalogueChapterVideoEntity c:courseCatalogueChapterEntity.getVideoList()) {
c.setChapterId(courseCatalogueChapterEntity.getId());
courseCatalogueChapterVideoService.save(c);
}
}
}
return R.ok();
}
@RequestMapping("/delCourseCatalogueChapter")
public R delCourseCatalogueChapter(@RequestBody ParamTo param){
return courseCatalogueChapterService.delCourseCatalogueChapter(param.getId());
}
@RequestMapping("/editCourseCatalogueChapter")
@Transactional
public R editCourseCatalogueChapter(@RequestBody CourseCatalogueChapterEntity courseCatalogueChapterEntity){
courseCatalogueChapterService.updateById(courseCatalogueChapterEntity);
//修改视频
if (courseCatalogueChapterEntity.getVideoList()!=null&&courseCatalogueChapterEntity.getVideoList().size() > 0){
for (CourseCatalogueChapterVideoEntity c:courseCatalogueChapterEntity.getVideoList()) {
if (c.getId()==0){
courseCatalogueChapterVideoService.save(c);
}else {
courseCatalogueChapterVideoService.saveOrUpdate(c);
}
}
}
return R.ok();
}
@RequestMapping("/getCourseCatalogueChapterVideoList")
public R getCourseCatalogueChapterVideoList(@RequestBody ParamTo param){
Page courseCatalogueChapterVideoList = courseCatalogueChapterVideoService.getCourseCatalogueChapterVideoList(param);
return R.ok().put("page",courseCatalogueChapterVideoList);
}
@RequestMapping("/addCourseCatalogueChapterVideo")
public R addCourseCatalogueChapterVideo(@RequestBody CourseCatalogueChapterVideoEntity courseCatalogueChapterVideoEntity){
boolean save = courseCatalogueChapterVideoService.save(courseCatalogueChapterVideoEntity);
if (courseCatalogueChapterVideoEntity.getType()==2){
int duration = getMP3Duration(courseCatalogueChapterVideoEntity);
courseCatalogueChapterVideoEntity.setDuration(duration);
courseCatalogueChapterVideoService.updateById(courseCatalogueChapterVideoEntity);
}
return save?R.ok():R.error("error");
}
@RequestMapping("/delCourseCatalogueChapterVideo")
public R delCourseCatalogueChapterVideo(@RequestBody ParamTo param){
courseCatalogueChapterVideoService.removeById(param.getId());
return R.ok();
}
@RequestMapping("/changeCatalogueFee")
public R changeCatalogueFee(@RequestBody ChangeCatalogueFeeDto p){
return courseCatalogueService.changeCatalogueFee(p);
}
/**
* 获取课程说明
* @param map
* @return
*/
@RequestMapping("/getCourseRecord")
public R getCourseRecord(@RequestBody Map<String,Integer> map){
SysCourseDirectEntity info = sysCourseDirectService.getOne(new LambdaQueryWrapper<SysCourseDirectEntity>().eq(SysCourseDirectEntity::getType, map.get("type")));
return R.ok().put("result",info);
}
@RequestMapping("/editCourseRecord")
public R editCourseRecord(@RequestBody EditCourseRecordDto editCourseRecordDto){
SysCourseDirectEntity sysCourseDirectEntity = sysCourseDirectService.editCourseRecord(editCourseRecordDto);
return R.ok().put("result",sysCourseDirectEntity);
}
//课程目录迁移
@RequestMapping("/courseCatalogueTransfer")
public R courseCatalogueTransfer(@RequestBody Map<String,Object> param){
return courseService.courseCatalogueTransfer(param);
}
//查询课程被哪些标签关联
@RequestMapping("/getCourseLableLinkList")
public R getCourseLableLinkList(@RequestBody Map<String,Object> param){
return courseService.getCourseLableLinkList(param);
}
@RequestMapping("/editCourseCatalogueChapterVideo")
public R editCourseCatalogueChapterVideo(@RequestBody CourseCatalogueChapterVideoEntity courseCatalogueChapterVideoEntity){
courseCatalogueChapterVideoService.updateById(courseCatalogueChapterVideoEntity);
if (courseCatalogueChapterVideoEntity.getType()==2){
int duration = getMP3Duration(courseCatalogueChapterVideoEntity);
courseCatalogueChapterVideoEntity.setDuration(duration);
courseCatalogueChapterVideoService.updateById(courseCatalogueChapterVideoEntity);
}
return R.ok();
}
@RequestMapping("/testCourse")
public R testCourse(){
courseService.testCourse();
return R.ok();
}
@RequestMapping("/getProductListForCourse")
public R getProductListForCourse(@RequestBody Map<String,Object> param){
Page<ShopProduct> shopProductListhopProducts = courseService.getProductListForCourse(param);
return R.ok().put("shopProductListhopProducts",shopProductListhopProducts);
}
//获取音频时长
public int getMP3Duration(CourseCatalogueChapterVideoEntity video){
try{
String s_str = "";
if (video.getVideo().startsWith("article/")) {
s_str = "http://oss.taihumed.com/voice/article/";
}else if (video.getVideo().startsWith("mingyijingcai/")) {
s_str = "http://oss.taihumed.com/voice/";
}else {
s_str = "http://oss.taihumed.com/voice/taiHuClass/";
}
URL url = new URL(s_str+video.getVideo());
MultimediaObject multimediaObject = new MultimediaObject(url);
long duration = (multimediaObject.getInfo().getDuration())/1000;
return Integer.parseInt(duration+"");
}catch (Exception e){
e.printStackTrace();
}
return 0;
}
}