Commit d3d9ff85 authored by liuyang's avatar liuyang

添加课程管理 暂存

parent 7292e6fd
package com.qkdata.biz.enums;
public enum CourseChargeModelEnum {
/**
* 免费
*/
FREE,
/**
* 会员免费
*/
VIP_FREE,
/**
* 付费点播
*/
PAY
}
package com.qkdata.biz.enums;
public enum CourseStatusEnum {
/**
* 上架
*/
UP,
/**
* 下架
*/
DOWN
}
package com.qkdata.biz.management.controller;
import com.qkdata.biz.management.service.CourseService;
import com.qkdata.biz.management.vo.CourseListItemModel;
import com.qkdata.biz.management.vo.QueryCourseModel;
import com.qkdata.common.base.model.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 课程 前端控制器
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Api(tags = "课程管理")
@RestController
@RequestMapping("/api/mgr/course")
public class CourseController {
@Autowired
private CourseService courseService;
@ApiOperation("课程查询")
@PostMapping("/list")
public PageResult<CourseListItemModel> list(@RequestBody QueryCourseModel param){
return courseService.queryPageList(param);
}
}
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 授权企业可见的课程
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("allow_org_course")
public class AllowOrgCoursePO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 课程ID
*/
private Long courseId;
/**
* 企业ID
*/
private Long orgId;
}
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 课程章节
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("course_chapter")
public class CourseChapterPO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 课程ID
*/
private Long courseId;
/**
* 视频ID
*/
private Long resourceId;
/**
* 章节标题
*/
private String name;
}
package com.qkdata.biz.management.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.biz.enums.CourseChargeModelEnum;
import com.qkdata.biz.enums.CourseStatusEnum;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 课程
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("course")
public class CoursePO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 课程类型(单集、系列)
*/
private String type;
/**
* 课程名称
*/
private String name;
/**
* 课程简介
*/
private String introduce;
/**
* 课程封面url
*/
private String logoUrl;
/**
* 状态(上架、下架)
*/
private CourseStatusEnum status;
/**
* 讲师ID
*/
private Long teacherId;
/**
* 收费模式(免费、会员免费、付费点播)
*/
private CourseChargeModelEnum chargeModel;
/**
* 付费点播普通用户价
*/
private BigDecimal price;
/**
* 付费点播会员价
*/
private BigDecimal vipPrice;
/**
* 有效时间(小时)
*/
private Integer validPeriod;
/**
* 课程形态(点播、直播、一对一)
*/
private String model;
/**
* 系列ID
*/
private Long seriesId;
/**
* 可见范围(全部、指定企业)
*/
private String allow;
/**
* 删除标识
*/
private Boolean isDel;
}
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 课程系列
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("course_series")
public class CourseSeriesPO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 系列名称
*/
private String name;
}
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 课程与标签关联表
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("course_tag_rel")
public class CourseTagRelPO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 课程ID
*/
private Long courseId;
/**
* 标签ID
*/
private Long tagId;
}
package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.AllowOrgCoursePO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 授权企业可见的课程 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Mapper
public interface AllowOrgCourseMapper extends BaseMapper<AllowOrgCoursePO> {
}
package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.CourseChapterPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 课程章节 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Mapper
public interface CourseChapterMapper extends BaseMapper<CourseChapterPO> {
}
package com.qkdata.biz.management.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qkdata.biz.management.entity.CoursePO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qkdata.biz.management.vo.CourseListItemModel;
import com.qkdata.biz.management.vo.QueryCourseModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 课程 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Mapper
public interface CourseMapper extends BaseMapper<CoursePO> {
List<CourseListItemModel> queryPageList(Page page, @Param("p") QueryCourseModel param);
}
package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.CourseSeriesPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 课程系列 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Mapper
public interface CourseSeriesMapper extends BaseMapper<CourseSeriesPO> {
}
......@@ -21,4 +21,6 @@ import java.util.List;
public interface CourseTagMapper extends BaseMapper<CourseTagPO> {
List<CourseTagPO> queryPageList(Page page, @Param("p") QueryCourseTagModel param);
List<CourseTagPO> selectListByCourseId(Long courseId);
}
package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.CourseTagRelPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 课程与标签关联表 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Mapper
public interface CourseTagRelMapper extends BaseMapper<CourseTagRelPO> {
}
package com.qkdata.biz.management.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qkdata.biz.management.entity.CoursePO;
import com.qkdata.biz.management.entity.CourseTagPO;
import com.qkdata.biz.management.mapper.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qkdata.biz.management.vo.CourseListItemModel;
import com.qkdata.biz.management.vo.QueryCourseModel;
import com.qkdata.common.base.enums.CodeEnum;
import com.qkdata.common.base.model.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 课程管理 服务类
* </p>
*
* @author liuyang
* @since 2021-05-19
*/
@Service
public class CourseService extends ServiceImpl<CourseMapper, CoursePO> {
@Autowired
private AllowOrgCourseMapper allowOrgCourseMapper;
@Autowired
private CourseChapterMapper chapterMapper;
@Autowired
private CourseSeriesMapper seriesMapper;
@Autowired
private CourseTagRelMapper tagRelMapper;
@Autowired
private CourseTagService tagService;
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){
List<CourseTagPO> tagsList = tagService.findListByCourseId(course.getId());
if (CollUtil.isNotEmpty(tagsList)){
List<String> tagNameList = tagsList.stream().map(CourseTagPO::getName).collect(Collectors.toList());
course.setTags(tagNameList);
}
}
return PageResult.<CourseListItemModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
}
}
\ No newline at end of file
......@@ -27,4 +27,8 @@ public class CourseTagService extends ServiceImpl<CourseTagMapper, CourseTagPO>
List<CourseTagPO> pageList = baseMapper.queryPageList(page,param);
return PageResult.<CourseTagPO>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(pageList).build();
}
public List<CourseTagPO> findListByCourseId(Long courseId) {
return baseMapper.selectListByCourseId(courseId);
}
}
\ No newline at end of file
package com.qkdata.biz.management.vo;
import com.qkdata.biz.enums.CourseChargeModelEnum;
import com.qkdata.biz.enums.CourseStatusEnum;
import lombok.Data;
import java.util.List;
@Data
public class CourseListItemModel {
/**
* 课程ID
*/
private Long id;
/**
* 课程名称
*/
private String name;
/**
* 系列名称
*/
private String seriesName;
/**
* 所属讲师名称
*/
private String teacherName;
/**
* 付费模式
*/
private CourseChargeModelEnum chargeModel;
/**
* 标签列表
*/
private List<String> tags;
/**
* 课程状态
*/
private CourseStatusEnum status;
}
package com.qkdata.biz.management.vo;
import com.qkdata.biz.enums.CourseChargeModelEnum;
import com.qkdata.biz.enums.CourseStatusEnum;
import com.qkdata.common.constants.Constants;
import lombok.Data;
@Data
public class QueryCourseModel {
private int pageIndex = Constants.DEFAULT_PAGE;
private int pageSize = Constants.DEFAULT_PAGE_SIZE;
/**
* 课程名称
*/
private String name;
/**
* 系列名称
*/
private String seriesName;
/**
* 付费模式
*/
private CourseChargeModelEnum chargeModel;
/**
* 课程状态
*/
private CourseStatusEnum status;
}
<?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.AllowOrgCourseMapper">
</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.CourseMapper">
<select id="queryPageList" resultType="com.qkdata.biz.management.vo.CourseListItemModel">
SELECT c.id,
c.`name`,
s.`name` series_name,
t.`name` teacher_name,
c.charge_model,
c.`status`
from course c
INNER JOIN teacher t on c.teacher_id = t.id
LEFT JOIN course_series s on c.series_id = s.id
WHERE c.is_del = 0
<if test="p.name != null and p.name != ''">
AND c.`name` LIKE CONCAT('%',#{p.name},'%')
</if>
<if test="p.seriesName != null and p.seriesName != ''">
AND s.`name` LIKE CONCAT('%',#{p.seriesName},'%')
</if>
<if test="p.chargeModel != null">
AND c.charge_model = #{p.chargeModel}
</if>
<if test="p.status != null">
AND c.`status` = #{p.status}
</if>
ORDER BY c.create_time DESC
</select>
</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.CourseChapterMapper">
</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.CourseSeriesMapper">
</mapper>
......@@ -9,4 +9,10 @@
and name like concat('%',#{p.name},'%')
</if>
</select>
<select id="selectListByCourseId" resultType="com.qkdata.biz.management.entity.CourseTagPO">
select t.*
from course_tag t
inner join course_tag_rel r on t.id = r.tag_id
where r.course_id = #{courseId}
</select>
</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">
</mapper>
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