|
@@ -4,6 +4,7 @@ import java.io.File;
|
|
|
import java.io.FileNotFoundException;
|
|
|
import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.List;
|
|
@@ -231,7 +232,80 @@ public abstract class ExportPaperAbstractService {
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public abstract void uploadFile(ExtractConfig extractConfig,String paperId,ExportStructure exportStructure,AccessUser accessUser) throws Exception;
|
|
|
+
|
|
|
+ public PaperExp initPaperExp(String paperId) throws Exception{
|
|
|
+ PaperExp paperExp = initPaperExpService.initPaperExp(paperId);
|
|
|
+ setExpDtoTitle(paperExp.getPaperDetails());
|
|
|
+ return paperExp;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置大题标题
|
|
|
+ * @param paperDetailExps
|
|
|
+ */
|
|
|
+ public void setExpDtoTitle(List<PaperDetailExp> paperDetailExps) {
|
|
|
+ for(PaperDetailExp paperDetailExp:paperDetailExps){
|
|
|
+ String title = "";
|
|
|
+ String titleDetail = null;
|
|
|
+ String totalScore = BigDecimal.valueOf(paperDetailExp.getScore()).stripTrailingZeros().toPlainString();
|
|
|
+ QuesStructType type = paperDetailExp.getPaperDetailUnits().get(0).getQuestionType();
|
|
|
+ String questionScore = checkPaperDetailUnitScore(paperDetailExp);
|
|
|
+ String scoreString = questionScore==null?"":"每小题"+questionScore+"分,";
|
|
|
+ if (type == QuesStructType.SINGLE_ANSWER_QUESTION) {
|
|
|
+ paperDetailExp.setName("单项选择题");
|
|
|
+ title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
|
|
|
+ + scoreString + "共" + totalScore + "分)";
|
|
|
+ titleDetail = "在每小题列出的备选项中只有一个符号合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分";
|
|
|
+ } else if (type == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
|
|
|
+ paperDetailExp.setName("多项选择题");
|
|
|
+ title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
|
|
|
+ + scoreString + "共" + totalScore+ "分)";
|
|
|
+ titleDetail = "在每小题列出的备选项中有一个或多个符号合题目要求的,请将符合项选出并将“答题卡”的相应代码涂黑";
|
|
|
+ } else if (type == QuesStructType.BOOL_ANSWER_QUESTION) {
|
|
|
+ paperDetailExp.setName("判断题");
|
|
|
+ title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
|
|
|
+ + scoreString + "共" + totalScore+ "分。"
|
|
|
+ + "正确的填涂√、错误填涂×。错涂、多涂或未涂均无分)";
|
|
|
+ } else {
|
|
|
+ paperDetailExp.setName(type.getName());
|
|
|
+ title = "(本大题共"+paperDetailExp.getUnitCount()+"小题,"+scoreString+"共"+totalScore+"分)";
|
|
|
+ }
|
|
|
+ paperDetailExp.setTitle(title);
|
|
|
+ paperDetailExp.setTitleDetail(titleDetail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验大题下的小题分数是不是一样
|
|
|
+ * @param paperDetailExp
|
|
|
+ * @return 如果分数一样,返回分数
|
|
|
+ * 如果分数不一样,返回 null
|
|
|
+ */
|
|
|
+ public String checkPaperDetailUnitScore(PaperDetailExp paperDetailExp) {
|
|
|
+ List<PaperDetailUnitExp> paperDetailUnitExps = paperDetailExp.getPaperDetailUnits();
|
|
|
+ Set<Double> scoreSet = new HashSet<Double>();
|
|
|
+ for (PaperDetailUnitExp unitExp : paperDetailUnitExps) {
|
|
|
+ //判断套路
|
|
|
+ if(unitExp.getQuestionType()==QuesStructType.NESTED_ANSWER_QUESTION){
|
|
|
+ List<Question> subQuestions = unitExp.getQuestion().getSubQuestions();
|
|
|
+ for(Question subQuestion:subQuestions){
|
|
|
+ scoreSet.add(subQuestion.getScore());
|
|
|
+ }
|
|
|
+ /*List<Double> subScoreList = unitExp.getSubScoreList();
|
|
|
+ for(Double score:subScoreList){
|
|
|
+ scoreSet.add(score);
|
|
|
+ }*/
|
|
|
+ }else{
|
|
|
+ scoreSet.add(unitExp.getScore());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(scoreSet.size() == 1){
|
|
|
+ return scoreSet.iterator().next()+"";
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 创建机考文件,并打包上传至又拍云
|
|
|
* @param paperId
|