Administrator
yesterday 8130bed63a505cf718481c0d95d3fcf7b037db96
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
@@ -9,6 +9,7 @@
import cc.mrbird.febs.ai.service.*;
import cc.mrbird.febs.ai.utils.UUID;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
@@ -53,6 +54,82 @@
        return aiMemberAnswerMapper.selectOne(aiMemberAnswerLambdaQueryWrapper);
    }
    @Override
    public FebsResponse startAnswerV2(ApiMemberAnswerDto dto) {
        String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
        ApiMemberAnswerVoV2 apiMemberAnswerVoV2 = new ApiMemberAnswerVoV2();
        String productId = dto.getId();
        AiProduct aiProduct = aiProductService.getById(productId);
        if(ObjectUtil.isNull(aiProduct)){
            throw new FebsException("产品不存在");
        }
        String companyId = aiProduct.getCompanyId();
        //验证产品分类下是否有题目
        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 FebsException("产品没有题目");
        }
        //判断该产品是否有正在进行的练习
        Date createdTime = new Date();
        LambdaQueryWrapper<AiMemberAnswer> aiMemberAnswerLambdaQueryWrapper = Wrappers.lambdaQuery(AiMemberAnswer.class);
        aiMemberAnswerLambdaQueryWrapper.eq(AiMemberAnswer::getMemberId,memberUuid);
        aiMemberAnswerLambdaQueryWrapper.eq(AiMemberAnswer::getProductId,aiProduct.getId());
        aiMemberAnswerLambdaQueryWrapper.eq(AiMemberAnswer::getState,0);
        AiMemberAnswer aiMemberAnswer = this.getOneByQuery(aiMemberAnswerLambdaQueryWrapper);
        if(ObjectUtil.isNull(aiMemberAnswer)){
            Integer questionCount = aiProduct.getQuestionCount();
            aiMemberAnswer = new AiMemberAnswer();
            aiMemberAnswer.setId(UUID.getSimpleUUIDString());
            aiMemberAnswer.setCompanyId(companyId);
            aiMemberAnswer.setCreatedTime(createdTime);
            aiMemberAnswer.setUpdatedTime(createdTime);
            aiMemberAnswer.setProductId(aiProduct.getId());
            aiMemberAnswer.setMemberId(memberUuid);
            aiMemberAnswer.setState(0);
            aiMemberAnswer.setScore(0);
            aiMemberAnswer.setQuestionCnt(questionCount);
            aiMemberAnswer.setDoneCnt(0);
            aiMemberAnswer.setCorrectCnt(0);
            aiMemberAnswerMapper.insert(aiMemberAnswer);
            List<AiMemberAnswerItem> aiMemberAnswerItems = new ArrayList<>();
            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);
            }
            aiMemberAnswerItemService.saveBatch(aiMemberAnswerItems);
            apiMemberAnswerVoV2.setCurrent(1);
        }else{
            if (aiMemberAnswer.getQuestionCnt() > aiMemberAnswer.getDoneCnt()){
                apiMemberAnswerVoV2.setCurrent(aiMemberAnswer.getDoneCnt() + 1);
            }else{
                apiMemberAnswerVoV2.setCurrent(aiMemberAnswer.getDoneCnt());
            }
        }
        apiMemberAnswerVoV2.setMemberAnswerId(aiMemberAnswer.getId());
        return new FebsResponse().success().data(apiMemberAnswerVoV2);
    }
    @Override
    public FebsResponse startAnswer(ApiMemberAnswerDto dto) {
@@ -61,7 +138,7 @@
        String productId = dto.getId();
        AiProduct aiProduct = aiProductService.getById(productId);
        if(ObjectUtil.isNull(aiProduct)){
            throw new RuntimeException("产品不存在");
            throw new FebsException("产品不存在");
        }
        //验证产品分类下是否有题目
        String productCategoryId = aiProduct.getProductCategoryId();
@@ -72,9 +149,10 @@
        List<AiProductQuestion> aiProductQuestions = aiProductQuestionService.getListByQuery(questionLambdaQueryWrapper);
        if(CollUtil.isEmpty(aiProductQuestions)){
            // todo 没有题目采用AI生成题目
            throw new RuntimeException("产品没有题目");
            throw new FebsException("产品没有题目");
        }
        //判断该产品是否有正在进行的练习
        Date createdTime = new Date();
        LambdaQueryWrapper<AiMemberAnswer> aiMemberAnswerLambdaQueryWrapper = Wrappers.lambdaQuery(AiMemberAnswer.class);
        aiMemberAnswerLambdaQueryWrapper.eq(AiMemberAnswer::getMemberId,memberUuid);
        aiMemberAnswerLambdaQueryWrapper.eq(AiMemberAnswer::getProductId,aiProduct.getId());
@@ -83,7 +161,6 @@
        if(ObjectUtil.isNull(aiMemberAnswer)){
            aiMemberAnswer = new AiMemberAnswer();
            aiMemberAnswer.setId(UUID.getSimpleUUIDString());
            Date createdTime = new Date();
            aiMemberAnswer.setCreatedTime(createdTime);
            aiMemberAnswer.setUpdatedTime(createdTime);
            aiMemberAnswer.setProductId(aiProduct.getId());
@@ -113,6 +190,21 @@
            apiMemberAnswerVo.setProductQuestionId(aiProductQuestion.getId());
            apiMemberAnswerVo.setTitle(aiProductQuestion.getTitle());
            apiMemberAnswerVo.setDifficulty(aiProductQuestion.getDifficulty());
            //初始化答题记录
            AiMemberAnswerItem aiMemberAnswerItem = new AiMemberAnswerItem();
            aiMemberAnswerItem.setId(UUID.getSimpleUUIDString());
            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);
            aiMemberAnswerItemService.save(aiMemberAnswerItem);
            apiMemberAnswerVo.setMemberAnswerState(aiMemberAnswerItem.getMemberAnswerState());
            apiMemberAnswerVo.setMemberAnswerItemId(aiMemberAnswerItem.getId());
            List<ApiMemberAnswerItemVo> answerList = new ArrayList<>();
            LambdaQueryWrapper<AiProductQuestionItem> productQuestionItemLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestionItem.class);
