派生自 projectDept/qhighschool

EricsHu
2022-12-05 068fc7f2e81178e55fa191a13709af64b1a163f6
src/main/java/com/qxueyou/scc/exercise/util/ExerciseUtils.java
@@ -22,7 +22,7 @@
import com.qxueyou.scc.school.model.SchEvaluate;
/**
 * 练习工具类
 * 练习工具类
 * 
 * @author zhiyong
 *
@@ -30,7 +30,7 @@
public class ExerciseUtils {
   /**
    * 重新组装练习item
    * 重新组装练习item
    * 
    * @param lstItems
    * @return
@@ -38,16 +38,16 @@
   public static void packageExerciseItem(List<ExerciseItem> lstItems, List<ExerciseItemAnswerU> lstUserAnswer,
         List<ExerciseObjectImg> lstOptionImgs) {
      for (ExerciseItem objExerciseItem : lstItems) {
         // 选项
         // 选项
         List<ExerciseItemOption> options = objExerciseItem.getOptions();
         // 选项分数
         // 选项分数
         List<ExerciseItemScore> scores = objExerciseItem.getScores();
         ExerciseUtils.packOption(options, scores, lstOptionImgs);
         if (lstUserAnswer == null || lstUserAnswer.isEmpty()) {
            continue;
         }
         for (ExerciseItemAnswerU answerU : lstUserAnswer) {
            // 获用户答案
            // 获用户答案
            if (answerU.getExerciseItemId().equals(objExerciseItem.getExerciseId())) {
               objExerciseItem.setAnswer(answerU.getAnswer());
               break;
@@ -57,7 +57,7 @@
   }
   /**
    * 为选项组装分数和图片
    * 为选项组装分数和图片
    * 
    * @return
    */
@@ -76,7 +76,7 @@
               break;
            }
         }
         // ͼƬ
         // 图片
         if (lstOptionImgs == null || lstOptionImgs.isEmpty()) {
            continue;
         }
