Переглянути джерело

修复成绩分析选做题,新增同一个选做题大题被分开的验证

ting.yin 3 роки тому
батько
коміт
61fdb04cf4

+ 1 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/TrialLibraryDao.java

@@ -19,8 +19,7 @@ public interface TrialLibraryDao extends JpaRepository<TrialLibrary, Integer>, J
 
     @Query("select l from TrialLibrary l where l.examId=?1 and l.subjectCode=?2 and l.groupNumber=?3 "
             + "and l.markerId is null ")
-    List<TrialLibrary> findUnMarked(Integer examId, String subjectCode, Integer groupNumber, Integer markerId,
-            Pageable page);
+    List<TrialLibrary> findUnMarked(Integer examId, String subjectCode, Integer groupNumber, Pageable page);
 
     @Query("select count(l) from TrialLibrary l where l.examId=?1 and l.subjectCode=?2 and l.groupNumber=?3 "
             + "and l.markerId is not null ")

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TrialServiceImpl.java

@@ -51,7 +51,7 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
         query.setPageNumber(pageNumber);
         query.setPageSize(pageSize);
 
-        return libraryDao.findUnMarked(examId, subjectCode, groupNumber, markerId, query);
+        return libraryDao.findUnMarked(examId, subjectCode, groupNumber, query);
     }
 
     @Override

+ 3 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectGroupModule.java

@@ -26,6 +26,8 @@ public class SubjectGroupModule implements Module {
 
     protected ReportContext context;
 
+    public static final int UN_SELECTIVE_SCORE = -1;
+
     public SubjectGroupModule(ReportContext context) {
         this.calculators = new HashMap<String, BaseCalculatorUnit>();
         this.context = context;
@@ -60,7 +62,7 @@ public class SubjectGroupModule implements Module {
                 group = new QuestionGroup(objective, question.getMainNumber(), question.getPaperType());
                 map.put(groupKey, group);
             }
-            group.incrTotalScore(item != null ? item.getScore() : 0);
+            group.incrTotalScore(item != null && item.getScore() != UN_SELECTIVE_SCORE ? item.getScore() : 0);
             group.incrFullScore(question.getTotalScore());
         }
         for (Entry<String, QuestionGroup> entry : map.entrySet()) {

+ 3 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectQuestionModule.java

@@ -29,6 +29,8 @@ public class SubjectQuestionModule implements Module, QuestionCalculatorProvider
 
     protected ReportContext context;
 
+    public static final int UN_SELECTIVE_SCORE = -1;
+
     public SubjectQuestionModule(ReportContext context) {
         this.calculators = new HashMap<String, BaseCalculatorUnit>();
         this.context = context;
@@ -56,7 +58,7 @@ public class SubjectQuestionModule implements Module, QuestionCalculatorProvider
                 continue;
             }
             ScoreItem item = scoreCount > i ? scoreList.get(i) : null;
-            double score = item != null ? item.getScore() : 0;
+            double score = item != null && item.getScore() != UN_SELECTIVE_SCORE ? item.getScore() : 0;
             process(student, question, score, totalScore);
         }
     }

