// 计算分数
@ResponseBody
@RequestMapping(value = "/addPrice", method = RequestMethod.POST)
public String addPrice(TestQuestion ques, HttpServletRequest request) {
// 获取前台传 的 与value 值
String[] optionType = request.getParameterValues("optionId");
// 获取前台获取的 id
String[] testId = request.getParameterValues("testId");
for (String arr : testId) {
System.err.println("test——id" + arr);
}
for (String optionTypes : optionType) {
System.err.println("optionId" + optionTypes);
}
int sum = 0;
// 用 页面的题目id 找出正确答案 与 option表中的内容,查看是否是一致的
for (int i = 0; i < testId.length; i++) {
// 获取 question 表中的内容
TestQuestion question = disposeService.getqustion(testId[i]);
// 通过题目id来获取option表的内容。
List<Map<String, Object>> optionList = disposeService.queryOptions(testId[i]);
// 定义空集合,来存储option表的id;
List<String> list = new ArrayList<String>();
// 定义空集合,来存储页面输入的答案。做比较
List<String> answerList = new ArrayList<String>();
// 遍历optionList获取所有的 选项,选项id
for (Map<String, Object> map : optionList) {
// 将页面题目所对应的选项 存到list集合当中
String answer = map.get("option_id").toString();
// 将 option_id 所对应的选项 存到list集合中去
// String optionTypeXan=
// disposeService.getOptionType(answer).getOptionType();
list.add(answer);
}
// 循环遍历 循环页面选项,判断,选项是否存在于通过id 查找出来的选项中
for (int j = 0; j < optionType.length; j++) {
// 进行比较 如果存在就 存进页面输入的答案的集合
if (!StringUtils.hasText(optionType[j])) {
continue;
}
if (list.contains(optionType[j])) {
answerList.add(optionType[j]);
}
}
// 判断 通过 题目id 获取的optionList里面有木有值,如果有值就判断做了这个题,没有值,就判断没做这个题
if (answerList.size() < 1) {
continue;
}
// 进行 页面选项与正确答案是否是相同的
// 接收正确答案, question 前面定义的option 表中所有的正确答案
String quAnswer = question.getTestRightOptions();
// 1. 单选,2.多选,3.判断
if ("1".equals(question.getTestFlag()) || "3".equals(question.getTestFlag())) {
System.out.println("题目Id:" + question.getTestId());
System.out.println("用户选择Id:" + answerList.get(0));
// 接收 用户输入的选项的id optionId
String optionId = answerList.get(0);
// 通过optionid 获得所有的信息
TestOption option = disposeService.getOption(optionId);
System.out.println(quAnswer + "===" + option.getOptionType());
if (quAnswer.equals(option.getOptionType())) {
System.out.println("对了一个");
sum = sum + 1;
System.out.println("对了一个" + sum);
}
}
// 多选
if ("2".equals(question.getTestFlag())) {
// 对正确答案进行切割
String[] quAnswers = quAnswer.split(",");
// 第一个是用错误来判断,计算分数。
int errorNum = 0;
for (String answer : answerList) {
TestOption option = disposeService.getOption(answer);
if (quAnswer.lastIndexOf(option.getOptionType()) == -1) {
errorNum++;
}
}
System.out.println("错了:" + errorNum + "个");
if (errorNum > 0) {
continue;
} else {
System.err.println("sum====;" + sum);
if (quAnswers.length == answerList.size()) {
System.err.println("sum;" + sum);
sum = sum + 2;
}
}
}
}
System.err.println("得分" + sum);
request.setAttribute("sum", sum);
DecimalFormat df = new DecimalFormat("#.0");
return df.format(sum);
}