فهرست منبع

Merge branch 'dev_190618' of http://git.qmth.com.cn/luoshi/stmms-ft.git into dev_190618

zhangjie 6 سال پیش
والد
کامیت
073970c2e1

+ 14 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/model/ReportSubjectClass.java

@@ -148,6 +148,12 @@ public class ReportSubjectClass implements Serializable {
     @Column(name = "score_range", nullable = true)
     private String scoreRange;
 
+    /**
+     * 有效人数
+     */
+    @Column(name = "reality_count")
+    private Integer realityCount;
+
     public Integer getId() {
         return id;
     }
@@ -300,4 +306,12 @@ public class ReportSubjectClass implements Serializable {
         this.scoreRange = scoreRange;
     }
 
+    public Integer getRealityCount() {
+        return realityCount;
+    }
+
+    public void setRealityCount(Integer realityCount) {
+        this.realityCount = realityCount;
+    }
+
 }

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

@@ -43,6 +43,7 @@ public class SubjectClassModule extends SubjectModule implements Module {
                 r.setCoefficient(unit.coefficient);
                 r.setDifficulty(unit.difficulty);
                 r.setStdev(unit.stdev);
+                r.setRealityCount(this.counters.get(key).realityCount);
                 service.save(r);
             }
         }

+ 4 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectQuestionOptionModule.java

