From 16b4725365f3286c2d2a80945e26f35f89b53f24 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 28 六月 2024 11:37:06 +0800
Subject: [PATCH] answer表改为score表,阅卷代码

---
 src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScore.java                    |   63 +-
 src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java                    |  278 ++++++++++-
 src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java                    |    7 
 src/main/resources/mapper/ExamPaperScoreDetailMapper.xml                        |    4 
 src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java     |   15 
 src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java          |    4 
 src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java       |   20 
 src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java          |    4 
 src/main/java/com/ycl/jxkg/service/ExamPaperScoreDetailService.java             |   39 +
 src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java                         |    2 
 src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreDetailMapper.java               |   10 
 src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java                          |    2 
 src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java            |   10 
 src/main/resources/application-dev.yml                                          |    2 
 src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java    |   15 
 src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java    |   89 +-
 src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java          |  284 +++++++++++
 src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java       |   38 
 src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java         |    8 
 src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkVO.java            |   42 +
 src/main/java/com/ycl/jxkg/mapper/MeetMapper.java                               |    6 
 src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreDetailServiceImpl.java    |   46 
 src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java        |    3 
 src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java           |    4 
 src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScoreDetail.java              |    4 
 src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java                     |    8 
 src/main/java/com/ycl/jxkg/controller/admin/ExamController.java                 |    6 
 src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java                   |    6 
 /dev/null                                                                       |  283 -----------
 src/main/java/com/ycl/jxkg/service/ExamService.java                             |   12 
 src/main/java/com/ycl/jxkg/controller/student/MeetController.java               |    2 
 src/main/resources/mapper/ExamPaperScoreMapper.xml                              |    4 
 src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java |   55 +-
 src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java                      |    8 
 src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkAnswerVO.java      |    9 
 src/main/resources/mapper/ClassesUserMapper.xml                                 |    4 
 36 files changed, 867 insertions(+), 529 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java b/src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java
index ce4a0d9..7b58f91 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java
@@ -19,8 +19,8 @@
 
     private final ExamPaperService examPaperService;
     private final QuestionService questionService;
-    private final ExamPaperAnswerService examPaperAnswerService;
-    private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
+    private final ExamPaperScoreService examPaperScoreService;
+    private final ExamPaperScoreDetailService examPaperScoreDetailService;
     private final UserEventLogService userEventLogService;
 
     @RequestMapping(value = "/index", method = RequestMethod.POST)
@@ -29,8 +29,8 @@
 
         Integer examPaperCount = examPaperService.selectAllCount();
         Integer questionCount = questionService.selectAllCount();
-        Integer doExamPaperCount = examPaperAnswerService.selectAllCount();
-        Integer doQuestionCount = examPaperQuestionCustomerAnswerService.selectAllCount();
+        Integer doExamPaperCount = examPaperScoreService.selectAllCount();
+        Integer doQuestionCount = examPaperScoreDetailService.selectAllCount();
 
         vm.setExamPaperCount(examPaperCount);
         vm.setQuestionCount(questionCount);
@@ -38,7 +38,7 @@
         vm.setDoQuestionCount(doQuestionCount);
 
         List<Integer> mothDayUserActionValue = userEventLogService.selectMothCount();
-        List<Integer> mothDayDoExamQuestionValue = examPaperQuestionCustomerAnswerService.selectMothCount();
+        List<Integer> mothDayDoExamQuestionValue = examPaperScoreDetailService.selectMothCount();
         vm.setMothDayUserActionValue(mothDayUserActionValue);
         vm.setMothDayDoExamQuestionValue(mothDayDoExamQuestionValue);
 
diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ExamController.java b/src/main/java/com/ycl/jxkg/controller/admin/ExamController.java
index ac0ea48..4575b39 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/ExamController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/ExamController.java
@@ -5,6 +5,7 @@
 import com.ycl.jxkg.domain.form.ExamForm;
 import com.ycl.jxkg.domain.form.ForceSubmitForm;
 import com.ycl.jxkg.domain.query.ExamQuery;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkVO;
 import com.ycl.jxkg.group.Add;
 import com.ycl.jxkg.group.Update;
 import com.ycl.jxkg.service.ExamService;
@@ -95,6 +96,11 @@
     public Result getMarkPaperInfo(@PathVariable("examId") Integer examId, @PathVariable("userId") Integer userId) {
         return examService.getMarkPaperInfo(examId, userId);
     }
+    @PostMapping("/mark/paper")
+    @ApiOperation(value = "鎻愪氦鎵规敼", notes = "鎻愪氦鎵规敼")
+    public Result submitMarkPaper(@RequestBody ExamPaperMarkVO examPaperMark) {
+        return examService.submitMarkPaper(examPaperMark);
+    }
 
     @GetMapping("/monitor/list")
     @PreAuthorize("hasAuthority('exam:monitor:list')")
diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperAnswerController.java b/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java
similarity index 74%
rename from src/main/java/com/ycl/jxkg/controller/admin/ExamPaperAnswerController.java
rename to src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java
index 28d7d0d..8a31e74 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperAnswerController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java
@@ -3,14 +3,14 @@
 import com.github.pagehelper.PageInfo;
 import com.ycl.jxkg.base.BaseApiController;
 import com.ycl.jxkg.base.Result;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
 import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
 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.ExamPaperAnswerService;
+import com.ycl.jxkg.service.ExamPaperScoreService;
 import com.ycl.jxkg.service.ExamPaperService;
 import com.ycl.jxkg.utils.ExcelUtils;
 import lombok.RequiredArgsConstructor;
@@ -23,34 +23,34 @@
 @RequiredArgsConstructor
 @RestController("AdminExamPaperAnswerController")
 @RequestMapping(value = "/api/admin/examPaperAnswer")
-public class ExamPaperAnswerController extends BaseApiController {
+public class ExamPaperScoreController extends BaseApiController {
 
-    private final ExamPaperAnswerService examPaperAnswerService;
+    private final ExamPaperScoreService examPaperScoreService;
     private final ExamPaperService examPaperService;
 
     @PostMapping("/pageExamPaper")
     public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageExamPaper(@RequestBody ExamPaperAnswerPageRequestVO model) {
-        return Result.ok(examPaperAnswerService.pageExamPaper(model));
+        return Result.ok(examPaperScoreService.pageExamPaper(model));
     }
 
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageJudgeList(@RequestBody ExamPaperAnswerPageRequestVO model) {
-        return Result.ok(examPaperAnswerService.adminPage(model));
+        return Result.ok(examPaperScoreService.adminPage(model));
     }
 
     @RequestMapping(value = "/exportExcel", method = RequestMethod.POST)
     @SneakyThrows
     public void exportExcel(ExamPaperAnswerPageRequestVO model, HttpServletResponse response) {
-        List<ExamPaperAnswerPageResponseVO> list = examPaperAnswerService.list(model);
+        List<ExamPaperAnswerPageResponseVO> list = examPaperScoreService.list(model);
         ExcelUtils.exportExcelToTarget(response, "", "鎴愮哗鍒楄〃", list, ExamPaperAnswerExportVO.class);
     }
 
     @PostMapping("/read/{id}")
     public Result<ExamPaperReadVO> read(@PathVariable Integer id) {
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerService.getById(id);
+        ExamPaperScore examPaperScore = examPaperScoreService.getById(id);
         ExamPaperReadVO vm = new ExamPaperReadVO();
-        ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperAnswer.getExamPaperId());
-        ExamPaperSubmitVO answer = examPaperAnswerService.examPaperAnswerToVM(examPaperAnswer.getId());
+        ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperScore.getPaperId());
+        ExamPaperSubmitVO answer = examPaperScoreService.examPaperAnswerToVM(examPaperScore.getId());
         vm.setPaper(paper);
         vm.setAnswer(answer);
         return Result.ok(vm);
diff --git a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java
index f9e0cae..1f3c735 100644
--- a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java
+++ b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java
@@ -3,15 +3,14 @@
 import com.ycl.jxkg.base.BaseApiController;
 import com.ycl.jxkg.base.Result;
 import com.ycl.jxkg.domain.*;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
 import com.ycl.jxkg.domain.entity.Subject;
 import com.ycl.jxkg.domain.entity.User;
 import com.ycl.jxkg.domain.entity.UserEventLog;
-import com.ycl.jxkg.domain.vo.ExamSubmitVO;
 import com.ycl.jxkg.enums.ExamPaperAnswerStatusEnum;
 import com.ycl.jxkg.event.CalculateExamPaperAnswerCompleteEvent;
 import com.ycl.jxkg.event.UserEvent;
-import com.ycl.jxkg.service.ExamPaperAnswerService;
+import com.ycl.jxkg.service.ExamPaperScoreService;
 import com.ycl.jxkg.service.ExamPaperService;
 import com.ycl.jxkg.service.SubjectService;
 import com.ycl.jxkg.utils.DateTimeUtil;
@@ -26,7 +25,6 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -37,7 +35,7 @@
 @RequestMapping(value = "/api/student/exampaper/answer")
 public class ExamPaperAnswerController extends BaseApiController {
 
-    private final ExamPaperAnswerService examPaperAnswerService;
+    private final ExamPaperScoreService examPaperScoreService;
     private final ExamPaperService examPaperService;
     private final SubjectService subjectService;
     private final ApplicationEventPublisher eventPublisher;
@@ -46,17 +44,17 @@
     @RequestMapping(value = "/pageList", method = RequestMethod.POST)
     public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageList(@RequestBody @Valid ExamPaperAnswerPageVO model) {
         model.setCreateUser(getCurrentUser().getId());
-        PageInfo<ExamPaperAnswer> pageInfo = examPaperAnswerService.studentPage(model);
+        PageInfo<ExamPaperScore> pageInfo = examPaperScoreService.studentPage(model);
         PageInfo<ExamPaperAnswerPageResponseVO> page = PageInfoHelper.copyMap(pageInfo, e -> {
             ExamPaperAnswerPageResponseVO vo = new ExamPaperAnswerPageResponseVO();
-            BeanUtils.copyProperties(e, vo);
-            Subject subject = subjectService.getById(vo.getSubjectId());
-            vo.setDoTime(ExamUtil.secondToVM(e.getDoTime()));
-            vo.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore()));
-            vo.setUserScore(ExamUtil.scoreToVM(e.getUserScore()));
-            vo.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore()));
-            vo.setSubjectName(subject.getName());
-            vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
+//            BeanUtils.copyProperties(e, vo);
+//            Subject subject = subjectService.getById(vo.getSubjectId());
+//            vo.setDoTime(ExamUtil.secondToVM(e.getDoTime()));
+//            vo.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore()));
+//            vo.setUserScore(ExamUtil.scoreToVM(e.getUserScore()));
+//            vo.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore()));
+//            vo.setSubjectName(subject.getName());
+//            vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
             return vo;
         });
         return Result.ok(page);
@@ -66,50 +64,51 @@
     @RequestMapping(value = "/answerSubmit", method = RequestMethod.POST)
     public Result answerSubmit(@RequestBody @Valid ExamPaperSubmitVO examPaperSubmitVO) {
         User user = getCurrentUser();
-        ExamPaperAnswerInfo examPaperAnswerInfo = examPaperAnswerService.calculateExamPaperAnswer(examPaperSubmitVO, user);
+        ExamPaperAnswerInfo examPaperAnswerInfo = examPaperScoreService.calculateExamPaperAnswer(examPaperSubmitVO, user);
         if (null == examPaperAnswerInfo) {
             return Result.fail(2, "璇曞嵎涓嶈兘閲嶅鍋�");
         }
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerInfo.getExamPaperAnswer();
-        Integer userScore = examPaperAnswer.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(examPaperAnswer.getDoTime());
-        userEventLog.setContent(content);
-        eventPublisher.publishEvent(new CalculateExamPaperAnswerCompleteEvent(examPaperAnswerInfo));
-        eventPublisher.publishEvent(new UserEvent(userEventLog));
-        return Result.ok(scoreVm);
+//        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, "鏈夋湭鎵规敼棰樼洰");
-        }
-
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerService.getById(examPaperSubmitVO.getId());
-        ExamPaperAnswerStatusEnum examPaperAnswerStatusEnum = ExamPaperAnswerStatusEnum.fromCode(examPaperAnswer.getStatus());
-        if (examPaperAnswerStatusEnum == ExamPaperAnswerStatusEnum.Complete) {
-            return Result.fail(3, "璇曞嵎宸插畬鎴�");
-        }
-        String score = examPaperAnswerService.judge(examPaperSubmitVO);
-        User user = getCurrentUser();
-        UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date());
-        String content = user.getUserName() + " 鎵规敼璇曞嵎锛�" + examPaperAnswer.getPaperName() + " 寰楀垎锛�" + score;
-        userEventLog.setContent(content);
-        eventPublisher.publishEvent(new UserEvent(userEventLog));
+//        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<ExamPaperReadVO> read(@PathVariable Integer id) {
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerService.getById(id);
+        ExamPaperScore examPaperScore = examPaperScoreService.getById(id);
         ExamPaperReadVO vm = new ExamPaperReadVO();
-        ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperAnswer.getExamPaperId());
-        ExamPaperSubmitVO answer = examPaperAnswerService.examPaperAnswerToVM(examPaperAnswer.getId());
+        ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperScore.getPaperId());
+        ExamPaperSubmitVO answer = examPaperScoreService.examPaperAnswerToVM(examPaperScore.getId());
         vm.setPaper(paper);
         vm.setAnswer(answer);
         return Result.ok(vm);
diff --git a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java
index 92b7132..118c407 100644
--- a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java
+++ b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java
@@ -3,7 +3,7 @@
 import com.ycl.jxkg.base.BaseApiController;
 import com.ycl.jxkg.base.Result;
 import com.ycl.jxkg.domain.entity.ExamPaper;
-import com.ycl.jxkg.service.ExamPaperAnswerService;
+import com.ycl.jxkg.service.ExamPaperScoreService;
 import com.ycl.jxkg.service.ExamPaperService;
 import com.ycl.jxkg.utils.DateTimeUtil;
 import com.ycl.jxkg.utils.PageInfoHelper;
