Administrator
11 hours ago cd35010f827a0de3f125f714b576c10aab7afc12
```
feat(ai): 优化会员积分统计逻辑以支持多条记录聚合

将原先的单条积分记录处理改为使用 Stream API 按 productPointId 分组,并对每组积分记录的 totalTime 进行累加求和,以正确计算总学习时间。
```
1 files modified
10 ■■■■ changed files
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java 10 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
@@ -251,9 +251,10 @@
        if (CollUtil.isEmpty(aiMemberPoints)){
            return new FebsResponse().success().data(vos);
        }
        Map<String, AiMemberPoint> aiMemberPointMap = new HashMap<>();
        Map<String, List<AiMemberPoint>> aiMemberPointMap = new HashMap<>();
        if (CollUtil.isNotEmpty(aiMemberPoints)){
            aiMemberPoints.forEach(aiMemberPoint -> aiMemberPointMap.put(aiMemberPoint.getProductPointId(),aiMemberPoint));
            //stream操作aiMemberPoints,返回一个Map<productPointId,List<AiMemberPoint>>
            aiMemberPointMap = aiMemberPoints.stream().collect(Collectors.groupingBy(AiMemberPoint::getProductPointId));
        }
        //stream流操作aiMemberPoints,返回一个productPointId的set集合
@@ -273,7 +274,10 @@
            vo.setTitle(aiProductPoint.getTitle());
            Integer totalTime = 0;
            if (aiMemberPointMap.containsKey(aiProductPoint.getId())){
                totalTime = aiMemberPointMap.get(aiProductPoint.getId()).getTotalTime();
                List<AiMemberPoint> memberPoints = aiMemberPointMap.get(aiProductPoint.getId());
                for (AiMemberPoint memberPoint : memberPoints){
                    totalTime += memberPoint.getTotalTime();
                }
            }
            vo.setTotalTime(DateUtil.secondToTime(totalTime));