|
@@ -392,68 +392,97 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public List<LifeUserDynamicsVo> getStoreUserDynamics(String storePhone, String userType, String loginPhone) {
|
|
public List<LifeUserDynamicsVo> getStoreUserDynamics(String storePhone, String userType, String loginPhone) {
|
|
|
- LambdaQueryWrapper<LifeUserDynamics> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- lambdaQueryWrapper.eq(LifeUserDynamics :: getPhoneId, storePhone);
|
|
|
|
|
- List<LifeUserDynamics> lifeUserDynamics = lifeUserDynamicsMapper.selectList(lambdaQueryWrapper);
|
|
|
|
|
|
|
+ // 动态列表与点赞记录并行查询
|
|
|
|
|
+ CompletableFuture<List<LifeUserDynamics>> dynamicsFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
|
|
+ LambdaQueryWrapper<LifeUserDynamics> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ lambdaQueryWrapper.eq(LifeUserDynamics::getPhoneId, storePhone);
|
|
|
|
|
+ return lifeUserDynamicsMapper.selectList(lambdaQueryWrapper);
|
|
|
|
|
+ });
|
|
|
|
|
+ CompletableFuture<Set<String>> likeSetFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
|
|
+ LambdaQueryWrapper<LifeLikeRecord> likeWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ likeWrapper.eq(LifeLikeRecord::getType, "2");
|
|
|
|
|
+ if (userType.equals("1")) {
|
|
|
|
|
+ likeWrapper.eq(LifeLikeRecord::getDianzanId, "user_" + loginPhone);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ likeWrapper.eq(LifeLikeRecord::getDianzanId, "store_" + loginPhone);
|
|
|
|
|
+ }
|
|
|
|
|
+ List<LifeLikeRecord> lifeLikeList = lifeLikeRecordMapper.selectList(likeWrapper);
|
|
|
|
|
+ return lifeLikeList.stream().map(LifeLikeRecord::getHuifuId).collect(Collectors.toSet());
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ List<LifeUserDynamics> lifeUserDynamics = dynamicsFuture.join();
|
|
|
|
|
+ Set<String> likeSet = likeSetFuture.join();
|
|
|
|
|
+
|
|
|
List<LifeUserDynamicsVo> lifeUserDynamicsVos = lifeUserDynamics.stream()
|
|
List<LifeUserDynamicsVo> lifeUserDynamicsVos = lifeUserDynamics.stream()
|
|
|
.map(dynamics -> {
|
|
.map(dynamics -> {
|
|
|
LifeUserDynamicsVo vo = new LifeUserDynamicsVo();
|
|
LifeUserDynamicsVo vo = new LifeUserDynamicsVo();
|
|
|
BeanUtils.copyProperties(dynamics, vo);
|
|
BeanUtils.copyProperties(dynamics, vo);
|
|
|
- // 特殊字段处理
|
|
|
|
|
return vo;
|
|
return vo;
|
|
|
})
|
|
})
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
- // 查询我的点赞记录,构建点赞ID列表
|
|
|
|
|
- LambdaQueryWrapper<LifeLikeRecord> likeWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- likeWrapper.eq(LifeLikeRecord::getType, "2");
|
|
|
|
|
- if(userType.equals("1")){
|
|
|
|
|
- likeWrapper.eq(LifeLikeRecord::getDianzanId, "user_"+loginPhone);
|
|
|
|
|
- }else{
|
|
|
|
|
- likeWrapper.eq(LifeLikeRecord::getDianzanId, "store_"+loginPhone);
|
|
|
|
|
- }
|
|
|
|
|
- List<LifeLikeRecord> lifeLikeList = lifeLikeRecordMapper.selectList(likeWrapper);
|
|
|
|
|
- List<String> likeList = lifeLikeList.stream().map(LifeLikeRecord::getHuifuId).collect(Collectors.toList());
|
|
|
|
|
- for (LifeUserDynamicsVo vo : lifeUserDynamicsVos) {
|
|
|
|
|
- if (likeList.contains(String.valueOf(vo.getId()))) {
|
|
|
|
|
- vo.setIsLike("1");
|
|
|
|
|
- } else {
|
|
|
|
|
- vo.setIsLike("0");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 查询用户名称和头像
|
|
|
|
|
- String phoneId = vo.getPhoneId();
|
|
|
|
|
- if (StringUtils.hasText(phoneId)) {
|
|
|
|
|
- if (phoneId.startsWith("user_")) {
|
|
|
|
|
- // 用户类型
|
|
|
|
|
- String userPhone = phoneId.substring(5);
|
|
|
|
|
- LifeUser lifeUser = lifeUserService.getUserByPhone(userPhone);
|
|
|
|
|
- if (lifeUser != null) {
|
|
|
|
|
- vo.setUserName(lifeUser.getUserName());
|
|
|
|
|
- vo.setUserImage(lifeUser.getUserImage());
|
|
|
|
|
|
|
+ // 收集所有 phoneId,批量查询用户/商户信息,消除 N+1
|
|
|
|
|
+ Set<String> userPhones = new HashSet<>();
|
|
|
|
|
+ Set<String> storePhones = new HashSet<>();
|
|
|
|
|
+ for (LifeUserDynamicsVo vo : lifeUserDynamicsVos) {
|
|
|
|
|
+ String phoneId = vo.getPhoneId();
|
|
|
|
|
+ if (StringUtils.hasText(phoneId)) {
|
|
|
|
|
+ if (phoneId.startsWith("user_")) {
|
|
|
|
|
+ userPhones.add(phoneId.substring(5));
|
|
|
|
|
+ } else if (phoneId.startsWith("store_")) {
|
|
|
|
|
+ storePhones.add(phoneId.substring(6));
|
|
|
}
|
|
}
|
|
|
- } else if (phoneId.startsWith("store_")) {
|
|
|
|
|
- // 商户类型
|
|
|
|
|
- String storePhoneNum = phoneId.substring(6);
|
|
|
|
|
- StoreUserVo storeUser = storeUserService.getUserByPhone(storePhoneNum);
|
|
|
|
|
- if (storeUser != null) {
|
|
|
|
|
- // 查询店铺信息获取店铺名称
|
|
|
|
|
- if (storeUser.getStoreId() != null) {
|
|
|
|
|
- StoreInfo storeInfo = storeInfoMapper.selectById(storeUser.getStoreId());
|
|
|
|
|
- if (storeInfo != null && StringUtils.hasText(storeInfo.getStoreName())) {
|
|
|
|
|
- vo.setUserName(storeInfo.getStoreName());
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 批量查询 LifeUser、StoreUser
|
|
|
|
|
+ Map<String, LifeUser> userByPhoneMap = CollectionUtils.isEmpty(userPhones) ? Collections.emptyMap()
|
|
|
|
|
+ : lifeUserMapper.selectList(new LambdaQueryWrapper<LifeUser>().in(LifeUser::getUserPhone, userPhones))
|
|
|
|
|
+ .stream().collect(Collectors.toMap(LifeUser::getUserPhone, u -> u, (a, b) -> a));
|
|
|
|
|
+ List<StoreUser> storeUserList = CollectionUtils.isEmpty(storePhones) ? Collections.emptyList()
|
|
|
|
|
+ : storeUserService.list(new LambdaQueryWrapper<StoreUser>().in(StoreUser::getPhone, storePhones));
|
|
|
|
|
+ Map<String, StoreUser> storeUserByPhoneMap = storeUserList.stream().collect(Collectors.toMap(StoreUser::getPhone, u -> u, (a, b) -> a));
|
|
|
|
|
+
|
|
|
|
|
+ // 批量查询店铺信息
|
|
|
|
|
+ List<Integer> storeIds = storeUserList.stream().map(StoreUser::getStoreId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
|
|
+ Map<Integer, StoreInfo> storeInfoMap = CollectionUtils.isEmpty(storeIds) ? Collections.emptyMap()
|
|
|
|
|
+ : storeInfoMapper.selectBatchIds(storeIds).stream().collect(Collectors.toMap(StoreInfo::getId, s -> s, (a, b) -> a));
|
|
|
|
|
+
|
|
|
|
|
+ for (LifeUserDynamicsVo vo : lifeUserDynamicsVos) {
|
|
|
|
|
+ if (likeSet.contains(String.valueOf(vo.getId()))) {
|
|
|
|
|
+ vo.setIsLike("1");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ vo.setIsLike("0");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ String phoneId = vo.getPhoneId();
|
|
|
|
|
+ if (StringUtils.hasText(phoneId)) {
|
|
|
|
|
+ if (phoneId.startsWith("user_")) {
|
|
|
|
|
+ String userPhone = phoneId.substring(5);
|
|
|
|
|
+ LifeUser lifeUser = userByPhoneMap.get(userPhone);
|
|
|
|
|
+ if (lifeUser != null) {
|
|
|
|
|
+ vo.setUserName(lifeUser.getUserName());
|
|
|
|
|
+ vo.setUserImage(lifeUser.getUserImage());
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (phoneId.startsWith("store_")) {
|
|
|
|
|
+ String storePhoneNum = phoneId.substring(6);
|
|
|
|
|
+ StoreUser storeUser = storeUserByPhoneMap.get(storePhoneNum);
|
|
|
|
|
+ if (storeUser != null) {
|
|
|
|
|
+ if (storeUser.getStoreId() != null) {
|
|
|
|
|
+ StoreInfo storeInfo = storeInfoMap.get(storeUser.getStoreId());
|
|
|
|
|
+ if (storeInfo != null && StringUtils.hasText(storeInfo.getStoreName())) {
|
|
|
|
|
+ vo.setUserName(storeInfo.getStoreName());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ vo.setUserName(storeUser.getNickName());
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
vo.setUserName(storeUser.getNickName());
|
|
vo.setUserName(storeUser.getNickName());
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- vo.setUserName(storeUser.getNickName());
|
|
|
|
|
|
|
+ vo.setUserImage(storeUser.getHeadImg());
|
|
|
}
|
|
}
|
|
|
- // 设置商户头像
|
|
|
|
|
- vo.setUserImage(storeUser.getHeadImg());
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
return lifeUserDynamicsVos;
|
|
return lifeUserDynamicsVos;
|
|
|
}
|
|
}
|
|
|
|
|
|