yangfeng 1 rok pred
rodič
commit
3e01ffff87

+ 8 - 0
web/src/main/java/com/ynfy/buss/exam/exam/service/IExamService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ynfy.buss.exam.exam.dto.ExamSubmitDTO;
 import com.ynfy.buss.exam.exam.dto.UserExamDTO;
 import com.ynfy.buss.exam.exam.entity.Exam;
+import com.ynfy.buss.exam.question.entity.Question;
 import com.ynfy.buss.exam.userexam.entity.UserExam;
 
 import java.util.List;
@@ -107,4 +108,11 @@ public interface IExamService extends IService<Exam> {
      * @return
      */
     Boolean examRecordExist(String userId, String examId);
+
+    /**
+     * 渲染填空题的题干,填充进答案
+     *
+     * @param question
+     */
+    void renderBlank(Question question, String answer);
 }

+ 4 - 7
web/src/main/java/com/ynfy/buss/exam/exam/service/impl/ExamServiceImpl.java

@@ -431,10 +431,9 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
                 Question question = questionMap.get(userExamQuestion.getQuestionId());
                 //渲染填空题的题干,填充进答案
                 if (needRenderBlank && QuestionType.BLANK.getCode().equals(userExamQuestion.getQuestionType())) {
-                    renderBlank(question, userExamQuestion);
-                } else {
-                    userExamQuestion.setQuestion(question);
+                    renderBlank(question, userExamQuestion.getAnswer());
                 }
+                userExamQuestion.setQuestion(question);
                 userExamQuestion.setQuestionTypeName(QuestionType.getByCode(userExamQuestion.getQuestionType()).getValue());
             }
         }
@@ -444,11 +443,10 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
      * 渲染填空题的题干,填充进答案
      *
      * @param question
-     * @param userExamQuestion
      */
-    public void renderBlank(Question question, UserExamQuestion userExamQuestion) {
+    @Override
+    public void renderBlank(Question question, String answer) {
         String content = question.getContent();
-        String answer = userExamQuestion.getAnswer();
         if (StringUtils.isNotBlank(content) && StringUtils.isNotBlank(answer)) {
             List<QuestionAnswer> answerList = JSONArray.parseArray(answer, QuestionAnswer.class);
             Map<String, QuestionAnswer> answerMap = answerList.stream().collect(Collectors.toMap(QuestionAnswer::getTag, a -> a, (k1, k2) -> k1));
@@ -459,7 +457,6 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
             }
         }
         question.setContent(content);
-        userExamQuestion.setQuestion(question);
     }
 
     /**

+ 12 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/controller/UserPracticeController.java

@@ -182,4 +182,16 @@ public class UserPracticeController extends JeecgController<UserPractice, IUserP
         return Result.OK("提交练习成功!", userPracticeService.submitPractice(dto));
     }
 
+    /**
+     * 获取练习结果
+     *
+     * @return
+     */
+    @ApiOperation(value = "获取练习结果", notes = "获取练习结果")
+    @GetMapping(value = "/getPracticeResult")
+    public Result<?> getPracticeResult(@RequestParam String id) {
+        return Result.OK(userPracticeService.getPracticeResult(id));
+    }
+
+
 }

+ 17 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/entity/dto/UserPracticeResultDTO.java

@@ -0,0 +1,17 @@
+package com.ynfy.buss.practice.userpractice.entity.dto;
+
+
+import com.ynfy.buss.practice.userpractice.entity.UserPractice;
+import com.ynfy.buss.practice.userpracticequestion.entity.UserPracticeQuestion;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserPracticeResultDTO {
+
+    private UserPractice userPractice;
+
+    private List<UserPracticeQuestion> questionList;
+
+}

+ 9 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/service/IUserPracticeService.java

@@ -3,6 +3,7 @@ package com.ynfy.buss.practice.userpractice.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ynfy.buss.practice.userpractice.entity.UserPractice;
 import com.ynfy.buss.practice.userpractice.entity.dto.UserPracticeDTO;
+import com.ynfy.buss.practice.userpractice.entity.dto.UserPracticeResultDTO;
 
 import java.util.List;
 
@@ -23,4 +24,12 @@ public interface IUserPracticeService extends IService<UserPractice> {
     List<UserPractice> getRecentPractice();
 
     String submitPractice(UserPracticeDTO dto);
+
+
+    /**
+     * 获取练习结果
+     *
+     * @return
+     */
+    UserPracticeResultDTO getPracticeResult(String id);
 }

+ 42 - 4
web/src/main/java/com/ynfy/buss/practice/userpractice/service/impl/UserPracticeServiceImpl.java

@@ -6,10 +6,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ynfy.buss.exam.exam.dto.ExamAnswerDTO;
+import com.ynfy.buss.exam.exam.service.IExamService;
+import com.ynfy.buss.exam.question.entity.Question;
 import com.ynfy.buss.exam.question.enums.QuestionType;
+import com.ynfy.buss.exam.question.service.IQuestionService;
 import com.ynfy.buss.practice.userpractice.entity.UserPractice;
 import com.ynfy.buss.practice.userpractice.entity.dto.PracticeQuestionDTO;
 import com.ynfy.buss.practice.userpractice.entity.dto.UserPracticeDTO;
