|
@@ -16,7 +16,6 @@ import cn.com.qmth.stmms.biz.utils.OriginTag;
|
|
|
import cn.com.qmth.stmms.biz.utils.PictureConfigTransform;
|
|
|
import cn.com.qmth.stmms.biz.utils.PictureTag;
|
|
|
import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
-
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.apache.commons.lang.math.RandomUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -28,7 +27,6 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.persistence.criteria.*;
|
|
|
-
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.util.*;
|
|
|
|
|
@@ -86,13 +84,13 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
}
|
|
|
int success = 0;
|
|
|
int examId = list.get(0).getExamId();
|
|
|
- int schoolId = list.get(0).getSchoolId();
|
|
|
Map<String, ExamSubject> subjectMap = new HashMap<String, ExamSubject>();
|
|
|
Set<String> packageSet = new HashSet<String>();
|
|
|
+ Set<String> secretNumberSet = new HashSet<>();
|
|
|
|
|
|
for (ExamStudent student : list) {
|
|
|
ExamSubject subject = null;
|
|
|
- student.resetSecretNumber();
|
|
|
+ student.randomSecretNumber();
|
|
|
student.setSubjectCode(StringUtils.trimToNull(student.getSubjectCode()));
|
|
|
student.setSubjectName(StringUtils.trimToNull(student.getSubjectName()));
|
|
|
if (!subjectMap.containsKey(student.getSubjectCode())) {
|
|
@@ -153,6 +151,15 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
student.setSubjectName(subject.getName());
|
|
|
student.setSubjectLevel(subject.getLevel());
|
|
|
student.setSubjectCategory(subject.getCategory());
|
|
|
+ if (student.getSecretNumber() == null) {
|
|
|
+ student.randomSecretNumber();
|
|
|
+ while (secretNumberSet.contains(student.getSecretNumber())
|
|
|
+ || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber())
|
|
|
+ > 0) {
|
|
|
+ student.randomSecretNumber();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ secretNumberSet.add(student.getSecretNumber());
|
|
|
}
|
|
|
studentDao.save(list);
|
|
|
return success;
|
|
@@ -160,7 +167,6 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
|
|
|
@Transactional
|
|
|
public ExamStudent save(ExamStudent student) {
|
|
|
- student.resetSecretNumber();
|
|
|
student.setSubjectCode(StringUtils.trimToNull(student.getSubjectCode()));
|
|
|
student.setSubjectName(StringUtils.trimToNull(student.getSubjectName()));
|
|
|
ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
|
|
@@ -193,6 +199,13 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
packageService.save(examPackage);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (student.getSecretNumber() == null) {
|
|
|
+ student.randomSecretNumber();
|
|
|
+ while (studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber()) > 0) {
|
|
|
+ student.randomSecretNumber();
|
|
|
+ }
|
|
|
+ }
|
|
|
return studentDao.save(student);
|
|
|
}
|
|
|
|
|
@@ -362,9 +375,10 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
@Transactional
|
|
|
public boolean updateScanInfo(ExamStudent student) {
|
|
|
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
|
|
@@ -424,14 +438,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
@Override
|
|
|
public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
|
|
|
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.getStartScroe() != null) {
|
|
|
Predicate predicate1 = cb.ge(evaluationItemSum, query.getStartScroe());
|
|
|
Predicate predicate2 = cb.le(evaluationItemSum, query.getEndScroe());
|
|
|
if (query.getStartScroe() == 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);
|
|
|
predicates.add(cb.or(predicate, predicate3));
|
|
|
} else {
|
|
@@ -591,8 +605,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
if (StringUtils.isNotBlank(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()]));
|
|
|
}
|
|
|
};
|
|
|
}
|
|
@@ -611,8 +626,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
@Override
|
|
|
public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
|
|
|
String studentCode, String examSeqCode) {
|
|
|
- return studentDao.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode,
|
|
|
- examSeqCode);
|
|
|
+ return studentDao
|
|
|
+ .findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode, examSeqCode);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -645,9 +660,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
query.setPageNumber(1);
|
|
|
query.setPageSize(1);
|
|
|
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);
|
|
|
}
|
|
|
|
|
@@ -686,7 +701,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
return countByQuery(query);
|
|
|
}
|
|
|
|
|
|
- public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent, boolean breach) {
|
|
|
+ public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent,
|
|
|
+ boolean breach) {
|
|
|
ExamStudentSearchQuery query = new ExamStudentSearchQuery();
|
|
|
query.setExamId(examId);
|
|
|
query.setSubjectCode(subjectCode);
|
|
@@ -734,8 +750,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
// 构造评卷标记信息
|
|
|
Exam exam = examService.findById(student.getExamId());
|
|
|
ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
|
|
|
- List<PictureConfigItem> sliceConfig = subject.getSliceConfigList().isEmpty() ? exam.getSliceConfigList()
|
|
|
- : subject.getSliceConfigList();
|
|
|
+ List<PictureConfigItem> sliceConfig = subject.getSliceConfigList().isEmpty() ?
|
|
|
+ exam.getSliceConfigList() :
|
|
|
+ subject.getSliceConfigList();
|
|
|
if (!sliceConfig.isEmpty()) {
|
|
|
List<PictureTag> tags = PictureConfigTransform.process(sliceConfig, getSliceTags(student)).get(index);
|
|
|
if (tags != null) {
|
|
@@ -753,8 +770,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
|
|
|
Exam exam = examService.findById(student.getExamId());
|
|
|
ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
|
|
|
- List<PictureConfigItem> sliceConfig = subject.getSliceConfigList().isEmpty() ? exam.getSliceConfigList()
|
|
|
- : subject.getSliceConfigList();
|
|
|
+ List<PictureConfigItem> sliceConfig = subject.getSliceConfigList().isEmpty() ?
|
|
|
+ exam.getSliceConfigList() :
|
|
|
+ subject.getSliceConfigList();
|
|
|
if (!sliceConfig.isEmpty()) {
|
|
|
// 有裁切图配置时才需要获取原始评卷标记信息
|
|
|
tagMap = getSliceTags(student);
|
|
@@ -775,8 +793,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
@Override
|
|
|
public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student) {
|
|
|
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<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
|
|
|
for (MarkGroup group : markGroups) {
|
|
@@ -798,13 +816,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
List<String> lines = new LinkedList<>();
|
|
|
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<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<String> details = new ArrayList<>();
|
|
|
int i = 0;
|
|
@@ -884,14 +903,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
// 添加轨迹分
|
|
|
List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
|
|
|
for (MarkTrack markTrack : tracks) {
|
|
|
- originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getPositionX(), markTrack
|
|
|
- .getPositionY()));
|
|
|
+ originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getPositionX(),
|
|
|
+ markTrack.getPositionY()));
|
|
|
}
|
|
|
// 添加特殊标记
|
|
|
List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(selected.getId());
|
|
|
for (MarkSpecialTag markSpecialTag : specialTags) {
|
|
|
- originTags.add(new OriginTag(markSpecialTag.getTagName(), markSpecialTag.getPositionX(), markSpecialTag
|
|
|
- .getPositionY()));
|
|
|
+ originTags.add(new OriginTag(markSpecialTag.getTagName(), markSpecialTag.getPositionX(),
|
|
|
+ markSpecialTag.getPositionY()));
|
|
|
}
|
|
|
}
|
|
|
return originTags;
|