《每天一个小项目》第一章 课程管理 20210316

@[TOC]《每天一个小项目》第一章 课程管理

《每天一个小项目》第一章 课程管理

今天是2021.03.16 从今天开始开启 《每天一个小项目》 计划 每天变强一点点 但愿不要变秃 但不一定每天都能更 估计也没几个人看 那我就开始冲冲冲了!!!!!

主题: 课程管理

各位可能已经听够了各种各样的管理了 但是没法儿啊 谁能逃过增删改查呢???

  1. 课程发布 (附效果图)
    1.1 基本信息
    在这里插入图片描述

1.2 大纲管理

1.3 提交审核
在这里插入图片描述

必备环节 :小敲一下

项目前后端分离 软件后端万年不变 IDER ,前端 VsCode
用的技术 :

  1. 后端 :SpringBootJWTSpringCloudMavenRabbitMQ
    数据库不多说了Myspl
  2. 前端:VueEs6ElementUiajax

下面附上 代码

数据库
# 课程章节表

CREATE TABLE `edu_chapter`  (

  `id` VARCHAR(32) PRIMARY KEY COMMENT '章节ID',

  `course_id` VARCHAR(32) COMMENT '课程ID',

  `title` VARCHAR(50)  COMMENT '章节名称',

  `sort` INT(10) DEFAULT 0 COMMENT '显示排序',

  `gmt_create` DATETIME  COMMENT '创建时间',

  `gmt_modified` DATETIME COMMENT '更新时间'

)COMMENT = '课程章节';



INSERT INTO `edu_chapter` VALUES ('1', '14', '第一章:HTML', 1, '2020-01-01 12:27:40', '2020-01-01 12:55:30');

INSERT INTO `edu_chapter` VALUES ('15', '18', '第一章:Java入门', 1, '2020-01-01 12:27:40', '2020-01-01 12:27:40');

INSERT INTO `edu_chapter` VALUES ('3', '14', '第二章:CSS', 2, '2020-01-01 12:55:35', '2020-01-01 12:27:40');

INSERT INTO `edu_chapter` VALUES ('32', '18', '第二章:控制台输入和输出', 2, '2020-01-01 12:27:40', '2020-01-01 12:27:40');

INSERT INTO `edu_chapter` VALUES ('44', '18', '第三章:控制流', 3, '2020-01-01 12:27:40', '2020-01-01 12:27:40');

INSERT INTO `edu_chapter` VALUES ('48', '18', '第四章:类的定义', 4, '2020-01-01 12:27:40', '2020-01-01 12:27:40');

INSERT INTO `edu_chapter` VALUES ('63', '18', '第五章:数组', 5, '2020-01-01 12:27:40', '2020-01-01 12:27:40');

INSERT INTO `edu_chapter` VALUES ('64', '18', '第六章:继承', 6, '2020-01-01 12:27:40', '2020-01-01 12:27:40');

INSERT INTO `edu_chapter` VALUES ('65', '18', '第七章:多态性和抽象类', 7, '2020-01-01 12:27:40', '2020-01-01 12:27:40');



#课程表

CREATE TABLE `edu_course`  (

  `id` VARCHAR(32) PRIMARY KEY COMMENT '课程ID',

  `teacher_id` INT(19) COMMENT '课程讲师ID',

  `subject_id` VARCHAR(32) COMMENT '课程专业ID二级分类ID',

  `subject_parent_id` VARCHAR(32) COMMENT '一级分类ID',

  `title` VARCHAR(50) COMMENT '课程标题',

  `price` DECIMAL(10, 4) DEFAULT 0.0000 COMMENT '课程销售价格,设置为0则可免费观看',

  `lesson_num` INT(10) DEFAULT 0 COMMENT '总课时',

  `cover` VARCHAR(255) COMMENT '课程封面图片路径',

  `buy_count` BIGINT(10) DEFAULT 0 COMMENT '销售数量',

  `view_count` BIGINT(10) DEFAULT 0 COMMENT '浏览数量',

  `version` BIGINT(20) DEFAULT 1 COMMENT '乐观锁',

  `status` VARCHAR(10) DEFAULT 'Draft' COMMENT '视频状态 Draft未发布  Normal已发布',

  `gmt_create` DATETIME  COMMENT '创建时间',

  `gmt_modified` DATETIME  COMMENT '更新时间'

)COMMENT = '课程';



