From 16b8941c5e450988c6d5ab27fb46416df5bd42ae Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 12 Jan 2026 17:23:38 +0800
Subject: [PATCH] feat(ai): 添加学习成果统计功能

---
 src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
index fa9b81f..d4fed26 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
@@ -3,8 +3,10 @@
 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.ApiCompanyStudyDto;
 import cc.mrbird.febs.ai.req.member.ApiMemberAnswerPageDto;
 import cc.mrbird.febs.ai.req.memberAnswer.*;
+import cc.mrbird.febs.ai.res.member.ApiCompanyStudyVo;
 import cc.mrbird.febs.ai.res.member.ApiMemberAnswerPageVo;
 import cc.mrbird.febs.ai.res.memberAnswer.*;
 import cc.mrbird.febs.ai.res.product.ApiProductVo;
@@ -19,6 +21,7 @@
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -32,6 +35,8 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * AI用户答题记录 Service实现类
@@ -49,6 +54,8 @@
     private final AiProductService aiProductService;
     private final AiProductQuestionService aiProductQuestionService;
     private final AiProductQuestionItemService aiProductQuestionItemService;
+    private final AiProductDependencyService aiProductDependencyService;
+    private final AiMemberProductUnlockService aiMemberProductUnlockService;
 
 
     @Override
@@ -305,6 +312,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();
@@ -332,6 +340,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);
     }
 
@@ -434,4 +458,9 @@
 
         return aiMemberAnswerMapper.getAnswerPage(page,dto);
     }
+
+    @Override
+    public IPage<ApiCompanyStudyVo> selectListPage(ApiCompanyStudyDto dto, Page<ApiCompanyStudyVo> page) {
+        return aiMemberAnswerMapper.selectProductListPage(page,dto);
+    }
 }

--
Gitblit v1.9.1