0042_基于SpringBoot+Vue的在线学习平台设计与实现(源码+部署文档+讲解等)

🍅联系方式QQ------------------------------:380223251----------------------------------------------🍅
博主介绍:✌10年以上互联网大厂项目经理、高校兼职讲师、创业导师、csdn特邀作者✌
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

1.系统运行环境

开发系统:Windows10

架构模式:MVC/前后端分离

JDK版本:Java JDK1.8

开发工具:IDEA

数据库版本: mysql5.7

数据库可视化工具: navicat for mysql

服务器:SpringBoot自带 apache tomcat

2.使用技术

Springboot、Eureka、Gateway、Redis、Mysql等

3.系统截图

3.1后台首页

在这里插入图片描述

3.2讲师管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3发布课程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 轮播图管理

在这里插入图片描述

3.5订单管理

在这里插入图片描述

3.6用户端首页

在这里插入图片描述

3.7课程详情

在这里插入图片描述
在这里插入图片描述

3.8观看视频

在这里插入图片描述

3.9购买课程

在这里插入图片描述

3.10全部课程

在这里插入图片描述

4.部分代码

在这里插入图片描述

4.1 权限过滤器

package com.online.edu.gateway.filter;


@Component
@Slf4j
public class LoginFilter extends ZuulFilter {


    @Autowired
    private StringRedisTemplate stringRedisTemplate;


    //定义过滤器的类型
    @Override
    public String filterType() {
        return "pre"; //pre类型过滤器
    }

    //过滤器执行顺序,返回值越小,越先执行
    @Override
    public int filterOrder() {
        return 0;
    }

    //决定是否执行下面的run方法
    //如果返回false,表示过滤器放行,否则拦截,执行run
    @Override
    public boolean shouldFilter() {
        // 判断:访问的路径包含/vidservice/vod/getPlayAuth 进行校验
        //1 获取请求路径的 uri

        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String requestURI = request.getRequestURI();

//        System.out.println("uri"+requestURI);

        String palyUrl = "/vidservice/vod/getPlayAuth";
        String courseInfo = "/online/frontcourse/getCourseInfo";
        //2 根据获取请求路径判断,路径中是否包含 /vidservice/vod/getPlayAuth

        if (!StringUtils.isEmpty(courseInfo) && requestURI.contains(courseInfo)){
            //3 如果包含,进行验证操作,return true
            return true;  //执行run方法,进行拦截
        }


        return false;
    }

//    过滤器的执行逻辑
    @Override
    public ResultVO run() throws ZuulException {
        System.out.println("run方法执行了");
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String authorization = request.getHeader("Authorization");

        System.out.println("authorization==" +authorization);
        //登录校验逻辑
        Claims claims = JwtUtils.checkJWT(authorization);
        String accesstoken = (String)claims.get("accesstoken");

        String userInfo = stringRedisTemplate.opsForValue().get(accesstoken);
        if (StringUtils.isEmpty(userInfo)){

            log.info("用户未登录");
//            ResultVOUtil.error(10012,"未登录");
//            //为false时,不会继续向后执行
            currentContext.setSendZuulResponse(false);

//            //设置不能访问状态码
//            currentContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
            currentContext.setResponseBody("{\"status\":401,\"msg\":\"用户未登录 !\"}");
            currentContext.getResponse().setContentType("text/html;charset=UTF-8");
        }else{
            log.info("用户已登录");
        }

        return null;
    }
}

4.2 教师管理

package com.online.edu.gdpuxjl.controller;


/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author 许JIAN林
 * @since 2019-12-03
 */


@RestController
@RequestMapping("/online/teachers")
@CrossOrigin //跨域
@Slf4j
public class EduTeacherController {

    @Autowired
    private EduTeacherService eduTeacherService;


    /**
     * 根据 ID 查找教师
     */
    @ApiOperation(value = "查找所有讲师")
    @GetMapping()
    public ResultVO findTeacher() {
        log.info("【查询讲师】 查询所有讲师");
        List<EduTeacher> teacherList = eduTeacherService.list(null);
        return ResultVOUtil.success(teacherList);
    }


    /**
     * 根据 ID 查找教师
     */
    @ApiOperation(value = "查找讲师")
    @GetMapping("{id}")
    public ResultVO findTeacher(@ApiParam(value = "讲师ID")
                                @PathVariable String id) {


        log.info("【查询讲师】 查询ID为" + id + "的讲师");
        EduTeacher eduTeacher = eduTeacherService.getById(id);
        if (eduTeacher != null) {

            return ResultVOUtil.success(eduTeacher);
        } else {
            return ResultVOUtil.error(ResultEnum.TEACHER_NOT_EXIST);
        }

    }


    /**
     * 根据 ID 修改教师信息
     */
    @ApiOperation(value = "修改讲师信息")
    @PutMapping("{id}")
    public ResultVO updateTeacher(
            @ApiParam(value = "讲师ID")
            @PathVariable String id,
            @ApiParam(value = "所要修改的信息")
            @RequestBody EduTeacher eduTeacher) {


        log.info("【修改讲师信息】 修改id为" + id + "的讲师");
        int i = eduTeacherService.updateTeacher(id, eduTeacher);

        if (i == 1) {
            return ResultVOUtil.success();
        } else {
            return ResultVOUtil.error(ResultEnum.TEACHER_NOT_EXIST);
        }


    }


