Administrator
2025-10-30 c7cee264bccb5026fd42a9f0dc83d274aaee40cf
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
@@ -1,8 +1,11 @@
package cc.mrbird.febs.ai.service.impl;
import cc.mrbird.febs.ai.entity.*;
import cc.mrbird.febs.ai.enumerates.AiTypeEnum;
import cc.mrbird.febs.ai.mapper.AiMemberAnswerMapper;
import cc.mrbird.febs.ai.req.member.ApiMemberAnswerPageDto;
import cc.mrbird.febs.ai.req.memberAnswer.*;
import cc.mrbird.febs.ai.res.member.ApiMemberAnswerPageVo;
import cc.mrbird.febs.ai.res.memberAnswer.*;
import cc.mrbird.febs.ai.res.product.ApiProductVo;
import cc.mrbird.febs.ai.res.productQuestionItem.ApiMemberAnswerItemVo;
@@ -29,6 +32,8 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * AI用户答题记录 Service实现类
@@ -46,6 +51,8 @@
    private final AiProductService aiProductService;
    private final AiProductQuestionService aiProductQuestionService;
    private final AiProductQuestionItemService aiProductQuestionItemService;
    private final AiProductDependencyService aiProductDependencyService;
    private final AiMemberProductUnlockService aiMemberProductUnlockService;
    @Override
@@ -64,6 +71,7 @@
        if(ObjectUtil.isNull(aiProduct)){
            throw new FebsException("产品不存在");
        }
        String companyId = aiProduct.getCompanyId();
        //验证产品分类下是否有题目
        String productCategoryId = aiProduct.getProductCategoryId();
        LambdaQueryWrapper<AiProductQuestion> questionLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestion.class);
@@ -86,6 +94,7 @@
            Integer questionCount = aiProduct.getQuestionCount();
            aiMemberAnswer = new AiMemberAnswer();
            aiMemberAnswer.setId(UUID.getSimpleUUIDString());
            aiMemberAnswer.setCompanyId(companyId);
            aiMemberAnswer.setCreatedTime(createdTime);
            aiMemberAnswer.setUpdatedTime(createdTime);
            aiMemberAnswer.setProductId(aiProduct.getId());
@@ -102,6 +111,7 @@
                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());
@@ -250,9 +260,11 @@
            throw new FebsException("答题记录不存在");
        }
        Date createdTime = new Date();
        Date nowTime = new Date();
        String companyId = aiMemberAnswer.getCompanyId();
        AiMemberAnswerItem aiMemberAnswerItem = aiMemberAnswerItemService.getById(memberAnswerItemId);
        aiMemberAnswerItem.setUpdatedTime(createdTime);
        aiMemberAnswerItem.setUpdatedTime(nowTime);
        AiProductQuestion aiProductQuestion = aiProductQuestionService.getById(productQuestionId);
        LambdaQueryWrapper<AiProductQuestionItem> productQuestionItemLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestionItem.class);
@@ -277,13 +289,14 @@
        }else{
            aiMemberAnswerItem.setIsCollected(0);
        }
        aiMemberAnswerItem.setCompanyId(companyId);
        aiMemberAnswerItemService.updateById(aiMemberAnswerItem);
        aiMemberAnswer.setDoneCnt(aiMemberAnswer.getDoneCnt() + 1);
        if (aiMemberAnswerItem.getMemberAnswerState() == 1){
            aiMemberAnswer.setCorrectCnt(aiMemberAnswer.getCorrectCnt() + 1);
        }
        aiMemberAnswer.setUpdatedTime(createdTime);
        aiMemberAnswer.setUpdatedTime(nowTime);
        aiMemberAnswerMapper.updateById(aiMemberAnswer);
        apiQuestionItemInfoVo.setAnswerAnalysis(aiMemberAnswerItem.getAnswerAnalysis());
@@ -296,6 +309,7 @@
    @Override
    public FebsResponse insure(ApiMemberAnswerInsureDto dto) {
        String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
        String companyId = LoginUserUtil.getLoginUser().getCompanyId();
        ApiMemberAnswerInsureVo apiMemberAnswerInsureVo = new ApiMemberAnswerInsureVo();
        String memberAnswerId = dto.getMemberAnswerId();
@@ -323,6 +337,22 @@
                .set(AiMemberAnswer::getScore, percentage.intValue())
                .eq(AiMemberAnswer::getId, memberAnswerId)
                );
        //如果有升级规则,则解锁
        List<AiProductDependency> aiProductDependencies = aiProductDependencyService.selectListByProductId(aiMemberAnswer.getProductId(),percentage.intValue());
        if (CollUtil.isNotEmpty(aiProductDependencies)){
            //stream流操作aiProductDependencies,获取全部的targetProductId
            Set<String> targetProductIds = aiProductDependencies.stream().map(AiProductDependency::getTargetProductId).collect(Collectors.toSet());
            List<AiMemberProductUnlock> aiMemberProductUnlocks = aiMemberProductUnlockService.selectListByProductIds(targetProductIds, memberUuid);
            Set<String> doneProductIds = aiMemberProductUnlocks.stream().map(AiMemberProductUnlock::getProductId).collect(Collectors.toSet());
            //获取在targetProductIds集合中,并且不在doneProductIds集合中的productId
            Set<String> unlockProductIds = targetProductIds.stream().filter(productId -> !doneProductIds.contains(productId)).collect(Collectors.toSet());
            if (CollUtil.isNotEmpty(unlockProductIds)){
                aiMemberProductUnlockService.insertList(companyId,unlockProductIds, memberUuid,percentage.intValue());
            }
        }
        return new FebsResponse().success().data(apiMemberAnswerInsureVo);
    }
@@ -390,4 +420,39 @@
        return new FebsResponse().success().data(pageListByQuery);
    }
    @Override
    public void updateMemberAnswerUpdateTime(String memberAnswerId, Date updateTime) {
        aiMemberAnswerMapper.update(
                null,
                Wrappers.lambdaUpdate(AiMemberAnswer.class)
                .set(AiMemberAnswer::getUpdatedTime,updateTime)
                .eq(AiMemberAnswer::getId,memberAnswerId)
        );
    }
    @Override
    public List<AiMemberAnswer> getListByCompanyId(String companyId) {
        return aiMemberAnswerMapper.selectList(
                Wrappers.lambdaQuery(AiMemberAnswer.class)
                .eq(AiMemberAnswer::getCompanyId, companyId)
                .eq(AiMemberAnswer::getState, AiTypeEnum.AI_MEMBER_ANSWER_STATE_DONE.getCode())
        );
    }
    @Override
    public List<AiMemberAnswer> getListByCompanyIdAndMemberUuid(String companyId, String memberUuid) {
        return aiMemberAnswerMapper.selectList(
                Wrappers.lambdaQuery(AiMemberAnswer.class)
                        .eq(AiMemberAnswer::getCompanyId, companyId)
                        .eq(AiMemberAnswer::getMemberId, memberUuid)
                        .eq(AiMemberAnswer::getState, AiTypeEnum.AI_MEMBER_ANSWER_STATE_DONE.getCode())
        );
    }
    @Override
    public Page<ApiMemberAnswerPageVo> getAnswerPage(Page<ApiMemberAnswerPageVo> page, ApiMemberAnswerPageDto dto) {
        return aiMemberAnswerMapper.getAnswerPage(page,dto);
    }
}