|
@@ -88,7 +88,7 @@ import cn.com.qmth.examcloud.web.redis.RedisClient;
|
|
|
*/
|
|
|
@Service("extractConfigService")
|
|
|
public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
- private static final Logger logger = LoggerFactory.getLogger(ExtractConfigServiceImpl.class);
|
|
|
+ private static final Logger LOG = LoggerFactory.getLogger(ExtractConfigServiceImpl.class);
|
|
|
|
|
|
@Autowired
|
|
|
private ExtractConfigRepo extractConfigRepo;
|
|
@@ -232,61 +232,61 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
@Override
|
|
|
public Map<String, Object> extractExamPaper(Long exam_id, String course_code, String group_code) {
|
|
|
Map<String, Object> returnMap = new HashMap<>();
|
|
|
- logger.info("调卷开始...");
|
|
|
+ LOG.info("调卷开始...");
|
|
|
long beginTime = System.currentTimeMillis();
|
|
|
- logger.info("开始根据examId:" + exam_id + "和courseCode:" + course_code + "获取调卷规则");
|
|
|
+ LOG.info("开始根据examId:" + exam_id + "和courseCode:" + course_code + "获取调卷规则");
|
|
|
ExtractConfig extractConfig = this.findConfig(new ExtractConfig(exam_id, course_code));
|
|
|
if (extractConfig == null) {
|
|
|
- logger.error("该考试和课程下调卷规则未制定,请先制定调卷规则,调卷程序退出");
|
|
|
+ LOG.error("该考试和课程下调卷规则未制定,请先制定调卷规则,调卷程序退出");
|
|
|
returnMap.put("errorMsg", "该考试和课程下调卷规则未制定,请先制定调卷规则");
|
|
|
return returnMap;
|
|
|
}
|
|
|
long configFinishTime = System.currentTimeMillis();
|
|
|
- logger.info("获取调卷规则共耗时:" + (configFinishTime - beginTime) + "ms");
|
|
|
- logger.info("根据调卷规则中设置的概率获取类型为" + group_code + "的试卷");
|
|
|
+ LOG.info("获取调卷规则共耗时:" + (configFinishTime - beginTime) + "ms");
|
|
|
+ LOG.info("根据调卷规则中设置的概率获取类型为" + group_code + "的试卷");
|
|
|
Map<String, Paper> paperMap = this.getExamPaperByProbability(extractConfig.getExamPaperList());
|
|
|
if (paperMap.isEmpty()) {
|
|
|
- logger.error("该考试和课程下调卷规则中试卷不存在,请检查调卷规则,调卷程序退出");
|
|
|
+ LOG.error("该考试和课程下调卷规则中试卷不存在,请检查调卷规则,调卷程序退出");
|
|
|
returnMap.put("errorMsg", "该考试和课程下调卷规则中试卷不存在,请重新制定调卷规则");
|
|
|
return returnMap;
|
|
|
}
|
|
|
|
|
|
long paperMapFinishTime = System.currentTimeMillis();
|
|
|
- logger.info("获取类型为" + group_code + "的试卷共耗时:" + (paperMapFinishTime - configFinishTime) + "ms");
|
|
|
+ LOG.info("获取类型为" + group_code + "的试卷共耗时:" + (paperMapFinishTime - configFinishTime) + "ms");
|
|
|
|
|
|
Paper basePaper = paperMap.get(group_code);
|
|
|
if (basePaper == null) {
|
|
|
- logger.error("该考试和课程下调卷规则中该类型试卷不存在,请检查调卷规则,调卷程序退出");
|
|
|
+ LOG.error("该考试和课程下调卷规则中该类型试卷不存在,请检查调卷规则,调卷程序退出");
|
|
|
returnMap.put("errorMsg", "该考试和课程下调卷规则中该类型试卷不存在,请重新制定调卷规则");
|
|
|
return returnMap;
|
|
|
}
|
|
|
String basePaperId = basePaper.getId();
|
|
|
- logger.info("将原始试卷:" + basePaperId + "根据规则重新组卷");
|
|
|
+ LOG.info("将原始试卷:" + basePaperId + "根据规则重新组卷");
|
|
|
int upSetQuestionOrder = extractConfig.getScrambling_the_question_order();
|
|
|
int upSetOptionOrder = extractConfig.getScrambling_the_option_order();
|
|
|
//不乱序直接调卷
|
|
|
if (upSetQuestionOrder == 0 && upSetOptionOrder == 0) {
|
|
|
PaperDto paperDto = getPaperDtoByPaper(basePaper, basePaperId);
|
|
|
long paperDtoFinishTime = System.currentTimeMillis();
|
|
|
- logger.info("获取试卷Dto共耗时:" + (paperDtoFinishTime - paperMapFinishTime) + "ms");
|
|
|
+ LOG.info("获取试卷Dto共耗时:" + (paperDtoFinishTime - paperMapFinishTime) + "ms");
|
|
|
returnMap.put("paperDto", paperDto);
|
|
|
- logger.info("调卷完成");
|
|
|
- logger.info("总共耗时:" + (System.currentTimeMillis() - beginTime) + "ms");
|
|
|
+ LOG.info("调卷完成");
|
|
|
+ LOG.info("总共耗时:" + (System.currentTimeMillis() - beginTime) + "ms");
|
|
|
} else {
|
|
|
//乱序重新生成试卷
|
|
|
Paper newPaper = this.recombinationPaper(basePaper, PaperType.STUDENT_EXAM, upSetQuestionOrder, upSetOptionOrder);
|
|
|
- logger.info("根据新试卷 paperId:" + newPaper.getId() + "组装PaperDto后返回");
|
|
|
+ LOG.info("根据新试卷 paperId:" + newPaper.getId() + "组装PaperDto后返回");
|
|
|
|
|
|
long genPaperFinishTime = System.currentTimeMillis();
|
|
|
- logger.info("组卷共耗时:" + (genPaperFinishTime - paperMapFinishTime) + "ms");
|
|
|
+ LOG.info("组卷共耗时:" + (genPaperFinishTime - paperMapFinishTime) + "ms");
|
|
|
PaperDto paperDto = getPaperDtoByPaper(newPaper, basePaperId);
|
|
|
|
|
|
long paperDtoFinishTime = System.currentTimeMillis();
|
|
|
- logger.info("获取试卷Dto共耗时:" + (paperDtoFinishTime - genPaperFinishTime) + "ms");
|
|
|
+ LOG.info("获取试卷Dto共耗时:" + (paperDtoFinishTime - genPaperFinishTime) + "ms");
|
|
|
|
|
|
returnMap.put("paperDto", paperDto);
|
|
|
- logger.info("调卷完成");
|
|
|
- logger.info("总共耗时:" + (System.currentTimeMillis() - beginTime) + "ms");
|
|
|
+ LOG.info("调卷完成");
|
|
|
+ LOG.info("总共耗时:" + (System.currentTimeMillis() - beginTime) + "ms");
|
|
|
}
|
|
|
return returnMap;
|
|
|
}
|
|
@@ -602,35 +602,35 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
paperDto.setAllQbjectiveQuestion(checkIsAllQbjectiveQuestion(basePaperId));
|
|
|
|
|
|
long paperDtoEndTime = System.currentTimeMillis();
|
|
|
- logger.info("单独组装paperDto耗时:" + (paperDtoEndTime - beginTime) + "ms");
|
|
|
+ LOG.info("单独组装paperDto耗时:" + (paperDtoEndTime - beginTime) + "ms");
|
|
|
|
|
|
//将小题全部取出来,只取一次
|
|
|
List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaper(paper);
|
|
|
long pduEndTime = System.currentTimeMillis();
|
|
|
- logger.info("数据库取小题耗时:" + (pduEndTime - paperDtoEndTime) + "ms");
|
|
|
+ LOG.info("数据库取小题耗时:" + (pduEndTime - paperDtoEndTime) + "ms");
|
|
|
Collections.sort(allPaperDetailUnits);
|
|
|
long pduSortEndTime = System.currentTimeMillis();
|
|
|
- logger.info("排序小题耗时:" + (pduSortEndTime - pduEndTime) + "ms");
|
|
|
+ LOG.info("排序小题耗时:" + (pduSortEndTime - pduEndTime) + "ms");
|
|
|
|
|
|
//获取大题
|
|
|
List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
|
|
|
long pdEndTime = System.currentTimeMillis();
|
|
|
- logger.info("数据库取大题耗时:" + (pdEndTime - pduSortEndTime) + "ms");
|
|
|
+ LOG.info("数据库取大题耗时:" + (pdEndTime - pduSortEndTime) + "ms");
|
|
|
Collections.sort(paperDetails);
|
|
|
long pdSortEndTime = System.currentTimeMillis();
|
|
|
- logger.info("排序大题耗时:" + (pdSortEndTime - pdEndTime) + "ms");
|
|
|
+ LOG.info("排序大题耗时:" + (pdSortEndTime - pdEndTime) + "ms");
|
|
|
|
|
|
//抽取大题Id对应的小题
|
|
|
Map<String, List<PaperDetailUnit>> pduMap = allPaperDetailUnits.stream()
|
|
|
.collect(Collectors.groupingBy(PaperDetailUnit::getDetailId));
|
|
|
long pduMapEndTime = System.currentTimeMillis();
|
|
|
- logger.info("获取大题与小题对应关系耗时:" + (pduMapEndTime - pdSortEndTime) + "ms");
|
|
|
+ LOG.info("获取大题与小题对应关系耗时:" + (pduMapEndTime - pdSortEndTime) + "ms");
|
|
|
|
|
|
// 获取大题Dto
|
|
|
List<PaperDetailDto> paperDetailDtos = paperDetailDtoAssembler.toDtoList(paperDetails);
|
|
|
paperDto.setPaperDetails(paperDetailDtos);
|
|
|
long paperDetailDtoEndTime = System.currentTimeMillis();
|
|
|
- logger.info("单独组装paperDetailDto耗时:" + (paperDetailDtoEndTime - pduMapEndTime) + "ms");
|
|
|
+ LOG.info("单独组装paperDetailDto耗时:" + (paperDetailDtoEndTime - pduMapEndTime) + "ms");
|
|
|
|
|
|
// 封装小题
|
|
|
for (int i = 0; i < paperDetailDtos.size(); i++) {
|
|
@@ -680,7 +680,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
paperDetailDtos.get(i).setCnNum(CommonUtils.toCHNum(paperDetailDtos.get(i).getNumber()));
|
|
|
}
|
|
|
long paperDetailUnitDtoEndTime = System.currentTimeMillis();
|
|
|
- logger.info("单独组装paperDetailUnitDto耗时:" + (paperDetailUnitDtoEndTime - paperDetailDtoEndTime) + "ms");
|
|
|
+ LOG.info("单独组装paperDetailUnitDto耗时:" + (paperDetailUnitDtoEndTime - paperDetailDtoEndTime) + "ms");
|
|
|
|
|
|
//将重新组装的dto放进缓存
|
|
|
redisClient.set(CACHE_KEY_PAPER_FOR_DTO + paperDto.getId(), paperDto, DEFAULT_TIME_OUT);
|
|
@@ -703,43 +703,43 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
paperDto.setBasePaperId(basePaperId);
|
|
|
|
|
|
long paperDtoEndTime = System.currentTimeMillis();
|
|
|
- logger.info("单独组装paperDto耗时:" + (paperDtoEndTime - beginTime) + "ms");
|
|
|
+ LOG.info("单独组装paperDto耗时:" + (paperDtoEndTime - beginTime) + "ms");
|
|
|
|
|
|
//将小题全部取出来,只取一次
|
|
|
// List<PaperDetailUnit> allPaperDetailUnits = detailUnitNativeRepo.findByPaperId(paper.getId());
|
|
|
List<PaperDetailUnit> allPaperDetailUnits = new ArrayList<>();
|
|
|
|
|
|
long pduEndTime = System.currentTimeMillis();
|
|
|
- logger.info("数据库取小题耗时:" + (pduEndTime - paperDtoEndTime) + "ms");
|
|
|
+ LOG.info("数据库取小题耗时:" + (pduEndTime - paperDtoEndTime) + "ms");
|
|
|
Collections.sort(allPaperDetailUnits);
|
|
|
long pduSortEndTime = System.currentTimeMillis();
|
|
|
- logger.info("排序小题耗时:" + (pduSortEndTime - pduEndTime) + "ms");
|
|
|
+ LOG.info("排序小题耗时:" + (pduSortEndTime - pduEndTime) + "ms");
|
|
|
|
|
|
|
|
|
paperDto.setAllQbjectiveQuestion(checkIsAllQbjectiveByPdu(allPaperDetailUnits));
|
|
|
long isAllObjEndtime = System.currentTimeMillis();
|
|
|
- logger.info("设置客观题耗时:" + (isAllObjEndtime - pduSortEndTime) + "ms");
|
|
|
+ LOG.info("设置客观题耗时:" + (isAllObjEndtime - pduSortEndTime) + "ms");
|
|
|
|
|
|
|
|
|
//获取大题
|
|
|
List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
|
|
|
long pdEndTime = System.currentTimeMillis();
|
|
|
- logger.info("数据库取大题耗时:" + (pdEndTime - isAllObjEndtime) + "ms");
|
|
|
+ LOG.info("数据库取大题耗时:" + (pdEndTime - isAllObjEndtime) + "ms");
|
|
|
Collections.sort(paperDetails);
|
|
|
long pdSortEndTime = System.currentTimeMillis();
|
|
|
- logger.info("排序大题耗时:" + (pdSortEndTime - pdEndTime) + "ms");
|
|
|
+ LOG.info("排序大题耗时:" + (pdSortEndTime - pdEndTime) + "ms");
|
|
|
|
|
|
//抽取大题Id对应的小题
|
|
|
Map<String, List<PaperDetailUnit>> pduMap = allPaperDetailUnits.stream()
|
|
|
.collect(Collectors.groupingBy(PaperDetailUnit::getDetailId));
|
|
|
long pduMapEndTime = System.currentTimeMillis();
|
|
|
- logger.info("获取大题与小题对应关系耗时:" + (pduMapEndTime - pdSortEndTime) + "ms");
|
|
|
+ LOG.info("获取大题与小题对应关系耗时:" + (pduMapEndTime - pdSortEndTime) + "ms");
|
|
|
|
|
|
// 获取大题Dto
|
|
|
List<PaperDetailDto> paperDetailDtos = paperDetailDtoAssembler.toDtoList(paperDetails);
|
|
|
paperDto.setPaperDetails(paperDetailDtos);
|
|
|
long paperDetailDtoEndTime = System.currentTimeMillis();
|
|
|
- logger.info("单独组装paperDetailDto耗时:" + (paperDetailDtoEndTime - pduMapEndTime) + "ms");
|
|
|
+ LOG.info("单独组装paperDetailDto耗时:" + (paperDetailDtoEndTime - pduMapEndTime) + "ms");
|
|
|
|
|
|
// 封装小题
|
|
|
for (int i = 0; i < paperDetailDtos.size(); i++) {
|
|
@@ -789,7 +789,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
paperDetailDtos.get(i).setCnNum(CommonUtils.toCHNum(paperDetailDtos.get(i).getNumber()));
|
|
|
}
|
|
|
long paperDetailUnitDtoEndTime = System.currentTimeMillis();
|
|
|
- logger.info("单独组装paperDetailUnitDto耗时:" + (paperDetailUnitDtoEndTime - paperDetailDtoEndTime) + "ms");
|
|
|
+ LOG.info("单独组装paperDetailUnitDto耗时:" + (paperDetailUnitDtoEndTime - paperDetailDtoEndTime) + "ms");
|
|
|
return paperDto;
|
|
|
}
|
|
|
|