Commit 6ccfd249 authored by liuyang's avatar liuyang

完成课程管理后台接口

parent c3c43641
...@@ -54,31 +54,38 @@ public class CourseController { ...@@ -54,31 +54,38 @@ public class CourseController {
return Result.succeed("ok"); return Result.succeed("ok");
} }
@ApiOperation("课程保存")
@ApiOperation("添加课程(第一步保存)") @PostMapping("/save")
@PostMapping("/saveStep1")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
@SysLog(value = "添加课程",includeParam = false)
public Result<Long> saveStep1(@RequestBody CourseStep1SaveModel model){
Long id = courseService.saveStep1(model);
return Result.succeed(id);
}
@ApiOperation("添加课程(第二步保存)")
@PostMapping("/saveStep2")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR) @RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
public Result<String> saveStep2(@RequestBody CourseStep2SaveModel chaperModel){ public Result<String> saveCourse(@RequestBody SaveCourseModel model){
courseService.saveStep2(chaperModel); courseService.saveCourse(model);
return Result.succeed("ok"); return Result.succeed("ok");
} }
// @ApiOperation("添加课程(第一步保存)")
@ApiOperation("添加课程(第二步中获取章节列表") // @PostMapping("/saveStep1")
@GetMapping("/chaperList/{courseId}") // @RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR) // @SysLog(value = "添加课程",includeParam = false)
public Result<List<CourseChaperModel>> chaperList(@PathVariable Long courseId){ // public Result<Long> saveStep1(@RequestBody CourseStep1SaveModel model){
List<CourseChaperModel> modelList = courseService.chaperList(courseId); // Long id = courseService.saveStep1(model);
return Result.succeed(modelList); // return Result.succeed(id);
} // }
// @ApiOperation("添加课程(第二步保存)")
// @PostMapping("/saveStep2")
// @RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
// public Result<String> saveStep2(@RequestBody CourseStep2SaveModel chaperModel){
// courseService.saveStep2(chaperModel);
// return Result.succeed("ok");
// }
// @ApiOperation("添加课程(第二步中获取章节列表")
// @GetMapping("/chaperList/{courseId}")
// @RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
// public Result<List<CourseChaperModel>> chaperList(@PathVariable Long courseId){
// List<CourseChaperModel> modelList = courseService.chaperList(courseId);
// return Result.succeed(modelList);
// }
@ApiOperation("修改章节名称") @ApiOperation("修改章节名称")
@PostMapping("/modifyChaperName") @PostMapping("/modifyChaperName")
@SysLog("修改章节名称") @SysLog("修改章节名称")
......
...@@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface AllowOrgCourseMapper extends BaseMapper<AllowOrgCoursePO> { public interface AllowOrgCourseMapper extends BaseMapper<AllowOrgCoursePO> {
void deleteByCourseId(Long courseId);
} }
...@@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface CourseAttachmentMapper extends BaseMapper<CourseAttachmentPO> { public interface CourseAttachmentMapper extends BaseMapper<CourseAttachmentPO> {
void deleteByCourseId(Long courseId);
} }
...@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qkdata.biz.enums.CourseStatusEnum; import com.qkdata.biz.enums.CourseStatusEnum;
import com.qkdata.biz.management.entity.CoursePO; import com.qkdata.biz.management.entity.CoursePO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qkdata.biz.management.vo.CourseAllowEnterpriseModel;
import com.qkdata.biz.management.vo.CourseAttachmentModel;
import com.qkdata.biz.management.vo.CourseListItemModel; import com.qkdata.biz.management.vo.CourseListItemModel;
import com.qkdata.biz.management.vo.QueryCourseModel; import com.qkdata.biz.management.vo.QueryCourseModel;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
...@@ -25,4 +27,8 @@ public interface CourseMapper extends BaseMapper<CoursePO> { ...@@ -25,4 +27,8 @@ public interface CourseMapper extends BaseMapper<CoursePO> {
List<CourseListItemModel> queryPageList(Page page, @Param("p") QueryCourseModel param); List<CourseListItemModel> queryPageList(Page page, @Param("p") QueryCourseModel param);
void updateStatusById(@Param("id") Long id, @Param("status") CourseStatusEnum status); void updateStatusById(@Param("id") Long id, @Param("status") CourseStatusEnum status);
List<CourseAttachmentModel> selectAttachmentListByCourseId(Long id);
List<CourseAllowEnterpriseModel> selectOrgListByCourseId(Long id);
} }
...@@ -19,4 +19,6 @@ import java.util.List; ...@@ -19,4 +19,6 @@ import java.util.List;
public interface CourseTagRelMapper extends BaseMapper<CourseTagRelPO> { public interface CourseTagRelMapper extends BaseMapper<CourseTagRelPO> {
List<CourseTagsModel> selectModelList(Long courseId); List<CourseTagsModel> selectModelList(Long courseId);
void deleteByCourseId(Long courseId);
} }
...@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; ...@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse;
import com.aliyuncs.vod.model.v20170321.GetVideoInfoResponse; import com.aliyuncs.vod.model.v20170321.GetVideoInfoResponse;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
...@@ -20,7 +19,6 @@ import com.qkdata.biz.management.vo.*; ...@@ -20,7 +19,6 @@ import com.qkdata.biz.management.vo.*;
import com.qkdata.common.base.enums.CodeEnum; import com.qkdata.common.base.enums.CodeEnum;
import com.qkdata.common.base.exception.BusinessException; import com.qkdata.common.base.exception.BusinessException;
import com.qkdata.common.base.model.PageResult; import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.base.model.Result;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -48,6 +46,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -48,6 +46,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
@Autowired @Autowired
private CourseTagRelMapper tagRelMapper; private CourseTagRelMapper tagRelMapper;
@Autowired @Autowired
private CourseAttachmentMapper attachmentMapper;
@Autowired
private CourseTagService tagService; private CourseTagService tagService;
@Autowired @Autowired
private TeacherService teacherService; private TeacherService teacherService;
...@@ -57,11 +57,11 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -57,11 +57,11 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
private ResourceService resourceService; private ResourceService resourceService;
public PageResult<CourseListItemModel> queryPageList(QueryCourseModel param) { public PageResult<CourseListItemModel> queryPageList(QueryCourseModel param) {
Page page = new Page(param.getPageIndex(),param.getPageSize()); Page page = new Page(param.getPageIndex(), param.getPageSize());
List<CourseListItemModel> list = baseMapper.queryPageList(page,param); List<CourseListItemModel> list = baseMapper.queryPageList(page, param);
for (CourseListItemModel course : list){ for (CourseListItemModel course : list) {
List<CourseTagPO> tagsList = tagService.findListByCourseId(course.getId()); List<CourseTagPO> tagsList = tagService.findListByCourseId(course.getId());
if (CollUtil.isNotEmpty(tagsList)){ if (CollUtil.isNotEmpty(tagsList)) {
List<String> tagNameList = tagsList.stream().map(CourseTagPO::getName).collect(Collectors.toList()); List<String> tagNameList = tagsList.stream().map(CourseTagPO::getName).collect(Collectors.toList());
course.setTags(tagNameList); course.setTags(tagNameList);
} }
...@@ -69,102 +69,121 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -69,102 +69,121 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
return PageResult.<CourseListItemModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build(); return PageResult.<CourseListItemModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
} }
@Transactional // @Transactional
public Long saveStep1(CourseStep1SaveModel model) { // public Long saveStep1(CourseStep1SaveModel model) {
CoursePO po = convertToPO(model); // CoursePO po = convertToPO(model);
if (po.getId() == null){ // if (po.getId() == null){
save(po); // save(po);
}else { // }else {
updateById(po); // updateById(po);
} // }
//
// if (CollUtil.isNotEmpty(model.getTagIds())){
// updateCourseTags(po.getId(),model.getTagIds());
// }
// if (model.getAllow() == CourseAllowEnum.SPECIFY){
// updateCourseAllowOrg(po.getId(),model.getAllowOrgIds());
// }
// return po.getId();
// }
if (CollUtil.isNotEmpty(model.getTagIds())){ // private void updateCourseAllowOrg(Long id, List<Long> allowOrgIds) {
updateCourseTags(po.getId(),model.getTagIds()); // //TODO
} // }
if (model.getAllow() == CourseAllowEnum.SPECIFY){ //
updateCourseAllowOrg(po.getId(),model.getAllowOrgIds()); // private void updateCourseTags(Long id, List<Long> tagIds) {
} // //TODO
return po.getId(); // }
}
private void updateCourseAllowOrg(Long id, List<Long> allowOrgIds) { // private CoursePO convertToPO(CourseStep1SaveModel model) {
//TODO // CoursePO po = new CoursePO();
} // po.setId(model.getId());
// po.setName(model.getName());
// po.setType(model.getType());
// po.setIntroduce(model.getIntroduce());
// po.setDetail(model.getDetail());
// po.setLogoUrl(model.getLogoUrl());
// po.setStatus(CourseStatusEnum.UP);
// po.setTeacherId(model.getTeacherId());
// po.setChargeModel(model.getChargeModel());
// if (po.getChargeModel() == CourseChargeModelEnum.PAY) {
// po.setPrice(model.getPrice());
// po.setValidPeriod(model.getValidPeriod());
// po.setVipPrice(model.getVipPrice());
// }
// po.setModel(CourseModelEnum.VOD);
// po.setAllow(model.getAllow());
// po.setSeriesId(model.getSeriesId());
// return po;
// }
private void updateCourseTags(Long id, List<Long> tagIds) { // @Transactional
//TODO // public void saveStep2(CourseStep2SaveModel model) {
} // try {
// Long resourceId = saveToResource(model.getVideoId());
private CoursePO convertToPO(CourseStep1SaveModel model) { // CourseChapterPO po = new CourseChapterPO();
CoursePO po = new CoursePO(); // po.setCourseId(model.getCourseId());
po.setId(model.getId()); // po.setName(model.getChaperName());
po.setName(model.getName()); // po.setResourceId(resourceId);
po.setType(model.getType()); // po.setSortNo(model.getSortNo());
po.setIntroduce(model.getIntroduce()); // chapterMapper.insert(po);
po.setDetail(model.getDetail()); // } catch (ClientException e) {
po.setLogoUrl(model.getLogoUrl()); // throw new BusinessException("获取视频信息错误");
po.setStatus(CourseStatusEnum.UP); // }
po.setTeacherId(model.getTeacherId()); //
po.setChargeModel(model.getChargeModel()); //
if (po.getChargeModel() == CourseChargeModelEnum.PAY){ // }
po.setPrice(model.getPrice()); //
po.setValidPeriod(model.getValidPeriod()); // private Long saveToResource(String videoId) throws ClientException {
po.setVipPrice(model.getVipPrice()); // //根据视频ID,获取视频信息
} // GetVideoInfoResponse videoInfoResponse = aliyunService.getVideoInfo(videoId);
po.setModel(CourseModelEnum.VOD); // Float duration = videoInfoResponse.getVideo().getDuration();
po.setAllow(model.getAllow()); // Long size = videoInfoResponse.getVideo().getSize();
po.setSeriesId(model.getSeriesId()); // String title = videoInfoResponse.getVideo().getTitle();
return po; // ResourcePO po = resourceService.getByVideoId(videoId);
} // if (po == null) {
// po = new ResourcePO();
@Transactional // }
public void saveStep2(CourseStep2SaveModel model) { // po.setName(title);
try { // po.setSize(size);
Long resourceId = saveToResource(model.getVideoId()); // po.setVideoDuration(duration);
CourseChapterPO po = new CourseChapterPO(); // resourceService.saveOrUpdate(po);
po.setCourseId(model.getCourseId()); // return po.getId();
po.setName(model.getChaperName()); // }
po.setResourceId(resourceId);
po.setSortNo(model.getSortNo());
chapterMapper.insert(po);
} catch (ClientException e) {
throw new BusinessException("获取视频信息错误");
}
}
private Long saveToResource(String videoId) throws ClientException {
//根据视频ID,获取视频信息
GetVideoInfoResponse videoInfoResponse = aliyunService.getVideoInfo(videoId);
Float duration = videoInfoResponse.getVideo().getDuration();
Long size = videoInfoResponse.getVideo().getSize();
String title = videoInfoResponse.getVideo().getTitle();
ResourcePO po = resourceService.getByVideoId(videoId);
if (po == null){
po = new ResourcePO();
}
po.setName(title);
po.setSize(size);
po.setVideoDuration(duration);
resourceService.saveOrUpdate(po);
return po.getId();
}
public CourseDetailModel getCourseDetail(Long id) { public CourseDetailModel getCourseDetail(Long id) {
CoursePO po = getById(id); CoursePO po = getById(id);
if (po == null){ if (po == null) {
throw new BusinessException("请求错误,课程不存在"); throw new BusinessException("请求错误,课程不存在");
} }
CourseDetailModel model = new CourseDetailModel(); CourseDetailModel model = new CourseDetailModel();
BeanUtils.copyProperties(po,model); BeanUtils.copyProperties(po, model);
addTeacherInfo(model);
addSeriesInfo(model); addSeriesInfo(model);
addTeacherInfo(model);
addTags(model); addTags(model);
//TODO addChaperInfo(model);
addAttachmentInfo(model);
addOrgInfo(model);
return model; return model;
} }
private void addOrgInfo(CourseDetailModel model) {
if (model.getAllow() == CourseAllowEnum.SPECIFY){
List<CourseAllowEnterpriseModel> allowOrgList = baseMapper.selectOrgListByCourseId(model.getId());
model.setAllowOrgList(allowOrgList);
}
}
private void addAttachmentInfo(CourseDetailModel model) {
List<CourseAttachmentModel> attachmentModelList = baseMapper.selectAttachmentListByCourseId(model.getId());
model.setAttachmentList(attachmentModelList);
}
private void addChaperInfo(CourseDetailModel model) {
List<CourseChaperModel> chaperList = chaperList(model.getId());
model.setChaperList(chaperList);
}
private void addTags(CourseDetailModel model) { private void addTags(CourseDetailModel model) {
List<CourseTagsModel> tags = tagRelMapper.selectModelList(model.getId()); List<CourseTagsModel> tags = tagRelMapper.selectModelList(model.getId());
model.setTagList(tags); model.setTagList(tags);
...@@ -172,21 +191,21 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -172,21 +191,21 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
private void addSeriesInfo(CourseDetailModel model) { private void addSeriesInfo(CourseDetailModel model) {
CourseSeriesPO po = seriesMapper.selectById(model.getSeriesId()); CourseSeriesPO po = seriesMapper.selectById(model.getSeriesId());
if (po != null){ if (po != null) {
model.setSeriesName(po.getName()); model.setSeriesName(po.getName());
} }
} }
private void addTeacherInfo(CourseDetailModel model) { private void addTeacherInfo(CourseDetailModel model) {
TeacherPO teacherPO = teacherService.getById(model.getTeacherId()); TeacherPO teacherPO = teacherService.getById(model.getTeacherId());
if (teacherPO != null){ if (teacherPO != null) {
model.setTeacherName(teacherPO.getName()); model.setTeacherName(teacherPO.getName());
} }
} }
public void modifyChaperName(ModifyChaperNameModel model) { public void modifyChaperName(ModifyChaperNameModel model) {
CourseChapterPO po = chapterMapper.selectById(model.getChaperId()); CourseChapterPO po = chapterMapper.selectById(model.getChaperId());
if (po == null){ if (po == null) {
throw new BusinessException("请求错误,章节不存在"); throw new BusinessException("请求错误,章节不存在");
} }
po.setName(model.getChaperName()); po.setName(model.getChaperName());
...@@ -196,7 +215,7 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -196,7 +215,7 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
@Transactional @Transactional
public void delChaper(Long chaperId) { public void delChaper(Long chaperId) {
CourseChapterPO po = chapterMapper.selectById(chaperId); CourseChapterPO po = chapterMapper.selectById(chaperId);
if (po != null){ if (po != null) {
chapterMapper.deleteById(chaperId); chapterMapper.deleteById(chaperId);
//删除资源 //删除资源
resourceService.removeById(po.getResourceId()); resourceService.removeById(po.getResourceId());
...@@ -206,21 +225,21 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -206,21 +225,21 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
} }
public void modifyStatus(ModifyCourseStatusModel model) { public void modifyStatus(ModifyCourseStatusModel model) {
baseMapper.updateStatusById(model.getId(),model.getStatus()); baseMapper.updateStatusById(model.getId(), model.getStatus());
} }
public List<CourseChaperModel> chaperList(Long courseId) { public List<CourseChaperModel> chaperList(Long courseId) {
List<CourseChaperModel> list = Lists.newArrayList(); List<CourseChaperModel> list = Lists.newArrayList();
List<CourseChapterPO> poList = chapterMapper.selectList(Wrappers.<CourseChapterPO>lambdaQuery().eq(CourseChapterPO::getCourseId,courseId).orderByAsc(CourseChapterPO::getSortNo)); List<CourseChapterPO> poList = chapterMapper.selectList(Wrappers.<CourseChapterPO>lambdaQuery().eq(CourseChapterPO::getCourseId, courseId).orderByAsc(CourseChapterPO::getSortNo));
if (CollUtil.isNotEmpty(poList)){ if (CollUtil.isNotEmpty(poList)) {
for (CourseChapterPO po : poList){ for (CourseChapterPO po : poList) {
CourseChaperModel model = new CourseChaperModel(); CourseChaperModel model = new CourseChaperModel();
model.setId(po.getId()); model.setId(po.getId());
model.setName(po.getName()); model.setName(po.getName());
model.setCourseId(po.getCourseId()); model.setCourseId(po.getCourseId());
model.setSortNo(po.getSortNo()); model.setSortNo(po.getSortNo());
Long resourceId = po.getResourceId(); Long resourceId = po.getResourceId();
setVideoInfo(resourceId,model); setVideoInfo(resourceId, model);
list.add(model); list.add(model);
} }
} }
...@@ -229,30 +248,127 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> { ...@@ -229,30 +248,127 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
private void setVideoInfo(Long resourceId, CourseChaperModel model) { private void setVideoInfo(Long resourceId, CourseChaperModel model) {
ResourcePO resourcePO = resourceService.getById(resourceId); ResourcePO resourcePO = resourceService.getById(resourceId);
if (resourcePO != null){ if (resourcePO != null) {
String videoId = resourcePO.getVideoId(); String videoId = resourcePO.getVideoId();
try { try {
GetPlayInfoResponse response = aliyunService.getVideoPlayInfo(videoId); GetPlayInfoResponse response = aliyunService.getVideoPlayInfo(videoId);
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();
if (CollUtil.isNotEmpty(playInfoList)){ if (CollUtil.isNotEmpty(playInfoList)) {
GetPlayInfoResponse.PlayInfo playInfo = playInfoList.get(0); GetPlayInfoResponse.PlayInfo playInfo = playInfoList.get(0);
model.setVideoUrl(playInfo.getPlayURL()); model.setVideoUrl(playInfo.getPlayURL());
GetPlayInfoResponse.VideoBase videoBase = response.getVideoBase(); GetPlayInfoResponse.VideoBase videoBase = response.getVideoBase();
model.setSnapshotUrl(videoBase.getCoverURL()); model.setSnapshotUrl(videoBase.getCoverURL());
} }
} catch (ClientException e) { } catch (ClientException e) {
log.error(e.getMessage(),e); log.error(e.getMessage(), e);
} }
} }
} }
public PageResult<CourseSeriesPO> querySeriesPageList(QueryCourseSeriesModel model) { public PageResult<CourseSeriesPO> querySeriesPageList(QueryCourseSeriesModel model) {
Page page = new Page(model.getPageIndex(),model.getPageIndex()); Page page = new Page(model.getPageIndex(), model.getPageIndex());
List<CourseSeriesPO> list = seriesMapper.queryPageList(page,model); List<CourseSeriesPO> list = seriesMapper.queryPageList(page, model);
return PageResult.<CourseSeriesPO>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build(); return PageResult.<CourseSeriesPO>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
} }
public void saveSeries(CourseSeriesPO po) { public void saveSeries(CourseSeriesPO po) {
seriesMapper.insert(po); seriesMapper.insert(po);
} }
@Transactional
public void saveCourse(SaveCourseModel model) {
Long id = saveOrUpdateCourseBaseInfo(model);
saveCourseChaper(id, model.getChaperList());
saveCourseAttachment(id, model.getAttachmenIds());
saveOrUpdateCourseTags(id, model.getTagIds());
if (model.getAllow() == CourseAllowEnum.SPECIFY){
saveOrUpdateOrg(id,model.getAllowOrgIds());
}
}
private void saveOrUpdateOrg(Long courseId, List<Long> allowOrgIds) {
if (CollUtil.isNotEmpty(allowOrgIds)){
allowOrgCourseMapper.deleteByCourseId(courseId);
for (Long orgId : allowOrgIds){
AllowOrgCoursePO po = new AllowOrgCoursePO();
po.setCourseId(courseId);
po.setOrgId(orgId);
allowOrgCourseMapper.insert(po);
}
}
}
private void saveOrUpdateCourseTags(Long courseId, List<Long> tagIds) {
if (CollUtil.isNotEmpty(tagIds)){
tagRelMapper.deleteByCourseId(courseId);
for (Long tagId : tagIds){
CourseTagRelPO po = new CourseTagRelPO();
po.setCourseId(courseId);
po.setTagId(tagId);
tagRelMapper.insert(po);
}
}
}
private void saveCourseAttachment(Long courseId, List<Long> attachmenIds) {
if (CollUtil.isNotEmpty(attachmenIds)){
attachmentMapper.deleteByCourseId(courseId);
for (Long attachmentId : attachmenIds){
CourseAttachmentPO po = new CourseAttachmentPO();
po.setCourseId(courseId);
po.setResourceId(attachmentId);
attachmentMapper.insert(po);
}
}
}
private void saveCourseChaper(Long courseId, List<SaveCourseChaperModel> chaperList) {
if (CollUtil.isNotEmpty(chaperList)){
for (SaveCourseChaperModel chaperModel : chaperList){
Long chaperId = chaperModel.getChaperId();
if (chaperId == null){
//只做章节新增保存
ResourcePO resourcePO = new ResourcePO();
resourcePO.setName(chaperModel.getChaperName());
resourcePO.setVideoId(chaperModel.getVideoId());
try {
GetVideoInfoResponse videoInfoResponse = aliyunService.getVideoInfo(chaperModel.getVideoId());
resourcePO.setSize(videoInfoResponse.getVideo().getSize());
resourcePO.setVideoDuration(videoInfoResponse.getVideo().getDuration());
} catch (ClientException e) {
log.error(e.getMessage(),e);
}
resourceService.save(resourcePO);
CourseChapterPO chapterPO = new CourseChapterPO();
chapterPO.setCourseId(courseId);
chapterPO.setSortNo(chaperModel.getSortNo());
chapterPO.setName(chaperModel.getChaperName());
chapterPO.setResourceId(resourcePO.getId());
chapterMapper.insert(chapterPO);
}
}
}
}
private Long saveOrUpdateCourseBaseInfo(SaveCourseModel model) {
CoursePO po = new CoursePO();
po.setId(model.getId());
po.setName(model.getName());
po.setType(model.getType());
po.setIntroduce(model.getIntroduce());
po.setDetail(model.getDetail());
po.setLogoUrl(model.getLogoUrl());
po.setStatus(CourseStatusEnum.UP);
po.setTeacherId(model.getTeacherId());
po.setChargeModel(model.getChargeModel());
if (po.getChargeModel() == CourseChargeModelEnum.PAY) {
po.setPrice(model.getPrice());
po.setValidPeriod(model.getValidPeriod());
po.setVipPrice(model.getVipPrice());
}
po.setModel(CourseModelEnum.VOD);
po.setSeriesId(model.getSeriesId());
return po.getId();
}
} }
\ No newline at end of file
package com.qkdata.biz.management.vo;
import lombok.Data;
@Data
public class SaveCourseChaperModel {
private Long chaperId;
private String chaperName;
private Integer sortNo = 0;
private String videoId;
}
package com.qkdata.biz.management.vo;
import com.qkdata.biz.enums.CourseAllowEnum;
import com.qkdata.biz.enums.CourseChargeModelEnum;
import com.qkdata.biz.enums.CourseTypeEnum;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class SaveCourseModel {
private Long id;
/**
* 课程名称
*/
private String name;
/**
* 课程类型(单集、系列)
*/
private CourseTypeEnum type;
/**
* 课程简介
*/
private String introduce;
/**
* 课程介绍
*/
private String detail;
/**
* 课程封面url
*/
private String logoUrl;
/**
* 讲师ID
*/
private Long teacherId;
/**
* 讲师名称
*/
private String teacherName;
/**
* 收费模式(免费、会员免费、付费点播)
*/
private CourseChargeModelEnum chargeModel;
/**
* 付费点播普通用户价
*/
private BigDecimal price;
/**
* 付费点播会员价
*/
private BigDecimal vipPrice;
/**
* 有效时间(小时)
*/
private Integer validPeriod;
/**
* 系列ID
*/
private Long seriesId;
/**
* 系列名称
*/
private String seriesName;
/**
* 可见范围(全部、指定企业)
*/
private CourseAllowEnum allow;
/**
* 指定企业的列表
*/
private List<Long> allowOrgIds;
/**
* 标签列表
*/
private List<Long> tagIds;
/**
* 课程章节列表
*/
private List<SaveCourseChaperModel> chaperList;
/**
* 课程附件列表
*/
private List<Long> attachmenIds;
}
...@@ -2,4 +2,7 @@ ...@@ -2,4 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qkdata.biz.management.mapper.AllowOrgCourseMapper"> <mapper namespace="com.qkdata.biz.management.mapper.AllowOrgCourseMapper">
<delete id="deleteByCourseId">
delete from allow_org_course where course_id = #{courseId}
</delete>
</mapper> </mapper>
...@@ -31,4 +31,22 @@ ...@@ -31,4 +31,22 @@
ORDER BY c.create_time DESC ORDER BY c.create_time DESC
</select> </select>
<select id="selectAttachmentListByCourseId"
resultType="com.qkdata.biz.management.vo.CourseAttachmentModel">
SELECT a.course_id,
r.id resource_id,
r.`name` resource_name,
r.url resource_url
from course_attachment a
INNER JOIN resource r on a.resource_id = r.id
WHERE a.course_id = #{id}
</select>
<select id="selectOrgListByCourseId" resultType="com.qkdata.biz.management.vo.CourseAllowEnterpriseModel">
SELECT r.course_id,
o.`name` orgName,
o.id orgId
from allow_org_course r
INNER JOIN organization o on r.org_id = o.id
WHERE r.course_id = #{id}
</select>
</mapper> </mapper>
...@@ -2,4 +2,7 @@ ...@@ -2,4 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qkdata.biz.management.mapper.CourseAttachmentMapper"> <mapper namespace="com.qkdata.biz.management.mapper.CourseAttachmentMapper">
<delete id="deleteByCourseId">
delete from course_attachment where course_id = #{courseId}
</delete>
</mapper> </mapper>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qkdata.biz.management.mapper.CourseTagRelMapper"> <mapper namespace="com.qkdata.biz.management.mapper.CourseTagRelMapper">
<delete id="deleteByCourseId">
delete from course_tag_rel where course_id = #{courseId}
</delete>
<select id="selectModelList" resultType="com.qkdata.biz.management.vo.CourseTagsModel"> <select id="selectModelList" resultType="com.qkdata.biz.management.vo.CourseTagsModel">
SELECT r.course_id,r.tag_id,t.`name` tag_name SELECT r.course_id,r.tag_id,t.`name` tag_name
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment