luohairen
2024-11-12 f18c0b3336a10bc36a9e5ca34a03b6d19c34569b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.ycl.jxkg.controller.student;
 
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
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.DoQuestionVO;
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.domain.vo.student.wrong.CheckWrongVO;
import com.ycl.jxkg.mapper.ExamPaperScoreMapper;
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.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
 
@RequiredArgsConstructor
@RestController("StudentExamPaperAnswerController")
@RequestMapping(value = "/api/student/exampaper/answer")
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;
    private final ExamPaperScoreMapper examPaperScoreMapper;
 
 
    @RequestMapping(value = "/pageList", method = RequestMethod.POST)
    public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageList(@RequestBody @Valid ExamPaperAnswerPageVO model) {
        model.setCreateUser(getCurrentUser().getId());
        PageInfo<ExamPaperAnswerPageResponseVO> page = examPaperScoreService.studentPage(model);
        return Result.ok(page);
    }
 
 
    @RequestMapping(value = "/answerSubmit", method = RequestMethod.POST)
    public Result answerSubmit(@RequestBody @Valid ExamPaperSubmitVO examPaperSubmitVO) {
        User user = getCurrentUser();
        ExamPaperAnswerInfo examPaperAnswerInfo = examPaperScoreService.calculateExamPaperAnswer(examPaperSubmitVO, user);
        if (null == examPaperAnswerInfo) {
            return Result.fail(2, "试卷不能重复做");
        }
//        ExamPaperScore examPaperScore = examPaperAnswerInfo.getExamPaperScore();
//        Integer userScore = examPaperScore.getUserScore();
//        String scoreVm = ExamUtil.scoreToVM(userScore);
//        UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date());
//        String content = user.getUserName() + " 提交试卷:" + examPaperAnswerInfo.getExamPaper().getName()
//                + " 得分:" + scoreVm
//                + " 耗时:" + ExamUtil.secondToVM(examPaperScore.getDoTime());
//        userEventLog.setContent(content);
//        eventPublisher.publishEvent(new CalculateExamPaperAnswerCompleteEvent(examPaperAnswerInfo));
//        eventPublisher.publishEvent(new UserEvent(userEventLog));
//        return Result.ok(scoreVm);
        return Result.ok();
    }
 
    @RequestMapping(value = "/edit", method = RequestMethod.POST)
    public Result edit(@RequestBody @Valid ExamPaperSubmitVO examPaperSubmitVO) {
//        boolean notJudge = examPaperSubmitVO.getAnswerItems().stream().anyMatch(i -> i.getDoRight() == null && i.getScore() == null);
//        if (notJudge) {
//            return Result.fail(2, "有未批改题目");
//        }
//
//        ExamPaperScore examPaperScore = examPaperScoreService.getById(examPaperSubmitVO.getId());
//        ExamPaperAnswerStatusEnum examPaperAnswerStatusEnum = ExamPaperAnswerStatusEnum.fromCode(examPaperScore.getStatus());
//        if (examPaperAnswerStatusEnum == ExamPaperAnswerStatusEnum.Complete) {
//            return Result.fail(3, "试卷已完成");
//        }
        String score = examPaperScoreService.judge(examPaperSubmitVO);
//        User user = getCurrentUser();
//        UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date());
//        String content = user.getUserName() + " 批改试卷:" + examPaperScore.get() + " 得分:" + score;
//        userEventLog.setContent(content);
//        eventPublisher.publishEvent(new UserEvent(userEventLog));
        return Result.ok(score);
    }
 
    @RequestMapping(value = "/read/{id}", method = RequestMethod.POST)
    public Result<ExamPaperScoreVO> read(@PathVariable Integer id) {
        ExamPaperScore examPaperScore = examPaperScoreService.getById(id);
        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);
    }
 
 
    @RequestMapping(value = "/checkWrong", method = RequestMethod.POST)
    public Result<ExamPaperScoreVO> checkWrong(@RequestBody @Valid CheckWrongVO model) {
        ExamPaperScore info = new LambdaQueryChainWrapper<>(examPaperScoreMapper)
                .eq(ExamPaperScore::getExamId, model.getExamId())
                .eq(ExamPaperScore::getUserId, getCurrentUser().getId())
                .one();
        ExamPaperScore examPaperScore = examPaperScoreService.getById(info.getId());
        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));
 
        List<PaperFixQuestionVO> collect = JSON.parseArray(examPaperScore.getPaperContent(), PaperFixQuestionVO.class).stream()
                .filter(item -> item.getQuestionType() == model.getQuestionType())
                .collect(Collectors.toList());
        List<DoQuestionVO> doQuestionVOS = new ArrayList<>();
 
        collect.stream().forEach(item -> {
            item.getQuestionList().stream().forEach(question -> {
                if (question.getId() == model.getQuestionId()) {
                    doQuestionVOS.add(question);
                }
            });
        });
        collect.stream().forEach(item -> {
            item.setQuestionList(doQuestionVOS);
        });
 
        PaperFixQuestionVO paperFixQuestionVO = new PaperFixQuestionVO();
        paperFixQuestionVO.setQuestionType(model.getQuestionType());
        examPaperScoreVO.setTitleItems(collect);
        return Result.ok(examPaperScoreVO);
    }
 
}