|
@@ -0,0 +1,144 @@
|
|
|
|
+package com.qmth.teachcloud.task.service.impl;
|
|
|
|
+
|
|
|
|
+import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
|
|
|
|
+import com.qmth.distributed.print.business.bean.vo.PaperInfoVo;
|
|
|
|
+import com.qmth.distributed.print.business.entity.ExamCard;
|
|
|
|
+import com.qmth.distributed.print.business.entity.ExamStudent;
|
|
|
|
+import com.qmth.distributed.print.business.entity.ExamTaskDetail;
|
|
|
|
+import com.qmth.distributed.print.business.service.ExamCardService;
|
|
|
|
+import com.qmth.distributed.print.business.service.ExamDetailCourseService;
|
|
|
|
+import com.qmth.distributed.print.business.service.ExamStudentService;
|
|
|
|
+import com.qmth.distributed.print.business.service.ExamTaskDetailService;
|
|
|
|
+import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
|
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
|
|
|
|
+import com.qmth.teachcloud.mark.entity.MarkPaper;
|
|
|
|
+import com.qmth.teachcloud.mark.entity.MarkStudent;
|
|
|
|
+import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
|
|
|
|
+import com.qmth.teachcloud.mark.enums.CardSource;
|
|
|
|
+import com.qmth.teachcloud.mark.service.*;
|
|
|
|
+import com.qmth.teachcloud.mark.utils.FileStoreUtils;
|
|
|
|
+import com.qmth.teachcloud.task.service.PrintFinishService;
|
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import javax.annotation.Resource;
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.io.FileInputStream;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+@Service
|
|
|
|
+public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
|
+
|
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(PrintFinishServiceImpl.class);
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkPaperService markPaperService;
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkQuestionService markQuestionService;
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkStudentService markStudentService;
|
|
|
|
+ @Resource
|
|
|
|
+ private ScanAnswerCardService scanAnswerCardService;
|
|
|
|
+ @Resource
|
|
|
|
+ private ExamDetailCourseService examDetailCourseService;
|
|
|
|
+ @Resource
|
|
|
|
+ private ExamStudentService examStudentService;
|
|
|
|
+ @Resource
|
|
|
|
+ private ExamTaskDetailService examTaskDetailService;
|
|
|
|
+ @Resource
|
|
|
|
+ private ExamCardService examCardService;
|
|
|
|
+ @Resource
|
|
|
|
+ private FileStoreUtils fileStoreUtils;
|
|
|
|
+ @Resource
|
|
|
|
+ private FileService fileService;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 打印结束后,生成阅卷科目数据
|
|
|
|
+ *
|
|
|
|
+ * @param examId
|
|
|
|
+ * @param courseCode
|
|
|
|
+ * @param courseName
|
|
|
|
+ * @param paperNumber
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void insertMarkPaper(Long examId, String courseCode, String courseName, String paperNumber) {
|
|
|
|
+ MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
|
+ if (markPaper != null) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ MarkPaper insertMarkPaper = new MarkPaper(examId, courseCode, courseName, paperNumber);
|
|
|
|
+ markPaperService.save(insertMarkPaper);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void insertMarkStudent(ExamDetailCourseInitMarkDto dto) {
|
|
|
|
+ List<MarkStudent> markStudentList = new ArrayList<>();
|
|
|
|
+ List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseIdNotIntMarkStudent(dto.getId());
|
|
|
|
+ for (ExamStudent examStudent : examStudentList) {
|
|
|
|
+ MarkStudent markStudent = markStudentService.getById(examStudent.getId());
|
|
|
|
+ if (markStudent != null) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ markStudentList.add(new MarkStudent(examStudent.getId(), dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), examStudent.getStudentCode(), examStudent.getStudentName(), dto.getPackageCode(), dto.getExamPlace(), dto.getExamRoom(), examStudent.getStudentName()));
|
|
|
|
+ }
|
|
|
|
+ if (CollectionUtils.isNotEmpty(markStudentList)) {
|
|
|
|
+ markStudentService.saveBatch(markStudentList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto) {
|
|
|
|
+ String paperType = dto.getPaperType();
|
|
|
|
+ if (StringUtils.isNotBlank(paperType)) {
|
|
|
|
+ ExamTaskDetail examTaskDetail = examTaskDetailService.findByExamIdAndCourseCodeAndPaperNumber(dto.getSchoolId(), dto.getExamId(), dto.getCourseCode(), dto.getPaperNumber());
|
|
|
|
+ List<PaperInfoVo> paperInfoVoList = ExamTaskDetail.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds(), paperType);
|
|
|
|
+ for (PaperInfoVo paperInfoVo : paperInfoVoList) {
|
|
|
|
+ ExamCard examCard = examCardService.getById(paperInfoVo.getCardId());
|
|
|
|
+ if (examCard != null) {
|
|
|
|
+ ScanAnswerCard scanAnswerCard = scanAnswerCardService.getByExamIdAndCoursePaperIdAndCardId(dto.getExamId(), dto.getCoursePaperId(), paperInfoVo.getCardId());
|
|
|
|
+ if (scanAnswerCard != null) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ File tempFile = SystemConstant.getFileTempDirVar(System.currentTimeMillis() + File.separator + SystemConstant.getNanoId(), SystemConstant.TEMP_PREFIX);
|
|
|
|
+ String rootPath = tempFile.getParent();
|
|
|
|
+ String jsonPath = rootPath + File.separator + paperInfoVo.getCardId() + SystemConstant.JSON_PREFIX;
|
|
|
|
+ File jsonFile = SystemConstant.createJsonFile(jsonPath, examCard.getContent());
|
|
|
|
+ if (jsonFile.exists()) {
|
|
|
|
+ try {
|
|
|
|
+ FileInputStream inputStream = new FileInputStream(jsonFile);
|
|
|
|
+ String md5 = DigestUtils.md5Hex(inputStream);
|
|
|
|
+ Integer number = scanAnswerCardService.findMaxCardNumberByExamId(dto.getExamId());
|
|
|
|
+ String path = fileService.getAnswerCardUri(dto.getExamId(), dto.getCoursePaperId(), number);
|
|
|
|
+ String uploadPath = fileStoreUtils.uploadFile(inputStream, md5, UploadFileEnum.CARD, path);
|
|
|
|
+
|
|
|
|
+ scanAnswerCard = new ScanAnswerCard();
|
|
|
|
+ scanAnswerCard.setExamId(dto.getExamId());
|
|
|
|
+ scanAnswerCard.setPaperNumber(dto.getPaperNumber());
|
|
|
|
+ scanAnswerCard.setCoursePaperId(dto.getCoursePaperId());
|
|
|
|
+ scanAnswerCard.setCardId(paperInfoVo.getCardId());
|
|
|
|
+ scanAnswerCard.setNumber(number);
|
|
|
|
+ scanAnswerCard.setSource(CardSource.WEB);
|
|
|
|
+ scanAnswerCard.setUri(uploadPath);
|
|
|
|
+ scanAnswerCard.setMd5(md5);
|
|
|
|
+ scanAnswerCard.setNeedAdapte(true);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ log.info("考试[],试卷编号[],题卡ID[]同步阅卷失败", dto.getExamId(), dto.getPaperNumber(), paperInfoVo.getCardId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void insertMarkQuestion() {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+}
|