@@ -23,8 +23,6 @@ import pc.exam.pp.module.exam.dal.mysql.paper.EducationPaperSessionMapper;
import pc.exam.pp.module.exam.dal.mysql.question.ExamQuestionMapper ;
import pc.exam.pp.module.exam.dal.mysql.student.StuScoreVo ;
import pc.exam.pp.module.exam.service.paper.IEducationPaperParamService ;
import pc.exam.pp.module.exam.service.paper.IEducationPaperSessionService ;
import pc.exam.pp.module.exam.service.paper.IEducationPaperTaskService ;
import pc.exam.pp.module.exam.service.stuPaperScore.StuPaperScoreService ;
import pc.exam.pp.module.judgement.controller.admin.autoTools.vo.StuInTheExam ;
import pc.exam.pp.module.judgement.controller.admin.autoTools.vo.StuPaperReqVo ;
@@ -79,7 +77,7 @@ public class AutoToolsController {
StuScoreVo stuScoreVo = stuPaperScoreService . getStuScore ( stuPaperReqVo . getStuId ( ) , stuPaperReqVo . getPaperId ( ) ) ;
stuPaperScoreInfoVos . setStuInfoReqVo ( stuScoreVo ) ;
// 3、查询学生试卷得分信息
stuPaperScoreInfoVos . setStuPaperScoreDOList ( stuPaperScoreService . findByStuIDAndPaperId ( stuPaperReqVo . getStuId ( ) , stuPaperReqVo . getPaperId ( ) ) ) ;
stuPaperScoreInfoVos . setStuPaperScoreDOList ( stuPaperScoreService . findByStuIDAndPaperId ( stuPaperReqVo . getStuId ( ) , stuPaperReqVo . getPaperId ( ) , stuPaperReqVo . getTemporaryId ( ) )) ;
// 4、查询学生试卷内容信息
List < String > quIds = educationPaperQuMapper . selectPaperQuByPaperId ( stuPaperReqVo . getPaperId ( ) ) ;
List < ExamQuestion > examQuestionList = examQuestionMapper . selectExamQuestionListByQuIds ( quIds ) ;
@@ -92,7 +90,7 @@ public class AutoToolsController {
// 一条一条进行查询试题,防止顺序错乱
stuPaperScoreInfoVos . setExamQuestionList ( examQuestionList ) ;
// 5、查询学生试卷分析
List < StuPaperScoreDO > scoreDOS = stuPaperScoreService . findByStuIDAndPaperId ( stuPaperReqVo . getStuId ( ) , stuPaperReqVo . getPaperId ( ) ) ;
List < StuPaperScoreDO > scoreDOS = stuPaperScoreService . findByStuIDAndPaperId ( stuPaperReqVo . getStuId ( ) , stuPaperReqVo . getPaperId ( ) , stuPaperReqVo . getTemporaryId ( ) );
String judgementStr = " <p>试卷分析</p> " ;
for ( StuPaperScoreDO scoreDO : scoreDOS ) {
judgementStr + = " <p>---------------------------------------</p> " ;
@@ -111,66 +109,69 @@ public class AutoToolsController {
public CommonResult < String > startExam ( @RequestBody StuInTheExam stuInTheExam ) {
HttpServletRequest request = ServletUtils . getRequest ( ) ;
// 获取登录token
String token = SecurityFrameworkUtils . obtainAuthorization ( request ,
securityProperties . getTokenHeader ( ) , securityProperties . getTokenParameter ( ) ) ;
// 获取登录用户
LoginUser loginUser = S ecurityFrameworkU til s. getLoginUs er ( ) ;
// 通过token获取用户redis信息, 获取refreshToken
OAuth2AccessTokenDO oAuth2AccessTokenDO = JsonUtils . parseObject ( stringRedisTemplate . opsForValue ( ) . get ( " oauth2_access_token: " + token ) , OAuth2AccessTokenDO . class ) ;
int startTime = 0 ;
if ( oAuth2AccessTokenDO ! = null ) {
Str ing refreshToken = oAuth2AccessTokenDO . getRefreshToken ( ) ;
// 查找对应的task
EducationPaperParam educationPaperParam = educationPaperParamService . selectEducationPaperParamByTaskId ( stuInTheExam . getTaskId ( ) ) ;
String isSession = educationPaperParam . getIsSession ( ) ;
if ( isSession . equals ( " 0 " ) ) {
// 设置了场次
// 剩余时间需要继续计算
EducationPaperPerson educationPaperPerson = educationPaperPersonMapper . selectByTaskIdAndPersonId ( stuInTheExam . getTaskId ( ) , String . valueOf ( loginUser . getId ( ) ) ) ;
EducationPaperSession educationPaperSession = educationPaperSessionMapper . selectEducationPaperSessionBySessionId ( educationPaperPerson . getSessionId ( ) ) ;
//结束时间
Date endTime = educationPaperSession . getEndTime ( ) ;
Date nowTime = new Date ( ) ;
// 将 Date 转换为 Instant
Instant endInstant = endTime . toInstant ( ) ;
Instant nowInstant = nowTime . toInstant ( ) ;
// 计算秒数差
long diffInSeconds = Duration . between ( nowInstant , endInstant ) . getSeconds ( ) ;
startTime = ( int ) diffInSeconds ;
} else {
// 没有设置场次
// 剩余时间直接读取数据
String isTime = educationPaperParam . getIsTime ( ) ;
if ( isTime . equals ( " 0 " ) ) {
// 设置了时间
// 剩余时间直接读取数据
long seconds = educationPaperParam . getExamTime ( ) . toLocalTime ( ) . toSecondOfDay ( ) ;
startTime = ( int ) seconds ;
String token = null ;
if ( request ! = null ) {
token = SecurityFrameworkUtils . obtainAuthorization ( request ,
securityProperties . getTokenHeader ( ) , s ecurityProper tie s. getTokenParamet er ( ) ) ;
// 获取登录用户
LoginUser loginUser = SecurityFrameworkUtils . getLoginUser ( ) ;
// 通过token获取用户redis信息, 获取refreshToken
OAuth2AccessTokenDO oAuth2AccessTokenDO = JsonUtils . parseObject ( stringRedisTemplate . opsForValue ( ) . get ( " oauth2_access_token: " + token ) , OAuth2AccessTokenDO . class ) ;
int startTime = 0 ;
if ( oAuth2AccessTokenDO ! = null ) {
String refreshToken = oAuth2AccessTokenDO . getRefreshToken ( ) ;
// 查找对应的task
EducationPaperParam educationPaperParam = educationPaperParamService . selectEducationPaperParamByTaskId ( stuInTheExam . getTaskId ( ) ) ;
String isSession = educationPaperParam . getIsSession ( ) ;
if ( isSession . equals ( " 0 " ) ) {
// 设置了场次
// 剩余时间需要继续计算
EducationPaperPerson educationPaperPerson = educationPaperPersonMapper . selectByTaskIdAndPersonId ( stuInTheExam . getTaskId ( ) , String . valueOf ( loginUser . getId ( ) ) ) ;
EducationPaperSession educationPaperSession = educationPaperSessionMapper . selectEducationPaperSessionBySessionId ( educationPaperPerson . getSessionId ( ) ) ;
//结束时间
Date endTime = educationPaperSession . getEndTime ( ) ;
Date nowTime = new Date ( ) ;
// 将 Date 转换为 Instant
Instant endInstant = endTime . toInstant ( ) ;
Instant nowInstant = nowTime . toInstant ( ) ;
// 计算秒数差
long diffInSeconds = Duration . between ( nowInstant , endInstant ) . getSeconds ( ) ;
startTime = ( int ) diffInSeconds ;
} else {
// 没有设置时间 默认1小时 = 3600秒
startTime = 3600 ;
// 没有设置场次
// 剩余时间直接读取数据
String isTime = educationPaperParam . getIsTime ( ) ;
if ( isTime . equals ( " 0 " ) ) {
// 设置了时间
// 剩余时间直接读取数据
long seconds = educationPaperParam . getExamTime ( ) . toLocalTime ( ) . toSecondOfDay ( ) ;
startTime = ( int ) seconds ;
} else {
// 没有设置时间 默认1小时 = 3600秒
startTime = 3600 ;
}
}
// 判断是否存在对应的场次
// 定时上传文件时间
String time = educationPaperParam . getUploadTime ( ) ;
// 将分钟继续转换成秒
stuInTheExam . setTimes ( Integer . parseInt ( time ) * 60 ) ;
// 倒计时
AtomicInteger countdown = new AtomicInteger ( startTime ) ;
// 创建初始返回数据
StuTheExamInfo stuTheExamInfo = new StuTheExamInfo ( ) ;
// 返回数据-剩余时间
stuTheExamInfo . setTime ( formatLongDuration ( countdown . get ( ) ) ) ;
// 返回数据-上传文件状态 0: 上传; 1: 不上传
stuTheExamInfo . setUpload ( 1 ) ;
// 返回数据-上传文件状态 0: 结束; 1: 不结束
stuTheExamInfo . setEndStatus ( 1 ) ;
// 返回数据-网络状态
stuTheExamInfo . setNetwork ( " 强 " ) ;
// 创建对应的线程池
taskManager . startTask ( stuInTheExam , stuTheExamInfo , refreshToken , countdown , new AtomicInteger ( 0 ) ) ;
return CommonResult . success ( refreshToken ) ;
}
// 判断是否存在对应的场次
// 定时上传文件时间
String time = educationPaperParam . getUploadTime ( ) ;
// 将分钟继续转换成秒
stuInTheExam . setTimes ( Integer . parseInt ( time ) * 60 ) ;
// 倒计时
AtomicInteger countdown = new AtomicInteger ( startTime ) ;
// 创建初始返回数据
StuTheExamInfo stuTheExamInfo = new StuTheExamInfo ( ) ;
// 返回数据-剩余时间
stuTheExamInfo . setTime ( formatLongDuration ( countdown . get ( ) ) ) ;
// 返回数据-上传文件状态 0: 上传; 1: 不上传
stuTheExamInfo . setUpload ( 1 ) ;
// 返回数据-上传文件状态 0: 结束; 1: 不结束
stuTheExamInfo . setEndStatus ( 1 ) ;
// 返回数据-网络状态
stuTheExamInfo . setNetwork ( " 强 " ) ;
// 创建对应的线程池
taskManager . startTask ( stuInTheExam , stuTheExamInfo , refreshToken , countdown , new AtomicInteger ( 0 ) ) ;
return CommonResult . success ( refreshToken ) ;
}
return CommonResult . success ( " 未登录 " ) ;
}
@@ -182,14 +183,17 @@ public class AutoToolsController {
@GetMapping ( " /stopExam " )
public CommonResult < Boolean > stopExam ( ) {
HttpServletRequest request = ServletUtils . getRequest ( ) ;
String token = SecurityFrameworkUtils . obtainAuthorization ( request ,
securityProperties . getTokenHeader ( ) , securityProperties . getTokenParameter ( ) ) ;
OAuth2AccessTokenDO oAuth2AccessT okenDO = JsonUtils . parseObject ( stringRedisTemplate . opsForValue ( ) . get ( " oauth2_access_token: " + token ) , OAuth2AccessTokenDO . class ) ;
if ( oAuth2AccessTokenDO ! = null ) {
// 删除对应的线程池
String refreshToken = oAuth2AccessTokenDO . getRefreshToken ( ) ;
taskManager . stopTask ( refreshToken ) ;
return CommonResult . success ( true ) ;
String token = null ;
if ( request ! = null ) {
t oken = SecurityFrameworkUtils . obtainAuthorization ( request ,
securityProperties . getTokenHeader ( ) , securityProperties . getTokenParameter ( ) ) ;
OAuth2AccessTokenDO oAuth2AccessTokenDO = JsonUtils . parseObject ( stringRedisTemplate . opsForValue ( ) . get ( " oauth2_access_token: " + token ) , OAuth2AccessTokenDO . class ) ;
if ( oAuth2AccessTokenDO ! = null ) {
// 删除对应的线程池
String refreshToken = oAuth2AccessTokenDO . getRefreshToken ( ) ;
taskManager . stopTask ( refreshToken ) ;
return CommonResult . success ( true ) ;
}
}
return CommonResult . success ( false ) ;
}
@@ -199,6 +203,6 @@ public class AutoToolsController {
int minutes = ( totalSeconds % 3600 ) / 60 ;
int seconds = totalSeconds % 60 ;
return String . format ( " %d:%02d:%02d " , hours , minutes , seconds ) ;
return String . format ( " %02 d:%02d:%02d " , hours , minutes , seconds ) ;
}
}