|
@@ -723,58 +723,79 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
List<PictureConfigItem> sliceConfig = PictureConfigItem.parse(exam.getSliceConfig());
|
|
|
if (!sliceConfig.isEmpty()) {
|
|
|
// 裁切图配置存在时才继续下面内容
|
|
|
- DecimalFormat format = new DecimalFormat("###.#");
|
|
|
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) {
|
|
|
- // 从考生主观题得分中拆解出本大题得分
|
|
|
- double score = 0;
|
|
|
- List<Double> details = new ArrayList<>();
|
|
|
- int i = -1;
|
|
|
- for (ExamQuestion question : questions) {
|
|
|
- i++;
|
|
|
- if (question.getMainNumber().equals(group.getNumber())) {
|
|
|
- double value = scoreList.size() > i ? scoreList.get(i).getScore() : 0;
|
|
|
- score += value;
|
|
|
- details.add(value);
|
|
|
- }
|
|
|
- }
|
|
|
- // 原图中需要显示的内容列表
|
|
|
- List<OriginTag> originTags = new LinkedList<>();
|
|
|
- // 首先添加本大题总得分
|
|
|
- originTags.add(new OriginTag(format.format(score), 0.1, 0.01));
|
|
|
- // 检测应该使用哪个评卷任务的轨迹记录
|
|
|
- MarkLibrary selected = null;
|
|
|
- List<MarkLibrary> libraries = libraryService.findByStudentAndGroup(student.getId(), group.getNumber());
|
|
|
- for (MarkLibrary library : libraries) {
|
|
|
- if (checkScore(library, score, details)) {
|
|
|
- selected = library;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (selected != null) {
|
|
|
- // 添加轨迹分
|
|
|
- List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
|
|
|
- for (MarkTrack markTrack : tracks) {
|
|
|
- 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()));
|
|
|
- }
|
|
|
- }
|
|
|
- tagMap.put(group, originTags);
|
|
|
+ tagMap.put(group, buildOriginTags(student, group, questions, scoreList));
|
|
|
}
|
|
|
}
|
|
|
return PictureConfigTransform.process(sliceConfig, tagMap);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据考生获取所有评卷分组的标记内容
|
|
|
+ */
|
|
|
+ @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<ScoreItem> scoreList = student.getScoreList(false);
|
|
|
+ List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
|
|
|
+ for (MarkGroup group : markGroups) {
|
|
|
+ tagMap.put(group, buildOriginTags(student, group, questions, scoreList));
|
|
|
+ }
|
|
|
+ return tagMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<OriginTag> buildOriginTags(ExamStudent student, MarkGroup group, List<ExamQuestion> questions,
|
|
|
+ List<ScoreItem> scoreList) {
|
|
|
+ DecimalFormat format = new DecimalFormat("###.#");
|
|
|
+ // 从考生主观题得分中拆解出本大题得分
|
|
|
+ double score = 0;
|
|
|
+ List<Double> details = new ArrayList<>();
|
|
|
+ int i = -1;
|
|
|
+ for (ExamQuestion question : questions) {
|
|
|
+ i++;
|
|
|
+ if (question.getMainNumber().equals(group.getNumber())) {
|
|
|
+ double value = scoreList.size() > i ? scoreList.get(i).getScore() : 0;
|
|
|
+ score += value;
|
|
|
+ details.add(value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 原图中需要显示的内容列表
|
|
|
+ List<OriginTag> originTags = new LinkedList<>();
|
|
|
+ // 首先添加本大题总得分
|
|
|
+ originTags.add(new OriginTag(format.format(score), 0.1, 0.01));
|
|
|
+ // 检测应该使用哪个评卷任务的轨迹记录
|
|
|
+ MarkLibrary selected = null;
|
|
|
+ List<MarkLibrary> libraries = libraryService.findByStudentAndGroup(student.getId(), group.getNumber());
|
|
|
+ for (MarkLibrary library : libraries) {
|
|
|
+ if (checkScore(library, score, details)) {
|
|
|
+ selected = library;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (selected != null) {
|
|
|
+ // 添加轨迹分
|
|
|
+ List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
|
|
|
+ for (MarkTrack markTrack : tracks) {
|
|
|
+ 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()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return originTags;
|
|
|
+ }
|
|
|
+
|
|
|
private boolean checkScore(MarkLibrary library, double score, List<Double> details) {
|
|
|
if (library.getMarkerScore() == null) {
|
|
|
return false;
|