Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/test/java/com/msdw/tms/TmsApplicationTests.java
hehai
pd 5 years ago
commit 4a0343c914
  1. 6
      pom.xml
  2. 12
      src/main/java/com/msdw/tms/service/impl/EvaluationRulesServiceImpl.java
  3. 60
      src/main/java/com/msdw/tms/service/impl/QuestionsServiceImpl.java
  4. 54
      src/test/java/com/msdw/tms/TmsApplicationTests.java

@ -128,6 +128,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.8</version>
</dependency>
</dependencies>
<build>

@ -55,11 +55,11 @@ public class EvaluationRulesServiceImpl extends ServiceImpl<EvaluationRulesDao,
evaluationRulesVO.setTotalQuestionNum(questionsService.count(queryWrapper));//总题数
int totalSingleNum = questionsService.count(queryWrapper.eq("question_type_no",
int totalSingleNum = questionsService.count(queryWrapper.eq("question_type",
Constant.QuestionType.SINGLE_CHOICE.getType()));//单选题总数
int totalMultipleNum = questionsService.count(queryWrapper.eq("question_type_no",
int totalMultipleNum = questionsService.count(queryWrapper.eq("question_type",
Constant.QuestionType.MULTIPLE_CHOICE.getType()));//多选题总数
int totalJudgmentNum = questionsService.count(queryWrapper.eq("question_type_no",
int totalJudgmentNum = questionsService.count(queryWrapper.eq("question_type",
Constant.QuestionType.TRUE_OR_FALSE.getType()));//判断题总数
evaluationRulesVO.setTotalSingleNum(totalSingleNum);
@ -88,19 +88,19 @@ public class EvaluationRulesServiceImpl extends ServiceImpl<EvaluationRulesDao,
} else if (evaluationType.equals(Constant.RulesType.CUSTOMIZE.getType())) {//自定义
if (evaluationRules.getIsSingleEnable().equals(Constant.IsEnable.ENABLE.getType())) {//启用
int singleNum = evaluationRules.getSingleNum();
int totalSingleNum = questionsService.count(queryWrapper.eq("question_type_no",
int totalSingleNum = questionsService.count(queryWrapper.eq("question_type",
Constant.QuestionType.SINGLE_CHOICE.getType()));//单选题总数
numIncalid(singleNum, totalSingleNum);
}
if (evaluationRules.getIsMultipleEnable().equals(Constant.IsEnable.ENABLE.getType())) {//启用
int multipleNum = evaluationRules.getMultipleNum();
int totalMultipleNum = questionsService.count(queryWrapper.eq("question_type_no",
int totalMultipleNum = questionsService.count(queryWrapper.eq("question_type",
Constant.QuestionType.MULTIPLE_CHOICE.getType()));//多选题总数
numIncalid(multipleNum, totalMultipleNum);
}
if (evaluationRules.getIsJudgmentEnable().equals(Constant.IsEnable.ENABLE.getType())) {//启用
int judgmentNum = evaluationRules.getJudgmentNum();
int totalJudgmentNum = questionsService.count(queryWrapper.eq("question_type_no",
int totalJudgmentNum = questionsService.count(queryWrapper.eq("question_type",
Constant.QuestionType.TRUE_OR_FALSE.getType()));//判断题总数
numIncalid(judgmentNum, totalJudgmentNum);
}

@ -1,5 +1,6 @@
package com.msdw.tms.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -409,37 +410,32 @@ public class QuestionsServiceImpl extends ServiceImpl<QuestionsDao, QuestionsEnt
BeanUtils.copyProperties(evaluationRules, evaluation);
//TODO 处理时长,获取当前登录用户id,将用户剩余的时长实时计算,存在Redis中
//时长转成秒来计算
//先查询该用户有没有开始考试,既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;
// 剩余时间,单位:秒
int remainingTime = duration * 60;
if (StringUtils.isEmpty(startTime)) {
//如果没有,表示是开始测评,向redis中插入一条数据,key是前缀加用户id,value是当前时间,过期时间是测评时长加十秒
ops.set(key, getSecondTimestamp(new Date()) + "", duration * 60 + 10, TimeUnit.SECONDS);
ops.set(key, String.valueOf(System.currentTimeMillis()), duration * 60 + 10, TimeUnit.SECONDS);
} else {
int difference = getSecondTimestamp(new Date()) - Integer.valueOf(startTime);
remainingTime = duration - difference;
// 当前时间与开始时间得时间差,单位:毫秒
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(formatDateTime(remainingTime));
evaluation.setRemainingDuration(DateUtil.secondToTime(remainingTime));
//搜集随机抽取的试题
Set<QuestionsVO> set = new HashSet<>();
//根据测评规则的类型不同
Integer evaluationType = evaluationRules.getEvaluationType();
if (evaluationType.equals(Constant.RulesType.RANDOM.getType())) {//随机
@ -455,68 +451,36 @@ public class QuestionsServiceImpl extends ServiceImpl<QuestionsDao, QuestionsEnt
int multipleNum = 0;
// 判断题数量
int judgmentNum = 0;
//判断各条目的题型是否启用
if (evaluationRules.getIsSingleEnable().equals(Constant.IsEnable.ENABLE.getType())) {
singleNum = evaluationRules.getSingleNum();
List<QuestionsEntity> singleChoice = this.list(queryWrapper.eq("question_type_no",
List<QuestionsEntity> singleChoice = this.list(queryWrapper.eq("question_type",
Constant.QuestionType.SINGLE_CHOICE.getType()));
set.addAll(getRandomList(singleNum, singleChoice));
}
if (evaluationRules.getIsMultipleEnable().equals(Constant.IsEnable.ENABLE.getType())) {
multipleNum = evaluationRules.getMultipleNum();
List<QuestionsEntity> multipleChoice = this.list(queryWrapper.eq("question_type_no",
List<QuestionsEntity> multipleChoice = this.list(queryWrapper.eq("question_type",
Constant.QuestionType.MULTIPLE_CHOICE.getType()));
set.addAll(getRandomList(multipleNum, multipleChoice));
}
if (evaluationRules.getIsJudgmentEnable().equals(Constant.IsEnable.ENABLE.getType())) {
judgmentNum = evaluationRules.getJudgmentNum();
List<QuestionsEntity> judgments = this.list(queryWrapper.eq("question_type_no",
List<QuestionsEntity> judgments = this.list(queryWrapper.eq("question_type",
Constant.QuestionType.TRUE_OR_FALSE.getType()));
set.addAll(getRandomList(judgmentNum, judgments));
}
// 总题数等于各类题目数量之和
evaluation.setQuestionNum(singleNum + multipleNum + judgmentNum);
}
// Set<QuestionsVO> collect = set.stream().map(item -> {
// QuestionsVO questionsVO = new QuestionsVO();
// BeanUtils.copyProperties(item, questionsVO);
// return questionsVO;
// }).collect(Collectors.toSet());
evaluation.setQuestions(set);
return evaluation;
}
private int getSecondTimestamp(Date date) {
if (null == date) {
return 0;
}
String timestamp = String.valueOf(date.getTime() / 1000 / 60);
return Integer.valueOf(timestamp);
}
private String formatDateTime(long mss) {
String DateTimes;
long hours = (mss % (60 * 24)) / (60);
long minutes = (mss % (60));
//long seconds = mss % 60;
if (hours > 0) {
if (hours < 10) {
DateTimes = "0" + hours + ":" + minutes;
} else {
DateTimes = hours + ":" + minutes;
}
} else {
DateTimes = "00:" + minutes;
}
return DateTimes;
}
@Override
public void exportQuestion(HttpServletResponse response) throws Exception {
// 请求包装类

@ -1,5 +1,6 @@
package com.msdw.tms;
import cn.hutool.core.date.DateUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@ -173,4 +174,57 @@ class TmsApplicationTests {
// System.currentTimeMillis() / (long)1000 / (long)60;
}
@Test
void t4() throws ParseException {
Date date = getDate("2020-08-26 09:13:51");
int secondTimestampTwo = getSecondTimestampTwo(date);
int secondTimestampTwo1 = getSecondTimestampTwo(new Date());
int i = secondTimestampTwo1 - secondTimestampTwo;
System.out.println(i);
// System.currentTimeMillis() / (long)1000 / (long)60;
}
//处理时间格式
private String handleTime(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 当前日期和时间
}
private Date getDate(String dateStr) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//注意月份是MM
Date date = simpleDateFormat.parse(dateStr);
System.out.println(date); //Mon Sep 02 00:00:00 CST 2019
System.out.println(simpleDateFormat.format(date)); //2019-09-02
return date;
}
@Autowired
StringRedisTemplate stringRedisTemplate;
@Test
void t5() throws ParseException {
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
ops.set("aaa", "sss", 30, TimeUnit.SECONDS);
}
@Test
void t6() throws ParseException {
int se = 130*60;
String s = DateUtil.secondToTime(se);
System.out.println(s);
}
}

Loading…
Cancel
Save