绑定媒资
需求分析
到目前为止,媒资管理已完成文件上传、视频处理、我的媒资功能等基本功能,其它模块可以使用媒资文件,本节要讲解课程计划绑定媒资文件。
如何将课程计划绑定媒资呢?
首先进入课程计划界面,然后选择要绑定的视频进行绑定即可。
具体的业务流程如下:
- 教育机构用户进入课程管理页面并编辑某一个课程,在"课程大纲"标签页的某一小节后可点击”添加视频“。
- 弹出添加视频对话框,可通过视频关键字搜索已审核通过的视频媒资。
- 选择视频媒资,点击提交按钮,完成课程计划绑定媒资流程。
- 课程计划关联视频后如下图:
- 点击已经绑定的视频名称即可解除绑定。
数据模型
课程计划绑定媒资文件后存储至课程计划绑定媒资表
接口定义
根据业务流程,用户进入课程计划列表,首先确定向哪个课程计划添加视频,点击”添加视频“后用户选择视频,选择视频,点击提交,前端以json格式请求以下参数: 提交媒资文件id、文件名称、教学计划id
{
"mediaId": "70a98b4a2fffc89e50b101f959cc33ca",
"fileName": "22-Hmily实现TCC事务-开发bank2的confirm方法.avi",
"teachplanId": 257
}
此接口在内容管理模块提供。
在内容管理模块定义请求参数模型类型
package com.xuecheng.content.model.dto;
@Data
@ApiModel(value="BindTeachplanMediaDto", description="教学计划-媒资绑定提交数据")
public class BindTeachplanMediaDto {
@ApiModelProperty(value = "媒资文件id", required = true)
private String mediaId;
@ApiModelProperty(value = "媒资文件名称", required = true)
private String fileName;
@ApiModelProperty(value = "课程计划标识", required = true)
private Long teachplanId;
}
在TeachplanController类中定义接口如下:
package com.xuecheng.content.api;
/**
* @description 课程计划管理接口
* @author Mr.M
* @date 2022/9/6 11:29
* @version 1.0
*/
@Api(value = "课程计划管理接口",tags = "课程计划管理接口")
@RestController
public class TeachplanController {
@Autowired
TeachplanService teachplanService;
@ApiOperation(value = "课程计划和媒资信息绑定")
@PostMapping("/teachplan/association/media")
public void associationMedia(@RequestBody BindTeachplanMediaDto bindTeachplanMediaDto){
}
}
接口开发
DAO开发
对teachplanMedia表自动生成Mapper。
Service开发
根据需求定义service接口
package com.xuecheng.content.service;
/**
* 课程计划管理接口
*/
public interface TeachplanService {
/**
* @description 教学计划绑定媒资
* @param bindTeachplanMediaDto
* @return com.xuecheng.content.model.po.TeachplanMedia
* @author Mr.M
* @date 2022/9/14 22:20
*/
public TeachplanMedia associationMedia(BindTeachplanMediaDto bindTeachplanMediaDto);
}
定义接口实现
package com.xuecheng.content.service.impl;
public class TeachplanServiceImpl implements TeachplanService {
@Autowired
TeachplanMapper teachplanMapper;
@Autowired
TeachplanMediaMapper teachplanMediaMapper;
/**
* 课程计划绑定媒资
* @param bindTeachplanMediaDto
* @return
*/
@Transactional
@Override
public TeachplanMedia associationMedia(BindTeachplanMediaDto bindTeachplanMediaDto) {
//教学计划id
Long teachplanId = bindTeachplanMediaDto.getTeachplanId();
Teachplan teachplan = teachplanMapper.selectById(teachplanId); // 课程计划
if(teachplan==null){
XueChengPlusException.cast("教学计划不存在");
}
Integer grade = teachplan.getGrade();
if(grade!=2){
XueChengPlusException.cast("只允许第二级教学计划绑定媒资文件");
}
//课程id
Long courseId = teachplan.getCourseId();
//先删除原来该教学计划绑定的媒资
teachplanMediaMapper.delete(new LambdaQueryWrapper<TeachplanMedia>().eq(TeachplanMedia::getTeachplanId,teachplanId));
//再添加教学计划与媒资的绑定关系
TeachplanMedia teachplanMedia = new TeachplanMedia();
teachplanMedia.setCourseId(courseId);
teachplanMedia.setTeachplanId(teachplanId);
teachplanMedia.setMediaFilename(bindTeachplanMediaDto.getFileName());
teachplanMedia.setMediaId(bindTeachplanMediaDto.getMediaId());
teachplanMedia.setCreateDate(LocalDateTime.now());
teachplanMediaMapper.insert(teachplanMedia);
return teachplanMedia;
}
}
完善接口层调用Service层的代码
package com.xuecheng.content.api;
/**
* @author Mr.M
* @version 1.0
* @description 课程计划管理接口
* @date 2022/9/6 11:29
*/
@Api(value = "课程计划管理接口", tags = "课程计划管理接口")
@RestController
public class TeachplanController {
@Autowired
TeachplanService teachplanService;
@ApiOperation(value = "课程计划和媒资信息绑定")
@PostMapping("/teachplan/association/media")
public void associationMedia(@RequestBody BindTeachplanMediaDto bindTeachplanMediaDto) {
teachplanService.associationMedia(bindTeachplanMediaDto);
}
}
接口测试
此功能较为简单推荐直接前后端联调