From 001da1169ce18233a46bf22abd352cf8fa979f2c Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 23 Jan 2026 10:22:49 +0800
Subject: [PATCH] refactor(ai): 优化会员学习记录查询逻辑
---
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java | 37 +++++++++++++++++--------------------
1 files changed, 17 insertions(+), 20 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 62f0eb8..b580e19 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
@@ -241,8 +241,6 @@
String companyId = LoginUserUtil.getLoginUser().getCompanyId();
String memberUuid = dto.getMemberUuid();
-
-
// 创建分页对象,传入当前页和每页大小
Page<AiMemberPoint> page = new Page<>(dto.getPageNow(), dto.getPageSize());
LambdaQueryWrapper<AiMemberPoint> queryWrapper = Wrappers.lambdaQuery(AiMemberPoint.class);
@@ -251,24 +249,28 @@
Page<AiMemberPoint> pageListByQuery = aiMemberPointService.getBaseMapper().selectPage(page, queryWrapper);
List<AiMemberPoint> aiMemberPoints = pageListByQuery.getRecords();
-// List<AiMemberPoint> aiMemberPoints = aiMemberPointService.getListByCompanyIdAndMemberUuid(companyId, memberUuid);
if (CollUtil.isEmpty(aiMemberPoints)){
return new FebsResponse().success().data(vos);
}
- Map<String, List<AiMemberPoint>> aiMemberPointMap = new HashMap<>();
- if (CollUtil.isNotEmpty(aiMemberPoints)){
- //stream操作aiMemberPoints,返回一个Map<productPointId,List<AiMemberPoint>>
- aiMemberPointMap = aiMemberPoints.stream().collect(Collectors.groupingBy(AiMemberPoint::getProductPointId));
- }
- //stream流操作aiMemberPoints,返回一个productPointId的set集合
- Set<String> productPointIdSet = aiMemberPoints.stream().map(AiMemberPoint::getProductPointId).collect(Collectors.toSet());
+ // 按 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)
+ .collect(Collectors.toSet());
List<AiProductPoint> aiProductPoints = aiProductPointService.getBaseMapper().selectList(
Wrappers.lambdaQuery(AiProductPoint.class)
- .select(AiProductPoint::getId,AiProductPoint::getTitle)
+ .select(AiProductPoint::getId, AiProductPoint::getTitle)
.in(AiProductPoint::getId, productPointIdSet)
);
+
if (CollUtil.isEmpty(aiProductPoints)){
return new FebsResponse().success().data(vos);
}
@@ -276,21 +278,16 @@
for (AiProductPoint aiProductPoint : aiProductPoints){
ApiMemberTeamStudyVo vo = new ApiMemberTeamStudyVo();
vo.setTitle(aiProductPoint.getTitle());
- Integer totalTime = 0;
- if (aiMemberPointMap.containsKey(aiProductPoint.getId())){
- List<AiMemberPoint> memberPoints = aiMemberPointMap.get(aiProductPoint.getId());
- for (AiMemberPoint memberPoint : memberPoints){
- totalTime += memberPoint.getTotalTime();
- }
- }
- vo.setTotalTime(DateUtil.secondToTime(totalTime));
-
+ Integer totalTime = productPointTimeMap.get(aiProductPoint.getId());
+ // 添加 null 值保护,避免 NPE
+ vo.setTotalTime(DateUtil.secondToTime(totalTime != null ? totalTime : 0));
vos.add(vo);
}
return new FebsResponse().success().data(vos);
}
+
@Override
public FebsResponse talkPage(ApiMemberTalkPageDto dto) {
--
Gitblit v1.9.1