    @ApiOperation(value = "添加讲师")
    @PostMapping()
    public ResultVO addTeacher(
            @ApiParam(name = "teacherQuery", value = "查询对象")
            @RequestBody EduTeacher eduTeacher) {


        log.info("【保存讲师】 保存名字为" + eduTeacher.getName() + "的讲师");
        boolean save = eduTeacherService.save(eduTeacher);
        if (save) {
            return ResultVOUtil.success();
        } else {
            return ResultVOUtil.error(1, "失败");
        }

    }

    /**
     * 根据不同的条件查询讲师,分页显示 。
     */
    @ApiOperation(value = "分页讲师列表")
    @PostMapping("{page}/{limit}")
    public ResultVO pageList(
            HttpServletResponse response,
            @ApiParam(name = "page", value = "当前页码", required = true)
            @PathVariable Long page,
            @ApiParam(name = "limit", value = "每页记录数", required = true)
            @PathVariable Long limit,
            @ApiParam(name = "teacherQuery", value = "查询对象", required = false)
            @RequestBody(required = false) TeacherQuery queryTeacher) {

        log.info("获取讲师信息");
        //封装page分页对象
        Page<EduTeacher> pageParam = new Page<>(page, limit);


        IPage<EduTeacher> eduTeacherIPage = eduTeacherService.pageQuery(pageParam, queryTeacher);

        HashMap<Object, Object> map = new HashMap<>();
        map.put("total", eduTeacherIPage.getTotal());
        map.put("items", eduTeacherIPage.getRecords());
        return ResultVOUtil.success(map);
    }

    /**
     * 根据 ID 删除教师
     */
    @ApiOperation(value = "删除讲师")
    @DeleteMapping("{id}")
    public ResultVO removeById(@PathVariable String id) {
        log.info("【删除讲师】 删除id为:" + id + "的讲师");
        if (eduTeacherService.removeById(id)) {
            return ResultVOUtil.success();
        } else {
            return ResultVOUtil.error(ResultEnum.ERROR);

        }
    }
}

## 4.3 课程管理

```java
package com.online.edu.gdpuxjl.controller;

/**
 * <p>
 * 课程 前端控制器
 * </p>
 *
 */
@Slf4j
@CrossOrigin
@RestController
@RequestMapping("/online/course")
public class EduCourseController {


    @Autowired
    private EduCourseService eduCourseService ;

    @Autowired
    private EduCourseDescriptionService eduCourseDescriptionService ;


    //最终发布课程的方法,修改课程状态
    @ApiOperation("根据课程id修改课程状态")
    @GetMapping("publishCourse/{courseId}")
    public  ResultVO publishCourse(@PathVariable String courseId) {
        EduCourse eduCourse = new EduCourse();
        eduCourse.setId(courseId);
        eduCourse.setStatus("Normal");
        boolean result = eduCourseService.updateById(eduCourse);
        if(result) {
            return ResultVOUtil.success();
        } else {
            return ResultVOUtil.error(ResultEnum.ERROR);
        }
    }
    //根据课程id查询课程详细信息
    @ApiOperation("根据课程id查询课程详细信息")
    @GetMapping("getAllCourseInfo/{courseId}")
    public ResultVO getAllCourseInfo(@PathVariable String courseId) {
        log.info("根据课程id查询课程详细信息");
        CourseInfoVO courseInfoDto = eduCourseService.getCourseInfoAll(courseId);
        return ResultVOUtil.success("courseInfo",courseInfoDto);
    }


    //修改课程的方法
    @PostMapping("{id}")
    public ResultVO updateCourseInfo(@PathVariable String id,
                              @RequestBody CourseInfoDTO courseInfoDTO) {
        Boolean flag = eduCourseService.updateCourse(courseInfoDTO);
        if(flag) {
            return ResultVOUtil.success();
        } else {
            return ResultVOUtil.success();
        }
    }

    /**
     * 根据课程id查询课程
     * @param id
     * @return
     */
    @ApiOperation("根据课程id查询课程信息")
    @GetMapping("{id}")
    public ResultVO getCourseById(@ApiParam(name = "id", value = "课程id", required = true)
                                   @PathVariable String  id){
        log.info("【查询课程信息】 查询课程id为"+ id +"的信息");
        CourseInfoDTO courseInfoDTO = eduCourseService.findCourseById(id);

        return ResultVOUtil.success(courseInfoDTO);
    }
    /**
     * 根据课程id查询课程,提供给支付模块的接口
     * @param courseid
     * @return
     */
    @ApiOperation("根据课程id查询课程信息")
    @GetMapping("getCourseInfo/{courseid}")
    public CourseInfoDTO getCourseInfoById(@ApiParam(name = "courseid", value = "课程id", required = true)
                                  @PathVariable String  courseid){
        log.info("【查询课程信息】 查询课程id为"+ courseid +"的信息");
        CourseInfoDTO courseInfoDTO = eduCourseService.findCourseById(courseid);

        return courseInfoDTO;
    }


    /**
     * 3.保存课程信息
     * @param courseInfoDTO
     * @return
     */
    @ApiOperation("保存课程信息")
    @PostMapping
    public ResultVO saveCourse(@ApiParam(name = "CourseInfoDTO", value = "课程信息", required = false)
                               @RequestBody( required = false) CourseInfoDTO courseInfoDTO ) {

        String courseId = eduCourseService.saveCourseInfo(courseInfoDTO);
        HashMap<String, String> map = new HashMap<>();
        map.put("courseId", courseId);

        return ResultVOUtil.success(map);
    }

    /**
     * 2. 根据id删除课程
     * @param id
     * @return
     */
    @ApiOperation("根据id删除课程")
    @DeleteMapping("{id}")
    public ResultVO deleteCourseId(@PathVariable String id) {

        log.info("【删除课程】 删除id为:"+id+"的课程");
        if( eduCourseService.removeCourseId(id) ){
            return ResultVOUtil.success();
        }else{
            return ResultVOUtil.error( ResultEnum.ERROR);

        }
    }

    /**  1 .根据不同的条件进行查新,分页显示 。*/
    @ApiOperation(value = "分页讲师列表")
    @PostMapping("{page}/{limit}")
    public ResultVO pageList(
            @ApiParam(name = "page", value = "当前页码", required = true)
            @PathVariable Long page,
            @ApiParam(name = "limit", value = "每页记录数", required = true)
            @PathVariable Long limit,
            @ApiParam(name = "CourseQuery", value = "查询对象", required = false)
            @RequestBody( required = false) CourseQuery CourseQuery){

                log.info("分页获取课程列表信息");
                //封装page分页对象
                Page<EduCourse> pageParam = new Page<>(page, limit);

                IPage<EduCourse> eduCrouseIPage = eduCourseService.pageQuery(pageParam, CourseQuery);
                HashMap<Object, Object> map = new HashMap<>();
                map.put("total", eduCrouseIPage.getTotal());
                map.put("items", eduCrouseIPage.getRecords());
                return  ResultVOUtil.success(map);
    }
}

## 4.4核心配置文件

```bash

