# SchoolCourseServer **Repository Path**: bayuqi/school-course-server ## Basic Information - **Project Name**: SchoolCourseServer - **Description**: 选课系统后端 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-04-12 - **Last Updated**: 2024-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SchoolCourseServer ### 如果图片无法显示,可下载项目目录下的 "图文说明文档.docx"文件 ### 介绍 选课系统后端 整体功能说明: 学生角色:可在平台进行选课、教材费用支付、课程筛选(可筛选当前时间点开放课程、未开放的有效课程、所有课程) 教师角色:可在平台添加、修改、删除自己发布的课程,以及课程在当前时间点的选课情况查看。 页面划分:PC端页面和移动端 * PC端: 支持学生选课和支付、教师管理课程。 * 移动端:仅学生选课和支付使用。 其他说明:移动端页面能够适应不同大小的手机平板设备,在保证各屏幕上大小显示不失真,根据实际屏幕宽度大小做等比换算 ## 项目演示,可复制网址到浏览器访问在线观看 * 移动端页面演示:https://www.bilibili.com/video/BV1Re4y197P7 * PC端页面演示:https://www.bilibili.com/video/BV1eT411E7E1/ ### 后端项目使用技术 SpringCloud、Nacos、Hystrix、SpringBoot、SpringMVC、Mybatis-Plus、Redis、RabbitMQ、数据库:MySQL ### 软件架构 * 项目总体分为五个服务 ![输入图片说明](readmeImg/1111readmeImg.jpg) 1. gateway--网关,所有请求都经过这里。 * 这里配有全局过滤器,对没有携带token、token过期的请求进行拦截; * 还配有局部过滤器,用于对访问course服务的用户角色进行判断只允许访问角色对应的接口(例如,学生角色不能访问教师相关接口); * 这里还配有Hystrix对访问超时、报错的服务进行服务降级; * 访问服务配有基于redis令牌桶的限流规则; 2. cloud-auth(认证服务)、cloud-course(课程服务)、cloud-bill(账单、订单服务) 这些模块内的设计的结构是: ![输入图片说明](readmeImg/2222266f70a54-5daf-40fe-a25f-41098f424423.png) 子模块api: * app文件夹,用来提供接口提供给其他服务引入auth-api即可通过OpenFeign访问auth-boot(认证服务) * pojo文件夹,存储着当前服务所需的实体类 子模块auth-boot(认证服务): * 含有controller、service等等,提供接口服务 ![输入图片说明](readmeImg/33333_readmeImg2851a7ab-6f99-4651-9aff-d79bdc6101da.png) ![输入图片说明](readmeImg/4444_readmeImg867185b8-894e-4ca7-9d56-a731aa887618.png) 补充说明: 关于登录 认证: * 登录 认证: 1. 接收到用户登录请求,使用私钥对密码进行解密; 2. 判断用户是否存在,以及转换密码对比数据库中的是否正确(密码是在以MD5+Salt+2次转换的方式存储在数据库的); 3. 校验通过后,生成token返回给前端 * 补充说明:[ 用户跳转到登录、注册页面时会请求从后端获取公钥,点击登录会使用RSA对密码进行加密再发送到后端 ] 关于库存扣除: * cloud-course 课程服务中StockServiceImpl含有监听库存变动队列(选课时会先扣除redis中的课程库存,再发送消息到队列异步扣除数据库表的数据) 关于订单生成: * cloud-bill 账单服务中MyOrderServiceImpl含有监听账单添加队列(选课时生成待支付账单会先放到redis中,再发送消息到队列异步添加到数据库表) 如果队列消费消息重试次数超过10无法成功消费,就会将该消息存储起来后续处理 3. cloud-common * 子模块common-core(公用的核心类) ![输入图片说明](readmeImg/555523605227-5b2e-4c66-a75b-0b433692b117.png) 补充说明: emums文件夹下的是数据字典,定义了存储到redis中的各种key以及对于的过期时间(在其他服务模块使用到) ### 安装教程 所需环境: 1. 下载nacos启动即可暂时无需配置(项目register到nacos使用的默认命名空间,没有配置指定命名空间) 2. 下载redis和rabbitMQ安装 2. MySQL导入表结构和数据(sql文件在项目文件夹下的 /sql/SchoolCourse.sql) ![输入图片说明](readmeImg/66666851e6ede-2358-4345-88fb-6ad9ebd3e6b6.png) 3. 分别启动cloud-gateway、auth-boot、course-boot、bill-boot里面的启动类 4. 启动前端项目,前端项目gitee地址:https://gitee.com/mizhibao/school-course-view