1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package cc.mrbird.febs.ai.service.impl;
 
import cc.mrbird.febs.ai.entity.AiMemberAnswer;
import cc.mrbird.febs.ai.entity.AiMemberAnswerItem;
import cc.mrbird.febs.ai.entity.AiProduct;
import cc.mrbird.febs.ai.entity.AiProductQuestion;
import cc.mrbird.febs.ai.mapper.AiMemberAnswerMapper;
import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerDto;
import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerVo;
import cc.mrbird.febs.ai.service.AiMemberAnswerItemService;
import cc.mrbird.febs.ai.service.AiMemberAnswerService;
import cc.mrbird.febs.ai.service.AiProductQuestionService;
import cc.mrbird.febs.ai.service.AiProductService;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.List;
 
/**
 * AI用户答题记录 Service实现类
 *
 * @author yourname
 * @date 2025-07-29
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class AiMemberAnswerServiceImpl extends ServiceImpl<AiMemberAnswerMapper, AiMemberAnswer> implements AiMemberAnswerService {
 
    private final AiMemberAnswerMapper aiMemberAnswerMapper;
    private final AiMemberAnswerItemService aiMemberAnswerItemService;
    private final AiProductService aiProductService;
    private final AiProductQuestionService aiProductQuestionService;
 
 
    @Override
    public FebsResponse startAnswer(ApiMemberAnswerDto dto) {
        String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
 
        String productId = dto.getId();
        AiProduct aiProduct = aiProductService.getById(productId);
        if(ObjectUtil.isNull(aiProduct)){
            throw new RuntimeException("产品不存在");
        }
        //验证产品分类下是否有题目
        String productCategoryId = aiProduct.getProductCategoryId();
        LambdaQueryWrapper<AiProductQuestion> questionLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestion.class);
        questionLambdaQueryWrapper.eq(AiProductQuestion::getProductCategoryId,productCategoryId);
        questionLambdaQueryWrapper.eq(AiProductQuestion::getState,1);
        questionLambdaQueryWrapper.last("limit 1");
        List<AiProductQuestion> aiProductQuestions = aiProductQuestionService.getListByQuery(questionLambdaQueryWrapper);
        if(CollUtil.isEmpty(aiProductQuestions)){
            // todo 没有题目采用AI生成题目
            throw new RuntimeException("产品没有题目");
        }
        ApiMemberAnswerVo apiMemberAnswerVo = new ApiMemberAnswerVo();
        AiMemberAnswer aiMemberAnswer = new AiMemberAnswer();
        aiMemberAnswer.setProductId(aiProduct.getId());
        aiMemberAnswer.setMemberId(memberUuid);
        aiMemberAnswer.setQuestionCnt(aiProduct.getQuestionCount());
        aiMemberAnswer.setScore(0);
        aiMemberAnswer.setCorrectCnt(0);
        aiMemberAnswer.setState(0);
        aiMemberAnswerMapper.insert(aiMemberAnswer);
 
//        apiMemberAnswerVo.setTitle();
 
        return new FebsResponse().success().data(apiMemberAnswerVo);
    }
}