|
@@ -7,6 +7,7 @@ import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCours
|
|
|
import com.qmth.distributed.print.business.bean.dto.initMarkData.InitExamDetailDto;
|
|
|
import com.qmth.distributed.print.business.entity.*;
|
|
|
import com.qmth.distributed.print.business.enums.CardTypeEnum;
|
|
|
+import com.qmth.distributed.print.business.enums.ExamNumberStyleEnum;
|
|
|
import com.qmth.distributed.print.business.service.*;
|
|
|
import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
|
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
@@ -47,6 +48,8 @@ import java.util.ArrayList;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
import java.util.Set;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class PrintFinishServiceImpl implements PrintFinishService {
|
|
@@ -85,11 +88,11 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
*/
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public void insertMarkPaper(Long examId, Long courseId, String paperNumber, String coursePaperId, Long userId, String paperType, List<PaperInfoVo> paperInfoVos) {
|
|
|
+ public void insertMarkPaper(ExamDetailCourseInitMarkDto dto, List<PaperInfoVo> paperInfoVos) {
|
|
|
try {
|
|
|
- MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType);
|
|
|
+ MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumberAndSerialNumber(dto.getExamId(), dto.getPaperNumber(), dto.getSerialNumber());
|
|
|
if (markPaper == null) {
|
|
|
- MarkPaper insertMarkPaper = new MarkPaper(examId, courseId, paperNumber, coursePaperId, userId, paperType);
|
|
|
+ MarkPaper insertMarkPaper = new MarkPaper(dto.getExamId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getCreateId(), dto.getSerialNumber(), dto.getPaperType());
|
|
|
if (CollectionUtils.isNotEmpty(paperInfoVos)) {
|
|
|
BasicAttachment basicAttachment = basicAttachmentService.getById(paperInfoVos.get(0).getAttachmentId());
|
|
|
if (basicAttachment != null) {
|
|
@@ -105,20 +108,20 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public void insertMarkStudent(ExamDetailCourseInitMarkDto dto, String paperType) {
|
|
|
+ public void insertMarkStudent(ExamDetailCourseInitMarkDto dto, BasicCardRule basicCardRule) {
|
|
|
try {
|
|
|
- List<InitExamDetailDto> initExamDetailDtoList = examDetailService.listPrintFinishExamDetailCourseIds(dto.getExamId(), dto.getPaperNumber(), paperType);
|
|
|
+ List<InitExamDetailDto> initExamDetailDtoList = examDetailService.listPrintFinishExamDetailCourseIds(dto.getExamId(), dto.getPaperNumber(), dto.getSerialNumber());
|
|
|
|
|
|
List<MarkStudent> markStudentList = new ArrayList<>();
|
|
|
Set<String> secretNumberSet = new HashSet<>();
|
|
|
for (InitExamDetailDto initExamDetailDto : initExamDetailDtoList) {
|
|
|
- List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseIdNotIntMarkStudent(initExamDetailDto.getExamDetailCourseId(), paperType);
|
|
|
+ List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseIdNotIntMarkStudent(initExamDetailDto.getExamDetailCourseId());
|
|
|
for (ExamStudent examStudent : examStudentList) {
|
|
|
MarkStudent markStudent = markStudentService.getById(examStudent.getId());
|
|
|
if (markStudent != null) {
|
|
|
continue;
|
|
|
}
|
|
|
- MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), examStudent.getBasicStudentId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), paperType, examStudent.getStudentCode(), initExamDetailDto.getPackageCode(), initExamDetailDto.getExamPlace(), initExamDetailDto.getExamRoom(), initExamDetailDto.getExamStartTime(), initExamDetailDto.getExamEndTime(), dto.getCreateId());
|
|
|
+ MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), examStudent.getBasicStudentId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getSerialNumber(), basicCardRule.getExamNumberStyle().equals(ExamNumberStyleEnum.PRINT) ? examStudent.getPaperType() : null, examStudent.getStudentCode(), initExamDetailDto.getPackageCode(), initExamDetailDto.getExamPlace(), initExamDetailDto.getExamRoom(), initExamDetailDto.getExamStartTime(), initExamDetailDto.getExamEndTime(), dto.getCreateId());
|
|
|
if (student.getSecretNumber() == null) {
|
|
|
student.randomSecretNumber();
|
|
|
while (secretNumberSet.contains(student.getSecretNumber())
|
|
@@ -134,7 +137,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
if (CollectionUtils.isNotEmpty(markStudentList)) {
|
|
|
markStudentService.saveBatch(markStudentList);
|
|
|
// 更新mark_paper表student_count字段
|
|
|
- markPaperService.updateStudentCountByExamIdAndPaperNumberAndPaperType(dto.getExamId(), dto.getPaperNumber(), paperType);
|
|
|
+ markPaperService.updateStudentCountByExamIdAndPaperNumberAndSerialNumber(dto.getExamId(), dto.getPaperNumber(), dto.getSerialNumber());
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.info("考生同步阅卷失败", e.getMessage());
|
|
@@ -143,43 +146,42 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto, String paperType) {
|
|
|
- if (StringUtils.isNotBlank(paperType)) {
|
|
|
- ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndCourseIdAndPaperNumber(dto.getExamId(), dto.getCourseId(), dto.getPaperNumber());
|
|
|
- List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds(), paperType);
|
|
|
- for (PaperInfoVo paperInfoVo : paperInfoVoList) {
|
|
|
- ExamCard examCard = examCardService.getById(paperInfoVo.getCardId());
|
|
|
- if (examCard != null) {
|
|
|
- // 上传通卡,不同步卡格式
|
|
|
- if (CardTypeEnum.GENERIC.equals(examCard.getType()) && CardCreateMethodEnum.UPLOAD.equals(examCard.getCreateMethod())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // 解析卡格式中试卷结构并保存
|
|
|
- this.insertMarkQuestion(dto.getExamId(), dto.getPaperNumber(), paperType, examCard.getContent());
|
|
|
- // 生成并保存卡格式文件(后缀为.json)
|
|
|
- this.insertScanAnswerCard(dto, paperType, paperInfoVo, examCard.getContent());
|
|
|
- // 题库获取的试卷,同步标答文件
|
|
|
- if (examCard.getPaperId() != null) {
|
|
|
- this.insertPaperAnswerFile(dto.getExamId(), dto.getPaperNumber(), paperType, examCard.getPaperId());
|
|
|
- }
|
|
|
- this.updateMarkSheetConfig(dto, examCard.getContent());
|
|
|
+ public void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto) {
|
|
|
+ ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndCourseIdAndPaperNumber(dto.getExamId(), dto.getCourseId(), dto.getPaperNumber());
|
|
|
+ List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
|
|
|
+ List<String> cardIds = paperInfoVoList.stream().map(PaperInfoVo::getCardId).distinct().collect(Collectors.toList());
|
|
|
+ for (String cardId : cardIds) {
|
|
|
+ ExamCard examCard = examCardService.getById(cardId);
|
|
|
+ if (examCard != null) {
|
|
|
+ // 上传通卡,不同步卡格式
|
|
|
+ if (CardTypeEnum.GENERIC.equals(examCard.getType()) && CardCreateMethodEnum.UPLOAD.equals(examCard.getCreateMethod())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 解析卡格式中试卷结构并保存
|
|
|
+ this.insertMarkQuestion(dto.getExamId(), dto.getPaperNumber(), dto.getSerialNumber(), dto.getPaperType(), examCard.getContent());
|
|
|
+ // 生成并保存卡格式文件(后缀为.json)
|
|
|
+ this.insertScanAnswerCard(dto, cardId, examCard.getContent());
|
|
|
+ // 题库获取的试卷,同步标答文件
|
|
|
+ if (examCard.getPaperId() != null) {
|
|
|
+ this.insertPaperAnswerFile(dto.getExamId(), dto.getPaperNumber(), dto.getSerialNumber(), examCard.getPaperId());
|
|
|
}
|
|
|
+ this.updateMarkSheetConfig(dto, examCard.getContent());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, String paperType, PaperInfoVo paperInfoVo, String content) {
|
|
|
- ExamCard examCard = examCardService.getById(paperInfoVo.getCardId());
|
|
|
+ public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, String cardId, String content) {
|
|
|
+ ExamCard examCard = examCardService.getById(cardId);
|
|
|
if (examCard != null) {
|
|
|
- ScanAnswerCard scanAnswerCard = scanAnswerCardService.getByExamIdAndCoursePaperIdAndPaperTypeAndCardId(dto.getExamId(), dto.getCoursePaperId(), paperType, Long.valueOf(paperInfoVo.getCardId()));
|
|
|
+ ScanAnswerCard scanAnswerCard = scanAnswerCardService.getByExamIdAndCoursePaperIdAndSerialNumberAndCardId(dto.getExamId(), dto.getCoursePaperId(), dto.getSerialNumber(), Long.valueOf(cardId));
|
|
|
if (scanAnswerCard != null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
+ String jsonPath = rootPath + File.separator + cardId + SystemConstant.JSON_PREFIX;
|
|
|
|
|
|
InputStream inputStream = null;
|
|
|
File jsonFile = null;
|
|
@@ -199,8 +201,9 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
scanAnswerCard.setExamId(dto.getExamId());
|
|
|
scanAnswerCard.setPaperNumber(dto.getPaperNumber());
|
|
|
scanAnswerCard.setCoursePaperId(dto.getCoursePaperId());
|
|
|
- scanAnswerCard.setPaperType(paperType);
|
|
|
- scanAnswerCard.setCardId(Long.valueOf(paperInfoVo.getCardId()));
|
|
|
+ scanAnswerCard.setSerialNumber(dto.getSerialNumber());
|
|
|
+ scanAnswerCard.setPaperType(dto.getPaperType());
|
|
|
+ scanAnswerCard.setCardId(Long.valueOf(cardId));
|
|
|
scanAnswerCard.setNumber(number);
|
|
|
scanAnswerCard.setSource(CardSource.WEB);
|
|
|
scanAnswerCard.setUri(uploadPath);
|
|
@@ -213,7 +216,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
scanAnswerCardService.save(scanAnswerCard);
|
|
|
}
|
|
|
} catch (IOException e) {
|
|
|
- log.info("考试[{}],试卷编号[{}],题卡ID[{}]同步阅卷失败", dto.getExamId(), dto.getPaperNumber(), paperInfoVo.getCardId());
|
|
|
+ log.info("考试[{}],试卷编号[{}],题卡ID[{}]同步阅卷失败", dto.getExamId(), dto.getPaperNumber(), cardId);
|
|
|
} finally {
|
|
|
try {
|
|
|
FileUtils.forceDeleteOnExit(jsonFile);
|
|
@@ -234,55 +237,78 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void insertMarkQuestion(Long examId, String paperNumber, String paperType, String content) {
|
|
|
+ public void insertMarkQuestion(Long examId, String paperNumber, Integer serialNumber, String paperType, String content) {
|
|
|
try {
|
|
|
List<Struct> structList = CardParseUtils.parseCardContent(content);
|
|
|
if (CollectionUtils.isEmpty(structList)) {
|
|
|
return;
|
|
|
}
|
|
|
- List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType);
|
|
|
+ List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndSerialNumber(examId, paperNumber, serialNumber);
|
|
|
// 第一次新增
|
|
|
if (CollectionUtils.isEmpty(markQuestionList)) {
|
|
|
List<MarkQuestion> markQuestions = new ArrayList<>();
|
|
|
- for (Struct struct : structList) {
|
|
|
- MarkQuestion markQuestion = new MarkQuestion();
|
|
|
- markQuestion.setId(SystemConstant.getDbUuid());
|
|
|
- markQuestion.setExamId(examId);
|
|
|
- markQuestion.setPaperNumber(paperNumber);
|
|
|
- markQuestion.setPaperType(paperType);
|
|
|
- markQuestion.setObjective(struct.getObjective());
|
|
|
- markQuestion.setMainNumber(struct.getMainNumber());
|
|
|
- markQuestion.setSubNumber(struct.getSubNumber());
|
|
|
- markQuestion.setMainTitle(struct.getMainTitle());
|
|
|
- markQuestion.setOptionCount(struct.getOptionCount());
|
|
|
- markQuestion.setQuestionType(struct.getType());
|
|
|
- markQuestion.setPaperIndex(struct.getPaperIndex());
|
|
|
- markQuestion.setPageIndex(struct.getPageIndex());
|
|
|
- if (StringUtils.isNotBlank(struct.getAnswer())) {
|
|
|
- // 客观题有标答时,给分策略默认为全对给分
|
|
|
- markQuestion.setAnswer(struct.getAnswer());
|
|
|
- markQuestion.setObjectivePolicy(ObjectivePolicy.NONE);
|
|
|
+ AtomicInteger i = new AtomicInteger(1);
|
|
|
+ for (String pType : paperType.split(",")) {
|
|
|
+ if (i.getAndIncrement() == 1) {
|
|
|
+ for (Struct struct : structList) {
|
|
|
+ // 保存主观题结构(主观题卷型为空)
|
|
|
+ if (struct.getObjective()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ MarkQuestion markQuestion = new MarkQuestion();
|
|
|
+ markQuestion.setId(SystemConstant.getDbUuid());
|
|
|
+ markQuestion.setExamId(examId);
|
|
|
+ markQuestion.setPaperNumber(paperNumber);
|
|
|
+ markQuestion.setSerialNumber(serialNumber);
|
|
|
+ markQuestion.setObjective(struct.getObjective());
|
|
|
+ markQuestion.setMainNumber(struct.getMainNumber());
|
|
|
+ markQuestion.setSubNumber(struct.getSubNumber());
|
|
|
+ markQuestion.setMainTitle(struct.getMainTitle());
|
|
|
+ markQuestion.setOptionCount(struct.getOptionCount());
|
|
|
+ markQuestion.setQuestionType(struct.getType());
|
|
|
+ markQuestion.setPaperIndex(struct.getPaperIndex());
|
|
|
+ markQuestion.setPageIndex(struct.getPageIndex());
|
|
|
+ if (struct.getScore() != null) {
|
|
|
+ markQuestion.setTotalScore(struct.getScore());
|
|
|
+ // 间隔分(整数默认1,小数默认0.5)
|
|
|
+ if (!markQuestion.getObjective()) {
|
|
|
+ markQuestion.setIntervalScore(markQuestion.getTotalScore() % 1 > 0 ? 0.5 : 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ markQuestions.add(markQuestion);
|
|
|
+ }
|
|
|
}
|
|
|
- if (struct.getScore() != null) {
|
|
|
- markQuestion.setTotalScore(struct.getScore());
|
|
|
- // 间隔分(整数默认1,小数默认0.5)
|
|
|
- if (!markQuestion.getObjective()) {
|
|
|
- markQuestion.setIntervalScore(markQuestion.getTotalScore() % 1 > 0 ? 0.5 : 1);
|
|
|
+ for (Struct struct : structList) {
|
|
|
+ // 保存客观题结构
|
|
|
+ if (!struct.getObjective()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ MarkQuestion markQuestion = new MarkQuestion();
|
|
|
+ markQuestion.setId(SystemConstant.getDbUuid());
|
|
|
+ markQuestion.setExamId(examId);
|
|
|
+ markQuestion.setPaperNumber(paperNumber);
|
|
|
+ markQuestion.setSerialNumber(serialNumber);
|
|
|
+ markQuestion.setPaperType(pType);
|
|
|
+ markQuestion.setObjective(struct.getObjective());
|
|
|
+ markQuestion.setMainNumber(struct.getMainNumber());
|
|
|
+ markQuestion.setSubNumber(struct.getSubNumber());
|
|
|
+ markQuestion.setMainTitle(struct.getMainTitle());
|
|
|
+ markQuestion.setOptionCount(struct.getOptionCount());
|
|
|
+ markQuestion.setQuestionType(struct.getType());
|
|
|
+ markQuestion.setPaperIndex(struct.getPaperIndex());
|
|
|
+ markQuestion.setPageIndex(struct.getPageIndex());
|
|
|
+ if (StringUtils.isNotBlank(struct.getAnswer())) {
|
|
|
+ // 客观题有标答时,给分策略默认为全对给分
|
|
|
+ markQuestion.setAnswer(struct.getAnswer());
|
|
|
+ markQuestion.setObjectivePolicy(ObjectivePolicy.NONE);
|
|
|
+ }
|
|
|
+ if (struct.getScore() != null) {
|
|
|
+ markQuestion.setTotalScore(struct.getScore());
|
|
|
}
|
|
|
+ markQuestions.add(markQuestion);
|
|
|
}
|
|
|
- markQuestions.add(markQuestion);
|
|
|
}
|
|
|
markQuestionService.saveBatch(markQuestions);
|
|
|
- } else {
|
|
|
-// List<ScanAnswerCard> scanAnswerCardList = scanAnswerCardService.listByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
-// if (CollectionUtils.isNotEmpty(scanAnswerCardList)) {
|
|
|
-// for (ScanAnswerCard scanAnswerCard : scanAnswerCardList) {
|
|
|
-// int count = scanPaperService.getCountByExamAndCardNumber(examId, scanAnswerCard.getNumber());
|
|
|
-// if (count > 0) {
|
|
|
-// return;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.info("同步结构失败");
|
|
@@ -290,8 +316,8 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void insertPaperAnswerFile(Long examId, String paperNumber, String paperType, Long paperId) {
|
|
|
- MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType);
|
|
|
+ public void insertPaperAnswerFile(Long examId, String paperNumber, Integer serialNumber, Long paperId) {
|
|
|
+ MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumberAndSerialNumber(examId, paperNumber, serialNumber);
|
|
|
if (markPaper != null) {
|
|
|
ExamTaskPaperData examTaskPaperData = examTaskPaperDataService.selectByMultiId(new ExamTaskPaperData(examId, paperNumber, paperId));
|
|
|
if (examTaskPaperData != null && examTaskPaperData.getAnswerPdfAttachmentId() != null) {
|
|
@@ -307,12 +333,12 @@ public class PrintFinishServiceImpl implements PrintFinishService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void insertMarkPaperPackageCode(ExamDetailCourseInitMarkDto dto, String paperType) {
|
|
|
- List<ExamDetailCourseInitMarkDto> packageCodeList = examDetailService.listPrintFinishPackageCode(dto.getExamId(), dto.getPaperNumber(), paperType);
|
|
|
+ public void insertMarkPaperPackageCode(ExamDetailCourseInitMarkDto dto) {
|
|
|
+ List<ExamDetailCourseInitMarkDto> packageCodeList = examDetailService.listPrintFinishPackageCode(dto.getExamId(), dto.getPaperNumber(), dto.getSerialNumber());
|
|
|
if (CollectionUtils.isNotEmpty(packageCodeList)) {
|
|
|
List<MarkPaperPackage> markPaperPackages = new ArrayList<>();
|
|
|
for (ExamDetailCourseInitMarkDto packageCodeDto : packageCodeList) {
|
|
|
- markPaperPackages.add(new MarkPaperPackage(packageCodeDto.getExamId(), packageCodeDto.getCourseId(), packageCodeDto.getPaperNumber(), packageCodeDto.getCoursePaperId(), paperType, packageCodeDto.getPackageCode()));
|
|
|
+ markPaperPackages.add(new MarkPaperPackage(packageCodeDto.getExamId(), packageCodeDto.getCourseId(), packageCodeDto.getPaperNumber(), packageCodeDto.getCoursePaperId(), dto.getSerialNumber(), dto.getPaperType(), packageCodeDto.getPackageCode()));
|
|
|
}
|
|
|
markPaperPackageService.saveOrUpdateBatchByMultiId(markPaperPackages);
|
|
|
}
|