Commit 462d808b authored by 陈立彬's avatar 陈立彬

优化考试结果

parent 12386a01
......@@ -9,6 +9,7 @@ import cn.aibreeze.exam.mapper.ElehKnowledgeMapper;
import cn.aibreeze.exam.mapper.ElehKnowledgeTagMapper;
import cn.aibreeze.exam.mapper.ElehSessionQaRecordMapper;
import cn.aibreeze.exam.util.AliyunNLSFacade;
import cn.aibreeze.exam.util.ExamConstants;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.micrometer.common.util.StringUtils;
......@@ -142,17 +143,14 @@ public class ExamController {
recordDo.setTenant(tenant);
recordDo.setSessionId(sessionId);
recordDo.setUserId(userId);
recordDo.setType(ExamConstants.QA_RESULT_TYPE_SINGLE_QUESTION);
recordDo.setScoreCriteria(scoreCriteria);
recordDo.setScore(score);
recordDo.setCreatedAt(new Date());
qaRecordMapper.insert(recordDo);
} else {
ElehSessionQaRecordDo update = new ElehSessionQaRecordDo();
update.setQuestionId(questionId);
update.setAnswer(answer);
update.setTenant(tenant);
update.setSessionId(sessionId);
update.setUserId(userId);
update.setScoreCriteria(scoreCriteria);
update.setScore(score);
update.setId(recordDo.getId());
......@@ -176,6 +174,7 @@ public class ExamController {
queryWrapper.eq(ElehSessionQaRecordDo::getTenant, tenant);
queryWrapper.eq(ElehSessionQaRecordDo::getSessionId, sessionId);
queryWrapper.eq(ElehSessionQaRecordDo::getUserId, userId);
queryWrapper.eq(ElehSessionQaRecordDo::getType, ExamConstants.QA_RESULT_TYPE_SINGLE_QUESTION);
List<ElehSessionQaRecordDo> qaRecordDos = qaRecordMapper.selectList(queryWrapper);
if(!CollectionUtils.isEmpty(qaRecordDos)) {
totalScore = qaRecordDos.stream().filter(v -> Objects.nonNull(v.getScore())).mapToDouble(ElehSessionQaRecordDo::getScore).sum();
......@@ -291,9 +290,9 @@ public class ExamController {
@GetMapping(value = "/get_user_session_context")
public ApiResponse<String> getUserSessionContext(@RequestParam(value = "tenant") Integer tenant,
@RequestParam(value = "user_id") String userId,
@RequestParam(value = "session_id") String sessionId,
@RequestParam(value = "query") String query) {
@RequestParam(value = "user_id") String userId,
@RequestParam(value = "session_id") String sessionId,
@RequestParam(value = "query") String query) {
List<String> contextList = Lists.newArrayList();
......@@ -323,4 +322,38 @@ public class ExamController {
return ApiResponse.ok(JSONObject.toJSONString(contextList));
}
/**
* 更新最终考试结果
* @param request
* @return
*/
@PostMapping(value = "/update_exam_result")
public ApiResponse<String> updateExamResult(@RequestBody UpdateExamResultRequestDto request) {
Integer tenant = request.getTenant();
String sessionId = request.getSessionId();
String userId = request.getUserId();
String examCriteria = request.getExamCriteria();
ElehSessionQaRecordDo recordDo = qaRecordMapper.selectExamResult(tenant, sessionId, userId);
if(Objects.isNull(recordDo)) {
recordDo = new ElehSessionQaRecordDo();
recordDo.setTenant(tenant);
recordDo.setSessionId(sessionId);
recordDo.setUserId(userId);
recordDo.setType(ExamConstants.QA_RESULT_TYPE_SINGLE_EXAM);
recordDo.setExamCriteria(examCriteria);
recordDo.setCreatedAt(new Date());
qaRecordMapper.insert(recordDo);
} else {
ElehSessionQaRecordDo update = new ElehSessionQaRecordDo();
update.setExamCriteria(examCriteria);
update.setId(recordDo.getId());
qaRecordMapper.updateById(update);
}
return ApiResponse.ok("SUCCESS");
}
}
......@@ -7,6 +7,7 @@ import cn.aibreeze.exam.entity.ElehSessionQaRecordDo;
import cn.aibreeze.exam.mapper.ElehKnowledgeMapper;
import cn.aibreeze.exam.mapper.ElehKnowledgeTagMapper;
import cn.aibreeze.exam.mapper.ElehSessionQaRecordMapper;
import cn.aibreeze.exam.util.ExamConstants;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import jakarta.servlet.http.HttpServletResponse;
......@@ -14,6 +15,7 @@ import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
......@@ -83,8 +85,11 @@ public class H5Controller {
List<ElehSessionQaRecordDo> qaRecordDos = qaRecordMapper.selectList(queryWrapper);
if(!CollectionUtils.isEmpty(qaRecordDos)) {
Double totalScore = qaRecordDos.stream().filter(v -> Objects.nonNull(v.getScore())).mapToDouble(ElehSessionQaRecordDo::getScore).sum();
long examNum = qaRecordDos.stream().filter(v -> Objects.nonNull(v.getScore())).count();
List<ElehSessionQaRecordDo> userQaList = qaRecordDos.stream().filter(v -> Objects.nonNull(v.getScore())).
filter(v -> Objects.equals(v.getType(), ExamConstants.QA_RESULT_TYPE_SINGLE_QUESTION)).collect(Collectors.toList());
Double totalScore = userQaList.stream().mapToDouble(ElehSessionQaRecordDo::getScore).sum();
long examNum = userQaList.stream().count();
DecimalFormat df = new DecimalFormat("#.##");
String avgScore = df.format(totalScore / examNum);
......@@ -92,10 +97,19 @@ public class H5Controller {
out.println("<p><strong>恭喜你,考试结束了。</strong></p>");
out.println("<p><strong>你一共考了</strong> "+examNum+" <strong>道题目</strong></p>");
out.println("<p><strong>最终得分:</strong>"+avgScore+"</p>");
List<ElehSessionQaRecordDo> examResult = qaRecordDos.stream().filter(v -> Objects.equals(v.getType(), ExamConstants.QA_RESULT_TYPE_SINGLE_EXAM)).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(examResult)) {
String examCriteria = examResult.get(0).getExamCriteria();
if(StringUtils.isNotEmpty(examCriteria)) {
out.println("<p><strong>考试点评:</strong>"+examCriteria+"</p>");
}
}
out.println("<br/>");
// 数据转换
qaRecordDos.stream().forEach(v -> {
userQaList.stream().forEach(v -> {
ElehKnowledgeDo knowledgeDo = knowledgeMapper.selectById(v.getTenant(), v.getQuestionId());
......
package cn.aibreeze.exam.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class UpdateExamResultRequestDto implements Serializable {
private Integer tenant;
@JsonProperty("session_id")
private String sessionId;
@JsonProperty("user_id")
private String userId;
@JsonProperty("exam_criteria")
private String examCriteria;
}
......@@ -18,17 +18,45 @@ public class ElehSessionQaRecordDo implements Serializable {
private Integer tenant;
/**
* 会话ID
*/
private String sessionId;
/**
* 用户ID
*/
private String userId;
/**
* 题目ID
*/
private Long questionId;
/**
* 用户答案
*/
private String answer;
/**
* 得分点评
*/
private String scoreCriteria;
/**
* 用户得分
*/
private Double score;
/**
* 类型(0单题考试结果 1整场考试结果)
*/
private Integer type;
/**
* 考试总点评
*/
private String examCriteria;
private Date createdAt;
}
package cn.aibreeze.exam.mapper;
import cn.aibreeze.exam.entity.ElehSessionQaRecordDo;
import cn.aibreeze.exam.util.ExamConstants;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -10,10 +11,13 @@ import org.apache.ibatis.annotations.Select;
public interface ElehSessionQaRecordMapper extends BaseMapper<ElehSessionQaRecordDo> {
@Select(value = "select max(question_id) from eleh_session_qa_record where tenant = #{tenant} and session_id = #{sessionId} and user_id = #{userId}")
@Select(value = "select max(question_id) from eleh_session_qa_record where tenant = #{tenant} and type = 0 and session_id = #{sessionId} and user_id = #{userId}")
Long selectSessionMaxQuestionId(@Param("tenant") Integer tenant, @Param("sessionId") String sessionId, @Param("userId") String userId);
@Select(value = "select * from eleh_session_qa_record where tenant = #{tenant} and session_id = #{sessionId} and user_id = #{userId} and question_id = #{questionId}")
@Select(value = "select * from eleh_session_qa_record where tenant = #{tenant} and type = 0 and session_id = #{sessionId} and user_id = #{userId} and question_id = #{questionId}")
ElehSessionQaRecordDo selectQaRecord(@Param("tenant") Integer tenant, @Param("sessionId") String sessionId, @Param("userId") String userId, @Param("questionId") Long questionId);
@Select(value = "select * from eleh_session_qa_record where tenant = #{tenant} and session_id = #{sessionId} and user_id = #{userId} and type = 1 order by created_at desc limit 1")
ElehSessionQaRecordDo selectExamResult(@Param("tenant") Integer tenant, @Param("sessionId") String sessionId, @Param("userId") String userId);
}
package cn.aibreeze.exam.util;
import lombok.Data;
public class ExamConstants {
/**
* 单道题目
*/
public static final Integer QA_RESULT_TYPE_SINGLE_QUESTION = 0;
/**
* 整场考试
*/
public static final Integer QA_RESULT_TYPE_SINGLE_EXAM = 1;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment