@Override public List getQuestionsByBankId(Integer bankId, String username) { // 协同过滤

// 获取历史考试中错题
User user = userService.getUserByUsername(username);
QueryWrapper<ExamRecord> wrapper = new QueryWrapper<>();
wrapper.eq('user_id', user.getId());
List<ExamRecord> examRecords = examRecordMapper.selectList(wrapper);

// 根据错题记录查询
List<Integer> quesIds = new ArrayList<>();
for (ExamRecord examRecord : examRecords) {
    String errorQuestionIds = examRecord.getErrorQuestionIds();
    if (!StringUtils.isEmpty(errorQuestionIds)) {
        String[] split = errorQuestionIds.split(',');
        for (String s : split) {
            quesIds.add(Integer.valueOf(s));
        }
    }
}

QuestionBank bank = questionBankMapper.selectById(bankId);
// 在题库中的(单选,多选,判断题)题目
List<Question> questions = null;
if (CollectionUtils.isEmpty(quesIds)) {
    questions = questionMapper.selectList(
            new QueryWrapper<Question>().like('qu_bank_name',
                    bank.getBankName()).in('qu_type', 1, 2, 3));
} else {
    questions = questionMapper.selectList(
            new QueryWrapper<Question>().like('qu_bank_name',
                    bank.getBankName()).in('qu_type', 1, 2, 3)
                    .in('id', quesIds));
}
// 获取用户做过的题目
List<Integer> userQuestionIds = new ArrayList<>();
List<Exam> exams = examMapper.selectList(new QueryWrapper<Exam>().eq('user_id', user.getId()));
for (Exam exam : exams) {
    String questionIds = exam.getQuestionIds();
    if (!StringUtils.isEmpty(questionIds)) {
        String[] split = questionIds.split(',');
        for (String s : split) {
            userQuestionIds.add(Integer.valueOf(s));
        }
    }
}

// 根据用户做过的题目,查询其他用户做过的题目
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;

}


原文地址: https://www.cveoy.top/t/topic/nS2Y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录