|
@@ -210,10 +210,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
*/
|
|
|
@Override
|
|
|
public boolean applyLibrary(MarkLibrary library, Marker marker) {
|
|
|
+ // 查询待领取任务时,已经做了多评同一studentId互斥处理
|
|
|
// 首先判断多评情况下,同一个studentId是否已被该评卷员处理过
|
|
|
- if (libraryDao.countByStudentIdAndMarkerId(library.getStudentId(), marker.getId()) > 0) {
|
|
|
- return false;
|
|
|
- }
|
|
|
+ // if (libraryDao.countByStudentIdAndMarkerId(library.getStudentId(),
|
|
|
+ // marker.getId()) > 0) {
|
|
|
+ // return false;
|
|
|
+ // }
|
|
|
return CurrentTaskUtil.add(marker, getApplyTaskId(library));
|
|
|
}
|
|
|
|
|
@@ -250,10 +252,11 @@ public class MarkServiceImpl implements MarkService {
|
|
|
try {
|
|
|
lockService.waitUnlockGroup(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
lockService.lockMarker(marker.getId());
|
|
|
- //仲裁和等待仲裁的任务不被重置
|
|
|
- trackDao.deleteByMarkerId(marker.getId(),LibraryStatus.ARBITRATED,LibraryStatus.WAIT_ARBITRATE);
|
|
|
- specialTagDao.deleteByMarkerId(marker.getId(),LibraryStatus.ARBITRATED,LibraryStatus.WAIT_ARBITRATE);
|
|
|
- libraryDao.resetByMarkerId(marker.getId(), LibraryStatus.WAITING,LibraryStatus.ARBITRATED,LibraryStatus.WAIT_ARBITRATE);
|
|
|
+ // 仲裁和等待仲裁的任务不被重置
|
|
|
+ trackDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE);
|
|
|
+ specialTagDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE);
|
|
|
+ libraryDao.resetByMarkerId(marker.getId(), LibraryStatus.WAITING, LibraryStatus.ARBITRATED,
|
|
|
+ LibraryStatus.WAIT_ARBITRATE);
|
|
|
updateLibraryCount(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
releaseByMarker(marker);
|
|
|
} catch (Exception e) {
|
|
@@ -294,40 +297,54 @@ public class MarkServiceImpl implements MarkService {
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void submitLibrary(MarkLibrary library, Marker marker, List<MarkTrack> trackList,
|
|
|
+ public boolean submitLibrary(MarkLibrary library, Marker marker, List<MarkTrack> trackList,
|
|
|
List<MarkSpecialTag> tagList) {
|
|
|
+ // 判断评卷任务记录是否存在,以及评卷员是否有权限操作
|
|
|
+ if (library == null || !library.getExamId().equals(marker.getExamId())
|
|
|
+ || !library.getSubjectCode().equals(marker.getSubjectCode())
|
|
|
+ || !library.getGroupNumber().equals(marker.getGroupNumber())) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
// 判断大题是否存在
|
|
|
MarkGroup group = groupDao.findOne(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
|
|
|
if (group == null) {
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
// 等待大题释放锁定
|
|
|
lockService.waitUnlockGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
// 等待考生释放锁定
|
|
|
lockService.waitUnlockStudent(library.getStudentId());
|
|
|
+ // 尝试锁定评卷员
|
|
|
+ lockService.lockMarker(library.getMarkerId());
|
|
|
+ // 本人是否已领取该任务
|
|
|
+ boolean applied = hasApplied(library, marker);
|
|
|
|
|
|
try {
|
|
|
- Date now = new Date();
|
|
|
- // 尝试锁定评卷员
|
|
|
- lockService.lockMarker(library.getMarkerId());
|
|
|
+ // 非本人领取的待评任务
|
|
|
+ if (library.getStatus() == LibraryStatus.WAITING && !applied) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 非本人的回评任务
|
|
|
+ if (library.getStatus() == LibraryStatus.MARKED && !library.getMarkerId().equals(marker.getId())) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
// 校验总分是否超标
|
|
|
if (library.getMarkerScore() > group.getTotalScore() || StringUtils.isBlank(library.getMarkerScoreList())) {
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
// 是否多评情况下已处理过该考生评卷任务
|
|
|
if (libraryDao.countByStudentIdAndMarkerIdAndIdNotEqual(library.getStudentId(), library.getMarkerId(),
|
|
|
library.getId()) > 0) {
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
// 尝试提交评卷结果
|
|
|
+ Date now = new Date();
|
|
|
if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, library.getMarkerId(),
|
|
|
library.getMarkerScore(), library.getMarkerScoreList(), now, library.getTags(),
|
|
|
- LibraryStatus.WAITING, LibraryStatus.BACKED, LibraryStatus.MARKED) == 0) {
|
|
|
+ LibraryStatus.WAITING, LibraryStatus.MARKED) == 0) {
|
|
|
// 条件不符更新失败,直接返回
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
- // 释放任务
|
|
|
- CurrentTaskUtil.remove(marker, getApplyTaskId(library));
|
|
|
// 保存阅卷轨迹
|
|
|
if (trackList != null) {
|
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
@@ -368,32 +385,36 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 触发仲裁后续状态更新
|
|
|
libraryDao.updateByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber(),
|
|
|
LibraryStatus.WAIT_ARBITRATE);
|
|
|
- } else {
|
|
|
- // 评卷正常完成才尝试统分
|
|
|
- // scoreCalculate(library.getExamId(), library.getSubjectCode(),
|
|
|
- // library.getStudentId());
|
|
|
}
|
|
|
+ return true;
|
|
|
} catch (Exception e) {
|
|
|
throw e;
|
|
|
} finally {
|
|
|
+ // 只有确定本人已领取该任务时,才进行释放操作
|
|
|
+ if (applied) {
|
|
|
+ CurrentTaskUtil.remove(marker, getApplyTaskId(library));
|
|
|
+ }
|
|
|
lockService.unlockMarker(library.getMarkerId());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 管理员/组长打回某个评卷任务
|
|
|
+ * 管理员/组长打回某个评卷任务<br>
|
|
|
+ * 暂时不用到BACKED状态,直接等同于重置该评卷任务
|
|
|
*
|
|
|
* @param library
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void backLibrary(MarkLibrary library) {
|
|
|
- if (library.getStatus() == LibraryStatus.MARKED) {
|
|
|
- lockService.waitUnlockGroup(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
|
|
|
+ public boolean backLibrary(MarkLibrary library) {
|
|
|
+ lockService.waitUnlockGroup(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
|
|
|
+ if (libraryDao.resetById(library.getId(), LibraryStatus.WAITING, LibraryStatus.MARKED) > 0) {
|
|
|
trackDao.deleteByLibraryId(library.getId());
|
|
|
specialTagDao.deleteByLibraryId(library.getId());
|
|
|
- libraryDao.resetById(library.getId(), LibraryStatus.BACKED);
|
|
|
updateLibraryCount(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
|