Commit b821e30e authored by 陈立彬's avatar 陈立彬

出题、更新评分、获取平均分接口

parent aceadaac
package cn.aibreeze.exam.api;
import cn.aibreeze.exam.dto.ApiResponse;
import cn.aibreeze.exam.dto.UpdateQuestionRequestDto;
import cn.aibreeze.exam.entity.ElehKnowledgeDo;
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 com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@RestController
......@@ -20,6 +26,10 @@ public class ExamController {
private final ElehKnowledgeMapper knowledgeMapper;
private final ElehKnowledgeTagMapper tagMapper;
private final ElehSessionQaRecordMapper qaRecordMapper;
@GetMapping(value = "/list")
public String list() {
LambdaQueryWrapper<ElehKnowledgeDo> queryWrapper = new LambdaQueryWrapper<>();
......@@ -28,4 +38,58 @@ public class ExamController {
return JSONObject.toJSONString(elehKnowledgeDos);
}
@GetMapping(value = "/get_question")
public ApiResponse<ElehKnowledgeDo> getQuestion(@RequestParam("tenant") Integer tenant,
@RequestParam("session_id") String sessionId,
@RequestParam("user_id") String userId) {
Long maxQuestionId = qaRecordMapper.selectSessionMaxQuestionId(tenant, sessionId, userId);
maxQuestionId = Objects.nonNull(maxQuestionId) ? maxQuestionId : 0;
ElehKnowledgeDo knowledgeDo = knowledgeMapper.selectQuestion(tenant, maxQuestionId);
return ApiResponse.ok(knowledgeDo);
}
@PostMapping(value = "update_question")
public ApiResponse<String> updateQuestion(@RequestBody UpdateQuestionRequestDto requestDto) {
String answer = requestDto.getAnswer();
Integer tenant = requestDto.getTenant();
String sessionId = requestDto.getSessionId();
String userId = requestDto.getUserId();
Long questionId = requestDto.getQuestionId();
ElehSessionQaRecordDo recordDo = new ElehSessionQaRecordDo();
recordDo.setQuestionId(questionId);
recordDo.setAnswer(answer);
recordDo.setTenant(tenant);
recordDo.setSessionId(sessionId);
recordDo.setUserId(userId);
recordDo.setScoreCriteria(requestDto.getScoreCriteria());
recordDo.setScore(recordDo.getScore());
recordDo.setCreatedAt(new Date());
qaRecordMapper.insert(recordDo);
return ApiResponse.ok("SUCCESS");
}
@GetMapping(value = "/get_final_result")
public ApiResponse<Double> getFinalResult(@RequestParam("tenant") Integer tenant,
@RequestParam("session_id") String sessionId,
@RequestParam("user_id") String userId) {
Double avgScore = 0D;
LambdaQueryWrapper<ElehSessionQaRecordDo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ElehSessionQaRecordDo::getTenant, tenant);
queryWrapper.eq(ElehSessionQaRecordDo::getSessionId, sessionId);
queryWrapper.eq(ElehSessionQaRecordDo::getUserId, userId);
List<ElehSessionQaRecordDo> qaRecordDos = qaRecordMapper.selectList(queryWrapper);
if(!CollectionUtils.isEmpty(qaRecordDos)) {
double sum = qaRecordDos.stream().mapToDouble(ElehSessionQaRecordDo::getScore).sum();
avgScore = sum / qaRecordDos.size();
}
return ApiResponse.ok(avgScore);
}
}
package cn.aibreeze.exam.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class ApiResponse<T> implements Serializable {
/**
* 成功编码
*/
public static final String OK = "Success";
/**
* 失败编码
*/
public static final String FAIL = "Fail";
private String message;
private String status;
private T data;
public static final <T> ApiResponse<T> ok(final T result) {
ApiResponse<T> response = new ApiResponse<>();
response.setStatus(OK);
response.setData(result);
response.setMessage("ok");
return response;
}
public static final <T> ApiResponse<T> fail(final String message) {
ApiResponse<T> response = new ApiResponse<>();
response.setStatus(FAIL);
response.setMessage(message);
return response;
}
}
package cn.aibreeze.exam.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class UpdateQuestionRequestDto implements Serializable {
private Integer tenant;
private String answer;
@JsonProperty("session_id")
private String sessionId;
@JsonProperty("user_id")
private String userId;
@JsonProperty("question_id")
private Long questionId;
@JsonProperty("text")
private String text;
@JsonProperty("text")
private Double score;
@JsonProperty("score_criteria")
private String scoreCriteria;
}
package cn.aibreeze.exam.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName(value = "eleh_knowledge_tag")
public class ElehKnowledgeTagDo implements Serializable {
@TableId(type = IdType.AUTO)
private Long id;
private Integer tenant;
private String code;
private String name;
private String reference;
private Integer status;
private Date createdAt;
}
package cn.aibreeze.exam.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName(value = "eleh_session_qa_record")
public class ElehSessionQaRecordDo implements Serializable {
@TableId(type = IdType.AUTO)
private Long id;
private Integer tenant;
private String sessionId;
private String userId;
private Long questionId;
private String answer;
private String scoreCriteria;
private Double score;
private Date createdAt;
}
......@@ -3,7 +3,13 @@ package cn.aibreeze.exam.mapper;
import cn.aibreeze.exam.entity.ElehKnowledgeDo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface ElehKnowledgeMapper extends BaseMapper<ElehKnowledgeDo> {
@Select(value = "select * from eleh_knowledge where tenant = #{tenant} and id > #{questionId} order by id ASC limit 1")
ElehKnowledgeDo selectQuestion(@Param("tenant") Integer tenant, @Param("questionId") Long questionId);
}
package cn.aibreeze.exam.mapper;
import cn.aibreeze.exam.entity.ElehKnowledgeTagDo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ElehKnowledgeTagMapper extends BaseMapper<ElehKnowledgeTagDo> {
}
package cn.aibreeze.exam.mapper;
import cn.aibreeze.exam.entity.ElehSessionQaRecordDo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
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}")
Long selectSessionMaxQuestionId(@Param("tenant") Integer tenant, @Param("sessionId") String sessionId, @Param("userId") String userId);
}
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