INSERT INTO `edu_course` VALUES ('10', 1, '221', NULL, '零基础入门学习Python课程学习', 1.0000, 10, '', 80, 165, 21, 'Draft', '2020-03-26 00:00:28', '2020-02-21 20:46:36');

INSERT INTO `edu_course` VALUES ('1282276374928773122', 1, '401', '4', '测试003', 10.0000, 100, '', 0, 0, 1, 'Draft', '2020-07-12 19:31:25', '2020-07-12 19:46:44');

INSERT INTO `edu_course` VALUES ('1282620880706351106', 1, '', '', '', 0.0000, 0, '', 0, 0, 1, 'Draft', '2020-07-13 18:20:22', '2020-07-13 18:20:22');

INSERT INTO `edu_course` VALUES ('14', 1, '221', NULL, 'XHTML CSS2 JS整站制作教程课程学习', 0.0000, 3, '', 3, 29, 15, 'Draft', '2020-04-02 18:33:34', '2020-02-21 20:46:36');

INSERT INTO `edu_course` VALUES ('15', 1, '251', NULL, 'HTML5入门课程学习', 0.0000, 23, '', 0, 39, 17, 'Draft', '2020-04-02 18:34:32', '2020-02-21 20:46:37');

INSERT INTO `edu_course` VALUES ('17', 2, '223', NULL, 'MySql从入门到精通', 0.0000, 100, '', 34, 130, 4, 'Draft', '2020-04-02 21:13:58', '2020-02-21 20:46:38');

INSERT INTO `edu_course` VALUES ('18', 2, '202', NULL, 'Java精品课程', 0.0000, 20, '', 150, 522, 6, 'Draft', '2020-04-02 21:28:46', '2020-02-21 20:46:39');

INSERT INTO `edu_course` VALUES ('21', 3, '221', NULL, '搜索引擎优化技术', 0.0000, 23, '', 23, 123, 1, 'Draft', '2020-09-15 11:38:57', '2020-02-21 20:46:40');

INSERT INTO `edu_course` VALUES ('22', 3, '223', NULL, '影响力摄影小课堂', 0.0000, 0, '', 0, 2, 3, 'Draft', '2020-11-02 10:49:41', '2020-02-21 20:46:40');

INSERT INTO `edu_course` VALUES ('24', 3, '223', NULL, '国家教师资格考试', 0.0000, 12, '', 324, 25, 3, 'Draft', '2020-11-04 09:48:44', '2020-02-21 20:46:41');

INSERT INTO `edu_course` VALUES ('25', 3, '223', NULL, '听力口语训练营', 0.0000, 0, '', 0, 13, 14, 'Draft', '2020-02-26 19:23:48', '2020-02-21 20:46:42');

INSERT INTO `edu_course` VALUES ('26', 4, '223', NULL, 'CAD4零基础教学', 0.0000, 0, '', 0, 34, 35, 'Draft', '2020-02-26 19:24:44', '2020-02-21 20:46:43');



#课程简介

CREATE TABLE `edu_course_description`  (

  `id` VARCHAR(32) PRIMARY KEY COMMENT '课程ID',

  `description` MEDIUMTEXT COMMENT '课程简介',

  `gmt_create` DATETIME COMMENT '创建时间',

  `gmt_modified` DATETIME COMMENT '更新时间'

) COMMENT = '课程简介';



INSERT INTO `edu_course_description` VALUES ('1282276374928773122', '<p>好课程--传智造</p>', '2020-07-12 19:31:25', '2020-07-12 19:46:44');

INSERT INTO `edu_course_description` VALUES ('1282620880706351106', '', '2020-07-13 18:20:22', '2020-07-13 18:20:22');



#课程视频

CREATE TABLE `edu_video`  (

  `id` VARCHAR(32) PRIMARY KEY COMMENT '视频ID',

  `course_id` VARCHAR(32) COMMENT '课程ID',

  `chapter_id` VARCHAR(32) COMMENT '章节ID',

  `title` VARCHAR(50) COMMENT '节点名称',

  `sort` INT(10) DEFAULT 0 COMMENT '排序字段',

  `play_count` BIGINT(20) DEFAULT 0 COMMENT '播放次数',

  `is_free` TINYINT(1) DEFAULT 0 COMMENT '是否可以试听:0免费 1收费',

  `video_source_id` VARCHAR(100) COMMENT '视频资源',

  `video_original_name` VARCHAR(50) COMMENT '视频原始文件名字',

  `duration` FLOAT NOT NULL DEFAULT 0 COMMENT '视频时长(秒)',

  `status` VARCHAR(20) DEFAULT '' COMMENT '视频状态:见阿里云文档',

  `size` BIGINT(20) DEFAULT 0 COMMENT '视频源文件大小(字节)',

  `version` BIGINT(20) NOT NULL DEFAULT 1 COMMENT '乐观锁',

  `gmt_create` DATETIME NOT NULL COMMENT '创建时间',

  `gmt_modified` DATETIME NOT NULL COMMENT '更新时间'

)COMMENT = '课程视频';



INSERT INTO `edu_video` VALUES ('17', '18', '15', '第一节:Java简介', 1, 1000, 1, '', 100, 'Draft', 0, 1, '2020-01-01 13:08:57', '2020-02-21 20:46:08');

INSERT INTO `edu_video` VALUES ('18', '18', '15', '第二节:表达式和赋值语句', 2, 999, 1, '', 100, 'Draft', 0, 1, '2020-01-01 13:09:02', '2020-02-21 20:46:09');

INSERT INTO `edu_video` VALUES ('19', '18', '15', '第三节:String类', 3, 888, 0, '', 100, 'Draft', 0, 1, '2020-01-01 13:09:05', '2020-02-21 20:46:10');

INSERT INTO `edu_video` VALUES ('20', '18', '15', '第四节:程序风格', 4, 666, 0, '', 100, 'Draft', 0, 1, '2020-01-01 13:09:05', '2020-02-21 20:46:10');

搭建后端 domain

在这里插入图片描述

•EduVideo
 package com.czxy.zx.domain;



import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import io.swagger.annotations.ApiModel;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;



import java.io.Serializable;

import java.util.Date;



/**

 * 课程视频

 *

 */

@Data

@ApiModel(value="EduVideo对象", description="课程视频")

public class EduVideo {
    
    



    @ApiModelProperty(value = "视频ID")

    @TableId(value = "id", type = IdType.ASSIGN_UUID)

    private String id;



    @ApiModelProperty(value = "课程ID")

    private String courseId;



    @ApiModelProperty(value = "章节ID")

    private String chapterId;



    @ApiModelProperty(value = "节点名称")

    private String title;



    @ApiModelProperty(value = "排序字段")

    private Integer sort;



    @ApiModelProperty(value = "播放次数")

    private Long playCount;



    @ApiModelProperty(value = "是否可以试听:0免费 1收费")

    private Integer isFree;



    @ApiModelProperty(value = "视频资源")

    private String videoSourceId;



    @ApiModelProperty(value = "视频原始文件名字")

    private String videoOriginalName;



    @ApiModelProperty(value = "视频时长(秒)")

    private Float duration;



    @ApiModelProperty(value = "视频状态:见阿里云文档")

    private String status;



    @ApiModelProperty(value = "视频源文件大小(字节)")

    private Long size;



    @ApiModelProperty(value = "乐观锁")

    private Long version;



    @ApiModelProperty(value = "创建时间")

    @TableField(value = "gmt_create",fill = FieldFill.INSERT)

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

    private Date gmtCreate;



    @ApiModelProperty(value = "更新时间")

    @TableField(value = "gmt_modified",fill = FieldFill.INSERT_UPDATE)

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

