Administrator
1 days ago e0df047509b4afed457c54f8cef7ff3ee9623cd8
refactor(ai): 优化会员学习数据处理逻辑

- 移除按产品点ID分组计算总学习时间的冗余代码
- 简化aiProductPoints的stream操作,直接转换为Map结构
- 修改循环遍历逻辑,从遍历产品点改为遍历会员点
- 直接使用会员点实体中的总时间字段,避免额外的时间计算
- 通过Map映射获取产品点标题,提高数据访问效率
- 移除空值保护逻辑,简化时间转换处理
1 files modified
17 ■■■■ changed files
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java 17 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
@@ -253,13 +253,6 @@
            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()
                .map(AiMemberPoint::getProductPointId)
@@ -270,17 +263,17 @@
                        .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){
        for (AiMemberPoint aiMemberPoint : aiMemberPoints){
            ApiMemberTeamStudyVo vo = new ApiMemberTeamStudyVo();
            vo.setTitle(aiProductPoint.getTitle());
            Integer totalTime = productPointTimeMap.get(aiProductPoint.getId());
            // 添加 null 值保护,避免 NPE
            vo.setTotalTime(DateUtil.secondToTime(totalTime != null ? totalTime : 0));
            vo.setTitle(productPointMap.get(aiMemberPoint.getProductPointId()).getTitle());
            vo.setTotalTime(DateUtil.secondToTime(aiMemberPoint.getTotalTime()));
            vos.add(vo);
        }