Administrator
2 days ago 2e6aac61fb60722799383112099971f566f0a4fc
feat(ai): 优化AI产品问答功能实现

- 新增createQuestionList方法批量获取产品题目
- 修改答题记录初始化逻辑,使用批量查询替代循环单次查询
- 修复排序索引从0开始的问题,调整为从1开始
- 添加空题目列表异常处理机制
- 优化数据库操作,提升批量插入性能
3 files modified
50 ■■■■■ changed files
src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java 29 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java
@@ -23,4 +23,5 @@
     * @return
     */
    AiProductQuestion createQuestion(String productId);
    List<AiProductQuestion> createQuestionList(String productId, int questionCount);
}
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
@@ -112,9 +112,30 @@
            aiMemberAnswer.setCorrectCnt(0);
            aiMemberAnswerMapper.insert(aiMemberAnswer);
            List<AiMemberAnswerItem> aiMemberAnswerItems = new ArrayList<>();
            for (int i = 1; i <= questionCount; i++){
                //初始化答题记录
                AiProductQuestion aiProductQuestion = aiProductQuestionService.createQuestion(aiProduct.getId());
//            for (int i = 1; i <= questionCount; i++){
//                //初始化答题记录
//                AiProductQuestion aiProductQuestion = aiProductQuestionService.createQuestion(aiProduct.getId());
//                AiMemberAnswerItem aiMemberAnswerItem = new AiMemberAnswerItem();
//                aiMemberAnswerItem.setId(UUID.getSimpleUUIDString());
//                aiMemberAnswerItem.setCompanyId(companyId);
//                aiMemberAnswerItem.setCreatedTime(createdTime);
//                aiMemberAnswerItem.setAnswerId(aiMemberAnswer.getId());
//                aiMemberAnswerItem.setProductId(aiMemberAnswer.getProductId());
//                aiMemberAnswerItem.setMemberId(memberUuid);
//                aiMemberAnswerItem.setProductQuestionId(aiProductQuestion.getId());
//                aiMemberAnswerItem.setTitle(aiProductQuestion.getTitle());
//                aiMemberAnswerItem.setDifficulty(aiProductQuestion.getDifficulty());
//                aiMemberAnswerItem.setMemberAnswerState(0);
//                aiMemberAnswerItem.setSort( i );
//                aiMemberAnswerItems.add(aiMemberAnswerItem);
//            }
            List<AiProductQuestion> questionList = aiProductQuestionService.createQuestionList(aiProduct.getId(), questionCount);
            if (CollUtil.isEmpty(questionList)){
                throw new FebsException("产品没有题目");
            }
            for (int i = 0; i <= questionList.size(); i++){
                AiProductQuestion aiProductQuestion = questionList.get(i);
                AiMemberAnswerItem aiMemberAnswerItem = new AiMemberAnswerItem();
                aiMemberAnswerItem.setId(UUID.getSimpleUUIDString());
                aiMemberAnswerItem.setCompanyId(companyId);
@@ -126,7 +147,7 @@
                aiMemberAnswerItem.setTitle(aiProductQuestion.getTitle());
                aiMemberAnswerItem.setDifficulty(aiProductQuestion.getDifficulty());
                aiMemberAnswerItem.setMemberAnswerState(0);
                aiMemberAnswerItem.setSort( i );
                aiMemberAnswerItem.setSort( i +1);
                aiMemberAnswerItems.add(aiMemberAnswerItem);
            }
            aiMemberAnswerItemService.saveBatch(aiMemberAnswerItems);
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java
@@ -15,6 +15,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -60,4 +61,23 @@
        }
        return aiProductQuestion;
    }
    @Override
    public List<AiProductQuestion> createQuestionList(String productId, int questionCount) {
        List<AiProductQuestion> list = new ArrayList<>();
        LambdaQueryWrapper<AiProductQuestionLink> aiProductQuestionLinkLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestionLink.class);
        aiProductQuestionLinkLambdaQueryWrapper.eq(AiProductQuestionLink::getProductId, productId);
        List<AiProductQuestionLink> linkList = aiProductQuestionLinkService.getListByQuery(aiProductQuestionLinkLambdaQueryWrapper);
        if(CollUtil.isNotEmpty(linkList)){
            List<String> collect = linkList.stream().map(AiProductQuestionLink::getProductQuestionId).collect(Collectors.toList());
            if(CollUtil.isNotEmpty( collect)){
                Set<String> randomEleSet = RandomUtil.randomEleSet(collect, questionCount);
                LambdaQueryWrapper<AiProductQuestion> questionLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestion.class);
                questionLambdaQueryWrapper.in(AiProductQuestion::getId,randomEleSet);
                list = this.getListByQuery(questionLambdaQueryWrapper);
            }
        }
        return list;
    }
}