From 2e6aac61fb60722799383112099971f566f0a4fc Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 26 Jan 2026 10:56:47 +0800
Subject: [PATCH] feat(ai): 优化AI产品问答功能实现

---
 src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java |   32 ++++++++++++++++++--------------
 1 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
index b580e19..5c3b5e2 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
@@ -246,19 +246,13 @@
         LambdaQueryWrapper<AiMemberPoint> queryWrapper = Wrappers.lambdaQuery(AiMemberPoint.class);
         queryWrapper.eq(AiMemberPoint::getCompanyId, companyId);
         queryWrapper.eq(AiMemberPoint::getMemberId, memberUuid);
+        queryWrapper.orderByDesc(AiMemberPoint::getCreatedTime);
         Page<AiMemberPoint> pageListByQuery = aiMemberPointService.getBaseMapper().selectPage(page, queryWrapper);
         List<AiMemberPoint> aiMemberPoints = pageListByQuery.getRecords();
 
         if (CollUtil.isEmpty(aiMemberPoints)){
             return new FebsResponse().success().data(vos);
         }
-
-        // 按 productPointId 分组并计算每个分组的总学习时间
-        Map<String, Integer> productPointTimeMap = aiMemberPoints.stream()
-                .collect(Collectors.groupingBy(
-                        AiMemberPoint::getProductPointId,
-                        Collectors.summingInt(AiMemberPoint::getTotalTime)
-                ));
 
         // stream流操作aiMemberPoints,返回一个productPointId的set集合
         Set<String> productPointIdSet = aiMemberPoints.stream()
@@ -270,18 +264,28 @@
                         .select(AiProductPoint::getId, AiProductPoint::getTitle)
                         .in(AiProductPoint::getId, productPointIdSet)
         );
+        //stream操作aiProductPoints,返回一个根据Map<id,AiProductPoint>
+        Map<String, AiProductPoint> productPointMap = aiProductPoints.stream().collect(Collectors.toMap(AiProductPoint::getId, aiProductPoint -> aiProductPoint));
 
         if (CollUtil.isEmpty(aiProductPoints)){
             return new FebsResponse().success().data(vos);
         }
 
-        for (AiProductPoint aiProductPoint : aiProductPoints){
-            ApiMemberTeamStudyVo vo = new ApiMemberTeamStudyVo();
-            vo.setTitle(aiProductPoint.getTitle());
-            Integer totalTime = productPointTimeMap.get(aiProductPoint.getId());
-            // 添加 null 值保护,避免 NPE
-            vo.setTotalTime(DateUtil.secondToTime(totalTime != null ? totalTime : 0));
-            vos.add(vo);
+        for (AiMemberPoint aiMemberPoint : aiMemberPoints) {
+            String productPointId = aiMemberPoint.getProductPointId();
+            AiProductPoint productPoint = productPointMap.get(productPointId);
+
+            // 检查 productPoint 是否存在
+            if (productPoint != null) {
+                ApiMemberTeamStudyVo vo = new ApiMemberTeamStudyVo();
+                vo.setTitle(productPoint.getTitle());
+
+                // 检查 totalTime 是否为 null
+                Integer totalTime = aiMemberPoint.getTotalTime();
+                vo.setTotalTime(DateUtil.secondToTime(totalTime != null ? totalTime : 0));
+
+                vos.add(vo);
+            }
         }
 
         return new FebsResponse().success().data(vos);

--
Gitblit v1.9.1