@@ -34,6 +34,8 @@ public class SubjectQuestionOptionModule implements Module {
 
     private Map<String, Set<String>> optionMap;
 
+    public static final String ANSWER_SPLIT = ",";
+
     public SubjectQuestionOptionModule(ReportContext context) {
         this.counters = new HashMap<String, OptionCounter>();
         this.context = context;
@@ -95,8 +97,8 @@ public class SubjectQuestionOptionModule implements Module {
         }
         for (String subjectCode : optionMap.keySet()) {
             ReportSubject r = subjectService.findOne(this.context.getExamId(), subjectCode);
-            String options = optionMap.get(subjectCode).toString();
-            r.setOptions(options);
+            Set<String> options = optionMap.get(subjectCode);
+            r.setOptions(StringUtils.join(options, ANSWER_SPLIT));
             subjectService.save(r);
         }
     }

+ 116 - 66
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ReportController.java

@@ -75,6 +75,8 @@ public class ReportController {
     @Autowired
     private ReportSubjectService reportSubjectService;
 
+    public static final String ANSWER_SPLIT = ",";
+
     @RequestMapping(value = "/teachAndResearch", method = RequestMethod.GET)
     public String getReport(Model model, HttpServletRequest request, @RequestParam Integer examId,
             @RequestParam String subjectCode, @RequestParam(required = false) String paperType) {
@@ -91,20 +93,23 @@ public class ReportController {
         query.setPaperType(paperType);
         query.setPageSize(Integer.MAX_VALUE);
         ReportSubject reportSubject = reportSubjectService.findOne(query.getExamId(), query.getSubjectCode());
+        List<ReportSubjectClass> subjectClasses = classService.findByQuery(query);
+        List<ReportSubjectGroup> subjectGroups = groupService.findByQuery(query);
         result.accumulate("basic_paper", getPaperJson(reportSubject));
         result.accumulate("basic_question_objective", getQuestionJson(query, true));
-        result.accumulate("basic_question_subjective", getQuestionJson(query, true));
-        result.accumulate("basic_class", getClassJson(query));
+        result.accumulate("basic_question_subjective", getQuestionJson(query, false));
+        result.accumulate("basic_class", getClassJson(subjectClasses));
         result.accumulate("basic_teacher", getTeacerJson(query));
         result.accumulate("basic_college", getCollegeJson(query));
-        result.accumulate("basic_main_question", getGroupJson(query));
+        result.accumulate("basic_main_question", getGroupJson(subjectGroups));
         result.accumulate("basic_question_option", getOptionJson(query, reportSubject));
-        result.accumulate("discrimination_level", getDiscrimination(query, reportSubject));
-        result.accumulate("difficulty_level", getDifficulty(query, reportSubject));
-        result.accumulate("range_level", getRangeLevel(query, reportSubject));
-        // result.accumulate("range_10_totalScore", getRange10(query));
-        // result.accumulate("range_1_totalScore", getRange1(query));
-        // result.accumulate("range_segment_6", getRange6(query));
+        result.accumulate("discrimination_level",
+                getDiscrimination(query, reportSubject, subjectClasses, subjectGroups));
+        result.accumulate("difficulty_level", getDifficulty(query, reportSubject, subjectClasses, subjectGroups));
+        result.accumulate("range_level", getRangeLevel(query, reportSubject, subjectClasses));
+        result.accumulate("range_10_totalScore", getRange10(reportSubject, subjectClasses));
+        result.accumulate("range_1_totalScore", getRange1(reportSubject, subjectClasses));
+        result.accumulate("range_segment_6", getRange6(reportSubject, subjectClasses));
         model.addAttribute("data", result);
         return "modules/report/pdf";
     }
@@ -125,55 +130,101 @@ public class ReportController {
         return jsonObject.toString();
     }
 
-    // private String getRange6(ReportSubjectQuery query) {
-    // // TODO Auto-generated method stub
-    // }
-
-    // private String getRange1(ReportSubjectQuery query) {
-    // JSONObject result = new JSONObject();
-    // ReportSubject reportSubject =
-    // reportSubjectService.findOne(query.getExamId(), query.getSubjectCode());
-    // JSONArray array = new JSONArray();
-    // // result.accumulate("total",
-    // // getScoreRange(array,reportSubject.getScoreRange(),100,1));
-    // JSONArray classes = new JSONArray();
-    // List<ReportSubjectClass> list = classService.findByQuery(query);
-    // for (ReportSubjectClass reportSubjectClass : list) {
-    //
-    // }
-    // result.accumulate("classes", classes);
-    // return result.toString();
-    // }
-
-    // private JSONArray getScoreRange(JSONArray array, String scoreRange, int
-    // totalScore, int range) {
-    // JSONObject value = new JSONObject();
-    // value.accumulate(key, value);
-    // array.add(value);
-    // return array;
-    // }
-
-    // private String getRange10(ReportSubjectQuery query) {
-    // // TODO Auto-generated method stub
-    // }
-
-    private String getRangeLevel(ReportSubjectQuery query, ReportSubject reportSubject) {
+    private String getRange6(ReportSubject subject, List<ReportSubjectClass> list) {
+        JSONArray result = new JSONArray();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.accumulate("name", "全卷");
+        JSONArray groups = new JSONArray();
+        JSONObject value = new JSONObject();
+        value.accumulate("name", "全体");
+        value.accumulate("segments",  getScoreRange(subject.getScoreRange(), subject.getTotalScore(), 20, subject.getRealityCount()));
+        groups.add(value);
+        for (ReportSubjectClass c : list) {
+            JSONObject classValue = new JSONObject();
+            classValue.accumulate("name", c.getClassName());
+            classValue.accumulate("segments",  getScoreRange(c.getScoreRange(), subject.getTotalScore(), 20, c.getRealityCount()));
+            groups.add(classValue);
+        }
+        jsonObject.accumulate("groups",groups );
+        result.add(jsonObject);
+        return result.toString();
+    }
+
+    private String getRange1(ReportSubject subject, List<ReportSubjectClass> list) {
+        JSONObject result = new JSONObject();
+        result.accumulate("total",
+                getScoreRange(subject.getScoreRange(), subject.getTotalScore(), 1, subject.getRealityCount()));
+        JSONArray classes = new JSONArray();
+        for (ReportSubjectClass c : list) {
+            JSONObject classValue = new JSONObject();
+            classValue.accumulate("name", c.getClassName());
+            classValue.accumulate("ranges",
+                    getScoreRange(c.getScoreRange(), subject.getTotalScore(), 1, c.getRealityCount()));
+            classes.add(classValue);
+        }
+        result.accumulate("classes", classes);
+        return result.toString();
+    }
+
+    private String getRange10(ReportSubject subject, List<ReportSubjectClass> list) {
+        JSONObject result = new JSONObject();
+        result.accumulate("total",
+                getScoreRange(subject.getScoreRange(), subject.getTotalScore(), 10, subject.getRealityCount()));
+        JSONArray classes = new JSONArray();
+        for (ReportSubjectClass r : list) {
+            JSONObject classValue = new JSONObject();
+            classValue.accumulate("name", r.getClassName());
+            classValue.accumulate("ranges",
+                    getScoreRange(r.getScoreRange(), subject.getTotalScore(), 10, r.getRealityCount()));
+            classes.add(classValue);
+        }
+        result.accumulate("classes", classes);
+        return result.toString();
+    }
+
+    private JSONArray getScoreRange(String scoreRange, double totalScore, int range, Integer totalCount) {
+        JSONArray result = new JSONArray();
+        JSONObject jsonObject = JSONObject.fromObject(scoreRange);
+        int rangeCount = 0;
+        int sumCount = 0;
+        int total = (int) totalScore;
+        for (int i = total; i >= 0; i--) {
+            rangeCount = jsonObject.getInt(String.valueOf(i));
+            if (i == totalScore) {
+                sumCount = rangeCount;
+            } else {
+                sumCount = sumCount + rangeCount;
+            }
+            if (i % range == 0) {
+                JSONObject value = new JSONObject();
+                value.accumulate("score", i);
+                value.accumulate("rangeCount", rangeCount);
+                value.accumulate("rangeRate", rangeCount * 100.0 / totalCount);
+                value.accumulate("sumCount", sumCount);
+                value.accumulate("sumRate", sumCount * 100.0 / totalCount);
+                result.add(value);
+            }
+        }
+        return result;
+    }
+
+    private String getRangeLevel(ReportSubjectQuery query, ReportSubject reportSubject, List<ReportSubjectClass> classes) {
         JSONArray array = new JSONArray();
         JSONObject value = JSONObject.fromObject(reportSubject.getRangeLevel());
         value.accumulate("name", "全部");
         value.accumulate("totalCount", reportSubject.getRealityCount());
         array.add(value);
-        List<ReportSubjectClass> classes = classService.findByQuery(query);
         for (ReportSubjectClass reportSubjectClass : classes) {
             JSONObject classValue = JSONObject.fromObject(reportSubjectClass.getRangeLevel());
             classValue.accumulate("name", reportSubjectClass.getClassName());
-            classValue.accumulate("totalCount", reportSubject.getTotalCount());
+            classValue.accumulate("totalCount", reportSubjectClass.getRealityCount());
             array.add(classValue);
         }
         return array.toString();
     }
 
-    private String getDifficulty(ReportSubjectQuery query, ReportSubject reportSubject) {
+    private String getDifficulty(ReportSubjectQuery query, ReportSubject reportSubject,
+            List<ReportSubjectClass> subjectClasses, List<ReportSubjectGroup> subjectGroups) {
         JSONArray result = new JSONArray();
         // 全部
         JSONObject obj = new JSONObject();
@@ -185,8 +236,7 @@ public class ReportController {
         value.accumulate("difficulty", reportSubject.getDifficulty());
         value.accumulate("levels", reportSubject.getDifficulityLevel());
         groups.add(value);
-        List<ReportSubjectGroup> list = groupService.findByQuery(query);
-        for (ReportSubjectGroup r : list) {
+        for (ReportSubjectGroup r : subjectGroups) {
             JSONObject jsonObject = new JSONObject();
             jsonObject.accumulate("name", r.getGroupName());
             jsonObject.accumulate("questionCount", r.getQuestionCount());
@@ -199,10 +249,9 @@ public class ReportController {
         obj.accumulate("groups", groups);
         result.add(obj);
         // 班级
-        List<ReportSubjectClass> classes = classService.findByQuery(query);
-        for (ReportSubjectClass reportSubjectClass : classes) {
+        for (ReportSubjectClass reportSubjectClass : subjectClasses) {
             JSONObject classValue = new JSONObject();
-            value.accumulate("name", reportSubjectClass.getClassName());
+            classValue.accumulate("name", reportSubjectClass.getClassName());
             JSONArray classGroups = new JSONArray();
             JSONObject group = new JSONObject();
             group.accumulate("name", "全卷");
@@ -212,6 +261,7 @@ public class ReportController {
             group.accumulate("levels", reportSubjectClass.getDifficulityLevel());
             classGroups.add(group);
             query.setClassName(reportSubjectClass.getClassName());
+            query.setObjective(null);
             List<ReportSubjectClassGroup> classGroupsList = classGroupService.findByQuery(query);
             for (ReportSubjectClassGroup r : classGroupsList) {
                 JSONObject jsonObject = new JSONObject();
@@ -220,7 +270,7 @@ public class ReportController {
                 jsonObject.accumulate("fullScore", r.getTotalScore());
                 jsonObject.accumulate("difficulty", r.getDifficulty());
                 jsonObject.accumulate("levels", r.getDifficulityLevel());
-                groups.add(jsonObject);
+                classGroups.add(jsonObject);
             }
             classValue.accumulate("groups", classGroups);
             result.add(classValue);
@@ -228,7 +278,8 @@ public class ReportController {
         return result.toString();
     }
 
-    private String getDiscrimination(ReportSubjectQuery query, ReportSubject reportSubject) {
+    private String getDiscrimination(ReportSubjectQuery query, ReportSubject reportSubject,
+            List<ReportSubjectClass> subjectClasses, List<ReportSubjectGroup> subjectGroups) {
         JSONArray result = new JSONArray();
         // 全部
         JSONObject obj = new JSONObject();
@@ -240,8 +291,7 @@ public class ReportController {
         value.accumulate("coefficient", reportSubject.getCoefficient());
         value.accumulate("levels", reportSubject.getDiscriminationLevel());
         groups.add(value);
-        List<ReportSubjectGroup> list = groupService.findByQuery(query);
-        for (ReportSubjectGroup r : list) {
+        for (ReportSubjectGroup r : subjectGroups) {
             JSONObject jsonObject = new JSONObject();
             jsonObject.accumulate("name", r.getGroupName());
             jsonObject.accumulate("questionCount", r.getQuestionCount());
@@ -254,10 +304,9 @@ public class ReportController {
         obj.accumulate("groups", groups);
         result.add(obj);
         // 班级
-        List<ReportSubjectClass> classes = classService.findByQuery(query);
-        for (ReportSubjectClass reportSubjectClass : classes) {
+        for (ReportSubjectClass reportSubjectClass : subjectClasses) {
             JSONObject classValue = new JSONObject();
-            value.accumulate("name", reportSubjectClass.getClassName());
+            classValue.accumulate("name", reportSubjectClass.getClassName());
             JSONArray classGroups = new JSONArray();
             JSONObject group = new JSONObject();
             group.accumulate("name", "全卷");
@@ -267,6 +316,7 @@ public class ReportController {
             group.accumulate("levels", reportSubjectClass.getDiscriminationLevel());
             classGroups.add(group);
             query.setClassName(reportSubjectClass.getClassName());
+            query.setObjective(null);
             List<ReportSubjectClassGroup> classGroupsList = classGroupService.findByQuery(query);
             for (ReportSubjectClassGroup r : classGroupsList) {
                 JSONObject jsonObject = new JSONObject();
@@ -275,7 +325,7 @@ public class ReportController {
                 jsonObject.accumulate("fullScore", r.getTotalScore());
                 jsonObject.accumulate("coefficient", r.getCoefficient());
                 jsonObject.accumulate("levels", r.getDiscriminationLevel());
-                groups.add(jsonObject);
+                classGroups.add(jsonObject);
             }
             classValue.accumulate("groups", classGroups);
             result.add(classValue);
@@ -285,7 +335,7 @@ public class ReportController {
 
     private String getOptionJson(ReportSubjectQuery query, ReportSubject reportSubject) {
         JSONObject value = new JSONObject();
-        value.accumulate("options", reportSubject.getOptions());
+        value.accumulate("options", reportSubject.getOptions().split(ANSWER_SPLIT));
         JSONArray array = new JSONArray();
         query.setObjective(true);
         List<ReportSubjectQuestion> list = questionService.findByQuery(query);
@@ -304,9 +354,8 @@ public class ReportController {
         return value.toString();
     }
 
-    private String getGroupJson(ReportSubjectQuery query) {
+    private String getGroupJson(List<ReportSubjectGroup> list) {
         JSONArray array = new JSONArray();
-        List<ReportSubjectGroup> list = groupService.findByQuery(query);
         for (ReportSubjectGroup r : list) {
             JSONObject jsonObject = new JSONObject();
             jsonObject.accumulate("name", r.getGroupName());
@@ -321,7 +370,7 @@ public class ReportController {
             jsonObject.accumulate("discrimination", r.getDiscrimination());
             jsonObject.accumulate("totalCount", r.getRealityCount());
             jsonObject.accumulate("zeroCount", r.getZeroCount());
-            jsonObject.accumulate("fullCount", r.getScoreRate());
+            jsonObject.accumulate("fullCount", r.getFullCount());
             array.add(jsonObject);
         }
         return array.toString();
@@ -351,6 +400,7 @@ public class ReportController {
         for (ReportSubjectTeacher r : list) {
             JSONObject jsonObject = new JSONObject();
             jsonObject.accumulate("name", r.getTeacherName());
+            jsonObject.accumulate("totalCount", r.getRealityCount());
             jsonObject.accumulate("maxScore", r.getMaxScore());
             jsonObject.accumulate("minScore", r.getMinScore());
             jsonObject.accumulate("avgScore", r.getAvgScore());
@@ -364,7 +414,8 @@ public class ReportController {
             List<ReportSubjectTeacherClass> teacherClasses = teacherClassService.findByQuery(query);
             for (ReportSubjectTeacherClass teacherClass : teacherClasses) {
                 JSONObject value = new JSONObject();
-                value.accumulate("name", teacherClass.getTeacherName());
+                value.accumulate("name", teacherClass.getClassName());
+                value.accumulate("totalCount", teacherClass.getRealityCount());
                 value.accumulate("maxScore", teacherClass.getMaxScore());
                 value.accumulate("minScore", teacherClass.getMinScore());
                 value.accumulate("avgScore", teacherClass.getAvgScore());
@@ -381,9 +432,8 @@ public class ReportController {
         return array.toString();
     }
 
-    private String getClassJson(ReportSubjectQuery query) {
+    private String getClassJson(List<ReportSubjectClass> list) {
         JSONArray array = new JSONArray();
-        List<ReportSubjectClass> list = classService.findByQuery(query);
         for (ReportSubjectClass r : list) {
             JSONObject jsonObject = new JSONObject();
             jsonObject.accumulate("name", r.getClassName());
@@ -418,7 +468,7 @@ public class ReportController {
             jsonObject.accumulate("discrimination", r.getDiscrimination());
             jsonObject.accumulate("totalCount", r.getRealityCount());
             jsonObject.accumulate("zeroCount", r.getZeroCount());
-            jsonObject.accumulate("fullCount", r.getScoreRate());
+            jsonObject.accumulate("fullCount", r.getFullCount());
             jsonObject.accumulate("fullRate", r.getFullScoreRate());
             jsonObject.accumulate("scoreRate", r.getScoreRate());
             array.add(jsonObject);