Forráskód Böngészése

update report pdf export

ting.yin 6 éve
szülő
commit
f18531e20a

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectQuestionServiceImpl.java

@@ -61,7 +61,7 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
                         if (query.getExamId() != null) {
                             predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                         }
-                        if (StringUtils.isNotBlank(query.getPaperType())) {
+                        if (query.getObjective() && StringUtils.isNotBlank(query.getPaperType())) {
                             predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
                         }
                         if (StringUtils.isNotBlank(query.getSubjectCode())) {

+ 16 - 14
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectClassRangeModule.java

@@ -41,21 +41,23 @@ public class SubjectClassRangeModule implements Module {
         for (String key : this.counters.keySet()) {
             RangeCounter counter = counters.get(key);
             String s[] = key.split("\t");
-            String subjectCode = s[0];
-            String className = s[1];
-            ReportSubjectClass r = service.findOne(this.context.getExamId(), subjectCode, className);
-            
-            JSONObject rangeLevel = new JSONObject();
-            rangeLevel.accumulate("highScore", counter.countGeAndLt(100 - context.getHighValueConfig(), null));
-            rangeLevel.accumulate("lowScore", counter.countGeAndLt(null, context.getLowValueConfig()));
-            r.setRangeLevel(rangeLevel.toString());
-            
-            JSONObject scoreRange = new JSONObject();
-            for (int i = 0; i <= 100; i++) {
-                scoreRange.accumulate(String.valueOf(i), counter.countGeAndLt((double) i, (double) (i + 1)));
+            if(s.length > 1){
+                String subjectCode = s[0];
+                String className = s[1];
+                ReportSubjectClass r = service.findOne(this.context.getExamId(), subjectCode, className);
+                
+                JSONObject rangeLevel = new JSONObject();
+                rangeLevel.accumulate("highScore", counter.countGeAndLt(100 - context.getHighValueConfig(), null));
+                rangeLevel.accumulate("lowScore", counter.countGeAndLt(null, context.getLowValueConfig()));
+                r.setRangeLevel(rangeLevel.toString());
+                
+                JSONObject scoreRange = new JSONObject();
+                for (int i = 0; i <= 100; i++) {
+                    scoreRange.accumulate(String.valueOf(i), counter.countGeAndLt((double) i, (double) (i + 1)));
+                }
+                r.setScoreRange(scoreRange.toString());
+                service.save(r);
             }
-            r.setScoreRange(scoreRange.toString());
-            service.save(r);
         }
 
     }

+ 6 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/unit/BaseCalculatorUnit.java

@@ -89,8 +89,12 @@ public class BaseCalculatorUnit {
         // 差异系数
         coefficient = avgScore > 0 ? stdev * 100 / avgScore : 0;
         // 区分度
-        discrimination = (aggScore - sumScore * sumTotalScore / count) / Math.sqrt(
-                (sumScore2 - sumScore * sumScore / count) * (sumTotalScore2 - sumTotalScore * sumTotalScore / count));
+        double temp = Math.sqrt((sumScore2 - sumScore * sumScore / count) * (sumTotalScore2 - sumTotalScore * sumTotalScore / count));
+        if(temp != 0){
+            discrimination = (aggScore - sumScore * sumTotalScore / count) / temp;
+        }else{
+            discrimination = 0;
+        }
         // 及格率
         passRate = passCount * 1.0 / count;
         // 优秀率

+ 53 - 12
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ReportController.java → stmms-web/src/main/java/cn/com/qmth/stmms/report/ReportController.java

@@ -1,4 +1,4 @@
-package cn.com.qmth.stmms.api.controller;
+package cn.com.qmth.stmms.report;
 
 import java.util.List;
 
@@ -10,9 +10,9 @@ import net.sf.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
@@ -39,7 +39,7 @@ import cn.com.qmth.stmms.biz.school.model.School;
 import cn.com.qmth.stmms.biz.school.service.SchoolService;
 
 @Controller("reportApiController")
-@RequestMapping("/api/report")
+@RequestMapping("/report")
 public class ReportController {
 
     @Autowired
@@ -77,16 +77,30 @@ public class ReportController {
 
     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) {
+    @RequestMapping(value = "/teachAndResearch/{examId}/{subjectCode}", method = RequestMethod.GET)
+    public String getSubject(Model model, HttpServletRequest request, @PathVariable Integer examId,
+            @PathVariable String subjectCode) {
+        JSONObject result = getJson(examId, subjectCode, null);
+        model.addAttribute("data", result);
+        return "modules/report/pdf";
+    }
+
+    @RequestMapping(value = "/teachAndResearch/{examId}/{subjectCode}/{paperType}", method = RequestMethod.GET)
+    public String getReport(Model model, HttpServletRequest request, @PathVariable Integer examId,
+            @PathVariable String subjectCode, @PathVariable String paperType) {
+        JSONObject result = getJson(examId, subjectCode, paperType);
+        model.addAttribute("data", result);
+        return "modules/report/pdf";
+    }
+
+    private JSONObject getJson(Integer examId, String subjectCode, String paperType) {
         Exam exam = examService.findById(examId);
         School school = schoolService.findById(exam.getSchoolId());
         ExamSubject subject = subjectService.find(examId, subjectCode);
         JSONObject result = new JSONObject();
         result.accumulate("examName", exam.getName());
         result.accumulate("schoolName", school.getName());
-        result.accumulate("subjectName", subject.getName());
+        result.accumulate("subjectName", paperType == null ? subject.getName() : subject.getName() + "_" + paperType);
         ReportSubjectQuery query = new ReportSubjectQuery();
         query.setExamId(examId);
         query.setSubjectCode(subjectCode);
@@ -110,8 +124,7 @@ public class ReportController {
         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";
+        return result;
     }
 
     private String getPaperJson(ReportSubject r) {
@@ -137,15 +150,17 @@ public class ReportController {
         JSONArray groups = new JSONArray();
         JSONObject value = new JSONObject();
         value.accumulate("name", "全体");
-        value.accumulate("segments",  getScoreRange(subject.getScoreRange(), subject.getTotalScore(), 20, subject.getRealityCount()));
+        value.accumulate("segments",
+                getScoreRange6(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()));
+            classValue.accumulate("segments",
+                    getScoreRange6(c.getScoreRange(), subject.getTotalScore(), 20, c.getRealityCount()));
             groups.add(classValue);
         }
-        jsonObject.accumulate("groups",groups );
+        jsonObject.accumulate("groups", groups);
         result.add(jsonObject);
         return result.toString();
     }
@@ -207,6 +222,32 @@ public class ReportController {
         }
         return result;
     }
+    
+    private JSONArray getScoreRange6(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 = 0; i <= total; i++) {
+            rangeCount = jsonObject.getInt(String.valueOf(i));
+            if (i == 0) {
+                sumCount = rangeCount;
+            } else {
+                sumCount = sumCount + rangeCount;
+            }
+            if (i % range == 0) {
+                JSONObject value = new JSONObject();
+                value.accumulate("score", i==0?0:(i-range+0.5)+"~"+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();

+ 2 - 1
stmms-web/src/main/webapp/WEB-INF/spring-mvc.xml

@@ -26,7 +26,8 @@
 					  cn.com.qmth.stmms.api,
 					  cn.com.qmth.stmms.file,
 					  cn.com.qmth.stmms.mark,
-					  cn.com.qmth.stmms.monitor">
+					  cn.com.qmth.stmms.monitor,
+					  cn.com.qmth.stmms.report">
 		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
 		<context:include-filter type="annotation" expression="org.springframework.stereotype.Component" />
 	</context:component-scan>