From e0df047509b4afed457c54f8cef7ff3ee9623cd8 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 23 Jan 2026 10:42:34 +0800
Subject: [PATCH] refactor(ai): 优化会员学习数据处理逻辑
---
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java | 94 ++++++++++++++++++++++++++++------------------
1 files changed, 57 insertions(+), 37 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 8d90370..2da1918 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,45 +249,37 @@
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());
+ // 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)
);
+ //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 = 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));
-
+ vo.setTitle(productPointMap.get(aiMemberPoint.getProductPointId()).getTitle());
+ vo.setTotalTime(DateUtil.secondToTime(aiMemberPoint.getTotalTime()));
vos.add(vo);
}
return new FebsResponse().success().data(vos);
}
+
@Override
public FebsResponse talkPage(ApiMemberTalkPageDto dto) {
@@ -392,23 +382,51 @@
// 创建分页对象,传入当前页和每页大小
Page<ApiCompanyStudyVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
IPage<ApiCompanyStudyVo> result = aiMemberAnswerService.selectListPage(dto, page);
+// List<ApiCompanyStudyVo> records = result.getRecords();
+// if (CollUtil.isNotEmpty(records)){
+// //stream流获取re cords集合中的元素productId的set集合
+// Set<String> collect = records.stream().map(ApiCompanyStudyVo::getProductId).collect(Collectors.toSet());
+// List<AiMemberAnswer> list = aiMemberAnswerService.getIdListByCompanyIdAndProductId(companyId, collect);
+// if (CollUtil.isNotEmpty(list)){
+// //利用stream流,操作集合list,返回一个map对象,key为productId,value为按照productId分组的集合的大小,默认值为0
+// Map<String, Long> memberAnswerItemCountMap =
+// list.stream().collect(Collectors.groupingBy(
+// AiMemberAnswer::getProductId,
+// Collectors.counting()
+// ));
+// for ( ApiCompanyStudyVo record : records){
+// record.setPracticeCnt(memberAnswerItemCountMap.getOrDefault(record.getProductId(), 0L).intValue());
+// }
+// }
+// }
+
List<ApiCompanyStudyVo> records = result.getRecords();
if (CollUtil.isNotEmpty(records)){
- //stream流获取re cords集合中的元素productId的set集合
- Set<String> collect = records.stream().map(ApiCompanyStudyVo::getProductId).collect(Collectors.toSet());
- List<AiMemberAnswer> list = aiMemberAnswerService.getIdListByCompanyIdAndProductId(companyId, collect);
- if (CollUtil.isNotEmpty(list)){
- //利用stream流,操作集合list,返回一个map对象,key为productId,value为按照productId分组的集合的大小,默认值为0
- Map<String, Long> memberAnswerItemCountMap =
- list.stream().collect(Collectors.groupingBy(
- AiMemberAnswer::getProductId,
- Collectors.counting()
- ));
- for ( ApiCompanyStudyVo record : records){
- record.setPracticeCnt(memberAnswerItemCountMap.getOrDefault(record.getProductId(), 0L).intValue());
+ // 安全地获取 productId 集合,过滤掉 null 值
+ Set<String> collect = records.stream()
+ .filter(Objects::nonNull)
+ .map(ApiCompanyStudyVo::getProductId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ if (CollUtil.isNotEmpty(collect)) { // 确保 collect 不为空
+ List<AiMemberAnswer> list = aiMemberAnswerService.getIdListByCompanyIdAndProductId(companyId, collect);
+ if (CollUtil.isNotEmpty(list)){
+ Map<String, Long> memberAnswerItemCountMap = list.stream()
+ .collect(Collectors.groupingBy(
+ AiMemberAnswer::getProductId,
+ Collectors.counting()
+ ));
+
+ for (ApiCompanyStudyVo record : records){
+ if (record != null && record.getProductId() != null) {
+ record.setPracticeCnt(memberAnswerItemCountMap.getOrDefault(record.getProductId(), 0L).intValue());
+ }
+ }
}
}
}
+
return new FebsResponse().success().data(result);
}
@@ -448,6 +466,7 @@
LambdaQueryWrapper<AiMemberAnswerItem> memberAnswerItemLambdaQueryWrapper = Wrappers.lambdaQuery(AiMemberAnswerItem.class);
memberAnswerItemLambdaQueryWrapper.in(AiMemberAnswerItem::getMemberAnswerQuestionId,questionItemIdSet);
memberAnswerItemLambdaQueryWrapper.eq(AiMemberAnswerItem::getCompanyId,companyId);
+ memberAnswerItemLambdaQueryWrapper.isNotNull(AiMemberAnswerItem::getAnswer);
List<AiMemberAnswerItem> memberAnswerItemList = aiMemberAnswerItemService.getListByQuery(memberAnswerItemLambdaQueryWrapper);
//利用stream流,操作集合memberAnswerItemList,返回一个map对象,key为memberAnswerQuestionId,value为按照memberAnswerQuestionId分组的集合的大小,默认值为0
Map<String, Long> memberAnswerItemCountMap =
@@ -495,6 +514,7 @@
LambdaQueryWrapper<AiMemberAnswerItem> memberAnswerItemLambdaQueryWrapper = Wrappers.lambdaQuery(AiMemberAnswerItem.class);
memberAnswerItemLambdaQueryWrapper.eq(AiMemberAnswerItem::getProductQuestionId,productQuestionId);
memberAnswerItemLambdaQueryWrapper.eq(AiMemberAnswerItem::getCompanyId,companyId);
+ memberAnswerItemLambdaQueryWrapper.isNotNull(AiMemberAnswerItem::getAnswer);
List<AiMemberAnswerItem> memberAnswerItemList = aiMemberAnswerItemService.getListByQuery(memberAnswerItemLambdaQueryWrapper);
if ( CollUtil.isEmpty(memberAnswerItemList)){
return new FebsResponse().success().data(objects);
@@ -517,11 +537,11 @@
Map<String, MallMember> mallMemberMap = mallMembers.stream().collect(Collectors.toMap(MallMember::getMemberUuid, mallMember -> mallMember));
for (AiMemberAnswerItem memberAnswerItem : memberAnswerItemList){
ApiCompanyStudyInfoVo vo = new ApiCompanyStudyInfoVo();
- vo.setMemberName(mallMemberMap.get(memberAnswerItem.getMemberId()).getName());
- vo.setNickName(mallMemberMap.get(memberAnswerItem.getMemberId()).getRealName());
+ vo.setMemberName(mallMemberMap.get(memberAnswerItem.getMemberId()).getRealName());
+ vo.setNickName(mallMemberMap.get(memberAnswerItem.getMemberId()).getName());
vo.setMemberAnswerState(memberAnswerItem.getMemberAnswerState());
- vo.setAnswer(answerMap.get(memberAnswerItem.getAnswer()).getAnswer());
+ vo.setAnswer(answerMap.get(memberAnswerItem.getMemberAnswerQuestionId()).getAnswer());
objects.add(vo);
}
return new FebsResponse().success().data(objects);
--
Gitblit v1.9.1