|
@@ -30,8 +30,6 @@ import cn.com.qmth.examcloud.core.questions.base.enums.PaperStructType;
|
|
|
import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
|
|
|
import cn.com.qmth.examcloud.core.questions.base.enums.QuestionDifficulty;
|
|
|
import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
|
|
|
-import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
|
|
|
-import cn.com.qmth.examcloud.core.questions.dao.PaperRepo;
|
|
|
import cn.com.qmth.examcloud.core.questions.dao.PaperStructRepo;
|
|
|
import cn.com.qmth.examcloud.core.questions.dao.PropertyRepo;
|
|
|
import cn.com.qmth.examcloud.core.questions.dao.RandomPaperQuestionRepo;
|
|
@@ -53,6 +51,7 @@ import cn.com.qmth.examcloud.core.questions.service.bean.randompaper.RandomPaper
|
|
|
import cn.com.qmth.examcloud.core.questions.service.bean.randompaper.RandomPaperQuery;
|
|
|
import cn.com.qmth.examcloud.core.questions.service.bean.randompaper.RandomPaperQuestionDto;
|
|
|
import cn.com.qmth.examcloud.core.questions.service.bean.randompaper.StructInfo;
|
|
|
+import cn.com.qmth.examcloud.core.questions.service.bean.randompaper.StructQuestionCheckDto;
|
|
|
import cn.com.qmth.examcloud.core.questions.service.bean.randompaper.StructQuestionCountInfo;
|
|
|
import cn.com.qmth.examcloud.core.questions.service.bean.randompaper.StructQuestionInfo;
|
|
|
import cn.com.qmth.examcloud.support.cache.CacheHelper;
|
|
@@ -69,10 +68,6 @@ public class RandomPaperServiceImpl implements RandomPaperService {
|
|
|
@Autowired
|
|
|
private PropertyRepo propertyRepo;
|
|
|
@Autowired
|
|
|
- private PaperRepo paperRepo;
|
|
|
- @Autowired
|
|
|
- private PaperDetailUnitRepo unitRepo;
|
|
|
- @Autowired
|
|
|
private RandomPaperRepo randomPaperRepo;
|
|
|
@Autowired
|
|
|
private RandomPaperQuestionRepo randomPaperQuestionRepo;
|
|
@@ -241,10 +236,11 @@ public class RandomPaperServiceImpl implements RandomPaperService {
|
|
|
|
|
|
@Override
|
|
|
public StructInfo getPaperQuestionViewInfo(String structId, List<String> paperIds) {
|
|
|
- StructInfo ret=getPaperQuestionInfo(structId, paperIds);
|
|
|
+ StructInfo ret = getPaperQuestionInfo(structId, paperIds);
|
|
|
clearQuestionIds(ret);
|
|
|
return ret;
|
|
|
}
|
|
|
+
|
|
|
private StructInfo getPaperQuestionInfo(String structId, List<String> paperIds) {
|
|
|
StructInfo ret = new StructInfo();
|
|
|
ret.setValid(true);
|
|
@@ -254,6 +250,8 @@ public class RandomPaperServiceImpl implements RandomPaperService {
|
|
|
for (String paperId : paperIds) {
|
|
|
unitList.addAll(findUnitPaperId(paperId));
|
|
|
}
|
|
|
+ StructQuestionCheckDto cd = new StructQuestionCheckDto();
|
|
|
+ cd.setQuestionList(questionList);
|
|
|
if (PaperStructType.BLUEPRINT.equals(ps.getPaperStrucType())) {
|
|
|
for (PaperDetailUnitDto unit : unitList) {
|
|
|
unit.getQuestion().setQuesName(unit.getPaperDetail().getName());
|
|
@@ -269,10 +267,13 @@ public class RandomPaperServiceImpl implements RandomPaperService {
|
|
|
StructQuestionInfo sqinfo = new StructQuestionInfo();
|
|
|
sqinfos.add(sqinfo);
|
|
|
sqinfo.setDetailName(ds.getName());
|
|
|
+ cd.setDetailNumber(detailNumber);
|
|
|
+ cd.setDs(ds);
|
|
|
+ cd.setSqinfo(sqinfo);
|
|
|
for (CoursePropertyNumberDto cp : ds.getCoursePropertyNumberDtos()) {
|
|
|
if (!cp.getDisable()) {
|
|
|
- setQuestionInfoByBlue(detailNumber, ds.getQuestionType(), ds.getQuesNames(), sqinfo, cp,
|
|
|
- questionList);
|
|
|
+ cd.setCp(cp);
|
|
|
+ setQuestionInfoByBlue(cd);
|
|
|
}
|
|
|
}
|
|
|
sqinfo.setTotalCount(sqinfo.getHardInfo().getCount() + sqinfo.getMediumInfo().getCount()
|
|
@@ -293,10 +294,14 @@ public class RandomPaperServiceImpl implements RandomPaperService {
|
|
|
StructQuestionInfo sqinfo = new StructQuestionInfo();
|
|
|
sqinfos.add(sqinfo);
|
|
|
sqinfo.setDetailName(ds.getName());
|
|
|
+ cd.setDetailNumber(detailNumber);
|
|
|
+ cd.setSqinfo(sqinfo);
|
|
|
int index = 0;
|
|
|
for (PaperDetailUnitStructDto us : ds.getUnitStructs()) {
|
|
|
index++;
|
|
|
- setQuestionInfoByExact(index, detailNumber, us, sqinfo, questionList);
|
|
|
+ cd.setIndex(index);
|
|
|
+ cd.setUs(us);
|
|
|
+ setQuestionInfoByExact(cd);
|
|
|
}
|
|
|
sqinfo.setTotalCount(sqinfo.getHardInfo().getCount() + sqinfo.getMediumInfo().getCount()
|
|
|
+ sqinfo.getEasyInfo().getCount());
|
|
@@ -352,122 +357,158 @@ public class RandomPaperServiceImpl implements RandomPaperService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void setQuestionInfoByExact(Integer index, Integer detailNumber, PaperDetailUnitStructDto us,
|
|
|
- StructQuestionInfo sqinfo, List<QuestionDto> questionList) {
|
|
|
- StructQuestionCountInfo si = null;
|
|
|
+ private void setQuestionInfoByExact(StructQuestionCheckDto cd) {
|
|
|
+ PaperDetailUnitStructDto us = cd.getUs();
|
|
|
+ StructQuestionInfo sqinfo = cd.getSqinfo();
|
|
|
if (us.getNoPublicDifficulty() > 0) {
|
|
|
- si = sqinfo.getHardInfo();
|
|
|
- setQuestionInfoByExact(index, detailNumber, us.getQuestionType(), us.getQuesNames(), si, false,
|
|
|
- QuestionDifficulty.HARD.getName(), us.getNoPublicDifficulty(), questionList);
|
|
|
+ cd.setSi(sqinfo.getHardInfo());
|
|
|
+ cd.setPub(false);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.HARD.getName());
|
|
|
+ cd.setNeedCount(us.getNoPublicDifficulty());
|
|
|
+ setQuestionInfoByExactItem(cd);
|
|
|
}
|
|
|
if (us.getPublicDifficulty() > 0) {
|
|
|
- si = sqinfo.getHardInfo();
|
|
|
- setQuestionInfoByExact(index, detailNumber, us.getQuestionType(), us.getQuesNames(), si, true,
|
|
|
- QuestionDifficulty.HARD.getName(), us.getPublicDifficulty(), questionList);
|
|
|
+ cd.setSi(sqinfo.getHardInfo());
|
|
|
+ cd.setPub(true);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.HARD.getName());
|
|
|
+ cd.setNeedCount(us.getPublicDifficulty());
|
|
|
+ setQuestionInfoByExactItem(cd);
|
|
|
}
|
|
|
|
|
|
if (us.getNoPublicMedium() > 0) {
|
|
|
- si = sqinfo.getMediumInfo();
|
|
|
- setQuestionInfoByExact(index, detailNumber, us.getQuestionType(), us.getQuesNames(), si, false,
|
|
|
- QuestionDifficulty.MEDIUM.getName(), us.getNoPublicMedium(), questionList);
|
|
|
+ cd.setSi(sqinfo.getMediumInfo());
|
|
|
+ cd.setPub(false);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.MEDIUM.getName());
|
|
|
+ cd.setNeedCount(us.getNoPublicMedium());
|
|
|
+ setQuestionInfoByExactItem(cd);
|
|
|
}
|
|
|
if (us.getPublicMedium() > 0) {
|
|
|
- si = sqinfo.getMediumInfo();
|
|
|
- setQuestionInfoByExact(index, detailNumber, us.getQuestionType(), us.getQuesNames(), si, true,
|
|
|
- QuestionDifficulty.MEDIUM.getName(), us.getPublicMedium(), questionList);
|
|
|
+ cd.setSi(sqinfo.getMediumInfo());
|
|
|
+ cd.setPub(true);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.MEDIUM.getName());
|
|
|
+ cd.setNeedCount(us.getPublicMedium());
|
|
|
+ setQuestionInfoByExactItem(cd);
|
|
|
}
|
|
|
if (us.getNoPublicSimple() > 0) {
|
|
|
- si = sqinfo.getEasyInfo();
|
|
|
- setQuestionInfoByExact(index, detailNumber, us.getQuestionType(), us.getQuesNames(), si, false,
|
|
|
- QuestionDifficulty.EASY.getName(), us.getNoPublicSimple(), questionList);
|
|
|
+ cd.setSi(sqinfo.getEasyInfo());
|
|
|
+ cd.setPub(false);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.EASY.getName());
|
|
|
+ cd.setNeedCount(us.getNoPublicSimple());
|
|
|
+ setQuestionInfoByExactItem(cd);
|
|
|
}
|
|
|
if (us.getPublicSimple() > 0) {
|
|
|
- si = sqinfo.getEasyInfo();
|
|
|
- setQuestionInfoByExact(index, detailNumber, us.getQuestionType(), us.getQuesNames(), si, true,
|
|
|
- QuestionDifficulty.EASY.getName(), us.getPublicSimple(), questionList);
|
|
|
+ cd.setSi(sqinfo.getEasyInfo());
|
|
|
+ cd.setPub(true);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.EASY.getName());
|
|
|
+ cd.setNeedCount(us.getPublicSimple());
|
|
|
+ setQuestionInfoByExactItem(cd);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void setQuestionInfoByExact(Integer index, Integer detailNumber, QuesStructType st, List<String> quesNames,
|
|
|
- StructQuestionCountInfo si, Boolean pub, String difficulty, Integer count, List<QuestionDto> questionList) {
|
|
|
+ private void setQuestionInfoByExactItem(StructQuestionCheckDto cd) {
|
|
|
+ StructQuestionCountInfo si = cd.getSi();
|
|
|
RandomPaperQuestionDto rq = new RandomPaperQuestionDto();
|
|
|
- rq.setDetailNumber(detailNumber);
|
|
|
- rq.setKey(index + "-" + pub + "-" + difficulty);
|
|
|
+ rq.setDetailNumber(cd.getDetailNumber());
|
|
|
+ rq.setKey(cd.getIndex() + "-" + cd.getPub() + "-" + cd.getDifficulty());
|
|
|
si.getQuestionInfo().add(rq);
|
|
|
- if (CollectionUtils.isNotEmpty(questionList)) {
|
|
|
- Iterator<QuestionDto> it = questionList.iterator();
|
|
|
+ if (CollectionUtils.isNotEmpty(cd.getQuestionList())) {
|
|
|
+ Iterator<QuestionDto> it = cd.getQuestionList().iterator();
|
|
|
while (it.hasNext()) {
|
|
|
QuestionDto q = it.next();
|
|
|
- if (checkExactQuesType(quesNames, st, pub, difficulty, q)) {
|
|
|
- rq.getQuestionIds().add(q.getId());
|
|
|
+ if (cd.getUsedQuesIds().contains(q.getId())) {
|
|
|
it.remove();
|
|
|
+ } else {
|
|
|
+ if (checkExactQuesType(cd.getUs().getQuesNames(), cd.getUs().getQuestionType(), cd.getPub(),
|
|
|
+ cd.getDifficulty(), q)) {
|
|
|
+ rq.getQuestionIds().add(q.getId());
|
|
|
+ cd.getUsedQuesIds().add(q.getId());
|
|
|
+ it.remove();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
si.setCount(si.getCount() + rq.getQuestionIds().size());
|
|
|
- if (si.getValid() && count > rq.getQuestionIds().size()) {
|
|
|
+ if (si.getValid() && cd.getNeedCount() > rq.getQuestionIds().size()) {
|
|
|
si.setValid(false);
|
|
|
- si.setInvalidMsg(getExactErrmsg(index, detailNumber, pub, difficulty));
|
|
|
+ si.setInvalidMsg(getExactErrmsg(cd.getIndex(), cd.getDetailNumber(), cd.getPub(), cd.getDifficulty()));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void setQuestionInfoByBlue(Integer detailNumber, QuesStructType st, List<String> quesNames,
|
|
|
- StructQuestionInfo sqinfo, CoursePropertyNumberDto cp, List<QuestionDto> questionList) {
|
|
|
- StructQuestionCountInfo si = null;
|
|
|
+ private void setQuestionInfoByBlue(StructQuestionCheckDto cd) {
|
|
|
+ StructQuestionInfo sqinfo = cd.getSqinfo();
|
|
|
+ CoursePropertyNumberDto cp = cd.getCp();
|
|
|
if (cp.getNoPublicDifficulty() > 0) {
|
|
|
- si = sqinfo.getHardInfo();
|
|
|
- setQuestionInfoByBlueProp(detailNumber, st, quesNames, si, cp.getPropertyParentId(), cp.getPropertyId(),
|
|
|
- false, QuestionDifficulty.HARD.getName(), cp.getNoPublicDifficulty(), questionList);
|
|
|
+ cd.setSi(sqinfo.getHardInfo());
|
|
|
+ cd.setPub(false);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.HARD.getName());
|
|
|
+ cd.setNeedCount(cp.getNoPublicDifficulty());
|
|
|
+ setQuestionInfoByBlueProp(cd);
|
|
|
}
|
|
|
if (cp.getPublicDifficulty() > 0) {
|
|
|
- si = sqinfo.getHardInfo();
|
|
|
- setQuestionInfoByBlueProp(detailNumber, st, quesNames, si, cp.getPropertyParentId(), cp.getPropertyId(),
|
|
|
- true, QuestionDifficulty.HARD.getName(), cp.getPublicDifficulty(), questionList);
|
|
|
+ cd.setSi(sqinfo.getHardInfo());
|
|
|
+ cd.setPub(true);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.HARD.getName());
|
|
|
+ cd.setNeedCount(cp.getPublicDifficulty());
|
|
|
+ setQuestionInfoByBlueProp(cd);
|
|
|
}
|
|
|
|
|
|
if (cp.getNoPublicMedium() > 0) {
|
|
|
- si = sqinfo.getMediumInfo();
|
|
|
- setQuestionInfoByBlueProp(detailNumber, st, quesNames, si, cp.getPropertyParentId(), cp.getPropertyId(),
|
|
|
- false, QuestionDifficulty.MEDIUM.getName(), cp.getNoPublicMedium(), questionList);
|
|
|
+ cd.setSi(sqinfo.getMediumInfo());
|
|
|
+ cd.setPub(false);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.MEDIUM.getName());
|
|
|
+ cd.setNeedCount(cp.getNoPublicMedium());
|
|
|
+ setQuestionInfoByBlueProp(cd);
|
|
|
}
|
|
|
if (cp.getPublicMedium() > 0) {
|
|
|
- si = sqinfo.getMediumInfo();
|
|
|
- setQuestionInfoByBlueProp(detailNumber, st, quesNames, si, cp.getPropertyParentId(), cp.getPropertyId(),
|
|
|
- true, QuestionDifficulty.MEDIUM.getName(), cp.getPublicMedium(), questionList);
|
|
|
+ cd.setSi(sqinfo.getMediumInfo());
|
|
|
+ cd.setPub(true);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.MEDIUM.getName());
|
|
|
+ cd.setNeedCount(cp.getPublicMedium());
|
|
|
+ setQuestionInfoByBlueProp(cd);
|
|
|
}
|
|
|
if (cp.getNoPublicSimple() > 0) {
|
|
|
- si = sqinfo.getEasyInfo();
|
|
|
- setQuestionInfoByBlueProp(detailNumber, st, quesNames, si, cp.getPropertyParentId(), cp.getPropertyId(),
|
|
|
- false, QuestionDifficulty.EASY.getName(), cp.getNoPublicSimple(), questionList);
|
|
|
+ cd.setSi(sqinfo.getEasyInfo());
|
|
|
+ cd.setPub(false);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.EASY.getName());
|
|
|
+ cd.setNeedCount(cp.getNoPublicSimple());
|
|
|
+ setQuestionInfoByBlueProp(cd);
|
|
|
}
|
|
|
if (cp.getPublicSimple() > 0) {
|
|
|
- si = sqinfo.getEasyInfo();
|
|
|
- setQuestionInfoByBlueProp(detailNumber, st, quesNames, si, cp.getPropertyParentId(), cp.getPropertyId(),
|
|
|
- true, QuestionDifficulty.EASY.getName(), cp.getPublicSimple(), questionList);
|
|
|
+ cd.setSi(sqinfo.getEasyInfo());
|
|
|
+ cd.setPub(true);
|
|
|
+ cd.setDifficulty(QuestionDifficulty.EASY.getName());
|
|
|
+ cd.setNeedCount(cp.getPublicSimple());
|
|
|
+ setQuestionInfoByBlueProp(cd);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void setQuestionInfoByBlueProp(Integer detailNumber, QuesStructType st, List<String> quesNames,
|
|
|
- StructQuestionCountInfo si, String pproid, String proid, Boolean pub, String difficulty, Integer count,
|
|
|
- List<QuestionDto> questionList) {
|
|
|
+ private void setQuestionInfoByBlueProp(StructQuestionCheckDto cd) {
|
|
|
+ StructQuestionCountInfo si = cd.getSi();
|
|
|
RandomPaperQuestionDto rq = new RandomPaperQuestionDto();
|
|
|
- rq.setDetailNumber(detailNumber);
|
|
|
- rq.setKey(bulidPropertyGroupByBlueStruct(pproid, proid, pub, difficulty));
|
|
|
+ rq.setDetailNumber(cd.getDetailNumber());
|
|
|
+ rq.setKey(bulidPropertyGroupByBlueStruct(cd.getCp().getPropertyParentId(), cd.getCp().getPropertyId(),
|
|
|
+ cd.getPub(), cd.getDifficulty()));
|
|
|
si.getQuestionInfo().add(rq);
|
|
|
- if (CollectionUtils.isNotEmpty(questionList)) {
|
|
|
- Iterator<QuestionDto> it = questionList.iterator();
|
|
|
+ if (CollectionUtils.isNotEmpty(cd.getQuestionList())) {
|
|
|
+ Iterator<QuestionDto> it = cd.getQuestionList().iterator();
|
|
|
while (it.hasNext()) {
|
|
|
QuestionDto q = it.next();
|
|
|
- if (checkBlueQuesType(quesNames, st, rq.getKey(), q)) {
|
|
|
- rq.getQuestionIds().add(q.getId());
|
|
|
+ if (cd.getUsedQuesIds().contains(q.getId())) {
|
|
|
it.remove();
|
|
|
+ } else {
|
|
|
+ if (checkBlueQuesType(cd.getDs().getQuesNames(), cd.getDs().getQuestionType(), rq.getKey(), q)) {
|
|
|
+ rq.getQuestionIds().add(q.getId());
|
|
|
+ cd.getUsedQuesIds().add(q.getId());
|
|
|
+ it.remove();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
si.setCount(si.getCount() + rq.getQuestionIds().size());
|
|
|
- if (si.getValid() && count > rq.getQuestionIds().size()) {
|
|
|
+ if (si.getValid() && cd.getNeedCount() > rq.getQuestionIds().size()) {
|
|
|
si.setValid(false);
|
|
|
- si.setInvalidMsg(getBlueErrmsg(detailNumber, pproid, proid, pub, difficulty));
|
|
|
+ si.setInvalidMsg(getBlueErrmsg(cd.getDetailNumber(), cd.getCp().getPropertyParentId(),
|
|
|
+ cd.getCp().getPropertyId(), cd.getPub(), cd.getDifficulty()));
|
|
|
}
|
|
|
}
|
|
|
|