+ 3 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -68,6 +68,8 @@ public class InspectedController extends BaseExamController {
     @Value("${slice.split.config}")
     private String splitConfig;
 
+    public static final String UN_SELECTIVE_SCORE = "-1";
+
     @RequestMapping
     public String list(Model model, HttpServletRequest request, ExamStudentSearchQuery query,
             @RequestParam(required = false) SubjectiveStatus status,
@@ -88,7 +90,7 @@ public class InspectedController extends BaseExamController {
         List<ExamStudent> list = inspectedService.findByQuery(query, status, mainNumber, mainStartScore, mainEndScore,
                 questionScore, unselective);
         for (ExamStudent e : list) {
-            e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace("-1", "/"));
+            e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
         }
         Integer totalCount = inspectedService.countByQuery(query, null, mainNumber, mainStartScore, mainEndScore,
                 questionScore, unselective);

+ 10 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -517,6 +517,14 @@ public class MarkGroupController extends BaseExamController {
         if (selectives.size() > 0 && mainNumbers.size() > 1) {
             return false;
         }
+        // 一个选做题大题内的小题必须在一个分组
+        for (Integer mainNumber : mainNumbers) {
+            Long count = questionService.countByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, true,
+                    mainNumber);
+            if (count != selectives.size()) {
+                return false;
+            }
+        }
         if (questionIds.length == selectives.size()) {
             return true;
         }
@@ -551,7 +559,7 @@ public class MarkGroupController extends BaseExamController {
             redirectAttributes.addAttribute("subjectCode", subjectCode);
             return "redirect:/admin/exam/group/add";
         } else if (!checkSelective(examId, subjectCode, questionIds)) {
-            addMessage(redirectAttributes, "选做题和非选做题不能在一组,并且选做题大题必须单独一组");
+            addMessage(redirectAttributes, "选做题和非选做题不能在一组,并且选做题大题必须单独一组,同一大题不能被分开");
             redirectAttributes.addAttribute("subjectCode", subjectCode);
             return "redirect:/admin/exam/group/add";
         } else {
@@ -702,7 +710,7 @@ public class MarkGroupController extends BaseExamController {
         int examId = getSessionExamId(request);
         ExamSubject subject = subjectService.find(examId, subjectCode);
         JSONObject obj = new JSONObject();
-        if(subject == null ){
+        if (subject == null) {
             obj.accumulate("success", false);
             obj.accumulate("message", "科目不能为空");
             return obj;

+ 5 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -17,6 +17,7 @@ import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.utils.ExportExcel;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import net.sf.json.JSONObject;
+
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -28,6 +29,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
 import java.util.*;
 
 @Controller
@@ -58,6 +60,8 @@ public class ScoreController extends BaseExamController {
     @Autowired
     private FileService fileService;
 
+    public static final String UN_SELECTIVE_SCORE = "-1";
+
     @Logging(menu = "成绩查询", type = LogType.QUERY)
     @RequestMapping
     public ModelAndView list(HttpServletRequest request, ExamStudentSearchQuery query,
@@ -206,7 +210,7 @@ public class ScoreController extends BaseExamController {
                         student.setObjectiveScore(0d);
                         student.setSubjectiveScore(0d);
                     }
-                    student.setSubjectiveScoreList(student.getSubjectiveScoreList().replace("-1", "/"));
+                    student.setSubjectiveScoreList(student.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
                     list.add(new ExamStudentDTO(student));
                 }
             }

+ 7 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreReportThread.java

@@ -25,6 +25,7 @@ import cn.com.qmth.stmms.biz.report.service.ReportService;
 import cn.com.qmth.stmms.biz.report.utils.ReportContext;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.LockType;
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 
 public class ScoreReportThread implements Runnable {
 
@@ -124,10 +125,12 @@ public class ScoreReportThread implements Runnable {
     }
 
     private void statistic(ExamStudent student) {
-        student.setSubject(findExamSubject(student.getSubjectCode()));
-        student.setObjectiveQuestionList(findQuestionList(student.getSubjectCode(), student.getPaperType(), true));
-        student.setSubjectiveQuestionList(findQuestionList(student.getSubjectCode(), student.getPaperType(), false));
-        context.process(student);
+        if (SubjectiveStatus.MARKED.equals(student.getSubjectiveStatus())) {
+            student.setSubject(findExamSubject(student.getSubjectCode()));
+            student.setObjectiveQuestionList(findQuestionList(student.getSubjectCode(), student.getPaperType(), true));
+            student.setSubjectiveQuestionList(findQuestionList(student.getSubjectCode(), student.getPaperType(), false));
+            context.process(student);
+        }
     }
 
     private List<ExamQuestion> findQuestionList(String subjectCode, String paperType, boolean objective) {