Kaynağa Gözat

大题统计增加大题号;各类统计增加对应查询条件

ting.yin 6 yıl önce
ebeveyn
işleme
61171e8e87

+ 26 - 9
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/model/ReportSubjectGroup.java

@@ -57,66 +57,73 @@ public class ReportSubjectGroup implements Serializable {
     @Column(name = "group_name")
     private String groupName;
 
+    /**
+     * 大题号
+     */
+    @ExcelField(title = "大题号", align = 2, sort = 40)
+    @Column(name = "group_number")
+    private Integer groupNumber;
+    
     /**
      * 最高分
      */
-    @ExcelField(title = "最高分", align = 2, sort = 40)
+    @ExcelField(title = "最高分", align = 2, sort = 50)
     @Column(name = "max_score")
     private Double maxScore;
 
     /**
      * 最低分
      */
-    @ExcelField(title = "最低分", align = 2, sort = 50)
+    @ExcelField(title = "最低分", align = 2, sort = 60)
     @Column(name = "min_score")
     private Double minScore;
 
     /**
      * 平均分
      */
-    @ExcelField(title = "平均分", align = 2, sort = 60)
+    @ExcelField(title = "平均分", align = 2, sort = 70)
     @Column(name = "avg_score")
     private Double avgScore;
 
     /**
      * 满分
      */
-    @ExcelField(title = "满分", align = 2, sort = 70)
+    @ExcelField(title = "满分", align = 2, sort = 80)
     @Column(name = "total_score")
     private Double totalScore;
 
     /**
      * 标准差
      */
-    @ExcelField(title = "标准差", align = 2, sort = 80)
+    @ExcelField(title = "标准差", align = 2, sort = 90)
     @Column(name = "sd")
     private Double SD;
 
     /**
      * 差异系数
      */
-    @ExcelField(title = "差异系数(%)", align = 2, sort = 90)
+    @ExcelField(title = "差异系数(%)", align = 2, sort = 100)
     @Column(name = "cv")
     private Double CV;
 
     /**
      * 得分率
      */
-    @ExcelField(title = "得分率", align = 2, sort = 100)
+    @ExcelField(title = "得分率", align = 2, sort = 110)
     @Column(name = "score_rate")
     private Double scoreRate;
 
     /**
      * 零分人数
      */
-    @ExcelField(title = "零分人数", align = 2, sort = 110)
+    @ExcelField(title = "零分人数", align = 2, sort = 120)
     @Column(name = "zero_count")
     private Integer zeroCount;
 
     /**
      * 满分人数
      */
-    @ExcelField(title = "满分人数", align = 2, sort = 120)
+    @ExcelField(title = "满分人数", align = 2, sort = 130)
     @Column(name = "full_count")
     private Integer fullCount;
 
@@ -232,4 +239,14 @@ public class ReportSubjectGroup implements Serializable {
         this.scoreRate = scoreRate;
     }
 
+    
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
 }

+ 20 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/query/ReportSubjectQuery.java

