| | |
| | | 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; |
| | |
| | | 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 AiMemberAnswer getById(String id) { |
| | | return this.getById(id); |
| | | } |
| | | public FebsResponse startAnswer(ApiMemberAnswerDto dto) { |
| | | String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); |
| | | |
| | | @Override |
| | | public List<AiMemberAnswer> getByMemberId(String memberId) { |
| | | LambdaQueryWrapper<AiMemberAnswer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(AiMemberAnswer::getMemberId, memberId); |
| | | queryWrapper.orderByDesc(AiMemberAnswer::getCreatedTime); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | public List<AiMemberAnswer> getByProductId(String productId) { |
| | | LambdaQueryWrapper<AiMemberAnswer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(AiMemberAnswer::getProductId, productId); |
| | | queryWrapper.orderByDesc(AiMemberAnswer::getCreatedTime); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | public List<AiMemberAnswer> getByCompanyId(String companyId) { |
| | | LambdaQueryWrapper<AiMemberAnswer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(AiMemberAnswer::getCompanyId, companyId); |
| | | queryWrapper.orderByDesc(AiMemberAnswer::getCreatedTime); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | public List<AiMemberAnswer> getByState(Integer state) { |
| | | LambdaQueryWrapper<AiMemberAnswer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(AiMemberAnswer::getState, state); |
| | | queryWrapper.orderByDesc(AiMemberAnswer::getCreatedTime); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | public List<AiMemberAnswer> getByMemberIdAndState(String memberId, Integer state) { |
| | | LambdaQueryWrapper<AiMemberAnswer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(AiMemberAnswer::getMemberId, memberId); |
| | | queryWrapper.eq(AiMemberAnswer::getState, state); |
| | | queryWrapper.orderByDesc(AiMemberAnswer::getCreatedTime); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | public List<AiMemberAnswer> getByCompanyIdAndMemberId(String companyId, String memberId) { |
| | | LambdaQueryWrapper<AiMemberAnswer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(AiMemberAnswer::getCompanyId, companyId); |
| | | queryWrapper.eq(AiMemberAnswer::getMemberId, memberId); |
| | | queryWrapper.orderByDesc(AiMemberAnswer::getCreatedTime); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | public List<AiMemberAnswer> getByScoreRange(Integer minScore, Integer maxScore) { |
| | | LambdaQueryWrapper<AiMemberAnswer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.ge(AiMemberAnswer::getScore, minScore); |
| | | queryWrapper.le(AiMemberAnswer::getScore, maxScore); |
| | | queryWrapper.orderByDesc(AiMemberAnswer::getCreatedTime); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean saveAnswer(AiMemberAnswer aiMemberAnswer) { |
| | | try { |
| | | return this.save(aiMemberAnswer); |
| | | } catch (Exception e) { |
| | | log.error("保存答题记录失败: ", e); |
| | | return false; |
| | | String productId = dto.getId(); |
| | | AiProduct aiProduct = aiProductService.getById(productId); |
| | | if(ObjectUtil.isNull(aiProduct)){ |
| | | throw new RuntimeException("产品不存在"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean saveBatchAnswers(List<AiMemberAnswer> answers) { |
| | | try { |
| | | return this.saveBatch(answers); |
| | | } catch (Exception e) { |
| | | log.error("批量保存答题记录失败: ", e); |
| | | return false; |
| | | //验证产品分类下是否有题目 |
| | | 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); |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean updateAnswer(AiMemberAnswer aiMemberAnswer) { |
| | | try { |
| | | return this.updateById(aiMemberAnswer); |
| | | } catch (Exception e) { |
| | | log.error("更新答题记录失败: ", e); |
| | | return false; |
| | | } |
| | | } |
| | | // apiMemberAnswerVo.setTitle(); |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean deleteById(String id) { |
| | | try { |
| | | return this.removeById(id); |
| | | } catch (Exception e) { |
| | | log.error("删除答题记录失败: ", e); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean deleteByMemberId(String memberId) { |
| | | try { |
| | | LambdaQueryWrapper<AiMemberAnswer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(AiMemberAnswer::getMemberId, memberId); |
| | | return this.remove(queryWrapper); |
| | | } catch (Exception e) { |
| | | log.error("根据用户ID删除答题记录失败: ", e); |
| | | return false; |
| | | } |
| | | return new FebsResponse().success().data(apiMemberAnswerVo); |
| | | } |
| | | } |