|
@@ -5,6 +5,7 @@ import java.io.FileNotFoundException;
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
+import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
@@ -14,6 +15,7 @@ import main.java.com.UpYun;
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
|
|
import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
|
|
import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
|
|
import cn.com.qmth.examcloud.common.util.excel.ExcelWriter;
|
|
import cn.com.qmth.examcloud.common.util.excel.ExcelWriter;
|
|
|
|
|
|
@@ -23,8 +25,10 @@ import com.qmth.cqb.paper.dto.PaperDetailUnitExp;
|
|
import com.qmth.cqb.paper.dto.PaperExp;
|
|
import com.qmth.cqb.paper.dto.PaperExp;
|
|
import com.qmth.cqb.paper.dto.SubjectiveQuestionStructure;
|
|
import com.qmth.cqb.paper.dto.SubjectiveQuestionStructure;
|
|
import com.qmth.cqb.paper.model.ExamFile;
|
|
import com.qmth.cqb.paper.model.ExamFile;
|
|
|
|
+import com.qmth.cqb.paper.model.ExportStructure;
|
|
import com.qmth.cqb.paper.model.ExtractConfig;
|
|
import com.qmth.cqb.paper.model.ExtractConfig;
|
|
-import com.qmth.cqb.paper.model.PaperDetailUnit;
|
|
|
|
|
|
+import com.qmth.cqb.paper.model.QuestionTypeNum;
|
|
|
|
+import com.qmth.cqb.question.model.Question;
|
|
import com.qmth.cqb.utils.CommonUtils;
|
|
import com.qmth.cqb.utils.CommonUtils;
|
|
import com.qmth.cqb.utils.enums.ExamFileType;
|
|
import com.qmth.cqb.utils.enums.ExamFileType;
|
|
import com.qmth.cqb.utils.word.DocxProcessUtil;
|
|
import com.qmth.cqb.utils.word.DocxProcessUtil;
|
|
@@ -56,13 +60,26 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void uploadFile(ExtractConfig extractConfig,String paperId,AccessUser accessUser) throws Exception{
|
|
|
|
|
|
+ public void uploadFile(ExtractConfig extractConfig,String paperId,AccessUser accessUser,Map<String,Object> exportStructureMap) throws Exception{
|
|
Map<String,Object> dataMap = initExportPaper(paperId);
|
|
Map<String,Object> dataMap = initExportPaper(paperId);
|
|
if (dataMap.get("fileName") != null) {
|
|
if (dataMap.get("fileName") != null) {
|
|
String currNum = CommonUtils.getCurNum();
|
|
String currNum = CommonUtils.getCurNum();
|
|
|
|
+ ExportStructure exportStructure = (ExportStructure) exportStructureMap.get("exportStructure");
|
|
|
|
+ List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
|
|
|
|
+ PaperExp paperExp = (PaperExp) dataMap.get("paper");
|
|
|
|
+ List<PaperDetailExp> objectiveDetails = paperExp.getObjectiveDetails();
|
|
|
|
+ //检查客观题的数量是否大于试卷导出设置中的客观题数量
|
|
|
|
+ if(exportStructure!=null){
|
|
|
|
+ checkObjectiveDetailsNum(paperExp,objectiveDetails,questionTypeNums);
|
|
|
|
+ }
|
|
|
|
+ //上传试卷
|
|
uploadPaperWord(dataMap,extractConfig,paperId,accessUser,currNum);
|
|
uploadPaperWord(dataMap,extractConfig,paperId,accessUser,currNum);
|
|
|
|
+ //上传答案
|
|
uploadAnswerWord(dataMap,extractConfig,paperId,accessUser,currNum);
|
|
uploadAnswerWord(dataMap,extractConfig,paperId,accessUser,currNum);
|
|
- uploadPaperStructure(dataMap,extractConfig,paperId,accessUser,currNum);
|
|
|
|
|
|
+ //上传试卷结构
|
|
|
|
+ if(exportStructure!=null){
|
|
|
|
+ uploadPaperStructure(dataMap,extractConfig,paperId,accessUser,currNum,questionTypeNums);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -119,8 +136,8 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
|
|
/**
|
|
/**
|
|
* 生成试卷结构,上传至又拍云
|
|
* 生成试卷结构,上传至又拍云
|
|
*/
|
|
*/
|
|
- private void uploadPaperStructure(Map<String,Object> dataMap,ExtractConfig extractConfig,String paperId,AccessUser accessUser,String currNum) {
|
|
|
|
- exportObjectiveQuestionStructures(dataMap,extractConfig,accessUser,currNum);
|
|
|
|
|
|
+ private void uploadPaperStructure(Map<String,Object> dataMap,ExtractConfig extractConfig,String paperId,AccessUser accessUser,String currNum,List<QuestionTypeNum> questionTypeNums) {
|
|
|
|
+ exportObjectiveQuestionStructures(dataMap,extractConfig,accessUser,currNum,questionTypeNums);
|
|
exportSubjectiveQuestionStructures(dataMap,extractConfig,accessUser,currNum);
|
|
exportSubjectiveQuestionStructures(dataMap,extractConfig,accessUser,currNum);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -129,9 +146,11 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
|
|
* @param paperExp
|
|
* @param paperExp
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- private void exportObjectiveQuestionStructures(Map<String,Object> dataMap,ExtractConfig extractConfig,AccessUser accessUser,String currNum){
|
|
|
|
|
|
+ private void exportObjectiveQuestionStructures(Map<String,Object> dataMap,ExtractConfig extractConfig,AccessUser accessUser,String currNum,List<QuestionTypeNum> questionTypeNums){
|
|
PaperExp paperExp = (PaperExp) dataMap.get("paper");
|
|
PaperExp paperExp = (PaperExp) dataMap.get("paper");
|
|
List<PaperDetailExp> objectiveDetails = paperExp.getObjectiveDetails();
|
|
List<PaperDetailExp> objectiveDetails = paperExp.getObjectiveDetails();
|
|
|
|
+ //根据试卷结构导出设置中的数量补齐客观题
|
|
|
|
+ fillObjectiveDetails(objectiveDetails,questionTypeNums);
|
|
List<ObjectiveQuestionStructure> objectiveQuestionStructureList = new ArrayList<ObjectiveQuestionStructure>();
|
|
List<ObjectiveQuestionStructure> objectiveQuestionStructureList = new ArrayList<ObjectiveQuestionStructure>();
|
|
for(PaperDetailExp paperDetailExp:objectiveDetails){
|
|
for(PaperDetailExp paperDetailExp:objectiveDetails){
|
|
for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){
|
|
for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){
|
|
@@ -158,7 +177,66 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
|
|
+ * 根据试卷结构导出设置中的数量补齐客观题
|
|
|
|
+ * @param objectiveDetails
|
|
|
|
+ * @param questionTypeNums
|
|
|
|
+ */
|
|
|
|
+ private void fillObjectiveDetails(List<PaperDetailExp> objectiveDetails,List<QuestionTypeNum> questionTypeNums) {
|
|
|
|
+ for(PaperDetailExp paperDetailExp:objectiveDetails){
|
|
|
|
+ List<PaperDetailUnitExp> paperDetailUnits = paperDetailExp.getPaperDetailUnits();
|
|
|
|
+ //1.将大题中的小题排序
|
|
|
|
+ Collections.sort(paperDetailUnits);
|
|
|
|
+ //2.将小题的number重新设置
|
|
|
|
+ for(int i = 0;i<paperDetailUnits.size();i++){
|
|
|
|
+ PaperDetailUnitExp paperDetailUnitExp = paperDetailUnits.get(i);
|
|
|
|
+ paperDetailUnitExp.setNumber(i+1);
|
|
|
|
+ }
|
|
|
|
+ //3.根据试卷结构导出设置中的数量补齐客观题
|
|
|
|
+ QuesStructType type = paperDetailUnits.get(0).getQuestionType();
|
|
|
|
+ int unitSize = paperDetailUnits.size();
|
|
|
|
+ for(QuestionTypeNum questionTypeNum:questionTypeNums){
|
|
|
|
+ if(type==questionTypeNum.getQuestionType()){
|
|
|
|
+ int length = questionTypeNum.getQuantity()-unitSize;
|
|
|
|
+ for(int i = 0;i<length;i++){
|
|
|
|
+ PaperDetailUnitExp paperDetailUnitExp = new PaperDetailUnitExp();
|
|
|
|
+ paperDetailUnitExp.setQuestionType(type);
|
|
|
|
+ paperDetailUnitExp.setScore((double) 0);
|
|
|
|
+ paperDetailUnitExp.setNumber(unitSize+(i+1));
|
|
|
|
+ Question question = new Question();
|
|
|
|
+ question.setQuesAnswer("#");
|
|
|
|
+ paperDetailUnitExp.setQuestion(question);
|
|
|
|
+ paperDetailUnits.add(paperDetailUnitExp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 检查客观题数量是否小于试卷结构导出设置的数量
|
|
|
|
+ * @param paperExp
|
|
|
|
+ * @param objectiveDetails
|
|
|
|
+ * @param questionTypeNums
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private void checkObjectiveDetailsNum(PaperExp paperExp,List<PaperDetailExp> objectiveDetails,List<QuestionTypeNum> questionTypeNums) {
|
|
|
|
+ for(PaperDetailExp paperDetailExp:objectiveDetails){
|
|
|
|
+ for(QuestionTypeNum typeNum:questionTypeNums){
|
|
|
|
+ QuesStructType quesStructType = paperDetailExp.getPaperDetailUnits().get(0).getQuestionType();
|
|
|
|
+ if(typeNum.getQuestionType()==quesStructType){
|
|
|
|
+ if(paperDetailExp.getUnitCount()>typeNum.getQuantity()){
|
|
|
|
+ throw new RuntimeException("试卷:"+paperExp.getName()
|
|
|
|
+ +"中"+quesStructType.getName()+"的数量:"+paperDetailExp.getUnitCount()
|
|
|
|
+ + ",大于试卷结构导出设置的数量:"+typeNum.getQuantity()+",不符合导出规则");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 获得主观题导出结构,并上传至又拍云
|
|
* 获得主观题导出结构,并上传至又拍云
|
|
* @param paperExp
|
|
* @param paperExp
|
|
* @return
|
|
* @return
|
|
@@ -191,5 +269,6 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|