Răsfoiți Sursa

网考存小题分

xiatian 7 luni în urmă
părinte
comite
0ca94d22c5

+ 41 - 50
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/controller/ExamRecordQuestionsController.java

@@ -1,13 +1,8 @@
 package cn.com.qmth.examcloud.core.oe.admin.api.controller;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 import org.apache.commons.collections.CollectionUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -21,11 +16,6 @@ import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamQuestionEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordQuestionsEntity;
 import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordDataSyncService;
 import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordQuestionsService;
-import cn.com.qmth.examcloud.core.oe.admin.service.MarkResultService;
-import cn.com.qmth.examcloud.marking.api.StudentPaperCloudService;
-import cn.com.qmth.examcloud.marking.api.bean.SubjectiveScoreBean;
-import cn.com.qmth.examcloud.marking.api.request.GetSubjectiveScoreReq;
-import cn.com.qmth.examcloud.marking.api.response.GetSubjectiveScoreResp;
 import cn.com.qmth.examcloud.question.commons.core.question.QuestionType;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import io.swagger.annotations.Api;
@@ -41,19 +31,17 @@ import io.swagger.annotations.ApiOperation;
 @RequestMapping("${$rmp.ctr.oe}/examRecordQuestions")
 public class ExamRecordQuestionsController extends ControllerSupport {
 
-    private static final Logger log = LoggerFactory.getLogger(ExamRecordQuestionsController.class);
+    // private static final Logger log =
+    // LoggerFactory.getLogger(ExamRecordQuestionsController.class);
 
     @Autowired
     private ExamRecordQuestionsService examRecordQuestionsService;
 
-    @Autowired
-    private MarkResultService markResultService;
-
     @Autowired
     private ExamRecordDataSyncService examRecordDataSyncService;
 
-    @Autowired
-    private StudentPaperCloudService studentPaperCloudService;
+    // @Autowired
+    // private StudentPaperCloudService studentPaperCloudService;
 
     @ApiOperation(value = "获取交卷之后的所有试题作答信息")
     @GetMapping("/getExamRecordQuestions")
@@ -75,21 +63,24 @@ public class ExamRecordQuestionsController extends ControllerSupport {
             if (CollectionUtils.isEmpty(examQuestions)) {
                 return result;
             }
-
-            Map<Integer, Double> subjectiveScores = this.loadSubjectiveScores(examRecordDataId);
-            for (ExamQuestionEntity examQuestion : examQuestions) {
-                if (QuestionType.isObjective(examQuestion.getQuestionType())) {
-                    // 客观题得分
-                    if (QuestionOptionHelper.isEqualAnswer(examQuestion.getCorrectAnswer(),
-                            examQuestion.getStudentAnswer())) {
-                        examQuestion.setStudentScore(examQuestion.getQuestionScore());
+            if (result.getMarked() == null || !result.getMarked()) {
+                // Map<Integer, Double> subjectiveScores =
+                // this.loadSubjectiveScores(examRecordDataId);
+                for (ExamQuestionEntity examQuestion : examQuestions) {
+                    if (QuestionType.isObjective(examQuestion.getQuestionType())) {
+                        // 客观题得分
+                        if (QuestionOptionHelper.isEqualAnswer(examQuestion.getCorrectAnswer(),
+                                examQuestion.getStudentAnswer())) {
+                            examQuestion.setStudentScore(examQuestion.getQuestionScore());
+                        } else {
+                            examQuestion.setStudentScore(0d);
+                        }
                     } else {
-                        examQuestion.setStudentScore(0d);
+                        // 主观题得分,为空时则未评分
+                        // Double score =
+                        // subjectiveScores.get(examQuestion.getOrder());
+                        // examQuestion.setStudentScore(score);
                     }
-                } else {
-                    // 主观题得分,为空时则未评分
-                    Double score = subjectiveScores.get(examQuestion.getOrder());
-                    examQuestion.setStudentScore(score);
                 }
             }
         }
@@ -97,26 +88,26 @@ public class ExamRecordQuestionsController extends ControllerSupport {
         return result;
     }
 
-    private Map<Integer, Double> loadSubjectiveScores(Long examRecordDataId) {
-
-        Map<Integer, Double> scoreMaps = null;
-        try {
-            List<SubjectiveScoreBean> scores = markResultService.getScores(examRecordDataId);
-            if (CollectionUtils.isEmpty(scores)) {
-                GetSubjectiveScoreReq req = new GetSubjectiveScoreReq();
-                req.setExamRecordDataId(examRecordDataId);
-                GetSubjectiveScoreResp resp = studentPaperCloudService.subjectiveScore(req);
-                scores = resp.getScores();
-            }
-            if (CollectionUtils.isNotEmpty(scores)) {
-                scoreMaps = scores.stream().collect(Collectors.toMap(SubjectiveScoreBean::getQuestionOrder,
-                        SubjectiveScoreBean::getScore, (k, v) -> v));
-            }
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-
-        return scoreMaps != null ? scoreMaps : new HashMap<>();
-    }
+    // private Map<Integer, Double> loadSubjectiveScores(Long examRecordDataId)
+    // {
+    //
+    // Map<Integer, Double> scoreMaps = null;
+    // try {
+    // GetSubjectiveScoreReq req = new GetSubjectiveScoreReq();
+    // req.setExamRecordDataId(examRecordDataId);
+    // GetSubjectiveScoreResp resp =
+    // studentPaperCloudService.subjectiveScore(req);
+    // List<SubjectiveScoreBean> scores = resp.getScores();
+    // if (CollectionUtils.isNotEmpty(scores)) {
+    // scoreMaps =
+    // scores.stream().collect(Collectors.toMap(SubjectiveScoreBean::getQuestionOrder,
+    // SubjectiveScoreBean::getScore, (k, v) -> v));
+    // }
+    // } catch (Exception e) {
+    // log.error(e.getMessage(), e);
+    // }
+    //
+    // return scoreMaps != null ? scoreMaps : new HashMap<>();
+    // }
 
 }

+ 11 - 26
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/provider/ExamRecordQuestionsCloudServiceProvider.java

@@ -21,9 +21,11 @@ import com.mysql.cj.util.StringUtils;
 import cn.com.qmth.examcloud.core.oe.admin.api.ExamRecordQuestionsCloudService;
 import cn.com.qmth.examcloud.core.oe.admin.api.bean.QuerySubjectiveAnswerBean;
 import cn.com.qmth.examcloud.core.oe.admin.api.bean.SubjectiveAnswerBean;
+import cn.com.qmth.examcloud.core.oe.admin.api.request.ClearMarkResultReq;
 import cn.com.qmth.examcloud.core.oe.admin.api.request.GetSubjectiveAnswerReq;
 import cn.com.qmth.examcloud.core.oe.admin.api.request.QuerySubjectiveAnswerListReq;
 import cn.com.qmth.examcloud.core.oe.admin.api.request.SaveSubjectiveQuestionScoreReq;
+import cn.com.qmth.examcloud.core.oe.admin.api.response.ClearMarkResultResp;
 import cn.com.qmth.examcloud.core.oe.admin.api.response.GetSubjectiveAnswerResp;
 import cn.com.qmth.examcloud.core.oe.admin.api.response.QuerySubjectiveAnswerListResp;
 import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordDataRepo;
@@ -32,7 +34,6 @@ import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamQuestionEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordDataEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordQuestionsEntity;
 import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordQuestionsService;
-import cn.com.qmth.examcloud.core.oe.admin.service.MarkResultService;
 import cn.com.qmth.examcloud.question.commons.core.question.AnswerType;
 import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestionStructure;
 import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestionUnit;
@@ -62,9 +63,6 @@ public class ExamRecordQuestionsCloudServiceProvider extends ControllerSupport
     @Autowired
     private ExamRecordQuestionsService examRecordQuestionsService;
 
-    @Autowired
-    private MarkResultService markResultService;
-
     @Autowired
     private ExamRecordDataRepo examRecordDataRepo;
 
@@ -100,31 +98,18 @@ public class ExamRecordQuestionsCloudServiceProvider extends ControllerSupport
     @ApiOperation(value = "阅卷回传主观题得分")
     @PostMapping("/saveSubjectiveQuestionScore")
     public void saveSubjectiveQuestionScore(@RequestBody @Validated SaveSubjectiveQuestionScoreReq req) {
-        markResultService.modifyScore(req);
-        // List<SaveSubjectiveQuestionScoreBean> saveSubjectiveQuestionScoreList
-        // = req
-        // .getSaveSubjectiveQuestionScoreList();
-        // if (saveSubjectiveQuestionScoreList == null ||
-        // saveSubjectiveQuestionScoreList.size() == 0) {
-        // return;
-        // }
-        // long examRecordDataId = req.getExamRecordDataId();
-        // List<SubjectiveQuestionScoreInfo> subjectiveQuestionScoreInfoList =
-        // new ArrayList<SubjectiveQuestionScoreInfo>();
-        // for (SaveSubjectiveQuestionScoreBean bean :
-        // saveSubjectiveQuestionScoreList) {
-        // SubjectiveQuestionScoreInfo info = new SubjectiveQuestionScoreInfo();
-        // info.setExamRecordDataId(bean.getExamRecordDataId());
-        // info.setOrder(bean.getOrder());
-        // info.setQuestionId(bean.getQuestionId());
-        // info.setScore(bean.getScore());
-        // subjectiveQuestionScoreInfoList.add(info);
-        // }
-        // examRecordQuestionsService.saveSubjectiveQuestionScore(examRecordDataId,
-        // subjectiveQuestionScoreInfoList);
+        examRecordQuestionsService.saveSubjectiveQuestionScore(req);
 
     }
 
+    @Override
+    @ApiOperation(value = "清空主观题得分")
+    @PostMapping("subjective-score/clear")
+    public ClearMarkResultResp clearSubjectiveScore(@RequestBody @Validated ClearMarkResultReq req) {
+        examRecordQuestionsService.clearSubjectiveScore(req);
+        return new ClearMarkResultResp();
+    }
+
     /**
      * 阅卷获取考试记录主观题答案信息
      */

+ 0 - 36
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/provider/MarkResultCloudServiceProvider.java

@@ -1,36 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.admin.api.provider;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import cn.com.qmth.examcloud.core.oe.admin.api.MarkResultCloudService;
-import cn.com.qmth.examcloud.core.oe.admin.api.request.ClearMarkResultReq;
-import cn.com.qmth.examcloud.core.oe.admin.api.response.ClearMarkResultResp;
-import cn.com.qmth.examcloud.core.oe.admin.service.MarkResultService;
-import cn.com.qmth.examcloud.web.support.ControllerSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-
-@Api(tags = "阅卷分数接口")
-@RestController
-@RequestMapping("${$rmp.cloud.oe}/mark/result")
-public class MarkResultCloudServiceProvider extends ControllerSupport implements MarkResultCloudService {
-
-    private static final long serialVersionUID = 4538819077863159166L;
-
-    @Autowired
-    private MarkResultService markResultService;
-
-    @Override
-    @ApiOperation(value = "清空评卷结果")
-    @PostMapping("clear")
-    public ClearMarkResultResp clearScore(@RequestBody @Validated ClearMarkResultReq req) {
-        markResultService.clearScore(req);
-        return new ClearMarkResultResp();
-    }
-
-}

+ 0 - 19
examcloud-core-oe-admin-dao/src/main/java/cn/com/qmth/examcloud/core/oe/admin/dao/MarkResultRepo.java

@@ -1,19 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.admin.dao;
-
-import java.util.List;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.stereotype.Repository;
-
-import cn.com.qmth.examcloud.core.oe.admin.dao.entity.MarkResultEntity;
-
-@Repository
-public interface MarkResultRepo
-        extends JpaRepository<MarkResultEntity, Long>, JpaSpecificationExecutor<MarkResultEntity> {
-
-    void deleteByExamRecordDataId(Long examRecordDataId);
-
-    List<MarkResultEntity> findByExamRecordDataId(Long examRecordDataId);
-
-}

+ 17 - 7
examcloud-core-oe-admin-dao/src/main/java/cn/com/qmth/examcloud/core/oe/admin/dao/entity/ExamRecordQuestionsEntity.java

@@ -19,6 +19,7 @@ import java.util.List;
  */
 @Document(collection = "examRecordQuestions")
 public class ExamRecordQuestionsEntity implements Serializable {
+
     private static final long serialVersionUID = -1688201571728312142L;
 
     @Id
@@ -28,13 +29,16 @@ public class ExamRecordQuestionsEntity implements Serializable {
 
     private Date creationTime;
 
+    // 是否被阅卷赋值;旧数据是空
+    private Boolean marked;
+
     private List<ExamQuestionEntity> examQuestionEntities;
-    
+
     /**
-	 * 题目作答类型
-	 */
-	@Enumerated(EnumType.STRING)
-	private AnswerType answerType;
+     * 题目作答类型
+     */
+    @Enumerated(EnumType.STRING)
+    private AnswerType answerType;
 
     public String getId() {
         return id;
@@ -64,9 +68,15 @@ public class ExamRecordQuestionsEntity implements Serializable {
         return examQuestionEntities;
     }
 
-    public void setExamQuestionEntities(
-            List<ExamQuestionEntity> examQuestionEntities) {
+    public void setExamQuestionEntities(List<ExamQuestionEntity> examQuestionEntities) {
         this.examQuestionEntities = examQuestionEntities;
     }
 
+    public Boolean getMarked() {
+        return marked;
+    }
+
+    public void setMarked(Boolean marked) {
+        this.marked = marked;
+    }
 }

+ 0 - 154
examcloud-core-oe-admin-dao/src/main/java/cn/com/qmth/examcloud/core/oe/admin/dao/entity/MarkResultEntity.java

@@ -1,154 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.admin.dao.entity;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Index;
-import javax.persistence.Table;
-
-import cn.com.qmth.examcloud.web.jpa.JpaEntity;
-
-@Entity
-@Table(name = "ec_oe_mark_result", indexes = {
-        @Index(name = "IDX_01", columnList = "studentPaperId,orders", unique = true),
-        @Index(name = "IDX_02", columnList = "examRecordDataId,orders", unique = true) })
-public class MarkResultEntity extends JpaEntity {
-
-    private static final long serialVersionUID = 4101954661852038672L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @Column(nullable = false)
-    private Long rootOrgId;
-
-    @Column(nullable = false)
-    private Long examId;
-
-    @Column(nullable = false)
-    private Long workId;
-
-    @Column(nullable = false)
-    private Long examRecordDataId;
-
-    @Column(nullable = false)
-    private Long courseId;
-
-    @Column(nullable = false)
-    private Long studentPaperId;
-
-    @Column(nullable = false)
-    private Double score;
-
-    @Column(nullable = false)
-    private Integer orders;
-
-    @Column(nullable = false)
-    private String questionId;
-
-    @Column(nullable = false)
-    private Integer mainNumber;
-
-    @Column(nullable = false)
-    private Integer subNumber;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getRootOrgId() {
-        return rootOrgId;
-    }
-
-    public void setRootOrgId(Long rootOrgId) {
-        this.rootOrgId = rootOrgId;
-    }
-
-    public Long getExamId() {
-        return examId;
-    }
-
-    public void setExamId(Long examId) {
-        this.examId = examId;
-    }
-
-    public Long getWorkId() {
-        return workId;
-    }
-
-    public void setWorkId(Long workId) {
-        this.workId = workId;
-    }
-
-    public Long getExamRecordDataId() {
-        return examRecordDataId;
-    }
-
-    public void setExamRecordDataId(Long examRecordDataId) {
-        this.examRecordDataId = examRecordDataId;
-    }
-
-    public Long getCourseId() {
-        return courseId;
-    }
-
-    public void setCourseId(Long courseId) {
-        this.courseId = courseId;
-    }
-
-    public Long getStudentPaperId() {
-        return studentPaperId;
-    }
-
-    public void setStudentPaperId(Long studentPaperId) {
-        this.studentPaperId = studentPaperId;
-    }
-
-    public Double getScore() {
-        return score;
-    }
-
-    public void setScore(Double score) {
-        this.score = score;
-    }
-
-    public Integer getOrders() {
-        return orders;
-    }
-
-    public void setOrders(Integer orders) {
-        this.orders = orders;
-    }
-
-    public String getQuestionId() {
-        return questionId;
-    }
-
-    public void setQuestionId(String questionId) {
-        this.questionId = questionId;
-    }
-
-    public Integer getMainNumber() {
-        return mainNumber;
-    }
-
-    public void setMainNumber(Integer mainNumber) {
-        this.mainNumber = mainNumber;
-    }
-
-    public Integer getSubNumber() {
-        return subNumber;
-    }
-
-    public void setSubNumber(Integer subNumber) {
-        this.subNumber = subNumber;
-    }
-
-}

+ 15 - 8
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/ExamRecordQuestionsService.java

@@ -1,19 +1,21 @@
 package cn.com.qmth.examcloud.core.oe.admin.service;
 
+import java.util.List;
+
+import cn.com.qmth.examcloud.core.oe.admin.api.request.ClearMarkResultReq;
+import cn.com.qmth.examcloud.core.oe.admin.api.request.SaveSubjectiveQuestionScoreReq;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamQuestionEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordDataEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordQuestionsEntity;
-import cn.com.qmth.examcloud.core.oe.admin.service.bean.SubjectiveQuestionScoreInfo;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultPaper;
 
-import java.util.List;
-
 public interface ExamRecordQuestionsService {
 
     /**
      * 获取考生主观题答案
      *
-     * @param examRecordDataId 考试记录ID
+     * @param examRecordDataId
+     *            考试记录ID
      * @return
      */
     List<ExamQuestionEntity> querySubjectiveAnswerList(Long examRecordDataId);
@@ -23,7 +25,7 @@ public interface ExamRecordQuestionsService {
      *
      * @param subjectiveQuestionScoreInfoList
      */
-    void saveSubjectiveQuestionScore(Long examRecordDataId, List<SubjectiveQuestionScoreInfo> subjectiveQuestionScoreInfoList);
+    void saveSubjectiveQuestionScore(SaveSubjectiveQuestionScoreReq req);
 
     /**
      * 计算主观题作答总长度
@@ -44,17 +46,22 @@ public interface ExamRecordQuestionsService {
     /**
      * 获取考试作答记录并修复考试记录表的数据(如有必要)
      *
-     * @param examRecordData 考试记录
+     * @param examRecordData
+     *            考试记录
      * @return
      */
-    ExamRecordQuestionsEntity getExamRecordQuestionsAndFixExamRecordDataIfNecessary(ExamRecordDataEntity examRecordData);
+    ExamRecordQuestionsEntity getExamRecordQuestionsAndFixExamRecordDataIfNecessary(
+            ExamRecordDataEntity examRecordData);
 
     /**
      * 获取考试作答记录并修复考试记录表的数据(如有必要)
      *
-     * @param examRecordDataId 考试记录id
+     * @param examRecordDataId
+     *            考试记录id
      * @return
      */
     ExamRecordQuestionsEntity getExamRecordQuestionsAndFixExamRecordDataIfNecessary(Long examRecordDataId);
 
+    void clearSubjectiveScore(ClearMarkResultReq req);
+
 }

+ 0 - 17
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/MarkResultService.java

@@ -1,17 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.admin.service;
-
-import java.util.List;
-
-import cn.com.qmth.examcloud.core.oe.admin.api.request.ClearMarkResultReq;
-import cn.com.qmth.examcloud.core.oe.admin.api.request.SaveSubjectiveQuestionScoreReq;
-import cn.com.qmth.examcloud.marking.api.bean.SubjectiveScoreBean;
-
-public interface MarkResultService {
-
-    void modifyScore(SaveSubjectiveQuestionScoreReq req);
-
-    void clearScore(ClearMarkResultReq req);
-
-    List<SubjectiveScoreBean> getScores(Long examRecordDataId);
-
-}

+ 99 - 57
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamRecordQuestionsServiceImpl.java

@@ -1,7 +1,23 @@
 package cn.com.qmth.examcloud.core.oe.admin.service.impl;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.examcloud.api.commons.enums.ExamType;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
+import cn.com.qmth.examcloud.core.oe.admin.api.bean.MarkResultScoreBean;
+import cn.com.qmth.examcloud.core.oe.admin.api.request.ClearMarkResultReq;
+import cn.com.qmth.examcloud.core.oe.admin.api.request.SaveSubjectiveQuestionScoreReq;
 import cn.com.qmth.examcloud.core.oe.admin.base.utils.Check;
 import cn.com.qmth.examcloud.core.oe.admin.base.utils.QuestionTypeUtil;
 import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordDataRepo;
@@ -13,22 +29,12 @@ import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordQuestionsEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamScoreEntity;
 import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordQuestionsService;
 import cn.com.qmth.examcloud.core.oe.admin.service.ExamStudentFinalScoreService;
-import cn.com.qmth.examcloud.core.oe.admin.service.bean.SubjectiveQuestionScoreInfo;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultPaper;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionGroup;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionStructureWrapper;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionUnitWrapper;
+import cn.com.qmth.examcloud.question.commons.core.question.QuestionType;
 import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
 
 @Service("examRecordQuestionsService")
 public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsService {
@@ -47,9 +53,38 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
     @Autowired
     private ExamStudentFinalScoreService examStudentFinalScoreService;
 
+    @Override
+    public void clearSubjectiveScore(ClearMarkResultReq req) {
+        ExamRecordDataEntity examRecordData = GlobalHelper.getEntity(examRecordDataRepo, req.getExamRecordDataId(),
+                ExamRecordDataEntity.class);
+        // MongoDB清除小题得分
+        if (ExamType.ONLINE == examRecordData.getExamType()
+                || ExamType.ONLINE_HOMEWORK == examRecordData.getExamType()) {
+            ExamRecordQuestionsEntity eqs = getExamRecordQuestionsAndFixExamRecordDataIfNecessary(examRecordData);
+            if (eqs != null && CollectionUtils.isNotEmpty(eqs.getExamQuestionEntities())) {
+                for (ExamQuestionEntity eq : eqs.getExamQuestionEntities()) {
+                    if (!isObjecttive(eq.getQuestionType())) {
+                        eq.setStudentScore(null);
+                    }
+                }
+                examRecordQuestionsRepo.save(eqs);
+            }
+        }
+    }
+
+    private Boolean isObjecttive(QuestionType type) {
+        if (QuestionType.SINGLE_CHOICE.equals(type) || QuestionType.MULTIPLE_CHOICE.equals(type)
+                || QuestionType.TRUE_OR_FALSE.equals(type)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
     @Override
     public List<ExamQuestionEntity> querySubjectiveAnswerList(Long examRecordDataId) {
-        ExamRecordQuestionsEntity examRecordQuestionsEntity = getExamRecordQuestionsAndFixExamRecordDataIfNecessary(examRecordDataId);
+        ExamRecordQuestionsEntity examRecordQuestionsEntity = getExamRecordQuestionsAndFixExamRecordDataIfNecessary(
+                examRecordDataId);
         List<ExamQuestionEntity> examRecordQuestionList = examRecordQuestionsEntity.getExamQuestionEntities();
         return examRecordQuestionList.stream().filter((obj -> {
             return !QuestionTypeUtil.isObjectiveQuestion(obj.getQuestionType());
@@ -57,48 +92,47 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
     }
 
     @Override
-    public void saveSubjectiveQuestionScore(Long examRecordDataId, List<SubjectiveQuestionScoreInfo> subjectiveQuestionScoreInfoList) {
-        ExamRecordDataEntity examRecordData = GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId, ExamRecordDataEntity.class);
-
-        if (ExamType.ONLINE == examRecordData.getExamType() || ExamType.ONLINE_HOMEWORK == examRecordData.getExamType()) {
-            ExamRecordQuestionsEntity examRecordQuestionsEntity = getExamRecordQuestionsAndFixExamRecordDataIfNecessary(examRecordData);
-
-            List<ExamQuestionEntity> examRecordQuestionList = examRecordQuestionsEntity.getExamQuestionEntities();
-            for (SubjectiveQuestionScoreInfo scoreInfo : subjectiveQuestionScoreInfoList) {
-                for (ExamQuestionEntity examQuestionEntity : examRecordQuestionList) {
-                    if (scoreInfo.getQuestionId().equals(examQuestionEntity.getQuestionId())
-                            && scoreInfo.getOrder().intValue() == examQuestionEntity.getOrder().intValue()) {
-                        examQuestionEntity.setStudentScore(scoreInfo.getScore());
-                        break;
-                    }
-                }
-            }
-
-            examRecordQuestionsRepo.save(examRecordQuestionsEntity);
-        }
+    public void saveSubjectiveQuestionScore(SaveSubjectiveQuestionScoreReq req) {
+        ExamRecordDataEntity examRecordData = GlobalHelper.getEntity(examRecordDataRepo, req.getExamRecordDataId(),
+                ExamRecordDataEntity.class);
 
-        //计算主观题总得分
+        // 计算主观题总得分
         double totalSubjectiveScore = 0D;
-        for (SubjectiveQuestionScoreInfo scoreInfo : subjectiveQuestionScoreInfoList) {
+        for (MarkResultScoreBean scoreInfo : req.getScores()) {
             totalSubjectiveScore += scoreInfo.getScore();
         }
 
-        //更新ec_oe_exam_score
-        ExamScoreEntity examScoreEntity = examScoreRepo.findByExamRecordDataId(examRecordDataId);
+        // 更新ec_oe_exam_score
+        ExamScoreEntity examScoreEntity = examScoreRepo.findByExamRecordDataId(req.getExamRecordDataId());
         examScoreEntity.setSubjectiveScore(totalSubjectiveScore);
         double totalScore = totalSubjectiveScore + examScoreEntity.getObjectiveScore();
         examScoreEntity.setTotalScore(totalScore);
         examScoreRepo.save(examScoreEntity);
 
-        //计算考生的最终分数
+        // 计算考生的最终分数
         examStudentFinalScoreService.calcAndSaveFinalScore(examRecordData.getExamStudentId());
+
+        // MongoDB保存小题得分
+        if (ExamType.ONLINE == examRecordData.getExamType()
+                || ExamType.ONLINE_HOMEWORK == examRecordData.getExamType()) {
+            ExamRecordQuestionsEntity eqs = getExamRecordQuestionsAndFixExamRecordDataIfNecessary(examRecordData);
+            if (eqs != null && CollectionUtils.isNotEmpty(eqs.getExamQuestionEntities())) {
+                Map<Integer, Double> scoreMap = req.getScores().stream().collect(Collectors
+                        .toMap(MarkResultScoreBean::getOrders, MarkResultScoreBean::getScore, (key1, key2) -> key2));
+                for (ExamQuestionEntity eq : eqs.getExamQuestionEntities()) {
+                    eq.setStudentScore(scoreMap.get(eq.getOrder()));
+                }
+                examRecordQuestionsRepo.save(eqs);
+            }
+        }
     }
 
     @Override
     public Integer calculationSubjectiveAnswerLength(Long examRecordDataId) {
-        ExamRecordQuestionsEntity examRecordQuesitonsEntity = getExamRecordQuestionsAndFixExamRecordDataIfNecessary(examRecordDataId);
-        if (examRecordQuesitonsEntity == null || examRecordQuesitonsEntity.getExamQuestionEntities() == null ||
-                examRecordQuesitonsEntity.getExamQuestionEntities().isEmpty()) {
+        ExamRecordQuestionsEntity examRecordQuesitonsEntity = getExamRecordQuestionsAndFixExamRecordDataIfNecessary(
+                examRecordDataId);
+        if (examRecordQuesitonsEntity == null || examRecordQuesitonsEntity.getExamQuestionEntities() == null
+                || examRecordQuesitonsEntity.getExamQuestionEntities().isEmpty()) {
             return 0;
         }
         List<ExamQuestionEntity> examQuestionList = examRecordQuesitonsEntity.getExamQuestionEntities();
@@ -122,9 +156,11 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
         int order = 0;
         for (int i = 0; i < defaultQuestionGroups.size(); i++) {
             DefaultQuestionGroup defaultQuestionGroup = defaultQuestionGroups.get(i);
-            List<DefaultQuestionStructureWrapper> defaultQuestionStructureWrappers = defaultQuestionGroup.getQuestionWrapperList();
+            List<DefaultQuestionStructureWrapper> defaultQuestionStructureWrappers = defaultQuestionGroup
+                    .getQuestionWrapperList();
             for (DefaultQuestionStructureWrapper defaultQuestionStructureWrapper : defaultQuestionStructureWrappers) {
-                List<DefaultQuestionUnitWrapper> questionUnitWrapperList = defaultQuestionStructureWrapper.getQuestionUnitWrapperList();
+                List<DefaultQuestionUnitWrapper> questionUnitWrapperList = defaultQuestionStructureWrapper
+                        .getQuestionUnitWrapperList();
                 for (DefaultQuestionUnitWrapper defaultQuestionUnitWrapper : questionUnitWrapperList) {
                     ExamQuestionEntity examQuestionEntity = new ExamQuestionEntity();
                     examQuestionEntity.setExamRecordDataId(examRecordDataId);
@@ -146,18 +182,20 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
         examRecordQuestionsEntity.setExamRecordDataId(examRecordDataId);
         examRecordQuestionsEntity.setCreationTime(new Date());
         ExamRecordQuestionsEntity saveResult = examRecordQuestionsRepo.save(examRecordQuestionsEntity);
-        //        redisTemplate.opsForList().leftPushAll(examQuestionKeyPrefix+examRecordDataId,examQuestionEntityList);
+        // redisTemplate.opsForList().leftPushAll(examQuestionKeyPrefix+examRecordDataId,examQuestionEntityList);
         return saveResult;
     }
 
     /**
      * 获取考试作答记录并修复考试记录数据(如有必要)
      *
-     * @param examRecordData 考试记录
+     * @param examRecordData
+     *            考试记录
      * @return
      */
     @Override
-    public ExamRecordQuestionsEntity getExamRecordQuestionsAndFixExamRecordDataIfNecessary(ExamRecordDataEntity examRecordData) {
+    public ExamRecordQuestionsEntity getExamRecordQuestionsAndFixExamRecordDataIfNecessary(
+            ExamRecordDataEntity examRecordData) {
         if (examRecordData == null) {
             throw new StatusException("201101", "examRecordData参数不允许为空");
         }
@@ -167,30 +205,33 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
 
         ExamRecordQuestionsEntity examRecordQuestions;
         if (StringUtils.isNotEmpty(examRecordQuestionId)) {
-            //如果考试作答记录id不为空,则根据id查询考试作答记录
-            examRecordQuestions = GlobalHelper.getEntity(examRecordQuestionsRepo, examRecordQuestionId, ExamRecordQuestionsEntity.class);
+            // 如果考试作答记录id不为空,则根据id查询考试作答记录
+            examRecordQuestions = GlobalHelper.getEntity(examRecordQuestionsRepo, examRecordQuestionId,
+                    ExamRecordQuestionsEntity.class);
         } else {
-            //如果考试作答记录id为空,则根据考试记录id获取考试作答记录,并将考试作答记录id保存至examRecordData表中
+            // 如果考试作答记录id为空,则根据考试记录id获取考试作答记录,并将考试作答记录id保存至examRecordData表中
             examRecordQuestions = examRecordQuestionsRepo.findByExamRecordDataId(examRecordDataId);
 
             if (examRecordQuestions == null) {
-                log.warn("examRecordQuestions is null, examRecordDataId = {} examType:{}", examRecordData.getId(), examRecordData.getExamType());
+                log.warn("examRecordQuestions is null, examRecordDataId = {} examType:{}", examRecordData.getId(),
+                        examRecordData.getExamType());
                 throw new StatusException("201101", "examRecordQuestions为空");
             }
 
-            //将考试作答记录id保存至examRecordData表中,目的:纠正历史数据
+            // 将考试作答记录id保存至examRecordData表中,目的:纠正历史数据
             examRecordData.setExamRecordQuestionsId(examRecordQuestions.getId());
             examRecordDataRepo.updateExamRecordDataQuestionIdById(examRecordQuestions.getId(), examRecordData.getId());
         }
 
-        // List<ExamQuestionEntity> examQuestions = examRecordQuestions.getExamQuestionEntities();
+        // List<ExamQuestionEntity> examQuestions =
+        // examRecordQuestions.getExamQuestionEntities();
         // for (ExamQuestionEntity examQuestion : examQuestions) {
-        //     if (QuestionType.SINGLE_CHOICE == examQuestion.getQuestionType() ||
-        //             QuestionType.MULTIPLE_CHOICE == examQuestion.getQuestionType()) {
-        //         // 选择题 - 转换为新答案格式(兼容旧格式)
-        //         examQuestion.setCorrectAnswer(QuestionOptionHelper.parseNumbers(examQuestion.getCorrectAnswer()));
-        //         examQuestion.setStudentAnswer(QuestionOptionHelper.parseNumbers(examQuestion.getStudentAnswer()));
-        //     }
+        // if (QuestionType.SINGLE_CHOICE == examQuestion.getQuestionType() ||
+        // QuestionType.MULTIPLE_CHOICE == examQuestion.getQuestionType()) {
+        // // 选择题 - 转换为新答案格式(兼容旧格式)
+        // examQuestion.setCorrectAnswer(QuestionOptionHelper.parseNumbers(examQuestion.getCorrectAnswer()));
+        // examQuestion.setStudentAnswer(QuestionOptionHelper.parseNumbers(examQuestion.getStudentAnswer()));
+        // }
         // }
 
         return examRecordQuestions;
@@ -200,7 +241,8 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
     public ExamRecordQuestionsEntity getExamRecordQuestionsAndFixExamRecordDataIfNecessary(Long examRecordDataId) {
         Check.isNull(examRecordDataId, "examRecordDataId不能为空");
 
-        ExamRecordDataEntity examRecordData = GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId, ExamRecordDataEntity.class);
+        ExamRecordDataEntity examRecordData = GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId,
+                ExamRecordDataEntity.class);
         return getExamRecordQuestionsAndFixExamRecordDataIfNecessary(examRecordData);
     }
 

+ 0 - 91
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/MarkResultServiceImpl.java

@@ -1,91 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.admin.service.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.MarkResultScoreBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.request.ClearMarkResultReq;
-import cn.com.qmth.examcloud.core.oe.admin.api.request.SaveSubjectiveQuestionScoreReq;
-import cn.com.qmth.examcloud.core.oe.admin.dao.MarkResultRepo;
-import cn.com.qmth.examcloud.core.oe.admin.dao.entity.MarkResultEntity;
-import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordQuestionsService;
-import cn.com.qmth.examcloud.core.oe.admin.service.MarkResultService;
-import cn.com.qmth.examcloud.core.oe.admin.service.bean.SubjectiveQuestionScoreInfo;
-import cn.com.qmth.examcloud.marking.api.bean.SubjectiveScoreBean;
-
-@Service
-public class MarkResultServiceImpl implements MarkResultService {
-
-    @Autowired
-    private MarkResultRepo markResultRepo;
-
-    @Autowired
-    private ExamRecordQuestionsService examRecordQuestionsService;
-
-    @Transactional
-    @Override
-    public void modifyScore(SaveSubjectiveQuestionScoreReq req) {
-        markResultRepo.deleteByExamRecordDataId(req.getExamRecordDataId());
-        markResultRepo.flush();
-        List<MarkResultEntity> ret = new ArrayList<>();
-        for (MarkResultScoreBean dto : req.getScores()) {
-            MarkResultEntity tem = new MarkResultEntity();
-            tem.setRootOrgId(req.getRootOrgId());
-            tem.setCourseId(req.getCourseId());
-            tem.setExamId(req.getExamId());
-            tem.setExamRecordDataId(req.getExamRecordDataId());
-            tem.setWorkId(req.getWorkId());
-            tem.setStudentPaperId(req.getStudentPaperId());
-            tem.setMainNumber(dto.getMainNumber());
-            tem.setOrders(dto.getOrders());
-            tem.setQuestionId(dto.getQuestionId());
-            tem.setScore(dto.getScore());
-            tem.setSubNumber(dto.getSubNumber());
-            ret.add(tem);
-        }
-        markResultRepo.saveAll(ret);
-        saveSubjectiveQuestionScore(req);
-    }
-
-    private void saveSubjectiveQuestionScore(SaveSubjectiveQuestionScoreReq req) {
-        List<SubjectiveQuestionScoreInfo> subjectiveQuestionScoreInfoList = new ArrayList<SubjectiveQuestionScoreInfo>();
-        for (MarkResultScoreBean bean : req.getScores()) {
-            SubjectiveQuestionScoreInfo info = new SubjectiveQuestionScoreInfo();
-            info.setExamRecordDataId(req.getExamRecordDataId());
-            info.setOrder(bean.getOrders());
-            info.setQuestionId(bean.getQuestionId());
-            info.setScore(bean.getScore());
-            subjectiveQuestionScoreInfoList.add(info);
-        }
-        examRecordQuestionsService.saveSubjectiveQuestionScore(req.getExamRecordDataId(),
-                subjectiveQuestionScoreInfoList);
-
-    }
-
-    @Transactional
-    @Override
-    public void clearScore(ClearMarkResultReq req) {
-        markResultRepo.deleteByExamRecordDataId(req.getExamRecordDataId());
-    }
-
-    @Override
-    public List<SubjectiveScoreBean> getScores(Long examRecordDataId) {
-        List<MarkResultEntity> es = markResultRepo.findByExamRecordDataId(examRecordDataId);
-        if (CollectionUtils.isEmpty(es)) {
-            return null;
-        }
-        List<SubjectiveScoreBean> ret = new ArrayList<>();
-        for (MarkResultEntity e : es) {
-            SubjectiveScoreBean b = new SubjectiveScoreBean();
-            ret.add(b);
-            b.setQuestionOrder(e.getOrders());
-            b.setScore(e.getScore());
-        }
-        return ret;
-    }
-}