    private Date gmtModified;



}

 
•EduChapter
 package com.czxy.zx.domain;



import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import io.swagger.annotations.ApiModel;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;



import java.io.Serializable;

import java.util.Date;



/**

 * 课程

 *

 */

@Data

@ApiModel(value="EduChapter对象", description="课程")

public class EduChapter {
    
    



    @ApiModelProperty(value = "章节ID")

    @TableId(value = "id", type = IdType.ASSIGN_UUID)

    private String id;



    @ApiModelProperty(value = "课程ID")

    private String courseId;



    @ApiModelProperty(value = "章节名称")

    private String title;



    @ApiModelProperty(value = "显示排序")

    private Integer sort;



    @ApiModelProperty(value = "创建时间")

    @TableField(fill = FieldFill.INSERT, value = "gmt_create")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

    private Date gmtCreate;



    @ApiModelProperty(value = "更新时间")

    @TableField(fill = FieldFill.INSERT_UPDATE, value = "gmt_modified")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

    private Date gmtModified;





}

 
•EduCourse
 package com.czxy.zx.domain;



import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import io.swagger.annotations.ApiModel;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;



import java.io.Serializable;

import java.math.BigDecimal;

import java.util.Date;



/**

 * 课程

 *

 */

@Data

@ApiModel(value="EduCourse对象", description="课程")

public class EduCourse {
    
    



    @ApiModelProperty(value = "课程ID")

    @TableId(value = "id", type = IdType.ASSIGN_UUID)

    private String id;



    @ApiModelProperty(value = "课程讲师ID")

    private String teacherId;



    @ApiModelProperty(value = "课程专业ID二级分类ID")

    private String subjectId;



    @ApiModelProperty(value = "一级分类ID")

    private String subjectParentId;



    @ApiModelProperty(value = "课程标题")

    private String title;



    @ApiModelProperty(value = "课程销售价格,设置为0则可免费观看")

    private BigDecimal price;



    @ApiModelProperty(value = "总课时")

    private Integer lessonNum;



    @ApiModelProperty(value = "课程封面图片路径")

    private String cover;



    @ApiModelProperty(value = "销售数量")

    private Long buyCount;



    @ApiModelProperty(value = "浏览数量")

    private Long viewCount;



    @ApiModelProperty(value = "乐观锁")

    private Long version;



    @ApiModelProperty(value = "视频状态 Draft未发布  Normal已发布")

    private String status;



    @ApiModelProperty(value = "创建时间")

    @TableField(fill = FieldFill.INSERT, value = "gmt_create")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

    private Date gmtCreate;



    @ApiModelProperty(value = "更新时间")

    @TableField(fill = FieldFill.INSERT_UPDATE, value = "gmt_modified")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

    private Date gmtModified;





}

 
•EduCourseDescription
 package com.czxy.zx.domain;



import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import io.swagger.annotations.ApiModel;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;



import java.io.Serializable;

import java.util.Date;



/**

 * 课程简介

 *

 */

@Data

@ApiModel(value="EduCourseDescription对象", description="课程简介")

public class EduCourseDescription {
    
    





    @ApiModelProperty(value = "课程ID")

    //将CourseDescription和Course的ID保持一致

    @TableId(value = "id", type = IdType.INPUT)

    private String id;



    @ApiModelProperty(value = "课程简介")

    private String description;



    @ApiModelProperty(value = "创建时间")

    @TableField(fill = FieldFill.INSERT, value = "gmt_create")

    private Date gmtCreate;



    @ApiModelProperty(value = "更新时间")

    @TableField(fill = FieldFill.INSERT_UPDATE, value = "gmt_modified")

    private Date gmtModified;





}

后端 mapper 接口

在这里插入图片描述


package com.czxy.course.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.czxy.domain.Chapter;
import org.apache.ibatis.annotations.Mapper;
/**
 * 课程章节 Mapper 接口
 */
@Mapper
public interface ChapterMapper extends BaseMapper<Chapte> {
    
     

}




