|
@@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory;
|
|
|
|
|
|
import cn.com.qmth.examcloud.api.commons.enums.CallType;
|
|
|
import cn.com.qmth.examcloud.api.commons.enums.ExamType;
|
|
|
+import cn.com.qmth.examcloud.commons.exception.StatusException;
|
|
|
import cn.com.qmth.examcloud.core.oe.admin.api.ExamRecordForMarkingCloudService;
|
|
|
import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamRecordForMarkingBean;
|
|
|
import cn.com.qmth.examcloud.core.oe.admin.api.request.FindExamRecordForMarkingInfoReq;
|
|
@@ -31,11 +32,11 @@ import cn.com.qmth.examcloud.support.cache.bean.SysPropertyCacheBean;
|
|
|
import cn.com.qmth.examcloud.support.enums.ExamProperties;
|
|
|
import cn.com.qmth.examcloud.support.enums.MarkingType;
|
|
|
import cn.com.qmth.examcloud.support.enums.MarkingWorkType;
|
|
|
-import cn.com.qmth.examcloud.task.base.multithread.Producer;
|
|
|
+import cn.com.qmth.examcloud.task.base.multithread.ResultProducer;
|
|
|
import cn.com.qmth.examcloud.task.service.dto.MarkWorkCreateItemsDto;
|
|
|
import cn.com.qmth.examcloud.web.support.SpringContextHolder;
|
|
|
|
|
|
-public class MarkWorkCreateItemsProducer extends Producer {
|
|
|
+public class MarkWorkCreateItemsProducer extends ResultProducer {
|
|
|
|
|
|
private ExamRecordForMarkingCloudService examRecordForMarkingCloudService = SpringContextHolder
|
|
|
.getBean(ExamRecordForMarkingCloudService.class);
|
|
@@ -48,7 +49,7 @@ public class MarkWorkCreateItemsProducer extends Producer {
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(MarkWorkCreateItemsProducer.class);
|
|
|
|
|
|
@Override
|
|
|
- protected void produce(Map<String, Object> param) throws Exception {
|
|
|
+ protected List<ExamRecordForMarkingBean> produce(Map<String, Object> param) throws Exception {
|
|
|
Long examId = (Long) param.get("examId");
|
|
|
Long workId = (Long) param.get("workId");
|
|
|
Long batchSize = 50L;
|
|
@@ -61,10 +62,11 @@ public class MarkWorkCreateItemsProducer extends Producer {
|
|
|
getExamReq.setId(examId);
|
|
|
GetExamResp getExamResp = examCloudService.getExam(getExamReq);
|
|
|
ExamBean examBean = getExamResp.getExamBean();
|
|
|
-
|
|
|
+ List<ExamRecordForMarkingBean> examRecordForMarkingBeanList = null;
|
|
|
if (ExamType.ONLINE.name().equals(examBean.getExamType()) && checkIsAnyTimeMark(examId)) {
|
|
|
// 在线考试且是随考随阅的,从调卷规则和考试记录合并拉取所有试卷。因为调卷规则随时会修改
|
|
|
- List<String> result = getAllBasePaperIdsForAnyTimeMark(workId, examId);
|
|
|
+ examRecordForMarkingBeanList = getAllBasePaperForAnyTimeMark(workId, examId);
|
|
|
+ List<String> result = exludeRandomPaper(examRecordForMarkingBeanList);
|
|
|
if (CollectionUtils.isNotEmpty(result)) {
|
|
|
LOG.info("创建评卷工作评分项,试卷套数:" + result.size());
|
|
|
subListDispose(result, workId, batchSize);
|
|
@@ -72,25 +74,25 @@ public class MarkWorkCreateItemsProducer extends Producer {
|
|
|
LOG.info("创建评卷工作评分项,试卷套数:0");
|
|
|
}
|
|
|
} else {
|
|
|
- FindExamRecordForMarkingInfoReq markingReq = new FindExamRecordForMarkingInfoReq();
|
|
|
- markingReq.setExamId(examId);
|
|
|
- markingReq.setBatchNum(workId + "");
|
|
|
- FindExamRecordForMarkingInfoResp markingResp = examRecordForMarkingCloudService
|
|
|
- .findExamRecordForMarkingInfo(markingReq);
|
|
|
- List<ExamRecordForMarkingBean> examRecordForMarkingBeanList = markingResp.getExamRecordForMarkingBeanList();
|
|
|
+ // 从阅卷数据取
|
|
|
+ examRecordForMarkingBeanList = getAllBasePaperFromMarkingData(workId, examId);
|
|
|
if (examRecordForMarkingBeanList != null && examRecordForMarkingBeanList.size() > 0) {
|
|
|
- List<String> result = duplicateRemoval(examRecordForMarkingBeanList);
|
|
|
+ List<String> result = exludeRandomPaper(examRecordForMarkingBeanList);
|
|
|
LOG.info("创建评卷工作评分项,试卷套数:" + result.size());
|
|
|
subListDispose(result, workId, batchSize);
|
|
|
} else {
|
|
|
LOG.info("创建评卷工作评分项,试卷套数:0");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ if (CollectionUtils.isEmpty(examRecordForMarkingBeanList)) {
|
|
|
+ throw new StatusException("既没有调卷规则信息也没有考试记录信息");
|
|
|
+ }
|
|
|
+ return examRecordForMarkingBeanList;
|
|
|
}
|
|
|
|
|
|
- private List<String> getAllBasePaperIdsForAnyTimeMark(Long workId, Long examId) {
|
|
|
- Set<String> basePaperIds = new HashSet<>();
|
|
|
+ private List<ExamRecordForMarkingBean> getAllBasePaperForAnyTimeMark(Long workId, Long examId) {
|
|
|
+ // 从调卷规则取
|
|
|
+ List<ExamRecordForMarkingBean> ret = new ArrayList<>();
|
|
|
GetExtractConfigBeanReq req = new GetExtractConfigBeanReq();
|
|
|
req.setExamId(examId);
|
|
|
GetExtractConfigBeanResp res = extractConfigCloudService.getExtractConfigBean(req);
|
|
@@ -99,29 +101,42 @@ public class MarkWorkCreateItemsProducer extends Producer {
|
|
|
boolean randomPaper = CallType.RANDOM_PAPER.equals(ec.getCallType());
|
|
|
if (!randomPaper) {
|
|
|
for (ExtractConfigDetailBean ecb : ec.getDetails()) {
|
|
|
- basePaperIds.add(ecb.getPaperId());
|
|
|
+ ExamRecordForMarkingBean bean = new ExamRecordForMarkingBean();
|
|
|
+ bean.setBasePaperId(ecb.getPaperId());
|
|
|
+ bean.setCourseId(ec.getCourseId());
|
|
|
+ bean.setRandomPaper(true);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ ExamRecordForMarkingBean bean = new ExamRecordForMarkingBean();
|
|
|
+ bean.setBasePaperId(ec.getRandomPaperId());
|
|
|
+ bean.setCourseId(ec.getCourseId());
|
|
|
+ bean.setRandomPaper(true);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ // 从阅卷数据取
|
|
|
+ ret.addAll(getAllBasePaperFromMarkingData(workId, examId));
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ExamRecordForMarkingBean> getAllBasePaperFromMarkingData(Long workId, Long examId) {
|
|
|
FindExamRecordForMarkingInfoReq markingReq = new FindExamRecordForMarkingInfoReq();
|
|
|
markingReq.setExamId(examId);
|
|
|
markingReq.setBatchNum(workId + "");
|
|
|
+ // 包含千卷
|
|
|
+ markingReq.setIncludeRandomPaper(true);
|
|
|
FindExamRecordForMarkingInfoResp markingResp = examRecordForMarkingCloudService
|
|
|
.findExamRecordForMarkingInfo(markingReq);
|
|
|
- List<ExamRecordForMarkingBean> examRecordForMarkingBeanList = markingResp.getExamRecordForMarkingBeanList();
|
|
|
- if (examRecordForMarkingBeanList != null && examRecordForMarkingBeanList.size() > 0) {
|
|
|
- for (ExamRecordForMarkingBean bean : examRecordForMarkingBeanList) {
|
|
|
- basePaperIds.add(bean.getBasePaperId());
|
|
|
- }
|
|
|
- }
|
|
|
- return new ArrayList<>(basePaperIds);
|
|
|
+ return markingResp.getExamRecordForMarkingBeanList();
|
|
|
}
|
|
|
|
|
|
- private List<String> duplicateRemoval(List<ExamRecordForMarkingBean> list) {
|
|
|
+ private List<String> exludeRandomPaper(List<ExamRecordForMarkingBean> list) {
|
|
|
Set<String> set = new HashSet<String>();
|
|
|
for (ExamRecordForMarkingBean bean : list) {
|
|
|
- set.add(bean.getBasePaperId());
|
|
|
+
|
|
|
+ if (bean.getRandomPaper() == null || !bean.getRandomPaper()) {
|
|
|
+ set.add(bean.getBasePaperId());
|
|
|
+ }
|
|
|
}
|
|
|
List<String> result = new ArrayList<>(set);
|
|
|
return result;
|