当前位置: 首页 > news >正文

东莞海边网站建设工作室建立一个购物网站

东莞海边网站建设工作室,建立一个购物网站,wordpress企业开发,wordpress暴力简介 本系统基于 Spring Boot 搭建的方便易用、高颜值的教学管理平台,提供多租户、权限管理、考试、练习、在线学习等功能。主要功能为在线考试、练习、刷题,在线学习。课程内容支持图文、视频,考试类型支持考试、练习、问卷。 源码下载 网…

简介

本系统基于 Spring Boot 搭建的方便易用、高颜值的教学管理平台,提供多租户、权限管理、考试、练习、在线学习等功能。主要功能为在线考试、练习、刷题,在线学习。课程内容支持图文、视频,考试类型支持考试、练习、问卷。

源码下载

网盘链接 密码8418

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

题型支持单选题、多选题、判断题、简答题、视频、语音,题目内容支持图文、视频等。支持题库、刷题功能。

本版本为 Spring Boot 版本,没有太多中间件依赖,使用、部署都非常方便,并且持续更新维护。

架构设计

在这里插入图片描述

功能概述

在这里插入图片描述

项目分 web 前台、后台管理、小程序三部分,前台、小程序主要提供考试功能,后台提供基础管理、考试管理功能。

web 前台主要功能:提供在线考试、课程学习、练习等功能。

后台主要功能:系统管理(单位管理、用户管理、部门管理、角色管理、菜单管理、操作日志、代码生成),考务管理(课程管理、考试管理、题库管理、成绩管理)。

部署指南

1. 新建数据库

我们可以使用 navicat 新建数据库,数据库名可以自定义,字符集和排序规则是确定的。

在这里插入图片描述

2. 运行 SQL 文件

我们导入源码中 init.sql 新建相关表,初始化数据。
在这里插入图片描述

3. 修改配置文件

我们把两个 yml 配置文件复制到 sg-user-service 目录中的 resource 目录中,按需进行修改,比如 MySQL 数据库用户名密码,redis 密码等。

4. 编译 jar 包

我们要检查电脑上是否安装 gradle,运行以下指令测试。

>gradle -v
------------------------------------------------------------
Gradle 8.5
------------------------------------------------------------Build time:   2023-11-29 14:08:57 UTC        
Revision:     28aca86a7180baa17117e0e5ba01d8ea9feca598Kotlin:       1.9.20
Groovy:       3.0.17
Ant:          Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM:          17.0.9 (Oracle Corporation 17.0.9+11-LTS-jvmci-23.0-b21)
OS:           Windows 11 10.0 amd64

我们直接在根目录下运行打包指令,并跳过测试。

gradle build -x test

生成的 jar 包在 build/libs 目录下,运行 java -jar xxx.jar,后端的部署就完成了。

5. 运行前端

我们再进入 frontend/sg-exam-app 目录,运行 npm install 下载依赖,下载完成后运行npm run dev 启动运行。

后台管理项目存放在 frontend/sg-exam-app-admin 目录,运行 pnpm install 下载依赖,下载完成后运行npm run dev 启动运行。

前端部署完成。

代码讲解

下面这段代码是用来展示后台首页数据,其中 userVo 用来查询用户数量,dto 返回给客户端做数据展示功能。

首页数据

