package com.qxueyou.scc.exercise.util; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.qxueyou.scc.base.model.ITrace; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.base.util.CommonUtils; import com.qxueyou.scc.exercise.model.ExerciseItem; import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU; import com.qxueyou.scc.exercise.model.ExerciseItemOption; import com.qxueyou.scc.exercise.model.ExerciseItemScore; import com.qxueyou.scc.exercise.model.ExerciseObjectImg; import com.qxueyou.scc.exercise.model.ExerciseOptionStatistics; import com.qxueyou.scc.school.model.SchEvaluate; /** * Á·Ï°¹¤¾ßÀà * * @author zhiyong * */ public class ExerciseUtils { /** * ÖØÐÂ×é×°Á·Ï°item * * @param lstItems * @return */ public static void packageExerciseItem(List lstItems, List lstUserAnswer, List lstOptionImgs) { for (ExerciseItem objExerciseItem : lstItems) { // Ñ¡Ïî List options = objExerciseItem.getOptions(); // Ñ¡Ïî·ÖÊý List 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; } } } } /** * ΪѡÏî×é×°·ÖÊýºÍͼƬ * * @return */ private static List packOption(List options, List scores, List lstOptionImgs) { if (options == null || options.isEmpty()) { return options; } if (scores == null || scores.isEmpty()) { return options; } for (ExerciseItemOption objExerciseItemOption : options) { for (ExerciseItemScore objExerciseItemScore : scores) { if (objExerciseItemScore.getAttribute1().equals(objExerciseItemOption.getOptionId())) { objExerciseItemOption.setScore((int) (Double.parseDouble(objExerciseItemScore.getScore()))); break; } } // ͼƬ if (lstOptionImgs == null || lstOptionImgs.isEmpty()) { continue; } for (ExerciseObjectImg objExerciseObjectImg : lstOptionImgs) { if (objExerciseObjectImg.getExerciseObjectId().equals(objExerciseItemOption.getOptionId())) { List lstImgs = new ArrayList<>(); lstImgs.add(objExerciseObjectImg); objExerciseItemOption.setImgPath(objExerciseObjectImg.getImgPath()); objExerciseItemOption.setImgs(lstImgs); break; } } } return options; } /** * ×é×°ÎʾíÏêϸͳ¼ÆÇé¿ö * * @param lstItems * @param objSchEvaluate * @return */ public static Map packageExerciseDetail(List lstItems, SchEvaluate objSchEvaluate) { Map mResult = new HashMap(); double iTotalAverageScore = 0; double iTotalScore = 0; for (ExerciseItem objExerciseItem : lstItems) { // Ñ¡Ïî List options = objExerciseItem.getOptions(); // Ñ¡Ïî·ÖÊý List scores = objExerciseItem.getScores(); ExerciseUtils.packOption(options, scores, null); List exerciseItemAnswerU = objExerciseItem.getExerciseItemAnswerU(); // ƽ¾ù·ÖÊý double dAverageScore = 0; double dUserScore = 0; // ÊÇ·ñ´æÔÚ´ðÌâѧԱ boolean hasAnswerU = exerciseItemAnswerU != null && !exerciseItemAnswerU.isEmpty(); if (options == null || options.isEmpty()) { continue; } // ͳ¼ÆÃ¿¸öÑ¡ÏîµÄÇé¿ö LinkedHashMap mOptionsDetail = new LinkedHashMap(); LinkedHashMap mOptionOrderDetail = new LinkedHashMap(); if (!hasAnswerU) { continue; } for (ExerciseItemAnswerU objExerciseItemAnswerU : exerciseItemAnswerU) { String strAnswer = objExerciseItemAnswerU.getAnswer(); if (StringUtils.isEmpty(strAnswer)) {// Ϊ¿Õ×Ô¶¯Ìø³öÑ­»· break; } Map mResult2 = packageItemOption(objExerciseItem, strAnswer, mOptionsDetail, mOptionOrderDetail); objExerciseItemAnswerU.setAnswerValue((String) mResult2.get("userAnswerContent")); 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()) { List> optionsOrderDetail = new ArrayList<>(); for (String key : mOptionOrderDetail.keySet()) { optionsOrderDetail.add(CollectionUtils.newObjectMap("optionsOrder", key, "count", mOptionOrderDetail.get(key))); } objExerciseItem.setOptionsOrderDetail(optionsOrderDetail); } objExerciseItem.setAverageScore(dAverageScore); iTotalAverageScore += dAverageScore; objExerciseItem.setScores(null); } mResult.put("iTotalAverageScore", iTotalAverageScore); mResult.put("iTotalScore", iTotalScore); mResult.put("lstExerciseItem", lstItems); mResult.put("objSchEvaluate", objSchEvaluate); return mResult; } /** * ×é×°ÎʾíÏêϸͳ¼ÆÇé¿ö * * @param lstItems * @param objSchEvaluate * @return */ public static Map packageUserExerciseDetail(List result, SchEvaluate objSchEvaluate, List lstExerciseObjectImg) { Map mResult = new HashMap(); double iTotalScore = 0; List lstItems = new ArrayList<>(); double dTotalScoreU = 0; String strCreator = ""; for (ExerciseItem objExerciseItem : result) { lstItems.add(objExerciseItem); List lstExerciseItemAnswerU = objExerciseItem.getExerciseItemAnswerU(); // Ñ¡Ïî List options = objExerciseItem.getOptions(); // Ñ¡Ïî·ÖÊý List scores = objExerciseItem.getScores(); // ×é×°Ñ¡ÏîºÍ·ÖÊý ExerciseUtils.packOption(options, scores, lstExerciseObjectImg); if (lstExerciseItemAnswerU == null || lstExerciseItemAnswerU.isEmpty()) { continue; } // Óû§´ð°¸ String strAnswer = lstExerciseItemAnswerU.get(0).getAnswer(); if (StringUtils.isEmpty(strAnswer)) {// Ϊ¿Õ×Ô¶¯Ìø³öÑ­»· break; } strCreator = lstExerciseItemAnswerU.get(0).getCreator(); if (objExerciseItem.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {// ÎÊ´ðÌâ objExerciseItem.setAnswer(strAnswer); } else { if (options == null || options.isEmpty()) { continue; } Map mResult2 = packageItemOption(objExerciseItem, strAnswer, new LinkedHashMap(), new LinkedHashMap()); objExerciseItem.setMaxScore((Double) mResult2.get("dUserScore")); iTotalScore += (Double) mResult2.get("dMaxScore"); dTotalScoreU += (Double) mResult2.get("dUserScore"); objExerciseItem.setScores(null); objExerciseItem.setAnswer((String) mResult2.get("userAnswerContent")); } } mResult.put("iTotalScore", iTotalScore); mResult.put("dTotalScoreU", dTotalScoreU); mResult.put("lstExerciseItem", lstItems); mResult.put("objSchEvaluate", objSchEvaluate); mResult.put("strUserName", strCreator); return mResult; } /** * ÅжÏÌâÄ¿ÀàÐÍ * * @param objExerciseItem * ÌâÄ¿ * @param strAnswer * Óû§Ñ¡Ôñ´ð°¸ * @param mOptionsDetail * ͳ¼ÆÖµ * @return */ public static Map packageItemOption(ExerciseItem objExerciseItem, String strAnswer, LinkedHashMap mOptionsDetail, LinkedHashMap mOptionOrderDetail) { Map mResult = new HashMap(); // Ñ¡Ïî List 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 dUserScore += dScore; userAnswerContent.append(strAnswer.length() > 2 ? 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 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 ? "_" + strAnswer.substring(arrAnswer[0].length() + 1, strAnswer.length()) : ""); } else { userAnswerContent.append(objExerciseItemOption.getContent()).append(';'); } 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_SCORE && c[Integer.valueOf(strAnswer) - 1].equals(objExerciseItemOption.getOptionOrder())) {// ·ÖÖµ£¬1£¬2£¬3£¬4£¬5¿ÅÐÇ dUserScore += dScore; 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) {// Á¿Öµ£¬Ö±½Ó´æ·ÖÊý 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 + "·Ö")); } index++; } mResult.put("dMaxScore", dMaxScore); mResult.put("userAnswerContent", userAnswerContent.toString()); mResult.put("dUserScore", dUserScore); return mResult; } /** * »ñȡֵ * * @param content * @param mOptionsDetail * @param Content * @return */ public static Integer getValue(String content, Map mOptionsDetail) { return mOptionsDetail.get(content) == null ? 1 : mOptionsDetail.get(content) + 1; } /** * »ñȡѡÏîµÄÖµºÍ·ÖÊý * * @param objExerciseItemOption * @return */ public static String getOptionsContent(ExerciseItemOption objExerciseItemOption) { return objExerciseItemOption.getContent().concat("(").concat(String.valueOf(objExerciseItemOption.getScore())) .concat("·Ö)"); } /** * ÖØÐÂ×é×°Á·Ï°item * * @param lstAllOptions * @return */ public static void packageExerciseItem(Map> optionsMap, Map answerMap, List lstAllOptions, Map> imgOptionMap) { // ÉÏÒ»´ÎÁ·Ï°id String lastExerciseId = ""; ExerciseItemOption option = null; List lstOptions = null; StringBuffer correctAnswers = new StringBuffer(128); // ÕýÈ·´ð°¸ // 4.3 ÌâĿѡÏî for (int i = 0; i < lstAllOptions.size(); i++) { option = lstAllOptions.get(i); if (imgOptionMap != null && imgOptionMap.get(option.getOptionId()) != null) { option.setImgs(imgOptionMap.get(option.getOptionId())); } if (i == 0) {// µÚÒ»´Î lstOptions = new ArrayList(); lstOptions.add(option); if (option.getChecked()) {// ÕýÈ·´ð°¸ correctAnswers.append(option.getOptionOrder()).append(','); } } else {// µÚ¶þ´Î¿ªÊ¼ if (lastExerciseId.equals(option.getExerciseItemId())) {// Ïàͬ lstOptions.add(option); if (option.getChecked()) {// ÕýÈ·´ð°¸ correctAnswers.append(option.getOptionOrder()).append(','); } } else {// ²»Ïàͬ // Ìí¼Óµ½map optionsMap.put(lastExerciseId, lstOptions); answerMap.put(lastExerciseId, correctAnswers.toString()); correctAnswers = new StringBuffer(128); if (option.getChecked()) {// ÕýÈ·´ð°¸ correctAnswers.append(option.getOptionOrder()).append(','); } lstOptions = new ArrayList(); lstOptions.add(option); } } if (i == lstAllOptions.size() - 1) {// ×îºóÒ»´Î answerMap.put(option.getExerciseItemId(), correctAnswers.toString()); optionsMap.put(option.getExerciseItemId(), lstOptions); } // ÉÏÒ»´ÎÁ·Ï°id lastExerciseId = option.getExerciseItemId(); } } /** * ÖØÐÂ×é×°Á·Ï°item ÌâĿͼƬ * * @param lstAllOptions * @return */ public static Map> packageExerciseItemImg(List lstImgs) { Map> imgMap = new HashMap>(); // ÉÏÒ»´ÎÁ·Ï°id String lastExerciseId = ""; ExerciseObjectImg objImg = null; List lstImg = null; // 4.3 ÌâĿѡÏî for (int i = 0; i < lstImgs.size(); i++) { objImg = lstImgs.get(i); if (i == 0) {// µÚÒ»´Î lstImg = new ArrayList(); lstImg.add(objImg); } else {// µÚ¶þ´Î¿ªÊ¼ if (lastExerciseId.equals(objImg.getExerciseObjectId())) {// Ïàͬ lstImg.add(objImg); } else {// ²»Ïàͬ // Ìí¼Óµ½map imgMap.put(lastExerciseId, lstImg); lstImg = new ArrayList(); lstImg.add(objImg); } } if (i == lstImgs.size() - 1) {// ×îºóÒ»´Î imgMap.put(objImg.getExerciseObjectId(), lstImg); } // ÉÏÒ»´ÎÁ·Ï°id lastExerciseId = objImg.getExerciseObjectId(); } return imgMap; } /** * ÖØÐÂ×é×°Á·Ï°item * * @param lstAllOptions * @return */ public static void packageExerciseItemScore(Map> scoreMap, List lstAllscores) { // ÉÏÒ»´ÎÁ·Ï°id String lastExerciseId = ""; ExerciseItemScore score = null; List lstscore = null; // 4.3 ÌâĿѡÏî for (int i = 0; i < lstAllscores.size(); i++) { score = lstAllscores.get(i); if (i == 0) {// µÚÒ»´Î lstscore = new ArrayList(); lstscore.add(score); } else {// µÚ¶þ´Î¿ªÊ¼ if (lastExerciseId.equals(score.getExerciseItemId())) {// Ïàͬ lstscore.add(score); } else {// ²»Ïàͬ // Ìí¼Óµ½map scoreMap.put(lastExerciseId, lstscore); lstscore = new ArrayList(); lstscore.add(score); } } if (i == lstAllscores.size() - 1) {// ×îºóÒ»´Î scoreMap.put(score.getExerciseItemId(), lstscore); } // ÉÏÒ»´ÎÁ·Ï°id lastExerciseId = score.getExerciseItemId(); } } /** * ÖØÐÂ×é×°×öÌâ¼Ç¼ ExerciseItemAnswer ¡ª¡ª ³É¼¨Í³¼Æ * * @param lstAllOptions * @return */ public static void packageExerciseItemAnswerStatis(List answers, Map answerUMap) { // ÉÏÒ»´ÎÁ·Ï°id String lastExerciseId = ""; ExerciseItemAnswerU answer = null; List lstAnswers = null; // ×öÌâ¼Ç¼ for (int i = 0; i < answers.size(); i++) { answer = answers.get(i); if (i == 0) {// µÚÒ»´Î lstAnswers = new ArrayList(); lstAnswers.add(answer); } else {// µÚ¶þ´Î¿ªÊ¼ if (lastExerciseId.equals(answer.getExerciseItemId())) {// Ïàͬ lstAnswers.add(answer); } else {// ²»Ïàͬ // Ìí¼Óµ½map answerUMap.put(lastExerciseId, lstAnswers); lstAnswers = new ArrayList(); lstAnswers.add(answer); } } if (i == answers.size() - 1) {// ×îºóÒ»´Î answerUMap.put(answer.getExerciseItemId(), lstAnswers); } // ÉÏÒ»´ÎÁ·Ï°id lastExerciseId = answer.getExerciseItemId(); } } /** * ÖØÐÂ×é×°ÌâĿѡÏîExerciseItemOption ¡ª¡ª ³É¼¨Í³¼Æ * * @param lstAllOptions * @return */ public static void packageExerciseItemOption(List itemOptionLst, Map itemOptionMap) { // ÉÏÒ»´ÎÁ·Ï°id String lastExerciseId = ""; ExerciseItemOption option = null; List lstOptions = null; // ÌâĿѡÏî for (int i = 0; i < itemOptionLst.size(); i++) { option = itemOptionLst.get(i); if (i == 0) {// µÚÒ»´Î lstOptions = new ArrayList(); lstOptions.add(option); } else {// µÚ¶þ´Î¿ªÊ¼ if (lastExerciseId.equals(option.getExerciseItemId())) {// Ïàͬ lstOptions.add(option); } else {// ²»Ïàͬ // Ìí¼Óµ½map itemOptionMap.put(lastExerciseId, lstOptions); lstOptions = new ArrayList(); lstOptions.add(option); } } if (i == itemOptionLst.size() - 1) {// ×îºóÒ»´Î itemOptionMap.put(option.getExerciseItemId(), lstOptions); } // ÉÏÒ»´ÎÁ·Ï°id lastExerciseId = option.getExerciseItemId(); } } /** * ÖØÐÂ×é×°ÌâĿѡÏîͳ¼ÆExerciseOptionStatistics ¡ª¡ª ³É¼¨Í³¼Æ * * @param lstAllOptions * @return */ public static void packageExerciseOptionStatis(List claOptionStatisLst, Map optionStatisMap) { // ÉÏÒ»´ÎÁ·Ï°id String lastExerciseId = ""; ExerciseOptionStatistics optionSta = null; List lstOptionStas = null; // ÌâĿѡÏî for (int i = 0; i < claOptionStatisLst.size(); i++) { optionSta = claOptionStatisLst.get(i); if (i == 0) {// µÚÒ»´Î lstOptionStas = new ArrayList(); lstOptionStas.add(optionSta); } else {// µÚ¶þ´Î¿ªÊ¼ if (lastExerciseId.equals(optionSta.getExerciseItemId())) {// Ïàͬ lstOptionStas.add(optionSta); } else {// ²»Ïàͬ // Ìí¼Óµ½map optionStatisMap.put(lastExerciseId, lstOptionStas); lstOptionStas = new ArrayList(); lstOptionStas.add(optionSta); } } if (i == claOptionStatisLst.size() - 1) {// ×îºóÒ»´Î optionStatisMap.put(optionSta.getExerciseItemId(), lstOptionStas); } // ÉÏÒ»´ÎÁ·Ï°id lastExerciseId = optionSta.getExerciseItemId(); } } /** * »ñȡת»»½á¹û * * @param count * @param allCount * @return */ public static String getFormatValue(long count, long allCount) { double value = Double.valueOf(count) / Double.valueOf(allCount) * 100; return CommonUtils.formatDecimalFormat(value, CommonUtils.PARTEN_ONE); } /** * »ñȡת»»½á¹û * * @param count * @param allCount * @return */ public static String getFormatValue(int count, int allCount) { double value = Double.valueOf(count) / Double.valueOf(allCount) * 100; return CommonUtils.formatDecimalFormat(value, CommonUtils.PARTEN_ONE); } /** * ÉèÖÃÐÂÔö¹ì¼£ÐÅÏ¢ * * @param trace */ public static void setCreateTrace(ITrace trace, Map userMap) { trace.setCreateId(userMap.get("userId")); trace.setCreateTime(new Date(System.currentTimeMillis())); trace.setCreator(userMap.get("userName")); trace.setUpdateId(userMap.get("userId")); trace.setUpdateTime(new Date(System.currentTimeMillis())); trace.setUpdator(userMap.get("userName")); } /** * ÉèÖøüй켣ÐÅÏ¢ * * @param trace */ public static void setUpdateTrace(ITrace trace, Map userMap) { trace.setUpdateId(userMap.get("userId")); trace.setUpdateTime(new Date(System.currentTimeMillis())); trace.setUpdator(userMap.get("userName")); } /** * ת»»ÎªBigDecimal * * @param str1 * @param str2 * @return */ public static BigDecimal parseStrToBigDecimal(String str1, String str2) { return new BigDecimal( CommonUtils.formatDecimalFormat(Double.parseDouble(str1) / Double.parseDouble(str2) * 100, "#.##")); } }