@@ -94,7 +94,7 @@
   }
   /**
    * 组装问卷详细统计情况
    * 组装问卷详细统计情况
    * 
    * @param lstItems
    * @param objSchEvaluate
@@ -105,22 +105,22 @@
      double iTotalAverageScore = 0;
      double iTotalScore = 0;
      for (ExerciseItem objExerciseItem : lstItems) {
         // 选项
         // 选项
         List<ExerciseItemOption> options = objExerciseItem.getOptions();
         // 选项分数
         // 选项分数
         List<ExerciseItemScore> scores = objExerciseItem.getScores();
         ExerciseUtils.packOption(options, scores, null);
         List<ExerciseItemAnswerU> exerciseItemAnswerU = objExerciseItem.getExerciseItemAnswerU();
         // 平均分数
         // 平均分数
         double dAverageScore = 0;
         double dUserScore = 0;
         // 是否存在答题学员
         // 是否存在答题学员
         boolean hasAnswerU = exerciseItemAnswerU != null && !exerciseItemAnswerU.isEmpty();
         if (options == null || options.isEmpty()) {
            continue;
         }
         // 统计每个选项的情况
         // 统计每个选项的情况
         LinkedHashMap<String, Integer> mOptionsDetail = new LinkedHashMap<String, Integer>();
         LinkedHashMap<String, Integer> mOptionOrderDetail = new LinkedHashMap<String, Integer>();
         if (!hasAnswerU) {
@@ -128,7 +128,7 @@
         }
         for (ExerciseItemAnswerU objExerciseItemAnswerU : exerciseItemAnswerU) {
            String strAnswer = objExerciseItemAnswerU.getAnswer();
            if (StringUtils.isEmpty(strAnswer)) {// 为空自动跳出循环
            if (StringUtils.isEmpty(strAnswer)) {// 为空自动跳出循环
               break;
            }
            Map<String, Object> mResult2 = packageItemOption(objExerciseItem, strAnswer, mOptionsDetail, mOptionOrderDetail);
@@ -136,11 +136,11 @@
            objExerciseItem.setMaxScore((Double) mResult2.get("dMaxScore"));
            dUserScore += (Double) mResult2.get("dUserScore");
         }
         // 计算平均值
         // 计算平均值
         if (hasAnswerU) {
            dAverageScore = dUserScore / exerciseItemAnswerU.size();
         }
         // 最大值
         // 最大值
         iTotalScore += objExerciseItem.getMaxScore();
         objExerciseItem.setOptionsDetail(mOptionsDetail);
         if(!mOptionOrderDetail.isEmpty()) {
@@ -162,7 +162,7 @@
   }
   /**
    * 组装问卷详细统计情况
    * 组装问卷详细统计情况
    * 
    * @param lstItems
    * @param objSchEvaluate
@@ -178,22 +178,22 @@
      for (ExerciseItem objExerciseItem : result) {
         lstItems.add(objExerciseItem);
         List<ExerciseItemAnswerU> lstExerciseItemAnswerU = objExerciseItem.getExerciseItemAnswerU();
         // 选项
         // 选项
         List<ExerciseItemOption> options = objExerciseItem.getOptions();
         // 选项分数
         // 选项分数
         List<ExerciseItemScore> scores = objExerciseItem.getScores();
         // 组装选项和分数
         // 组装选项和分数
         ExerciseUtils.packOption(options, scores, lstExerciseObjectImg);
         if (lstExerciseItemAnswerU == null || lstExerciseItemAnswerU.isEmpty()) {
            continue;
         }
         // 用户答案
         // 用户答案
         String strAnswer = lstExerciseItemAnswerU.get(0).getAnswer();
         if (StringUtils.isEmpty(strAnswer)) {// 为空自动跳出循环
         if (StringUtils.isEmpty(strAnswer)) {// 为空自动跳出循环
            break;
         }
         strCreator = lstExerciseItemAnswerU.get(0).getCreator();
         if (objExerciseItem.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {// 问答题
         if (objExerciseItem.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {// 问答题
            objExerciseItem.setAnswer(strAnswer);
         } else {
            if (options == null || options.isEmpty()) {
@@ -217,48 +217,48 @@
   }
   /**
    * 判断题目类型
    * 判断题目类型
    * 
    * @param objExerciseItem
    *            题目
    *            题目
    * @param strAnswer
    *            用户选择答案
    *            用户选择答案
    * @param mOptionsDetail
    *            统计值
    *            统计值
    * @return
    */
   public static Map<String, Object> packageItemOption(ExerciseItem objExerciseItem, String strAnswer,
         LinkedHashMap<String, Integer> mOptionsDetail, LinkedHashMap<String, Integer> mOptionOrderDetail) {
      Map<String, Object> mResult = new HashMap<String, Object>();
      // 选项
      // 选项
      List<ExerciseItemOption> options = objExerciseItem.getOptions();
      double dMaxScore = 0;
      double dUserScore = 0;
      String[] c = "A B C D E F G H I J K L M N".split(" ");
      // 题目类型
      // 题目类型
      int iType = objExerciseItem.getType();
      int index = 0;
      StringBuffer userAnswerContent = new StringBuffer(256);
      for (ExerciseItemOption objExerciseItemOption : options) {
         double dScore = Double.valueOf(objExerciseItemOption.getScore());
         // 获取最大值
         // 获取最大值
         dMaxScore = iType == 2 ? dMaxScore + dScore : dScore > dMaxScore ? dScore : dMaxScore;
         if (iType == ExerciseItem.TYPE_SINGLE_SELECT
               && strAnswer.substring(0, 1).equals(objExerciseItemOption.getOptionOrder())) {// 单选A或B或C或D_补充xxxxxx
               && strAnswer.substring(0, 1).equals(objExerciseItemOption.getOptionOrder())) {// 单选A或B或C或D_补充xxxxxx
            dUserScore += dScore;
            userAnswerContent.append(strAnswer.length() > 2
                  ? objExerciseItemOption.getContent() + strAnswer.substring(1, strAnswer.length()) : // 拼接补充内容
                  ? objExerciseItemOption.getContent() + strAnswer.substring(1, strAnswer.length()) : // 拼接补充内容
                  objExerciseItemOption.getContent());
            mOptionsDetail.put(ExerciseUtils.getOptionsContent(objExerciseItemOption),
                  ExerciseUtils.getValue(ExerciseUtils.getOptionsContent(objExerciseItemOption), mOptionsDetail));
            mOptionOrderDetail.put(objExerciseItemOption.getOptionOrder(),mOptionsDetail.get(ExerciseUtils.getOptionsContent(objExerciseItemOption)));
         } else if (iType == ExerciseItem.TYPE_MULTI_SELECT) {// 多选A,B,C,D_补充xxxxxx
         } else if (iType == ExerciseItem.TYPE_MULTI_SELECT) {// 多选A,B,C,D_补充xxxxxx
            String[] arrAnswer = strAnswer.split("_");
            String[] strAnswerOrder = arrAnswer[0].split(",");
            for (int i = 0; i < strAnswerOrder.length; i++) {
               if (strAnswerOrder[i].equals(objExerciseItemOption.getOptionOrder())) {
                  dUserScore += dScore;
                  // 拼接补充的内容
                  // 拼接补充的内容
                  if (index == options.size() - 1) {
                     userAnswerContent.append(objExerciseItemOption.getContent());
                     userAnswerContent.append(arrAnswer.length > 1 && arrAnswer[1].length() > 2
@@ -272,18 +272,18 @@
               }
            }
         } else if (iType == ExerciseItem.TYPE_SCORE
               && c[Integer.valueOf(strAnswer) - 1].equals(objExerciseItemOption.getOptionOrder())) {// 分值,1,2,3,4,5颗星
               && c[Integer.valueOf(strAnswer) - 1].equals(objExerciseItemOption.getOptionOrder())) {// 分值,1,2,3,4,5颗星
            dUserScore += dScore;
            userAnswerContent.append(ExerciseUtils.getOptionsContent(objExerciseItemOption));// 给答案文字赋值
            userAnswerContent.append(ExerciseUtils.getOptionsContent(objExerciseItemOption));// 给答案文字赋值
            mOptionsDetail.put(ExerciseUtils.getOptionsContent(objExerciseItemOption),
                  ExerciseUtils.getValue(ExerciseUtils.getOptionsContent(objExerciseItemOption), mOptionsDetail));
            mOptionOrderDetail.put(objExerciseItemOption.getOptionOrder(),mOptionsDetail.get(ExerciseUtils.getOptionsContent(objExerciseItemOption)));
         } else if (iType == ExerciseItem.TYPE_MEASUREMENT && index == 0) {// 量值,直接存分数
         } else if (iType == ExerciseItem.TYPE_MEASUREMENT && index == 0) {// 量值,直接存分数
            dUserScore += Integer.valueOf(strAnswer);
            userAnswerContent.append(strAnswer).append("分");
            mOptionsDetail.put(strAnswer + "分",
                  mOptionsDetail.get(strAnswer + "分") == null ? 1 : mOptionsDetail.get(strAnswer + "分") + 1);
            mOptionOrderDetail.put(strAnswer,mOptionsDetail.get(strAnswer + "分"));
            userAnswerContent.append(strAnswer).append("分");
            mOptionsDetail.put(strAnswer + "分",
                  mOptionsDetail.get(strAnswer + "分") == null ? 1 : mOptionsDetail.get(strAnswer + "分") + 1);
            mOptionOrderDetail.put(strAnswer,mOptionsDetail.get(strAnswer + "分"));
         }
         index++;
      }
@@ -294,7 +294,7 @@
   }
   /**
    * 获取值
    * 获取值
    * 
    * @param content
    * @param mOptionsDetail
@@ -306,18 +306,18 @@
   }
   /**
    * 获取选项的值和分数
    * 获取选项的值和分数
    * 
    * @param objExerciseItemOption
    * @return
    */
   public static String getOptionsContent(ExerciseItemOption objExerciseItemOption) {
      return objExerciseItemOption.getContent().concat("(").concat(String.valueOf(objExerciseItemOption.getScore()))
            .concat("分)");
            .concat("分)");
   }
   /**
    * 重新组装练习item
    * 重新组装练习item
    * 
    * @param lstAllOptions
    * @return
@@ -325,12 +325,12 @@
   public static void packageExerciseItem(Map<String, List<ExerciseItemOption>> optionsMap,
         Map<String, String> answerMap, List<ExerciseItemOption> lstAllOptions,
         Map<String, List<ExerciseObjectImg>> imgOptionMap) {
      // 上一次练习id
      // 上一次练习id
      String lastExerciseId = "";
      ExerciseItemOption option = null;
      List<ExerciseItemOption> lstOptions = null;
      StringBuffer correctAnswers = new StringBuffer(128); // 正确答案
      // 4.3 题目选项
      StringBuffer correctAnswers = new StringBuffer(128); // 正确答案
      // 4.3 题目选项
      for (int i = 0; i < lstAllOptions.size(); i++) {
         option = lstAllOptions.get(i);
@@ -338,27 +338,27 @@
            option.setImgs(imgOptionMap.get(option.getOptionId()));
         }
         if (i == 0) {// 第一次
         if (i == 0) {// 第一次
            lstOptions = new ArrayList<ExerciseItemOption>();
            lstOptions.add(option);
            if (option.getChecked()) {// 正确答案
            if (option.getChecked()) {// 正确答案
               correctAnswers.append(option.getOptionOrder()).append(',');
            }
         } else {// 第二次开始
            if (lastExerciseId.equals(option.getExerciseItemId())) {// 相同
         } else {// 第二次开始
            if (lastExerciseId.equals(option.getExerciseItemId())) {// 相同
               lstOptions.add(option);
               if (option.getChecked()) {// 正确答案
               if (option.getChecked()) {// 正确答案
                  correctAnswers.append(option.getOptionOrder()).append(',');
               }
            } else {// 不相同
                  // 添加到map
            } else {// 不相同
                  // 添加到map
               optionsMap.put(lastExerciseId, lstOptions);
               answerMap.put(lastExerciseId, correctAnswers.toString());
               correctAnswers = new StringBuffer(128);
               if (option.getChecked()) {// 正确答案
               if (option.getChecked()) {// 正确答案
                  correctAnswers.append(option.getOptionOrder()).append(',');
               }
               lstOptions = new ArrayList<ExerciseItemOption>();
@@ -366,40 +366,40 @@
            }
         }
         if (i == lstAllOptions.size() - 1) {// 最后一次
         if (i == lstAllOptions.size() - 1) {// 最后一次
            answerMap.put(option.getExerciseItemId(), correctAnswers.toString());
            optionsMap.put(option.getExerciseItemId(), lstOptions);
         }
         // 上一次练习id
         // 上一次练习id
         lastExerciseId = option.getExerciseItemId();
      }
   }
   /**
    * 重新组装练习item 题目图片
    * 重新组装练习item 题目图片
    * 
    * @param lstAllOptions
    * @return
    */
   public static Map<String, List<ExerciseObjectImg>> packageExerciseItemImg(List<ExerciseObjectImg> lstImgs) {
      Map<String, List<ExerciseObjectImg>> imgMap = new HashMap<String, List<ExerciseObjectImg>>();
      // 上一次练习id
      // 上一次练习id
      String lastExerciseId = "";
      ExerciseObjectImg objImg = null;
      List<ExerciseObjectImg> lstImg = null;
      // 4.3 题目选项
      // 4.3 题目选项
      for (int i = 0; i < lstImgs.size(); i++) {
         objImg = lstImgs.get(i);
         if (i == 0) {// 第一次
         if (i == 0) {// 第一次
            lstImg = new ArrayList<ExerciseObjectImg>();
            lstImg.add(objImg);
         } else {// 第二次开始
            if (lastExerciseId.equals(objImg.getExerciseObjectId())) {// 相同
         } else {// 第二次开始
            if (lastExerciseId.equals(objImg.getExerciseObjectId())) {// 相同
               lstImg.add(objImg);
            } else {// 不相同
                  // 添加到map
            } else {// 不相同
                  // 添加到map
               imgMap.put(lastExerciseId, lstImg);
               lstImg = new ArrayList<ExerciseObjectImg>();
@@ -407,11 +407,11 @@
            }
         }
         if (i == lstImgs.size() - 1) {// 最后一次
         if (i == lstImgs.size() - 1) {// 最后一次
            imgMap.put(objImg.getExerciseObjectId(), lstImg);
         }
         // 上一次练习id
         // 上一次练习id
         lastExerciseId = objImg.getExerciseObjectId();
      }
@@ -419,29 +419,29 @@
   }
   /**
    * 重新组装练习item
    * 重新组装练习item
    * 
    * @param lstAllOptions
    * @return
    */
   public static void packageExerciseItemScore(Map<String, List<ExerciseItemScore>> scoreMap,
         List<ExerciseItemScore> lstAllscores) {
      // 上一次练习id
      // 上一次练习id
      String lastExerciseId = "";
      ExerciseItemScore score = null;
      List<ExerciseItemScore> lstscore = null;
      // 4.3 题目选项
      // 4.3 题目选项
      for (int i = 0; i < lstAllscores.size(); i++) {
         score = lstAllscores.get(i);
         if (i == 0) {// 第一次
         if (i == 0) {// 第一次
            lstscore = new ArrayList<ExerciseItemScore>();
            lstscore.add(score);
         } else {// 第二次开始
            if (lastExerciseId.equals(score.getExerciseItemId())) {// 相同
         } else {// 第二次开始
            if (lastExerciseId.equals(score.getExerciseItemId())) {// 相同
               lstscore.add(score);
            } else {// 不相同
                  // 添加到map
            } else {// 不相同
                  // 添加到map
               scoreMap.put(lastExerciseId, lstscore);
               lstscore = new ArrayList<ExerciseItemScore>();
@@ -449,40 +449,40 @@
            }
         }
         if (i == lstAllscores.size() - 1) {// 最后一次
         if (i == lstAllscores.size() - 1) {// 最后一次
            scoreMap.put(score.getExerciseItemId(), lstscore);
         }
         // 上一次练习id
         // 上一次练习id
         lastExerciseId = score.getExerciseItemId();
      }
   }
   /**
    * 重新组装做题记录 ExerciseItemAnswer —— 成绩统计
    * 重新组装做题记录 ExerciseItemAnswer —— 成绩统计
    * 
    * @param lstAllOptions
    * @return
    */
   public static void packageExerciseItemAnswerStatis(List<ExerciseItemAnswerU> answers,
         Map<String, Object> answerUMap) {
      // 上一次练习id
      // 上一次练习id
      String lastExerciseId = "";
      ExerciseItemAnswerU answer = null;
      List<ExerciseItemAnswerU> lstAnswers = null;
      // 做题记录
      // 做题记录
      for (int i = 0; i < answers.size(); i++) {
         answer = answers.get(i);
         if (i == 0) {// 第一次
         if (i == 0) {// 第一次
            lstAnswers = new ArrayList<ExerciseItemAnswerU>();
            lstAnswers.add(answer);
         } else {// 第二次开始
            if (lastExerciseId.equals(answer.getExerciseItemId())) {// 相同
         } else {// 第二次开始
            if (lastExerciseId.equals(answer.getExerciseItemId())) {// 相同
               lstAnswers.add(answer);
            } else {// 不相同
                  // 添加到map
            } else {// 不相同
                  // 添加到map
               answerUMap.put(lastExerciseId, lstAnswers);
               lstAnswers = new ArrayList<ExerciseItemAnswerU>();
@@ -490,40 +490,40 @@
            }
         }
         if (i == answers.size() - 1) {// 最后一次
         if (i == answers.size() - 1) {// 最后一次
            answerUMap.put(answer.getExerciseItemId(), lstAnswers);
         }
         // 上一次练习id
         // 上一次练习id
         lastExerciseId = answer.getExerciseItemId();
      }
   }
   /**
    * 重新组装题目选项ExerciseItemOption —— 成绩统计
    * 重新组装题目选项ExerciseItemOption —— 成绩统计
    * 
    * @param lstAllOptions
    * @return
    */
   public static void packageExerciseItemOption(List<ExerciseItemOption> itemOptionLst,
         Map<String, Object> itemOptionMap) {
      // 上一次练习id
      // 上一次练习id
      String lastExerciseId = "";
      ExerciseItemOption option = null;
      List<ExerciseItemOption> lstOptions = null;
      // 题目选项
      // 题目选项
      for (int i = 0; i < itemOptionLst.size(); i++) {
         option = itemOptionLst.get(i);
         if (i == 0) {// 第一次
         if (i == 0) {// 第一次
            lstOptions = new ArrayList<ExerciseItemOption>();
            lstOptions.add(option);
         } else {// 第二次开始
            if (lastExerciseId.equals(option.getExerciseItemId())) {// 相同
         } else {// 第二次开始
            if (lastExerciseId.equals(option.getExerciseItemId())) {// 相同
               lstOptions.add(option);
            } else {// 不相同
                  // 添加到map
            } else {// 不相同
                  // 添加到map
               itemOptionMap.put(lastExerciseId, lstOptions);
               lstOptions = new ArrayList<ExerciseItemOption>();
@@ -531,40 +531,40 @@
            }
         }
         if (i == itemOptionLst.size() - 1) {// 最后一次
         if (i == itemOptionLst.size() - 1) {// 最后一次
            itemOptionMap.put(option.getExerciseItemId(), lstOptions);
         }
         // 上一次练习id
         // 上一次练习id
         lastExerciseId = option.getExerciseItemId();
      }
   }
   /**
    * 重新组装题目选项统计ExerciseOptionStatistics —— 成绩统计
    * 重新组装题目选项统计ExerciseOptionStatistics —— 成绩统计
    * 
    * @param lstAllOptions
    * @return
    */
   public static void packageExerciseOptionStatis(List<ExerciseOptionStatistics> claOptionStatisLst,
         Map<String, Object> optionStatisMap) {
      // 上一次练习id
      // 上一次练习id
      String lastExerciseId = "";
      ExerciseOptionStatistics optionSta = null;
      List<ExerciseOptionStatistics> lstOptionStas = null;
      // 题目选项
      // 题目选项
      for (int i = 0; i < claOptionStatisLst.size(); i++) {
         optionSta = claOptionStatisLst.get(i);
         if (i == 0) {// 第一次
         if (i == 0) {// 第一次
            lstOptionStas = new ArrayList<ExerciseOptionStatistics>();
            lstOptionStas.add(optionSta);
         } else {// 第二次开始
            if (lastExerciseId.equals(optionSta.getExerciseItemId())) {// 相同
         } else {// 第二次开始
            if (lastExerciseId.equals(optionSta.getExerciseItemId())) {// 相同
               lstOptionStas.add(optionSta);
            } else {// 不相同
                  // 添加到map
            } else {// 不相同
                  // 添加到map
               optionStatisMap.put(lastExerciseId, lstOptionStas);
               lstOptionStas = new ArrayList<ExerciseOptionStatistics>();
@@ -572,17 +572,17 @@
            }
         }
         if (i == claOptionStatisLst.size() - 1) {// 最后一次
         if (i == claOptionStatisLst.size() - 1) {// 最后一次
            optionStatisMap.put(optionSta.getExerciseItemId(), lstOptionStas);
         }
         // 上一次练习id
         // 上一次练习id
         lastExerciseId = optionSta.getExerciseItemId();
      }
   }
   /**
    * 获取转换结果
    * 获取转换结果
    * 
    * @param count
    * @param allCount
@@ -595,7 +595,7 @@
   }
   /**
    * 获取转换结果
    * 获取转换结果
    * 
    * @param count
    * @param allCount
@@ -608,7 +608,7 @@
   }
   /**
    * 设置新增轨迹信息
    * 设置新增轨迹信息
    * 
    * @param trace
    */
@@ -623,7 +623,7 @@
   }
   /**
    * 设置更新轨迹信息
    * 设置更新轨迹信息
    * 
    * @param trace
    */
@@ -636,7 +636,7 @@
   }
   /**
    * 转换为BigDecimal
    * 转换为BigDecimal
    * 
    * @param str1
    * @param str2