Jelajahi Sumber

用户未 关注门店随机推荐店铺

qinxuyang 2 bulan lalu
induk
melakukan
7a5fd85129

+ 68 - 4
alien-store/src/main/java/shop/alien/store/controller/StoreInfoController.java

@@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.ResponseEntity;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -72,6 +73,7 @@ public class StoreInfoController {
     private final StoreInfoMapper storeInfoMapper;
     private final StoreInfoMapper storeInfoMapper;
     private final LifeBlacklistMapper lifeBlacklistMapper;
     private final LifeBlacklistMapper lifeBlacklistMapper;
     private final StoreUserMapper storeUserMapper;
     private final StoreUserMapper storeUserMapper;
+    private final LifeFansMapper lifeFansMapper;
 
 
     @ApiOperation("获取所有门店")
     @ApiOperation("获取所有门店")
     @ApiOperationSupport(order = 1)
     @ApiOperationSupport(order = 1)
@@ -1591,7 +1593,7 @@ public class StoreInfoController {
             // 执行分页查询
             // 执行分页查询
             IPage<StoreInfo> result = storeInfoMapper.selectPage(pageObj, queryWrapper);
             IPage<StoreInfo> result = storeInfoMapper.selectPage(pageObj, queryWrapper);
             
             
-            // 批量查询商户头像
+            // 批量查询商户头像和手机号
             List<Integer> storeIds = new ArrayList<>();
             List<Integer> storeIds = new ArrayList<>();
             for (StoreInfo store : result.getRecords()) {
             for (StoreInfo store : result.getRecords()) {
                 if (store.getId() != null) {
                 if (store.getId() != null) {
@@ -1600,20 +1602,31 @@ public class StoreInfoController {
             }
             }
             
             
             Map<Integer, String> headImgMap = new HashMap<>();
             Map<Integer, String> headImgMap = new HashMap<>();
+            Map<Integer, String> storePhoneMap = new HashMap<>(); // 店铺ID -> 门店手机号
             if (!storeIds.isEmpty()) {
             if (!storeIds.isEmpty()) {
+                // 批量查询店铺信息,获取门店手机号
+                List<StoreInfo> storeInfoList = storeInfoMapper.selectBatchIds(storeIds);
+                for (StoreInfo storeInfo : storeInfoList) {
+                    if (storeInfo.getId() != null && StringUtils.isNotEmpty(storeInfo.getStoreTel())) {
+                        storePhoneMap.put(storeInfo.getId(), storeInfo.getStoreTel());
+                    }
+                }
+                
                 LambdaQueryWrapper<StoreUser> userWrapper = new LambdaQueryWrapper<>();
                 LambdaQueryWrapper<StoreUser> userWrapper = new LambdaQueryWrapper<>();
                 userWrapper.in(StoreUser::getStoreId, storeIds)
                 userWrapper.in(StoreUser::getStoreId, storeIds)
                           .eq(StoreUser::getDeleteFlag, 0);
                           .eq(StoreUser::getDeleteFlag, 0);
                 List<StoreUser> storeUsers = storeUserMapper.selectList(userWrapper);
                 List<StoreUser> storeUsers = storeUserMapper.selectList(userWrapper);
                 for (StoreUser user : storeUsers) {
                 for (StoreUser user : storeUsers) {
-                    if (user.getStoreId() != null && user.getHeadImg() != null) {
+                    if (user.getStoreId() != null) {
                         // 如果同一个店铺有多个用户,取第一个(通常是主账号)
                         // 如果同一个店铺有多个用户,取第一个(通常是主账号)
-                        headImgMap.putIfAbsent(user.getStoreId(), user.getHeadImg());
+                        if (user.getHeadImg() != null) {
+                            headImgMap.putIfAbsent(user.getStoreId(), user.getHeadImg());
+                        }
                     }
                     }
                 }
                 }
             }
             }
             
             
-            // 转换为包含头像的VO对象
+            // 转换为包含头像和关注状态的VO对象
             List<StoreInfoWithHeadImg> voList = new ArrayList<>();
             List<StoreInfoWithHeadImg> voList = new ArrayList<>();
             for (StoreInfo store : result.getRecords()) {
             for (StoreInfo store : result.getRecords()) {
                 StoreInfoWithHeadImg vo = new StoreInfoWithHeadImg();
                 StoreInfoWithHeadImg vo = new StoreInfoWithHeadImg();
@@ -1621,6 +1634,53 @@ public class StoreInfoController {
                 // 获取商户头像,如果没有头像则设置为null
                 // 获取商户头像,如果没有头像则设置为null
                 String headImg = headImgMap.get(store.getId());
                 String headImg = headImgMap.get(store.getId());
                 vo.setHeadImg(headImg != null && !headImg.trim().isEmpty() ? headImg : null);
                 vo.setHeadImg(headImg != null && !headImg.trim().isEmpty() ? headImg : null);
+                
+                // 当前登录用户是否关注该店铺
+                Integer isFollowed = 0; // 默认未关注
+                if (userLoginInfo != null && userLoginInfo.getUserId() > 0 && "user".equals(userLoginInfo.getType())) {
+                    try {
+                        // userId是用户ID(数字),查询用户信息获取手机号
+                        Integer userId = userLoginInfo.getUserId();
+                        LifeUser lifeUser = lifeUserMapper.selectById(userId);
+                        
+                        // 获取门店手机号
+                        String storePhone = storePhoneMap.get(store.getId());
+                        
+                        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 {
+                                isFollowed = 0; // 未关注
+                            }
+                        } else {
+                            isFollowed = 0; // 无法获取用户手机号或店铺手机号,默认未关注
+                        }
+                    } catch (NumberFormatException e) {
+                        log.error("用户ID格式错误 - userId: {}, storeId: {}, error: {}", 
+                                userLoginInfo.getUserId(), store.getId(), e.getMessage());
+                        isFollowed = 0; // 用户ID格式错误,默认未关注
+                    } catch (Exception e) {
+                        log.error("查询用户关注状态失败 - userId: {}, storeId: {}, error: {}", 
+                                userLoginInfo.getUserId(), store.getId(), e.getMessage(), e);
+                        isFollowed = 0; // 查询失败,默认未关注
+                    }
+                } else {
+                    isFollowed = 0; // 用户未登录或不是普通用户,默认未关注
+                }
+                
+                vo.setIsFollowed(isFollowed);
                 voList.add(vo);
                 voList.add(vo);
             }
             }
             
             
@@ -1647,6 +1707,10 @@ public class StoreInfoController {
         @ApiModelProperty(value = "商户头像(来自store_user表的head_img字段)")
         @ApiModelProperty(value = "商户头像(来自store_user表的head_img字段)")
         @TableField(exist = false)
         @TableField(exist = false)
         private String headImg;
         private String headImg;
+        
+        @ApiModelProperty(value = "是否已关注(1-已关注,0-未关注)")
+        @TableField(exist = false)
+        private Integer isFollowed;
     }
     }