From daf7acb4f107a427e4a83ba1eb26e5e6012cbdaf Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期三, 26 六月 2024 17:04:52 +0800
Subject: [PATCH] update
---
exam-common/src/main/java/com/gkhy/exam/common/enums/PhaseLevelEnum.java | 32 +
exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionBankController.java | 6
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStudentServiceImpl.java | 32
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExCourseServiceImpl.java | 1
exam-system/src/main/resources/mapper/system/SysCompanyMapper.xml | 102 +++
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysNoticeController.java | 4
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseController.java | 5
exam-system/src/main/resources/mapper/system/ExExamPaperMapper.xml | 1
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCommonController.java | 14
exam-system/src/main/java/com/gkhy/exam/system/domain/ExResource.java | 4
exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyStatisticVO.java | 39 +
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentStudyController.java | 5
exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPhaseStudentVO.java | 18
exam-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java | 19
exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentAnswerController.java | 2
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCoursePhaseController.java | 4
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictDataController.java | 4
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictTypeController.java | 5
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterPeriodController.java | 4
exam-common/src/main/java/com/gkhy/exam/common/config/FilePathConfig.java | 31 +
exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java | 113 +++
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStatisticController.java | 48 +
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStatisticServiceImpl.java | 108 +++
exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionController.java | 10
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPhaseStudentController.java | 5
exam-common/src/main/java/com/gkhy/exam/common/config/ThreadPoolConfig.java | 7
exam-system/src/main/java/com/gkhy/exam/system/domain/ExQuestion.java | 1
exam-system/src/main/java/com/gkhy/exam/system/service/ExExamRecordService.java | 73 ++
exam-system/src/main/resources/mapper/system/ExPaperStudentMapper.xml | 1
.gitignore | 3
exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPhaseVO.java | 18
exam-common/src/main/java/com/gkhy/exam/common/utils/MinioUtils.java | 41 +
pom.xml | 8
exam-common/pom.xml | 4
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamRecordServiceImpl.java | 94 +++
exam-admin/src/main/java/com/gkhy/exam/admin/app/AppExerciseAnswerController.java | 2
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamRecordController.java | 73 ++
exam-system/src/main/java/com/gkhy/exam/system/domain/ExExamRecord.java | 97 +++
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExResourceController.java | 8
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCompanyController.java | 5
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExResourceServiceImpl.java | 53 +
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterController.java | 5
exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPaperStudentVO.java | 18
exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPhaseStudentController.java | 3
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionServiceImpl.java | 49 +
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionController.java | 7
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamPaperController.java | 5
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysUserController.java | 6
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPaperStudentController.java | 24
exam-system/src/main/java/com/gkhy/exam/system/service/ExPaperStudentService.java | 5
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCarouselController.java | 4
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentController.java | 8
exam-system/src/main/java/com/gkhy/exam/system/mapper/ExExamRecordMapper.java | 32 +
exam-system/src/main/java/com/gkhy/exam/system/service/ExStatisticService.java | 12
exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentStudyController.java | 3
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionBankController.java | 4
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCategoryController.java | 4
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExPaperStudentServiceImpl.java | 51 +
exam-admin/src/main/java/com/gkhy/exam/admin/app/AppResourceController.java | 2
/dev/null | 20
exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCompanyPeriodController.java | 17
exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPaperStudentController.java | 3
exam-common/src/main/java/com/gkhy/exam/common/utils/M3u8Utils.java | 165 +++++
exam-system/src/main/java/com/gkhy/exam/system/service/SysCommonService.java | 39 +
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionBankServiceImpl.java | 46 +
exam-system/src/main/resources/mapper/system/ExExamRecordMapper.xml | 48 +
exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamPaperServiceImpl.java | 26
exam-system/src/test/java/com/gkhy/exam/system/MybatisPlusGenerator.java | 2
exam-admin/src/main/java/com/gkhy/exam/admin/system/SysProfileController.java | 3
69 files changed, 1,605 insertions(+), 110 deletions(-)
diff --git a/.gitignore b/.gitignore
index 3748198..5f46f96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,4 +32,5 @@
### VS Code ###
.vscode/
logs/
-images/
\ No newline at end of file
+images/
+upload/
\ No newline at end of file
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppExerciseAnswerController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppExerciseAnswerController.java
index afeca6f..fc35d52 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppExerciseAnswerController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppExerciseAnswerController.java
@@ -7,6 +7,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -28,6 +29,7 @@
@Autowired
private ExExerciseAnswerService exerciseAnswerService;
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "新增答题")
@PostMapping
public CommonResult add(@Validated @RequestBody ExExerciseAnswer exerciseAnswer){
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPaperStudentController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPaperStudentController.java
index 800b644..f9f71ab 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPaperStudentController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPaperStudentController.java
@@ -9,6 +9,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
/**
@@ -26,6 +27,7 @@
@Autowired
private ExPaperStudentService paperStudentService;
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "分页获取学员的试卷列表(分页)")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
@@ -55,6 +57,7 @@
// }
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "结束考试")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "body", name = "paperId", dataType = "long", required = true, value = "试卷id"),
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPhaseStudentController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPhaseStudentController.java
index f959c5b..515568d 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPhaseStudentController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppPhaseStudentController.java
@@ -9,6 +9,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -29,6 +30,7 @@
@Autowired
private ExPhaseStudentService phaseStudentService;
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "分页获取学员的批次列表(分页)")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
@@ -39,6 +41,7 @@
return CommonResult.success(phaseStudentService.selectPhaseStudentListForStudent(phaseStudent));
}
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "根据id查询学员批次信息")
@GetMapping(value = { "/getPhaseStudentById" })
public CommonResult getPhaseStudentById(@RequestParam(value = "phaseStudentId", required = true) Long phaseStudentId)
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionBankController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionBankController.java
index 92b2a1f..a74f3bb 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionBankController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionBankController.java
@@ -1,6 +1,7 @@
package com.gkhy.exam.admin.app;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.system.domain.ExQuestionBank;
import com.gkhy.exam.system.service.ExQuestionBankService;
@@ -9,6 +10,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
/**
@@ -26,6 +28,7 @@
@Autowired
private ExQuestionBankService questionBankService;
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "题库列表(分页)")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
@@ -36,6 +39,7 @@
return CommonResult.success(questionBankService.selectQuestionBankListForStudent(questionBank));
}
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "根据id获取题库信息")
@GetMapping(value = { "/{bankId}" })
public CommonResult getQuestionBankInfo(@PathVariable(value = "bankId", required = true) Long bankId)
@@ -43,6 +47,8 @@
return CommonResult.success(questionBankService.selectQuestionBankByIdForStudent(bankId));
}
+ @RepeatSubmit
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "清除刷题记录")
@GetMapping(value = { "/clearExerciseRecord" })
public CommonResult clearExerciseRecord(@RequestParam(value = "bankId", required = true) Long bankId)
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionController.java
index 5043de1..79b0722 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppQuestionController.java
@@ -8,6 +8,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -30,7 +31,7 @@
@Autowired
private ExQuestionService questionService;
-
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "刷题获取题目ID列表")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "bankId", dataType = "long", required = false, value = "题库id"),
@@ -42,7 +43,7 @@
return CommonResult.success(questionService.getExerciseQuestionList(bankId,exerciseType));
}
-
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "刷题根据题目ID获取题目详情")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "questionId", dataType = "long", required = true, value = "题目id")
@@ -53,6 +54,7 @@
return CommonResult.success(questionService.getExerciseQuestionById(questionId));
}
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "刷题根据题目ID列表批量获取题目详情")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "questionIds", dataType = "list", required = true, value = "题目id列表")
@@ -64,6 +66,7 @@
}
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "刷题获取错题题目ID列表")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "bankId", dataType = "long", required = false, value = "题库id")
@@ -75,6 +78,7 @@
}
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "考试获取题目ID列表(考试完成返回错对,未完成则不返回)")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "bankId", dataType = "long", required = false, value = "考卷id"),
@@ -86,6 +90,7 @@
return CommonResult.success(questionService.getPaperQuestionList(paperId,viewType));
}
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "考试根据题目ID获取题目详情(考试完成返回答案,未完成则不返回)")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "paperId", dataType = "long", required = true, value = "试卷id"),
@@ -97,6 +102,7 @@
return CommonResult.success(questionService.getPaperQuestionById(paperId,questionId));
}
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "考试根据题目ID列表批量获取题目详情")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "paperId", dataType = "long", required = true, value = "试卷id"),
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppResourceController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppResourceController.java
index db0cfe9..7499f14 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppResourceController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppResourceController.java
@@ -6,6 +6,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
/**
@@ -23,6 +24,7 @@
@Autowired
private ExResourceService resourceService;
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "根据课时id获取资源信息")
@GetMapping(value = { "/getResourceByPeriod" })
public CommonResult getResourceByPeriod(@RequestParam(value = "periodId", required = true) Long periodId)
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentAnswerController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentAnswerController.java
index f0de947..e622a83 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentAnswerController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentAnswerController.java
@@ -7,6 +7,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -28,6 +29,7 @@
@Autowired
private ExStudentAnswerService studentAnswerService;
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "新增答题")
@PostMapping
public CommonResult add(@Validated @RequestBody ExStudentAnswer studentAnswer){
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentStudyController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentStudyController.java
index ab6c33b..25ecdc0 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentStudyController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/app/AppStudentStudyController.java
@@ -9,6 +9,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -27,12 +28,14 @@
@Autowired
private ExStudentStudyService studentStudyService;
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "新增学习记录")
@PostMapping
public CommonResult add(@Validated @RequestBody ExStudentStudy studentStudy){
return CommonResult.success(studentStudyService.insertStudentStudy(studentStudy));
}
+ @PreAuthorize("hasAnyAuthority('train:exam:student')")
@ApiOperation(value = "上报学习进度")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "body", name = "id", dataType = "long", required = true, value = "学习记录id"),
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCarouselController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCarouselController.java
index 6109a86..69f8d5e 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCarouselController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCarouselController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.SysCarousel;
@@ -47,6 +48,7 @@
return CommonResult.success(carouselService.selectCarouselById(carouselId));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "轮播图管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增轮播图")
@@ -55,6 +57,7 @@
return CommonResult.success(carouselService.insertCarousel(carousel));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "轮播图管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑轮播图")
@@ -63,6 +66,7 @@
return CommonResult.success(carouselService.updateCarousel(carousel));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "轮播图管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除轮播图")
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCategoryController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCategoryController.java
index 370e098..3dee02d 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCategoryController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCategoryController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.SysCategory;
@@ -39,6 +40,7 @@
return CommonResult.success(categoryService.selectCategoryById(categoryId));
}
+ @RepeatSubmit
@Log(title = "课程分类管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增课程分类")
@PostMapping
@@ -46,6 +48,7 @@
return CommonResult.success(categoryService.insertCategory(category));
}
+ @RepeatSubmit
@Log(title = "课程分类管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑课程分类")
@PutMapping
@@ -53,6 +56,7 @@
return CommonResult.success(categoryService.updateCategory(category));
}
+ @RepeatSubmit
@Log(title = "课程分类管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除课程分类")
@DeleteMapping(value = { "/{categoryId}" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCommonController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCommonController.java
index b520527..af1a6d8 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCommonController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCommonController.java
@@ -1,5 +1,6 @@
package com.gkhy.exam.admin.system;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.system.domain.vo.UploadObjectVO;
import com.gkhy.exam.system.service.SysCommonService;
@@ -16,6 +17,7 @@
@Autowired
private SysCommonService commonService;
+ @RepeatSubmit
@ApiOperation(value = "上传图片/文件")
@PostMapping("/uploadFile")
public CommonResult<UploadObjectVO> uploadFile(MultipartFile file){
@@ -30,4 +32,16 @@
}
+ /**
+ * 整个文件上传
+ * 上传视频文件转m3u8
+ *@param file 文件
+ *@return String: 路径
+ */
+ @PostMapping("/uploadVideo")
+ public CommonResult uploadVideo(@RequestPart("file") MultipartFile file) throws Exception { ;
+ return CommonResult.success(commonService.uploadVideo2M3u8(file));
+ }
+
+
}
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCompanyController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCompanyController.java
index fce4043..01410ef 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCompanyController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysCompanyController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.SysCompany;
@@ -49,6 +50,7 @@
return CommonResult.success(companyService.selectCompanyById(companyId));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "企业管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增企业")
@@ -57,6 +59,7 @@
return CommonResult.success(companyService.insertCompany(company));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "企业管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑企业")
@@ -65,6 +68,7 @@
return CommonResult.success(companyService.updateCompany(company));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "企业管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除企业")
@@ -73,6 +77,7 @@
return CommonResult.success(companyService.deleteCompanyById(companyId));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "企业管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "企业分配课时")
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictDataController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictDataController.java
index 570d927..6242552 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictDataController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictDataController.java
@@ -1,6 +1,7 @@
package com.gkhy.exam.admin.system;
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.domain.entity.SysDictData;
import com.gkhy.exam.common.enums.BusinessType;
@@ -42,6 +43,7 @@
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "字典数据", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增字典数据")
@@ -50,6 +52,7 @@
return CommonResult.success(dictDataServic.insertDictData(dictData));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "字典数据", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑字典数据")
@@ -58,6 +61,7 @@
return CommonResult.success(dictDataServic.updateDictData(dictData));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "字典类型", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除字典数据")
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictTypeController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictTypeController.java
index e05830e..505c2a3 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictTypeController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysDictTypeController.java
@@ -1,6 +1,7 @@
package com.gkhy.exam.admin.system;
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.domain.entity.SysDictType;
import com.gkhy.exam.common.enums.BusinessType;
@@ -33,6 +34,7 @@
return CommonResult.success(dictTypeService.selectDictTypeById(dictId));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "字典类型", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增字典类型")
@@ -41,6 +43,7 @@
return CommonResult.success(dictTypeService.insertDictType(dictType));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "字典类型", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑字典类型")
@@ -49,6 +52,7 @@
return CommonResult.success(dictTypeService.updateDictType(dictType));
}
+ @RepeatSubmit
@PreAuthorize("hasAnyAuthority('train:exam:system')")
@Log(title = "字典类型", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除字典类型")
@@ -58,6 +62,7 @@
return CommonResult.success();
}
+ @RepeatSubmit
@Log(title = "字典类型", businessType = BusinessType.CLEAN)
@ApiOperation(value = "刷新缓存")
@DeleteMapping("/refreshCache")
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysNoticeController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysNoticeController.java
index 42e3d18..44f4239 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysNoticeController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysNoticeController.java
@@ -1,6 +1,7 @@
package com.gkhy.exam.admin.system;
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.SysNotice;
@@ -34,6 +35,7 @@
}
+ @RepeatSubmit
@Log(title = "通知公告", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增通知公告")
@PostMapping
@@ -42,6 +44,7 @@
return CommonResult.success(noticeService.insertNotice(notice));
}
+ @RepeatSubmit
@Log(title = "通知公告", businessType = BusinessType.UPDATE)
@ApiOperation(value = "修改通知公告")
@PutMapping
@@ -50,6 +53,7 @@
return CommonResult.success(noticeService.updateNotice(notice));
}
+ @RepeatSubmit
@Log(title = "通知公告", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除通知公告")
@DeleteMapping("/{noticeIds}")
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysProfileController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysProfileController.java
index c0c259e..80f6ed3 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysProfileController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysProfileController.java
@@ -2,6 +2,7 @@
import cn.hutool.core.codec.Base64;
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.domain.entity.SysUser;
import com.gkhy.exam.common.enums.BusinessType;
@@ -33,6 +34,7 @@
return CommonResult.success(user);
}
+ @RepeatSubmit
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
@PutMapping
public CommonResult updateProfile(@RequestBody SysUser user)
@@ -54,6 +56,7 @@
throw new ApiException("修改个人信息异常,请联系管理员");
}
+ @RepeatSubmit
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
@ApiImplicitParams({
@ApiImplicitParam(paramType = "body", name = "oldPassword", dataType = "String", required = true, value = "旧密码"),
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysUserController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysUserController.java
index 07aab8c..50da2fd 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysUserController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/system/SysUserController.java
@@ -1,6 +1,7 @@
package com.gkhy.exam.admin.system;
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.domain.entity.SysUser;
import com.gkhy.exam.common.enums.BusinessType;
@@ -41,6 +42,7 @@
}
+ @RepeatSubmit
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增用户")
@PostMapping
@@ -49,6 +51,7 @@
}
+ @RepeatSubmit
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑用户")
@PutMapping
@@ -57,6 +60,7 @@
}
+ @RepeatSubmit
@Log(title = "用户管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除用户")
@PutMapping("/{userId}")
@@ -65,6 +69,7 @@
}
+ @RepeatSubmit
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "重置密码")
@PutMapping(value = "/resetPwd")
@@ -73,6 +78,7 @@
return CommonResult.success();
}
+ @RepeatSubmit
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "修改用户状态")
@PutMapping(value = "/changeStatus")
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCompanyPeriodController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCompanyPeriodController.java
index 5c20194..b3c3740 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCompanyPeriodController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCompanyPeriodController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExCompanyPeriod;
@@ -39,25 +40,11 @@
}
+ @RepeatSubmit
@Log(title = "企业课时变更记录管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除企业课时变更记录")
@DeleteMapping(value = { "/{periodId}" })
public CommonResult delete(@PathVariable(value = "periodId", required = true) Long periodId){
return CommonResult.success(companyPeriodService.deleteCompanyPeriodById(periodId));
- }
-
-
- /**
- * <p>
- * 题库表 前端控制器
- * </p>
- *
- * @author kzy
- * @since 2024-06-18 10:09:52
- */
- @RestController
- @RequestMapping("/system/ex-question-bank")
- public static class ExQuestionBankController {
-
}
}
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterController.java
index c0db6f9..14644bc 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExCourseChapter;
@@ -47,7 +48,7 @@
return CommonResult.success(courseChapterService.selectChapterById(chapterId));
}
-
+ @RepeatSubmit
@Log(title = "课程章节管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增章节")
@PostMapping
@@ -55,6 +56,7 @@
return CommonResult.success(courseChapterService.insertChapter(courseChapter));
}
+ @RepeatSubmit
@Log(title = "课程章节管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑章节")
@PutMapping
@@ -62,6 +64,7 @@
return CommonResult.success(courseChapterService.updateChapter(courseChapter));
}
+ @RepeatSubmit
@Log(title = "课程章节管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除章节")
@DeleteMapping(value = { "/{chapterId}" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterPeriodController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterPeriodController.java
index be6edd6..bb9a5f7 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterPeriodController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseChapterPeriodController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExCourseChapterPeriod;
@@ -46,6 +47,7 @@
return CommonResult.success(courseChapterPeriodService.selectPeriodById(periodId));
}
+ @RepeatSubmit
@Log(title = "课时管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增课时")
@PostMapping
@@ -53,6 +55,7 @@
return CommonResult.success(courseChapterPeriodService.insertPeriod(chapterPeriod));
}
+ @RepeatSubmit
@Log(title = "课时管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑课时")
@PutMapping
@@ -60,6 +63,7 @@
return CommonResult.success(courseChapterPeriodService.updatePeriod(chapterPeriod));
}
+ @RepeatSubmit
@Log(title = "课时管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除课时")
@DeleteMapping(value = { "/{periodId}" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseController.java
index 0a39f3d..eb0ee03 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCourseController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExCourse;
@@ -50,6 +51,7 @@
return CommonResult.success(courseService.selectApproveCourseList(course));
}
+ @RepeatSubmit
@ApiOperation(value = "课程审批")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "body", name = "id", dataType = "long", required = true, value = "课程id"),
@@ -68,6 +70,7 @@
return CommonResult.success(courseService.selectCourseById(courseId));
}
+ @RepeatSubmit
@Log(title = "课程管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增课程")
@PostMapping
@@ -75,6 +78,7 @@
return CommonResult.success(courseService.insertCourse(course));
}
+ @RepeatSubmit
@Log(title = "课程管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑课程")
@PutMapping
@@ -82,6 +86,7 @@
return CommonResult.success(courseService.updateCourse(course));
}
+ @RepeatSubmit
@Log(title = "课程管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除课程")
@DeleteMapping(value = { "/{courseId}" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCoursePhaseController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCoursePhaseController.java
index 25d25bb..c32a469 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCoursePhaseController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExCoursePhaseController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExCoursePhase;
@@ -47,6 +48,7 @@
return CommonResult.success(coursePhaseService.selectCoursePhaseById(phaseId));
}
+ @RepeatSubmit
@Log(title = "批次管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增批次")
@PostMapping
@@ -54,6 +56,7 @@
return CommonResult.success(coursePhaseService.insertCoursePhase(coursePhase));
}
+ @RepeatSubmit
@Log(title = "批次管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑批次")
@PutMapping
@@ -61,6 +64,7 @@
return CommonResult.success(coursePhaseService.updateCoursePhase(coursePhase));
}
+ @RepeatSubmit
@Log(title = "批次管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除批次")
@DeleteMapping(value = { "/{phaseId}" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamPaperController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamPaperController.java
index 03bd53c..bfc9df7 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamPaperController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamPaperController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExExamPaper;
@@ -46,6 +47,7 @@
return CommonResult.success(examPaperService.selectExamPaperById(paperId));
}
+ @RepeatSubmit
@Log(title = "试卷管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增试卷")
@PostMapping
@@ -53,6 +55,7 @@
return CommonResult.success(examPaperService.insertExamPaper(examPaper));
}
+ @RepeatSubmit
@Log(title = "试卷管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑试卷")
@PutMapping
@@ -60,6 +63,7 @@
return CommonResult.success(examPaperService.updateExamPaper(examPaper));
}
+ @RepeatSubmit
@Log(title = "试卷管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除试卷")
@DeleteMapping(value = { "/{paperId}" })
@@ -74,6 +78,7 @@
return CommonResult.success(examPaperService.checkNameUnique(examPaper));
}
+ @RepeatSubmit
@Log(title = "试卷管理", businessType = BusinessType.UPDATE)
@ApiImplicitParams({
@ApiImplicitParam(paramType = "body", name = "id", dataType = "long", required = false, value = "试卷id"),
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamRecordController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamRecordController.java
new file mode 100644
index 0000000..33b619c
--- /dev/null
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExExamRecordController.java
@@ -0,0 +1,73 @@
+package com.gkhy.exam.admin.web;
+
+
+import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.enums.BusinessType;
+import com.gkhy.exam.system.domain.ExExamRecord;
+import com.gkhy.exam.system.service.ExExamRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 线下教育登记表 前端控制器
+ * </p>
+ *
+ * @author kzy
+ * @since 2024-06-24 16:16:33
+ */
+@Api(tags = "线下教育登记前端控制器")
+@RestController
+@RequestMapping("/exam-record")
+public class ExExamRecordController {
+ @Autowired
+ private ExExamRecordService examRecordService;
+
+ @ApiOperation(value = "登记列表(分页)")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+ @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10")
+ })
+ @GetMapping("/list")
+ public CommonResult list(ExExamRecord examRecord){
+ return CommonResult.success(examRecordService.selectExamRecordList(examRecord));
+ }
+
+ @ApiOperation(value = "根据id获取登记信息")
+ @GetMapping(value = { "/{recordId}" })
+ public CommonResult getExamRecordInfo(@PathVariable(value = "recordId", required = true) Long recordId)
+ {
+ return CommonResult.success(examRecordService.selectExamRecordById(recordId));
+ }
+
+ @RepeatSubmit
+ @Log(title = "线下教育登记管理", businessType = BusinessType.INSERT)
+ @ApiOperation(value = "新增登记")
+ @PostMapping
+ public CommonResult add(@Validated @RequestBody ExExamRecord examRecord){
+ return CommonResult.success(examRecordService.insertExamRecord(examRecord));
+ }
+
+ @RepeatSubmit
+ @Log(title = "线下教育登记管理", businessType = BusinessType.UPDATE)
+ @ApiOperation(value = "编辑登记")
+ @PutMapping
+ public CommonResult edit(@Validated @RequestBody ExExamRecord examRecord){
+ return CommonResult.success(examRecordService.updateExamRecord(examRecord));
+ }
+
+ @RepeatSubmit
+ @Log(title = "线下教育登记管理", businessType = BusinessType.DELETE)
+ @ApiOperation(value = "删除登记")
+ @DeleteMapping(value = { "/{recordId}" })
+ public CommonResult delete(@PathVariable(value = "recordId", required = true) Long recordId){
+ return CommonResult.success(examRecordService.deleteExamRecordById(recordId));
+ }
+}
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPaperQuestionController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPaperQuestionController.java
deleted file mode 100644
index 709ae55..0000000
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPaperQuestionController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.gkhy.exam.admin.web;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 试题 前端控制器
- * </p>
- *
- * @author kzy
- * @since 2024-06-06 13:53:17
- */
-@RestController
-@RequestMapping("/paper-question")
-public class ExPaperQuestionController {
-
-}
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPaperStudentController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPaperStudentController.java
index af6c380..20b2a6a 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPaperStudentController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPaperStudentController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExPaperStudent;
@@ -16,6 +17,7 @@
import java.util.Collections;
import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -35,13 +37,15 @@
@ApiOperation(value = "考卷下的学员列表(分页)")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
- @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10")
+ @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+ @ApiImplicitParam(paramType = "query", name = "paperId", dataType = "long", required = true, value = "考卷id")
})
@GetMapping("/list")
public CommonResult list(ExPaperStudent paperStudent){
return CommonResult.success(paperStudentService.selectPaperStudentList(paperStudent));
}
+ @RepeatSubmit
@Log(title = "试卷与学员关系管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增学员")
@PostMapping
@@ -49,21 +53,29 @@
return CommonResult.success(paperStudentService.addPaperStudent(paperStudent));
}
- @Log(title = "试卷与学员关系管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit
+ @Log(title = "试卷与学员关系管理", businessType = BusinessType.INSERT)
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "body", name = "phaseIds", dataType = "array", required = false, value = "批次id列表"),
+ @ApiImplicitParam(paramType = "query", name = "studentIds", dataType = "array", required = false, value = "学员id列表(批次id和学员id列表只能传一个)"),
+ @ApiImplicitParam(paramType = "query", name = "paperId", dataType = "long", required = true, value = "考卷id")
+ })
@ApiOperation(value = "批量新增学员")
@PostMapping("/batchAdd")
- public CommonResult batchAdd(@Validated @RequestBody List<ExPaperStudent> paperStudents){
- return CommonResult.success(paperStudentService.batchAddPaperStudent(paperStudents));
+ public CommonResult batchAdd(@RequestBody Map<String,Object> paperStudentMap){
+ return CommonResult.success(paperStudentService.batchAddPaperStudent(paperStudentMap));
}
- @Log(title = "试卷与学员关系管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit
+ @Log(title = "试卷与学员关系管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除学员")
@DeleteMapping(value = { "/{phaseStudentId}" })
public CommonResult delete(@PathVariable(value = "phaseStudentId", required = true) Long paperStudentId){
return CommonResult.success(paperStudentService.deletePaperStudent(paperStudentId));
}
- @Log(title = "试卷与学员关系管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit
+ @Log(title = "试卷与学员关系管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "批量删除学员")
@DeleteMapping(value = { "/batchDelete" })
public CommonResult batchDelete( List<Long> paperStudentIds){
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPhaseStudentController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPhaseStudentController.java
index bdf5d2e..512a48c 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPhaseStudentController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExPhaseStudentController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExPhaseStudent;
@@ -43,6 +44,7 @@
return CommonResult.success(phaseStudentService.selectPhaseStudentList(phaseStudent));
}
+ @RepeatSubmit
@Log(title = "批次与学员关系管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增学员")
@PostMapping
@@ -50,6 +52,7 @@
return CommonResult.success(phaseStudentService.addPhaseStudent(phaseStudent));
}
+ @RepeatSubmit
@Log(title = "批次与学员关系管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "批量新增学员")
@PostMapping("/batchAdd")
@@ -57,6 +60,7 @@
return CommonResult.success(phaseStudentService.batchAddPhaseStudent(phaseStudents));
}
+ @RepeatSubmit
@Log(title = "批次与学员关系管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除学员")
@DeleteMapping(value = { "/{phaseStudentId}" })
@@ -64,6 +68,7 @@
return CommonResult.success(phaseStudentService.deletePhaseStudent(phaseStudentId));
}
+ @RepeatSubmit
@Log(title = "批次与学员关系管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "批量删除学员")
@DeleteMapping(value = { "/batchDelete" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionBankController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionBankController.java
index 8caceb1..e39c890 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionBankController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionBankController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExQuestionBank;
@@ -46,6 +47,7 @@
return CommonResult.success(questionBankService.selectQuestionBankById(bankId));
}
+ @RepeatSubmit
@Log(title = "题库管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增题库")
@PostMapping
@@ -53,6 +55,7 @@
return CommonResult.success(questionBankService.insertQuestionBank(questionBank));
}
+ @RepeatSubmit
@Log(title = "题库管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑题库")
@PutMapping
@@ -60,6 +63,7 @@
return CommonResult.success(questionBankService.updateQuestionBank(questionBank));
}
+ @RepeatSubmit
@Log(title = "题库管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除题库")
@DeleteMapping(value = { "/{bankId}" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionController.java
index 8a1905c..f18c2e9 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExQuestionController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExQuestion;
@@ -32,7 +33,8 @@
@ApiOperation(value = "题目列表(分页)")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
- @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10")
+ @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+ @ApiImplicitParam(paramType = "query", name = "bankId", dataType = "long", required = true, value = "题库id")
})
@GetMapping("/list")
public CommonResult list(ExQuestion question){
@@ -47,6 +49,7 @@
return CommonResult.success(questionService.selectQuestionById(questionId));
}
+ @RepeatSubmit
@Log(title = "题目管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增题目")
@PostMapping
@@ -54,6 +57,7 @@
return CommonResult.success(questionService.insertQuestion(question));
}
+ @RepeatSubmit
@Log(title = "题目管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑题目")
@PutMapping
@@ -61,6 +65,7 @@
return CommonResult.success(questionService.updateQuestion(question));
}
+ @RepeatSubmit
@Log(title = "题目管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除题目")
@DeleteMapping(value = { "/{questionId}" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExResourceController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExResourceController.java
index f123f36..67334d2 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExResourceController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExResourceController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExResource;
@@ -46,20 +47,23 @@
return CommonResult.success(resourceService.selectResourceById(resourceId));
}
+ @RepeatSubmit
@Log(title = "资源管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增资源")
@PostMapping
- public CommonResult add(@Validated @RequestBody ExResource resource){
+ public CommonResult add(@Validated @ModelAttribute ExResource resource){
return CommonResult.success(resourceService.insertResource(resource));
}
+ @RepeatSubmit
@Log(title = "资源管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑资源")
@PutMapping
- public CommonResult edit(@Validated @RequestBody ExResource resource){
+ public CommonResult edit(@Validated @ModelAttribute ExResource resource){
return CommonResult.success(resourceService.updateResource(resource));
}
+ @RepeatSubmit
@Log(title = "资源管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "删除资源")
@DeleteMapping(value = { "/{resourceId}" })
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStatisticController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStatisticController.java
new file mode 100644
index 0000000..6425dfe
--- /dev/null
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStatisticController.java
@@ -0,0 +1,48 @@
+package com.gkhy.exam.admin.web;
+
+
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.service.ExStatisticService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 统计前端控制器
+ * </p>
+ *
+ * @author kzy
+ * @since 2024-06-06 13:53:17
+ */
+@Api(tags = "统计记录前端控制器")
+@RestController
+@RequestMapping("/statistic")
+public class ExStatisticController {
+ @Autowired
+ private ExStatisticService statisticService;
+
+ @ApiOperation(value = "企业数据统计")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+ @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+ @ApiImplicitParam(paramType = "query", name = "startTime", dataType = "string", required = false, value = "开始时间(格式:xxxx-xx-xx 00:00:00)"),
+ @ApiImplicitParam(paramType = "query", name = "endTime", dataType = "string", required = false, value = "结束时间(格式:xxxx-xx-xx 00:00:00)"),
+ @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "long", required = false, value = "企业id"),
+ @ApiImplicitParam(paramType = "query", name = "type", dataType = "int", required = true, value = "1线上教育 2线下教育,默认1")
+ })
+ @GetMapping("/companyStatistic")
+ public CommonResult companyStatistic(@RequestParam(required = false) Date startTime, @RequestParam(required = false) Date endTime, @RequestParam(required = false) Long companyId, @RequestParam(required = true,value = "1") Integer type) {
+ return CommonResult.success(statisticService.companyStatic(companyId, startTime, endTime,type));
+ }
+
+
+}
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentAnswerController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentAnswerController.java
deleted file mode 100644
index 78c6803..0000000
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentAnswerController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.gkhy.exam.admin.web;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 学员与考试题目关系表 前端控制器
- * </p>
- *
- * @author kzy
- * @since 2024-06-13 17:47:56
- */
-@RestController
-@RequestMapping("/student-answer")
-public class ExStudentAnswerController {
-
-}
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentController.java
index 0962818..4858712 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.domain.ExStudent;
@@ -11,7 +12,6 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -48,6 +48,7 @@
return CommonResult.success(studentService.selectStudentById(studentId));
}
+ @RepeatSubmit
@Log(title = "学员管理", businessType = BusinessType.INSERT)
@ApiOperation(value = "新增学员")
@PostMapping
@@ -55,6 +56,7 @@
return CommonResult.success(studentService.insertStudent(student));
}
+ @RepeatSubmit
@Log(title = "学员管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "编辑学员")
@PutMapping
@@ -62,13 +64,15 @@
return CommonResult.success(studentService.updateStudent(student));
}
- @Log(title = "学员管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit
+ @Log(title = "学员管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除学员")
@DeleteMapping(value = { "/{studentId}" })
public CommonResult delete(@PathVariable(value = "studentId", required = true) Long studentId){
return CommonResult.success(studentService.deleteStudentById(studentId));
}
+ @RepeatSubmit
@Log(title = "学员管理", businessType = BusinessType.UPDATE)
@ApiOperation(value = "重置密码")
@PutMapping(value = "/resetPwd")
diff --git a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentStudyController.java b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentStudyController.java
index e0b55db..e97ba6f 100644
--- a/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentStudyController.java
+++ b/exam-admin/src/main/java/com/gkhy/exam/admin/web/ExStudentStudyController.java
@@ -2,6 +2,7 @@
import com.gkhy.exam.common.annotation.Log;
+import com.gkhy.exam.common.annotation.RepeatSubmit;
import com.gkhy.exam.common.api.CommonResult;
import com.gkhy.exam.common.enums.BusinessType;
import com.gkhy.exam.system.service.ExStudentStudyService;
@@ -20,7 +21,7 @@
* @author kzy
* @since 2024-06-06 13:53:17
*/
-@Api(tags = "学员学习记录前端控制器")
+@Api(tags = "学员课程学习记录前端控制器")
@RestController
@RequestMapping("/student-study")
public class ExStudentStudyController {
@@ -37,6 +38,8 @@
return CommonResult.success(studentStudyService.selectStudyByPhaseAndStundentId(phaseId,studentId));
}
+
+ @RepeatSubmit
@Log(title = "课程学习记录管理", businessType = BusinessType.DELETE)
@ApiOperation(value = "删除学习记录")
@DeleteMapping(value = { "/{studyId}" })
diff --git a/exam-common/pom.xml b/exam-common/pom.xml
index 01eeeb9..4fc1fb9 100644
--- a/exam-common/pom.xml
+++ b/exam-common/pom.xml
@@ -115,6 +115,10 @@
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
</dependency>
+ <dependency>
+ <groupId>net.bramp.ffmpeg</groupId>
+ <artifactId>ffmpeg</artifactId>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git a/exam-common/src/main/java/com/gkhy/exam/common/config/FilePathConfig.java b/exam-common/src/main/java/com/gkhy/exam/common/config/FilePathConfig.java
new file mode 100644
index 0000000..2460a99
--- /dev/null
+++ b/exam-common/src/main/java/com/gkhy/exam/common/config/FilePathConfig.java
@@ -0,0 +1,31 @@
+package com.gkhy.exam.common.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author wsl
+ * @Version 1.0
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "m3u8.convertor")
+public class FilePathConfig {
+ /**
+ * 文件上传临时路径 (本地文件转换不需要)
+ */
+ private String tempPath = "upload/tmp/";
+
+ /**
+ * m3u8文件转换后,储存的根路径
+ */
+ private String basePath = "upload/m3u8/";
+
+ /**
+ * m3u8文件转换后,储存的根路径
+ */
+ private String bigPath = "upload/big/";
+
+ private String proxy = "m3u8/";
+}
\ No newline at end of file
diff --git a/exam-common/src/main/java/com/gkhy/exam/common/config/ThreadPoolConfig.java b/exam-common/src/main/java/com/gkhy/exam/common/config/ThreadPoolConfig.java
index 5bfeb39..42e8c1c 100644
--- a/exam-common/src/main/java/com/gkhy/exam/common/config/ThreadPoolConfig.java
+++ b/exam-common/src/main/java/com/gkhy/exam/common/config/ThreadPoolConfig.java
@@ -13,13 +13,13 @@
@Configuration
public class ThreadPoolConfig {
//核心线程池大小
- private int corePoolSize=50;
+ private int corePoolSize=10;
//最大可创建的线程数
- private int maxPoolSize=200;
+ private int maxPoolSize=500;
//队列最大长度
private int queueCapacity=1000;
//线程池维护非线程允许的空闲时间
- private int keepAliveSeconds=300;
+ private int keepAliveSeconds=30;
@Bean(name = "threadPoolTaskExecutor")
public ThreadPoolTaskExecutor threadPoolTaskExecutor(){
@@ -30,6 +30,7 @@
executor.setKeepAliveSeconds(keepAliveSeconds);
// 线程池对拒绝任务(无线程可用)的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ executor.initialize();
return executor;
}
diff --git a/exam-common/src/main/java/com/gkhy/exam/common/enums/PhaseLevelEnum.java b/exam-common/src/main/java/com/gkhy/exam/common/enums/PhaseLevelEnum.java
new file mode 100644
index 0000000..9bc9a65
--- /dev/null
+++ b/exam-common/src/main/java/com/gkhy/exam/common/enums/PhaseLevelEnum.java
@@ -0,0 +1,32 @@
+package com.gkhy.exam.common.enums;
+
+/**
+ * 批次等级
+ *
+ */
+public enum PhaseLevelEnum
+{
+ COMPANY(1, "公司级"),
+ DEPART(2, "部门级"),
+ WORkSHOP(3, "车间级"),
+ OTHER(4, "其他");
+
+ private final Integer code;
+ private final String info;
+
+ PhaseLevelEnum(Integer code, String info)
+ {
+ this.code = code;
+ this.info = info;
+ }
+
+ public Integer getCode()
+ {
+ return code;
+ }
+
+ public String getInfo()
+ {
+ return info;
+ }
+}
diff --git a/exam-common/src/main/java/com/gkhy/exam/common/utils/M3u8Utils.java b/exam-common/src/main/java/com/gkhy/exam/common/utils/M3u8Utils.java
new file mode 100644
index 0000000..480c611
--- /dev/null
+++ b/exam-common/src/main/java/com/gkhy/exam/common/utils/M3u8Utils.java
@@ -0,0 +1,165 @@
+package com.gkhy.exam.common.utils;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import com.gkhy.exam.common.config.FilePathConfig;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import net.bramp.ffmpeg.FFmpeg;
+import net.bramp.ffmpeg.FFmpegExecutor;
+import net.bramp.ffmpeg.FFprobe;
+import net.bramp.ffmpeg.builder.FFmpegBuilder;
+import net.bramp.ffmpeg.probe.FFmpegProbeResult;
+import net.bramp.ffmpeg.probe.FFmpegStream;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * @Author sirwsl
+ * @Version 1.0
+ */
+@Slf4j
+@Component
+public class M3u8Utils {
+
+ @Resource
+ private FFmpeg ffmpeg;
+
+ @Resource
+ private FFprobe ffprobe;
+
+ @Resource
+ private FilePathConfig filePath;
+
+
+
+ /**
+ * 视频文件转 m3u8
+ * 支持: .mp4 | .flv | .avi | .mov | .wmv | .wav
+ * @param file 视频文件
+ * @return 路径
+ */
+ public String mediaFileToM3u8(MultipartFile file){
+ if (file.isEmpty()) {
+ throw new RuntimeException("未发现文件");
+ }
+ log.info("开始解析视频");
+ long start = System.currentTimeMillis();
+ //临时目录创建
+ String path = new File(System.getProperty("user.dir")).getAbsolutePath();
+ String tempFilePath = path+ filePath.getTempPath();
+ if (!FileUtil.exist(tempFilePath)) {
+ FileUtil.mkdir(tempFilePath);
+ }
+ String filePathName = tempFilePath + file.getOriginalFilename();
+ File dest = new File(filePathName);
+ try {
+ file.transferTo(dest);
+ }catch (Exception e){
+ log.error("视频转m3u8格式存在异常,异常原因e:{}",e.getMessage());
+ }
+ long end = System.currentTimeMillis();
+ log.info("临时文件上传成功......耗时:{} ms", end - start);
+ String m3u8FilePath = localFileToM3u8(filePathName);
+ log.info("视频转换已完成 !");
+ return m3u8FilePath;
+ }
+
+ /**
+ * 本地媒体资源转换
+ * @param filePathName : 文件路径
+ * @return :
+ */
+ @SneakyThrows
+ public String localFileToM3u8(String filePathName) {
+ long startTime = System.currentTimeMillis();
+ final FFmpegProbeResult probe = ffprobe.probe(filePathName);
+ final List<FFmpegStream> streams = probe.getStreams().stream().filter(fFmpegStream -> fFmpegStream.codec_type != null).collect(Collectors.toList());
+ final Optional<FFmpegStream> audioStream = streams.stream().filter(fFmpegStream -> FFmpegStream.CodecType.AUDIO.equals(fFmpegStream.codec_type)).findFirst();
+ final Optional<FFmpegStream> videoStream = streams.stream().filter(fFmpegStream -> FFmpegStream.CodecType.VIDEO.equals(fFmpegStream.codec_type)).findFirst();
+
+ if (!audioStream.isPresent()) {
+ log.error("未发现音频流");
+ }
+ if (!videoStream.isPresent()) {
+ log.error("未发现视频流");
+ }
+ //m3u8文件 存储路径
+ String filePath = generateFilePath(this.filePath.getBasePath());
+ if (!FileUtil.exist(filePath)) {
+ FileUtil.mkdir(filePath);
+ }
+ String mainName = getFileMainName(filePathName);
+ String m3u8FileName = filePath + mainName + ".m3u8";
+
+ //下面这一串参数别乱动,经过调优的,1G视频大概需要10秒左右,如果是大佬随意改
+ //"-vsync", "2", "-c:v", "copy", "-c:a", "copy", "-tune", "fastdecode", "-hls_wrap", "0", "-hls_time", "10", "-hls_list_size", "0", "-threads", "12"
+ FFmpegBuilder builder = new FFmpegBuilder()
+ .setInput(filePathName)
+ .overrideOutputFiles(true)
+ .addOutput(m3u8FileName)//输出文件
+ .setFormat(probe.getFormat().format_name) //"mp4"
+ .setAudioBitRate(audioStream.map(fFmpegStream -> fFmpegStream.bit_rate).orElse(0L))
+ .setAudioChannels(1)
+ .setAudioCodec("aac") // using the aac codec
+ .setAudioSampleRate(audioStream.get().sample_rate)
+ .setAudioBitRate(audioStream.get().bit_rate)
+ .setStrict(FFmpegBuilder.Strict.STRICT)
+ .setFormat("hls")
+ .setPreset("ultrafast")
+ .addExtraArgs("-vsync", "2", "-c:v", "copy", "-c:a", "copy", "-tune", "fastdecode", "-hls_wrap", "0", "-hls_time", "10", "-hls_list_size", "0", "-threads", "12")
+ .done();
+
+ FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
+ // Run a one-pass encode
+ executor.createJob(builder).run();
+
+ File dest = new File(filePathName);
+ if (dest.isFile() && dest.exists()) {
+ dest.delete();
+ System.gc();
+ log.warn("临时文件 {}已删除", dest.getName());
+ }
+ long endTime = System.currentTimeMillis();
+ log.info("文件:{} 转换完成!共耗时{} ms", dest.getName(), (endTime - startTime));
+ return m3u8FileName;
+ }
+
+ public static String generateFilePath(String basePath){
+ String temp = basePath;
+ if(StringUtils.isNotBlank(basePath)){
+ if(basePath.endsWith("/")){
+ temp = basePath.substring(0,basePath.lastIndexOf("/"));
+ }
+ }
+ return temp+"/"+generateDateDir()+"/";
+ }
+
+
+ /**
+ *@Description 根据当前时间,生成下级存储目录
+ *@Return
+ */
+ public static String generateDateDir(){
+ LocalDateTime now = LocalDateTime.now();
+ return DateUtil.format(now, "yyyyMMdd/HH/mm/ss");
+ }
+
+ /**
+ *@Description 根据文件全路径,获取文件主名称
+ *@param fullPath 文件全路径(包含文件名)
+ *@Return
+ */
+ public static String getFileMainName(String fullPath){
+ String fileName = FileUtil.getName(fullPath);
+ return fileName.substring(0,fileName.lastIndexOf("."));
+ }
+
+}
\ No newline at end of file
diff --git a/exam-common/src/main/java/com/gkhy/exam/common/utils/MinioUtils.java b/exam-common/src/main/java/com/gkhy/exam/common/utils/MinioUtils.java
index 83c85e2..94aa256 100644
--- a/exam-common/src/main/java/com/gkhy/exam/common/utils/MinioUtils.java
+++ b/exam-common/src/main/java/com/gkhy/exam/common/utils/MinioUtils.java
@@ -6,6 +6,7 @@
import com.gkhy.exam.common.config.MinioConfig;
import io.minio.*;
import io.minio.http.Method;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.FastByteArrayOutputStream;
@@ -13,9 +14,11 @@
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
import java.util.Date;
@Component
+@Slf4j
public class MinioUtils {
@Autowired
private MinioClient minioClient;
@@ -27,15 +30,27 @@
* @return boolean
*/
public Boolean bucketExists(String bucketName) {
- Boolean found;
+ Boolean found=false;
try {
found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
} catch (Exception e) {
- e.printStackTrace();
- return false;
+ log.error("minio校验bucket失败:{}",e.getMessage());
}
return found;
}
+
+ /**
+ * 文件上传 上传完成后请关闭文件流
+ *
+ * @param fileName 带后缀的文件名 检验日期yyyyMMdd加16位随机码
+ * @param stream 文件流 要上传文件的流
+ */
+ public void fileUploader( String fileName, InputStream stream) throws Exception {
+ PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(minioConfig.getBucketName()).object(fileName).stream(stream,-1,-1).contentType("application/octet-stream").build();
+ // 使用putObject上传一个文件到文件分类
+ minioClient.putObject(objectArgs);
+ }
+
/**
* 文件上传
@@ -43,7 +58,7 @@
* @param file 文件
* @return Boolean
*/
- public String upload(MultipartFile file) {
+ public String uploadFile(MultipartFile file) {
String originalFilename = file.getOriginalFilename();
if (StringUtils.isBlank(originalFilename)){
throw new RuntimeException();
@@ -56,7 +71,7 @@
//文件名称相同会覆盖
minioClient.putObject(objectArgs);
} catch (Exception e) {
- e.printStackTrace();
+ log.error("minio上传文件失败:{}",e.getMessage());
return null;
}
return objectName;
@@ -110,4 +125,20 @@
e.printStackTrace();
}
}
+
+ /**
+ * 删除文件
+ * @param fileName
+ * @return
+ */
+ public boolean removeFile(String fileName){
+ try {
+ RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(minioConfig.getBucketName())
+ .object(fileName).build();
+ minioClient.removeObject(removeObjectArgs);
+ return true;
+ }catch (Exception e){
+ return false;
+ }
+ }
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/domain/ExExamRecord.java b/exam-system/src/main/java/com/gkhy/exam/system/domain/ExExamRecord.java
new file mode 100644
index 0000000..280ce14
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/domain/ExExamRecord.java
@@ -0,0 +1,97 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 线下教育登记表
+ * </p>
+ *
+ * @author kzy
+ * @since 2024-06-24 16:16:33
+ */
+@Getter
+@Setter
+@TableName("ex_exam_record")
+@ApiModel(value = "ExExamRecord对象", description = "线下教育登记表")
+public class ExExamRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("主键")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("公司id")
+ @TableField("company_id")
+ private Long companyId;
+
+ @ApiModelProperty("学员id")
+ @TableField("student_id")
+ private Long studentId;
+
+ @ApiModelProperty("计划名称")
+ @TableField("plan_name")
+ private String planName;
+
+ @ApiModelProperty("课程名称")
+ @TableField("course_name")
+ private String courseName;
+
+ @ApiModelProperty("培训等级")
+ @TableField("level")
+ private String level;
+
+ @ApiModelProperty("要求课时(分)")
+ @TableField("period")
+ private Integer period;
+
+ @ApiModelProperty("实际课时(分)")
+ @TableField("actual_period")
+ private Integer actualPeriod;
+
+ @ApiModelProperty("考试成绩")
+ @TableField("score")
+ private Integer score;
+
+ @ApiModelProperty("是否合格,0不合格 1合格 默认0")
+ @TableField("passed")
+ private Integer passed;
+
+ @ApiModelProperty("创建时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("创建人")
+ @TableField("create_by")
+ private String createBy;
+
+ @ApiModelProperty("更新时间")
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("更新人")
+ @TableField("update_by")
+ private String updateBy;
+
+ @ApiModelProperty("备注")
+ @TableField("remark")
+ private String remark;
+
+
+ @ApiModelProperty("公司名称")
+ @TableField(exist = false)
+ private String companyName;
+
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/domain/ExQuestion.java b/exam-system/src/main/java/com/gkhy/exam/system/domain/ExQuestion.java
index 274ae63..81e1b50 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/domain/ExQuestion.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/domain/ExQuestion.java
@@ -48,6 +48,7 @@
@TableField("bank_id")
private Long bankId;
+ @NotNull(message = "公司id不能为空")
@ApiModelProperty("公司id")
@TableField("company_id")
private Long companyId;
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/domain/ExResource.java b/exam-system/src/main/java/com/gkhy/exam/system/domain/ExResource.java
index ec280bf..32581e0 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/domain/ExResource.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/domain/ExResource.java
@@ -13,7 +13,6 @@
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDateTime;
@@ -54,7 +53,6 @@
@TableField("name")
private String name;
- @NotEmpty(message = "公司id不能为空")
@ApiModelProperty(value = "提交公司id",required = true)
@TableField("company_id")
private Long companyId;
@@ -63,7 +61,7 @@
@TableField("privatize")
private Integer privatize;
- @NotBlank(message = "资源种类不能为空")
+ @NotNull(message = "资源种类不能为空")
@ApiModelProperty(value = "资源种类(1:视频2:音频;3:文档)",required = true)
@TableField("resource_type")
private Integer resourceType;
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPaperStudentVO.java b/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPaperStudentVO.java
new file mode 100644
index 0000000..f0b7373
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPaperStudentVO.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.system.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class CompanyPaperStudentVO {
+ @ApiModelProperty("公司id")
+ private Long companyId;
+ @ApiModelProperty("考试人员数量")
+ private Integer paperStudentCount;
+ @ApiModelProperty("合格人员数量")
+ private Integer passStudentCount;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPhaseStudentVO.java b/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPhaseStudentVO.java
new file mode 100644
index 0000000..87e0e5e
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPhaseStudentVO.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.system.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class CompanyPhaseStudentVO {
+ @ApiModelProperty("公司id")
+ private Long companyId;
+ @ApiModelProperty("批次人员数量")
+ private Integer phaseStudentCount;
+ @ApiModelProperty("批次等级")
+ private Integer level;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPhaseVO.java b/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPhaseVO.java
new file mode 100644
index 0000000..2346a78
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyPhaseVO.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.system.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class CompanyPhaseVO {
+ @ApiModelProperty("公司id")
+ private Long companyId;
+ @ApiModelProperty("批次数量")
+ private Integer phaseCount;
+ @ApiModelProperty("批次等级")
+ private Integer level;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyStatisticVO.java b/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyStatisticVO.java
new file mode 100644
index 0000000..7d221c3
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/domain/vo/CompanyStatisticVO.java
@@ -0,0 +1,39 @@
+package com.gkhy.exam.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+@ApiModel(value = "CompanyStatisticVO对象", description = "公司数据统计对象")
+public class CompanyStatisticVO {
+ @ApiModelProperty("公司id")
+ private Long companyId;
+ @ApiModelProperty("公司名称")
+ private String companyName;
+ @ApiModelProperty("批次数量")
+ private Integer phaseCount;
+ @ApiModelProperty("批次人员数量")
+ private Integer phaseStudentCount;
+ @ApiModelProperty("三级批次数量")
+ private Integer level3PhaseCount;
+ @ApiModelProperty("三级人员数量")
+ private Integer level3StudentCount;
+ @ApiModelProperty("二级批次数量")
+ private Integer level2PhaseCount;
+ @ApiModelProperty("二级人员数量")
+ private Integer level2StudentCount;
+ @ApiModelProperty("一级批次数量")
+ private Integer level1PhaseCount;
+ @ApiModelProperty("一级人员数量")
+ private Integer level1StudentCount;
+
+ @ApiModelProperty("考试人员数量")
+ private Integer paperStudentCount;
+ @ApiModelProperty("合格人员数量")
+ private Integer passStudentCount;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/mapper/ExExamRecordMapper.java b/exam-system/src/main/java/com/gkhy/exam/system/mapper/ExExamRecordMapper.java
new file mode 100644
index 0000000..591953b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/mapper/ExExamRecordMapper.java
@@ -0,0 +1,32 @@
+package com.gkhy.exam.system.mapper;
+
+import com.gkhy.exam.system.domain.ExExamRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 线下教育登记表 Mapper 接口
+ * </p>
+ *
+ * @author kzy
+ * @since 2024-06-24 16:16:33
+ */
+@Mapper
+public interface ExExamRecordMapper extends BaseMapper<ExExamRecord> {
+ /**
+ * 分页获取登记记录列表
+ * @param examRecord
+ * @return
+ */
+ List<ExExamRecord> selectExamRecordList(ExExamRecord examRecord);
+
+ /**
+ * 根据id获取登记记录详情
+ * @param recordId
+ * @return
+ */
+ ExExamRecord selectExamRecordById(Long recordId);
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java b/exam-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java
index f920c61..7bfe3bb 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/mapper/SysCompanyMapper.java
@@ -2,7 +2,11 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.exam.system.domain.SysCompany;
+import com.gkhy.exam.system.domain.vo.CompanyPaperStudentVO;
+import com.gkhy.exam.system.domain.vo.CompanyPhaseStudentVO;
+import com.gkhy.exam.system.domain.vo.CompanyPhaseVO;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -47,4 +51,19 @@
* @return
*/
SysCompany checkNameUnique(String name);
+
+ List<CompanyPhaseVO> getOnlineCompanyPhaseCount(@Param("companyIds") List<Long> companyIds, @Param("startTime")String startTime, @Param("endTime")String endTime);
+
+ List<CompanyPhaseStudentVO> getOnlineCompanyPhaseStudentCount(@Param("companyIds")List<Long> companyIds,@Param("startTime")String startTime,@Param("endTime")String endTime);
+
+ List<CompanyPaperStudentVO> getOnlineCompanyPaperStudentCount(@Param("companyIds")List<Long> companyIds,@Param("startTime")String startTime,@Param("endTime")String endTime);
+
+
+ List<CompanyPhaseVO> getOfflineCompanyPhaseCount(@Param("companyIds") List<Long> companyIds, @Param("startTime")String startTime, @Param("endTime")String endTime);
+
+ List<CompanyPhaseStudentVO> getOfflineCompanyPhaseStudentCount(@Param("companyIds")List<Long> companyIds,@Param("startTime")String startTime,@Param("endTime")String endTime);
+
+ List<CompanyPaperStudentVO> getOfflineCompanyPaperStudentCount(@Param("companyIds")List<Long> companyIds,@Param("startTime")String startTime,@Param("endTime")String endTime);
+
+
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/ExExamRecordService.java b/exam-system/src/main/java/com/gkhy/exam/system/service/ExExamRecordService.java
new file mode 100644
index 0000000..a9b165e
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/ExExamRecordService.java
@@ -0,0 +1,73 @@
+package com.gkhy.exam.system.service;
+
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.system.domain.ExExamRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * 线下教育登记表 服务类
+ * </p>
+ *
+ * @author kzy
+ * @since 2024-06-24 16:16:33
+ */
+public interface ExExamRecordService extends IService<ExExamRecord> {
+ /**
+ * 根据条件分页查询登记列表
+ * @param examRecord
+ * @return
+ */
+ CommonPage selectExamRecordList(ExExamRecord examRecord);
+
+
+ /**
+ * 根据id查询登记信息
+ *
+ * @param recordId
+ * @return
+ */
+ public ExExamRecord selectExamRecordById(Long recordId);
+
+
+ /**
+ * 新增登记记录
+ *
+ * @param examRecord
+ * @return 结果
+ */
+ public int insertExamRecord(ExExamRecord examRecord);
+
+
+ /**
+ * 修改登记记录
+ *
+ * @param examRecord
+ * @return 结果
+ */
+ public int updateExamRecord(ExExamRecord examRecord);
+
+ /**
+ * 删除登记记录
+ *
+ * @param recordId
+ * @return 结果
+ */
+ public int deleteExamRecordById(Long recordId);
+
+
+ /**
+ * 校验登记记录是否唯一
+ *
+ * @param examRecord
+ * @return boolean
+ */
+ public boolean checkRecordUnique(ExExamRecord examRecord);
+
+ /**
+ * 导入登记记录
+ */
+ public void importRecord(MultipartFile file);
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/ExPaperStudentService.java b/exam-system/src/main/java/com/gkhy/exam/system/service/ExPaperStudentService.java
index 99f385e..b76d2b7 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/ExPaperStudentService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/ExPaperStudentService.java
@@ -5,6 +5,7 @@
import com.gkhy.exam.system.domain.ExPaperStudent;
import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -25,10 +26,10 @@
/**
* 批量新增考卷与学员关系
- * @param paperStudents
+ * @param paperStudentMap
* @return
*/
- public int batchAddPaperStudent(List<ExPaperStudent> paperStudents);
+ public int batchAddPaperStudent(Map<String,Object> paperStudentMap);
/**
* 分页获取学员的试卷列表
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/ExStatisticService.java b/exam-system/src/main/java/com/gkhy/exam/system/service/ExStatisticService.java
new file mode 100644
index 0000000..4b6235f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/ExStatisticService.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.system.service;
+
+import com.gkhy.exam.common.api.CommonPage;
+
+import java.util.Date;
+
+/**
+ * 统计 服务类
+ */
+public interface ExStatisticService {
+ public CommonPage companyStatic(Long companyId, Date startTime, Date endTime, Integer type);
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/SysCommonService.java b/exam-system/src/main/java/com/gkhy/exam/system/service/SysCommonService.java
index 86f6def..e9d5b70 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/SysCommonService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/SysCommonService.java
@@ -3,6 +3,8 @@
import com.gkhy.exam.system.domain.vo.UploadObjectVO;
import org.springframework.web.multipart.MultipartFile;
+import javax.servlet.http.HttpServletRequest;
+
public interface SysCommonService {
/**
@@ -22,4 +24,41 @@
UploadObjectVO doUpload(String imageBase64);
public boolean removeFile(String path);
+
+ /**
+ * 删除文件并转成m3u8格式
+ * @param file
+ * @return
+ * @throws Exception
+ */
+ public String uploadVideo2M3u8(MultipartFile file) throws Exception;
+
+ /**
+ * 大文件上传至本地
+ *
+ * @param request :请求
+ * @param guid : 编码文件名
+ * @param chunk : 切片数
+ * @param file : 切片文件
+ * @return : 是否成功
+ */
+ public boolean uploadSlice(HttpServletRequest request, String guid, Integer chunk, MultipartFile file);
+
+ /**
+ * 切片上传后合并转M3U8格式 :
+ * @param fileName :文件名
+ * @param guid: 随机id
+ * @return :
+ */
+ public String uploadVideoMerge(String guid, String fileName);
+
+ /**
+ * 合并切片并上传至服务器
+ * @param guid :
+ * @param fileName :
+ * @return :
+ */
+ public String uploadMerge(String guid, String fileName);
+
+
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExCourseServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExCourseServiceImpl.java
index 1f4748c..6b63b4d 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExCourseServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExCourseServiceImpl.java
@@ -76,6 +76,7 @@
checkUserAllowed(course);
if(SecurityUtils.getLoginUser().getUser().getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
course.setState(ApproveStatusEnum.APPROVED.getCode());
+ course.setPrivatize(PrivatizeEnum.PUBLIC.getCode());
}else{
course.setState(ApproveStatusEnum.APPROVING.getCode());
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamPaperServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamPaperServiceImpl.java
index a24760b..5bd7e0d 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamPaperServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamPaperServiceImpl.java
@@ -88,6 +88,8 @@
examPaper.setCreateBy(SecurityUtils.getUsername());
if(examPaper.getLimitTime()>0){
examPaper.setLimit(1);
+ }else{
+ examPaper.setLimit(0);
}
int row=baseMapper.insert(examPaper);
if(row<1){
@@ -135,19 +137,19 @@
}
private List<ExPaperQuestion> getPaperQuestions(Long paperId,Long bankId,Integer questionMethod,Integer questionCount,Integer questionScore, QuestionTypeEnum questionTypeEnum) {
- SysUser user=SecurityUtils.getLoginUser().getUser();
- Integer totalQuestionCount=questionMapper.selectCountByBankId(user.getCompanyId(), bankId, questionTypeEnum.getCode());
+ SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+ Integer totalQuestionCount=questionMapper.selectCountByBankId(currentUser.getCompanyId(), bankId, questionTypeEnum.getCode());
if(totalQuestionCount< questionCount){
throw new ApiException(String.format("所选题库<%s>数量不足,无法分配",questionTypeEnum.getInfo()));
}
List<ExQuestion> questions=new ArrayList<>();
if(Objects.equals(questionMethod, QuestionAssignEnum.RANDOM.getCode())){//随机分配
- questions=questionMapper.selectRandomQuestion(user.getCompanyId(), bankId,questionTypeEnum.getCode(), questionCount);
+ questions=questionMapper.selectRandomQuestion(currentUser.getCompanyId(), bankId,questionTypeEnum.getCode(), questionCount);
}else{//顺序分配
- int totalPage=questionCount/ questionMethod;//不能整除,忽略最后一页
+ int totalPage=questionCount/questionMethod;//不能整除,忽略最后一页
Random random=new Random();
int startIndex=random.nextInt(totalPage)+1;
- questions=questionMapper.selectQuestionWithLimit(user.getCompanyId(), bankId,questionTypeEnum.getCode(),startIndex, questionCount);
+ questions=questionMapper.selectQuestionWithLimit(currentUser.getCompanyId(), bankId,questionTypeEnum.getCode(),startIndex, questionCount);
}
List<ExPaperQuestion> paperQuestionList=questions.stream().map(item -> {
ExPaperQuestion exPaperQuestion=new ExPaperQuestion();
@@ -162,6 +164,7 @@
@Override
public int updateExamPaper(ExExamPaper examPaper) {
+ checkUserAllowed(examPaper);
if(!checkNameUnique(examPaper)){
throw new ApiException("试卷名称已存在");
}
@@ -170,7 +173,9 @@
throw new ApiException("该试卷下已分配学员,不能编辑");
}
examPaper.setCode(null);//编号不能修改
- if(examPaper.getLimitTime()==0){
+ if(examPaper.getLimitTime()>0){
+ examPaper.setLimit(1);
+ }else{
examPaper.setLimit(0);
}
int row=baseMapper.updateById(examPaper);
@@ -199,16 +204,17 @@
@Override
public int deleteExamPaperById(Long paperId) {
+ checkUserAllowed(baseMapper.selectById(paperId));
//查询该试卷分配的学员人数
if(checkPaperHasStudent(paperId)){
throw new ApiException("该试卷下已分配学员,不能删除");
}
- int row=baseMapper.deleteById(paperId);
+ int row=baseMapper.deletePaperById(paperId);
if(row<1){
throw new ApiException("删除试卷失败");
}
//删除考卷试题
- paperQuestionMapper.deletebyPapaerId(paperId);
+ // paperQuestionMapper.deletebyPapaerId(paperId);
return row;
}
@@ -233,9 +239,7 @@
@Override
public int changeExamPaperStatus(Long paperId, Integer status) {
+ checkUserAllowed(baseMapper.selectById(paperId));
return baseMapper.updateById(new ExExamPaper().setId(paperId).setStatus(status).setUpdateBy(SecurityUtils.getUsername()));
}
-
-
-
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamRecordServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamRecordServiceImpl.java
new file mode 100644
index 0000000..a0479b9
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExExamRecordServiceImpl.java
@@ -0,0 +1,94 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.domain.entity.SysUser;
+import com.gkhy.exam.common.enums.UserTypeEnum;
+import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.ExExamRecord;
+import com.gkhy.exam.system.mapper.ExExamRecordMapper;
+import com.gkhy.exam.system.service.ExExamRecordService;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 线下教育登记表 服务实现类
+ * </p>
+ *
+ * @author kzy
+ * @since 2024-06-24 16:16:33
+ */
+@Service
+public class ExExamRecordServiceImpl extends ServiceImpl<ExExamRecordMapper, ExExamRecord> implements ExExamRecordService {
+
+
+ @Override
+ public CommonPage selectExamRecordList(ExExamRecord examRecord) {
+ SysUser user= SecurityUtils.getLoginUser().getUser();
+ if(!user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ examRecord.setCompanyId(user.getCompanyId());
+ }
+ PageUtils.startPage();
+ List<ExExamRecord> recordList=baseMapper.selectExamRecordList(examRecord);
+ return CommonPage.restPage(recordList);
+ }
+
+ @Override
+ public ExExamRecord selectExamRecordById(Long recordId) {
+ return baseMapper.selectExamRecordById(recordId);
+ }
+
+ @Override
+ public int insertExamRecord(ExExamRecord examRecord) {
+ checkUserAllowed(examRecord);
+ int row=baseMapper.insert(examRecord);
+ if(row<1){
+ throw new ApiException("新增登记记录失败");
+ }
+ return row;
+ }
+
+ @Override
+ public int updateExamRecord(ExExamRecord examRecord) {
+ checkUserAllowed(examRecord);
+ int row=baseMapper.updateById(examRecord);
+ if(row<1){
+ throw new ApiException("更新登记记录失败");
+ }
+ return row;
+ }
+
+ @Override
+ public int deleteExamRecordById(Long recordId) {
+ checkUserAllowed(baseMapper.selectById(recordId));
+ return baseMapper.deleteById(recordId);
+ }
+
+ public void checkUserAllowed(ExExamRecord examRecord) {
+ SysUser currentUser= SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return;
+ }
+ if(currentUser.getUserType().equals(UserTypeEnum.STUDENT.getCode())){
+ throw new ApiException("没有权限操作");
+ }
+ if(!currentUser.getCompanyId().equals(examRecord.getCompanyId())){
+ throw new ApiException("没有权限操作其他企业登记记录");
+ }
+ }
+
+ @Override
+ public boolean checkRecordUnique(ExExamRecord examRecord) {
+ return false;
+ }
+
+ @Override
+ public void importRecord(MultipartFile file) {
+
+ }
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExPaperStudentServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExPaperStudentServiceImpl.java
index dea8694..a4f1643 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExPaperStudentServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExPaperStudentServiceImpl.java
@@ -1,6 +1,7 @@
package com.gkhy.exam.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.domain.entity.SysUser;
@@ -11,19 +12,16 @@
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.system.domain.ExExamPaper;
import com.gkhy.exam.system.domain.ExPaperStudent;
+import com.gkhy.exam.system.domain.ExPhaseStudent;
import com.gkhy.exam.system.domain.ExStudent;
-import com.gkhy.exam.system.mapper.ExExamPaperMapper;
-import com.gkhy.exam.system.mapper.ExPaperStudentMapper;
-import com.gkhy.exam.system.mapper.ExStudentAnswerMapper;
-import com.gkhy.exam.system.mapper.ExStudentMapper;
+import com.gkhy.exam.system.mapper.*;
import com.gkhy.exam.system.service.ExPaperStudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* <p>
@@ -41,6 +39,8 @@
private ExStudentAnswerMapper studentAnswerMapper;
@Autowired
private ExStudentMapper studentMapper;
+ @Autowired
+ private ExPhaseStudentMapper phaseStudentMapper;
@Override
@@ -67,6 +67,7 @@
@Override
public int addPaperStudent(ExPaperStudent paperStudent) {
+ checkUserAllowed(paperStudent);
checkStudentUnique(Collections.singletonList(paperStudent));
paperStudent.setCreateId(SecurityUtils.getUserId());
int row=baseMapper.insert(paperStudent);
@@ -77,7 +78,25 @@
}
@Override
- public int batchAddPaperStudent(List<ExPaperStudent> paperStudents) {
+ public int batchAddPaperStudent(Map<String,Object> paperStudentMap) {
+ List<Long> phaseIds= (List<Long>) paperStudentMap.get("phaseIds");
+ List<Long> studentIds= (List<Long>) paperStudentMap.get("studentIds");
+ if(ObjectUtil.isEmpty(phaseIds) && ObjectUtil.isEmpty(studentIds)){
+ throw new ApiException("批次id与学员id不能同时为空");
+ }
+ Long paperId= (Long) paperStudentMap.get("paperId");
+ if(paperId==null){
+ throw new ApiException("考卷id不能为空");
+ }
+ //按批次绑定用户
+ if(phaseIds.size()>0){
+ List<ExPhaseStudent> phaseStudentList=phaseStudentMapper.selectList( Wrappers.<ExPhaseStudent>lambdaQuery()
+ .in(ExPhaseStudent::getPhaseId, phaseIds));
+ studentIds=phaseStudentList.stream().map(item -> item.getStudentId()).distinct().collect(Collectors.toList());
+ }
+ List<ExPaperStudent> paperStudents=studentIds.stream().map(item -> {
+ return new ExPaperStudent().setPaperId(paperId).setStudentId(item);
+ }).collect(Collectors.toList());
checkStudentUnique(paperStudents);
int row=baseMapper.batchInsert(paperStudents);
if(row<1){
@@ -100,7 +119,7 @@
@Override
public CommonPage selectPaperStudentList(ExPaperStudent paperStudent) {
if(paperStudent.getPaperId()==null){
- throw new ApiException("试卷id不能为空");
+ throw new ApiException("考卷id不能为空");
}
PageUtils.startPage();
List<ExPaperStudent> paperStudentList=baseMapper.selectPaperStudentList(paperStudent);
@@ -113,6 +132,7 @@
if(ObjectUtil.isNull(paperStudent)){
throw new ApiException(String.format("该试卷下不存在该学员<>",paperStudent.getStudentName()));
}
+ checkUserAllowed(paperStudent);
int studentAnswerCount=studentAnswerMapper.countByPaperId(paperStudent.getPaperId(),paperStudent.getStudentId());
if(studentAnswerCount>0){
throw new ApiException(String.format("学员<%s>已进行答题,不能删除",paperStudent.getStudentName()));
@@ -130,7 +150,20 @@
}
+ public void checkUserAllowed(ExPaperStudent paperStudent) {
+ SysUser currentUser= SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return;
+ }
+ if(currentUser.getUserType().equals(UserTypeEnum.STUDENT.getCode())){
+ throw new ApiException("没有权限操作");
+ }
+ ExExamPaper examPaper=examPaperMapper.selectById(paperStudent.getPaperId());
+ if(!currentUser.getCompanyId().equals(examPaper.getCompanyId())){
+ throw new ApiException("没有权限操作其他企业考卷");
+ }
+ }
@Override
public void endExam(ExPaperStudent paperStudent) {
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionBankServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionBankServiceImpl.java
index 0a496b8..8b45914 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionBankServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionBankServiceImpl.java
@@ -33,6 +33,10 @@
@Override
public CommonPage selectQuestionBankList(ExQuestionBank questionBank) {
+ SysUser user= SecurityUtils.getLoginUser().getUser();
+ if(!user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ questionBank.setCompanyId(user.getCompanyId());
+ }
PageUtils.startPage();
List<ExQuestionBank> bankList=baseMapper.selectQuestionBankList(questionBank);
return CommonPage.restPage(bankList);
@@ -40,11 +44,23 @@
@Override
public ExQuestionBank selectQuestionBankById(Long bankId) {
- return baseMapper.selectById(bankId);
+ ExQuestionBank questionBank= baseMapper.selectById(bankId);
+ if(questionBank.getPrivatize().equals(PrivatizeEnum.PUBLIC.getCode())){
+ return questionBank;
+ }
+ SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return questionBank;
+ }
+ if(!questionBank.getCompanyId().equals(currentUser.getCompanyId())){
+ throw new ApiException("无权限查看其它企业题库");
+ }
+ return questionBank;
}
@Override
public int insertQuestionBank(ExQuestionBank questionBank) {
+ checkUserAllowed(questionBank);
if(!checkNameUnique(questionBank)){
throw new ApiException("题库名称已存在");
}
@@ -52,10 +68,6 @@
if(user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
questionBank.setPrivatize(PrivatizeEnum.PUBLIC.getCode());
}else{
- if(user.getCompanyId()==null){
- throw new ApiException("获取用户公司id为空");
- }
- questionBank.setPrivatize(PrivatizeEnum.PRIVATE.getCode());
questionBank.setCompanyId(user.getCompanyId());
}
int row =baseMapper.insert(questionBank);
@@ -67,6 +79,7 @@
@Override
public int updateQuestionBank(ExQuestionBank questionBank) {
+ checkUserAllowed(questionBank);
if(!checkNameUnique(questionBank)){
throw new ApiException("题库名称已存在");
}
@@ -77,8 +90,22 @@
return row;
}
+ public void checkUserAllowed(ExQuestionBank questionBank) {
+ SysUser currentUser= SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return;
+ }
+ if(currentUser.getUserType().equals(UserTypeEnum.STUDENT.getCode())){
+ throw new ApiException("没有权限操作");
+ }
+ if(!currentUser.getCompanyId().equals(questionBank.getCompanyId())){
+ throw new ApiException("没有权限操作其他企业课程");
+ }
+ }
+
@Override
public int deleteQuestionBankById(Long bankId) {
+ checkUserAllowed(baseMapper.selectById(bankId));
return baseMapper.deleteByBankId(bankId);
}
@@ -101,6 +128,9 @@
@Override
public CommonPage selectQuestionBankListForStudent(ExQuestionBank questionBank) {
SysUser user= SecurityUtils.getLoginUser().getUser();
+ if(!user.getUserType().equals(UserTypeEnum.STUDENT.getCode())){
+ throw new ApiException("非学员用户,无法查看");
+ }
questionBank.setCompanyId(user.getCompanyId());
questionBank.setStudentId(user.getId());
PageUtils.startPage();
@@ -110,7 +140,11 @@
@Override
public ExQuestionBank selectQuestionBankByIdForStudent(Long bankId) {
- return baseMapper.selectQuestionBankByIdForStudent(bankId,SecurityUtils.getUserId());
+ SysUser user= SecurityUtils.getLoginUser().getUser();
+ if(!user.getUserType().equals(UserTypeEnum.STUDENT.getCode())){
+ throw new ApiException("非学员用户,无法查看");
+ }
+ return baseMapper.selectQuestionBankByIdForStudent(bankId,user.getId());
}
@Override
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionServiceImpl.java
index 7c6cd3e..809eabf 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExQuestionServiceImpl.java
@@ -16,8 +16,10 @@
import com.gkhy.exam.system.domain.ExExamPaper;
import com.gkhy.exam.system.domain.ExPaperStudent;
import com.gkhy.exam.system.domain.ExQuestion;
+import com.gkhy.exam.system.domain.ExQuestionBank;
import com.gkhy.exam.system.mapper.ExExamPaperMapper;
import com.gkhy.exam.system.mapper.ExPaperStudentMapper;
+import com.gkhy.exam.system.mapper.ExQuestionBankMapper;
import com.gkhy.exam.system.mapper.ExQuestionMapper;
import com.gkhy.exam.system.service.ExQuestionService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -41,11 +43,22 @@
private ExPaperStudentMapper paperStudentMapper;
@Autowired
private ExExamPaperMapper examPaperMapper;
+ @Autowired
+ private ExQuestionBankMapper questionBankMapper;
@Override
public CommonPage selectQuestionList(ExQuestion question) {
if(question.getBankId()==null){
throw new ApiException("题库id不能为空");
+ }
+ ExQuestionBank questionBank=questionBankMapper.selectById(question.getBankId());
+ if(!questionBank.getPrivatize().equals(PrivatizeEnum.PUBLIC.getCode())){
+ SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+ if(!currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ if(!question.getCompanyId().equals(currentUser.getCompanyId())){
+ throw new ApiException("无权限查看其它企业题目");
+ }
+ }
}
PageUtils.startPage();
List<ExQuestion> questionList=baseMapper.selectQuestionList(question);
@@ -54,18 +67,29 @@
@Override
public ExQuestion selectQuestionById(Long questionId) {
- return baseMapper.selectById(questionId);
+ ExQuestion question= baseMapper.selectById(questionId);
+ if(question.getPrivatize().equals(PrivatizeEnum.PUBLIC.getCode())){
+ return question;
+ }
+ SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return question;
+ }
+ if(!question.getCompanyId().equals(currentUser.getCompanyId())){
+ throw new ApiException("无权限查看其它企业题目");
+ }
+ return question;
}
@Override
public int insertQuestion(ExQuestion question) {
+ checkUserAllowed(question);
SysUser user= SecurityUtils.getLoginUser().getUser();
- if(user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ //公开的题库新增题目,题目也是公开
+ ExQuestionBank questionBank=questionBankMapper.selectById(question.getBankId());
+ if(user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())||questionBank.getPrivatize().equals(PrivatizeEnum.PUBLIC.getCode())){
question.setPrivatize(PrivatizeEnum.PUBLIC.getCode());
}else{
- if(user.getCompanyId()==null){
- throw new ApiException("获取用户公司id失败");
- }
question.setCompanyId(user.getCompanyId());
question.setPrivatize(PrivatizeEnum.PRIVATE.getCode());
}
@@ -80,6 +104,7 @@
@Override
public int updateQuestion(ExQuestion question) {
validData(question);
+ checkUserAllowed(question);
int row=baseMapper.updateById(question);
if(row<1){
throw new ApiException("编辑题目失败");
@@ -108,8 +133,22 @@
}
+ public void checkUserAllowed(ExQuestion question) {
+ SysUser currentUser= SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return;
+ }
+ if(currentUser.getUserType().equals(UserTypeEnum.STUDENT.getCode())){
+ throw new ApiException("没有权限操作");
+ }
+ if(!currentUser.getCompanyId().equals(question.getCompanyId())){
+ throw new ApiException("没有权限操作其他企业题目");
+ }
+ }
+
@Override
public int deleteQuestionById(Long questionId) {
+ checkUserAllowed(baseMapper.selectById(questionId));
return baseMapper.deleteById(questionId);
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExResourceServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExResourceServiceImpl.java
index 1defc76..52ebb5b 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExResourceServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExResourceServiceImpl.java
@@ -44,16 +44,46 @@
@Override
public ExResource selectResourceById(Long resourceId) {
- return baseMapper.selectResourceById(resourceId);
+ ExResource resource= baseMapper.selectResourceById(resourceId);
+ if(resource==null){
+ return resource;
+ }
+ if(resource.getPrivatize().equals(PrivatizeEnum.PUBLIC.getCode())){
+ return resource;
+ }
+ SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return resource;
+ }
+ if(!resource.getCompanyId().equals(currentUser.getCompanyId())){
+ throw new ApiException("无权限查看其它企业资源");
+ }
+ return resource;
}
@Override
public ExResource selectResourceByPeriodId(Long periodId) {
- return baseMapper.selectResourceByPeriodId(periodId);
+ ExResource resource= baseMapper.selectResourceByPeriodId(periodId);
+ if(resource==null){
+ return resource;
+ }
+ if(resource.getPrivatize().equals(PrivatizeEnum.PUBLIC.getCode())){
+ return resource;
+ }
+ SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return resource;
+ }
+ if(!resource.getCompanyId().equals(currentUser.getCompanyId())){
+ throw new ApiException("无权限查看其它企业资源");
+ }
+ return resource;
+
}
@Override
public int insertResource(ExResource resource) {
+ checkUserAllowed(resource);
if(!checkNameUnique(resource)){
throw new ApiException("资源名称已存在");
}
@@ -61,11 +91,7 @@
if(user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
resource.setPrivatize(PrivatizeEnum.PUBLIC.getCode());
}else{
- if(user.getCompanyId()==null){
- throw new ApiException("获取用户公司id失败");
- }
resource.setCompanyId(user.getCompanyId());
- resource.setPrivatize(PrivatizeEnum.PRIVATE.getCode());
}
UploadObjectVO uploadObjectVO =commonService.doUpload(resource.getFile());
resource.setResourceUri(uploadObjectVO.getPath());
@@ -87,6 +113,7 @@
@Override
public int updateResource(ExResource resource) {
+ checkUserAllowed(resource);
if(!checkNameUnique(resource)){
throw new ApiException("资源名称已存在");
}
@@ -97,9 +124,23 @@
return row;
}
+ public void checkUserAllowed(ExResource resource) {
+ SysUser currentUser= SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return;
+ }
+ if(currentUser.getUserType().equals(UserTypeEnum.STUDENT.getCode())){
+ throw new ApiException("没有权限操作");
+ }
+ if(!currentUser.getCompanyId().equals(resource.getCompanyId())){
+ throw new ApiException("没有权限操作其他企业资源");
+ }
+ }
+
@Override
public int deleteResourceById(Long resourceId) {
//校验资源是否绑定
+ checkUserAllowed(baseMapper.selectById(resourceId));
ExResource resource=getById(resourceId);
int row=baseMapper.deleteById(resourceId);
if(row<1){
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStatisticServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStatisticServiceImpl.java
new file mode 100644
index 0000000..14ae8db
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStatisticServiceImpl.java
@@ -0,0 +1,108 @@
+package com.gkhy.exam.system.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.domain.entity.SysUser;
+import com.gkhy.exam.common.enums.PhaseLevelEnum;
+import com.gkhy.exam.common.enums.UserTypeEnum;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.SysCompany;
+import com.gkhy.exam.system.domain.vo.CompanyPaperStudentVO;
+import com.gkhy.exam.system.domain.vo.CompanyPhaseStudentVO;
+import com.gkhy.exam.system.domain.vo.CompanyPhaseVO;
+import com.gkhy.exam.system.domain.vo.CompanyStatisticVO;
+import com.gkhy.exam.system.mapper.SysCompanyMapper;
+import com.gkhy.exam.system.service.ExStatisticService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class ExStatisticServiceImpl implements ExStatisticService {
+ @Autowired
+ private SysCompanyMapper companyMapper;
+ @Override
+ public CommonPage companyStatic(Long companyId, Date startTime, Date endTime,Integer type) {
+ SysUser user= SecurityUtils.getLoginUser().getUser();
+ if(!user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ companyId=user.getCompanyId();
+ }
+ PageUtils.startPage();
+ List<SysCompany> companyList=companyMapper.selectCompanyList(new SysCompany().setId(companyId));
+ CommonPage commonPage= CommonPage.restPage(companyList);
+ List<CompanyStatisticVO>companyStatisticVOList=staticData(companyList, DateUtil.formatDateTime(DateUtil.beginOfDay(startTime)),DateUtil.formatDateTime(DateUtil.endOfDay(endTime)),type);
+ commonPage.setList(companyStatisticVOList);
+ return commonPage;
+ }
+
+ public List<CompanyStatisticVO> staticData(List<SysCompany> companyList,String startTime,String endTime,Integer type){
+ List<Long> companyIds=companyList.stream().map(item -> item.getId()).collect(Collectors.toList());
+
+ List<CompanyPhaseVO> companyPhaseVOList=null;
+ if(type==1) {
+ companyPhaseVOList=companyMapper.getOnlineCompanyPhaseCount(companyIds, startTime, endTime);
+ }else{
+ companyPhaseVOList=companyMapper.getOfflineCompanyPhaseCount(companyIds, startTime, endTime);
+ }
+ Map<Long,List<CompanyPhaseVO>> companyPhaseVOMap=companyPhaseVOList.stream().collect(Collectors.groupingBy(CompanyPhaseVO::getCompanyId, LinkedHashMap::new,Collectors.toList()));
+ List<CompanyPhaseStudentVO> companyPhaseStudentVOList=null;
+ if(type==1) {
+ companyPhaseStudentVOList=companyMapper.getOnlineCompanyPhaseStudentCount(companyIds, startTime, endTime);
+ }else{
+ companyPhaseStudentVOList=companyMapper.getOfflineCompanyPhaseStudentCount(companyIds, startTime, endTime);
+ }
+ Map<Long,List<CompanyPhaseStudentVO>> companyPhaseStudentVOMap=companyPhaseStudentVOList.stream().collect(Collectors.groupingBy(CompanyPhaseStudentVO::getCompanyId,LinkedHashMap::new,Collectors.toList()));
+
+ List<CompanyPaperStudentVO> companyPaperStudentVOList=null;
+ if(type==1) {
+ companyPaperStudentVOList=companyMapper.getOnlineCompanyPaperStudentCount(companyIds, startTime, endTime);
+ }else{
+ companyPaperStudentVOList=companyMapper.getOfflineCompanyPaperStudentCount(companyIds, startTime, endTime);
+ }
+ Map<Long,CompanyPaperStudentVO> companyPaperStudentVOMap=companyPaperStudentVOList.stream().collect(Collectors.toMap(CompanyPaperStudentVO::getCompanyId,a ->a));
+ List<CompanyStatisticVO> companyStatisticVOList=companyList.stream().map(item -> {
+ CompanyStatisticVO companyStatisticVO=new CompanyStatisticVO();
+ companyStatisticVO.setCompanyId(item.getId());
+ companyStatisticVO.setCompanyName(item.getName());
+ List<CompanyPhaseVO> companyPhaseVOs=companyPhaseVOMap.get(item.getId());
+ if(companyPhaseVOs!=null&&companyPhaseVOs.size()>0){
+ companyPhaseVOs.forEach(cp -> {
+ if(cp.getLevel().equals(PhaseLevelEnum.COMPANY)){
+ companyStatisticVO.setLevel1PhaseCount(cp.getPhaseCount());
+ }else if(cp.getLevel().equals(PhaseLevelEnum.DEPART)){
+ companyStatisticVO.setLevel2PhaseCount(cp.getPhaseCount());
+ }else if(cp.getLevel().equals(PhaseLevelEnum.WORkSHOP)) {
+ companyStatisticVO.setLevel3PhaseCount(cp.getPhaseCount());
+ }
+ });
+ companyStatisticVO.setPhaseCount(companyPhaseVOs.stream().mapToInt(CompanyPhaseVO::getPhaseCount).sum());
+ }
+ List<CompanyPhaseStudentVO> companyPhaseStudentVOs=companyPhaseStudentVOMap.get(item.getId());
+ if(companyPhaseStudentVOs!=null&&companyPhaseStudentVOs.size()>0){
+ companyPhaseStudentVOs.forEach(cp -> {
+ if(cp.getLevel().equals(PhaseLevelEnum.COMPANY)){
+ companyStatisticVO.setLevel1StudentCount(cp.getPhaseStudentCount());
+ }else if(cp.getLevel().equals(PhaseLevelEnum.DEPART)){
+ companyStatisticVO.setLevel2StudentCount(cp.getPhaseStudentCount());
+ }else if(cp.getLevel().equals(PhaseLevelEnum.WORkSHOP)) {
+ companyStatisticVO.setLevel3StudentCount(cp.getPhaseStudentCount());
+ }
+ });
+ companyStatisticVO.setPhaseStudentCount(companyPhaseStudentVOs.stream().mapToInt(CompanyPhaseStudentVO::getPhaseStudentCount).sum());
+ }
+ CompanyPaperStudentVO companyPaperStudentVO=companyPaperStudentVOMap.get(item.getId());
+ if(companyPaperStudentVO!=null){
+ companyStatisticVO.setPaperStudentCount(companyPaperStudentVO.getPaperStudentCount());
+ companyStatisticVO.setPassStudentCount(companyPaperStudentVO.getPassStudentCount());
+ }
+ return companyStatisticVO;
+ }).collect(Collectors.toList());
+ return companyStatisticVOList;
+ }
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStudentServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStudentServiceImpl.java
index 6b6b60e..67ca293 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStudentServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/ExStudentServiceImpl.java
@@ -69,15 +69,22 @@
@Override
public ExStudent selectStudentById(Long studentId) {
- return baseMapper.selectStudentById(studentId);
+ ExStudent student= baseMapper.selectStudentById(studentId);
+ SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ return student;
+ }
+ if(!student.getCompanyId().equals(currentUser.getCompanyId())){
+ throw new ApiException("无权限查看其它企业学员");
+ }
+ return student;
+
}
@Override
public int insertStudent(ExStudent student) {
SysUser currentUser= SecurityUtils.getLoginUser().getUser();
- if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
- throw new ApiException("系统管理员不能新增学员");
- }
+ checkUserAllowed(student);
if(!checkPhoneUnique(student)){
throw new ApiException("手机号已存在");
}
@@ -94,6 +101,7 @@
@Override
public int updateStudent(ExStudent student) {
+ checkUserAllowed(student);
if(!checkPhoneUnique(student)){
throw new ApiException("手机号已存在");
}
@@ -112,6 +120,7 @@
@Override
public int deleteStudentById(Long studentId) {
ExStudent existStudent=checkUserDataScope(studentId);
+ checkUserAllowed(existStudent);
int row=baseMapper.deleteByStudentId(studentId);
if(row<0){
throw new ApiException("删除学员失败");
@@ -153,6 +162,7 @@
@Override
public boolean resetUserPwd(ExStudent student) {
ExStudent existStudent=getById(student.getId());
+ checkUserAllowed(existStudent);
ExStudent su=new ExStudent().setId(student.getId()).setPassword(SecurityUtils.encryptPassword(Base64.decodeStr(student.getPassword())));
su.setUpdateBy(SecurityUtils.getUsername());
delCacheByPhone(existStudent.getPhone());
@@ -170,4 +180,18 @@
}
return student;
}
+
+ public void checkUserAllowed(ExStudent student) {
+ SysUser currentUser= SecurityUtils.getLoginUser().getUser();
+ if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
+ throw new ApiException("系统管理员没有权限操作");
+ }
+ if(currentUser.getUserType().equals(UserTypeEnum.STUDENT.getCode())){
+ throw new ApiException("没有权限操作");
+ }
+ if(!currentUser.getCompanyId().equals(student.getCompanyId())){
+ throw new ApiException("没有权限操作其他企业学员");
+ }
+ }
+
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java
index c09d109..0ccb5d1 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java
@@ -1,23 +1,45 @@
package com.gkhy.exam.system.service.impl;
import cn.hutool.core.date.DateUtil;
+import com.gkhy.exam.common.config.FilePathConfig;
import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.M3u8Utils;
+import com.gkhy.exam.common.utils.MinioUtils;
import com.gkhy.exam.system.domain.vo.UploadObjectVO;
import com.gkhy.exam.system.service.SysCommonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
import java.io.*;
-import java.util.Date;
-import java.util.UUID;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.concurrent.CountDownLatch;
@Service
+@Slf4j
public class SysCommonServiceImpl implements SysCommonService {
@Value("${image.upload_image}")
private String uploadPath;
+ @Autowired
+ private M3u8Utils m3u8Utils;
+ @Autowired
+ private MinioUtils minioUtils;
+ @Resource
+ private FilePathConfig filePath;
+
+ @Resource(name = "threadPoolTaskExecutor")
+ private ThreadPoolTaskExecutor poolTaskExecutor;
+
+ String projectUrl = System.getProperty("user.dir").replaceAll("\\\\", "/");
@Override
public UploadObjectVO uploadFile(MultipartFile file) {
@@ -44,6 +66,93 @@
}
@Override
+ public String uploadVideo2M3u8(MultipartFile file) throws Exception {
+ String path=m3u8Utils.mediaFileToM3u8(file);
+ return upload2M3u8(path);
+ }
+
+
+ /**
+ * 上传转码后得视频至OSS或minIOn
+ * @param path
+ * @return 路径
+ * @throws Exception
+ */
+ public String upload2M3u8(String path) throws Exception {
+ //存储转码后文件
+ String realPath = path.substring(0, path.lastIndexOf("/"));
+ log.info("视频解析后的 realPath {}", realPath);
+ String name = path.substring(path.lastIndexOf("/") + 1);
+ log.info("解析后视频 name {}", name);
+ File allFile = new File(realPath);
+ File[] files = allFile.listFiles();
+ if (null == files || files.length == 0) {
+ return null;
+ }
+ String patch = DateUtil.format(LocalDateTime.now(), "yyyy/MM/") + name.substring(0, name.lastIndexOf(".")) + "/";
+ List<File> errorFile = new ArrayList<>();
+
+ long start = System.currentTimeMillis();
+// //替换m3u8文件中的路径
+// FileUtil.replaceTextContent(path, name.substring(0, name.lastIndexOf(".")),
+// aliOssProperties.getMyHostUrl() + filePath.getProxy() + patch +
+// name.substring(0, name.lastIndexOf(".")));
+ //开始上传
+ CountDownLatch countDownLatch = new CountDownLatch(files.length);
+ Arrays.stream(files).forEach(li -> poolTaskExecutor.execute(() -> {
+ try (FileInputStream fileInputStream = new FileInputStream(li)) {
+ minioUtils.fileUploader(patch + li.getName(), fileInputStream);
+
+ log.info("文件:{} 正在上传", li.getName());
+ } catch (Exception e) {
+ errorFile.add(li);
+ e.printStackTrace();
+ } finally {
+ countDownLatch.countDown();
+ }
+ }));
+ countDownLatch.await();
+ long end = System.currentTimeMillis();
+ log.info("解析文件上传成功,共计:{} 个文件,失败:{},共耗时: {}ms", files.length, errorFile.size(), end - start);
+ // try {
+ // minioComponent.mkBucket("m3u8");
+ // } catch (Exception e) {
+ // log.error("创建Bucket失败!");
+ // }
+
+ //异步移除所有文件
+ poolTaskExecutor.execute(() -> {
+ deleteFile(projectUrl+filePath.getTempPath());
+ });
+ if (CollectionUtils.isEmpty(errorFile)) {
+ return filePath.getProxy() + patch + name;
+ }
+ return "";
+ }
+
+ public static void deleteFile(String path){
+ File dest = new File(path);
+ if (dest.isFile() && dest.exists()) {
+ dest.delete();
+ }
+ }
+
+ @Override
+ public boolean uploadSlice(HttpServletRequest request, String guid, Integer chunk, MultipartFile file) {
+ return false;
+ }
+
+ @Override
+ public String uploadVideoMerge(String guid, String fileName) {
+ return null;
+ }
+
+ @Override
+ public String uploadMerge(String guid, String fileName) {
+ return null;
+ }
+
+ @Override
public UploadObjectVO doUpload(MultipartFile file){
String originName=file.getOriginalFilename();
String filename=originName;
diff --git a/exam-system/src/main/resources/mapper/system/ExExamPaperMapper.xml b/exam-system/src/main/resources/mapper/system/ExExamPaperMapper.xml
index 0725ae9..0daa0aa 100644
--- a/exam-system/src/main/resources/mapper/system/ExExamPaperMapper.xml
+++ b/exam-system/src/main/resources/mapper/system/ExExamPaperMapper.xml
@@ -50,6 +50,7 @@
update ex_exam_paper set del_flag=1 where id=#{paperId}
</update>
+
<select id="selectExamPaperList" resultMap="ExamPaperResult">
<include refid="selectExamPaperVo"/>
<where>
diff --git a/exam-system/src/main/resources/mapper/system/ExExamRecordMapper.xml b/exam-system/src/main/resources/mapper/system/ExExamRecordMapper.xml
new file mode 100644
index 0000000..5f2e6c0
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/system/ExExamRecordMapper.xml
@@ -0,0 +1,48 @@
+<?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.gkhy.exam.system.mapper.ExExamRecordMapper">
+ <resultMap type="com.gkhy.exam.system.domain.ExExamRecord" id="ExamRecordResult">
+ <result property="id" column="id" />
+ <result property="companyId" column="company_id" />
+ <result property="studentId" column="student_id" />
+ <result property="planName" column="plan_name" />
+ <result property="courseName" column="course_name" />
+ <result property="level" column="level" />
+ <result property="period" column="period" />
+ <result property="actualPeriod" column="actual_period" />
+ <result property="score" column="score" />
+ <result property="companyId" column="company_id" />
+ <result property="passed" column="passed" />
+ <result property="createBy" column="create_by" />
+ <result property="createTime" column="create_time" />
+ <result property="updateBy" column="update_by" />
+ <result property="updateTime" column="update_time" />
+ <result property="remark" column="remark" />
+ <result property="companyName" column="company_name" />
+ </resultMap>
+
+ <sql id="selectExamRecordVo">
+ select a.id, a.company_id, a.student_id, a.plan_name, a.course_name,a.level,a.period,a.actual_period,a.score,
+ a.company_id,a.passed, a.create_by, a.create_time, a.update_by, a.update_time, a.remark,b.name as company_name
+ from ex_exam_record a
+ left join sys_company b on b.id=a.company_id
+ </sql>
+
+ <select id="selectExamRecordList" resultMap="ExamRecordResult">
+ <include refid="selectExamRecordVo"/>
+ <where>
+ <if test="planName != null and planName != ''">
+ AND a.plan_name like concat('%', #{planName}, '%')
+ </if>
+ <if test="companyId != null ">
+ AND a.company_id =#{companyId}
+ </if>
+ </where>
+ order by a.id desc
+ </select>
+
+ <select id="selectExamRecordById" resultMap="ExamRecordResult">
+ <include refid="selectExamRecordVo"/>
+ where a.id=#{recordId}
+ </select>
+</mapper>
diff --git a/exam-system/src/main/resources/mapper/system/ExPaperStudentMapper.xml b/exam-system/src/main/resources/mapper/system/ExPaperStudentMapper.xml
index a6b49c8..d87acb8 100644
--- a/exam-system/src/main/resources/mapper/system/ExPaperStudentMapper.xml
+++ b/exam-system/src/main/resources/mapper/system/ExPaperStudentMapper.xml
@@ -57,6 +57,7 @@
left join ex_student b on a.student_id=b.id
left join ex_exam_paper c on c.id=a.paper_id
<where>
+ and c.del_flag=0
<if test="paperId!=null'">
and a.paper_id=#{paperId}
</if>
diff --git a/exam-system/src/main/resources/mapper/system/SysCompanyMapper.xml b/exam-system/src/main/resources/mapper/system/SysCompanyMapper.xml
index 75babe2..bf14ee4 100644
--- a/exam-system/src/main/resources/mapper/system/SysCompanyMapper.xml
+++ b/exam-system/src/main/resources/mapper/system/SysCompanyMapper.xml
@@ -34,8 +34,11 @@
<if test="creditCode != null and creditCode != ''">
AND credit_code like concat('%', #{creditCode}, '%')
</if>
+ <if test="id!=null">
+ AND id=#{id}
+ </if>
</where>
- order by create_time desc
+ order by id desc
</select>
<select id="selectCompanyById" resultMap="SysCompanyResult">
@@ -52,4 +55,101 @@
<select id="checkNameUnique" resultMap="SysCompanyResult">
select id,name from sys_company where name=#{name} and del_flag=0 limit 1
</select>
+
+ <select id="getOnlineCompanyPhaseCount" resultType="com.gkhy.exam.system.domain.vo.CompanyPhaseVO">
+ select count(a.id) as phase_count,a.level,a.company_id from ex_course_phase a
+ inner join sys_company b on b.id=a.company_id
+ where a.del_flag=0 and b.del_flag=0 and a.company_id in
+ <foreach collection="companyIds" item="companyId" open="(" separator="," close=")">
+ #{companyId}
+ </foreach>
+ <if test="startTime!=null and startTime!=''">
+ and a.create_time >= #{startTime}
+ </if>
+ <if test="endTime!=null and endTime!=''">
+ and a.create_time <= #{endTime}
+ </if>
+ group by a.company_id,a.level
+ </select>
+
+ <select id="getOnlineCompanyPhaseStudentCount" resultType="com.gkhy.exam.system.domain.vo.CompanyPhaseStudentVO">
+ select count(1) as phase_student_count,b.company_id,b.level from ex_phase_student a
+ inner join ex_course_phase b on b.id=a.phase_id
+ where b.del_flag=0 and b.company_id in
+ <foreach collection="companyIds" item="companyId" open="(" separator="," close=")">
+ #{companyId}
+ </foreach>
+ <if test="startTime!=null and startTime!=''">
+ and b.create_time >= #{startTime}
+ </if>
+ <if test="endTime!=null and endTime!=''">
+ and b.create_time <= #{endTime}
+ </if>
+ group by b.company_id,b.level
+ </select>
+
+ <select id="getOnlineCompanyPaperStudentCount" resultType="com.gkhy.exam.system.domain.vo.CompanyPaperStudentVO">
+ select count(a.id) as paper_student_count,sum(a.passed) as pass_student_count,b.company_id from ex_paper_student a
+ inner join ex_exam_paper b on b.id=a.paper_id
+ where b.del_flag=0 and b.company_id in
+ <foreach collection="companyIds" item="companyId" open="(" separator="," close=")">
+ #{companyId}
+ </foreach>
+ <if test="startTime!=null and startTime!=''">
+ and b.create_time >= #{startTime}
+ </if>
+ <if test="endTime!=null and endTime!=''">
+ and b.create_time <= #{endTime}
+ </if>
+ group by b.company_id
+ </select>
+
+ <select id="getOfflineCompanyPhaseCount" resultType="com.gkhy.exam.system.domain.vo.CompanyPhaseVO">
+ select count(f.plan_name)as phase_count,f.company_id,f.level from (
+ select a.plan_name,a.company_id,a.level from ex_exam_record a
+ inner join sys_company b on b.id=a.company_id
+ where b.del_flag=0 and a.company_id in
+ <foreach collection="companyIds" item="companyId" open="(" separator="," close=")">
+ #{companyId}
+ </foreach>
+ <if test="startTime!=null and startTime!=''">
+ and a.create_time >= #{startTime}
+ </if>
+ <if test="endTime!=null and endTime!=''">
+ and a.create_time <= #{endTime}
+ </if>
+ group by a.company_id,a.level,a.plan_name
+ ) as f group by f.company_id,f.level
+ </select>
+ <select id="getOfflineCompanyPhaseStudentCount" resultType="com.gkhy.exam.system.domain.vo.CompanyPhaseStudentVO">
+ select count(1) as phase_student_count,b.company_id,b.level from ex_exam_record a
+ inner join sys_company b on b.id=a.company_id
+ where b.del_flag=0 and a.company_id in
+ <foreach collection="companyIds" item="companyId" open="(" separator="," close=")">
+ #{companyId}
+ </foreach>
+ <if test="startTime!=null and startTime!=''">
+ and a.create_time >= #{startTime}
+ </if>
+ <if test="endTime!=null and endTime!=''">
+ and a.create_time <= #{endTime}
+ </if>
+ group by a.company_id,a.level
+ </select>
+
+ <select id="getOfflineCompanyPaperStudentCount" resultType="com.gkhy.exam.system.domain.vo.CompanyPaperStudentVO">
+ select count(a.id) as paper_student_count,sum(a.passed) as pass_student_count,a.company_id from ex_exam_record a
+ inner join sys_company b on b.id=a.paper_id
+ where b.del_flag=0 and score is not null and a.company_id in
+ <foreach collection="companyIds" item="companyId" open="(" separator="," close=")">
+ #{companyId}
+ </foreach>
+ <if test="startTime!=null and startTime!=''">
+ and a.create_time >= #{startTime}
+ </if>
+ <if test="endTime!=null and endTime!=''">
+ and a.create_time <= #{endTime}
+ </if>
+ group by a.company_id
+ </select>
</mapper>
diff --git a/exam-system/src/test/java/com/gkhy/exam/system/MybatisPlusGenerator.java b/exam-system/src/test/java/com/gkhy/exam/system/MybatisPlusGenerator.java
index 9174c19..dd1fc3c 100644
--- a/exam-system/src/test/java/com/gkhy/exam/system/MybatisPlusGenerator.java
+++ b/exam-system/src/test/java/com/gkhy/exam/system/MybatisPlusGenerator.java
@@ -16,7 +16,7 @@
String model="/exam-system";
// 数据库配置
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig
- .Builder("jdbc:mysql://192.168.0.23:7006/train_exam" +
+ .Builder("jdbc:mysql://192.168.2.16:7006/train_exam" +
"?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"
, "root", "2farwL3yPXfbH2AP");
FastAutoGenerator.create(dataSourceConfigBuilder)
diff --git a/pom.xml b/pom.xml
index dbf324c..6a9fdca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,7 @@
<minio.version>8.4.5</minio.version>
<kaptcha.version>2.3.3</kaptcha.version>
<bitwalker.version>1.21</bitwalker.version>
+ <ffmpeg.version>0.7.0</ffmpeg.version>
</properties>
<dependencyManagement>
<dependencies>
@@ -69,7 +70,6 @@
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
-
</dependency>
<!--Hutool Java工具包-->
<dependency>
@@ -151,6 +151,12 @@
<version>${bitwalker.version}</version>
</dependency>
+ <dependency>
+ <groupId>net.bramp.ffmpeg</groupId>
+ <artifactId>ffmpeg</artifactId>
+ <version>${ffmpeg.version}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
--
Gitblit v1.9.2