@@ -24,7 +24,7 @@
 public class ExamPaperController extends BaseApiController {
 
     private final ExamPaperService examPaperService;
-    private final ExamPaperAnswerService examPaperAnswerService;
+    private final ExamPaperScoreService examPaperScoreService;
     private final ApplicationEventPublisher eventPublisher;
 
     @RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
diff --git a/src/main/java/com/ycl/jxkg/controller/student/MeetController.java b/src/main/java/com/ycl/jxkg/controller/student/MeetController.java
index fc55f09..44b8272 100644
--- a/src/main/java/com/ycl/jxkg/controller/student/MeetController.java
+++ b/src/main/java/com/ycl/jxkg/controller/student/MeetController.java
@@ -37,7 +37,7 @@
     }
 
     @GetMapping("/{id}")
-    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @ApiOperation(value = "瀛︾敓涓婅", notes = "瀛︾敓涓婅")
     public Result detail(@PathVariable("id") Integer id) {
         return meetService.detail(id);
     }
diff --git a/src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java b/src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java
index 24b66b4..b5ed8dc 100644
--- a/src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java
+++ b/src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java
@@ -2,11 +2,10 @@
 
 import com.ycl.jxkg.base.BaseApiController;
 import com.ycl.jxkg.base.Result;
-import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail;
 import com.ycl.jxkg.domain.entity.Subject;
-import com.ycl.jxkg.domain.entity.TextContent;
 import com.ycl.jxkg.domain.question.QuestionObject;
-import com.ycl.jxkg.service.ExamPaperQuestionCustomerAnswerService;
+import com.ycl.jxkg.service.ExamPaperScoreDetailService;
 import com.ycl.jxkg.service.QuestionService;
 import com.ycl.jxkg.service.SubjectService;
 import com.ycl.jxkg.service.TextContentService;
