龚焕茏
2024-07-02 8cc9559b0a1509e655acf8f939318368a1fe95d6
feat:新增考试记录题目查看
4个文件已修改
1个文件已添加
116 ■■■■ 已修改文件
src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperScoreVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/student/exampaper/ExamPaperAnswerExportVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ExamPaperScoreMapper.xml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java
@@ -1,24 +1,28 @@
package com.ycl.jxkg.controller.admin;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.ycl.jxkg.base.BaseApiController;
import com.ycl.jxkg.base.Result;
import com.ycl.jxkg.domain.entity.ExamPaperScore;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
import com.ycl.jxkg.domain.entity.User;
import com.ycl.jxkg.domain.vo.PaperFixQuestionVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkNavbarVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperScoreVO;
import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO;
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperReadVO;
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO;
import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerExportVO;
import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO;
import com.ycl.jxkg.service.ExamPaperScoreService;
import com.ycl.jxkg.service.ExamPaperService;
import com.ycl.jxkg.service.UserService;
import com.ycl.jxkg.utils.ExcelUtils;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Objects;
@RequiredArgsConstructor
@RestController("AdminExamPaperAnswerController")
@@ -26,7 +30,7 @@
public class ExamPaperScoreController extends BaseApiController {
    private final ExamPaperScoreService examPaperScoreService;
    private final ExamPaperService examPaperService;
    private final UserService userService;
    @PostMapping("/pageExamPaper")
    public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageExamPaper(@RequestBody ExamPaperAnswerPageRequestVO model) {
@@ -46,14 +50,15 @@
    }
    @PostMapping("/read/{id}")
    public Result<ExamPaperReadVO> read(@PathVariable Integer id) {
    public Result<ExamPaperScoreVO> read(@PathVariable Integer id) {
        ExamPaperScore examPaperScore = examPaperScoreService.getById(id);
        ExamPaperReadVO vm = new ExamPaperReadVO();
        ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperScore.getPaperId());
        ExamPaperSubmitVO answer = examPaperScoreService.examPaperAnswerToVM(examPaperScore.getId());
        vm.setPaper(paper);
        vm.setAnswer(answer);
        return Result.ok(vm);
        ExamPaperScoreVO examPaperScoreVO = new ExamPaperScoreVO();
        BeanUtils.copyProperties(examPaperScore, examPaperScoreVO);
        User user = userService.getById(examPaperScore.getUserId());
        examPaperScoreVO.setUserName(Objects.nonNull(user) ? user.getRealName() : "用户已注销");
        examPaperScoreVO.setNavbar(JSON.parseArray(examPaperScore.getNavbar(), ExamPaperMarkNavbarVO.class));
        examPaperScoreVO.setTitleItems(JSON.parseArray(examPaperScore.getPaperContent(), PaperFixQuestionVO.class));
        return Result.ok(examPaperScoreVO);
    }
}
src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java
@@ -1,24 +1,29 @@
package com.ycl.jxkg.controller.student;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.ycl.jxkg.base.BaseApiController;
import com.ycl.jxkg.base.Result;
import com.ycl.jxkg.domain.ExamPaperAnswerInfo;
import com.ycl.jxkg.domain.entity.ExamPaperScore;
import com.ycl.jxkg.domain.entity.User;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperReadVO;
import com.ycl.jxkg.domain.vo.PaperFixQuestionVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkNavbarVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperScoreVO;
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO;
import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO;
import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageVO;
import com.ycl.jxkg.service.ExamPaperScoreService;
import com.ycl.jxkg.service.ExamPaperService;
import com.ycl.jxkg.service.SubjectService;
import com.ycl.jxkg.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Objects;
@RequiredArgsConstructor
@RestController("StudentExamPaperAnswerController")
@@ -26,6 +31,7 @@
public class ExamPaperAnswerController extends BaseApiController {
    private final ExamPaperScoreService examPaperScoreService;
    private final UserService userService;
    private final ExamPaperService examPaperService;
    private final SubjectService subjectService;
    private final ApplicationEventPublisher eventPublisher;
@@ -82,15 +88,15 @@
    }
    @RequestMapping(value = "/read/{id}", method = RequestMethod.POST)
    public Result<ExamPaperReadVO> read(@PathVariable Integer id) {
    public Result<ExamPaperScoreVO> read(@PathVariable Integer id) {
        ExamPaperScore examPaperScore = examPaperScoreService.getById(id);
        ExamPaperReadVO vm = new ExamPaperReadVO();
        ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperScore.getPaperId());
        ExamPaperSubmitVO answer = examPaperScoreService.examPaperAnswerToVM(examPaperScore.getId());
        vm.setPaper(paper);
        vm.setAnswer(answer);
        return Result.ok(vm);
        ExamPaperScoreVO examPaperScoreVO = new ExamPaperScoreVO();
        BeanUtils.copyProperties(examPaperScore, examPaperScoreVO);
        User user = userService.getById(examPaperScore.getUserId());
        examPaperScoreVO.setUserName(Objects.nonNull(user) ? user.getRealName() : "用户已注销");
        examPaperScoreVO.setNavbar(JSON.parseArray(examPaperScore.getNavbar(), ExamPaperMarkNavbarVO.class));
        examPaperScoreVO.setTitleItems(JSON.parseArray(examPaperScore.getPaperContent(), PaperFixQuestionVO.class));
        return Result.ok(examPaperScoreVO);
    }
}
src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperScoreVO.java
New file
@@ -0,0 +1,42 @@
package com.ycl.jxkg.domain.vo.admin.exam;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycl.jxkg.domain.vo.PaperFixQuestionVO;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
public class ExamPaperScoreVO {
    /** 考试id */
    private Integer examId;
    /** 考试名 */
    private String examName;
    /** 试卷id */
    private Integer paperId;
    /** 试卷类型 */
    private Integer paperType;
    /** 答题学生id */
    private Integer userId;
    /** 答题学生名 */
    private String userName;
    /** 做题时长 */
    private Integer doTime;
    /** 交卷时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date submitTime;
    /** 得分 */
    private BigDecimal score;
    /** 试卷总分 */
    private BigDecimal totalScore;
    /** 多选扣分类型 */
    private Integer deductType;
    /** 多选扣分参数 */
    private BigDecimal deductScore;
    /** 题目 */
    private List<PaperFixQuestionVO> titleItems;
    /** 题目集合(用于前端跳转对应题目) */
    private List<ExamPaperMarkNavbarVO> navbar;
}
src/main/java/com/ycl/jxkg/domain/vo/student/exampaper/ExamPaperAnswerExportVO.java
@@ -12,7 +12,7 @@
 */