@@ -154,24 +246,19 @@
        String productQuestionItemId = dto.getId();
        String productQuestionId = dto.getProductQuestionId();
        String memberAnswerId = dto.getMemberAnswerId();
        String memberAnswerItemId = dto.getMemberAnswerItemId();
        AiMemberAnswer aiMemberAnswer = this.getById(memberAnswerId);
        if(ObjectUtil.isNull(aiMemberAnswer)){
            throw new RuntimeException("答题记录不存在");
            throw new FebsException("答题记录不存在");
        }
        Date createdTime = new Date();
        AiMemberAnswerItem aiMemberAnswerItem = new AiMemberAnswerItem();
        aiMemberAnswerItem.setId(UUID.getSimpleUUIDString());
        aiMemberAnswerItem.setCreatedTime(createdTime);
        aiMemberAnswerItem.setAnswerId(aiMemberAnswer.getId());
        aiMemberAnswerItem.setProductId(aiMemberAnswer.getProductId());
        aiMemberAnswerItem.setMemberId(memberUuid);
        aiMemberAnswerItem.setProductQuestionId(productQuestionId);
        Date nowTime = new Date();
        String companyId = aiMemberAnswer.getCompanyId();
        AiMemberAnswerItem aiMemberAnswerItem = aiMemberAnswerItemService.getById(memberAnswerItemId);
        aiMemberAnswerItem.setUpdatedTime(nowTime);
        AiProductQuestion aiProductQuestion = aiProductQuestionService.getById(productQuestionId);
        aiMemberAnswerItem.setTitle(aiProductQuestion.getTitle());
        aiMemberAnswerItem.setDifficulty(aiProductQuestion.getDifficulty());
        LambdaQueryWrapper<AiProductQuestionItem> productQuestionItemLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestionItem.class);
        productQuestionItemLambdaQueryWrapper.eq(AiProductQuestionItem::getProductQuestionId,aiProductQuestion.getId());
@@ -195,13 +282,14 @@
        }else{
            aiMemberAnswerItem.setIsCollected(0);
        }
        aiMemberAnswerItemService.save(aiMemberAnswerItem);
        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());
@@ -232,6 +320,15 @@
        long between = DateUtil.between(createdTime, updatedTime, DateUnit.MINUTE);
        apiMemberAnswerInsureVo.setUseTime(between);
        apiMemberAnswerInsureVo.setProductId(aiMemberAnswer.getProductId());
        aiMemberAnswerMapper.update(null,
                Wrappers.lambdaUpdate(AiMemberAnswer.class)
                .set(AiMemberAnswer::getUpdatedTime, new Date())
                .set(AiMemberAnswer::getState, 1)
                .set(AiMemberAnswer::getScore, percentage.intValue())
                .eq(AiMemberAnswer::getId, memberAnswerId)
                );
        return new FebsResponse().success().data(apiMemberAnswerInsureVo);
    }
@@ -239,14 +336,13 @@
    public FebsResponse previous(ApiMemberAnswerPreviousDto dto) {
        String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
        ApiMemberAnswerPreviousVo apiMemberAnswerPreviousVo = new ApiMemberAnswerPreviousVo();
        // 创建分页对象,传入当前页和每页大小
        Page<ApiMemberAnswerPreviousVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        Page<ApiMemberAnswerPreviousVo> pageListByQuery = aiMemberAnswerItemService.getPageListByQuery(page, dto);
        List<ApiMemberAnswerPreviousVo> records = pageListByQuery.getRecords();
        if (CollUtil.isNotEmpty(records)){
            apiMemberAnswerPreviousVo = records.get(0);
            ApiMemberAnswerPreviousVo apiMemberAnswerPreviousVo = records.get(0);
            String memberAnswerId = apiMemberAnswerPreviousVo.getMemberAnswerId();
            AiMemberAnswer aiMemberAnswer = this.getById(memberAnswerId);
@@ -254,6 +350,7 @@
            AiProduct aiProduct = aiProductService.getById(productId);
            apiMemberAnswerPreviousVo.setName(aiProduct.getName());
            apiMemberAnswerPreviousVo.setQuestionCnt(aiMemberAnswer.getQuestionCnt());
            apiMemberAnswerPreviousVo.setDoneCnt(aiMemberAnswer.getDoneCnt());
            String productQuestionId = apiMemberAnswerPreviousVo.getProductQuestionId();
            AiProductQuestion aiProductQuestion = aiProductQuestionService.getById(productQuestionId);
@@ -277,7 +374,7 @@
                apiMemberAnswerPreviousVo.setAnswerList(answerList);
            }
        }
        return new FebsResponse().success().data(apiMemberAnswerPreviousVo);
        return new FebsResponse().success().data(pageListByQuery);
    }
    @Override
@@ -288,4 +385,25 @@
        dto.setMemberUuid(memberUuid);
        return aiMemberAnswerItemService.wrongPage(dto);
    }
    @Override
    public FebsResponse myWork(ApiMemberProductWorkPageDto dto) {
        String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
        dto.setMemberUuid(memberUuid);
        // 创建分页对象,传入当前页和每页大小
        Page<ApiMemberProductWorkVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        Page<ApiMemberProductWorkVo> pageListByQuery = this.getBaseMapper().getPageMyWorkListByQuery(page, dto);
        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)
        );
    }
}