Bläddra i källkod

新增科目总分统计

ting.yin 1 år sedan
förälder
incheckning
e82f038738

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamSubjectDao.java

@@ -78,4 +78,7 @@ public interface ExamSubjectDao extends PagingAndSortingRepository<ExamSubject,
     @Query("update ExamSubject s set s.selective=?3 where s.pk.examId=?1 and s.pk.code=?2")
     public void updateSelective(int examId, String subjectCode, boolean selective);
 
+    @Query("select DISTINCT(s.totalScore) from ExamSubject s where s.pk.examId=?1 order by s.totalScore")
+    public List<Double> distinctTotalScore(int examId);
+
 }

+ 3 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamSubjectService.java

@@ -52,6 +52,8 @@ public interface ExamSubjectService {
 
     void updateSelective(int examId, String subjectCode, boolean selective);
 
-	String enableExport(Exam exam, String subjectCode);
+    String enableExport(Exam exam, String subjectCode);
+
+    List<Double> distinctTotalScore(int examId);
 
 }

+ 271 - 260
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamSubjectServiceImpl.java

@@ -40,274 +40,285 @@ import cn.com.qmth.stmms.common.enums.MarkStatus;
 @Service("examSubjectService")
 public class ExamSubjectServiceImpl extends BaseQueryService<ExamSubject> implements ExamSubjectService {
 
-	@Autowired
-	private ExamSubjectDao subjectDao;
+    @Autowired
+    private ExamSubjectDao subjectDao;
+
+    @Autowired
+    private ExamStudentDao examStudentDao;
 
-	@Autowired
-	private ExamStudentDao examStudentDao;
+    @PersistenceContext
+    private EntityManager entityManager;
 
-	@PersistenceContext
-	private EntityManager entityManager;
     @Autowired
     private MarkGroupService groupService;
 
     @Autowired
     private ExamStudentService studentService;
+
     @Autowired
     private CheckStudentService checkStudentService;
-	@Transactional
-	@Override
-	// @CachePut(value = "exam_subject_cache", key =
-	// "T(String).valueOf(#subject.examId)+'-'+#subject.code", condition =
-	// "#subject!=null && #subject.examId!=null && #subject.code!=null")
-	public ExamSubject save(ExamSubject subject) {
-		return subjectDao.save(subject);
-	}
-
-	@Override
-	// @Cacheable(value = "exam_subject_cache", key =
-	// "T(String).valueOf(#examId)+'-'+#code", condition =
-	// "#examId>0 && #code!=null")
-	public ExamSubject find(int examId, String code) {
-		return subjectDao.findByExamIdAndCode(examId, code);
-	}
-
-	@Override
-	public List<ExamSubject> list(int examId) {
-		return subjectDao.findByExamId(examId);
-	}
-
-	@Override
-	public List<ExamSubject> list(int examId, Set<String> codes) {
-		return subjectDao.findByExamIdAndSubjectCodeIn(examId, codes);
-	}
-
-	@Override
-	public List<String> listLevel(int examId) {
-		return subjectDao.findDistinctLevel(examId);
-	}
-
-	@Override
-	public List<String> listCategory(int examId) {
-		return subjectDao.findDistinctCategory(examId);
-	}
-
-	@Override
-	public List<ExamSubject> list(int examId, int uploadCountGt) {
-		return subjectDao.findByExamIdAndUploadCountGt(examId, uploadCountGt);
-	}
-
-	@Override
-	public long count(int examId) {
-		return subjectDao.countByExamId(examId);
-	}
-
-	@Override
-	public ExamSubjectSearchQuery findByQuery(ExamSubjectSearchQuery query) {
-		checkQuery(query);
-		Page<ExamSubject> result = subjectDao.findAll(buildSpecification(query), query);
-		fillResult(result, query);
-		return query;
-	}
-
-	@Override
-	public long countByQuery(ExamSubjectSearchQuery query) {
-		return subjectDao.count(buildSpecification(query));
-	}
-
-	@Transactional
-	@Override
-	// @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,
-	// allEntries = true)
-	public void delete(ExamSubject markSubject) {
-		subjectDao.delete(markSubject);
-	}
-
-	@Transactional
-	@Override
-	// @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,
-	// allEntries = true)
-	public void deleteByExamId(int examId) {
-		subjectDao.deleteByExamId(examId);
-	}
-
-	@Transactional
-	@Override
-	// @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,
-	// allEntries = true)
-	public void updateTotalScore(int examId) {
-		subjectDao.updateTotalScoreByExamId(examId);
-	}
-
-	@Transactional
-	@Override
-	// @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,
-	// allEntries = true)
-	public void updateScore(int examId, String code, boolean objective, double score) {
-		if (objective) {
-			subjectDao.updateObjectiveScore(examId, code, score);
-		} else {
-			subjectDao.updateSubjectiveScore(examId, code, score);
-		}
-		subjectDao.updateTotalScoreByExamIdAndCode(examId, code);
-	}
-
-	private Specification<ExamSubject> buildSpecification(final ExamSubjectSearchQuery query) {
-		return new Specification<ExamSubject>() {
-
-			@Override
-			public Predicate toPredicate(Root<ExamSubject> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
-				List<Predicate> predicates = new LinkedList<Predicate>();
-				if (query.getExamId() > 0) {
-					predicates.add(cb.equal(root.get("pk").get("examId"), query.getExamId()));
-				}
-				if (StringUtils.isNotEmpty(query.getCode())) {
-					predicates.add(cb.equal(root.get("pk").get("code"), query.getCode()));
-				}
-				if (StringUtils.isNotBlank(query.getLevel())) {
-					predicates.add(cb.equal(root.get("level"), query.getLevel()));
-				}
-				if (StringUtils.isNotBlank(query.getCategory())) {
-					predicates.add(cb.equal(root.get("category"), query.getCategory()));
-				}
-				if (query.getTotalScoreNotEqual() != null) {
-					predicates.add(cb.notEqual(root.get("totalScore"), query.getTotalScoreNotEqual()));
-				}
-				if (query.getSubjectiveScoreNotEqual() != null) {
-					predicates.add(cb.notEqual(root.get("subjectiveScore"), query.getSubjectiveScoreNotEqual()));
-				}
-				if (query.getUploadCountGt() != null) {
-					predicates.add(cb.gt(root.get("uploadCount").as(Integer.class), query.getUploadCountGt()));
-				}
-				if (query.getUploadCountEqual() != null) {
-					predicates.add(cb.equal(root.get("uploadCount").as(Integer.class), query.getUploadCountEqual()));
-				}
-				if (query.getSelective() != null) {
-					predicates.add(cb.equal(root.get("selective"), query.getSelective()));
-				}
-				if (StringUtils.isNotBlank(query.getCodeIn())) {
-					String[] list = query.getCodeIn().split(",");
-					if (list.length > 0) {
-						Predicate[] sub = new Predicate[list.length];
-						for (int i = 0; i < list.length; i++) {
-							sub[i] = cb.equal(root.get("pk").get("code"), list[i]);
-						}
-						predicates.add(cb.or(sub));
-					}
-				}
-				if (StringUtils.isNotBlank(query.getCodeNotIn())) {
-					String[] list = query.getCodeNotIn().split(",");
-					if (list.length > 0) {
-						Predicate[] sub = new Predicate[list.length];
-						for (int i = 0; i < list.length; i++) {
-							sub[i] = cb.notEqual(root.get("pk").get("code"), list[i]);
-						}
-						predicates.add(cb.and(sub));
-					}
-				}
-				return predicates.isEmpty() ? cb.conjunction()
-						: cb.and(predicates.toArray(new Predicate[predicates.size()]));
-			}
-		};
-	}
-
-	@Override
-	@Transactional
-	public void updateUploadCount(Integer examId, String subjectCode, int count) {
-		subjectDao.updateUploadCount(examId, subjectCode, count);
-	}
-
-	@Override
-	public List<ExamSubject> listSubjectiveScore(int examId, double subjectiveScore) {
-		return subjectDao.listSubjectiveScore(examId, subjectiveScore);
-	}
-
-	@Override
-	@Transactional
-	public void updateSliceConfig(Integer examId, String subjectCode, List<PictureConfigItem> configList) {
-		subjectDao.updateSliceConfig(examId, subjectCode,
-				configList != null ? StringUtils.join(configList, PictureConfigItem.DB_ITEM_JOINER) : "");
-	}
-
-	@Transactional
-	@Override
-	public void updateTrialCount(int examId, String subjectCode, int trialCount) {
-		subjectDao.updateTrialCount(examId, subjectCode, trialCount);
-	}
-
-	@Override
-	public int findMaxInspectRound(int examId, Set<String> subjectCodes) {
-		StringBuilder sql = new StringBuilder("select max(s.inspect_round) from eb_exam_subject s ");
-		sql.append(" where s.exam_id=" + examId + " and s.code in ('" + StringUtils.join(subjectCodes, "','") + "')");
-		Query countQuery = entityManager.createNativeQuery(sql.toString());
-		Object singleResult = countQuery.getResultList().get(0);
-		Integer count = singleResult == null ? 0 : Integer.valueOf(singleResult.toString());
-		return count;
-	}
-
-	@Transactional
-	@Override
-	public void nextInspectRound(int examId, String subjectCode) {
-		subjectDao.nextInspectRound(examId, subjectCode);
-		examStudentDao.cancelInspect(examId, subjectCode);
-	}
-
-	@Transactional
-	@Override
-	public void updateSelective(int examId, String subjectCode, boolean selective) {
-		subjectDao.updateSelective(examId, subjectCode, selective);
-	}
-
-	@Override
-	public String enableExport(Exam exam, String subjectCode) {
-		ExamSubject subject = find(exam.getId(), subjectCode);
-		if (subject == null) {
-			return subjectCode + "该科目不存在";
-		}
-		List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(exam.getId(), subjectCode,
-				MarkStatus.FORMAL, MarkStatus.TRIAL);
-		if (groups != null && !groups.isEmpty()) {
-			return subjectCode + "评卷未完成";
-		}
-		if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
-			return null;
-		}
-		if (DoubleUtil.sum(subject.getObjectiveScore(), subject.getSubjectiveScore()) == 0) {
-			return subjectCode + "科目总分为0";
-		}
-		long groupCount = groupService.countByExamAndSubject(exam.getId(), subjectCode);
-		if (subject.getSubjectiveScore() != null && subject.getSubjectiveScore() > 0 && groupCount == 0) {
-			return subjectCode + "未设置评卷分组";
-		}
-		if (checkStudentService.countByExamIdAndSubjectCodeAndChecked(exam.getId(), subjectCode, false) > 0) {
-			return subjectCode + "人工确认未完成";
-		}
-		ExamStudentSearchQuery query = new ExamStudentSearchQuery();
-		query.setExamId(exam.getId());
-		query.setUpload(false);
-		query.setManualAbsent(false);
-		query.setSubjectCode(subjectCode);
-		if (studentService.countByQuery(query) > 0) {
-			StringBuilder builder = new StringBuilder(subjectCode + "未上传考生必须人工指定缺考");
-			query.setPageSize(Integer.MAX_VALUE);
-			query = studentService.findByQuery(query);
-			for (ExamStudent s : query.getResult()) {
-				builder.append("," + s.getExamNumber());
-			}
-			return builder.toString();
-		}
-		query.setUpload(true);
-		query.setManualAbsent(true);
-		if (studentService.countByQuery(query) > 0) {
-			StringBuilder builder = new StringBuilder(subjectCode + "已上传考生有人工指定缺考");
-			query.setPageSize(Integer.MAX_VALUE);
-			query = studentService.findByQuery(query);
-			for (ExamStudent s : query.getResult()) {
-				builder.append("," + s.getExamNumber());
-			}
-			return builder.toString();
-		}
-		return null;
-	}
+
+    @Transactional
+    @Override
+    // @CachePut(value = "exam_subject_cache", key =
+    // "T(String).valueOf(#subject.examId)+'-'+#subject.code", condition =
+    // "#subject!=null && #subject.examId!=null && #subject.code!=null")
+    public ExamSubject save(ExamSubject subject) {
+        return subjectDao.save(subject);
+    }
+
+    @Override
+    // @Cacheable(value = "exam_subject_cache", key =
+    // "T(String).valueOf(#examId)+'-'+#code", condition =
+    // "#examId>0 && #code!=null")
+    public ExamSubject find(int examId, String code) {
+        return subjectDao.findByExamIdAndCode(examId, code);
+    }
+
+    @Override
+    public List<ExamSubject> list(int examId) {
+        return subjectDao.findByExamId(examId);
+    }
+
+    @Override
+    public List<ExamSubject> list(int examId, Set<String> codes) {
+        return subjectDao.findByExamIdAndSubjectCodeIn(examId, codes);
+    }
+
+    @Override
+    public List<String> listLevel(int examId) {
+        return subjectDao.findDistinctLevel(examId);
+    }
+
+    @Override
+    public List<String> listCategory(int examId) {
+        return subjectDao.findDistinctCategory(examId);
+    }
+
+    @Override
+    public List<ExamSubject> list(int examId, int uploadCountGt) {
+        return subjectDao.findByExamIdAndUploadCountGt(examId, uploadCountGt);
+    }
+
+    @Override
+    public long count(int examId) {
+        return subjectDao.countByExamId(examId);
+    }
+
+    @Override
+    public ExamSubjectSearchQuery findByQuery(ExamSubjectSearchQuery query) {
+        checkQuery(query);
+        Page<ExamSubject> result = subjectDao.findAll(buildSpecification(query), query);
+        fillResult(result, query);
+        return query;
+    }
+
+    @Override
+    public long countByQuery(ExamSubjectSearchQuery query) {
+        return subjectDao.count(buildSpecification(query));
+    }
+
+    @Transactional
+    @Override
+    // @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,
+    // allEntries = true)
+    public void delete(ExamSubject markSubject) {
+        subjectDao.delete(markSubject);
+    }
+
+    @Transactional
+    @Override
+    // @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,
+    // allEntries = true)
+    public void deleteByExamId(int examId) {
+        subjectDao.deleteByExamId(examId);
+    }
+
+    @Transactional
+    @Override
+    // @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,
+    // allEntries = true)
+    public void updateTotalScore(int examId) {
+        subjectDao.updateTotalScoreByExamId(examId);
+    }
+
+    @Transactional
+    @Override
+    // @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,
+    // allEntries = true)
+    public void updateScore(int examId, String code, boolean objective, double score) {
+        if (objective) {
+            subjectDao.updateObjectiveScore(examId, code, score);
+        } else {
+            subjectDao.updateSubjectiveScore(examId, code, score);
+        }
+        subjectDao.updateTotalScoreByExamIdAndCode(examId, code);
+    }
+
+    private Specification<ExamSubject> buildSpecification(final ExamSubjectSearchQuery query) {
+        return new Specification<ExamSubject>() {
+
+            @Override
+            public Predicate toPredicate(Root<ExamSubject> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
+                List<Predicate> predicates = new LinkedList<Predicate>();
+                if (query.getExamId() > 0) {
+                    predicates.add(cb.equal(root.get("pk").get("examId"), query.getExamId()));
+                }
+                if (StringUtils.isNotEmpty(query.getCode())) {
+                    predicates.add(cb.equal(root.get("pk").get("code"), query.getCode()));
+                }
+                if (StringUtils.isNotBlank(query.getLevel())) {
+                    predicates.add(cb.equal(root.get("level"), query.getLevel()));
+                }
+                if (StringUtils.isNotBlank(query.getCategory())) {
+                    predicates.add(cb.equal(root.get("category"), query.getCategory()));
+                }
+                if (query.getTotalScore() != null) {
+                    predicates.add(cb.equal(root.get("totalScore"), query.getTotalScore()));
+                }
+                if (query.getTotalScoreNotEqual() != null) {
+                    predicates.add(cb.notEqual(root.get("totalScore"), query.getTotalScoreNotEqual()));
+                }
+                if (query.getSubjectiveScoreNotEqual() != null) {
+                    predicates.add(cb.notEqual(root.get("subjectiveScore"), query.getSubjectiveScoreNotEqual()));
+                }
+                if (query.getUploadCountGt() != null) {
+                    predicates.add(cb.gt(root.get("uploadCount").as(Integer.class), query.getUploadCountGt()));
+                }
+                if (query.getUploadCountEqual() != null) {
+                    predicates.add(cb.equal(root.get("uploadCount").as(Integer.class), query.getUploadCountEqual()));
+                }
+                if (query.getSelective() != null) {
+                    predicates.add(cb.equal(root.get("selective"), query.getSelective()));
+                }
+                if (StringUtils.isNotBlank(query.getCodeIn())) {
+                    String[] list = query.getCodeIn().split(",");
+                    if (list.length > 0) {
+                        Predicate[] sub = new Predicate[list.length];
+                        for (int i = 0; i < list.length; i++) {
+                            sub[i] = cb.equal(root.get("pk").get("code"), list[i]);
+                        }
+                        predicates.add(cb.or(sub));
+                    }
+                }
+                if (StringUtils.isNotBlank(query.getCodeNotIn())) {
+                    String[] list = query.getCodeNotIn().split(",");
+                    if (list.length > 0) {
+                        Predicate[] sub = new Predicate[list.length];
+                        for (int i = 0; i < list.length; i++) {
+                            sub[i] = cb.notEqual(root.get("pk").get("code"), list[i]);
+                        }
+                        predicates.add(cb.and(sub));
+                    }
+                }
+                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
+                        .size()]));
+            }
+        };
+    }
+
+    @Override
+    @Transactional
+    public void updateUploadCount(Integer examId, String subjectCode, int count) {
+        subjectDao.updateUploadCount(examId, subjectCode, count);
+    }
+
+    @Override
+    public List<ExamSubject> listSubjectiveScore(int examId, double subjectiveScore) {
+        return subjectDao.listSubjectiveScore(examId, subjectiveScore);
+    }
+
+    @Override
+    @Transactional
+    public void updateSliceConfig(Integer examId, String subjectCode, List<PictureConfigItem> configList) {
+        subjectDao.updateSliceConfig(examId, subjectCode,
+                configList != null ? StringUtils.join(configList, PictureConfigItem.DB_ITEM_JOINER) : "");
+    }
+
+    @Transactional
+    @Override
+    public void updateTrialCount(int examId, String subjectCode, int trialCount) {
+        subjectDao.updateTrialCount(examId, subjectCode, trialCount);
+    }
+
+    @Override
+    public int findMaxInspectRound(int examId, Set<String> subjectCodes) {
+        StringBuilder sql = new StringBuilder("select max(s.inspect_round) from eb_exam_subject s ");
+        sql.append(" where s.exam_id=" + examId + " and s.code in ('" + StringUtils.join(subjectCodes, "','") + "')");
+        Query countQuery = entityManager.createNativeQuery(sql.toString());
+        Object singleResult = countQuery.getResultList().get(0);
+        Integer count = singleResult == null ? 0 : Integer.valueOf(singleResult.toString());
+        return count;
+    }
+
+    @Transactional
+    @Override
+    public void nextInspectRound(int examId, String subjectCode) {
+        subjectDao.nextInspectRound(examId, subjectCode);
+        examStudentDao.cancelInspect(examId, subjectCode);
+    }
+
+    @Transactional
+    @Override
+    public void updateSelective(int examId, String subjectCode, boolean selective) {
+        subjectDao.updateSelective(examId, subjectCode, selective);
+    }
+
+    @Override
+    public String enableExport(Exam exam, String subjectCode) {
+        ExamSubject subject = find(exam.getId(), subjectCode);
+        if (subject == null) {
+            return subjectCode + "该科目不存在";
+        }
+        List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(exam.getId(), subjectCode,
+                MarkStatus.FORMAL, MarkStatus.TRIAL);
+        if (groups != null && !groups.isEmpty()) {
+            return subjectCode + "评卷未完成";
+        }
+        if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+            return null;
+        }
+        if (DoubleUtil.sum(subject.getObjectiveScore(), subject.getSubjectiveScore()) == 0) {
+            return subjectCode + "科目总分为0";
+        }
+        long groupCount = groupService.countByExamAndSubject(exam.getId(), subjectCode);
+        if (subject.getSubjectiveScore() != null && subject.getSubjectiveScore() > 0 && groupCount == 0) {
+            return subjectCode + "未设置评卷分组";
+        }
+        if (checkStudentService.countByExamIdAndSubjectCodeAndChecked(exam.getId(), subjectCode, false) > 0) {
+            return subjectCode + "人工确认未完成";
+        }
+        ExamStudentSearchQuery query = new ExamStudentSearchQuery();
+        query.setExamId(exam.getId());
+        query.setUpload(false);
+        query.setManualAbsent(false);
+        query.setSubjectCode(subjectCode);
+        if (studentService.countByQuery(query) > 0) {
+            StringBuilder builder = new StringBuilder(subjectCode + "未上传考生必须人工指定缺考");
+            query.setPageSize(Integer.MAX_VALUE);
+            query = studentService.findByQuery(query);
+            for (ExamStudent s : query.getResult()) {
+                builder.append("," + s.getExamNumber());
+            }
+            return builder.toString();
+        }
+        query.setUpload(true);
+        query.setManualAbsent(true);
+        if (studentService.countByQuery(query) > 0) {
+            StringBuilder builder = new StringBuilder(subjectCode + "已上传考生有人工指定缺考");
+            query.setPageSize(Integer.MAX_VALUE);
+            query = studentService.findByQuery(query);
+            for (ExamStudent s : query.getResult()) {
+                builder.append("," + s.getExamNumber());
+            }
+            return builder.toString();
+        }
+        return null;
+    }
+
+    @Override
+    public List<Double> distinctTotalScore(int examId) {
+        return subjectDao.distinctTotalScore(examId);
+    }
 
 }

