|
@@ -1,17 +1,11 @@
|
|
package cn.com.qmth.stmms.biz.mark.service.Impl;
|
|
package cn.com.qmth.stmms.biz.mark.service.Impl;
|
|
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.dao.*;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.*;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
|
-import cn.com.qmth.stmms.biz.mark.dao.*;
|
|
|
|
-import cn.com.qmth.stmms.biz.mark.model.*;
|
|
|
|
-import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
|
|
|
|
-import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
|
-import cn.com.qmth.stmms.biz.utils.FormalTaskUtil;
|
|
|
|
-import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
|
-import cn.com.qmth.stmms.biz.utils.TrialTaskUtil;
|
|
|
|
-import cn.com.qmth.stmms.common.enums.*;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
@@ -21,12 +15,47 @@ import org.springframework.data.domain.Sort;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.Date;
|
|
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.ExamQuestionDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.MarkGroupDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.MarkGroupStudentDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.MarkerDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.dao.SubjectiveScoreDao;
|
|
|
|
+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.model.MarkGroupStudent;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.Marker;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.ArbitrateHistoryDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.MarkLibraryDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.MarkSpecialTagDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.MarkTrackDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.ProblemHistoryDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.TrialHistoryDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.TrialLibraryDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.TrialTagDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.dao.TrialTrackDao;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.ArbitrateHistory;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.MarkResult;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.ProblemHistory;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
|
+import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
|
+import cn.com.qmth.stmms.biz.utils.TaskLock;
|
|
|
|
+import cn.com.qmth.stmms.biz.utils.TaskLockUtil;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.HistoryStatus;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.MarkStatus;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.ScorePolicy;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.ThirdPolicy;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 与评卷相关的所有修改操作(非传播性的新增操作除外),全部汇总到这里进行集中控制
|
|
* 与评卷相关的所有修改操作(非传播性的新增操作除外),全部汇总到这里进行集中控制
|
|
@@ -99,9 +128,11 @@ public class MarkServiceImpl implements MarkService {
|
|
public int applyCount(MarkGroup group) {
|
|
public int applyCount(MarkGroup group) {
|
|
int count = 0;
|
|
int count = 0;
|
|
if (group.getStatus() == MarkStatus.TRIAL) {
|
|
if (group.getStatus() == MarkStatus.TRIAL) {
|
|
- count = TrialTaskUtil.count(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(group));
|
|
|
|
+ count = taskLock.count();
|
|
} else if (group.getStatus() == MarkStatus.FORMAL) {
|
|
} else if (group.getStatus() == MarkStatus.FORMAL) {
|
|
- count = FormalTaskUtil.count(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(group));
|
|
|
|
+ count = taskLock.count();
|
|
}
|
|
}
|
|
return count;
|
|
return count;
|
|
}
|
|
}
|
|
@@ -121,9 +152,11 @@ public class MarkServiceImpl implements MarkService {
|
|
}
|
|
}
|
|
if (group != null) {
|
|
if (group != null) {
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
- return FormalTaskUtil.count(marker);
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(marker));
|
|
|
|
+ return taskLock.count(marker);
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
- return TrialTaskUtil.count(marker);
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(marker));
|
|
|
|
+ return taskLock.count(marker);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
return 0;
|
|
@@ -162,9 +195,13 @@ public class MarkServiceImpl implements MarkService {
|
|
@Override
|
|
@Override
|
|
public void releaseByGroup(MarkGroup group) {
|
|
public void releaseByGroup(MarkGroup group) {
|
|
if (group.getStatus() == MarkStatus.TRIAL) {
|
|
if (group.getStatus() == MarkStatus.TRIAL) {
|
|
- TrialTaskUtil.clear(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(group));
|
|
|
|
+ taskLock.clear();
|
|
|
|
+ TaskLockUtil.addTrialTask(getGroupKey(group), taskLock);
|
|
} else if (group.getStatus() == MarkStatus.FORMAL) {
|
|
} else if (group.getStatus() == MarkStatus.FORMAL) {
|
|
- FormalTaskUtil.clear(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(group));
|
|
|
|
+ taskLock.clear();
|
|
|
|
+ TaskLockUtil.addFormalTask(getGroupKey(group), taskLock);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -280,7 +317,13 @@ public class MarkServiceImpl implements MarkService {
|
|
// marker.getId()) > 0) {
|
|
// marker.getId()) > 0) {
|
|
// return false;
|
|
// return false;
|
|
// }
|
|
// }
|
|
- return FormalTaskUtil.add(marker, getApplyTaskId(library));
|
|
|
|
|
|
+ // return FormalTaskUtil.add(marker, getApplyTaskId(library));
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(marker));
|
|
|
|
+ if (taskLock.add(getApplyTaskId(library), library.getTaskNumber(), marker)) {
|
|
|
|
+ TaskLockUtil.addFormalTask(getGroupKey(marker), taskLock);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -294,7 +337,12 @@ public class MarkServiceImpl implements MarkService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public boolean applyLibrary(TrialLibrary library, Marker marker) {
|
|
public boolean applyLibrary(TrialLibrary library, Marker marker) {
|
|
- return TrialTaskUtil.add(marker, getApplyTaskId(library, marker));
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(marker));
|
|
|
|
+ if (taskLock.add(getApplyTaskId(library, marker), 1, marker)) {
|
|
|
|
+ TaskLockUtil.addTrialTask(getGroupKey(marker), taskLock);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -308,7 +356,8 @@ public class MarkServiceImpl implements MarkService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public boolean hasApplied(MarkLibrary library, Marker marker) {
|
|
public boolean hasApplied(MarkLibrary library, Marker marker) {
|
|
- return FormalTaskUtil.exists(marker, getApplyTaskId(library));
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(marker));
|
|
|
|
+ return taskLock.exist(getApplyTaskId(library), library.getTaskNumber(), marker);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -322,7 +371,8 @@ public class MarkServiceImpl implements MarkService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public boolean hasApplied(TrialLibrary library, Marker marker) {
|
|
public boolean hasApplied(TrialLibrary library, Marker marker) {
|
|
- return TrialTaskUtil.exists(marker, getApplyTaskId(library, marker));
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(marker));
|
|
|
|
+ return taskLock.exist(getApplyTaskId(library, marker), 1, marker);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -335,7 +385,10 @@ public class MarkServiceImpl implements MarkService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public void releaseLibrary(MarkLibrary library, Marker marker) {
|
|
public void releaseLibrary(MarkLibrary library, Marker marker) {
|
|
- FormalTaskUtil.remove(marker, getApplyTaskId(library));
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(marker));
|
|
|
|
+ taskLock.remove(getApplyTaskId(library), library.getTaskNumber(), marker);
|
|
|
|
+ taskLock.refresh(marker);
|
|
|
|
+ TaskLockUtil.addFormalTask(getGroupKey(marker), taskLock);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -348,7 +401,9 @@ public class MarkServiceImpl implements MarkService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public void releaseLibrary(TrialLibrary library, Marker marker) {
|
|
public void releaseLibrary(TrialLibrary library, Marker marker) {
|
|
- TrialTaskUtil.remove(marker, getApplyTaskId(library, marker));
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getTrialTask(getGroupKey(marker));
|
|
|
|
+ taskLock.remove(getApplyTaskId(library, marker), 1, marker);
|
|
|
|
+ TaskLockUtil.addTrialTask(getGroupKey(marker), taskLock);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -359,8 +414,9 @@ public class MarkServiceImpl implements MarkService {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public void releaseByMarker(Marker marker) {
|
|
public void releaseByMarker(Marker marker) {
|
|
- FormalTaskUtil.clear(marker);
|
|
|
|
- TrialTaskUtil.clear(marker);
|
|
|
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(marker));
|
|
|
|
+ taskLock.clear(marker);
|
|
|
|
+ TaskLockUtil.addFormalTask(getGroupKey(marker), taskLock);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1109,6 +1165,14 @@ public class MarkServiceImpl implements MarkService {
|
|
return library.getId() + "_" + marker.getId();
|
|
return library.getId() + "_" + marker.getId();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private String getGroupKey(MarkGroup group) {
|
|
|
|
+ return group.getExamId() + "_" + group.getSubjectCode() + "_" + group.getNumber();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private String getGroupKey(Marker marker) {
|
|
|
|
+ return marker.getExamId() + "_" + marker.getSubjectCode() + "_" + marker.getGroupNumber();
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 重置评卷分组的连带操作
|
|
* 重置评卷分组的连带操作
|
|
*
|
|
*
|