|
@@ -0,0 +1,141 @@
|
|
|
+package cn.com.qmth.examcloud.task.service.job;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+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;
|
|
|
+import cn.com.qmth.examcloud.core.oe.admin.api.response.FindExamRecordForMarkingInfoResp;
|
|
|
+import cn.com.qmth.examcloud.core.questions.api.ExtractConfigCloudService;
|
|
|
+import cn.com.qmth.examcloud.core.questions.api.request.GetBasePaperReq;
|
|
|
+import cn.com.qmth.examcloud.core.questions.api.response.GetBasePaperResp;
|
|
|
+import cn.com.qmth.examcloud.marking.api.MarkItemCloudService;
|
|
|
+import cn.com.qmth.examcloud.marking.api.MarkWorkCloudService;
|
|
|
+import cn.com.qmth.examcloud.marking.api.bean.MarkItemBean;
|
|
|
+import cn.com.qmth.examcloud.marking.api.bean.MarkWorkBean;
|
|
|
+import cn.com.qmth.examcloud.marking.api.bean.MarkWorkMainBean;
|
|
|
+import cn.com.qmth.examcloud.marking.api.request.SaveMarkItemReq;
|
|
|
+import cn.com.qmth.examcloud.marking.api.request.UpdateMarkWorkReq;
|
|
|
+import cn.com.qmth.examcloud.marking.api.response.GetTodoMarkWorkMainResp;
|
|
|
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultPaper;
|
|
|
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionGroup;
|
|
|
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionStructureWrapper;
|
|
|
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionUnitWrapper;
|
|
|
+import cn.com.qmth.examcloud.task.service.consumer.MarkWorkCreateConsumer;
|
|
|
+import cn.com.qmth.examcloud.task.service.producer.MarkWorkCreateProducer;
|
|
|
+import cn.com.qmth.examcloud.web.task.AbstractTask;
|
|
|
+import cn.com.qmth.examcloud.web.task.ScheduleJob;
|
|
|
+import cn.com.qmth.examcloud.web.task.TaskTracker;
|
|
|
+
|
|
|
+@Component("markWorkPaperCreateTask")
|
|
|
+public class MarkWorkPaperCreateTask extends AbstractTask {
|
|
|
+
|
|
|
+ private static final double SCORE_INTERVAL = 0.5;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkWorkCloudService markWorkCloudService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkItemCloudService markItemCloudService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExtractConfigCloudService extractConfigCloudService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamRecordForMarkingCloudService examRecordForMarkingCloudService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ TaskTracker TaskTracker;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void run(ScheduleJob scheduleJob) throws Exception {
|
|
|
+ GetTodoMarkWorkMainResp res = markWorkCloudService.getTodoMarkWorkMain();
|
|
|
+ MarkWorkMainBean bean = res.getBean();
|
|
|
+ if (res.getBean() != null) {
|
|
|
+ UpdateMarkWorkReq req = new UpdateMarkWorkReq();
|
|
|
+ MarkWorkBean wbean = new MarkWorkBean();
|
|
|
+ wbean.setId(bean.getId());
|
|
|
+ wbean.setName(bean.getName());
|
|
|
+ wbean.setRemark(bean.getRemark());
|
|
|
+ req.setMarkWorkBean(wbean);
|
|
|
+ try {
|
|
|
+ createMarkItems(Long.parseLong(bean.getExamId()), bean.getId());
|
|
|
+ createStudentPapers(Long.parseLong(bean.getExamId()), bean.getId());
|
|
|
+ wbean.setStatus(1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ wbean.setStatus(2);
|
|
|
+ throw new StatusException("100001", "评卷工作试卷生成出错", e);
|
|
|
+ } finally {
|
|
|
+ markWorkCloudService.updateMarkWork(req);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void createMarkItems(Long examId, Long workId) {
|
|
|
+ // 根据考试批次ID获取需要阅卷的试卷集合
|
|
|
+ FindExamRecordForMarkingInfoReq markingReq = new FindExamRecordForMarkingInfoReq();
|
|
|
+ markingReq.setExamId(examId);
|
|
|
+ markingReq.setBatchNum(workId + "");
|
|
|
+ FindExamRecordForMarkingInfoResp markingResp = examRecordForMarkingCloudService
|
|
|
+ .findExamRecordForMarkingInfo(markingReq);
|
|
|
+ List<ExamRecordForMarkingBean> examRecordForMarkingBeanList = markingResp.getExamRecordForMarkingBeanList();
|
|
|
+ List<MarkItemBean> markItems = new ArrayList<MarkItemBean>();
|
|
|
+ GetBasePaperReq getBasePaperReq = new GetBasePaperReq();
|
|
|
+ for (ExamRecordForMarkingBean markingBean : examRecordForMarkingBeanList) {
|
|
|
+ getBasePaperReq.setPaperId(markingBean.getBasePaperId());
|
|
|
+ GetBasePaperResp getBasePaperResp = extractConfigCloudService.getBasePaper(getBasePaperReq);
|
|
|
+ DefaultPaper defaultPaper = getBasePaperResp.getDefaultPaper();
|
|
|
+ List<DefaultQuestionGroup> defaultQuestionGroupList = defaultPaper.getQuestionGroupList();
|
|
|
+ // 大题号
|
|
|
+ int mainNumber = 1;
|
|
|
+ // 每个小题在试卷中的位置
|
|
|
+ int order = 0;
|
|
|
+ for (DefaultQuestionGroup defaultQuestionGroup : defaultQuestionGroupList) {
|
|
|
+ List<DefaultQuestionStructureWrapper> defaultQuestionStructureWrapperList = defaultQuestionGroup
|
|
|
+ .getQuestionWrapperList();
|
|
|
+ // 小题号
|
|
|
+ int subNumber = 1;
|
|
|
+ for (DefaultQuestionStructureWrapper defaultQuestionStructureWrapper : defaultQuestionStructureWrapperList) {
|
|
|
+ List<DefaultQuestionUnitWrapper> defaultQuestionUnitWrapperList = defaultQuestionStructureWrapper
|
|
|
+ .getQuestionUnitWrapperList();
|
|
|
+ for (DefaultQuestionUnitWrapper defaultQuestionUnitWrapper : defaultQuestionUnitWrapperList) {
|
|
|
+ order++;
|
|
|
+ if ("FILL_UP".equals(defaultQuestionUnitWrapper.getQuestionType().toString())
|
|
|
+ || "ESSAY".equals(defaultQuestionUnitWrapper.getQuestionType().toString())) {
|
|
|
+ MarkItemBean markItem = new MarkItemBean(markingBean.getBasePaperId(), mainNumber,
|
|
|
+ subNumber, defaultQuestionUnitWrapper.getQuestionScore(), SCORE_INTERVAL, order,
|
|
|
+ defaultQuestionStructureWrapper.getQuestionId());
|
|
|
+ markItems.add(markItem);
|
|
|
+ }
|
|
|
+ subNumber++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mainNumber++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SaveMarkItemReq req = new SaveMarkItemReq();
|
|
|
+ req.setWorkId(workId);
|
|
|
+ req.setMarkItemBeanList(markItems);
|
|
|
+ markItemCloudService.saveMarkWork(req);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void createStudentPapers(Long examId, Long workId) throws InstantiationException, IllegalAccessException {
|
|
|
+ MarkWorkCreateProducer producer = new MarkWorkCreateProducer();
|
|
|
+ Map<String, Object> param = new HashMap<String, Object>();
|
|
|
+ param.put("examId", examId);
|
|
|
+ param.put("workId", workId);
|
|
|
+ producer.startDispose(MarkWorkCreateConsumer.class, 10, param);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TaskTracker getTaskTracker() {
|
|
|
+ return TaskTracker;
|
|
|
+ }
|
|
|
+}
|