@Data
@ColumnWidth(18)
@ColumnWidth(22)
@ContentStyle(horizontalAlignment= HorizontalAlignmentEnum.CENTER)
public class ExamPaperAnswerExportVO {
@@ -31,10 +31,10 @@
    @ExcelProperty("题目总数")
    private Integer questionCount;
    @ExcelProperty("答题时间")
    @ExcelProperty("答题时间(秒)")
    private String doTime;
    @ExcelProperty("提交时间")
    private String createTime;
    private String submitTime;
}
src/main/resources/mapper/ExamPaperScoreMapper.xml
@@ -45,13 +45,13 @@
    <select id="studentPage" resultType="com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO">
        SELECT
        a.*,
        ep.name as paperName
        ep.name AS paperName
        FROM t_exam_paper_score a
        INNER JOIN t_exam_paper ep ON ep.id = paper_id AND ep.deleted = 0
        <where>
            and user_id = #{createUser}
            AND user_id = #{createUser}
            <if test="examName != null and examName != ''">
                and INSTR(exam_name, #{examName})
                AND INSTR(exam_name, #{examName})
            </if>
        </where>
    </select>
@@ -97,7 +97,7 @@
    <select id="adminPage" resultType="com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO">
        SELECT
        a.*, b.real_name AS userName, c.name as paperName
        a.id, a.exam_name, a.score, a.total_score, a.question_correct, a.question_count, a.do_time, a.status, a.submit_time, b.real_name AS userName, c.name as paperName
        FROM t_exam_paper_score a
        INNER JOIN t_user b ON a.user_id = b.id AND b.deleted = 0
        INNER JOIN t_exam_paper c ON a.paper_id = c.id AND c.deleted = 0
@@ -121,15 +121,14 @@
        b.name AS subjectName,
        c.real_name AS userName,
        IFNULL(COUNT(DISTINCT d.id), 0) AS personAnswerNum,
        IFNULL(COUNT(DISTINCT f.id), 0) AS personTotalNum,
        IFNULL(COUNT(DISTINCT e.id), 0) AS personTotalNum,
        t.exam_name
        FROM t_exam_paper a
        INNER JOIN t_exam t ON a.id = t.exam_paper_id AND t.deleted = 0
        LEFT JOIN t_subject b ON a.subject_id = b.id AND b.deleted = 0
        LEFT JOIN t_user c ON t.teacher_id = c.id AND c.deleted = 0
        LEFT JOIN t_exam_paper_score d ON t.id = d.exam_id
        LEFT JOIN t_exam_paper_classes e ON a.id = e.exam_paper_id
        LEFT JOIN t_classes_user f ON e.classes_id = f.classes_id
        LEFT JOIN t_classes_user e ON t.classes_id = e.classes_id
        <where>
            a.deleted = 0
            <if test="subjectId != null and subjectId.size() > 0">