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 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 questionLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestion.class); questionLambdaQueryWrapper.eq(AiProductQuestion::getProductCategoryId,productCategoryId); questionLambdaQueryWrapper.eq(AiProductQuestion::getState,1); questionLambdaQueryWrapper.last("limit 1"); List 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); } }