瀏覽代碼

一分一段更新为向下兼容,即79.5算到79分段

ting.yin 2 年之前
父節點
當前提交
9885eca958

+ 8 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectModule.java

@@ -7,6 +7,7 @@ import java.util.Map;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 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.query.ExamQuestionSearchQuery;
 import cn.com.qmth.stmms.biz.report.model.ReportSubject;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectService;
@@ -48,6 +49,7 @@ public class SubjectModule implements Module {
     public void save() {
         ReportSubjectService service = SpringContextHolder.getBean(ReportSubjectService.class);
         ExamQuestionService questionService = SpringContextHolder.getBean(ExamQuestionService.class);
+        ExamStudentService studentService = SpringContextHolder.getBean(ExamStudentService.class);
         for (String subjectCode : this.counters.keySet()) {
             BaseCounter counter = counters.get(subjectCode);
             BaseCalculatorUnit unit = units.get(subjectCode);
@@ -55,9 +57,12 @@ public class SubjectModule implements Module {
             subject.setExamId(this.context.getExamId());
             subject.setSubjectCode(subjectCode);
             subject.setSubjectName(context.getSubject(subjectCode).getName());
-            subject.setTotalCount(counter.totalCount);
-            subject.setAbsentCount(counter.absentCount);
-            subject.setBreachCount(counter.breachCount);
+            subject.setTotalCount((int) studentService.countByExamIdAndSubjectCode(this.context.getExamId(),
+                    subjectCode));
+            subject.setAbsentCount((int) studentService.countByAbsentAndBreach(this.context.getExamId(), subjectCode,
+                    true, null));
+            subject.setBreachCount((int) studentService.countByAbsentAndBreach(this.context.getExamId(), subjectCode,
+                    null, true));
             subject.setRealityCount(counter.realityCount);
             if (unit != null) {
                 subject.setMaxScore(unit.maxScore);

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

@@ -83,7 +83,7 @@ public class SubjectRangeModule implements Module {
 
             JSONObject scoreRange = new JSONObject();
             for (int i = 0; i < subject.getTotalScore() + 1; i++) {
-                scoreRange.accumulate(String.valueOf(i), counter.countGtAndLe((double) (i - 1), (double) i));
+                scoreRange.accumulate(String.valueOf(i), counter.countGeAndLt((double) i, (double) (i + 1)));
             }
             subject.setScoreRange(scoreRange.toString());
             subjectService.save(subject);

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

@@ -707,7 +707,6 @@ public class PaperController extends BaseExamController {
                         questionService, reportService, examService, subjectService, fileService, examLock,
                         reportSubjectQuestionService, reportSubjectClassService, reportSubjectTeacherService,
                         reportSubjectCollegeService, reportSubjectGroupService, reportSubjectService);
-
                 taskExecutor.submit(thread);
             }
         }

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

@@ -76,7 +76,7 @@ public class ScanController extends BaseExamController {
                     + (StringUtils.isNotBlank(subject.getRemark()) ? ("-" + StringUtils.trimToEmpty(subject.getRemark()))
                             : ""));
             vo.setTotalCount(studentService.countByExamIdAndSubjectCode(examId, subject.getCode()));
-            vo.setScanCount(studentService.countByExamIdAndSubjectCode(examId, subject.getCode(), true));
+            vo.setScanCount(subject.getUploadCount());
             long sheetCount = studentService.countSheetCountByExamIdAndSubjectCode(examId, subject.getCode());
             long sheetCount2 = new BigDecimal(sheetCount).divide(new BigDecimal(2), 0, BigDecimal.ROUND_HALF_UP)
                     .longValue();

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

@@ -211,9 +211,9 @@ public class ReportSubjectRangeController extends BaseExamController {
         int total = (int) Math.ceil(totalScore / range);
         for (int i = total; i >= 0; i--) {
             int start = i * range;
-            int end = (i - 1) * range + 1;
-            if (start > totalScore) {
-                start = (int) Math.ceil(totalScore);
+            int end = (i + 1) * range;
+            if (end > totalScore) {
+                end = (int) Math.ceil(totalScore);
             }
             if (end < 0) {
                 end = 0;
@@ -228,13 +228,13 @@ public class ReportSubjectRangeController extends BaseExamController {
     private int getSumCount(JSONObject jsonObject, int start, int end) {
         int sumCount = 0;
         int currentCount = 0;
-        if (start < end) {
-            for (int i = start; i <= end; i++) {
+        if (start <= end) {
+            for (int i = start; i < end; i++) {
                 currentCount = jsonObject.getInt(String.valueOf(i));
                 sumCount = sumCount + currentCount;
             }
-        } else if (start >= end) {
-            for (int i = end; i <= start; i++) {
+        } else if (start > end) {
+            for (int i = end; i < start; i++) {
                 currentCount = jsonObject.getInt(String.valueOf(i));
                 sumCount = sumCount + currentCount;
             }

+ 127 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreReportJob.java

@@ -0,0 +1,127 @@
+package cn.com.qmth.stmms.admin.thread;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.core.task.AsyncTaskExecutor;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import cn.com.qmth.stmms.biz.exam.model.Exam;
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
+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.file.service.FileService;
+import cn.com.qmth.stmms.biz.lock.LockService;
+import cn.com.qmth.stmms.biz.report.service.ReportService;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectClassService;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectCollegeService;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectGroupService;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectQuestionService;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectService;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherService;
+import cn.com.qmth.stmms.common.enums.ExamStatus;
+import cn.com.qmth.stmms.common.enums.LockType;
+import cn.com.qmth.stmms.common.enums.MarkStatus;
+
+/**
+ * 统计定时任务
+ *
+ */
+@Component
+public class ScoreReportJob {
+
+    protected static final Logger log = LoggerFactory.getLogger(ScoreReportJob.class);
+
+    @Autowired
+    private ExamSubjectService subjectService;
+
+    @Autowired
+    private ExamQuestionService questionService;
+
+    @Autowired
+    private MarkGroupService groupService;
+
+    @Autowired
+    private ExamService examService;
+
+    @Autowired
+    private FileService fileService;
+
+    @Qualifier("task-executor")
+    @Autowired
+    private AsyncTaskExecutor taskExecutor;
+
+    @Autowired
+    private LockService lockService;
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @Autowired
+    private ReportService reportService;
+
+    @Autowired
+    private ReportSubjectQuestionService reportSubjectQuestionService;
+
+    @Autowired
+    private ReportSubjectClassService reportSubjectClassService;
+
+    @Autowired
+    private ReportSubjectTeacherService reportSubjectTeacherService;
+
+    @Autowired
+    private ReportSubjectCollegeService reportSubjectCollegeService;
+
+    @Autowired
+    private ReportSubjectGroupService reportSubjectGroupService;
+
+    @Autowired
+    private ReportSubjectService reportSubjectService;
+
+    /**
+     * 定时更新成绩分析报告
+     */
+    @Scheduled(cron = "${0 0/30 8-22 * * ?}")
+    public void updateReport() {
+        log.info("start auto-update report");
+        try {
+            List<Integer> examIds = groupService.findExamIdByStatus(MarkStatus.FORMAL);
+            for (Integer examId : examIds) {
+                Exam exam = examService.findById(examId);
+                if (ExamStatus.FINISH.equals(exam.getStatus())) {
+                    continue;
+                }
+                updateReportByExam(examId);
+            }
+        } catch (Exception e) {
+            log.error("auto-update report error", e);
+        } finally {
+            log.info("finish auto-report marker");
+        }
+    }
+
+    private void updateReportByExam(Integer examId) {
+        // 获取主观题总分大于0的科目
+        List<ExamSubject> subjects = subjectService.list(examId, 0);
+        Set<String> subjectSet = new HashSet<String>();
+        for (ExamSubject subject : subjects) {
+            if (!lockService.isLocked(LockType.SCORE_CALCULATE, subject.getExamId(), subject.getCode())) {
+                subjectSet.add(subject.getCode());
+            }
+        }
+        ScoreReportThread thread = new ScoreReportThread(examId, subjectSet, lockService, studentService,
+                questionService, reportService, examService, subjectService, fileService, true,
+                reportSubjectQuestionService, reportSubjectClassService, reportSubjectTeacherService,
+                reportSubjectCollegeService, reportSubjectGroupService, reportSubjectService);
+        taskExecutor.submit(thread);
+    }
+}

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

@@ -70,7 +70,7 @@
 	</form>
 <tags:message content="${message}"/>
 <table id="contentTable" class="table table-striped table-bordered table-condensed">
-<caption align="top">*分数段90-:表示分数小于等于90,并大于80分</caption> 
+<caption align="top">*分数段80表示:80&lt;=成绩&lt;90</caption> 
     <thead>
     <tr>
         <th>分数段</th>
@@ -81,7 +81,7 @@
     <tbody>
     <c:forEach items="${total}" var="subject">
         <tr>
-            <td>${subject.score}-</td>
+            <td>${subject.score}</td>
             <td>${subject.rangeCount}</td>
             <td><fmt:formatNumber type="number" value="${subject.rangeRate}" pattern="0.00" maxFractionDigits="2"/></td>
         </tr>