+import com.ynfy.buss.practice.userpractice.entity.dto.UserPracticeResultDTO;
 import com.ynfy.buss.practice.userpractice.enums.PracticeMode;
 import com.ynfy.buss.practice.userpractice.mapper.UserPracticeMapper;
 import com.ynfy.buss.practice.userpractice.service.IUserPracticeService;
@@ -23,10 +27,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class UserPracticeServiceImpl extends ServiceImpl<UserPracticeMapper, UserPractice> implements IUserPracticeService {
@@ -34,6 +36,12 @@ public class UserPracticeServiceImpl extends ServiceImpl<UserPracticeMapper, Use
     @Autowired
     private IUserPracticeQuestionService userPracticeQuestionService;
 
+    @Autowired
+    private IQuestionService questionService;
+
+    @Autowired
+    private IExamService examService;
+
     /**
      * 获取用户最近的练习
      *
@@ -109,4 +117,34 @@ public class UserPracticeServiceImpl extends ServiceImpl<UserPracticeMapper, Use
         }
         return userPracticeId;
     }
+
+    /**
+     * 获取练习结果
+     *
+     * @return
+     */
+    @Override
+    public UserPracticeResultDTO getPracticeResult(String id) {
+        UserPracticeResultDTO dto = new UserPracticeResultDTO();
+        UserPractice userPractice = getById(id);
+        dto.setUserPractice(userPractice);
+        List<UserPracticeQuestion> userPracticeQuestionList = userPracticeQuestionService.listByUserPracticeId(id);
+        List<String> questionIdList = userPracticeQuestionList.stream().map(UserPracticeQuestion::getQuestionId).collect(Collectors.toList());
+        List<Question> questionList = questionService.listByIds(questionIdList);
+        questionService.setQuestionAnswer(questionList);
+        Map<String, Question> questionMap = questionList.stream().collect(Collectors.toMap(Question::getId, a -> a, (k1, k2) -> k1));
+        for (UserPracticeQuestion userPracticeQuestion : userPracticeQuestionList) {
+            if (!Objects.isNull(questionMap) && !Objects.isNull(questionMap.get(userPracticeQuestion.getQuestionId()))) {
+                Question question = questionMap.get(userPracticeQuestion.getQuestionId());
+                //渲染填空题的题干,填充进答案
+                if (QuestionType.BLANK.getCode().equals(userPracticeQuestion.getQuestionType())) {
+                    examService.renderBlank(question, userPracticeQuestion.getAnswer());
+                }
+                userPracticeQuestion.setQuestion(question);
+                userPracticeQuestion.setQuestionTypeName(QuestionType.getByCode(userPracticeQuestion.getQuestionType()).getValue());
+            }
+        }
+        dto.setQuestionList(userPracticeQuestionList);
+        return dto;
+    }
 }

+ 8 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/entity/UserPracticeQuestion.java

@@ -1,9 +1,11 @@
 package com.ynfy.buss.practice.userpracticequestion.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ynfy.buss.exam.question.entity.Question;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -102,4 +104,10 @@ public class UserPracticeQuestion implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "更新日期")
     private Date updateTime;
+
+    @TableField(exist = false)
+    private Question question;
+
+    @TableField(exist = false)
+    private String questionTypeName;
 }

+ 4 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/service/IUserPracticeQuestionService.java

@@ -3,6 +3,8 @@ package com.ynfy.buss.practice.userpracticequestion.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ynfy.buss.practice.userpracticequestion.entity.UserPracticeQuestion;
 
+import java.util.List;
+
 /**
  * @Description: 用户练习题目表
  * @Author: jeecg-boot
@@ -11,4 +13,6 @@ import com.ynfy.buss.practice.userpracticequestion.entity.UserPracticeQuestion;
  */
 public interface IUserPracticeQuestionService extends IService<UserPracticeQuestion> {
 
+    List<UserPracticeQuestion> listByUserPracticeId(String userPracticeId);
+
 }

+ 10 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/service/impl/UserPracticeQuestionServiceImpl.java

@@ -1,11 +1,14 @@
 package com.ynfy.buss.practice.userpracticequestion.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ynfy.buss.practice.userpracticequestion.entity.UserPracticeQuestion;
 import com.ynfy.buss.practice.userpracticequestion.mapper.UserPracticeQuestionMapper;
 import com.ynfy.buss.practice.userpracticequestion.service.IUserPracticeQuestionService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @Description: 用户练习题目表
  * @Author: jeecg-boot
@@ -15,4 +18,11 @@ import org.springframework.stereotype.Service;
 @Service
 public class UserPracticeQuestionServiceImpl extends ServiceImpl<UserPracticeQuestionMapper, UserPracticeQuestion> implements IUserPracticeQuestionService {
 
+
+    @Override
+    public List<UserPracticeQuestion> listByUserPracticeId(String userPracticeId) {
+        LambdaQueryWrapper<UserPracticeQuestion> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(UserPracticeQuestion::getUserPracticeId, userPracticeId).orderByAsc(UserPracticeQuestion::getSort);
+        return list(wrapper);
+    }
 }