|
|
|
@ -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(); |
|
|
|
|