Sfoglia il codice sorgente

店铺详情 用户关注门店 随机推荐门店中不显示该门店

qinxuyang 2 mesi fa
parent
commit
9920322f1b

+ 67 - 11
alien-store/src/main/java/shop/alien/store/controller/StoreInfoController.java

@@ -1518,7 +1518,7 @@ public class StoreInfoController {
         }
     }
 
-    @ApiOperation("分页随机查询店铺(排除已删除和已拉黑的店铺)")
+    @ApiOperation("分页随机查询店铺(排除已删除、已拉黑和已关注的店铺)")
     @ApiOperationSupport(order = 100)
     @ApiImplicitParams({
             @ApiImplicitParam(
@@ -1575,13 +1575,69 @@ public class StoreInfoController {
                 }
             }
             
+            // 查询当前登录用户已关注的店铺ID(仅普通用户)
+            List<Integer> followedStoreIds = new ArrayList<>();
+            if (userLoginInfo != null && userLoginInfo.getUserId() > 0 && "user".equals(userLoginInfo.getType())) {
+                try {
+                    // 查询用户信息获取手机号
+                    Integer userId = userLoginInfo.getUserId();
+                    LifeUser lifeUser = lifeUserMapper.selectById(userId);
+                    
+                    if (lifeUser != null && StringUtils.isNotEmpty(lifeUser.getUserPhone())) {
+                        // 构造粉丝ID:fans_id = "user_" + 用户手机号
+                        String fansId = "user_" + lifeUser.getUserPhone();
+                        
+                        // 查询该用户关注的所有门店(followed_id 以 "store_" 开头)
+                        LambdaQueryWrapper<LifeFans> fansWrapper = new LambdaQueryWrapper<>();
+                        fansWrapper.eq(LifeFans::getFansId, fansId)
+                                   .likeRight(LifeFans::getFollowedId, "store_")
+                                   .eq(LifeFans::getDeleteFlag, 0);
+                        List<LifeFans> lifeFansList = lifeFansMapper.selectList(fansWrapper);
+                        
+                        if (!CollectionUtils.isEmpty(lifeFansList)) {
+                            // 从 followed_id 中提取门店手机号(去掉 "store_" 前缀)
+                            Set<String> storePhones = new HashSet<>();
+                            for (LifeFans fans : lifeFansList) {
+                                if (fans.getFollowedId() != null && fans.getFollowedId().startsWith("store_")) {
+                                    String storePhone = fans.getFollowedId().substring(6); // 去掉 "store_" 前缀
+                                    if (StringUtils.isNotEmpty(storePhone)) {
+                                        storePhones.add(storePhone);
+                                    }
+                                }
+                            }
+                            
+                            // 通过门店手机号查询门店ID
+                            if (!storePhones.isEmpty()) {
+                                LambdaQueryWrapper<StoreInfo> storeWrapper = new LambdaQueryWrapper<>();
+                                storeWrapper.in(StoreInfo::getStoreTel, storePhones)
+                                          .eq(StoreInfo::getDeleteFlag, 0);
+                                List<StoreInfo> followedStores = storeInfoMapper.selectList(storeWrapper);
+                                
+                                for (StoreInfo store : followedStores) {
+                                    if (store.getId() != null) {
+                                        followedStoreIds.add(store.getId());
+                                    }
+                                }
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    log.error("查询用户已关注门店失败 - userId: {}, error: {}", 
+                            userLoginInfo.getUserId(), e.getMessage(), e);
+                }
+            }
+            
+            // 合并拉黑和已关注的店铺ID列表
+            Set<Integer> excludedStoreIds = new HashSet<>(blacklistedStoreIds);
+            excludedStoreIds.addAll(followedStoreIds);
+            
             // 构建查询条件
             LambdaQueryWrapper<StoreInfo> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(StoreInfo::getDeleteFlag, 0); // 未删除
             
-            // 排除被拉黑的店铺
-            if (!blacklistedStoreIds.isEmpty()) {
-                queryWrapper.notIn(StoreInfo::getId, blacklistedStoreIds);
+            // 排除被拉黑和已关注的店铺
+            if (!excludedStoreIds.isEmpty()) {
+                queryWrapper.notIn(StoreInfo::getId, excludedStoreIds);
             }
             
             // 随机排序
@@ -1642,23 +1698,23 @@ public class StoreInfoController {
                         // userId是用户ID(数字),查询用户信息获取手机号
                         Integer userId = userLoginInfo.getUserId();
                         LifeUser lifeUser = lifeUserMapper.selectById(userId);
-                        
+
                         // 获取门店手机号
                         String storePhone = storePhoneMap.get(store.getId());
-                        
-                        if (lifeUser != null && StringUtils.isNotEmpty(lifeUser.getUserPhone()) 
+
+                        if (lifeUser != null && StringUtils.isNotEmpty(lifeUser.getUserPhone())
                                 && StringUtils.isNotEmpty(storePhone)) {
                             // 构造关注关系:followed_id = "store_" + 门店手机号,fans_id = "user_" + 用户手机号
                             String followedId = "store_" + storePhone;
                             String fansId = "user_" + lifeUser.getUserPhone();
-                            
+
                             // 查询关注关系
                             LambdaQueryWrapper<LifeFans> fansWrapper = new LambdaQueryWrapper<>();
                             fansWrapper.eq(LifeFans::getFollowedId, followedId)
                                     .eq(LifeFans::getFansId, fansId)
                                     .eq(LifeFans::getDeleteFlag, 0);
                             LifeFans lifeFans = lifeFansMapper.selectOne(fansWrapper);
-                            
+
                             if (lifeFans != null) {
                                 isFollowed = 1; // 已关注
                             } else {
@@ -1668,11 +1724,11 @@ public class StoreInfoController {
                             isFollowed = 0; // 无法获取用户手机号或店铺手机号,默认未关注
                         }
                     } catch (NumberFormatException e) {
-                        log.error("用户ID格式错误 - userId: {}, storeId: {}, error: {}", 
+                        log.error("用户ID格式错误 - userId: {}, storeId: {}, error: {}",
                                 userLoginInfo.getUserId(), store.getId(), e.getMessage());
                         isFollowed = 0; // 用户ID格式错误,默认未关注
                     } catch (Exception e) {
-                        log.error("查询用户关注状态失败 - userId: {}, storeId: {}, error: {}", 
+                        log.error("查询用户关注状态失败 - userId: {}, storeId: {}, error: {}",
                                 userLoginInfo.getUserId(), store.getId(), e.getMessage(), e);
                         isFollowed = 0; // 查询失败,默认未关注
                     }