@@ -29,7 +28,7 @@
 @RequestMapping(value = "/api/student/question/answer")
 public class QuestionAnswerController extends BaseApiController {
 
-    private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
+    private final ExamPaperScoreDetailService examPaperScoreDetailService;
     private final QuestionService questionService;
     private final TextContentService textContentService;
     private final SubjectService subjectService;
@@ -37,7 +36,7 @@
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     public Result<PageInfo<QuestionPageStudentResponseVO>> pageList(@RequestBody QuestionPageStudentRequestVO model) {
         model.setCreateUser(getCurrentUser().getId());
-        PageInfo<ExamPaperQuestionCustomerAnswer> pageInfo = examPaperQuestionCustomerAnswerService.studentPage(model);
+        PageInfo<ExamPaperScoreDetail> pageInfo = examPaperScoreDetailService.studentPage(model);
         PageInfo<QuestionPageStudentResponseVO> page = PageInfoHelper.copyMap(pageInfo, q -> {
             Subject subject = subjectService.getById(q.getSubjectId());
             QuestionPageStudentResponseVO vo = new QuestionPageStudentResponseVO();
@@ -56,9 +55,9 @@
     @RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
     public Result<QuestionAnswerVO> select(@PathVariable Integer id) {
         QuestionAnswerVO vm = new QuestionAnswerVO();
-        ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer = examPaperQuestionCustomerAnswerService.getById(id);
-        ExamPaperSubmitItemVO questionAnswerVM = examPaperQuestionCustomerAnswerService.examPaperQuestionCustomerAnswerToVM(examPaperQuestionCustomerAnswer);
-        QuestionEditRequestVO questionVM = questionService.getQuestionEditRequestVM(examPaperQuestionCustomerAnswer.getQuestionId());
+        ExamPaperScoreDetail examPaperScoreDetail = examPaperScoreDetailService.getById(id);
+        ExamPaperSubmitItemVO questionAnswerVM = examPaperScoreDetailService.examPaperQuestionCustomerAnswerToVM(examPaperScoreDetail);
+        QuestionEditRequestVO questionVM = questionService.getQuestionEditRequestVM(examPaperScoreDetail.getQuestionId());
         vm.setQuestionVM(questionVM);
         vm.setQuestionAnswerVM(questionAnswerVM);
         return Result.ok(vm);
diff --git a/src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java b/src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java
index 49b1487..0db13e4 100644
--- a/src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java
+++ b/src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java
@@ -3,14 +3,14 @@
 import com.ycl.jxkg.base.Result;
 import com.ycl.jxkg.controller.wx.BaseWXApiController;
 import com.ycl.jxkg.domain.*;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
 import com.ycl.jxkg.domain.entity.Subject;
 import com.ycl.jxkg.domain.entity.User;
 import com.ycl.jxkg.domain.entity.UserEventLog;
 import com.ycl.jxkg.enums.QuestionTypeEnum;
 import com.ycl.jxkg.event.CalculateExamPaperAnswerCompleteEvent;
 import com.ycl.jxkg.event.UserEvent;
-import com.ycl.jxkg.service.ExamPaperAnswerService;
+import com.ycl.jxkg.service.ExamPaperScoreService;
 import com.ycl.jxkg.service.ExamPaperService;
 import com.ycl.jxkg.service.SubjectService;
 import com.ycl.jxkg.utils.DateTimeUtil;
@@ -40,7 +40,7 @@
 @ResponseBody
 public class ExamPaperAnswerController extends BaseWXApiController {
 
-    private final ExamPaperAnswerService examPaperAnswerService;
+    private final ExamPaperScoreService examPaperScoreService;
     private final SubjectService subjectService;
     private final ApplicationEventPublisher eventPublisher;
     private final ExamPaperService examPaperService;
@@ -48,15 +48,15 @@
     @RequestMapping(value = "/pageList", method = RequestMethod.POST)
     public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageList(@Valid ExamPaperAnswerPageVO model) {
         model.setCreateUser(getCurrentUser().getId());
-        PageInfo<ExamPaperAnswer> pageInfo = examPaperAnswerService.studentPage(model);
+        PageInfo<ExamPaperScore> pageInfo = examPaperScoreService.studentPage(model);
         PageInfo<ExamPaperAnswerPageResponseVO> page = PageInfoHelper.copyMap(pageInfo, e -> {
             ExamPaperAnswerPageResponseVO vo = new ExamPaperAnswerPageResponseVO();
             BeanUtils.copyProperties(e, vo);
             Subject subject = subjectService.getById(vo.getSubjectId());
             vo.setDoTime(ExamUtil.secondToVM(e.getDoTime()));
-            vo.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore()));
-            vo.setUserScore(ExamUtil.scoreToVM(e.getUserScore()));
-            vo.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore()));
+//            vo.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore()));
+//            vo.setUserScore(ExamUtil.scoreToVM(e.getUserScore()));
+//            vo.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore()));
             vo.setSubjectName(subject.getName());
             vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
             return vo;
@@ -67,23 +67,24 @@
 
     @RequestMapping(value = "/answerSubmit", method = RequestMethod.POST)
     public Result answerSubmit(HttpServletRequest request) {
-        ExamPaperSubmitVO examPaperSubmitVO = requestToExamPaperSubmitVM(request);
-        User user = getCurrentUser();
-        ExamPaperAnswerInfo examPaperAnswerInfo = examPaperAnswerService.calculateExamPaperAnswer(examPaperSubmitVO, user);
-        if (null == examPaperAnswerInfo) {
-            return Result.fail(2, "璇曞嵎涓嶈兘閲嶅鍋�");
-        }
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerInfo.getExamPaperAnswer();
-        Integer userScore = examPaperAnswer.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(examPaperAnswer.getDoTime());
-        userEventLog.setContent(content);
-        eventPublisher.publishEvent(new CalculateExamPaperAnswerCompleteEvent(examPaperAnswerInfo));
-        eventPublisher.publishEvent(new UserEvent(userEventLog));
-        return Result.ok(scoreVm);
+//TODO:answer        ExamPaperSubmitVO examPaperSubmitVO = requestToExamPaperSubmitVM(request);
+//        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();
     }
 
     private ExamPaperSubmitVO requestToExamPaperSubmitVM(HttpServletRequest request) {
@@ -123,9 +124,9 @@
     @PostMapping(value = "/read/{id}")
     public Result<ExamPaperReadVO> read(@PathVariable Integer id) {
         ExamPaperReadVO vm = new ExamPaperReadVO();
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerService.getById(id);
-        ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperAnswer.getExamPaperId());
-        ExamPaperSubmitVO answer = examPaperAnswerService.examPaperAnswerToVM(examPaperAnswer.getId());
+        ExamPaperScore examPaperScore = examPaperScoreService.getById(id);
+        ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperScore.getPaperId());
+        ExamPaperSubmitVO answer = examPaperScoreService.examPaperAnswerToVM(examPaperScore.getId());
         vm.setPaper(paper);
         vm.setAnswer(answer);
         return Result.ok(vm);
diff --git a/src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java b/src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java
index 9e663b1..efd67a6 100644
--- a/src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java
+++ b/src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java
@@ -2,8 +2,8 @@
 
 
 import com.ycl.jxkg.domain.entity.ExamPaper;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
-import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
+import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail;
 import lombok.Data;
 
 import java.util.List;
@@ -13,8 +13,8 @@
 
     public ExamPaper examPaper;
 
-    public ExamPaperAnswer examPaperAnswer;
+    public ExamPaperScore examPaperScore;
 
-    public List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers;
+    public List<ExamPaperScoreDetail> examPaperScoreDetails;
 
 }
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java
index 9f4a0b3..ba9cd79 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java
@@ -78,7 +78,7 @@
     private BigDecimal deductTypeScore;
 
     /**
-     * 澶氶�夎瘎鍒嗗垎鏁�
+     * 棰樼洰鏍煎紡
      * */
     @TableField("content")
     private String content;
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScore.java
similarity index 60%
rename from src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java
rename to src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScore.java
index 8d0dbcf..bd7e183 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScore.java
@@ -7,50 +7,42 @@
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
-@TableName("t_exam_paper_answer")
-public class ExamPaperAnswer extends AbsEntity {
-
-    @TableField("exam_paper_id")
-    private Integer examPaperId;
-
+@TableName("t_exam_paper_score")
+public class ExamPaperScore extends AbsEntity {
     /**
-     * 璇曞嵎鍚嶇О
+     * 鑰冭瘯id
      */
-    @TableField("paper_name")
-    private String paperName;
-
+    @TableField("exam_id")
+    private Integer examId;
     /**
-     * 璇曞嵎绫诲瀷( 1鍥哄畾璇曞嵎 4.鏃舵璇曞嵎 6.浠诲姟璇曞嵎)
+     * 鑰冭瘯鍚嶇О
+     */
+    @TableField("exam_name")
+    private String examName;
+
+    @TableField("paper_id")
+    private Integer paperId;
+    /**
+     * 璇曞嵎绫诲瀷( 1鍥哄畾璇曞嵎 2闅忔満璇曞嵎 3闅忓簭璇曞嵎)
      */
     @TableField("paper_type")
     private Integer paperType;
 
     /**
-     * 瀛︾
-     */
-    @TableField("subject_id")
-    private Integer subjectId;
-
-    /**
-     * 绯荤粺鍒ゅ畾寰楀垎
-     */
-    @TableField("system_score")
-    private Integer systemScore;
-
-    /**
-     * 鏈�缁堝緱鍒�(鍗冨垎鍒�)
+     * 鏈�缁堝緱鍒�
      */
     @TableField("user_score")
-    private Integer userScore;
+    private BigDecimal userScore;
 
     /**
      * 璇曞嵎鎬诲垎
      */
     @TableField("paper_score")
-    private Integer paperScore;
+    private BigDecimal paperScore;
 
     /**
      * 鍋氬棰樼洰鏁伴噺
@@ -83,12 +75,25 @@
     private Integer createUser;
 
     /**
-     * 鎻愪氦鏃堕棿
+     * 鎵规敼浜�
+     */
+    @TableField("judge_user")
+    private Integer judgeUser;
+    /**
+     * 鎵规敼鏃堕棿
      */
     @TableField(value = "create_time", fill = FieldFill.INSERT)
     private Date createTime;
 
-    @TableField("task_exam_id")
-    private Integer taskExamId;
+    /**
+     * 浜ゅ嵎鏃堕棿
+     */
+    @TableField(value = "answer_time")
+    private Date answerTime;
 
+    /**
+     * 璇曞嵎鍐呭
+     */
+    @TableField(value = "paper_content")
+    private String paperContent;
 }
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperQuestionCustomerAnswer.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScoreDetail.java
similarity index 93%
rename from src/main/java/com/ycl/jxkg/domain/entity/ExamPaperQuestionCustomerAnswer.java
rename to src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScoreDetail.java
index 913c860..ce8e0bc 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperQuestionCustomerAnswer.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScoreDetail.java
@@ -10,8 +10,8 @@
 import java.util.Date;
 
 @Data
-@TableName("t_exam_paper_question_customer_answer")
-public class ExamPaperQuestionCustomerAnswer extends AbsEntity {
+@TableName("t_exam_paper_score_detail")
+public class ExamPaperScoreDetail extends AbsEntity {
 
     /**
      * 棰樼洰Id
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java b/src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java
index 455d8d1..134e69d 100644
--- a/src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java
+++ b/src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java
@@ -1,6 +1,5 @@
 package com.ycl.jxkg.domain.vo;
 
-import com.ycl.jxkg.domain.base.AbsVo;
 import com.ycl.jxkg.domain.question.QuestionItemObject;
 import lombok.Data;
 
@@ -46,6 +45,7 @@
     /** 闊抽鍘熷鍚� */
     private String originalFile;
 
+    private Integer itemOrder;
     /** 棰樼洰閫夐」 */
     private List<QuestionItemObject> questionItemList;
 }
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkAnswerVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkAnswerVO.java
new file mode 100644
index 0000000..298aef1
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkAnswerVO.java
@@ -0,0 +1,9 @@
+package com.ycl.jxkg.domain.vo.admin.exam;
+
+import lombok.Data;
+
+@Data
+public class ExamPaperMarkAnswerVO {
+    private Boolean right;
+    private Integer itemOrder;
+}
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkVO.java
new file mode 100644
index 0000000..35248fc
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkVO.java
@@ -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 ExamPaperMarkVO {
+    /** 鑰冭瘯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 String score;
+    /** 璇曞嵎鎬诲垎 */
+    private String totalScore;
+    /** 澶氶�夋墸鍒嗙被鍨� */
+    private Integer deductType;
+    /** 澶氶�夋墸鍒嗗弬鏁� */
+    private BigDecimal deductScore;
+    /** 棰樼洰 */
+    private List<PaperFixQuestionVO> titleItems;
+    /** 绛旀闆嗗悎(鐢ㄤ簬鍓嶇璺宠浆瀵瑰簲棰樼洰) */
+    private List<ExamPaperMarkAnswerVO> answers;
+}
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java b/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java
index 727317e..ba5775b 100644
--- a/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java
+++ b/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java
@@ -5,25 +5,26 @@
 
 import javax.validation.constraints.NotNull;
 import java.util.List;
-
+/** 绛旈 */
 @Data
 public class ExamPaperSubmitItemVO {
 
     private Integer id;
 
     @NotNull
+    /** 闂id */
     private Integer questionId;
-
+    /** 鏄惁姝g‘ */
     private Boolean doRight;
-
+    /** 浣滅瓟鍐呭 */
     private String content;
-
+    /** 鎺掑簭 */
     private Integer itemOrder;
-
+    /** 澶氶�夈�佸~绌轰綔绛旀暟缁� */
     private List<String> contentArray;
-
+    /** 杩欎釜棰樼殑寰楀垎 */
     private String score;
-
+    /** 杩欎釜棰樼殑鎬诲垎 */
     private String questionScore;
 
 }
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java b/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java
index c0fdc4d..de6ffba 100644
--- a/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java
+++ b/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java
@@ -13,9 +13,10 @@
     @NotNull
     private Integer id;
 
+    /** 鍋氶鏃堕暱 */
     @NotNull
     private Integer doTime;
-
+    /** 鎬诲緱鍒� */
     private String score;
 
     @NotNull
diff --git a/src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java b/src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java
index ee109fe..8d6fa94 100644
--- a/src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java
+++ b/src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java
@@ -12,8 +12,8 @@
 @Getter
 public enum ExamSubmitTempStatusEnum {
 
-    TEMP("temp", "涓存椂"),
-    FINISH("finish", "瀹屾垚"),
+    temp("temp", "涓存椂"),
+    finish("finish", "瀹屾垚"),
     ;
 
     @EnumValue
diff --git a/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java b/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java
index e03ff41..c005a31 100644
--- a/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java
+++ b/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java
@@ -2,14 +2,14 @@
 
 import com.ycl.jxkg.domain.*;
 import com.ycl.jxkg.domain.entity.ExamPaper;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
-import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
+import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail;
 import com.ycl.jxkg.domain.entity.TextContent;
 import com.ycl.jxkg.enums.ExamPaperTypeEnum;
 import com.ycl.jxkg.enums.QuestionTypeEnum;
 import com.ycl.jxkg.event.CalculateExamPaperAnswerCompleteEvent;
-import com.ycl.jxkg.service.ExamPaperAnswerService;
-import com.ycl.jxkg.service.ExamPaperQuestionCustomerAnswerService;
+import com.ycl.jxkg.service.ExamPaperScoreService;
+import com.ycl.jxkg.service.ExamPaperScoreDetailService;
 import com.ycl.jxkg.service.TaskExamCustomerAnswerService;
 import com.ycl.jxkg.service.TextContentService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,23 +30,23 @@
 @Component
 public class CalculateExamPaperAnswerListener implements ApplicationListener<CalculateExamPaperAnswerCompleteEvent> {
 
-    private final ExamPaperAnswerService examPaperAnswerService;
-    private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
+    private final ExamPaperScoreService examPaperScoreService;
+    private final ExamPaperScoreDetailService examPaperScoreDetailService;
     private final TextContentService textContentService;
     private final TaskExamCustomerAnswerService examCustomerAnswerService;
 
     /**
      * Instantiates a new Calculate exam paper answer listener.
      *
-     * @param examPaperAnswerService                 the exam paper answer service
-     * @param examPaperQuestionCustomerAnswerService the exam paper question customer answer service
+     * @param examPaperScoreService                 the exam paper answer service
+     * @param examPaperScoreDetailService the exam paper question customer answer service
      * @param textContentService                     the text content service
      * @param examCustomerAnswerService              the exam customer answer service
      */
     @Autowired
-    public CalculateExamPaperAnswerListener(ExamPaperAnswerService examPaperAnswerService, ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, TextContentService textContentService, TaskExamCustomerAnswerService examCustomerAnswerService) {
-        this.examPaperAnswerService = examPaperAnswerService;
-        this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService;
+    public CalculateExamPaperAnswerListener(ExamPaperScoreService examPaperScoreService, ExamPaperScoreDetailService examPaperScoreDetailService, TextContentService textContentService, TaskExamCustomerAnswerService examCustomerAnswerService) {
+        this.examPaperScoreService = examPaperScoreService;
+        this.examPaperScoreDetailService = examPaperScoreDetailService;
         this.textContentService = textContentService;
         this.examCustomerAnswerService = examCustomerAnswerService;
     }
@@ -58,11 +58,11 @@
 
         ExamPaperAnswerInfo examPaperAnswerInfo = (ExamPaperAnswerInfo) calculateExamPaperAnswerCompleteEvent.getSource();
         ExamPaper examPaper = examPaperAnswerInfo.getExamPaper();
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerInfo.getExamPaperAnswer();
-        List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperAnswerInfo.getExamPaperQuestionCustomerAnswers();
+        ExamPaperScore examPaperScore = examPaperAnswerInfo.getExamPaperScore();
+        List<ExamPaperScoreDetail> examPaperScoreDetails = examPaperAnswerInfo.getExamPaperScoreDetails();
 
-        examPaperAnswerService.save(examPaperAnswer);
-        examPaperQuestionCustomerAnswers.stream().filter(a -> QuestionTypeEnum.needSaveTextContent(a.getQuestionType())).forEach(d -> {
+        examPaperScoreService.save(examPaperScore);
+        examPaperScoreDetails.stream().filter(a -> QuestionTypeEnum.needSaveTextContent(a.getQuestionType())).forEach(d -> {
             TextContent textContent = new TextContent();
             textContent.setContent(d.getAnswer());
             textContent.setCreateTime(now);
@@ -70,14 +70,14 @@
             d.setTextContentId(textContent.getId());
             d.setAnswer(null);
         });
-        examPaperQuestionCustomerAnswers.forEach(d -> {
-            d.setExamPaperAnswerId(examPaperAnswer.getId());
+        examPaperScoreDetails.forEach(d -> {
+            d.setExamPaperAnswerId(examPaperScore.getId());
         });
-        examPaperQuestionCustomerAnswerService.insertList(examPaperQuestionCustomerAnswers);
+        examPaperScoreDetailService.insertList(examPaperScoreDetails);
 
         switch (ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
             case RandomOrder: {
-                examCustomerAnswerService.insertOrUpdate(examPaper, examPaperAnswer, now);
+                examCustomerAnswerService.insertOrUpdate(examPaper, examPaperScore, now);
                 break;
             }
             default:
diff --git a/src/main/java/com/ycl/jxkg/mapper/ExamPaperQuestionCustomerAnswerMapper.java b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreDetailMapper.java
similarity index 60%
rename from src/main/java/com/ycl/jxkg/mapper/ExamPaperQuestionCustomerAnswerMapper.java
rename to src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreDetailMapper.java
index 6a19629..637c157 100644
--- a/src/main/java/com/ycl/jxkg/mapper/ExamPaperQuestionCustomerAnswerMapper.java
+++ b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreDetailMapper.java
@@ -1,7 +1,7 @@
 package com.ycl.jxkg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail;
 import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate;
 import com.ycl.jxkg.domain.other.KeyValue;
 import com.ycl.jxkg.domain.vo.student.question.answer.QuestionPageStudentRequestVO;
@@ -12,13 +12,13 @@
 import java.util.List;
 
 @Mapper
-public interface ExamPaperQuestionCustomerAnswerMapper extends BaseMapper<ExamPaperQuestionCustomerAnswer> {
+public interface ExamPaperScoreDetailMapper extends BaseMapper<ExamPaperScoreDetail> {
 
-    List<ExamPaperQuestionCustomerAnswer> selectListByPaperAnswerId(Integer id);
+    List<ExamPaperScoreDetail> selectListByPaperAnswerId(Integer id);
 
-    List<ExamPaperQuestionCustomerAnswer> studentPage(QuestionPageStudentRequestVO requestVM);
+    List<ExamPaperScoreDetail> studentPage(QuestionPageStudentRequestVO requestVM);
 
-    int insertList(List<ExamPaperQuestionCustomerAnswer> list);
+    int insertList(List<ExamPaperScoreDetail> list);
 
     Integer selectAllCount();
 
diff --git a/src/main/java/com/ycl/jxkg/mapper/ExamPaperAnswerMapper.java b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java
similarity index 73%
rename from src/main/java/com/ycl/jxkg/mapper/ExamPaperAnswerMapper.java
rename to src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java
index a898a20..afc4227 100644
--- a/src/main/java/com/ycl/jxkg/mapper/ExamPaperAnswerMapper.java
+++ b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java
@@ -1,7 +1,7 @@
 package com.ycl.jxkg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
 import com.ycl.jxkg.domain.other.KeyValue;
 import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO;
 import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO;
@@ -13,15 +13,15 @@
 import java.util.List;
 
 @Mapper
-public interface ExamPaperAnswerMapper extends BaseMapper<ExamPaperAnswer> {
+public interface ExamPaperScoreMapper extends BaseMapper<ExamPaperScore> {
 
-    List<ExamPaperAnswer> studentPage(ExamPaperAnswerPageVO requestVM);
+    List<ExamPaperScore> studentPage(ExamPaperAnswerPageVO requestVM);
 
     Integer selectAllCount();
 
     List<KeyValue> selectCountByDate(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
 
-    ExamPaperAnswer getByPidUid(@Param("pid") Integer paperId, @Param("uid") Integer uid);
+    ExamPaperScore getByPidUid(@Param("pid") Integer paperId, @Param("uid") Integer uid);
 
     List<ExamPaperAnswerPageResponseVO> adminPage(ExamPaperAnswerPageRequestVO requestVM);
 
diff --git a/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java b/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java
index 74ae5f6..9f5c1b5 100644
--- a/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java
+++ b/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java
@@ -1,12 +1,10 @@
 package com.ycl.jxkg.mapper;
 
-import com.ycl.jxkg.domain.entity.Meet;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.jxkg.domain.entity.Meet;
 import com.ycl.jxkg.domain.query.MeetQuery;
 import com.ycl.jxkg.domain.vo.MeetVO;
-import com.ycl.jxkg.domain.form.MeetForm;
-import java.util.List;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
diff --git a/src/main/java/com/ycl/jxkg/service/ExamPaperQuestionCustomerAnswerService.java b/src/main/java/com/ycl/jxkg/service/ExamPaperQuestionCustomerAnswerService.java
deleted file mode 100644
index 2ca745e..0000000
--- a/src/main/java/com/ycl/jxkg/service/ExamPaperQuestionCustomerAnswerService.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.ycl.jxkg.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer;
-import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate;
-import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO;
-import com.ycl.jxkg.domain.vo.student.question.answer.QuestionPageStudentRequestVO;
-import com.github.pagehelper.PageInfo;
-
-import java.util.List;
-
-public interface ExamPaperQuestionCustomerAnswerService extends IService<ExamPaperQuestionCustomerAnswer> {
-
-    PageInfo<ExamPaperQuestionCustomerAnswer> studentPage(QuestionPageStudentRequestVO requestVM);
-
-    List<ExamPaperQuestionCustomerAnswer> selectListByPaperAnswerId(Integer id);
-
-    /**
-     * 璇曞嵎鎻愪氦绛旀鍏ュ簱
-     *
-     * @param examPaperQuestionCustomerAnswers List<ExamPaperQuestionCustomerAnswer>
-     */
-    void insertList(List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers);
-
-    /**
-     * 璇曞嵎闂绛旈淇℃伅杞垚ViewModel 浼犵粰鍓嶅彴
-     *
-     * @param qa ExamPaperQuestionCustomerAnswer
-     * @return ExamPaperSubmitItemVM
-     */
-    ExamPaperSubmitItemVO examPaperQuestionCustomerAnswerToVM(ExamPaperQuestionCustomerAnswer qa);
-
-
-    Integer selectAllCount();
-
-    List<Integer> selectMothCount();
-
-    int updateScore(List<ExamPaperAnswerUpdate> examPaperAnswerUpdates);
-}
diff --git a/src/main/java/com/ycl/jxkg/service/ExamPaperScoreDetailService.java b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreDetailService.java
new file mode 100644
index 0000000..3b422ed
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreDetailService.java
@@ -0,0 +1,39 @@
+package com.ycl.jxkg.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail;
+import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate;
+import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO;
+import com.ycl.jxkg.domain.vo.student.question.answer.QuestionPageStudentRequestVO;
+import com.github.pagehelper.PageInfo;
+
+import java.util.List;
+
+public interface ExamPaperScoreDetailService extends IService<ExamPaperScoreDetail> {
+
+    PageInfo<ExamPaperScoreDetail> studentPage(QuestionPageStudentRequestVO requestVM);
+
+    List<ExamPaperScoreDetail> selectListByPaperAnswerId(Integer id);
+
+    /**
+     * 璇曞嵎鎻愪氦绛旀鍏ュ簱
+     *
+     * @param examPaperScoreDetails List<ExamPaperQuestionCustomerAnswer>
+     */
+    void insertList(List<ExamPaperScoreDetail> examPaperScoreDetails);
+
+    /**
+     * 璇曞嵎闂绛旈淇℃伅杞垚ViewModel 浼犵粰鍓嶅彴
+     *
+     * @param qa ExamPaperQuestionCustomerAnswer
+     * @return ExamPaperSubmitItemVM
+     */
+    ExamPaperSubmitItemVO examPaperQuestionCustomerAnswerToVM(ExamPaperScoreDetail qa);
+
+
+    Integer selectAllCount();
+
+    List<Integer> selectMothCount();
+
+    int updateScore(List<ExamPaperAnswerUpdate> examPaperAnswerUpdates);
+}
diff --git a/src/main/java/com/ycl/jxkg/service/ExamPaperAnswerService.java b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java
similarity index 89%
rename from src/main/java/com/ycl/jxkg/service/ExamPaperAnswerService.java
rename to src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java
index 4554736..8449520 100644
--- a/src/main/java/com/ycl/jxkg/service/ExamPaperAnswerService.java
+++ b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java
@@ -3,7 +3,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.pagehelper.PageInfo;
 import com.ycl.jxkg.domain.ExamPaperAnswerInfo;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
 import com.ycl.jxkg.domain.entity.User;
 import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO;
 import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO;
@@ -12,7 +12,7 @@
 
 import java.util.List;
 
-public interface ExamPaperAnswerService extends IService<ExamPaperAnswer> {
+public interface ExamPaperScoreService extends IService<ExamPaperScore> {
 
     /**
      * 瀛︾敓鑰冭瘯璁板綍鍒嗛〉
@@ -20,7 +20,7 @@
      * @param requestVM 杩囨护鏉′欢
      * @return PageInfo<ExamPaperAnswer>
      */
-    PageInfo<ExamPaperAnswer> studentPage(ExamPaperAnswerPageVO requestVM);
+    PageInfo<ExamPaperScore> studentPage(ExamPaperAnswerPageVO requestVM);
 
     /**
      * 璁$畻璇曞嵎鎻愪氦缁撴灉(涓嶅叆搴�)
diff --git a/src/main/java/com/ycl/jxkg/service/ExamService.java b/src/main/java/com/ycl/jxkg/service/ExamService.java
index ef3882a..40a9857 100644
--- a/src/main/java/com/ycl/jxkg/service/ExamService.java
+++ b/src/main/java/com/ycl/jxkg/service/ExamService.java
@@ -8,6 +8,7 @@
 import com.ycl.jxkg.domain.form.ForceSubmitForm;
 import com.ycl.jxkg.domain.query.ExamQuery;
 import com.ycl.jxkg.domain.vo.ExamSubmitVO;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkVO;
 import com.ycl.jxkg.domain.vo.StartExamVO;
 
 import java.util.List;
@@ -118,6 +119,14 @@
     Result getMarkPaperInfo(Integer examId, Integer userId);
 
     /**
+     * 鎻愪氦闃呭嵎
+     *
+     * @param examPaperMark
+     * @return
+     */
+    Result submitMarkPaper(ExamPaperMarkVO examPaperMark);
+
+    /**
      * 鏍规嵁鑰冭瘯id鑾峰彇鐩戞帶鍒楄〃
      * @param query 鑰冭瘯id
      * @return 鐩戞帶鍒楄〃
@@ -139,4 +148,7 @@
      * @return
      */
     Result forceSubmit(ForceSubmitForm form);
+
+
+
 }
diff --git a/src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java b/src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java
index 4bd74db..7e4f63b 100644
--- a/src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java
+++ b/src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java
@@ -2,7 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ycl.jxkg.domain.entity.ExamPaper;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
 import com.ycl.jxkg.domain.entity.TaskExamCustomerAnswer;
 
 import java.util.Date;
@@ -10,7 +10,7 @@
 
 public interface TaskExamCustomerAnswerService extends IService<TaskExamCustomerAnswer> {
 
-    void insertOrUpdate(ExamPaper examPaper, ExamPaperAnswer examPaperAnswer, Date now);
+    void insertOrUpdate(ExamPaper examPaper, ExamPaperScore examPaperScore, Date now);
 
     TaskExamCustomerAnswer selectByTUid(Integer tid, Integer uid);
 
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java
deleted file mode 100644
index 6223325..0000000
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package com.ycl.jxkg.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import com.ycl.jxkg.domain.ExamPaperAnswerInfo;
-import com.ycl.jxkg.domain.entity.*;
-import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate;
-import com.ycl.jxkg.domain.other.KeyValue;
-import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO;
-import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO;
-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.enums.ExamPaperAnswerStatusEnum;
-import com.ycl.jxkg.enums.ExamPaperTypeEnum;
-import com.ycl.jxkg.enums.QuestionTypeEnum;
-import com.ycl.jxkg.mapper.ExamPaperAnswerMapper;
-import com.ycl.jxkg.mapper.ExamPaperMapper;
-import com.ycl.jxkg.mapper.QuestionMapper;
-import com.ycl.jxkg.mapper.TaskExamCustomerAnswerMapper;
-import com.ycl.jxkg.service.ExamPaperAnswerService;
-import com.ycl.jxkg.service.ExamPaperQuestionCustomerAnswerService;
-import com.ycl.jxkg.service.TextContentService;
-import com.ycl.jxkg.utils.DateTimeUtil;
-import com.ycl.jxkg.utils.ExamUtil;
-import com.ycl.jxkg.utils.JsonUtil;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-@RequiredArgsConstructor
-public class ExamPaperAnswerServiceImpl extends ServiceImpl<ExamPaperAnswerMapper , ExamPaperAnswer> implements ExamPaperAnswerService {
-
-    private final ExamPaperAnswerMapper examPaperAnswerMapper;
-    private final ExamPaperMapper examPaperMapper;
-    private final TextContentService textContentService;
-    private final QuestionMapper questionMapper;
-    private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
-    private final TaskExamCustomerAnswerMapper taskExamCustomerAnswerMapper;
-
-
-    @Override
-    public PageInfo<ExamPaperAnswer> studentPage(ExamPaperAnswerPageVO requestVM) {
-        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                examPaperAnswerMapper.studentPage(requestVM));
-    }
-
-
-    @Override
-    public ExamPaperAnswerInfo calculateExamPaperAnswer(ExamPaperSubmitVO examPaperSubmitVO, User user) {
-        ExamPaperAnswerInfo examPaperAnswerInfo = new ExamPaperAnswerInfo();
-        Date now = new Date();
-        ExamPaper examPaper = examPaperMapper.selectById(examPaperSubmitVO.getId());
-        ExamPaperTypeEnum paperTypeEnum = ExamPaperTypeEnum.fromCode(examPaper.getPaperType());
-        //浠诲姟璇曞嵎鍙兘鍋氫竴娆�
-        if (paperTypeEnum == ExamPaperTypeEnum.RandomOrder) {
-            ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.getByPidUid(examPaperSubmitVO.getId(), user.getId());
-            if (null != examPaperAnswer)
-                return null;
-        }
-        //TODO:寰呭畬鎴�
-//        String frameTextContent = textContentService.getById(examPaper.getFrameTextContentId()).getContent();
-//        List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent, ExamPaperTitleItemObject.class);
-//        List<Integer> questionIds = examPaperTitleItemObjects.stream().flatMap(t -> t.getQuestionItems().stream().map(q -> q.getId())).collect(Collectors.toList());
-//        List<Question> questions = questionMapper.selectByIds(questionIds);
-//        //灏嗛鐩粨鏋勭殑杞寲涓洪鐩瓟妗�
-//        List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperTitleItemObjects.stream()
-//                .flatMap(t -> t.getQuestionItems().stream()
-//                        .map(q -> {
-//                            Question question = questions.stream().filter(tq -> tq.getId().equals(q.getId())).findFirst().get();
-//                            ExamPaperSubmitItemVO customerQuestionAnswer = examPaperSubmitVO.getAnswerItems().stream()
-//                                    .filter(tq -> tq.getQuestionId().equals(q.getId()))
-//                                    .findFirst()
-//                                    .orElse(null);
-//                            return ExamPaperQuestionCustomerAnswerFromVM(question, customerQuestionAnswer, examPaper, q.getItemOrder(), user, now);
-//                        })
-//                ).collect(Collectors.toList());
-//
-//        ExamPaperAnswer examPaperAnswer = ExamPaperAnswerFromVM(examPaperSubmitVO, examPaper, examPaperQuestionCustomerAnswers, user, now);
-//        examPaperAnswerInfo.setExamPaper(examPaper);
-//        examPaperAnswerInfo.setExamPaperAnswer(examPaperAnswer);
-//        examPaperAnswerInfo.setExamPaperQuestionCustomerAnswers(examPaperQuestionCustomerAnswers);
-        return examPaperAnswerInfo;
-    }
-
-    @Override
-    @Transactional
-    public String judge(ExamPaperSubmitVO examPaperSubmitVO) {
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.selectById(examPaperSubmitVO.getId());
-        List<ExamPaperSubmitItemVO> judgeItems = examPaperSubmitVO.getAnswerItems().stream().filter(d -> d.getDoRight() == null).collect(Collectors.toList());
-        List<ExamPaperAnswerUpdate> examPaperAnswerUpdates = new ArrayList<>(judgeItems.size());
-        Integer customerScore = examPaperAnswer.getUserScore();
-        Integer questionCorrect = examPaperAnswer.getQuestionCorrect();
-        for (ExamPaperSubmitItemVO d : judgeItems) {
-            ExamPaperAnswerUpdate examPaperAnswerUpdate = new ExamPaperAnswerUpdate();
-            examPaperAnswerUpdate.setId(d.getId());
-            examPaperAnswerUpdate.setCustomerScore(ExamUtil.scoreFromVM(d.getScore()));
-            boolean doRight = examPaperAnswerUpdate.getCustomerScore().equals(ExamUtil.scoreFromVM(d.getQuestionScore()));
-            examPaperAnswerUpdate.setDoRight(doRight);
-            examPaperAnswerUpdates.add(examPaperAnswerUpdate);
-            customerScore += examPaperAnswerUpdate.getCustomerScore();
-            if (examPaperAnswerUpdate.getDoRight()) {
-                ++questionCorrect;
-            }
-        }
-        examPaperAnswer.setUserScore(customerScore);
-        examPaperAnswer.setQuestionCorrect(questionCorrect);
-        examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode());
-        examPaperAnswerMapper.updateById(examPaperAnswer);
-        examPaperQuestionCustomerAnswerService.updateScore(examPaperAnswerUpdates);
-
-        ExamPaperTypeEnum examPaperTypeEnum = ExamPaperTypeEnum.fromCode(examPaperAnswer.getPaperType());
-        switch (examPaperTypeEnum) {
-            case RandomOrder:
-                //TODO:寰呭畬鎴�
-                //浠诲姟璇曞嵎鎵规敼瀹屾垚鍚庯紝闇�瑕佹洿鏂颁换鍔$殑鐘舵��
-//                ExamPaper examPaper = examPaperMapper.selectById(examPaperAnswer.getExamPaperId());
-//                Integer taskId = examPaper.getTaskExamId();
-//                Integer userId = examPaperAnswer.getCreateUser();
-//                TaskExamCustomerAnswer taskExamCustomerAnswer = taskExamCustomerAnswerMapper.getByTUid(taskId, userId);
-//                TextContent textContent = textContentService.getById(taskExamCustomerAnswer.getTextContentId());
-//                List<TaskItemAnswerObject> taskItemAnswerObjects = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemAnswerObject.class);
-//                taskItemAnswerObjects.stream()
-//                        .filter(d -> d.getExamPaperAnswerId().equals(examPaperAnswer.getId()))
-//                        .findFirst().ifPresent(taskItemAnswerObject -> taskItemAnswerObject.setStatus(examPaperAnswer.getStatus()));
-//                textContentService.jsonConvertUpdate(textContent, taskItemAnswerObjects, null);
-//                textContentService.updateById(textContent);
-                break;
-            default:
-                break;
-        }
-        return ExamUtil.scoreToVM(customerScore);
-    }
-
-    @Override
-    public ExamPaperSubmitVO examPaperAnswerToVM(Integer id) {
-        ExamPaperSubmitVO examPaperSubmitVO = new ExamPaperSubmitVO();
-        ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.selectById(id);
-        examPaperSubmitVO.setId(examPaperAnswer.getId());
-        examPaperSubmitVO.setDoTime(examPaperAnswer.getDoTime());
-        examPaperSubmitVO.setScore(ExamUtil.scoreToVM(examPaperAnswer.getUserScore()));
-        List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperQuestionCustomerAnswerService.selectListByPaperAnswerId(examPaperAnswer.getId());
-        List<ExamPaperSubmitItemVO> examPaperSubmitItemVOS = examPaperQuestionCustomerAnswers.stream()
-                .map(a -> examPaperQuestionCustomerAnswerService.examPaperQuestionCustomerAnswerToVM(a))
-                .collect(Collectors.toList());
-        examPaperSubmitVO.setAnswerItems(examPaperSubmitItemVOS);
-        return examPaperSubmitVO;
-    }
-
-    @Override
-    public Integer selectAllCount() {
-        return examPaperAnswerMapper.selectAllCount();
-    }
-
-    @Override
-    public List<Integer> selectMothCount() {
-        Date startTime = DateTimeUtil.getMonthStartDay();
-        Date endTime = DateTimeUtil.getMonthEndDay();
-        List<KeyValue> mouthCount = examPaperAnswerMapper.selectCountByDate(startTime, endTime);
-        List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat();
-        return mothStartToNowFormat.stream().map(md -> {
-            KeyValue keyValue = mouthCount.stream().filter(kv -> kv.getName().equals(md)).findAny().orElse(null);
-            return null == keyValue ? 0 : keyValue.getValue();
-        }).collect(Collectors.toList());
-    }
-
-
-    /**
-     * 鐢ㄦ埛鎻愪氦绛旀鐨勮浆鍖栧瓨鍌ㄥ璞�
-     *
-     * @param question               question
-     * @param customerQuestionAnswer customerQuestionAnswer
-     * @param examPaper              examPaper
-     * @param itemOrder              itemOrder
-     * @param user                   user
-     * @param now                    now
-     * @return ExamPaperQuestionCustomerAnswer
-     */
-    private ExamPaperQuestionCustomerAnswer ExamPaperQuestionCustomerAnswerFromVM(Question question, ExamPaperSubmitItemVO customerQuestionAnswer, ExamPaper examPaper, Integer itemOrder, User user, Date now) {
-        ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer = new ExamPaperQuestionCustomerAnswer();
-        examPaperQuestionCustomerAnswer.setQuestionId(question.getId());
-        examPaperQuestionCustomerAnswer.setExamPaperId(examPaper.getId());
-        examPaperQuestionCustomerAnswer.setQuestionScore(null);
-        examPaperQuestionCustomerAnswer.setSubjectId(examPaper.getSubjectId());
-        examPaperQuestionCustomerAnswer.setItemOrder(itemOrder);
-        examPaperQuestionCustomerAnswer.setCreateTime(now);
-        examPaperQuestionCustomerAnswer.setCreateUser(user.getId());
-        examPaperQuestionCustomerAnswer.setQuestionType(question.getQuestionType());
-        examPaperQuestionCustomerAnswer.setQuestionContent(question.getContent());
-        if (null == customerQuestionAnswer) {
-            examPaperQuestionCustomerAnswer.setCustomerScore(0);
-        } else {
-            setSpecialFromVM(examPaperQuestionCustomerAnswer, question, customerQuestionAnswer);
-        }
-        return examPaperQuestionCustomerAnswer;
-    }
-
-    /**
-     * 鍒ゆ柇鎻愪氦绛旀鏄惁姝g‘锛屼繚鐣欑敤鎴锋彁浜ょ殑绛旀
-     *
-     * @param examPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer
-     * @param question                        question
-     * @param customerQuestionAnswer          customerQuestionAnswer
-     */
-    private void setSpecialFromVM(ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer, Question question, ExamPaperSubmitItemVO customerQuestionAnswer) {
-        QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperQuestionCustomerAnswer.getQuestionType());
-        switch (questionTypeEnum) {
-            case SingleChoice:
-            case TrueFalse:
-                examPaperQuestionCustomerAnswer.setAnswer(customerQuestionAnswer.getContent());
-                examPaperQuestionCustomerAnswer.setDoRight(question.getCorrect().equals(customerQuestionAnswer.getContent()));
-                examPaperQuestionCustomerAnswer.setCustomerScore(examPaperQuestionCustomerAnswer.getDoRight() ? null : 0);
-                break;
-            case MultipleChoice:
-                String customerAnswer = ExamUtil.contentToString(customerQuestionAnswer.getContentArray());
-                examPaperQuestionCustomerAnswer.setAnswer(customerAnswer);
-                examPaperQuestionCustomerAnswer.setDoRight(customerAnswer.equals(question.getCorrect()));
-                examPaperQuestionCustomerAnswer.setCustomerScore(examPaperQuestionCustomerAnswer.getDoRight() ? null : 0);
-                break;
-            case GapFilling:
-                String correctAnswer = JsonUtil.toJsonStr(customerQuestionAnswer.getContentArray());
-                examPaperQuestionCustomerAnswer.setAnswer(correctAnswer);
-                examPaperQuestionCustomerAnswer.setCustomerScore(0);
-                break;
-            default:
-                examPaperQuestionCustomerAnswer.setAnswer(customerQuestionAnswer.getContent());
-                examPaperQuestionCustomerAnswer.setCustomerScore(0);
-                break;
-        }
-    }
-
-    private ExamPaperAnswer ExamPaperAnswerFromVM(ExamPaperSubmitVO examPaperSubmitVO, ExamPaper examPaper, List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers, User user, Date now) {
-        Integer systemScore = examPaperQuestionCustomerAnswers.stream().mapToInt(a -> a.getCustomerScore()).sum();
-        long questionCorrect = examPaperQuestionCustomerAnswers.stream().filter(a -> a.getCustomerScore().equals(a.getQuestionScore())).count();
-        ExamPaperAnswer examPaperAnswer = new ExamPaperAnswer();
-        //TODO:寰呭畬鎴�
-//        examPaperAnswer.setPaperName(examPaper.getName());
-//        examPaperAnswer.setDoTime(examPaperSubmitVO.getDoTime());
-//        examPaperAnswer.setExamPaperId(examPaper.getId());
-//        examPaperAnswer.setCreateUser(user.getId());
-//        examPaperAnswer.setCreateTime(now);
-//        examPaperAnswer.setSubjectId(examPaper.getSubjectId());
-//        examPaperAnswer.setQuestionCount(examPaper.getQuestionCount());
-//        examPaperAnswer.setPaperScore(examPaper.getScore());
-//        examPaperAnswer.setPaperType(examPaper.getPaperType());
-//        examPaperAnswer.setSystemScore(systemScore);
-//        examPaperAnswer.setUserScore(systemScore);
-//        examPaperAnswer.setTaskExamId(examPaper.getTaskExamId());
-//        examPaperAnswer.setQuestionCorrect((int) questionCorrect);
-//        boolean needJudge = examPaperQuestionCustomerAnswers.stream().anyMatch(d -> QuestionTypeEnum.needSaveTextContent(d.getQuestionType()));
-//        if (needJudge) {
-//            examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.WaitJudge.getCode());
-//        } else {
-//            examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode());
-//        }
-        return examPaperAnswer;
-    }
-
-
-    @Override
-    public PageInfo<ExamPaperAnswerPageResponseVO> adminPage(ExamPaperAnswerPageRequestVO requestVM) {
-        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize()).doSelectPageInfo(() ->
-                examPaperAnswerMapper.adminPage(requestVM));
-    }
-
-    @Override
-    public List<ExamPaperAnswerPageResponseVO> list(ExamPaperAnswerPageRequestVO requestVM) {
-        return examPaperAnswerMapper.adminPage(requestVM);
-    }
-
-    @Override
-    public PageInfo<ExamPaperAnswerPageResponseVO> pageExamPaper(ExamPaperAnswerPageRequestVO model) {
-        return PageHelper.startPage(model.getPageIndex(), model.getPageSize()).doSelectPageInfo(() ->
-                examPaperAnswerMapper.pageExamPaper(model));
-    }
-}
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperQuestionCustomerAnswerServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreDetailServiceImpl.java
similarity index 63%
rename from src/main/java/com/ycl/jxkg/service/impl/ExamPaperQuestionCustomerAnswerServiceImpl.java
rename to src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreDetailServiceImpl.java
index d738ccf..8b92430 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperQuestionCustomerAnswerServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreDetailServiceImpl.java
@@ -1,13 +1,13 @@
 package com.ycl.jxkg.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail;
 import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate;
 import com.ycl.jxkg.domain.other.KeyValue;
 import com.ycl.jxkg.domain.entity.TextContent;
 import com.ycl.jxkg.enums.QuestionTypeEnum;
-import com.ycl.jxkg.mapper.ExamPaperQuestionCustomerAnswerMapper;
-import com.ycl.jxkg.service.ExamPaperQuestionCustomerAnswerService;
+import com.ycl.jxkg.mapper.ExamPaperScoreDetailMapper;
+import com.ycl.jxkg.service.ExamPaperScoreDetailService;
 import com.ycl.jxkg.service.TextContentService;
 import com.ycl.jxkg.utils.DateTimeUtil;
 import com.ycl.jxkg.utils.ExamUtil;
@@ -25,32 +25,32 @@
 
 @Service
 @RequiredArgsConstructor
-public class ExamPaperQuestionCustomerAnswerServiceImpl extends ServiceImpl<ExamPaperQuestionCustomerAnswerMapper, ExamPaperQuestionCustomerAnswer> implements ExamPaperQuestionCustomerAnswerService {
+public class ExamPaperScoreDetailServiceImpl extends ServiceImpl<ExamPaperScoreDetailMapper, ExamPaperScoreDetail> implements ExamPaperScoreDetailService {
 
-    private final ExamPaperQuestionCustomerAnswerMapper examPaperQuestionCustomerAnswerMapper;
+    private final ExamPaperScoreDetailMapper examPaperScoreDetailMapper;
     private final TextContentService textContentService;
 
 
     @Override
-    public PageInfo<ExamPaperQuestionCustomerAnswer> studentPage(QuestionPageStudentRequestVO requestVM) {
+    public PageInfo<ExamPaperScoreDetail> studentPage(QuestionPageStudentRequestVO requestVM) {
         return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                examPaperQuestionCustomerAnswerMapper.studentPage(requestVM)
+                examPaperScoreDetailMapper.studentPage(requestVM)
         );
     }
 
     @Override
-    public List<ExamPaperQuestionCustomerAnswer> selectListByPaperAnswerId(Integer id) {
-        return examPaperQuestionCustomerAnswerMapper.selectListByPaperAnswerId(id);
+    public List<ExamPaperScoreDetail> selectListByPaperAnswerId(Integer id) {
+        return examPaperScoreDetailMapper.selectListByPaperAnswerId(id);
     }
 
 
     @Override
-    public void insertList(List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers) {
-        examPaperQuestionCustomerAnswerMapper.insertList(examPaperQuestionCustomerAnswers);
+    public void insertList(List<ExamPaperScoreDetail> examPaperScoreDetails) {
+        examPaperScoreDetailMapper.insertList(examPaperScoreDetails);
     }
 
     @Override
-    public ExamPaperSubmitItemVO examPaperQuestionCustomerAnswerToVM(ExamPaperQuestionCustomerAnswer qa) {
+    public ExamPaperSubmitItemVO examPaperQuestionCustomerAnswerToVM(ExamPaperScoreDetail qa) {
         ExamPaperSubmitItemVO examPaperSubmitItemVO = new ExamPaperSubmitItemVO();
         examPaperSubmitItemVO.setId(qa.getId());
         examPaperSubmitItemVO.setQuestionId(qa.getQuestionId());
@@ -64,14 +64,14 @@
 
     @Override
     public Integer selectAllCount() {
-        return examPaperQuestionCustomerAnswerMapper.selectAllCount();
+        return examPaperScoreDetailMapper.selectAllCount();
     }
 
     @Override
     public List<Integer> selectMothCount() {
         Date startTime = DateTimeUtil.getMonthStartDay();
         Date endTime = DateTimeUtil.getMonthEndDay();
-        List<KeyValue> mouthCount = examPaperQuestionCustomerAnswerMapper.selectCountByDate(startTime, endTime);
+        List<KeyValue> mouthCount = examPaperScoreDetailMapper.selectCountByDate(startTime, endTime);
         List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat();
         return mothStartToNowFormat.stream().map(md -> {
             KeyValue keyValue = mouthCount.stream().filter(kv -> kv.getName().equals(md)).findAny().orElse(null);
@@ -81,27 +81,27 @@
 
     @Override
     public int updateScore(List<ExamPaperAnswerUpdate> examPaperAnswerUpdates) {
-        return examPaperQuestionCustomerAnswerMapper.updateScore(examPaperAnswerUpdates);
+        return examPaperScoreDetailMapper.updateScore(examPaperAnswerUpdates);
     }
 
-    private void setSpecialToVM(ExamPaperSubmitItemVO examPaperSubmitItemVO, ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer) {
-        QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperQuestionCustomerAnswer.getQuestionType());
+    private void setSpecialToVM(ExamPaperSubmitItemVO examPaperSubmitItemVO, ExamPaperScoreDetail examPaperScoreDetail) {
+        QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperScoreDetail.getQuestionType());
         switch (questionTypeEnum) {
             case MultipleChoice:
-                examPaperSubmitItemVO.setContent(examPaperQuestionCustomerAnswer.getAnswer());
-                examPaperSubmitItemVO.setContentArray(ExamUtil.contentToArray(examPaperQuestionCustomerAnswer.getAnswer()));
+                examPaperSubmitItemVO.setContent(examPaperScoreDetail.getAnswer());
+                examPaperSubmitItemVO.setContentArray(ExamUtil.contentToArray(examPaperScoreDetail.getAnswer()));
                 break;
             case GapFilling:
-                TextContent textContent = textContentService.getById(examPaperQuestionCustomerAnswer.getTextContentId());
+                TextContent textContent = textContentService.getById(examPaperScoreDetail.getTextContentId());
                 List<String> correctAnswer = JsonUtil.toJsonListObject(textContent.getContent(), String.class);
                 examPaperSubmitItemVO.setContentArray(correctAnswer);
                 break;
             default:
-                if (QuestionTypeEnum.needSaveTextContent(examPaperQuestionCustomerAnswer.getQuestionType())) {
-                    TextContent content = textContentService.getById(examPaperQuestionCustomerAnswer.getTextContentId());
+                if (QuestionTypeEnum.needSaveTextContent(examPaperScoreDetail.getQuestionType())) {
+                    TextContent content = textContentService.getById(examPaperScoreDetail.getTextContentId());
                     examPaperSubmitItemVO.setContent(content.getContent());
                 } else {
-                    examPaperSubmitItemVO.setContent(examPaperQuestionCustomerAnswer.getAnswer());
+                    examPaperSubmitItemVO.setContent(examPaperScoreDetail.getAnswer());
                 }
                 break;
         }
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java
new file mode 100644
index 0000000..baa2c7d
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java
@@ -0,0 +1,284 @@
+package com.ycl.jxkg.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ycl.jxkg.domain.ExamPaperAnswerInfo;
+import com.ycl.jxkg.domain.entity.*;
+import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate;
+import com.ycl.jxkg.domain.other.KeyValue;
+import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO;
+import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO;
+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.enums.ExamPaperAnswerStatusEnum;
+import com.ycl.jxkg.enums.ExamPaperTypeEnum;
+import com.ycl.jxkg.enums.QuestionTypeEnum;
+import com.ycl.jxkg.mapper.ExamPaperScoreMapper;
+import com.ycl.jxkg.mapper.ExamPaperMapper;
+import com.ycl.jxkg.mapper.QuestionMapper;
+import com.ycl.jxkg.mapper.TaskExamCustomerAnswerMapper;
+import com.ycl.jxkg.service.ExamPaperScoreService;
+import com.ycl.jxkg.service.ExamPaperScoreDetailService;
+import com.ycl.jxkg.service.TextContentService;
+import com.ycl.jxkg.utils.DateTimeUtil;
+import com.ycl.jxkg.utils.ExamUtil;
+import com.ycl.jxkg.utils.JsonUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+@RequiredArgsConstructor
+public class ExamPaperScoreServiceImpl extends ServiceImpl<ExamPaperScoreMapper, ExamPaperScore> implements ExamPaperScoreService {
+
+    private final ExamPaperScoreMapper examPaperScoreMapper;
+    private final ExamPaperMapper examPaperMapper;
+    private final TextContentService textContentService;
+    private final QuestionMapper questionMapper;
+    private final ExamPaperScoreDetailService examPaperScoreDetailService;
+    private final TaskExamCustomerAnswerMapper taskExamCustomerAnswerMapper;
+
+
+    @Override
+    public PageInfo<ExamPaperScore> studentPage(ExamPaperAnswerPageVO requestVM) {
+        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
+                examPaperScoreMapper.studentPage(requestVM));
+    }
+
+
+    @Override
+    public ExamPaperAnswerInfo calculateExamPaperAnswer(ExamPaperSubmitVO examPaperSubmitVO, User user) {
+        ExamPaperAnswerInfo examPaperAnswerInfo = new ExamPaperAnswerInfo();
+        Date now = new Date();
+        ExamPaper examPaper = examPaperMapper.selectById(examPaperSubmitVO.getId());
+        ExamPaperTypeEnum paperTypeEnum = ExamPaperTypeEnum.fromCode(examPaper.getPaperType());
+        //浠诲姟璇曞嵎鍙兘鍋氫竴娆�
+        if (paperTypeEnum == ExamPaperTypeEnum.RandomOrder) {
+            ExamPaperScore examPaperScore = examPaperScoreMapper.getByPidUid(examPaperSubmitVO.getId(), user.getId());
+            if (null != examPaperScore)
+                return null;
+        }
+        //TODO:寰呭畬鎴�
+//        String frameTextContent = textContentService.getById(examPaper.getFrameTextContentId()).getContent();
+//        List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent, ExamPaperTitleItemObject.class);
+//        List<Integer> questionIds = examPaperTitleItemObjects.stream().flatMap(t -> t.getQuestionItems().stream().map(q -> q.getId())).collect(Collectors.toList());
+//        List<Question> questions = questionMapper.selectByIds(questionIds);
+//        //灏嗛鐩粨鏋勭殑杞寲涓洪鐩瓟妗�
+//        List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperTitleItemObjects.stream()
+//                .flatMap(t -> t.getQuestionItems().stream()
+//                        .map(q -> {
+//                            Question question = questions.stream().filter(tq -> tq.getId().equals(q.getId())).findFirst().get();
+//                            ExamPaperSubmitItemVO customerQuestionAnswer = examPaperSubmitVO.getAnswerItems().stream()
+//                                    .filter(tq -> tq.getQuestionId().equals(q.getId()))
+//                                    .findFirst()
+//                                    .orElse(null);
+//                            return ExamPaperQuestionCustomerAnswerFromVM(question, customerQuestionAnswer, examPaper, q.getItemOrder(), user, now);
+//                        })
+//                ).collect(Collectors.toList());
+//
+//        ExamPaperAnswer examPaperAnswer = ExamPaperAnswerFromVM(examPaperSubmitVO, examPaper, examPaperQuestionCustomerAnswers, user, now);
+//        examPaperAnswerInfo.setExamPaper(examPaper);
+//        examPaperAnswerInfo.setExamPaperAnswer(examPaperAnswer);
+//        examPaperAnswerInfo.setExamPaperQuestionCustomerAnswers(examPaperQuestionCustomerAnswers);
+        return examPaperAnswerInfo;
+    }
+
+    @Override
+    @Transactional
+    public String judge(ExamPaperSubmitVO examPaperSubmitVO) {
+//        ExamPaperScore examPaperScore = examPaperScoreMapper.selectById(examPaperSubmitVO.getId());
+//        List<ExamPaperSubmitItemVO> judgeItems = examPaperSubmitVO.getAnswerItems().stream().filter(d -> d.getDoRight() == null).collect(Collectors.toList());
+//        List<ExamPaperAnswerUpdate> examPaperAnswerUpdates = new ArrayList<>(judgeItems.size());
+//        Integer customerScore = examPaperScore.getUserScore();
+//        Integer questionCorrect = examPaperScore.getQuestionCorrect();
+//        for (ExamPaperSubmitItemVO d : judgeItems) {
+//            ExamPaperAnswerUpdate examPaperAnswerUpdate = new ExamPaperAnswerUpdate();
+//            examPaperAnswerUpdate.setId(d.getId());
+//            examPaperAnswerUpdate.setCustomerScore(ExamUtil.scoreFromVM(d.getScore()));
+//            boolean doRight = examPaperAnswerUpdate.getCustomerScore().equals(ExamUtil.scoreFromVM(d.getQuestionScore()));
+//            examPaperAnswerUpdate.setDoRight(doRight);
+//            examPaperAnswerUpdates.add(examPaperAnswerUpdate);
+//            customerScore += examPaperAnswerUpdate.getCustomerScore();
+//            if (examPaperAnswerUpdate.getDoRight()) {
+//                ++questionCorrect;
+//            }
+//        }
+//        examPaperScore.setUserScore(customerScore);
+//        examPaperScore.setQuestionCorrect(questionCorrect);
+//        examPaperScore.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode());
+//        examPaperScoreMapper.updateById(examPaperScore);
+//        examPaperScoreDetailService.updateScore(examPaperAnswerUpdates);
+//
+//        ExamPaperTypeEnum examPaperTypeEnum = ExamPaperTypeEnum.fromCode(examPaperScore.getPaperType());
+//        switch (examPaperTypeEnum) {
+//            case RandomOrder:
+                //TODO:寰呭畬鎴�
+                //浠诲姟璇曞嵎鎵规敼瀹屾垚鍚庯紝闇�瑕佹洿鏂颁换鍔$殑鐘舵��
+//                ExamPaper examPaper = examPaperMapper.selectById(examPaperAnswer.getExamPaperId());
+//                Integer taskId = examPaper.getTaskExamId();
+//                Integer userId = examPaperAnswer.getCreateUser();
+//                TaskExamCustomerAnswer taskExamCustomerAnswer = taskExamCustomerAnswerMapper.getByTUid(taskId, userId);
+//                TextContent textContent = textContentService.getById(taskExamCustomerAnswer.getTextContentId());
+//                List<TaskItemAnswerObject> taskItemAnswerObjects = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemAnswerObject.class);
+//                taskItemAnswerObjects.stream()
+//                        .filter(d -> d.getExamPaperAnswerId().equals(examPaperAnswer.getId()))
+//                        .findFirst().ifPresent(taskItemAnswerObject -> taskItemAnswerObject.setStatus(examPaperAnswer.getStatus()));
+//                textContentService.jsonConvertUpdate(textContent, taskItemAnswerObjects, null);
+//                textContentService.updateById(textContent);
+//                break;
+//            default:
+//                break;
+//        }
+//        return ExamUtil.scoreToVM(customerScore);
+        return "1";
+    }
+
+    @Override
+    public ExamPaperSubmitVO examPaperAnswerToVM(Integer id) {
+        ExamPaperSubmitVO examPaperSubmitVO = new ExamPaperSubmitVO();
+//        ExamPaperScore examPaperScore = examPaperScoreMapper.selectById(id);
+//        examPaperSubmitVO.setId(examPaperScore.getId());
+//        examPaperSubmitVO.setDoTime(examPaperScore.getDoTime());
+//        examPaperSubmitVO.setScore(ExamUtil.scoreToVM(examPaperScore.getUserScore()));
+//        List<ExamPaperScoreDetail> examPaperScoreDetails = examPaperScoreDetailService.selectListByPaperAnswerId(examPaperScore.getId());
+//        List<ExamPaperSubmitItemVO> examPaperSubmitItemVOS = examPaperScoreDetails.stream()
+//                .map(a -> examPaperScoreDetailService.examPaperQuestionCustomerAnswerToVM(a))
+//                .collect(Collectors.toList());
+//        examPaperSubmitVO.setAnswerItems(examPaperSubmitItemVOS);
+        return examPaperSubmitVO;
+    }
+
+    @Override
+    public Integer selectAllCount() {
+        return examPaperScoreMapper.selectAllCount();
+    }
+
+    @Override
+    public List<Integer> selectMothCount() {
+        Date startTime = DateTimeUtil.getMonthStartDay();
+        Date endTime = DateTimeUtil.getMonthEndDay();
+        List<KeyValue> mouthCount = examPaperScoreMapper.selectCountByDate(startTime, endTime);
+        List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat();
+        return mothStartToNowFormat.stream().map(md -> {
+            KeyValue keyValue = mouthCount.stream().filter(kv -> kv.getName().equals(md)).findAny().orElse(null);
+            return null == keyValue ? 0 : keyValue.getValue();
+        }).collect(Collectors.toList());
+    }
+
+
+    /**
+     * 鐢ㄦ埛鎻愪氦绛旀鐨勮浆鍖栧瓨鍌ㄥ璞�
+     *
+     * @param question               question
+     * @param customerQuestionAnswer customerQuestionAnswer
+     * @param examPaper              examPaper
+     * @param itemOrder              itemOrder
+     * @param user                   user
+     * @param now                    now
+     * @return ExamPaperQuestionCustomerAnswer
+     */
+    private ExamPaperScoreDetail ExamPaperQuestionCustomerAnswerFromVM(Question question, ExamPaperSubmitItemVO customerQuestionAnswer, ExamPaper examPaper, Integer itemOrder, User user, Date now) {
+        ExamPaperScoreDetail examPaperScoreDetail = new ExamPaperScoreDetail();
+        examPaperScoreDetail.setQuestionId(question.getId());
+        examPaperScoreDetail.setExamPaperId(examPaper.getId());
+        examPaperScoreDetail.setQuestionScore(null);
+        examPaperScoreDetail.setSubjectId(examPaper.getSubjectId());
+        examPaperScoreDetail.setItemOrder(itemOrder);
+        examPaperScoreDetail.setCreateTime(now);
+        examPaperScoreDetail.setCreateUser(user.getId());
+        examPaperScoreDetail.setQuestionType(question.getQuestionType());
+        examPaperScoreDetail.setQuestionContent(question.getContent());
+        if (null == customerQuestionAnswer) {
+            examPaperScoreDetail.setCustomerScore(0);
+        } else {
+            setSpecialFromVM(examPaperScoreDetail, question, customerQuestionAnswer);
+        }
+        return examPaperScoreDetail;
+    }
+
+    /**
+     * 鍒ゆ柇鎻愪氦绛旀鏄惁姝g‘锛屼繚鐣欑敤鎴锋彁浜ょ殑绛旀
+     *
+     * @param examPaperScoreDetail examPaperQuestionCustomerAnswer
+     * @param question                        question
+     * @param customerQuestionAnswer          customerQuestionAnswer
+     */
+    private void setSpecialFromVM(ExamPaperScoreDetail examPaperScoreDetail, Question question, ExamPaperSubmitItemVO customerQuestionAnswer) {
+        QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperScoreDetail.getQuestionType());
+        switch (questionTypeEnum) {
+            case SingleChoice:
+            case TrueFalse:
+                examPaperScoreDetail.setAnswer(customerQuestionAnswer.getContent());
+                examPaperScoreDetail.setDoRight(question.getCorrect().equals(customerQuestionAnswer.getContent()));
+                examPaperScoreDetail.setCustomerScore(examPaperScoreDetail.getDoRight() ? null : 0);
+                break;
+            case MultipleChoice:
+                String customerAnswer = ExamUtil.contentToString(customerQuestionAnswer.getContentArray());
+                examPaperScoreDetail.setAnswer(customerAnswer);
+                examPaperScoreDetail.setDoRight(customerAnswer.equals(question.getCorrect()));
+                examPaperScoreDetail.setCustomerScore(examPaperScoreDetail.getDoRight() ? null : 0);
+                break;
+            case GapFilling:
+                String correctAnswer = JsonUtil.toJsonStr(customerQuestionAnswer.getContentArray());
+                examPaperScoreDetail.setAnswer(correctAnswer);
+                examPaperScoreDetail.setCustomerScore(0);
+                break;
+            default:
+                examPaperScoreDetail.setAnswer(customerQuestionAnswer.getContent());
+                examPaperScoreDetail.setCustomerScore(0);
+                break;
+        }
+    }
+
+    private ExamPaperScore ExamPaperAnswerFromVM(ExamPaperSubmitVO examPaperSubmitVO, ExamPaper examPaper, List<ExamPaperScoreDetail> examPaperScoreDetails, User user, Date now) {
+        Integer systemScore = examPaperScoreDetails.stream().mapToInt(a -> a.getCustomerScore()).sum();
+        long questionCorrect = examPaperScoreDetails.stream().filter(a -> a.getCustomerScore().equals(a.getQuestionScore())).count();
+        ExamPaperScore examPaperScore = new ExamPaperScore();
+        //TODO:寰呭畬鎴�
+//        examPaperAnswer.setPaperName(examPaper.getName());
+//        examPaperAnswer.setDoTime(examPaperSubmitVO.getDoTime());
+//        examPaperAnswer.setExamPaperId(examPaper.getId());
+//        examPaperAnswer.setCreateUser(user.getId());
+//        examPaperAnswer.setCreateTime(now);
+//        examPaperAnswer.setSubjectId(examPaper.getSubjectId());
+//        examPaperAnswer.setQuestionCount(examPaper.getQuestionCount());
+//        examPaperAnswer.setPaperScore(examPaper.getScore());
+//        examPaperAnswer.setPaperType(examPaper.getPaperType());
+//        examPaperAnswer.setSystemScore(systemScore);
+//        examPaperAnswer.setUserScore(systemScore);
+//        examPaperAnswer.setTaskExamId(examPaper.getTaskExamId());
+//        examPaperAnswer.setQuestionCorrect((int) questionCorrect);
+//        boolean needJudge = examPaperQuestionCustomerAnswers.stream().anyMatch(d -> QuestionTypeEnum.needSaveTextContent(d.getQuestionType()));
+//        if (needJudge) {
+//            examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.WaitJudge.getCode());
+//        } else {
+//            examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode());
+//        }
+        return examPaperScore;
+    }
+
+
+    @Override
+    public PageInfo<ExamPaperAnswerPageResponseVO> adminPage(ExamPaperAnswerPageRequestVO requestVM) {
+        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize()).doSelectPageInfo(() ->
+                examPaperScoreMapper.adminPage(requestVM));
+    }
+
+    @Override
+    public List<ExamPaperAnswerPageResponseVO> list(ExamPaperAnswerPageRequestVO requestVM) {
+        return examPaperScoreMapper.adminPage(requestVM);
+    }
+
+    @Override
+    public PageInfo<ExamPaperAnswerPageResponseVO> pageExamPaper(ExamPaperAnswerPageRequestVO model) {
+        return PageHelper.startPage(model.getPageIndex(), model.getPageSize()).doSelectPageInfo(() ->
+                examPaperScoreMapper.pageExamPaper(model));
+    }
+}
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
index ce84882..43b3573 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -2,14 +2,13 @@
 
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.jxkg.base.Result;
+import com.ycl.jxkg.base.SystemCode;
 import com.ycl.jxkg.context.WebContext;
-import com.ycl.jxkg.domain.entity.Exam;
-import com.ycl.jxkg.domain.entity.ExamPaper;
-import com.ycl.jxkg.domain.entity.ExamSubmitTemp;
-import com.ycl.jxkg.domain.entity.Question;
+import com.ycl.jxkg.domain.entity.*;
 import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO;
 import com.ycl.jxkg.domain.exam.PaperQuestionSettingDTO;
 import com.ycl.jxkg.domain.form.AddTimeForm;
@@ -18,6 +17,12 @@
 import com.ycl.jxkg.domain.query.ExamQuery;
 import com.ycl.jxkg.domain.question.QuestionObject;
 import com.ycl.jxkg.domain.vo.*;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkAnswerVO;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkVO;
+import com.ycl.jxkg.domain.vo.student.exam.ExamPaperReadVO;
+import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO;
+import com.ycl.jxkg.enums.DeductTypeEnum;
 import com.ycl.jxkg.enums.ExamPaperTypeEnum;
 import com.ycl.jxkg.enums.QuestionTypeEnum;
 import com.ycl.jxkg.enums.WebsocketCommendEnum;
@@ -27,14 +32,18 @@
 import com.ycl.jxkg.server.WebsocketServer;
 import com.ycl.jxkg.service.ExamPaperService;
 import com.ycl.jxkg.service.ExamService;
+import com.ycl.jxkg.utils.JsonUtil;
 import com.ycl.jxkg.utils.PageUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Bean;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 import org.springframework.util.StringUtils;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -56,6 +65,9 @@
     private final ExamPaperMapper examPaperMapper;
     private final ExamPaperService examPaperService;
     private final WebsocketServer websocketServer;
+    private final UserMapper userMapper;
+    private final ExamPaperScoreMapper examPaperScoreMapper;
+    private final ExamPaperScoreDetailMapper examPaperScoreDetailMapper;
 
     /**
      * 娣诲姞
@@ -124,11 +136,11 @@
         IPage<ExamVO> page = PageUtil.getPage(query, ExamVO.class);
         baseMapper.getPage(page, query, webContext.getCurrentUser().getId());
         page.getRecords().stream().forEach(item -> {
-            if (! StringUtils.hasText(item.getClassName())) {
+            if (!StringUtils.hasText(item.getClassName())) {
                 item.setClassName("鐝骇涓嶅瓨鍦ㄦ垨琚垹闄�");
                 item.setClassesId(null);
             }
-            if (! StringUtils.hasText(item.getExamPaperName())) {
+            if (!StringUtils.hasText(item.getExamPaperName())) {
                 item.setExamPaperName("璇曞嵎涓嶅瓨鍦ㄦ垨琚垹闄�");
                 item.setExamPaperId(null);
             }
@@ -191,7 +203,7 @@
             return Result.ok().data(data);
         } else if (ExamPaperTypeEnum.Random.getCode().equals(examPaper.getPaperType())) {
             // 鏍规嵁闅忔満璇曞嵎鐨勯厤缃紝闅忔満鐢熸垚瀵瑰簲棰樼洰
-            if (! StringUtils.hasText(examPaper.getContent())) {
+            if (!StringUtils.hasText(examPaper.getContent())) {
                 throw new RuntimeException("璇曞嵎閰嶇疆寮傚父锛岃鑱旂郴鑰佸笀");
             }
             List<PaperQuestionSettingDTO> paperSettingList = JSON.parseArray(examPaper.getContent(), PaperQuestionSettingDTO.class);
@@ -226,11 +238,13 @@
             }
             ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp();
             examSubmitTemp.setExamId(id);
-            examSubmitTemp.setStatus(ExamSubmitTempStatusEnum.TEMP);
+            //TODO
+            examSubmitTemp.setStatus(ExamSubmitTempStatusEnum.temp);
             examSubmitTemp.setExamSubmit(JSON.toJSONString(examData));
             examSubmitTemp.setCreateTime(new Date());
             examSubmitTemp.setUserId(webContext.getCurrentUser().getId());
-            examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.TEMP);
+            //TODO
+            examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.temp);
             examSubmitTempMapper.insert(examSubmitTemp);
             StartExamVO startExamVO = new StartExamVO();
             startExamVO.setExamName(exam.getExamName());
@@ -249,7 +263,7 @@
      * @return
      */
     private List<PaperFixQuestionVO> coverTo(ExamPaper examPaper) {
-        if (! StringUtils.hasText(examPaper.getContent())) {
+        if (!StringUtils.hasText(examPaper.getContent())) {
             throw new RuntimeException("璇曞嵎鏈厤缃鐩紝璇疯仈绯昏�佸笀");
         }
         List<PaperFixQuestionDTO> questionWarpList = JSON.parseArray(examPaper.getContent(), PaperFixQuestionDTO.class);
@@ -350,7 +364,8 @@
         // 闃呭嵎鍚庢墠寰�exam_paper_answer淇濆瓨鑰冭瘯鎴愮哗銆佷互鍙婁繚瀛樺埌exam_paper_customer_answer
         // 鐜板湪鍙渶瑕佷繚瀛樺埌涓�寮犱复鏃惰〃
         // 璇ユ帴鍙f槸涓诲姩鎻愪氦锛屾墍浠ョ姸鎬侀兘璁剧疆涓哄畬鎴愶紝浠ヤ究鍚庣画鑰佸笀闃呭嵎
-        saveTempExam(submitData, ExamSubmitTempStatusEnum.FINISH);
+        //TODO
+        saveTempExam(submitData, ExamSubmitTempStatusEnum.finish);
         return Result.ok();
     }
 
@@ -362,38 +377,45 @@
      */
     @Override
     public Result timingSubmit(StartExamVO submitData) {
-        saveTempExam(submitData, ExamSubmitTempStatusEnum.TEMP);
+        //TODO
+        saveTempExam(submitData, ExamSubmitTempStatusEnum.temp);
         return Result.ok();
     }
 
     /**
      * 淇濆瓨璇曞嵎锛氬鏋滄帴鍙f槸瀹氭椂淇濆瓨閭d箞鏄复鏃惰瘯鍗枫�傚鏋滄帴鍙f槸鑷富鎻愪氦閭d箞鏄畬鎴愯瘯鍗�
      *
-     * @param submitData  鍓嶇浼犻�掔殑璇曞嵎鏁版嵁
-     * @param status  璇曞嵎鐨勭姸鎬�
+     * @param submitData 鍓嶇浼犻�掔殑璇曞嵎鏁版嵁
+     * @param status     璇曞嵎鐨勭姸鎬�
      */
     public void saveTempExam(StartExamVO submitData, ExamSubmitTempStatusEnum status) {
         ExamSubmitTemp one = new LambdaQueryChainWrapper<>(examSubmitTempMapper)
                 .eq(ExamSubmitTemp::getExamId, submitData.getId())
                 .eq(ExamSubmitTemp::getUserId, webContext.getCurrentUser().getId())
+                .eq(ExamSubmitTemp::getDeleted,0)
                 .one();
+
         if (Objects.nonNull(one)) {
-            if (ExamSubmitTempStatusEnum.FINISH.equals(one.getStatus())) {
+            long doTimeL = one.getUpdateTime().getTime() - one.getCreateTime().getTime();
+            Integer doTime = (int) doTimeL;
+            //TODO
+            if (ExamSubmitTempStatusEnum.finish.equals(one.getStatus())) {
                 return;
             }
-            one.setDoTime(submitData.getDoTime());
+            one.setDoTime(doTime);
             one.setExamSubmit(JSON.toJSONString(submitData.getTitleList()));
-            one.setCreateTime(new Date());
+            one.setUpdateTime(new Date());
             one.setStatus(status);
             examSubmitTempMapper.updateById(one);
         } else {
             ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp();
             examSubmitTemp.setExamId(submitData.getId());
-            examSubmitTemp.setDoTime(submitData.getDoTime());
+            examSubmitTemp.setDoTime(0);
             examSubmitTemp.setStatus(status);
             examSubmitTemp.setUserId(webContext.getCurrentUser().getId());
             examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getTitleList()));
-            examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.TEMP);
+            //TODO
+            examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.temp);
             examSubmitTempMapper.insert(examSubmitTemp);
         }
     }
@@ -414,7 +436,8 @@
         // 鍙傝�冧汉鏁�
         Integer joinExamNum = examSubmitTempList.size();
         // 鍙傝�冧絾鏈畬鎴愭彁浜や汉鏁�
-        Integer joinButNotFinishedNum = Math.toIntExact(examSubmitTempList.stream().filter(item -> ExamSubmitTempStatusEnum.TEMP.equals(item.getStatus())).count());
+        //TODO
+        Integer joinButNotFinishedNum = Math.toIntExact(examSubmitTempList.stream().filter(item -> ExamSubmitTempStatusEnum.temp.equals(item.getStatus())).count());
 
         List<StudentExamInfoVO> studentExamList = classesUserMapper.getClassesUserList(exam.getClassesId());
         // 搴旇�冧汉鏁�
@@ -442,6 +465,7 @@
 
     @Override
     public Result getMarkPaperInfo(Integer examId, Integer userId) {
+        //瀛︾敓绛旈琛�
         ExamSubmitTemp userExam = new LambdaQueryChainWrapper<>(examSubmitTempMapper)
                 .eq(ExamSubmitTemp::getExamId, examId)
                 .eq(ExamSubmitTemp::getUserId, userId)
@@ -449,14 +473,214 @@
         if (Objects.isNull(userExam)) {
             throw new RuntimeException("璇ュ鍛樿�冭瘯璁板綍涓嶅瓨鍦�");
         }
-        ExamSubmitVO vo = new ExamSubmitVO();
-        vo.setExamId(userExam.getExamId());
-        vo.setDoTime(userExam.getDoTime());
-        vo.setUpdateTime(userExam.getUpdateTime());
-        if (StringUtils.hasText(userExam.getExamSubmit())) {
-            vo.setPaperQuestionList(JSON.parseArray(userExam.getExamSubmit(), PaperFixQuestionVO.class));
+        ExamVO exam = examMapper.getById(examId);
+        User student = userMapper.getUserById(userId);
+        //灏佽闃呭嵎鍩烘湰鏁版嵁
+        ExamPaperMarkVO paperMarkVO = createVO(userExam, exam, student);
+        //TODO:琛ュ厖棰樼洰绛旀銆佽В鏋�
+        List<PaperFixQuestionVO> titleItems = paperMarkVO.getTitleItems();
+        for (PaperFixQuestionVO titleItem : titleItems) {
+            for (DoQuestionVO doQuestionVO : titleItem.getQuestionList()) {
+
+            }
         }
-        return Result.ok(vo);
+        //闃呭嵎锛屽瑙傞鎵撳垎
+        Result InnerError = markPaper(paperMarkVO);
+        if (InnerError != null) return InnerError;
+
+        return Result.ok(paperMarkVO);
+    }
+    //鎻愪氦鎵规敼
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result submitMarkPaper(ExamPaperMarkVO examPaperMark) {
+        Integer userId = webContext.getCurrentUser().getId();
+        //鎻掑叆exam_paper_answer(鎴愮哗琛�)
+        ExamPaperScore examPaperScore = new ExamPaperScore();
+        BeanUtils.copyProperties(examPaperMark,examPaperScore);
+        examPaperScore.setUserScore(new BigDecimal(examPaperMark.getScore()));
+        examPaperScore.setPaperScore(new BigDecimal(examPaperMark.getTotalScore()));
+        examPaperScore.setJudgeUser(userId);
+        examPaperScore.setCreateUser(examPaperMark.getUserId());
+        examPaperScore.setAnswerTime(examPaperMark.getSubmitTime());
+        examPaperScore.setPaperContent(JSON.toJSONString(examPaperMark.getTitleItems()));
+        long questionCorrect =0;
+        long questionCount=0;
+        if(!CollectionUtils.isEmpty(examPaperMark.getAnswers())){
+            questionCorrect = examPaperMark.getAnswers().stream().filter(ExamPaperMarkAnswerVO::getRight).count();
+            questionCount = examPaperMark.getAnswers().size();
+        }
+        examPaperScore.setQuestionCorrect(Integer.valueOf(questionCorrect+""));
+        examPaperScore.setQuestionCount(Integer.valueOf(questionCount+""));
+        examPaperScoreMapper.insert(examPaperScore);
+        return Result.ok();
+    }
+
+    //闃呭嵎
+    private Result markPaper(ExamPaperMarkVO paperMarkVO) {
+        List<PaperFixQuestionVO> titleItems = paperMarkVO.getTitleItems();
+        //鍒濆鍖栭鐩簭鍙�
+        Integer num = 1;
+        List<ExamPaperMarkAnswerVO> answers = new ArrayList<>();
+        for (PaperFixQuestionVO titleItem : titleItems) {
+            for (DoQuestionVO doQuestionVO : titleItem.getQuestionList()) {
+                //鍑嗗棰樼洰搴忓彿渚涘墠绔烦杞娇鐢�
+                ExamPaperMarkAnswerVO answerVO = new ExamPaperMarkAnswerVO();
+                //鑾峰彇璇曞嵎绫诲瀷
+                Integer questionType = doQuestionVO.getQuestionType();
+                /* 濡傛灉鏄畝绛斻�佽绠椼�佸垎鏋愶紝涓嶈缃畆ight鍙缃鐩簭鍙� */
+                if (QuestionTypeEnum.ShortAnswer.getCode().equals(questionType) || QuestionTypeEnum.Calculate.getCode().equals(questionType) || QuestionTypeEnum.Analysis.getCode().equals(questionType)) {
+                    answerVO.setItemOrder(num);
+                    doQuestionVO.setItemOrder(num);
+                }
+                /* 濡傛灉鏄崟閫夈�佽闊炽�佸垽鏂�(鍒ゆ柇绛旀鏄疉銆丅) */
+                else if (QuestionTypeEnum.SingleChoice.getCode().equals(questionType) || QuestionTypeEnum.Audio.getCode().equals(questionType) || QuestionTypeEnum.TrueFalse.getCode().equals(questionType)) {
+                    answerVO.setItemOrder(num);
+                    doQuestionVO.setItemOrder(num);
+                    if (StringUtils.isEmpty(doQuestionVO.getQuestionAnswer())) {
+                        return Result.fail(SystemCode.InnerError.getCode(), doQuestionVO.getTitle() + ",姝ら鐩己灏戠瓟妗堬紝璇峰厛瀹屽杽");
+                    }
+                    trueOrFalse(doQuestionVO, answerVO, doQuestionVO.getQuestionAnswer().equals(doQuestionVO.getAnswer()));
+                }
+                /* 濡傛灉鏄閫� */
+                else if (QuestionTypeEnum.MultipleChoice.getCode().equals(questionType)) {
+                    answerVO.setItemOrder(num);
+                    doQuestionVO.setItemOrder(num);
+                    if (StringUtils.isEmpty(doQuestionVO.getQuestionAnswer())) {
+                        return Result.fail(SystemCode.InnerError.getCode(), doQuestionVO.getTitle() + ",姝ら鐩己灏戠瓟妗堬紝璇峰厛瀹屽杽");
+                    }
+                    //瀛︾敓绛旀
+                    List<String> answerList = doQuestionVO.getAnswerList();
+                    String questionAnswer = doQuestionVO.getQuestionAnswer();
+                    //棰樼洰绛旀
+                    List<String> questionAnswerList = Arrays.asList(questionAnswer.split(","));
+                    //瀛︾敓绛旀涓虹┖锛屽垽鏂负閿�
+                    if (CollectionUtils.isEmpty(answerList)) {
+                        trueOrFalse(doQuestionVO, answerVO, false);
+                        continue;
+                    }
+                    //绛旀鏁伴噺锛屼笉闇�瑕佽�冭檻椤哄簭
+                    int answerCount = answerList.size();
+                    Set<String> set1 = new HashSet<>(answerList);
+                    Set<String> set2 = new HashSet<>(questionAnswerList);
+                    //绛旀瀹屽叏涓�鑷达紝婊″垎
+                    if (set1.equals(set2)) {
+                        trueOrFalse(doQuestionVO, answerVO, true);
+                        continue;
+                    }
+                    if (paperMarkVO.getDeductType() == null) {
+                        return Result.fail(SystemCode.InnerError.getCode(), "璇曞嵎娌℃湁閰嶇疆澶氶�夊緱鍒嗙被鍨嬶紝璇疯仈绯荤鐞嗗憳");
+                    }
+                    //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 绛旈敊涓嶅緱鍒�
+                    if (Integer.valueOf(DeductTypeEnum.AllCorrect.getCode()).equals(paperMarkVO.getDeductType())) {
+                        trueOrFalse(doQuestionVO, answerVO, false);
+                    }
+                    //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 婕忛�夊緱鍥哄畾鍒嗗��,鍖呭惈閿欒閫夐」涓嶅緱鍒�
+                    else if (Integer.valueOf(DeductTypeEnum.PartCorrect.getCode()).equals(paperMarkVO.getDeductType())) {
+                        //瀛︾敓绛旀绉婚櫎鎵�鏈夋纭瓟妗堬紝濡傛灉杩樻湁鍏冪礌璇存槑鍖呭惈閿欒閫夐」
+                        answerList.removeAll(questionAnswerList);
+                        if (!CollectionUtils.isEmpty(answerList)) {
+                            trueOrFalse(doQuestionVO, answerVO, false);
+                        } else {
+                            answerVO.setRight(false);
+                            doQuestionVO.setRight(false);
+                            //婕忛�夊緱鍥哄畾鍒�
+                            doQuestionVO.setScore(paperMarkVO.getDeductScore());
+                        }
+                    }
+                    //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 姣忓涓�棰樺緱鐩稿簲鍒嗗��,鍖呭惈閿欒閫夐」涓嶅緱鍒�
+                    else if (Integer.valueOf(DeductTypeEnum.EachCorrect.getCode()).equals(paperMarkVO.getDeductType())) {
+                        //瀛︾敓绛旀绉婚櫎鎵�鏈夋纭瓟妗堬紝濡傛灉杩樻湁鍏冪礌璇存槑鍖呭惈閿欒閫夐」
+                        answerList.removeAll(questionAnswerList);
+                        if (!CollectionUtils.isEmpty(answerList)) {
+                            trueOrFalse(doQuestionVO, answerVO, false);
+                        } else {
+                            answerVO.setRight(false);
+                            doQuestionVO.setRight(false);
+                            //婕忛�夊緱鍒�
+                            doQuestionVO.setScore(paperMarkVO.getDeductScore().multiply(new BigDecimal(answerCount)));
+                        }
+                    }
+                }
+                /* 濡傛灉鏄~绌� */
+                else if (QuestionTypeEnum.GapFilling.getCode().equals(questionType)) {
+                    answerVO.setItemOrder(num);
+                    doQuestionVO.setItemOrder(num);
+                    if (StringUtils.isEmpty(doQuestionVO.getQuestionAnswer())) {
+                        return Result.fail(SystemCode.InnerError.getCode(), doQuestionVO.getTitle() + ",姝ら鐩己灏戠瓟妗堬紝璇峰厛瀹屽杽");
+                    }
+                    //瀛︾敓绛旀
+                    List<String> answerList = doQuestionVO.getAnswerList();
+                    String questionAnswer = doQuestionVO.getQuestionAnswer();
+                    //棰樼洰绛旀
+                    List<String> questionAnswerList = Arrays.asList(questionAnswer.split(","));
+                    //瀛︾敓绛旀涓虹┖锛屽垽鏂负閿�
+                    if (CollectionUtils.isEmpty(answerList)) {
+                        trueOrFalse(doQuestionVO, answerVO, false);
+                        continue;
+                    }
+                    //鎬荤┖鐨勬暟閲�
+                    int questionAnswerCount = questionAnswerList.size();
+                    //绛旀瀹屽叏涓�鑷达紝婊″垎
+                    if (answerList.equals(questionAnswerList)) {
+                        trueOrFalse(doQuestionVO, answerVO, true);
+                    } else {
+                        answerVO.setRight(false);
+                        doQuestionVO.setRight(false);
+                        //鍋氬鐨勬暟閲�,闇�瑕佹寜椤哄簭姣旇緝
+                        int count = 0;
+                        for (int i = 0; i < answerList.size(); i++) {
+                            if(answerList.get(i).equals(questionAnswerList.get(i))){
+                                count++;
+                            }
+                        }
+                        //杩欎釜棰樼殑鎬诲垎
+                        BigDecimal questionScore = doQuestionVO.getQuestionScore();
+                        //姣忎釜绌虹殑鍒嗘暟
+                        BigDecimal scoreEach = questionScore.divide(new BigDecimal(questionAnswerCount), 1, RoundingMode.DOWN);
+                        BigDecimal score = scoreEach.multiply(new BigDecimal(count));
+                        doQuestionVO.setScore(score);
+                    }
+
+                }
+                num++;
+                answers.add(answerVO);
+            }
+        }
+        paperMarkVO.setAnswers(answers);
+        return null;
+    }
+
+    //璁剧疆鍏ㄥ鎴栧叏閿�
+    private void trueOrFalse(DoQuestionVO doQuestionVO, ExamPaperMarkAnswerVO answerVO, Boolean isCorrect) {
+        if (isCorrect) {
+            //姝g‘
+            answerVO.setRight(isCorrect);
+            doQuestionVO.setRight(isCorrect);
+            doQuestionVO.setScore(doQuestionVO.getQuestionScore());
+        } else {
+            //閿欒
+            answerVO.setRight(isCorrect);
+            doQuestionVO.setRight(isCorrect);
+            doQuestionVO.setScore(BigDecimal.ZERO);
+        }
+    }
+
+    //灏佽闃呭嵎杩斿洖鏁版嵁
+    private ExamPaperMarkVO createVO(ExamSubmitTemp userExam, ExamVO exam, User student) {
+        ExamPaperMarkVO paperMarkVO = new ExamPaperMarkVO();
+        BeanUtils.copyProperties(userExam, paperMarkVO);
+        paperMarkVO.setPaperId(exam.getExamPaperId());
+        //TODO: 璇曞嵎鎬诲垎銆�(澶氶�夊緱鍒嗙被鍨嬨�佸閫夊緱鍒嗗垎鏁�)闇�瑕佸彇ExamSubmitTemp
+        paperMarkVO.setExamName(exam.getExamName());
+        paperMarkVO.setPaperType(exam.getExamPaperType());
+        paperMarkVO.setSubmitTime(userExam.getUpdateTime());
+        paperMarkVO.setUserName(student.getRealName());
+        paperMarkVO.setTitleItems(JSON.parseArray(userExam.getExamSubmit(), PaperFixQuestionVO.class));
+        paperMarkVO.setTotalScore("100");
+        paperMarkVO.setDeductType(DeductTypeEnum.AllCorrect.getCode());
+        paperMarkVO.setDeductScore(BigDecimal.ZERO);
+        return paperMarkVO;
     }
 
     @Override
diff --git a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
index 1dcefdb..77687d9 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson2.JSONArray;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.jxkg.base.SystemCode;
 import com.ycl.jxkg.context.WebContext;
 import com.ycl.jxkg.domain.entity.Meet;
 import com.ycl.jxkg.enums.MeetStatusEnum;
@@ -140,7 +141,11 @@
     public Result detail(Integer id) {
         MeetVO vo = baseMapper.getById(id);
         Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
-        return Result.ok().data(vo);
+        if(vo.getStatus().equals(MeetStatusEnum.Starting.getCode())){
+            return Result.ok();
+        }else {
+            return Result.fail(SystemCode.InnerError.getCode(),"鎴块棿灏氭湭寮�濮嬫垨宸茬粨鏉�");
+        }
     }
 
     /**
diff --git a/src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java b/src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java
index 4f01acf..9983648 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java
@@ -2,18 +2,14 @@
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.jxkg.domain.entity.ExamPaper;
-import com.ycl.jxkg.domain.entity.ExamPaperAnswer;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
 import com.ycl.jxkg.domain.entity.TaskExamCustomerAnswer;
-import com.ycl.jxkg.domain.entity.TextContent;
-import com.ycl.jxkg.domain.task.TaskItemAnswerObject;
 import com.ycl.jxkg.mapper.TaskExamCustomerAnswerMapper;
 import com.ycl.jxkg.service.TaskExamCustomerAnswerService;
 import com.ycl.jxkg.service.TextContentService;
-import com.ycl.jxkg.utils.JsonUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -25,7 +21,7 @@
     private final TextContentService textContentService;
 
     @Override
-    public void insertOrUpdate(ExamPaper examPaper, ExamPaperAnswer examPaperAnswer, Date now) {
+    public void insertOrUpdate(ExamPaper examPaper, ExamPaperScore examPaperScore, Date now) {
         //TODO:寰呭畬鎴�
 //        Integer taskId = examPaper.getTaskExamId();
 //        Integer userId = examPaperAnswer.getCreateUser();
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index aa3c857..3805adb 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -3,7 +3,7 @@
 
 upload:
   # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
-  url: E:/ycl/file
+  url: D:/ycl/file
 
 spring:
   datasource:
diff --git a/src/main/resources/mapper/ClassesUserMapper.xml b/src/main/resources/mapper/ClassesUserMapper.xml
index 50f6152..913abe2 100644
--- a/src/main/resources/mapper/ClassesUserMapper.xml
+++ b/src/main/resources/mapper/ClassesUserMapper.xml
@@ -18,10 +18,10 @@
         <result column="real_name" property="realName"/>
         <result column="do_time" property="doTime"/>
         <result column="exam_submit" property="examSubmit"/>
-        <result column="status" property="status" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
+        <result column="status" property="status" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
         <result column="phone" property="phone"/>
         <result column="update_time" property="updateTime"/>
-        <result column="mark_paper_status" property="markPaperStatus" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
+        <result column="mark_paper_status" property="markPaperStatus" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
     </resultMap>
 
 
diff --git a/src/main/resources/mapper/ExamPaperQuestionCustomerAnswerMapper.xml b/src/main/resources/mapper/ExamPaperScoreDetailMapper.xml
similarity index 97%
rename from src/main/resources/mapper/ExamPaperQuestionCustomerAnswerMapper.xml
rename to src/main/resources/mapper/ExamPaperScoreDetailMapper.xml
index e2e9067..9be9822 100644
--- a/src/main/resources/mapper/ExamPaperQuestionCustomerAnswerMapper.xml
+++ b/src/main/resources/mapper/ExamPaperScoreDetailMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ycl.jxkg.mapper.ExamPaperQuestionCustomerAnswerMapper">
-    <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer">
+<mapper namespace="com.ycl.jxkg.mapper.ExamPaperScoreDetailMapper">
+    <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaperScoreDetail">
         <id column="id" jdbcType="INTEGER" property="id"/>
         <result column="question_id" jdbcType="INTEGER" property="questionId"/>
         <result column="exam_paper_id" jdbcType="INTEGER" property="examPaperId"/>
diff --git a/src/main/resources/mapper/ExamPaperAnswerMapper.xml b/src/main/resources/mapper/ExamPaperScoreMapper.xml
similarity index 98%
rename from src/main/resources/mapper/ExamPaperAnswerMapper.xml
rename to src/main/resources/mapper/ExamPaperScoreMapper.xml
index aa22944..e96bfef 100644
--- a/src/main/resources/mapper/ExamPaperAnswerMapper.xml
+++ b/src/main/resources/mapper/ExamPaperScoreMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ycl.jxkg.mapper.ExamPaperAnswerMapper">
-    <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaperAnswer">
+<mapper namespace="com.ycl.jxkg.mapper.ExamPaperScoreMapper">
+    <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaperScore">
         <id column="id" jdbcType="INTEGER" property="id"/>
         <result column="exam_paper_id" jdbcType="INTEGER" property="examPaperId"/>
         <result column="paper_name" jdbcType="VARCHAR" property="paperName"/>

--
Gitblit v1.8.0