【修改】 ws连接方式,新增自动判断剩余时间
This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
package pc.exam.pp.module.exam.dal.dataobject.monitor;
|
package pc.exam.pp.module.exam.dal.dataobject.monitor;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import pc.exam.pp.framework.mybatis.core.dataobject.BaseDO;
|
import pc.exam.pp.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
@@ -22,49 +25,49 @@ import pc.exam.pp.framework.mybatis.core.dataobject.BaseDO;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class MonitorDO extends BaseDO {
|
public class MonitorDO extends BaseDO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主键id
|
* 主键id
|
||||||
*/
|
*/
|
||||||
@TableId(type = IdType.INPUT)
|
@TableId(type = IdType.INPUT)
|
||||||
private String monitorId;
|
private String monitorId;
|
||||||
|
|
||||||
private String stuId;
|
private String stuId;
|
||||||
/**
|
/**
|
||||||
* 用户账号
|
* 用户账号
|
||||||
*/
|
*/
|
||||||
private String username;
|
private String username;
|
||||||
/**
|
/**
|
||||||
* 用户姓名
|
* 用户姓名
|
||||||
*/
|
*/
|
||||||
private String nickname;
|
private String nickname;
|
||||||
/**
|
/**
|
||||||
* 班级
|
* 班级
|
||||||
*/
|
*/
|
||||||
private String className;
|
private String className;
|
||||||
/**
|
/**
|
||||||
* 考试状态
|
* 考试状态
|
||||||
*/
|
*/
|
||||||
private String examStatus;
|
private String examStatus;
|
||||||
/**
|
/**
|
||||||
* 成绩
|
* 成绩
|
||||||
*/
|
*/
|
||||||
private String score;
|
private String score;
|
||||||
/**
|
/**
|
||||||
* 试卷编号
|
* 试卷编号
|
||||||
*/
|
*/
|
||||||
private String paperNum;
|
private String paperNum;
|
||||||
|
|
||||||
private String taskId;
|
private String taskId;
|
||||||
private String taskName;
|
private String taskName;
|
||||||
|
|
||||||
private String taskType;
|
private String taskType;
|
||||||
/**
|
/**
|
||||||
* 机器ip
|
* 机器ip
|
||||||
*/
|
*/
|
||||||
private String ip;
|
private String ip;
|
||||||
/**
|
/**
|
||||||
* 剩余时间
|
* 剩余时间
|
||||||
*/
|
*/
|
||||||
private Long remainingTime;
|
private Long remainingTime;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -68,12 +68,6 @@ public class QuestionDownJob implements JobHandler {
|
|||||||
System.out.println("不走定时任务测试==========================");
|
System.out.println("不走定时任务测试==========================");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -265,7 +265,7 @@ public class MonitorServiceImpl implements MonitorService {
|
|||||||
EducationPaperSession educationPaperSession = educationPaperSessionMapper.selectEducationPaperSessionBySessionId(educationPaperPerson.getSessionId());
|
EducationPaperSession educationPaperSession = educationPaperSessionMapper.selectEducationPaperSessionBySessionId(educationPaperPerson.getSessionId());
|
||||||
|
|
||||||
if (educationPaperSession == null) {
|
if (educationPaperSession == null) {
|
||||||
throw new MonitorSpecialtyException("未分配考场,请练习教师!");
|
throw new MonitorSpecialtyException("未分配考场,请联系教师!");
|
||||||
}
|
}
|
||||||
//结束时间
|
//结束时间
|
||||||
Date endTime = educationPaperSession.getEndTime();
|
Date endTime = educationPaperSession.getEndTime();
|
||||||
|
@@ -598,7 +598,6 @@ public class ExamQuestionServiceImpl implements IExamQuestionService {
|
|||||||
// TODO 1、拉取数据,保存至数据库 2、回调服务器是否拉取成功(中心服务器)
|
// TODO 1、拉取数据,保存至数据库 2、回调服务器是否拉取成功(中心服务器)
|
||||||
// 1、获取上传的rabbit的试题数组
|
// 1、获取上传的rabbit的试题数组
|
||||||
List<ExamQuestion> examQuestions = null;
|
List<ExamQuestion> examQuestions = null;
|
||||||
List<ExamQuestion> insertExam = new ArrayList<>();
|
|
||||||
try {
|
try {
|
||||||
examQuestions = rabbitMqService.receiveAllMessages(queueName);
|
examQuestions = rabbitMqService.receiveAllMessages(queueName);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -614,19 +613,21 @@ public class ExamQuestionServiceImpl implements IExamQuestionService {
|
|||||||
// 判断试题归属于中心服务器还是考点服务器
|
// 判断试题归属于中心服务器还是考点服务器
|
||||||
if (examQuestion.getSchoolId() == null || examQuestion.getSchoolId().isEmpty()) {
|
if (examQuestion.getSchoolId() == null || examQuestion.getSchoolId().isEmpty()) {
|
||||||
examQuestion.setSchoolId("1");
|
examQuestion.setSchoolId("1");
|
||||||
|
examQuestion.setAudit(String.valueOf(0));
|
||||||
} else {
|
} else {
|
||||||
examQuestion.setSchoolId(examQuestion.getSchoolId());
|
examQuestion.setSchoolId(examQuestion.getSchoolId());
|
||||||
|
examQuestion.setAudit(String.valueOf(1));
|
||||||
}
|
}
|
||||||
examQuestion.setCreator(examQuestion.getCreator());
|
examQuestion.setCreator(examQuestion.getCreator());
|
||||||
examQuestion.setCreateTime(LocalDateTime.now());
|
examQuestion.setCreateTime(LocalDateTime.now());
|
||||||
examQuestion.setUpdateTime(LocalDateTime.now());
|
examQuestion.setUpdateTime(LocalDateTime.now());
|
||||||
// 判断上传的试题类型是需要审核还是不需要审核的
|
// 判断上传的试题类型是需要审核还是不需要审核的 TODO
|
||||||
if (queueName.split("_")[0].equals("1")) {
|
// if (queueName.split("_")[0].equals("1")) {
|
||||||
// 中心服務器推送到考點服務器,默認審核是通過的
|
// // 中心服務器推送到考點服務器,默認審核是通過的
|
||||||
examQuestion.setAudit(String.valueOf(0));
|
// examQuestion.setAudit(String.valueOf(0));
|
||||||
} else {
|
// } else {
|
||||||
examQuestion.setAudit(String.valueOf(1));
|
// examQuestion.setAudit(String.valueOf(1));
|
||||||
}
|
// }
|
||||||
Long loginTenantId = SecurityFrameworkUtils.getLoginTenantId();
|
Long loginTenantId = SecurityFrameworkUtils.getLoginTenantId();
|
||||||
int count = examQuestionMapper.selectCountQu();
|
int count = examQuestionMapper.selectCountQu();
|
||||||
// 读取系统创建试题位数设置
|
// 读取系统创建试题位数设置
|
||||||
@@ -640,7 +641,6 @@ public class ExamQuestionServiceImpl implements IExamQuestionService {
|
|||||||
List<ExamQuestionFile> fileUploads = examQuestion.getFileUploads();
|
List<ExamQuestionFile> fileUploads = examQuestion.getFileUploads();
|
||||||
ExamQuestionScore questionScores = examQuestion.getQuestionScores();
|
ExamQuestionScore questionScores = examQuestion.getQuestionScores();
|
||||||
List<ExamQuestionKeyword> questionKeywords = examQuestion.getQuestionKeywords();
|
List<ExamQuestionKeyword> questionKeywords = examQuestion.getQuestionKeywords();
|
||||||
|
|
||||||
if (answerList != null && answerList.size() > 0) {
|
if (answerList != null && answerList.size() > 0) {
|
||||||
answerList.replaceAll(answer -> {
|
answerList.replaceAll(answer -> {
|
||||||
answer.setAnswerId(IdUtils.simpleUUID());
|
answer.setAnswerId(IdUtils.simpleUUID());
|
||||||
@@ -650,7 +650,6 @@ public class ExamQuestionServiceImpl implements IExamQuestionService {
|
|||||||
//examQuestionAnswerMapper.insert(answerList);
|
//examQuestionAnswerMapper.insert(answerList);
|
||||||
examQuestionAnswerMapper.insertExamQuestionAnswerList(answerList);
|
examQuestionAnswerMapper.insertExamQuestionAnswerList(answerList);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileUploads != null && fileUploads.size() > 0) {
|
if (fileUploads != null && fileUploads.size() > 0) {
|
||||||
fileUploads.replaceAll(fileUpload -> {
|
fileUploads.replaceAll(fileUpload -> {
|
||||||
// 设置 fileId 和 quId
|
// 设置 fileId 和 quId
|
||||||
@@ -660,9 +659,7 @@ public class ExamQuestionServiceImpl implements IExamQuestionService {
|
|||||||
return fileUpload;
|
return fileUpload;
|
||||||
});
|
});
|
||||||
sysFileMapper.insertSysFileList(fileUploads);
|
sysFileMapper.insertSysFileList(fileUploads);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (questionScores != null) {
|
if (questionScores != null) {
|
||||||
questionScores.setScoreId(IdUtils.simpleUUID());
|
questionScores.setScoreId(IdUtils.simpleUUID());
|
||||||
questionScores.setQuId(quId);
|
questionScores.setQuId(quId);
|
||||||
@@ -676,7 +673,7 @@ public class ExamQuestionServiceImpl implements IExamQuestionService {
|
|||||||
});
|
});
|
||||||
examQuestionKeywordMapper.insertExamQuestionKeywordList(questionKeywords);
|
examQuestionKeywordMapper.insertExamQuestionKeywordList(questionKeywords);
|
||||||
}
|
}
|
||||||
examQuestionMapper.insert(insertExam);
|
examQuestionMapper.insert(examQuestion);
|
||||||
}
|
}
|
||||||
//有就是覆盖
|
//有就是覆盖
|
||||||
else {
|
else {
|
||||||
|
@@ -6,20 +6,24 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
|||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import pc.exam.pp.framework.common.pojo.CommonResult;
|
import pc.exam.pp.framework.common.pojo.CommonResult;
|
||||||
|
import pc.exam.pp.framework.common.util.json.JsonUtils;
|
||||||
import pc.exam.pp.framework.common.util.servlet.ServletUtils;
|
import pc.exam.pp.framework.common.util.servlet.ServletUtils;
|
||||||
import pc.exam.pp.framework.security.config.SecurityProperties;
|
import pc.exam.pp.framework.security.config.SecurityProperties;
|
||||||
|
import pc.exam.pp.framework.security.core.LoginUser;
|
||||||
import pc.exam.pp.framework.security.core.util.SecurityFrameworkUtils;
|
import pc.exam.pp.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import pc.exam.pp.module.exam.dal.dataobject.EducationPaperParam;
|
import pc.exam.pp.module.exam.dal.dataobject.*;
|
||||||
import pc.exam.pp.module.exam.dal.dataobject.EducationPaperTask;
|
|
||||||
import pc.exam.pp.module.exam.dal.dataobject.ExamQuestion;
|
|
||||||
import pc.exam.pp.module.exam.dal.dataobject.student.StuPaperScoreDO;
|
import pc.exam.pp.module.exam.dal.dataobject.student.StuPaperScoreDO;
|
||||||
|
import pc.exam.pp.module.exam.dal.mysql.paper.EducationPaperPersonMapper;
|
||||||
import pc.exam.pp.module.exam.dal.mysql.paper.EducationPaperQuMapper;
|
import pc.exam.pp.module.exam.dal.mysql.paper.EducationPaperQuMapper;
|
||||||
|
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.question.ExamQuestionMapper;
|
||||||
import pc.exam.pp.module.exam.dal.mysql.student.StuScoreVo;
|
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.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.paper.IEducationPaperTaskService;
|
||||||
import pc.exam.pp.module.exam.service.stuPaperScore.StuPaperScoreService;
|
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.StuInTheExam;
|
||||||
@@ -27,7 +31,11 @@ import pc.exam.pp.module.judgement.controller.admin.autoTools.vo.StuPaperReqVo;
|
|||||||
import pc.exam.pp.module.judgement.controller.admin.autoTools.vo.StuPaperScoreInfoVo;
|
import pc.exam.pp.module.judgement.controller.admin.autoTools.vo.StuPaperScoreInfoVo;
|
||||||
import pc.exam.pp.module.judgement.controller.admin.autoTools.vo.StuTheExamInfo;
|
import pc.exam.pp.module.judgement.controller.admin.autoTools.vo.StuTheExamInfo;
|
||||||
import pc.exam.pp.module.judgement.service.TaskManager;
|
import pc.exam.pp.module.judgement.service.TaskManager;
|
||||||
|
import pc.exam.pp.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -54,9 +62,13 @@ public class AutoToolsController {
|
|||||||
@Resource
|
@Resource
|
||||||
SecurityProperties securityProperties;
|
SecurityProperties securityProperties;
|
||||||
@Autowired
|
@Autowired
|
||||||
IEducationPaperTaskService educationPaperTaskService;
|
EducationPaperPersonMapper educationPaperPersonMapper;
|
||||||
|
@Resource
|
||||||
|
EducationPaperSessionMapper educationPaperSessionMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
IEducationPaperParamService educationPaperParamService;
|
IEducationPaperParamService educationPaperParamService;
|
||||||
|
@Resource
|
||||||
|
StringRedisTemplate stringRedisTemplate;
|
||||||
|
|
||||||
@GetMapping("/getStuScoreInfo")
|
@GetMapping("/getStuScoreInfo")
|
||||||
@Operation(summary = "通过学生ID、试卷ID获取")
|
@Operation(summary = "通过学生ID、试卷ID获取")
|
||||||
@@ -96,31 +108,71 @@ public class AutoToolsController {
|
|||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
@PostMapping("/startExam")
|
@PostMapping("/startExam")
|
||||||
public CommonResult<Boolean> startExam(@RequestBody StuInTheExam stuInTheExam) {
|
public CommonResult<String> startExam(@RequestBody StuInTheExam stuInTheExam) {
|
||||||
HttpServletRequest request = ServletUtils.getRequest();
|
HttpServletRequest request = ServletUtils.getRequest();
|
||||||
|
// 获取登录token
|
||||||
String token = SecurityFrameworkUtils.obtainAuthorization(request,
|
String token = SecurityFrameworkUtils.obtainAuthorization(request,
|
||||||
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
|
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
|
||||||
// 查找对应的task
|
// 获取登录用户
|
||||||
EducationPaperParam educationPaperParam = educationPaperParamService.selectEducationPaperParamByTaskId(stuInTheExam.getTaskId());
|
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||||
// 定时上传文件时间
|
// 通过token获取用户redis信息,获取refreshToken
|
||||||
String time = educationPaperParam.getUploadTime();
|
OAuth2AccessTokenDO oAuth2AccessTokenDO = JsonUtils.parseObject(stringRedisTemplate.opsForValue().get("oauth2_access_token:"+token), OAuth2AccessTokenDO.class);
|
||||||
// 将分钟继续转换成秒
|
int startTime = 0;
|
||||||
stuInTheExam.setTimes(Integer.parseInt(time) * 60);
|
if (oAuth2AccessTokenDO != null) {
|
||||||
// 倒计时
|
String refreshToken = oAuth2AccessTokenDO.getRefreshToken();
|
||||||
AtomicInteger countdown = new AtomicInteger(stuInTheExam.getStartTimes());
|
// 查找对应的task
|
||||||
// 创建初始返回数据
|
EducationPaperParam educationPaperParam = educationPaperParamService.selectEducationPaperParamByTaskId(stuInTheExam.getTaskId());
|
||||||
StuTheExamInfo stuTheExamInfo = new StuTheExamInfo();
|
String isSession = educationPaperParam.getIsSession();
|
||||||
// 返回数据-剩余时间
|
if (isSession.equals("0")) {
|
||||||
stuTheExamInfo.setTime(formatLongDuration(countdown.get()));
|
// 设置了场次
|
||||||
// 返回数据-上传文件状态 0:上传;1:不上传
|
// 剩余时间需要继续计算
|
||||||
stuTheExamInfo.setUpload(1);
|
EducationPaperPerson educationPaperPerson = educationPaperPersonMapper.selectByTaskIdAndPersonId(stuInTheExam.getTaskId(), String.valueOf(loginUser.getId()));
|
||||||
// 返回数据-上传文件状态 0:结束;1:不结束
|
EducationPaperSession educationPaperSession = educationPaperSessionMapper.selectEducationPaperSessionBySessionId(educationPaperPerson.getSessionId());
|
||||||
stuTheExamInfo.setEndStatus(1);
|
//结束时间
|
||||||
// 返回数据-网络状态
|
Date endTime = educationPaperSession.getEndTime();
|
||||||
stuTheExamInfo.setNetwork("强");
|
Date nowTime = new Date();
|
||||||
// 创建对应的线程池
|
// 将 Date 转换为 Instant
|
||||||
taskManager.startTask(stuInTheExam, stuTheExamInfo, token, countdown, new AtomicInteger(0));
|
Instant endInstant = endTime.toInstant();
|
||||||
return CommonResult.success(true);
|
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;
|
||||||
|
} 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);
|
||||||
|
}
|
||||||
|
return CommonResult.success("未登录");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,9 +184,14 @@ public class AutoToolsController {
|
|||||||
HttpServletRequest request = ServletUtils.getRequest();
|
HttpServletRequest request = ServletUtils.getRequest();
|
||||||
String token = SecurityFrameworkUtils.obtainAuthorization(request,
|
String token = SecurityFrameworkUtils.obtainAuthorization(request,
|
||||||
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
|
securityProperties.getTokenHeader(), securityProperties.getTokenParameter());
|
||||||
// 删除对应的线程池
|
OAuth2AccessTokenDO oAuth2AccessTokenDO = JsonUtils.parseObject(stringRedisTemplate.opsForValue().get("oauth2_access_token:"+token), OAuth2AccessTokenDO.class);
|
||||||
taskManager.stopTask(token);
|
if (oAuth2AccessTokenDO != null) {
|
||||||
return CommonResult.success(true);
|
// 删除对应的线程池
|
||||||
|
String refreshToken = oAuth2AccessTokenDO.getRefreshToken();
|
||||||
|
taskManager.stopTask(refreshToken);
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
return CommonResult.success(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String formatLongDuration(int totalSeconds) {
|
public static String formatLongDuration(int totalSeconds) {
|
||||||
|
@@ -13,6 +13,6 @@ public class StuInTheExam {
|
|||||||
private int times;
|
private int times;
|
||||||
// 任务ID
|
// 任务ID
|
||||||
private String taskId;
|
private String taskId;
|
||||||
// 延迟时间 min
|
// 延迟时间 单位min
|
||||||
private Integer delayTime;
|
private Integer delayTime;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user