Override public List getQuestionsByBankIdInteger bankId String username 协同过滤 获取历史考试中错题 User user = userServicegetUserByUsernameusername; QueryWrapperExamRecord wrapper = new QueryWrapper;
// 获取用户做过的题目
List
// 根据用户做过的题目,查询其他用户做过的题目
List<Integer> similarUserIds = collaborativeFilteringService.getSimilarUserIds(user.getId());
List<Integer> similarUserQuestionIds = new ArrayList<>();
for (Integer similarUserId : similarUserIds) {
List<Exam> similarUserExams = examMapper.selectList(new QueryWrapper<Exam>().eq("user_id", similarUserId));
for (Exam exam : similarUserExams) {
String questionIds = exam.getQuestionIds();
if (!StringUtils.isEmpty(questionIds)) {
String[] split = questionIds.split(",");
for (String s : split) {
Integer questionId = Integer.valueOf(s);
if (!userQuestionIds.contains(questionId) && !similarUserQuestionIds.contains(questionId)) {
similarUserQuestionIds.add(questionId);
}
}
}
}
}
// 根据其他用户做过的题目,查询题库中的题目
List<Question> similarQuestions = null;
if (CollectionUtils.isEmpty(similarUserQuestionIds)) {
similarQuestions = questionMapper.selectList(
new QueryWrapper<Question>().like("qu_bank_name",
bank.getBankName()).in("qu_type", 1, 2, 3));
} else {
similarQuestions = questionMapper.selectList(
new QueryWrapper<Question>().like("qu_bank_name",
bank.getBankName()).in("qu_type", 1, 2, 3)
.in("id", similarUserQuestionIds));
}
// 合并两部分题目
List<Question> result = new ArrayList<>();
result.addAll(questions);
result.addAll(similarQuestions);
return result;
原文地址: http://www.cveoy.top/t/topic/eAaQ 著作权归作者所有。请勿转载和采集!