/*** 获取管控台首页数据*/@GetMapping@Operation(summary = "后台首页数据展示", description = "后台首页数据展示")public R<DashboardDto> dashboard() {String tenantCode = SysUtil.getTenantCode();DashboardDto dto = new DashboardDto();// 查询用户数量UserVo userVo = new UserVo();userVo.setTenantCode(tenantCode);dto.setOnlineUserNumber(userService.userCount(userVo).toString());// 租户数量dto.setTenantCount(tenantService.tenantCount().toString());// 查询考试数量ExaminationDashboardDto dashboardDto = examRecordService.findExamDashboardData(tenantCode);if (dashboardDto != null) {if (dashboardDto.getExaminationCount() != null) {dto.setExaminationNumber(dashboardDto.getExaminationCount().toString());}if (dashboardDto.getExamUserCount() != null) {dto.setExamUserNumber(dashboardDto.getExamUserCount().toString());}if (dashboardDto.getExaminationRecordCount() != null) {dto.setExaminationRecordNumber(dashboardDto.getExaminationRecordCount().toString());}}return R.success(dto);}

考试管理

这段代码是一个使用Java语言和Spring框架编写的RESTful API控制器。它定义了一系列的HTTP GET和POST请求方法,用于处理与考试信息管理相关的业务逻辑。下面是对这段代码的详细解释:

  1. @Slf4j:这是一个日志注解,用于在控制类中注入一个日志对象,方便记录日志。
  2. @AllArgsConstructor:这是一个Lombok注解,用于自动生成所有字段的构造函数。
  3. @Tag(name = "考试信息管理"):这是一个自定义注解,用于标记这个控制器属于哪个功能模块。
  4. @RestController:表示这是一个RESTful风格的控制器,它将返回JSON格式的数据。

接下来是部分方法的解释:

  • canStart:这个方法通过GET请求方式,提供查询是否能开始考试的功能。它接受一个Long类型的参数id,表示考试的ID。方法内部会查询该ID对应的考试信息,并检查考试是否已经开始,以及是否有结束时间限制。
  • examination:这个方法通过GET请求方式,提供根据考试ID获取考试信息的功能。
  • detail:这个方法通过GET请求方式,提供根据考试ID获取考试详细信息的功能。
  • getMembers:这个方法通过GET请求方式,提供根据考试ID获取考试成员ID的功能。
  • anonymousUserGet:这个方法通过GET请求方式,提供根据考试ID获取考试信息的功能,但是这个方法专门为匿名用户设计。
@Slf4j
@AllArgsConstructor
@Tag(name = "考试信息管理")
@RestController
@RequestMapping("/v1/examination")
public class ExaminationController extends BaseController {private final IExaminationService examinationService;private final IExamPermissionService examPermissionService;@GetMapping("canStart")@Operation(summary = "查询是否能开始考试", description = "查询是否能开始考试")public R<Boolean> canStart(@RequestParam Long id) {boolean canStart = false;Examination examination = examinationService.get(id);if (examination != null) {if (examination.getStartTime() != null && examination.getEndTime() != null) {long currentMillis = System.currentTimeMillis();canStart = ((currentMillis > examination.getStartTime().getTime()) && (examination.getEndTime().getTime() > currentMillis));} else {// 没有限制考试时间canStart = true;}}return R.success(canStart);}@GetMapping("/{id}")@Operation(summary = "获取考试信息", description = "根据考试 ID 获取考试信息")public R<Examination> examination(@PathVariable Long id) {return R.success(examinationService.get(id));}@GetMapping("/{id}/detail")@Operation(summary = "获取考试详细信息", description = "根据考试 id 获取考试详细信息")public R<ExaminationDto> detail(@PathVariable Long id) {return R.success(examinationService.getDetail(id));}@GetMapping("/{id}/getMembers")@Operation(summary = "获取考试成员 ID", description = "根据考试 ID 获取考试成员 ID")public R<MemberDto> getMembers(@PathVariable Long id) {return R.success(examPermissionService.getMembers(ExamConstant.PERMISSION_TYPE_EXAM, id));}@GetMapping("/anonymousUser/{id}")@Operation(summary = "获取考试信息", description = "根据考试 id 获取考试详细信息")public R<Examination> anonymousUserGet(@PathVariable Long id) {return R.success(examinationService.get(id));}@GetMapping("examinationList")@Operation(summary = "获取考试列表")public R<PageInfo<ExaminationDto>> examinationList(@RequestParam Map<String, Object> condition,@RequestParam(value = PAGE, required = false, defaultValue = PAGE_DEFAULT) int pageNum,@RequestParam(value = PAGE_SIZE, required = false, defaultValue = PAGE_SIZE_DEFAULT) int pageSize) {return R.success(examinationService.examinationList(condition, pageNum, pageSize));}@GetMapping("userExaminationList")@Operation(summary = "获取用户有权限的考试列表")public R<PageInfo<ExaminationDto>> userExaminationList(@RequestParam Map<String, Object> condition,@RequestParam(value = PAGE, required = false, defaultValue = PAGE_DEFAULT) int pageNum,@RequestParam(value = PAGE_SIZE, required = false, defaultValue = PAGE_SIZE_DEFAULT) int pageSize) {return R.success(examinationService.userExaminationList(condition, pageNum, pageSize));}@RequestMapping("subjectList")@Operation(summary = "获取题目列表")public R<PageInfo<SubjectDto>> subjectList(@RequestParam Map<String, Object> condition,@RequestParam(value = PAGE, required = false, defaultValue = PAGE_DEFAULT) int pageNum,@RequestParam(value = PAGE_SIZE, required = false, defaultValue = PAGE_SIZE_DEFAULT) int pageSize,SubjectDto subjectDto) {return R.success(examinationService.findSubjectPageById(subjectDto, condition, pageNum, pageSize));}@PostMapping@Operation(summary = "创建考试", description = "创建考试")@SgLog(value = "创建考试", operationType = OperationType.INSERT)public R<Boolean> add(@RequestBody @Valid ExaminationDto examinationDto) {examinationDto.setCommonValue();return R.success(examinationService.insertExamination(examinationDto) > 0);}@PutMapping("{id}")@Operation(summary = "更新考试信息", description = "根据考试 ID 更新考试的基本信息")@SgLog(value = "更新考试", operationType = OperationType.UPDATE)public R<Boolean> update(@PathVariable Long id, @RequestBody @Valid ExaminationDto examinationDto) {examinationDto.setId(id);examinationDto.setCommonValue();return R.success(examinationService.updateExamination(examinationDto) > 0);}@DeleteMapping("{id}")@Operation(summary = "删除考试", description = "根据 ID 删除考试")@SgLog(value = "删除考试", operationType = OperationType.DELETE)public R<Boolean> delete(@PathVariable Long id) {Examination examination = examinationService.get(id);if (examination != null) {examination.setCommonValue();return R.success(examinationService.delete(examination) > 0);}return R.success(Boolean.FALSE);}@PostMapping("deleteAll")@Operation(summary = "批量删除考试", description = "根据考试 id 批量删除考试")@SgLog(value = "删除考试", operationType = OperationType.DELETE)public R<Boolean> deleteAll(@RequestBody Long[] ids) {return R.success(examinationService.deleteAll(ids) > 0);}@GetMapping("nexSubjectNo/{id}")@Operation(summary = "获取下一题的序号")public R<Integer> nexSubjectNo(@PathVariable Long id) {return R.success(examinationService.nextSubjectNo(id));}@PostMapping("batchAddSubjects/{id}")@Operation(summary = "批量添加题目")@SgLog(value = "批量添加题目", operationType = OperationType.INSERT)public R<Boolean> batchAddSubjects(@PathVariable Long id, @RequestBody List<SubjectDto> subjects) {return R.success(examinationService.batchAddSubjects(id, subjects));}@PostMapping("randomAddSubjects/{id}")@Operation(summary = "随机添加题目")@SgLog(value = "随机添加题目", operationType = OperationType.INSERT)public R<Boolean> randomAddSubjects(@PathVariable Long id, @RequestBody RandomSubjectDto params) {return R.success(examinationService.randomAddSubjects(id, params));}
}
http://www.yayakq.cn/news/178906/

相关文章:

  • 网站规划的解释分类目录采用的是什么编目
  • 利用jsp做网站phpcms v9 实现网站搜索
  • 鄂尔多斯网站制作 建设网站建设捌金手指花总四
  • 企业为什么要建网站凡客设计
  • 怎么查看一个网站是谁做的wordpress插件免费吗
  • 网站安全等级评审在哪里做织梦添加网站名称添加新变量
  • 苏州专业网站建设公司公司网站上线
  • 这么做网站家居企业网站建设教程
  • 建造电商网站如何在手机上做广告
  • 优化门户网站建设西安搜建站科技网站
  • 美工外包网站响应式网站建设公司'
  • 网站建设的运营计划书蚌埠网站优化
  • 做的网站一直刷新wordpress 视频文件夹
  • 亚马逊品牌备案网站怎么做怎么看一个网站的cms
  • 云主机 网站指南便宜的购物网站排名
  • 典当行网站策划网站制作有限公司
  • it美工做网站无锡新区网站制作
  • 丹阳网站友情链接网址
  • 嘉兴网站排名优化费用WordPress表白墙主题
  • 福州网站建设报价微信小程序模板开发
  • 青浦区网站建设公司什么网站发布建设标准
  • 各大网站搜索引擎微信小商店怎么开通
  • cuteftp 备份网站网站色哦优化8888
  • 商务网站建设详细步骤如何做网站流量报告
  • 恢复原来的网站重庆皇华建设集团有限公司网站
  • it网站开发公司北京驾校网站建设
  • 网站建设备案图片公司网站域名的设计
  • 沈阳蓝德网站建设阿帕奇网站搭建
  • 中英文双语网站建设济南模板网站
  • 怎样做网站收广告费所有购物软件