# 服务端口
server.port=8077
# 服务名
spring.application.name=edu-gdpuxjl
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/online?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

#热加载生效  true为生效,fals为关闭
spring.devtools.restart.enabled=false


# HikariSpring Boot 2.0之后默认整合的数据库连接池,比druid更快的数据库连接池
# 数据源类型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 连接池名称,默认HikariPool-1
spring.datasource.hikari.pool-name=GuliHikariPool
# 最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值
spring.datasource.hikari.maximum-pool-size=12
# 连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒
spring.datasource.hikari.connection-timeout=60000
# 最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size
spring.datasource.hikari.minimum-idle=10
# 空闲连接超时时间,默认值60000010分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
# 只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放
spring.datasource.hikari.idle-timeout=500000
# 连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短
spring.datasource.hikari.max-lifetime=540000
#连接测试查询
spring.datasource.hikari.connection-test-query=SELECT 1
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl


spring.jackson.date-format= yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone= GMT+8



spring.jackson.default-property-inclusion=non_null

#配置mapper xml文件的路径
mybatis-plus.mapper-locations=classpath:com/online/edu/gdpuxjl/mapper/xml/*.xml


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于SpringBoot+Vue的家政服务管理平台设计实现需要进行以下环境部署: 1. 后端环境部署: - 安装Java JDK:确保你的系统中已经安装了Java JDK,并配置好了JAVA_HOME环境变量。 - 安装Maven:Maven是一个Java项目的构建工具,用于管理项目依赖和构建过程。你可以从Maven官网下载并安装Maven。 - 安装MySQL数据库:家政服务管理平台需要使用MySQL数据库存储数据。你可以从MySQL官网下载并安装MySQL数据库,并创建一个数据库用于存储平台的数据。 - 配置SpringBoot项目:创建一个SpringBoot项目,并配置好数据库连接等相关配置。 2. 前端环境部署: - 安装Node.js:确保你的系统中已经安装了Node.js,并配置好了npm环境变量。 - 安装Vue CLI:Vue CLI是一个用于快速搭建Vue项目的脚手架工具。你可以使用npm全局安装Vue CLI。 - 创建Vue项目:使用Vue CLI创建一个Vue项目,并配置好后端API的地址。 3. 部署与运行: - 后端部署:使用Maven构建后端项目,并将生成的jar包部署到服务器上。确保服务器上已经安装了Java运行环境,并运行jar包启动后端服务。 - 前端部署:在本地开发环境中使用npm安装项目依赖,并使用npm运行前端项目。将生成的静态文件部署到服务器上的Web容器中,如Nginx。 以上是基于SpringBoot+Vue的家政服务管理平台设计实现的环境部署步骤。如果你需要更详细的步骤或者有其他问题,请告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值