package com.czxy.course.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.czxy.domain.CourseDescription;
import org.apache.ibatis.annotations.Mapper;
/**
 * 课程介绍 Mapper 接口
 */
@Mapper
public interface CourseDecriptionMapper  extends BaseMapper<CourseDescription> {
    
    
}




package com.czxy.course.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.czxy.domain.Video;
import org.apache.ibatis.annotations.Mapper;

/**
 * 课程视频 Mapper 接口
 *
 */
@Mapper
public interface VideoMapper  extends BaseMapper<Video> {
    
    
}


package com.czxy.course.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.czxy.domain.Course;
import org.apache.ibatis.annotations.Mapper;

/**
 * 课程 Mapper 接口
 */
@Mapper
public interface CourseMapper extends BaseMapper<Course> {
    
    
}


BaseMapper 里的要跟 daoman里命名对应

后端 service 接口

在这里插入图片描述

package com.czxy.course.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.czxy.domain.Chapter;
/*
*  课程章节 service
* 
* */
public interface ChapterService extends IService<Chapter> {
    
    
}



package com.czxy.course.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.czxy.domain.CourseDescription;



/*
* 课程介绍 service
* */

public interface CourseDecriptionService extends IService<CourseDescription> {
    
    
}






package com.czxy.course.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.czxy.domain.Course;
import org.apache.ibatis.annotations.Mapper;


/*
* 
* 课程   service
* */
@Mapper
public interface CourseMapper extends BaseMapper<Course> {
    
    
}












package com.czxy.course.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.czxy.domain.Video;



/*
*
* 课程视频  service
* */
public interface VideoService  extends IService<Video> {
    
    
}


后端 serviceImpl 实现类

在这里插入图片描述

package com.czxy.course.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.czxy.course.mapper.ChapterMapper;
import com.czxy.course.service.ChapterService;
import com.czxy.domain.Chapter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> implements ChapterService {
    
    
}







package com.czxy.course.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.czxy.course.mapper.CourseDecriptionMapper;
import com.czxy.course.service.CourseDecriptionService;
import com.czxy.domain.CourseDescription;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class CourseDecriptionServiceImpl  extends ServiceImpl<CourseDecriptionMapper, CourseDescription> implements CourseDecriptionService {
    
    
}








package com.czxy.course.service.impl;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.czxy.course.mapper.CourseMapper;
import com.czxy.course.service.CourseService;
import com.czxy.domain.Course;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class CourseServiceImpl  extends ServiceImpl<CourseMapper, Course> implements CourseService {
    
    


}











package com.czxy.course.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.czxy.course.mapper.VideoMapper;
import com.czxy.course.service.VideoService;
import com.czxy.domain.Video;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class VideoServiceImpl extends ServiceImpl<VideoMapper, Video> implements VideoService {
    
    
}

后端 Controller 实现类

在这里插入图片描述

package com.czxy.course.controller;


import com.czxy.course.service.ChapterService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/chapter")
@Api(tags = "课程列表接口", description = "课程列表CRUD操作")
public class ChapterController {
    
    

    @Resource
    private ChapterService chapterService;
}













package com.czxy.course.controller;

import com.czxy.course.service.CourseService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/course")
@Api(tags = "课程接口", description = "课程CRUD操作")
public class CourseController {
    
    

    @Resource
    private CourseService courseService;
}











package com.czxy.course.controller;


import com.czxy.course.service.CourseDecriptionService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/courseDecription")
@Api(tags = "课程介绍接口", description = "课程介绍CRUD操作")

public class CourseDecriptionController {
    
    
    @Resource
    private CourseDecriptionService courseDecriptionService;
}
























package com.czxy.course.controller;


import com.czxy.course.service.VideoService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/video")
@Api(tags = "课程视频接口", description = "课程视频的CRUD操作")
public class VideoController {
    
    




    @Resource
    private VideoService videoService;
}

行了行了 今天就到这里了 Ctrl +C Ctrl+V 太累的 搞不动了 前端的下回附上 886

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LiGuanLink/article/details/114889630