|
@@ -1,19 +1,24 @@
|
|
|
package com.qmth.teachcloud.mark.service.impl;
|
|
|
|
|
|
+import com.itextpdf.text.pdf.languages.ArabicLigaturizer;
|
|
|
import com.qmth.teachcloud.common.entity.MarkPaper;
|
|
|
import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
|
|
|
import com.qmth.teachcloud.common.service.MarkPaperService;
|
|
|
-import com.qmth.teachcloud.mark.entity.MarkGroup;
|
|
|
-import com.qmth.teachcloud.mark.entity.MarkUserGroup;
|
|
|
-import com.qmth.teachcloud.mark.service.MarkGroupService;
|
|
|
-import com.qmth.teachcloud.mark.service.MarkService;
|
|
|
-import com.qmth.teachcloud.mark.service.MarkUserGroupService;
|
|
|
+import com.qmth.teachcloud.common.service.MarkStudentService;
|
|
|
+import com.qmth.teachcloud.mark.entity.*;
|
|
|
+import com.qmth.teachcloud.mark.enums.LockType;
|
|
|
+import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
|
|
|
+import com.qmth.teachcloud.common.enums.SubjectiveStatus;
|
|
|
+import com.qmth.teachcloud.mark.lock.LockService;
|
|
|
+import com.qmth.teachcloud.mark.service.*;
|
|
|
import com.qmth.teachcloud.mark.utils.TaskLock;
|
|
|
import com.qmth.teachcloud.mark.utils.TaskLockUtil;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
+import java.util.zip.GZIPOutputStream;
|
|
|
|
|
|
@Service
|
|
|
public class MarkServiceImpl implements MarkService {
|
|
@@ -24,6 +29,16 @@ public class MarkServiceImpl implements MarkService {
|
|
|
private MarkGroupService markGroupService;
|
|
|
@Resource
|
|
|
private MarkUserGroupService markUserGroupService;
|
|
|
+ @Resource
|
|
|
+ private MarkTaskService markTaskService;
|
|
|
+ @Resource
|
|
|
+ private MarkTrackService markTrackService;
|
|
|
+ @Resource
|
|
|
+ private MarkStudentService markStudentService;
|
|
|
+ @Resource
|
|
|
+ private MarkGroupStudentService markGroupStudentService;
|
|
|
+ @Resource
|
|
|
+ LockService lockService;
|
|
|
|
|
|
/**
|
|
|
* 某个评卷分组已申请的评卷任务数量
|
|
@@ -74,31 +89,51 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
@Override
|
|
|
public void resetMarker(MarkUserGroup markUserGroup) {
|
|
|
- MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markUserGroup.getExamId(), markUserGroup.getPaperNumber());
|
|
|
+ Long examId = markUserGroup.getExamId();
|
|
|
+ String paperNumber = markUserGroup.getPaperNumber();
|
|
|
+ Integer groupNumber = markUserGroup.getGroupNumber();
|
|
|
+ Long userId = markUserGroup.getUserId();
|
|
|
+ MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
if (markPaper == null || markUserGroupService.getById(markUserGroup.getId()) == null) {
|
|
|
return;
|
|
|
}
|
|
|
- /*if (markPaper.getStatus() == MarkPaperStatus.FORMAL) {
|
|
|
+ if (markPaper.getStatus() == MarkPaperStatus.FORMAL) {
|
|
|
// 遍历相关评卷任务的模式
|
|
|
- List<MarkLibrary> list = libraryDao.findByMarkerIdAndStatusNotIn(marker.getId(), LibraryStatus.ARBITRATED,
|
|
|
- LibraryStatus.WAIT_ARBITRATE, LibraryStatus.PROBLEM);
|
|
|
- for (MarkLibrary library : list) {
|
|
|
- trackDao.deleteByLibraryId(library.getId());
|
|
|
- specialTagDao.deleteByLibraryId(library.getId());
|
|
|
- libraryDao.resetById(library.getId(), null, null, null, null, LibraryStatus.WAITING,
|
|
|
- library.getStatus());
|
|
|
- lockService.waitlock(LockType.STUDENT, library.getStudentId());
|
|
|
- updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
|
|
|
- library.getGroupNumber(), SubjectiveStatus.UNMARK);
|
|
|
- studentService.updateSubjectiveStatusAndScore(library.getStudentId(), SubjectiveStatus.UNMARK, 0, null);
|
|
|
- inspectedService.cancelByStudent(library.getStudentId());
|
|
|
- lockService.unlock(LockType.STUDENT, library.getStudentId());
|
|
|
+ List<MarkTaskStatus> statusList = Arrays.asList(MarkTaskStatus.ARBITRATED, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM);
|
|
|
+ List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusNotIn(examId, paperNumber, groupNumber, userId, statusList);
|
|
|
+ for (MarkTask markTask : markTaskList) {
|
|
|
+ Long studentId = markTask.getStudentId();
|
|
|
+ markTrackService.deleteByTaskId(markTask.getId());
|
|
|
+// specialTagDao.deleteByLibraryId(library.getId());
|
|
|
+ markTaskService.resetById(markTask.getId(), null, null, null, MarkTaskStatus.WAITING);
|
|
|
+ lockService.waitlock(LockType.STUDENT, markTask.getStudentId());
|
|
|
+ updateStudentGroupStatus(studentId, examId, paperNumber, groupNumber, SubjectiveStatus.UNMARK);
|
|
|
+ markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, 0, null);
|
|
|
+// inspectedService.cancelByStudent(library.getStudentId());
|
|
|
+ lockService.unlock(LockType.STUDENT, markTask.getStudentId());
|
|
|
}
|
|
|
- markerDao.resetById(marker.getId());
|
|
|
+ markUserGroupService.resetById(markUserGroup.getId());
|
|
|
}
|
|
|
- updateMarkedCount(group);
|
|
|
+ this.updateMarkedCount(examId, paperNumber, groupNumber);
|
|
|
releaseByMarkUserGroup(markUserGroup);
|
|
|
- inspectHistoryService.deleteByExamIdAndSubjectCode(marker.getExamId(), marker.getSubjectCode());*/
|
|
|
+// inspectHistoryService.deleteByExamIdAndSubjectCode(marker.getExamId(), marker.getSubjectCode());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateMarkedCount(Long examId, String paperNumber, Integer groupNumber) {
|
|
|
+ List<MarkTaskStatus> markTaskStatuses = Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED);
|
|
|
+ int count = markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndStatusIn(examId, paperNumber, groupNumber, markTaskStatuses);
|
|
|
+ markGroupService.updateMarkedCount(examId, paperNumber, groupNumber, count);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateStudentGroupStatus(Long studentId, Long examId, String paperNumber, Integer groupNumber, SubjectiveStatus status) {
|
|
|
+ MarkGroupStudent gs = new MarkGroupStudent();
|
|
|
+ gs.setStudentId(studentId);
|
|
|
+ gs.setExamId(examId);
|
|
|
+ gs.setPaperNumber(paperNumber);
|
|
|
+ gs.setGroupNumber(groupNumber);
|
|
|
+ gs.setStatus(status);
|
|
|
+ markGroupStudentService.save(gs);
|
|
|
}
|
|
|
|
|
|
private String getGroupKey(MarkGroup markGroup) {
|