diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionExamBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionExamBiz.java index 4e051be..5b71a47 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionExamBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionExamBiz.java @@ -51,28 +51,28 @@ public class CompetitionExamBiz { private IFeignExam feignExam; @Autowired - private RedisTemplate template; + private RedisTemplate template; - public List getExamQuestion(Long compId,Integer stageId,Long userId,Integer type ){ - UserVo currentUser = feignUser.getByUserNo(userId); - String key = "questionList_"+compId+"_"+stageId+"_"+currentUser.getLevelId(); + public List getExamQuestion(Long compId, Integer stageId, Long userId, Integer type) { + UserVo currentUser = feignUser.getByUserNo(userId); + String key = "questionList_" + compId + "_" + stageId + "_" + currentUser.getLevelId(); Object questListObj = template.opsForValue().get(key); List questionVos = null; - if(questListObj!=null){ - questionVos = ( List) questListObj; - }else{ - CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(compId,stageId); + if (questListObj != null) { + questionVos = (List) questListObj; + } else { + CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(compId, stageId); List groupList = groupDao.findByCompetitionId(compId); //学生层次限制 - List limitList = groupList.stream().filter(g->g.getLimitType() == 1).collect(Collectors.toList()); + List limitList = groupList.stream().filter(g -> g.getLimitType() == 1).collect(Collectors.toList()); List ids = new ArrayList<>(); task.getQuestionList().forEach(taskQuestion -> { - if(taskQuestion.getGroupId().equals(0)){ + if (taskQuestion.getGroupId().equals(0)) { ids.addAll(taskQuestion.getQuestionIds()); - }else{ + } else { //不同学生层次不同案例题 - CompetitionGroup group = limitList.stream().filter(g->g.getId() .equals(taskQuestion.getGroupId())).findFirst().orElse(null); - if(group!=null) { + CompetitionGroup group = limitList.stream().filter(g -> g.getId().equals(taskQuestion.getGroupId())).findFirst().orElse(null); + if (group != null) { GroupCat groupCat = group.getCatList().stream().filter(groupCat1 -> groupCat1.getId().equals(currentUser.getLevelId())).findFirst().orElse(null); if (groupCat != null) { ids.addAll(taskQuestion.getQuestionIds()); @@ -84,12 +84,12 @@ public class CompetitionExamBiz { qo.setIds(ids); questionVos = feignExam.listQusetion(qo); } - if(type == 0){ + if (type == 0) { questionVos.forEach(questionVo -> { - if(questionVo.getType() == 0){ + if (questionVo.getType() == 0) { questionVo.setAnswerId(new ArrayList<>()); - }else{ - questionVo.getChildren().forEach(child->{ + } else { + questionVo.getChildren().forEach(child -> { child.setAnswerId(new ArrayList<>()); }); } @@ -99,34 +99,34 @@ public class CompetitionExamBiz { return questionVos; } - private List getQList(List qList,Long userId){ - UserVo userVo = feignUser.getByUserNo(userId); + private List getQList(List qList, Long userId) { + UserVo userVo = feignUser.getByUserNo(userId); System.out.println(userVo.getLevelId()); return null; } @Transactional - public Result startExam(Long compId, Integer stageId, Long userNo){ - CompetitionMember member = competitionMemberDao.getByCompetitionIdAndStageIdAndUserId(compId,stageId,userNo); - CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(compId,stageId); - if(member == null){ + public Result startExam(Long compId, Integer stageId, Long userNo) { + CompetitionMember member = competitionMemberDao.getByCompetitionIdAndStageIdAndUserId(compId, stageId, userNo); + CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(compId, stageId); + if (member == null) { return Result.error("未报名该大赛或赛段"); } - if(task.getExamDuration() == null){ + if (task.getExamDuration() == null) { return Result.error("试卷设置错误"); } - if(member.getExamStartTime()!=null){ + if (member.getExamStartTime() != null) { ExamDTO dto = new ExamDTO(); dto.setStartTime(member.getExamStartTime()); - dto.setEndTime(DateUtil.addHours(member.getExamStartTime(),task.getExamDuration())); + dto.setEndTime(DateUtil.addHours(member.getExamStartTime(), task.getExamDuration())); return Result.success(dto); } Date examStartTime = new Date(); - Date examEndTime = DateUtil.addHours(examStartTime,task.getExamDuration()); - int affect = competitionMemberDao.updateExamStartTime(userNo,stageId,compId,examStartTime); - if(affect>0){ + Date examEndTime = DateUtil.addHours(examStartTime, task.getExamDuration()); + int affect = competitionMemberDao.updateExamStartTime(userNo, stageId, compId, examStartTime); + if (affect > 0) { ExamDTO dto = new ExamDTO(); dto.setStartTime(examStartTime); dto.setEndTime(examEndTime); @@ -136,56 +136,64 @@ public class CompetitionExamBiz { } @Transactional - public Result submit(SubmitVo vo){ + public Result submit(SubmitVo vo) { Date now = new Date(); - CompetitionMember member = competitionMemberDao.getByCompetitionIdAndStageIdAndUserId(vo.getCompId(),vo.getStageId(),vo.getUserNo()); - if(member.getExamScore()!=null){ + CompetitionMember member = competitionMemberDao.getByCompetitionIdAndStageIdAndUserId(vo.getCompId(), vo.getStageId(), vo.getUserNo()); + if (member.getExamScore() != null) { SubmitResultDTO dto = new SubmitResultDTO(); dto.setScore(member.getExamScore()); return Result.success(dto); } - CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(vo.getCompId(),vo.getStageId()); - Long costTime =now.getTime() - member.getExamStartTime().getTime(); - if(costTime >3600000*task.getExamDuration()){ + CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(vo.getCompId(), vo.getStageId()); + Long costTime = now.getTime() - member.getExamStartTime().getTime(); + if (costTime > 3600000L * task.getExamDuration()) { return Result.error("考试超时"); } - if(task.getExamEndTime().getTime() questionVoList = getExamQuestion(vo.getCompId(),vo.getStageId(),vo.getUserNo(),1); - Double score = computeScore(questionVoList,vo.getQList()); - competitionMemberDao.updateScore(vo.getUserNo(),vo.getStageId(),vo.getCompId(),score); - competitionMemberDao.updateExamEndTimeAndCostTime(vo.getUserNo(),vo.getStageId(),vo.getCompId(),now,costTime); - ExamPaper paper = BeanUtils.copyProperties(vo,ExamPaper.class); - paper.setId(paper.getCompId()+"_"+paper.getStageId()+"_"+paper.getUserNo()); + List questionVoList = getExamQuestion(vo.getCompId(), vo.getStageId(), vo.getUserNo(), 1); + Double score = computeScore(questionVoList, vo.getQList()); + competitionMemberDao.updateScore(vo.getUserNo(), vo.getStageId(), vo.getCompId(), score); + competitionMemberDao.updateExamEndTimeAndCostTime(vo.getUserNo(), vo.getStageId(), vo.getCompId(), now, costTime); + ExamPaper paper = BeanUtils.copyProperties(vo, ExamPaper.class); + paper.setId(paper.getCompId() + "_" + paper.getStageId() + "_" + paper.getUserNo()); examPaperDao.save(paper); dto.setScore(score); return Result.success(dto); } //计算得分 - private Double computeScore(List questionVoList, List submitQuestionVOS){ + private Double computeScore(List questionVoList, List submitQuestionVOS) { Double totalScore = 0D; - for(int j = 0;j< submitQuestionVOS.size();j++) - { - SubmitQuestionVO submitQuestionVO = submitQuestionVOS.get(j); + for (int j = 0; j < submitQuestionVOS.size(); j++) { + SubmitQuestionVO submitQuestionVO = submitQuestionVOS.get(j); QuestionVo q = questionVoList.stream().filter(questionVo -> questionVo.getId().equals(submitQuestionVO.getId())).findFirst().orElse(null); - if(q == null) { continue; } - if(q.getType() == 0){ + if (q == null) { + continue; + } + if (q.getType() == 0) { //普通题 - if(checkCorrect(q.getAnswerId(),submitQuestionVO.getIds())){ + if (checkCorrect(q.getAnswerId(), submitQuestionVO.getIds())) { totalScore += q.getScore(); } - }else{ + //填空题直接对比 + if (q.getQuestionType() == 4) { + String title = q.getAnswerList().get(0).getTitle(); + if (title.equals(submitQuestionVO.getGapFillingAnswer())) { + totalScore += q.getScore(); + } + } + } else { //案例题 - SubQuestionVO subQuestionVO = q.getChildren().stream().filter(subQuestionVO1 -> subQuestionVO1.getId().intValue() == submitQuestionVO.getSubId()).findFirst().orElse(null); - if(subQuestionVO == null) { + SubQuestionVO subQuestionVO = q.getChildren().stream().filter(subQuestionVO1 -> subQuestionVO1.getId().intValue() == submitQuestionVO.getSubId()).findFirst().orElse(null); + if (subQuestionVO == null) { continue; } - if(checkCorrect(subQuestionVO.getAnswerId(),submitQuestionVO.getIds())){ + if (checkCorrect(subQuestionVO.getAnswerId(), submitQuestionVO.getIds())) { totalScore += subQuestionVO.getScore(); } } @@ -193,18 +201,20 @@ public class CompetitionExamBiz { return totalScore; } - private boolean checkCorrect(List answerId,List checkList){ - if(checkList ==null||checkList.size() == 0) {return false;} - if(answerId.size() == checkList.size()){ + private boolean checkCorrect(List answerId, List checkList) { + if (checkList == null || checkList.size() == 0) { + return false; + } + if (answerId.size() == checkList.size()) { boolean correct = true; - for(int i = 0 ;i ids; + private List ids; //答案ID + private String gapFillingAnswer; } diff --git a/tz/competition/target/classes/META-INF/build-info.properties b/tz/competition/target/classes/META-INF/build-info.properties deleted file mode 100644 index 48fc395..0000000 --- a/tz/competition/target/classes/META-INF/build-info.properties +++ /dev/null @@ -1,5 +0,0 @@ -build.artifact=competition -build.group=com.tz -build.name=competition -build.time=2024-04-10T06\:30\:27.208Z -build.version=1.0-SNAPSHOT