+ 10 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/query/ExamSubjectSearchQuery.java

@@ -13,6 +13,8 @@ public class ExamSubjectSearchQuery extends BaseQuery<ExamSubject> {
 
     private String category;
 
+    private Double totalScore;
+
     private Double totalScoreNotEqual;
 
     private Double subjectiveScoreNotEqual;
@@ -129,4 +131,12 @@ public class ExamSubjectSearchQuery extends BaseQuery<ExamSubject> {
         this.selective = selective;
     }
 
+    public Double getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(Double totalScore) {
+        this.totalScore = totalScore;
+    }
+
 }

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

@@ -14,6 +14,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -198,6 +199,18 @@ public class PaperController extends BaseExamController {
         model.addAttribute("examLock", lockService.isLocked(LockType.SCORE_CALCULATE, examId));
         Exam exam = examService.findById(examId);
         model.addAttribute("examType", exam.getType());
+        List<Double> totalScoreList = subjectService.distinctTotalScore(examId);
+        List<Long> subjectCountList = new ArrayList<Long>();
+        for (Double totalScore : totalScoreList) {
+            ExamSubjectSearchQuery querys = new ExamSubjectSearchQuery();
+            querys.setExamId(examId);
+            querys.setTotalScore(totalScore);
+            subjectCountList.add(subjectService.countByQuery(querys));
+        }
+        List<String> totalScores = totalScoreList.stream().map(m -> String.valueOf(m)).collect(Collectors.toList());
+        List<String> subjectCounts = subjectCountList.stream().map(m -> String.valueOf(m)).collect(Collectors.toList());
+        model.addAttribute("totalScoreList", String.join(",", totalScores));
+        model.addAttribute("subjectCountList", String.join(",", subjectCounts));
         return "modules/exam/paperList";
     }
 

