|
@@ -1,10 +1,47 @@
|
|
package cn.com.qmth.stmms.biz.exam.service.impl;
|
|
package cn.com.qmth.stmms.biz.exam.service.impl;
|
|
|
|
|
|
|
|
+import java.text.DecimalFormat;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.HashSet;
|
|
|
|
+import java.util.LinkedList;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.Set;
|
|
|
|
+
|
|
|
|
+import javax.persistence.criteria.CriteriaBuilder;
|
|
|
|
+import javax.persistence.criteria.CriteriaQuery;
|
|
|
|
+import javax.persistence.criteria.Expression;
|
|
|
|
+import javax.persistence.criteria.Predicate;
|
|
|
|
+import javax.persistence.criteria.Root;
|
|
|
|
+
|
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
|
+import org.apache.commons.lang.math.RandomUtils;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
|
+import org.springframework.data.domain.Sort;
|
|
|
|
+import org.springframework.data.domain.Sort.Direction;
|
|
|
|
+import org.springframework.data.jpa.domain.Specification;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+
|
|
import cn.com.qmth.stmms.biz.common.BaseQueryService;
|
|
import cn.com.qmth.stmms.biz.common.BaseQueryService;
|
|
import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
|
|
import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
|
|
-import cn.com.qmth.stmms.biz.exam.model.*;
|
|
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.Exam;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamPackage;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
|
|
|
|
+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.model.MarkGroup;
|
|
import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
|
|
import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
|
|
-import cn.com.qmth.stmms.biz.exam.service.*;
|
|
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
|
|
|
|
+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.mark.model.MarkLibrary;
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
|
|
@@ -17,19 +54,6 @@ import cn.com.qmth.stmms.biz.utils.PictureConfigTransform;
|
|
import cn.com.qmth.stmms.biz.utils.PictureTag;
|
|
import cn.com.qmth.stmms.biz.utils.PictureTag;
|
|
import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
|
|
import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
|
|
-import org.apache.commons.lang.StringUtils;
|
|
|
|
-import org.apache.commons.lang.math.RandomUtils;
|
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
-import org.springframework.data.domain.Page;
|
|
|
|
-import org.springframework.data.domain.Sort;
|
|
|
|
-import org.springframework.data.domain.Sort.Direction;
|
|
|
|
-import org.springframework.data.jpa.domain.Specification;
|
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
-
|
|
|
|
-import javax.persistence.criteria.*;
|
|
|
|
-import java.text.DecimalFormat;
|
|
|
|
-import java.util.*;
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implements ExamStudentService {
|
|
public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implements ExamStudentService {
|
|
@@ -154,8 +178,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
if (student.getSecretNumber() == null) {
|
|
if (student.getSecretNumber() == null) {
|
|
student.randomSecretNumber();
|
|
student.randomSecretNumber();
|
|
while (secretNumberSet.contains(student.getSecretNumber())
|
|
while (secretNumberSet.contains(student.getSecretNumber())
|
|
- || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber())
|
|
|
|
- > 0) {
|
|
|
|
|
|
+ || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber()) > 0) {
|
|
student.randomSecretNumber();
|
|
student.randomSecretNumber();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -375,10 +398,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
@Transactional
|
|
@Transactional
|
|
public boolean updateScanInfo(ExamStudent student) {
|
|
public boolean updateScanInfo(ExamStudent student) {
|
|
student.setUploadTime(new Date());
|
|
student.setUploadTime(new Date());
|
|
- return studentDao
|
|
|
|
- .updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(), student.getAnswers(),
|
|
|
|
- student.getBatchCode(), student.getPaperType(), student.isAbsent(), student.getUploadTime(),
|
|
|
|
- student.getObjectiveScore(), student.getObjectiveScoreList()) > 0;
|
|
|
|
|
|
+ return studentDao.updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(),
|
|
|
|
+ student.getAnswers(), student.getBatchCode(), student.getPaperType(), student.isAbsent(),
|
|
|
|
+ student.getUploadTime(), student.getObjectiveScore(), student.getObjectiveScoreList()) > 0;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -453,14 +475,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
@Override
|
|
@Override
|
|
public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
|
|
public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
|
|
List<Predicate> predicates = new LinkedList<Predicate>();
|
|
List<Predicate> predicates = new LinkedList<Predicate>();
|
|
- Expression<Double> evaluationItemSum = cb
|
|
|
|
- .sum(root.get("objectiveScore").as(Double.class), root.get("subjectiveScore").as(Double.class));
|
|
|
|
|
|
+ Expression<Double> evaluationItemSum = cb.sum(root.get("objectiveScore").as(Double.class),
|
|
|
|
+ root.get("subjectiveScore").as(Double.class));
|
|
if (query.getStartScore() != null) {
|
|
if (query.getStartScore() != null) {
|
|
Predicate predicate1 = cb.ge(evaluationItemSum, query.getStartScore());
|
|
Predicate predicate1 = cb.ge(evaluationItemSum, query.getStartScore());
|
|
Predicate predicate2 = cb.le(evaluationItemSum, query.getEndScore());
|
|
Predicate predicate2 = cb.le(evaluationItemSum, query.getEndScore());
|
|
if (query.getStartScore() == 0) {
|
|
if (query.getStartScore() == 0) {
|
|
- Predicate predicate = cb
|
|
|
|
- .or(cb.equal(root.get("absent"), true), cb.equal(root.get("breach"), true));
|
|
|
|
|
|
+ Predicate predicate = cb.or(cb.equal(root.get("absent"), true),
|
|
|
|
+ cb.equal(root.get("breach"), true));
|
|
Predicate predicate3 = cb.and(predicate1, predicate2);
|
|
Predicate predicate3 = cb.and(predicate1, predicate2);
|
|
predicates.add(cb.or(predicate, predicate3));
|
|
predicates.add(cb.or(predicate, predicate3));
|
|
} else {
|
|
} else {
|
|
@@ -539,9 +561,12 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
predicates
|
|
predicates
|
|
.add(cb.lessThan(root.get("objectiveScore").as(Double.class), query.getObjectiveScoreLt()));
|
|
.add(cb.lessThan(root.get("objectiveScore").as(Double.class), query.getObjectiveScoreLt()));
|
|
}
|
|
}
|
|
- if (query.getSubjectiveStatus() != null) {
|
|
|
|
- predicates.add(cb.equal(root.get("subjectiveStatus").as(SubjectiveStatus.class),
|
|
|
|
- query.getSubjectiveStatus()));
|
|
|
|
|
|
+ if (query.getStatusSet() != null && query.getStatusSet().size() > 0) {
|
|
|
|
+ List<Predicate> sub = new LinkedList<>();
|
|
|
|
+ for (SubjectiveStatus status : query.getStatusSet()) {
|
|
|
|
+ sub.add(cb.equal(root.get("subjectiveStatus").as(SubjectiveStatus.class), status));
|
|
|
|
+ }
|
|
|
|
+ predicates.add(cb.or(sub.toArray(new Predicate[sub.size()])));
|
|
}
|
|
}
|
|
if (query.getSubjectiveScore() != null) {
|
|
if (query.getSubjectiveScore() != null) {
|
|
predicates.add(cb.equal(root.get("subjectiveScore"), query.getSubjectiveScore()));
|
|
predicates.add(cb.equal(root.get("subjectiveScore"), query.getSubjectiveScore()));
|
|
@@ -633,9 +658,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
if (StringUtils.isNotBlank(query.getTeacher())) {
|
|
if (StringUtils.isNotBlank(query.getTeacher())) {
|
|
predicates.add(cb.equal(root.get("teacher"), query.getTeacher()));
|
|
predicates.add(cb.equal(root.get("teacher"), query.getTeacher()));
|
|
}
|
|
}
|
|
- return predicates.isEmpty() ?
|
|
|
|
- cb.conjunction() :
|
|
|
|
- cb.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
|
|
|
+ return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
|
|
|
|
+ .size()]));
|
|
}
|
|
}
|
|
};
|
|
};
|
|
}
|
|
}
|
|
@@ -654,8 +678,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
@Override
|
|
@Override
|
|
public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
|
|
public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
|
|
String studentCode, String examSeqCode) {
|
|
String studentCode, String examSeqCode) {
|
|
- return studentDao
|
|
|
|
- .findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode, examSeqCode);
|
|
|
|
|
|
+ return studentDao.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode,
|
|
|
|
+ examSeqCode);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -694,9 +718,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
query.setPageNumber(1);
|
|
query.setPageNumber(1);
|
|
query.setPageSize(1);
|
|
query.setPageSize(1);
|
|
query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
|
|
query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
|
|
- List<ExamStudent> list = minUploadTime != null ?
|
|
|
|
- studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, minUploadTime, query) :
|
|
|
|
- studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, query);
|
|
|
|
|
|
+ List<ExamStudent> list = minUploadTime != null ? studentDao.findUnLibraryStudent(examId, subjectCode,
|
|
|
|
+ groupNumber, minUploadTime, query) : studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber,
|
|
|
|
+ query);
|
|
return list.isEmpty() ? null : list.get(0);
|
|
return list.isEmpty() ? null : list.get(0);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -829,8 +853,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
@Override
|
|
@Override
|
|
public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore) {
|
|
public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore) {
|
|
Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
|
|
Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
|
|
- List<ExamQuestion> questions = questionService
|
|
|
|
- .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
|
|
|
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
|
|
|
|
+ student.getSubjectCode(), false);
|
|
List<ScoreItem> scoreList = student.getScoreList(false);
|
|
List<ScoreItem> scoreList = student.getScoreList(false);
|
|
List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
|
|
List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
|
|
for (MarkGroup group : markGroups) {
|
|
for (MarkGroup group : markGroups) {
|
|
@@ -852,14 +876,13 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
List<String> lines = new LinkedList<>();
|
|
List<String> lines = new LinkedList<>();
|
|
lines.add("成绩明细");
|
|
lines.add("成绩明细");
|
|
// 总分得分明细
|
|
// 总分得分明细
|
|
- lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "=" + format
|
|
|
|
- .format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+" + format
|
|
|
|
- .format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
|
|
|
|
|
|
+ lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "="
|
|
|
|
+ + format.format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+"
|
|
|
|
+ + format.format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
|
|
// 客观题得分明细
|
|
// 客观题得分明细
|
|
List<String> objectives = new LinkedList<>();
|
|
List<String> objectives = new LinkedList<>();
|
|
- List<ExamQuestion> questions = questionService
|
|
|
|
- .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(), student.getSubjectCode(), true,
|
|
|
|
- student.getPaperType());
|
|
|
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(
|
|
|
|
+ student.getExamId(), student.getSubjectCode(), true, student.getPaperType());
|
|
List<ScoreItem> scoreList = student.getScoreList(true);
|
|
List<ScoreItem> scoreList = student.getScoreList(true);
|
|
List<String> details = new ArrayList<>();
|
|
List<String> details = new ArrayList<>();
|
|
int i = 0;
|
|
int i = 0;
|
|
@@ -949,8 +972,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
// 添加轨迹分
|
|
// 添加轨迹分
|
|
List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
|
|
List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
|
|
for (MarkTrack markTrack : tracks) {
|
|
for (MarkTrack markTrack : tracks) {
|
|
- originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getOffsetIndex(),
|
|
|
|
- markTrack.getOffsetX(), markTrack.getOffsetY()));
|
|
|
|
|
|
+ originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getOffsetIndex(), markTrack
|
|
|
|
+ .getOffsetX(), markTrack.getOffsetY()));
|
|
}
|
|
}
|
|
// 添加特殊标记
|
|
// 添加特殊标记
|
|
List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(selected.getId());
|
|
List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(selected.getId());
|