@@ -18,6 +18,10 @@ public class ReportSubjectQuery extends BaseQuery {
 
     private String className;
 
+    private String collegeName;
+
+    private int groupNumber;
+
     private Boolean objective;
 
     public Integer getExamId() {
@@ -52,6 +56,22 @@ public class ReportSubjectQuery extends BaseQuery {
         this.className = className;
     }
 
+    public String getCollegeName() {
+        return collegeName;
+    }
+
+    public void setCollegeName(String collegeName) {
+        this.collegeName = collegeName;
+    }
+
+    public int getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(int groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
     public Boolean getObjective() {
         return objective;
     }

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

@@ -51,7 +51,7 @@ public class ReportSubjectClassServiceImpl extends BaseQueryService<ReportSubjec
                 if (query.getExamId() != null) {
                     predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                 }
-                if (query.getSubjectCode() != null) {
+                if (StringUtils.isNotBlank(query.getSubjectCode())) {
                     predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                 }
                 if (StringUtils.isNotBlank(query.getClassName())) {

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

@@ -8,6 +8,8 @@ import cn.com.qmth.stmms.biz.report.model.ReportSubjectCollege;
 import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectCollegeService;
 import cn.com.qmth.stmms.biz.utils.DoubleUtil;
+
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
@@ -16,6 +18,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+
 import java.util.LinkedList;
 import java.util.List;
 
@@ -50,9 +53,12 @@ public class ReportSubjectCollegeServiceImpl extends BaseQueryService<ReportSubj
                 if (query.getExamId() != null) {
                     predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                 }
-                if (query.getSubjectCode() != null) {
+                if (StringUtils.isNotBlank(query.getSubjectCode())) {
                     predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                 }
+                if (StringUtils.isNotBlank(query.getCollegeName())) {
+                    predicates.add(cb.equal(root.get("collegeName"), query.getCollegeName()));
+                }
                 return predicates.isEmpty() ? cb.conjunction()
                         : cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }

+ 7 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectGroupServiceImpl.java

@@ -65,9 +65,12 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
                 if (query.getExamId() != null) {
                     predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                 }
-                if (query.getSubjectCode() != null) {
+                if (StringUtils.isNotBlank(query.getSubjectCode())) {
                     predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                 }
+                if (query.getGroupNumber()>0) {
+                    predicates.add(cb.equal(root.get("groupNumber"), query.getGroupNumber()));
+                }
                 return predicates.isEmpty() ? cb.conjunction()
                         : cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
@@ -77,9 +80,9 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
 
     @Override
     public void saveReportSubjectGroupData(Integer examId, String subjectCode) {
-        //保存主观题统计分析
-        saveReportSubjectGroupData(examId, subjectCode, true);
         //保存客观题统计分析
+        saveReportSubjectGroupData(examId, subjectCode, true);
+        //保存主观题统计分析
         saveReportSubjectGroupData(examId, subjectCode, false);
     }
 
@@ -197,6 +200,7 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
             reportSubjectGroup.setSubjectCode(subjectCode);
             reportSubjectGroup.setSubjectName(subject.getName());
             reportSubjectGroup.setGroupName(question.getMainTitle());
+            reportSubjectGroup.setGroupNumber(question.getMainNumber());
             reportSubjectGroup.setMaxScore(maxScore);
             reportSubjectGroup.setMinScore(minScore);
             reportSubjectGroup.setAvgScore(avgScore);

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

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

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

@@ -56,7 +56,7 @@ public class ReportSubjectTeacherClassServiceImpl extends BaseQueryService<Repor
                 if (query.getExamId() != null) {
                     predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                 }
-                if (query.getSubjectCode() != null) {
+                if (StringUtils.isNotBlank(query.getSubjectCode())) {
                     predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                 }
                 if (StringUtils.isNotBlank(query.getTeacherName())) {

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

@@ -56,7 +56,7 @@ public class ReportSubjectTeacherServiceImpl extends BaseQueryService<ReportSubj
                 if (query.getExamId() != null) {
                     predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                 }
-                if (query.getSubjectCode() != null) {
+                if (StringUtils.isNotBlank(query.getSubjectCode())) {
                     predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                 }
                 if (StringUtils.isNotBlank(query.getTeacherName())) {

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

@@ -203,7 +203,7 @@ public class ScoreController extends BaseExamController {
         int examId = getSessionExamId(request);
         if (lockService.trylock(LockType.EXAM, examId)) {
             ScoreCalculateThread thread = new ScoreCalculateThread(examId, lockService, studentService,
-                    questionService, subjectService, scoreRateService, markService, groupService, checkStudentService,
+                    questionService, markService, checkStudentService,
                     reportService);
             taskExecutor.submit(thread);
         }

+ 7 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectGroupController.java

@@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import cn.com.qmth.stmms.admin.exam.BaseExamController;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.report.model.ReportSubjectGroup;
 import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectGroupService;
@@ -37,6 +39,9 @@ public class ReportSubjectGroupController extends BaseExamController {
     @Autowired
     private ReportSubjectGroupService reportSubjectGroupService;
 
+    @Autowired
+    private MarkGroupService groupService;
+
     @RequestMapping
     public String list(Model model, HttpServletRequest request, ReportSubjectQuery query) {
         WebUser webuser = RequestUtils.getWebUser(request);
@@ -46,7 +51,9 @@ public class ReportSubjectGroupController extends BaseExamController {
             List<ReportSubjectGroup> groups = reportSubjectGroupService.findByQuery(query);
             model.addAttribute("list", groups);
         }
+        List<MarkGroup> groupList = groupService.findByExamAndSubject(examId, query.getSubjectCode());
         model.addAttribute("subjectList", getExamSubject(examId, webuser));
+        model.addAttribute("groupList", groupList);
         model.addAttribute("query", query);
         return "modules/report/reportSubjectGroup";
     }

+ 2 - 100
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

@@ -3,7 +3,6 @@ package cn.com.qmth.stmms.admin.thread;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -15,9 +14,6 @@ import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
-import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
-import cn.com.qmth.stmms.biz.exam.service.ScoreRateService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.report.service.ReportService;
@@ -34,14 +30,8 @@ public class ScoreCalculateThread implements Runnable {
 
     private ExamQuestionService questionService;
 
-    private ExamSubjectService subjectService;
-
     private MarkService markService;
 
-    private MarkGroupService groupService;
-
-    private ScoreRateService scoreRateService;
-
     private int examId;
 
     private LockService lockService;
@@ -52,30 +42,21 @@ public class ScoreCalculateThread implements Runnable {
 
     private Map<String, List<ExamQuestion>> subjectiveMap;
 
-    private Map<String, Set<String>> campusNameMap;
-
-    private Map<String, Double> scoreRateMap;
-
     private CheckStudentService checkStudentService;
 
     public ScoreCalculateThread(int examId, LockService lockService, ExamStudentService studentService,
-            ExamQuestionService questionService, ExamSubjectService subjectService, ScoreRateService scoreRateService,
-            MarkService markService, MarkGroupService groupService, CheckStudentService checkStudentService,
+            ExamQuestionService questionService, 
+            MarkService markService, CheckStudentService checkStudentService,
             ReportService reportService) {
         this.examId = examId;
         this.lockService = lockService;
         this.studentService = studentService;
         this.questionService = questionService;
-        this.subjectService = subjectService;
-        this.scoreRateService = scoreRateService;
         this.markService = markService;
-        this.groupService = groupService;
         this.checkStudentService = checkStudentService;
         this.reportService = reportService;
         this.objectiveMap = new HashMap<String, List<ExamQuestion>>();
         this.subjectiveMap = new HashMap<String, List<ExamQuestion>>();
-        this.scoreRateMap = new HashMap<String, Double>();
-        this.campusNameMap = new HashMap<String, Set<String>>();
     }
 
     @Override
@@ -115,46 +96,6 @@ public class ScoreCalculateThread implements Runnable {
         }
     }
 
-//    private void statistics() {
-//        List<ExamSubject> examSubjects = subjectService.list(examId);
-//        for (ExamSubject examSubject : examSubjects) {
-//            Set<String> campusNameList = campusNameMap.get(examSubject.getCode());
-//            if (campusNameList == null) {
-//                continue;
-//            }
-//            for (String campusName : campusNameList) {
-//                List<ExamQuestion> questions = this.findQuestionList(examSubject.getCode(), null, false);
-//                Long count = studentService.countByExamIdAndSubjectCodeAndCampus(examId, examSubject.getCode(),
-//                        campusName, true, false);
-//                for (ExamQuestion examQuestion : questions) {
-//                    ScoreRate scoreRate = scoreRateService.findOne(examId, examSubject.getCode(), campusName, false,
-//                            examQuestion.getMainNumber(), examQuestion.getSubNumber());
-//                    if (scoreRate == null) {
-//                        scoreRate = new ScoreRate();
-//                        scoreRate.setExamId(examId);
-//                        scoreRate.setCampusName(campusName);
-//                        scoreRate.setSubjectCode(examSubject.getCode());
-//                        scoreRate.setMainNumber(examQuestion.getMainNumber());
-//                        scoreRate.setSubNumber(examQuestion.getSubNumber());
-//                        scoreRate.setObjective(examQuestion.isObjective());
-//                        scoreRate.setMainTitle(examQuestion.getMainTitle());
-//                        scoreRate.setTotalScore(examQuestion.getTotalScore());
-//                    }
-//                    String key = getKey(examSubject.getCode(), campusName, examQuestion.getQuestionNumber());
-//                    BigDecimal bg = new BigDecimal(scoreRateMap.get(key) * 1.00 / count);
-//                    double avgScore = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-//                    if (scoreRate.getAvgScore() == null || scoreRate.getAvgScore() != avgScore) {
-//                        scoreRate.setAvgScore(avgScore);
-//                    }
-//                    if (scoreRate.getTotalScore() != examQuestion.getTotalScore()) {
-//                        scoreRate.setTotalScore(examQuestion.getTotalScore());
-//                    }
-//                    scoreRateService.save(scoreRate);
-//                }
-//            }
-//        }
-//    }
-
     private void calculate(ExamStudent student) {
         try {
             ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
@@ -169,10 +110,6 @@ public class ScoreCalculateThread implements Runnable {
             // 增加主观题总分统计
             markService.scoreCalculate(student.getExamId(), student.getSubjectCode(), student.getId());
 
-            // 主观题得分统计
-            // 需要重新从数据库读取一遍考生信息
-//            statistics(studentService.findById(student.getId()));
-
             // 客观题0分主观题有分的考生
             if (student.getObjectiveScore() == 0 && student.getSubjectiveScore() != 0) {
                 CheckStudent cs = new CheckStudent(student.getId(), examId, student.getSubjectCode(),
@@ -184,41 +121,6 @@ public class ScoreCalculateThread implements Runnable {
         }
     }
 
-//    private void statistics(ExamStudent student) {
-//        List<ScoreItem> items = student.getScoreList(false);
-//        if (items.isEmpty()) {
-//            return;
-//        }
-//        List<ExamQuestion> list = this.findQuestionList(student.getSubjectCode(), student.getPaperType(), false);
-//        int count = list.size();
-//        for (int i = 0; i < count; i++) {
-//            ScoreItem scoreItem = items.size() > i ? items.get(i) : null;
-//            if (scoreItem != null) {
-//                String key = getKey(student.getSubjectCode(), student.getCampusName(), list.get(i).getQuestionNumber());
-//                Double totalScore = scoreRateMap.get(key);
-//                if (totalScore == null) {
-//                    scoreRateMap.put(key, scoreItem.getScore());
-//                } else {
-//                    scoreRateMap.put(key, totalScore + scoreItem.getScore());
-//                }
-//            }
-//        }
-//        Set<String> campusNames = campusNameMap.get(student.getSubjectCode());
-//        if (campusNames == null) {
-//            campusNames = new HashSet<>();
-//            campusNameMap.put(student.getSubjectCode(), campusNames);
-//        }
-//        campusNames.add(student.getCampusName());
-//    }
-
-//    private String getKey(String subjectCode, String campusName, String questionNumber) {
-//        List<String> list = new ArrayList<String>();
-//        list.add(subjectCode);
-//        list.add(campusName);
-//        list.add(questionNumber);
-//        return StringUtils.join(list, "-");
-//    }
-
     private List<ExamQuestion> findQuestionList(String subjectCode, String paperType, boolean objective) {
         if (objective) {
             String key = subjectCode + "_" + StringUtils.trimToEmpty(paperType);

+ 3 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectCollege.jsp

@@ -41,6 +41,9 @@
             </c:forEach>
         </select>
         &nbsp;
+        <label>学院:</label>
+        <input type="text" name="collegeName" value="${query.collegeName}" maxlength="10" class="input-small"/>
+        &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
          &nbsp;
 		<input id="export-button" class="btn" type="button" value="导出"/>

+ 28 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectGroup.jsp

@@ -29,13 +29,16 @@
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectGroup" method="post" class="breadcrumb form-search">
     <div>
         <label>科目:</label>
-        <select class="input-large" id="subjectCode" name="subjectCode">
+        <select class="input-large" id="subject-select" name="subjectCode">
             <option value="">请选择</option>
             <c:forEach items="${subjectList }" var="subject">
                 <option value="${subject.code }"
                         <c:if test="${query.subjectCode eq subject.code }">selected</c:if>>${subject.code}-${subject.name}</option>
             </c:forEach>
         </select>
+        <label>大题</label>
+            <select class="input-medium" id="group-select" name="groupNumber">
+            </select>
         &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
 		&nbsp;
@@ -86,6 +89,29 @@ $("#export-button").click(function(){
 	$("#searchForm").attr("action","${ctx}/admin/exam/reportSubjectGroup/export");
 	$("#searchForm").submit();
 });
+var searchSubjectCode = '${query.subjectCode}';
+var searchGroupNumber = '${query.groupNumber}';
+$('#subject-select').change(function(){
+    var code = $(this).val();
+    $('#group-select').empty();
+    $('#group-select').append('<option value="0">请选择</option>');
+    if(code==''){
+        $('#group-select').val('0').trigger('change');
+        return;
+    }
+    $.post('${ctx}/admin/exam/group/query', {subjectCode: code}, function(result){
+        var parent = $('#group-select');
+        for(var i=0;i<result.length;i++){
+            var group = result[i];
+            var dom = $('<option value="'+group.number+'">'+group.number+'-'+group.title+'</option>').appendTo(parent);
+            if(searchSubjectCode==code && searchGroupNumber==group.number){
+                dom.attr('selected', 'selected');
+            }
+        }
+        parent.trigger('change');
+    });
+});
+$('#subject-select').trigger('change');
 
     function viewGroupEcharts() {
         var groupNames = new Array();
@@ -188,7 +214,7 @@ $("#export-button").click(function(){
 
 
     function goSearch() {
-        if ($("#subjectCode").val() == null || $("#subjectCode").val() == '') {
+        if ($("#subject-select").val() == null || $("#subject-select").val() == '') {
             alert('请选择科目');
             return;
         }