+ 51 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/paperList.jsp

@@ -9,6 +9,7 @@
         color: #0663A2;
         cursor: pointer;
     }</style>
+	<script src="${ctxStatic}/echarts/echarts.min.js" type="text/javascript"></script>
 </head>
 <body>
 <div id="objImportBox" class="hide">
@@ -47,6 +48,8 @@
     </form>
 </div>
 <%-- <%@include file="/WEB-INF/views/include/examInfoNavTabs.jsp" %> --%>
+
+<div id="main" style="width: 600px;height:300px;"></div>
 <form id="searchForm" action="${ctx}/admin/exam/paper" method="post" class="breadcrumb form-search">
     <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
     <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
@@ -240,6 +243,54 @@
     function goSubImport() {
         alert("导入后请务必重新统分");
     };
+    
+    var myChart = echarts.init(document.getElementById('main'));
+    var subjectString = "${subjectCountList}";
+    var subjectData = subjectString.split(","); 
+    var scoreString = "${totalScoreList}";
+    var scoreData = scoreString.split(",");
+    debugger;
+    myChart.setOption({
+    	title: {
+            text: '科目总分统计'
+        },
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+              type: 'cross',
+              crossStyle: {
+                color: '#999',
+              },
+            },
+          },
+        color:['#7CB5EC'],
+    	  	xAxis: {
+    	  		 name: '总分',
+    		    type: 'category',
+    		    data: scoreData
+    		  },
+    		  yAxis: {
+    			name: '科目数量',
+    		    type: 'value',
+    		  },
+    		  series: [
+    		    {	
+    		      name:'科目数量',
+    		      data: subjectData,
+    		      type: 'bar',
+    		      tooltip: {
+    		          valueFormatter: function (value) {
+    		            return value +' 个';
+    		          }
+    		        },
+				  label: {
+    		            show: true,
+    		            position: 'top',
+    		          }
+    		    }
+    		  ]
+    		})
+    	
 </script>
 </body>
 </html>