用户关联的测评剩余时间接口

hehai
shijie 4 years ago
parent 403d8e1602
commit 9fa87e11d6
  1. 8
      src/main/java/com/msdw/tms/api/QuestionsControllerApi.java
  2. 11
      src/main/java/com/msdw/tms/controller/QuestionsController.java
  3. 4
      src/main/java/com/msdw/tms/entity/vo/EvaluationVO.java
  4. 4
      src/main/java/com/msdw/tms/service/QuestionsService.java
  5. 85
      src/main/java/com/msdw/tms/service/impl/QuestionsServiceImpl.java
  6. 2
      src/test/java/com/msdw/tms/service/QuestionsServiceTest.java

@ -81,7 +81,13 @@ public interface QuestionsControllerApi {
* 抽题测评
*/
@ApiOperation(value = "抽题测评", notes = "抽题测评")
R evaluation (Integer userId);
R evaluation ();
/**
* 抽题测评
*/
@ApiOperation(value = "获取测评剩余时间", notes = "获取测评剩余时间")
R getEvaluationRemainingTime (Integer userId);
/**
* 通过excel批量导出

@ -145,11 +145,18 @@ public class QuestionsController implements QuestionsControllerApi {
@Override
@GetMapping("/evaluation")
public R evaluation(Integer userId) {
EvaluationVO evaluation = questionsService.evaluation(userId);
public R evaluation() {
EvaluationVO evaluation = questionsService.evaluation();
return R.ok().put("data", evaluation);
}
@Override
@GetMapping("/remaining")
public R getEvaluationRemainingTime(Integer userId) {
String remainingTime = questionsService.getEvaluationRemainingTime(userId);
return R.ok().put("data", remainingTime);
}
@Override
@GetMapping("/export")
public void exportQuestion(HttpServletResponse response) throws Exception {

@ -27,10 +27,6 @@ public class EvaluationVO implements Serializable {
* 测评时长单位分钟
*/
private Integer duration;
/**
* 当前用户的剩余时长格式 HH:ss
*/
private String remainingDuration;
/**
* 测评总题数
*/

@ -44,8 +44,10 @@ public interface QuestionsService extends IService<QuestionsEntity> {
void downloadFiles(HttpServletResponse response) throws IOException;
EvaluationVO evaluation(Integer userId);
EvaluationVO evaluation();
void exportQuestion(HttpServletResponse response) throws Exception;
String getEvaluationRemainingTime(Integer userId);
}

@ -397,7 +397,7 @@ public class QuestionsServiceImpl extends ServiceImpl<QuestionsDao, QuestionsEnt
}
@Override
public EvaluationVO evaluation(Integer userId) {
public EvaluationVO evaluation() {
QueryWrapper<QuestionsEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_del", Constant.IsDel.NOT_DEL.getType()) //未删除
@ -410,30 +410,35 @@ public class QuestionsServiceImpl extends ServiceImpl<QuestionsDao, QuestionsEnt
BeanUtils.copyProperties(evaluationRules, evaluation);
//时长转成秒来计算
//先查询该用户有没有开始考试,既redis中有没有跟该用户id相关联的key
//如果没有,表示是开始测评,向redis中插入一条数据,key是前缀加用户id,value是当前时间,过期时间是测评时长加三十秒
//如果有,则得到value,既开始测评的时间,用当前时间和开始测评时间做差,测评时长减去该差值
//TODO 提交测评时删除redis中的该条数据
//得到总时长,单位:分
Integer duration = evaluation.getDuration();
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
String key = REMAINING_TINE_KEY + userId;
String startTime = ops.get(key);
// 剩余时间,单位:秒
int remainingTime = duration * 60;
if (StringUtils.isEmpty(startTime)) {
//如果没有,表示是开始测评,向redis中插入一条数据,key是前缀加用户id,value是当前时间,过期时间是测评时长加十秒
ops.set(key, String.valueOf(System.currentTimeMillis()), duration * 60 + 10, TimeUnit.SECONDS);
} else {
// 当前时间与开始时间得时间差,单位:毫秒
long difference = System.currentTimeMillis() - Long.parseLong(startTime);
remainingTime = (duration * 60) - (new Long(difference).intValue() / 1000);
if (remainingTime < 0) {
ExceptionCast.cast(CommonCode.EVALUATION_TIME_INVALID);
}
}
evaluation.setRemainingDuration(DateUtil.secondToTime(remainingTime));
// //时长转成秒来计算
// //先查询该用户有没有开始考试,既redis中有没有跟该用户id相关联的key
// //如果没有,表示是开始测评,向redis中插入一条数据,key是前缀加用户id,value是当前时间,过期时间是测评时长加三十秒
// //如果有,则得到value,既开始测评的时间,用当前时间和开始测评时间做差,测评时长减去该差值
// //TODO 提交测评时删除redis中的该条数据
// //得到总时长,单位:分
// Integer duration = evaluation.getDuration();
// ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
// String key = REMAINING_TINE_KEY + userId;
// String startTime = ops.get(key);
// // 剩余时间,单位:秒
// int remainingTime = duration * 60;
// if (StringUtils.isEmpty(startTime)) {
// //如果没有,表示是开始测评,向redis中插入一条数据,key是前缀加用户id,value是当前时间,过期时间是测评时长加十秒
// ops.set(key, String.valueOf(System.currentTimeMillis()), duration * 60 + 10, TimeUnit.SECONDS);
// } else {
// // 当前时间与开始时间得时间差,单位:毫秒
// long difference = System.currentTimeMillis() - Long.parseLong(startTime);
// remainingTime = (duration * 60) - (new Long(difference).intValue() / 1000);
// if (remainingTime < 0) {
// ExceptionCast.cast(CommonCode.EVALUATION_TIME_INVALID);
// }
// }
// evaluation.setRemainingDuration(DateUtil.secondToTime(remainingTime));
//搜集随机抽取的试题
Set<QuestionsVO> set = new HashSet<>();
//根据测评规则的类型不同
@ -505,6 +510,36 @@ public class QuestionsServiceImpl extends ServiceImpl<QuestionsDao, QuestionsEnt
}
@Override
public String getEvaluationRemainingTime(Integer userId) {
//时长转成秒来计算
//先查询该用户有没有开始考试,既redis中有没有跟该用户id相关联的key
//如果没有,表示是开始测评,向redis中插入一条数据,key是前缀加用户id,value是当前时间,过期时间是测评时长加三十秒
//如果有,则得到value,既开始测评的时间,用当前时间和开始测评时间做差,测评时长减去该差值
//TODO 提交测评时删除redis中的该条数据
//得到总时长,单位:分
EvaluationRulesVO evaluationRules = evaluationRulesService.getEvaluationRules();
Integer duration = evaluationRules.getDuration();
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
String key = REMAINING_TINE_KEY + userId;
String startTime = ops.get(key);
// 剩余时间,单位:秒
int remainingTime = duration * 60;
if (StringUtils.isEmpty(startTime)) {
//如果没有,表示是开始测评,向redis中插入一条数据,key是前缀加用户id,value是当前时间,过期时间是测评时长加十秒
ops.set(key, String.valueOf(System.currentTimeMillis()), duration * 60 + 10, TimeUnit.SECONDS);
} else {
// 当前时间与开始时间得时间差,单位:毫秒
long difference = System.currentTimeMillis() - Long.parseLong(startTime);
remainingTime = (duration * 60) - (new Long(difference).intValue() / 1000);
if (remainingTime < 0) {
ExceptionCast.cast(CommonCode.EVALUATION_TIME_INVALID);
}
}
return DateUtil.secondToTime(remainingTime);
}
private Set<QuestionsVO> getRandomList(int len, List<QuestionsEntity> list) {
Set<QuestionsVO> set = new HashSet<>();
Random random = new Random();

@ -121,7 +121,7 @@ class QuestionsServiceTest {
@Test
void evaluation() {
EvaluationVO evaluation = questionsService.evaluation(1);
EvaluationVO evaluation = questionsService.evaluation();
System.out.println(evaluation.toString());
}
}

Loading…
Cancel
Save