Commit 6ccfd249 authored by liuyang's avatar liuyang

完成课程管理后台接口

parent c3c43641
......@@ -54,31 +54,38 @@ public class CourseController {
return Result.succeed("ok");
}
@ApiOperation("添加课程(第一步保存)")
@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")
@ApiOperation("课程保存")
@PostMapping("/save")
@RequiresRoles(value = {BizConstants.ROLE_ADMIN,BizConstants.ROLE_OPERATOR},logical = Logical.OR)
public Result<String> saveStep2(@RequestBody CourseStep2SaveModel chaperModel){
courseService.saveStep2(chaperModel);
public Result<String> saveCourse(@RequestBody SaveCourseModel model){
courseService.saveCourse(model);
return Result.succeed("ok");
}
// @ApiOperation("添加课程(第一步保存)")
// @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)
// 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("添加课程(第二步中获取章节列表")
// @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("修改章节名称")
@PostMapping("/modifyChaperName")
@SysLog("修改章节名称")
......
......@@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface AllowOrgCourseMapper extends BaseMapper<AllowOrgCoursePO> {
void deleteByCourseId(Long courseId);
}
......@@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CourseAttachmentMapper extends BaseMapper<CourseAttachmentPO> {
void deleteByCourseId(Long courseId);
}
......@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qkdata.biz.enums.CourseStatusEnum;
import com.qkdata.biz.management.entity.CoursePO;
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.QueryCourseModel;
import org.apache.ibatis.annotations.Mapper;
......@@ -25,4 +27,8 @@ public interface CourseMapper extends BaseMapper<CoursePO> {
List<CourseListItemModel> queryPageList(Page page, @Param("p") QueryCourseModel param);
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;
public interface CourseTagRelMapper extends BaseMapper<CourseTagRelPO> {
List<CourseTagsModel> selectModelList(Long courseId);
void deleteByCourseId(Long courseId);
}
......@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse;
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.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
......@@ -20,7 +19,6 @@ import com.qkdata.biz.management.vo.*;
import com.qkdata.common.base.enums.CodeEnum;
import com.qkdata.common.base.exception.BusinessException;
import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.base.model.Result;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -48,6 +46,8 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
@Autowired
private CourseTagRelMapper tagRelMapper;
@Autowired
private CourseAttachmentMapper attachmentMapper;
@Autowired
private CourseTagService tagService;
@Autowired
private TeacherService teacherService;
......@@ -57,11 +57,11 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
private ResourceService resourceService;
public PageResult<CourseListItemModel> queryPageList(QueryCourseModel param) {
Page page = new Page(param.getPageIndex(),param.getPageSize());
List<CourseListItemModel> list = baseMapper.queryPageList(page,param);
for (CourseListItemModel course : list){
Page page = new Page(param.getPageIndex(), param.getPageSize());
List<CourseListItemModel> list = baseMapper.queryPageList(page, param);
for (CourseListItemModel course : list) {
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());
course.setTags(tagNameList);
}
......@@ -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();
}
@Transactional
public Long saveStep1(CourseStep1SaveModel model) {
CoursePO po = convertToPO(model);
if (po.getId() == null){
save(po);
}else {
updateById(po);
}
// @Transactional
// public Long saveStep1(CourseStep1SaveModel model) {
// CoursePO po = convertToPO(model);
// if (po.getId() == null){
// save(po);
// }else {
// 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())){
updateCourseTags(po.getId(),model.getTagIds());
}
if (model.getAllow() == CourseAllowEnum.SPECIFY){
updateCourseAllowOrg(po.getId(),model.getAllowOrgIds());
}
return po.getId();
}
// private void updateCourseAllowOrg(Long id, List<Long> allowOrgIds) {
// //TODO
// }
//
// private void updateCourseTags(Long id, List<Long> tagIds) {
// //TODO
// }
private void updateCourseAllowOrg(Long id, List<Long> allowOrgIds) {
//TODO
}
// private CoursePO convertToPO(CourseStep1SaveModel 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.setAllow(model.getAllow());
// po.setSeriesId(model.getSeriesId());
// return po;
// }
private void updateCourseTags(Long id, List<Long> tagIds) {
//TODO
}
private CoursePO convertToPO(CourseStep1SaveModel 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.setAllow(model.getAllow());
po.setSeriesId(model.getSeriesId());
return po;
}
@Transactional
public void saveStep2(CourseStep2SaveModel model) {
try {
Long resourceId = saveToResource(model.getVideoId());
CourseChapterPO po = new CourseChapterPO();
po.setCourseId(model.getCourseId());
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();
}
// @Transactional
// public void saveStep2(CourseStep2SaveModel model) {
// try {
// Long resourceId = saveToResource(model.getVideoId());
// CourseChapterPO po = new CourseChapterPO();
// po.setCourseId(model.getCourseId());
// 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) {
CoursePO po = getById(id);
if (po == null){
if (po == null) {
throw new BusinessException("请求错误,课程不存在");
}
CourseDetailModel model = new CourseDetailModel();
BeanUtils.copyProperties(po,model);
addTeacherInfo(model);
BeanUtils.copyProperties(po, model);
addSeriesInfo(model);
addTeacherInfo(model);
addTags(model);
//TODO
addChaperInfo(model);
addAttachmentInfo(model);
addOrgInfo(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) {
List<CourseTagsModel> tags = tagRelMapper.selectModelList(model.getId());
model.setTagList(tags);
......@@ -172,21 +191,21 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
private void addSeriesInfo(CourseDetailModel model) {
CourseSeriesPO po = seriesMapper.selectById(model.getSeriesId());
if (po != null){
if (po != null) {
model.setSeriesName(po.getName());
}
}
private void addTeacherInfo(CourseDetailModel model) {
TeacherPO teacherPO = teacherService.getById(model.getTeacherId());
if (teacherPO != null){
if (teacherPO != null) {
model.setTeacherName(teacherPO.getName());
}
}
public void modifyChaperName(ModifyChaperNameModel model) {
CourseChapterPO po = chapterMapper.selectById(model.getChaperId());
if (po == null){
if (po == null) {
throw new BusinessException("请求错误,章节不存在");
}
po.setName(model.getChaperName());
......@@ -196,7 +215,7 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
@Transactional
public void delChaper(Long chaperId) {
CourseChapterPO po = chapterMapper.selectById(chaperId);
if (po != null){
if (po != null) {
chapterMapper.deleteById(chaperId);
//删除资源
resourceService.removeById(po.getResourceId());
......@@ -206,21 +225,21 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
}
public void modifyStatus(ModifyCourseStatusModel model) {
baseMapper.updateStatusById(model.getId(),model.getStatus());
baseMapper.updateStatusById(model.getId(), model.getStatus());
}
public List<CourseChaperModel> chaperList(Long courseId) {
List<CourseChaperModel> list = Lists.newArrayList();
List<CourseChapterPO> poList = chapterMapper.selectList(Wrappers.<CourseChapterPO>lambdaQuery().eq(CourseChapterPO::getCourseId,courseId).orderByAsc(CourseChapterPO::getSortNo));
if (CollUtil.isNotEmpty(poList)){
for (CourseChapterPO po : poList){
List<CourseChapterPO> poList = chapterMapper.selectList(Wrappers.<CourseChapterPO>lambdaQuery().eq(CourseChapterPO::getCourseId, courseId).orderByAsc(CourseChapterPO::getSortNo));
if (CollUtil.isNotEmpty(poList)) {
for (CourseChapterPO po : poList) {
CourseChaperModel model = new CourseChaperModel();
model.setId(po.getId());
model.setName(po.getName());
model.setCourseId(po.getCourseId());
model.setSortNo(po.getSortNo());
Long resourceId = po.getResourceId();
setVideoInfo(resourceId,model);
setVideoInfo(resourceId, model);
list.add(model);
}
}
......@@ -229,30 +248,127 @@ public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
private void setVideoInfo(Long resourceId, CourseChaperModel model) {
ResourcePO resourcePO = resourceService.getById(resourceId);
if (resourcePO != null){
if (resourcePO != null) {
String videoId = resourcePO.getVideoId();
try {
GetPlayInfoResponse response = aliyunService.getVideoPlayInfo(videoId);
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();
if (CollUtil.isNotEmpty(playInfoList)){
if (CollUtil.isNotEmpty(playInfoList)) {
GetPlayInfoResponse.PlayInfo playInfo = playInfoList.get(0);
model.setVideoUrl(playInfo.getPlayURL());
GetPlayInfoResponse.VideoBase videoBase = response.getVideoBase();
model.setSnapshotUrl(videoBase.getCoverURL());
}
} catch (ClientException e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
}
}
}
public PageResult<CourseSeriesPO> querySeriesPageList(QueryCourseSeriesModel model) {
Page page = new Page(model.getPageIndex(),model.getPageIndex());
List<CourseSeriesPO> list = seriesMapper.queryPageList(page,model);
Page page = new Page(model.getPageIndex(), model.getPageIndex());
List<CourseSeriesPO> list = seriesMapper.queryPageList(page, model);
return PageResult.<CourseSeriesPO>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
}
public void saveSeries(CourseSeriesPO 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 @@
<!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">
<delete id="deleteByCourseId">
delete from allow_org_course where course_id = #{courseId}
</delete>
</mapper>
......@@ -31,4 +31,22 @@
ORDER BY c.create_time DESC
</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>
......@@ -2,4 +2,7 @@
<!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">
<delete id="deleteByCourseId">
delete from course_attachment where course_id = #{courseId}
</delete>
</mapper>
<?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">
<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 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