1
0
Эх сурвалжийг харах

评卷任务改为20份一随机,新增选做题类型最低分(剔除0分)

yin 10 сар өмнө
parent
commit
509e702ff5

+ 23 - 12
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkCronService.java

@@ -229,7 +229,7 @@ public class MarkCronService {
     }
 
     private void buildFormalLibrary(MarkGroup group) {
-        int pageSize = 100;
+        int pageSize = 200;
         try {
             // log.info("start create library for examId=" + group.getExamId() +
             // ", subjectCode=" + group.getSubjectCode()
@@ -269,8 +269,8 @@ public class MarkCronService {
                             // 随机数判断加入当前已经生成双评任务的比例加权
                             // 实际双评任务数小于理论生成数 &&(剩余未生成双评的考生数量小于剩余应生成的数量||随机比例)
                             needDouble = doubleCount < expectCount
-                                    && ((studentCount - libraryCount + doubleCount) <= (expectCount - doubleCount) || Math
-                                            .random() < group.getDoubleRate() + 0.1);
+                                    && ((studentCount - libraryCount + doubleCount) <= (expectCount - doubleCount)
+                                            || Math.random() < group.getDoubleRate() + 0.1);
                         }
                         if (needDouble) {
                             library = new MarkLibrary();
@@ -291,9 +291,22 @@ public class MarkCronService {
                 if (!libraryList.isEmpty()) {
                     count += libraryList.size();
                     // 任务乱序
-                    Collections.shuffle(libraryList);
+                    List<MarkLibrary> list = new ArrayList<>();
+                    List<MarkLibrary> saveList = new ArrayList<>();
+                    for (MarkLibrary l : libraryList) {
+                        list.add(l);
+                        if (list.size() >= 20) {
+                            Collections.shuffle(list);
+                            saveList.addAll(list);
+                            list = new ArrayList<>();
+                        }
+                    }
+                    if(!list.isEmpty()){
+                        Collections.shuffle(list);
+                        saveList.addAll(list);
+                    }
                     // 批量保存
-                    libraryService.save(libraryList);
+                    libraryService.save(saveList);
                     // 正评状态才需要更新任务数量
                     if (group.getStatus() == MarkStatus.FORMAL) {
                         markService.updateLibraryCount(group);
@@ -308,9 +321,8 @@ public class MarkCronService {
                         + group.getSubjectCode() + ", groupNumber=" + group.getNumber());
             }
         } catch (Exception e) {
-            log.error(
-                    "build formal library error for examId=" + group.getExamId() + ", subjectCode="
-                            + group.getSubjectCode() + ", groupNumber=" + group.getNumber(), e);
+            log.error("build formal library error for examId=" + group.getExamId() + ", subjectCode="
+                    + group.getSubjectCode() + ", groupNumber=" + group.getNumber(), e);
         } finally {
             lockService.unwatch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
         }
@@ -349,9 +361,8 @@ public class MarkCronService {
                 markService.updateMarkedCount(group);
             }
         } catch (Exception e) {
-            log.error(
-                    "build trial library error for examId=" + group.getExamId() + ", subjectCode="
-                            + group.getSubjectCode() + ", groupNumber=" + group.getNumber(), e);
+            log.error("build trial library error for examId=" + group.getExamId() + ", subjectCode="
+                    + group.getSubjectCode() + ", groupNumber=" + group.getNumber(), e);
         } finally {
             lockService.unwatch(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
         }
@@ -381,7 +392,7 @@ public class MarkCronService {
             }
             for (Integer examId : map.keySet()) {
                 reportService.reportExam(examId, map.get(examId));
-                reportService.reportExamObjective(examId,map.get(examId));
+                reportService.reportExamObjective(examId, map.get(examId));
             }
         } catch (Exception e) {
             log.error("auto-update report error", e);

+ 28 - 1
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/ScorePolicy.java

@@ -1,5 +1,8 @@
 package cn.com.qmth.stmms.common.enums;
 
+import java.util.LinkedList;
+import java.util.List;
+
 /**
  * 多评情况下的合分策略
  * 
@@ -7,12 +10,14 @@ package cn.com.qmth.stmms.common.enums;
  *
  */
 public enum ScorePolicy {
-    AVG("平均分", 1), MAX("最高分", 2), MIN("最低分", 3);
+    AVG("平均分", 1), MAX("最高分", 2), MIN("最低分", 3), MIN_WITHOUT_ZERO("最低分(剔除0分)", 4);
 
     private String name;
 
     private int value;
 
+    private static List<ScorePolicy> options;
+
     private ScorePolicy(String name, int value) {
         this.name = name;
         this.value = value;
@@ -34,4 +39,26 @@ public enum ScorePolicy {
         }
         return null;
     }
+
+    public static List<ScorePolicy> getOptionList() {
+        if (options == null) {
+            options = new LinkedList<>();
+            for (ScorePolicy status : ScorePolicy.values()) {
+                options.add(status);
+            }
+        }
+        return options;
+    }
+
+    public static List<ScorePolicy> getList() {
+        if (options == null) {
+            options = new LinkedList<>();
+            for (ScorePolicy status : ScorePolicy.values()) {
+                if(!status.equals(ScorePolicy.MIN_WITHOUT_ZERO)){
+                    options.add(status);
+                }
+            }
+        }
+        return options;
+    }
 }

+ 51 - 50
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -304,7 +304,8 @@ public class MarkGroupController extends BaseExamController {
         model.addAttribute("group", group);
         model.addAttribute("subject", subject);
         model.addAttribute("markModeList", MarkMode.values());
-        model.addAttribute("scorePolicyList", ScorePolicy.values());
+
+        model.addAttribute("scorePolicyList", ScorePolicy.getList());
         model.addAttribute("arbitrateTypeList", ArbitrateType.values());
         model.addAttribute("thirdPolicyList", ThirdPolicy.values());
         model.addAttribute("exam", examService.findById(examId));
@@ -342,7 +343,7 @@ public class MarkGroupController extends BaseExamController {
                     group.getExamId(), group.getSubjectCode(), false, group.getNumber()));
             model.addAttribute("pictureConfig", pictureConfig);
             model.addAttribute("markModeList", MarkMode.values());
-            model.addAttribute("scorePolicyList", ScorePolicy.values());
+            model.addAttribute("scorePolicyList", ScorePolicy.getList());
             model.addAttribute("thirdPolicyList", ThirdPolicy.values());
             model.addAttribute("exam", examService.findById(examId));
             return "modules/exam/groupEditSimple";
@@ -386,7 +387,7 @@ public class MarkGroupController extends BaseExamController {
             model.addAttribute("questionList", questions);
             model.addAttribute("pictureConfig", group.getPicList());
             model.addAttribute("markModeList", MarkMode.values());
-            model.addAttribute("scorePolicyList", ScorePolicy.values());
+            model.addAttribute("scorePolicyList", ScorePolicy.getList());
             model.addAttribute("arbitrateTypeList", ArbitrateType.values());
             model.addAttribute("thirdPolicyList", ThirdPolicy.values());
             model.addAttribute("subject", subjectService.find(examId, subjectCode));
@@ -483,12 +484,12 @@ public class MarkGroupController extends BaseExamController {
                         redirectAttributes.addAttribute("number", number);
                         return "redirect:/admin/exam/group/edit-simple";
                     }
-                    if (!checkSelective(examId, subjectCode, questionIds)) {
-                        addMessage(redirectAttributes, "选做题不合法!选做题和非选做题不能在一组,选做题不能跨组或跨区设置");
-                        redirectAttributes.addAttribute("subjectCode", subjectCode);
-                        redirectAttributes.addAttribute("number", number);
-                        return "redirect:/admin/exam/group/edit-simple";
-                    }
+//                    if (!checkSelective(examId, subjectCode, questionIds)) {
+//                        addMessage(redirectAttributes, "选做题不合法!选做题和非选做题不能在一组,选做题不能跨组或跨区设置");
+//                        redirectAttributes.addAttribute("subjectCode", subjectCode);
+//                        redirectAttributes.addAttribute("number", number);
+//                        return "redirect:/admin/exam/group/edit-simple";
+//                    }
                     List<ExamQuestion> questionList = new ArrayList<ExamQuestion>();
                     ArbitrateType at = arbitrateType != null ? ArbitrateType.findByValue(arbitrateType)
                             : ArbitrateType.GROUP;
@@ -580,43 +581,43 @@ public class MarkGroupController extends BaseExamController {
         }
     }
 
-    private boolean checkSelective(Integer examId, String subjectCode, Integer[] questionIds) {
-        // 无选做题分组
-        List<SelectiveGroup> list = selectiveGroupService.findByExamIdAndSubjectCode(examId, subjectCode);
-        if (list.size() == 0) {
-            return true;
-        }
-        List<ExamQuestion> selectives = new ArrayList<ExamQuestion>();
-        Set<Integer> selectiveIndexs = new HashSet<Integer>();
-        Set<Integer> selectiveParts = new HashSet<Integer>();
-        for (Integer questionId : questionIds) {
-            ExamQuestion question = questionService.findById(questionId);
-            for (SelectiveGroup selectiveGroup : list) {
-                if (selectiveGroup.getMainNumber().equals(question.getMainNumber())) {
-                    selectives.add(question);
-                    selectiveIndexs.add(selectiveGroup.getSelectiveIndex());
-                    selectiveParts.add(selectiveGroup.getSelectivePart());
-                }
-            }
-        }
-        // 无选做题
-        if (selectives.size() == 0) {
-            return true;
-        }
-        // 选做题和非选做题一组
-        if (selectives.size() != questionIds.length) {
-            return false;
-        }
-        // 一个评卷分组内只能有一个选做题分组的题
-        if (selectiveIndexs.size() > 1) {
-            return false;
-        }
-        // 一个评卷分组内只能有一个选做题分区的题
-        if (selectiveParts.size() > 1) {
-            return false;
-        }
-        return true;
-    }
+//    private boolean checkSelective(Integer examId, String subjectCode, Integer[] questionIds) {
+//        // 无选做题分组
+//        List<SelectiveGroup> list = selectiveGroupService.findByExamIdAndSubjectCode(examId, subjectCode);
+//        if (list.size() == 0) {
+//            return true;
+//        }
+//        List<ExamQuestion> selectives = new ArrayList<ExamQuestion>();
+//        Set<Integer> selectiveIndexs = new HashSet<Integer>();
+//        Set<Integer> selectiveParts = new HashSet<Integer>();
+//        for (Integer questionId : questionIds) {
+//            ExamQuestion question = questionService.findById(questionId);
+//            for (SelectiveGroup selectiveGroup : list) {
+//                if (selectiveGroup.getMainNumber().equals(question.getMainNumber())) {
+//                    selectives.add(question);
+//                    selectiveIndexs.add(selectiveGroup.getSelectiveIndex());
+//                    selectiveParts.add(selectiveGroup.getSelectivePart());
+//                }
+//            }
+//        }
+//        // 无选做题
+//        if (selectives.size() == 0) {
+//            return true;
+//        }
+//        // 选做题和非选做题一组
+//        if (selectives.size() != questionIds.length) {
+//            return false;
+//        }
+//        // 一个评卷分组内只能有一个选做题分组的题
+//        if (selectiveIndexs.size() > 1) {
+//            return false;
+//        }
+//        // 一个评卷分组内只能有一个选做题分区的题
+//        if (selectiveParts.size() > 1) {
+//            return false;
+//        }
+//        return true;
+//    }
 
     @Logging(menu = "新增大题", type = LogType.ADD)
     @RequestMapping("/insert")
@@ -643,10 +644,10 @@ public class MarkGroupController extends BaseExamController {
             addMessage(redirectAttributes, "题目不能为空");
             redirectAttributes.addAttribute("subjectCode", subjectCode);
             return "redirect:/admin/exam/group/add";
-        } else if (!checkSelective(examId, subjectCode, questionIds)) {
-            addMessage(redirectAttributes, "选做题不合法!选做题和非选做题不能在一组,选做题不能跨组或跨区设置");
-            redirectAttributes.addAttribute("subjectCode", subjectCode);
-            return "redirect:/admin/exam/group/add";
+//        } else if (!checkSelective(examId, subjectCode, questionIds)) {
+//            addMessage(redirectAttributes, "选做题不合法!选做题和非选做题不能在一组,选做题不能跨组或跨区设置");
+//            redirectAttributes.addAttribute("subjectCode", subjectCode);
+//            return "redirect:/admin/exam/group/add";
         } else {
             try {
                 // create group

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

@@ -104,7 +104,7 @@ public class SelectiveGroupController extends BaseExamController {
         model.addAttribute("subject", subject);
         model.addAttribute("list", selectiveGroupService.findIndexByExamIdAndSubjectCode(examId, subjectCode));
         model.addAttribute("questions", questions);
-        ScorePolicy[] scorePolicyList = { ScorePolicy.MAX, ScorePolicy.MIN };
+        ScorePolicy[] scorePolicyList = { ScorePolicy.MAX, ScorePolicy.MIN ,ScorePolicy.MIN_WITHOUT_ZERO};
         model.addAttribute("scorePolicyList", scorePolicyList);
         return "modules/exam/selectiveList";
     }