Browse Source

分组导入校验

xiatian 7 months ago
parent
commit
3de7e4c5ae

+ 63 - 40
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/SubjectQuestionDTO.java

@@ -294,9 +294,21 @@ public class SubjectQuestionDTO {
         return null;
     }
 
+    private String errMsg(String err) {
+        return errMsg(null, err);
+    }
+
+    private String errMsg(Integer groupNumber, String err) {
+        if (groupNumber == null) {
+            return "[" + subjectCode + "] " + err;
+        } else {
+            return "[" + subjectCode + "] 分组号" + groupNumber + " " + err;
+        }
+    }
+
     public boolean validateGroupNumber(List<String> error) {
-        Set<Integer> trialSet= new HashSet<>();
-        Map<Integer,Set<Integer>> arbitrateTypeMap = new HashMap<>();
+        Set<Integer> trialSet = new HashSet<>();
+        Map<Integer, Set<Integer>> arbitrateTypeMap = new HashMap<>();
         Map<Integer, Set<Double>> doubleRateMap = new HashMap<>();
         Map<Integer, Set<String>> modeMap = new HashMap<>();
         Map<Integer, Set<Integer>> policyMap = new HashMap<>();
@@ -304,73 +316,84 @@ public class SubjectQuestionDTO {
 
         for (ExamQuestion question : list) {
             if (question.getGroupNumber() == null || question.getGroupNumber() < 0) {
-                error.add("[" + subjectCode + "] 有评卷分组为空的记录");
+                error.add(errMsg("评卷分组为空"));
                 return false;
             }
             trialSet.add(question.getTrialCount());
-            if (trialSet.size()>1) {
-                error.add("[" + subjectCode + "] 有试评数量不一致的记录");
+            if (trialSet.size() > 1) {
+                error.add(errMsg("试评数量不一致"));
                 return false;
             }
-            //评卷模式一致
+            // 评卷模式一致
             Set<String> modeSet = modeMap.get(question.getGroupNumber());
-            if(modeSet == null){
-                modeSet =new HashSet<>();
-                modeSet.add(question.getMarkMode());
+            if (modeSet == null) {
+                modeSet = new HashSet<>();
+                modeMap.put(question.getGroupNumber(), modeSet);
             }
-            if (modeSet.size()>1) {
-                error.add("[" + subjectCode + "] 分组号" + question.getGroupNumber() + " 评卷模式不一致的记录");
+            modeSet.add(question.getMarkMode());
+
+            if (modeSet.size() > 1) {
+                error.add(errMsg(question.getGroupNumber(), "评卷模式不一致"));
                 return false;
             }
-            //开启双评
+            // 开启双评
             Set<Double> doubleRateSet = doubleRateMap.get(question.getGroupNumber());
-            if(doubleRateSet == null){
-                doubleRateSet =new HashSet<>();
-                doubleRateSet.add(question.getDoubleRate());
+            if (doubleRateSet == null) {
+                doubleRateSet = new HashSet<>();
+                doubleRateMap.put(question.getGroupNumber(), doubleRateSet);
             }
-            if (doubleRateSet.size()>1) {
-                error.add("[" + subjectCode + "] 分组号" + question.getGroupNumber() + " 双评比例不一致的记录");
+            doubleRateSet.add(question.getDoubleRate());
+            if (doubleRateSet.size() > 1) {
+                error.add(errMsg(question.getGroupNumber(), "双评比例不一致"));
                 return false;
             }
-
-            if(!doubleRateSet.isEmpty() && doubleRateSet.iterator().next()!=null && doubleRateSet.iterator().next()>0){
-                //判断分组方式是否一致
-                Set<Integer> arbitrateTypeSet= arbitrateTypeMap.get(question.getGroupNumber());
-                if(arbitrateTypeSet ==null ){
+            Double doubleRateFirst = null;
+            if (!doubleRateSet.isEmpty()) {
+                doubleRateFirst = doubleRateSet.iterator().next();
+            }
+            if (doubleRateFirst != null && doubleRateFirst > 0) {
+                // 判断分组方式是否一致
+                Set<Integer> arbitrateTypeSet = arbitrateTypeMap.get(question.getGroupNumber());
+                if (arbitrateTypeSet == null) {
                     arbitrateTypeSet = new HashSet<>();
+                    arbitrateTypeMap.put(question.getGroupNumber(), arbitrateTypeSet);
                 }
                 arbitrateTypeSet.add(question.getArbitrateType());
-                if(arbitrateTypeSet.size()>1){
-                    error.add("[" + subjectCode + "] 分组号" + question.getGroupNumber() + " 仲裁方式不一致");
+                if (arbitrateTypeSet.size() > 1) {
+                    error.add(errMsg(question.getGroupNumber(), "仲裁方式不一致"));
                     return false;
                 }
-                arbitrateTypeMap.put(question.getGroupNumber(),arbitrateTypeSet);
 
-                if(question.getArbitrateThreshold()==null || question.getArbitrateThreshold()<=0){
-                    error.add("[" + subjectCode + "] 分组号" + question.getGroupNumber() + " 仲裁阈值为空");
+                if (question.getArbitrateThreshold() == null || question.getArbitrateThreshold() <= 0) {
+                    error.add(errMsg(question.getGroupNumber(), "仲裁阈值为空"));
                     return false;
                 }
 
                 Set<Double> arbitrateThresholdSet = arbitrateThresholdMap.get(question.getGroupNumber());
-                if(arbitrateThresholdSet == null){
-                    arbitrateThresholdSet =new HashSet<>();
-                    arbitrateThresholdSet.add(question.getArbitrateThreshold());
+                if (arbitrateThresholdSet == null) {
+                    arbitrateThresholdSet = new HashSet<>();
+                    arbitrateThresholdMap.put(question.getGroupNumber(), arbitrateThresholdSet);
+                }
+                arbitrateThresholdSet.add(question.getArbitrateThreshold());
+
+                Integer arbitrateTypeFirst = null;
+                if (!arbitrateTypeSet.isEmpty()) {
+                    arbitrateTypeFirst = arbitrateTypeSet.iterator().next();
                 }
-                if (arbitrateTypeSet.iterator().next()!=null
-                        && !arbitrateTypeSet.iterator().next().equals(1)
-                        && arbitrateThresholdSet.size()>1) {
-                    error.add("[" + subjectCode + "] 分组号" + question.getGroupNumber() + " 仲裁阈值不一致的记录");
+                if (arbitrateTypeFirst != null && !arbitrateTypeFirst.equals(1) && arbitrateThresholdSet.size() > 1) {
+                    error.add(errMsg(question.getGroupNumber(), "仲裁阈值不一致"));
                     return false;
                 }
 
-                //评分规则一致
+                // 评分规则一致
                 Set<Integer> policySet = policyMap.get(question.getGroupNumber());
-                if(policySet == null){
-                    policySet =new HashSet<>();
-                    policySet.add(question.getScorePolicy());
+                if (policySet == null) {
+                    policySet = new HashSet<>();
+                    policyMap.put(question.getGroupNumber(), policySet);
                 }
-                if (policySet.size()>1) {
-                    error.add("[" + subjectCode + "] 分组号" + question.getGroupNumber() + " 判分规则不一致的记录");
+                policySet.add(question.getScorePolicy());
+                if (policySet.size() > 1) {
+                    error.add(errMsg(question.getGroupNumber(), "合分策略不一致"));
                     return false;
                 }
             }