Ver código fonte

商品搜多结果接口初始化

wxd 1 mês atrás
pai
commit
517e517adc

+ 61 - 4
alien-entity/src/main/java/shop/alien/entity/second/vo/SecondGoodsVo.java

@@ -19,20 +19,77 @@ public class SecondGoodsVo extends SecondGoods {
     @ApiModelProperty(value = "保存方式 0:草稿 1:发布")
     private Integer saveType;
 
+    @ApiModelProperty(value = "商品距离")
+    private String distance;
+
 //    @NotBlank(message = "商品图片不能为空")
     @ApiModelProperty(value = "商品图片")
     private List<String> imgUrl;
 
-    @TableField("user_name")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "用户名称")
     private String userName;
 
-    @TableField("real_name")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "用户真名")
     private String realName;
 
-    @TableField("user_phone")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "用户电话")
     private String userPhone;
 
-    @TableField("user_image")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "用户头像")
     private String userImage;
 
+    // 收藏状态
+    @TableField(exist = false)
+    @ApiModelProperty(value = "收藏状态")
+    private Integer collectStatus;
+
+    // 点赞状态
+    @TableField(exist = false)
+    @ApiModelProperty(value = "点赞状态")
+    private Integer likeStatus;
+
+    @ApiModelProperty("一级分类名称")
+    @TableField(exist = false)
+    private String categoryOneName;
+
+    @ApiModelProperty("二级分类名称")
+    @TableField(exist = false)
+    private String categoryTwoName;
+
+
+    /** -------------------- 搜索入参 -------------------- */
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "当前页码")
+    private Integer pageNum;
+
+    @ApiModelProperty(value = "每页数量")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "当前经度")
+    private Double currentLatitude;
+
+    @ApiModelProperty(value = "当前纬度")
+    private Double currentLongitude;
+
+    @ApiModelProperty(value = "排序字段 排序字段 价格-price,发布时间-releaseTime")
+    private String orderData;
+
+    @ApiModelProperty(value = "排序方式 排序方式 1-正序 2-倒叙")
+    private Integer orderType;
+
+    @ApiModelProperty(value = "搜索入参")
+    private String searchData;
+
+    @ApiModelProperty(value = "屏蔽商品IDList")
+    private List<Integer> shieldedGoodsIds;
+
+    @ApiModelProperty(value = "拉黑用户IDList")
+    private List<Integer> userIdList;
+
+
 }

+ 8 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeBlacklistMapper.java

@@ -18,4 +18,12 @@ import java.util.List;
 public interface LifeBlacklistMapper extends BaseMapper<LifeBlacklist> {
 
     List<LifeBlacklist> selectListByUserId(LambdaUpdateWrapper<LifeBlacklist> wrapper);
+
+    /**
+     * 获取拉黑列表
+     *
+     * @param userId 用户id
+     * @return 拉黑用户id 集合
+     */
+    List<Integer> getBlackList(Integer userId);
 }

+ 7 - 3
alien-entity/src/main/java/shop/alien/mapper/LifeUserMapper.java

@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.LifeUser;
+import shop.alien.entity.store.StoreImg;
 import shop.alien.entity.store.vo.LifeFansVo;
 import shop.alien.entity.store.vo.LifeUserOrderVo;
 import shop.alien.entity.store.vo.LifeUserVo;
@@ -57,9 +58,12 @@ public interface LifeUserMapper extends BaseMapper<LifeUser> {
     LifeUserVo getRemoveUser(@Param("id") String id);
 
     /**
-     * 批量获取用户信息
-     * @param userIds 用户id集合
+     * 根据id集合查询用户信息
+     *
+     * @param queryWrapper 查询条件
      * @return 用户信息
      */
-    Map<Integer, LifeUser> getUserByIds(List<Integer> userIds);
+    @Select("SELECT * " +
+            "FROM life_user ${ew.customSqlSegment}")
+    List<LifeUserVo> getUserByIds(@Param(Constants.WRAPPER) QueryWrapper<LifeUserVo> queryWrapper);
 }

+ 7 - 2
alien-entity/src/main/java/shop/alien/mapper/StoreImgMapper.java

@@ -1,10 +1,13 @@
 package shop.alien.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.StoreImg;
+import shop.alien.entity.store.vo.StoreDynamicDiscountInviteLogVo;
 import shop.alien.entity.store.vo.StoreImgTypeVo;
 
 import java.util.List;
@@ -31,8 +34,10 @@ public interface StoreImgMapper extends BaseMapper<StoreImg> {
     /**
      * 根据商品id获取图片
      *
-     * @param goodsIds 商品id
+     * @param queryWrapper 商品id
      * @return 商品图片
      */
-    Map<Integer, List<StoreImg>> getImgsByGoodsIds(List<Integer> goodsIds);
+    @Select("SELECT * " +
+            "FROM store_img ${ew.customSqlSegment}")
+    List<StoreImg> getImgsByGoodsIds(@Param(Constants.WRAPPER) QueryWrapper<StoreImg> queryWrapper);
 }

+ 17 - 9
alien-entity/src/main/java/shop/alien/mapper/second/SecondGoodsMapper.java

@@ -1,11 +1,16 @@
 package shop.alien.mapper.second;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.Mapper; // 引入 Mapper 注解
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.second.SecondGoods;
+import shop.alien.entity.second.SecondShield;
 import shop.alien.entity.second.vo.SecondGoodsVo;
+import shop.alien.entity.store.StoreInfo;
 
 import java.util.List;
 
@@ -73,15 +78,18 @@ public interface SecondGoodsMapper extends BaseMapper<SecondGoods> {
     /**
      * 搜索结果-商品列表
      * @param page 分页参数
-     * @param currentLatitude 当前位置纬度
-     * @param currentLongitude 当前位置经度
      * @return 搜索结果列表
      */
-    IPage<SecondGoodsVo> searchGoodsList(IPage<SecondGoodsVo> page,
-                                         @Param("currentLatitude") Double currentLatitude,
-                                         @Param("currentLongitude") Double currentLongitude,
-                                         @Param("orderData") String orderData,
-                                         @Param("orderType")  Integer orderType,
-                                         @Param("shieldedGoodsIds")  List<Integer>  shieldedGoodsIds,
-                                         @Param("userIdList")  List<Integer> userIdList);
+    @Select("SELECT " +
+            "sg.*, " +
+            "sgc1.category_name as categoryOneName, " +
+            "sgc2.category_name as categoryTwoName, "+
+            "(6371 * acos(cos(radians(#{currentLatitude})) * cos(radians(SUBSTRING_INDEX(sg.position, ',', 1))) * cos(radians(SUBSTRING_INDEX(sg.position, ',', -1)) - radians(#{currentLongitude})) + sin(radians(#{currentLatitude})) * sin(radians(SUBSTRING_INDEX(sg.position, ',', 1))))) AS distance " +
+            " FROM second_goods sg " +
+            "left JOIN second_goods_category sgc1 " +
+            "on sg.category_one_id = sgc1.id " +
+            "left JOIN second_goods_category sgc2 " +
+            "on sg.category_two_id = sgc2.id "+
+            "${ew.customSqlSegment}")
+    IPage<SecondGoodsVo> searchGoodsList(IPage<SecondGoodsVo> page,@Param("currentLatitude") Double currentLatitude , @Param("currentLongitude") Double currentLongitude, @Param(Constants.WRAPPER) QueryWrapper<SecondGoodsVo> queryWrapper);
 }

+ 15 - 3
alien-entity/src/main/resources/mapper/LifeBlacklistMapper.xml

@@ -1,5 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="shop.alien.mapper.LifeBlacklistMapper">
 
     <!-- 通用查询映射结果 -->
@@ -30,4 +32,14 @@
 
     </select>
 
-</mapper>
+    <!-- 获取拉黑用户id列表 -->
+    <select id="getBlackList" resultType="java.lang.Integer">
+        SELECT
+            blocked_id
+        FROM
+            life_blacklist
+        WHERE
+            blocker_id = #{userId}
+            AND delete_flag = 0
+    </select>
+</mapper>

+ 0 - 10
alien-entity/src/main/resources/mapper/LifeUserMapper.xml

@@ -64,14 +64,4 @@
         select concat(user_name,"(账号已注销)") as name,user_phone FROM life_user where id = #{id}
     </select>
 
-    <!-- 根据用户ID列表查询用户信息,返回Map -->
-    <select id="getUserByIds" resultType="shop.alien.entity.store.life.LifeUser">
-        SELECT *
-        FROM life_user
-        WHERE delete_flag = 0 AND id IN
-        <foreach item="id" collection="userIds" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </select>
-
 </mapper>

+ 0 - 15
alien-entity/src/main/resources/mapper/StoreImgMapper.xml

@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="shop.alien.mapper.StoreImgMapper">
-    <!-- 其他已有的SQL语句应放在这里 -->
-
-    <!-- 根据商品ID列表查询商品图片信息,返回Map -->
-    <select id="getImgsByGoodsIds" resultType="shop.alien.entity.store.StoreImg">
-        SELECT *
-        FROM store_img
-        WHERE delete_flag = 0 AND goods_id IN
-        <foreach item="id" collection="goodsIds" open="(" separator="," close=")">
-            #{id}
-        </foreach>
-    </select>
-</mapper>

+ 42 - 10
alien-entity/src/main/resources/mapper/second/SecondGoodsMapper.xml

@@ -1,5 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="shop.alien.mapper.second.SecondGoodsMapper">
     <resultMap id="BaseResultMap" type="shop.alien.entity.second.SecondGoods">
         <!--@mbggenerated-->
@@ -85,23 +87,53 @@
     </select>
 
     <!-- 查询用户屏蔽的商品列表 -->
-    <select id="getShieldedGoodsListByType" resultType="shop.alien.entity.second.SecondGoods">
+    <select id="getShieldedGoodsList" resultType="shop.alien.entity.second.SecondGoods">
         SELECT sg.*
         FROM second_goods sg
         INNER JOIN second_shield ss ON 
-            (sg.id = ss.shield_id AND ss.shield_type = 1) OR 
-            (sg.user_id = ss.shield_id AND ss.shield_type = 2)
+            (sg.id = ss.shield_id AND ss.shield_type = 1)
         WHERE ss.user_id = #{userId} AND ss.delete_flag = 0 AND sg.delete_flag = 0
-        AND ss.shield_type = #{shieldType}
     </select>
 
     <!-- 搜索商品列表(包含商品信息、图片、用户信息),按距离和创建时间倒序 -->
-    <select id="searchGoodsList" resultType="shop.alien.entity.second.SecondGoods">
+    <!--<select id="searchGoodsList" resultType="shop.alien.entity.second.SecondGoods">
         SELECT 
             sg.*, 
-            (6371 * acos(cos(radians(#{currentLatitude})) * cos(radians(SUBSTRING_INDEX(sg.position, ',', 1))) * cos(radians(SUBSTRING_INDEX(sg.position, ',', -1)) - radians(#{currentLongitude})) + sin(radians(#{currentLatitude})) * sin(radians(SUBSTRING_INDEX(sg.position, ',', 1))))) AS distance
+            (6371 * acos(cos(radians(#{searchVo.currentLatitude})) * cos(radians(SUBSTRING_INDEX(sg.position, ',', 1))) * cos(radians(SUBSTRING_INDEX(sg.position, ',', -1)) - radians(#{searchVo.currentLongitude})) + sin(radians(#{searchVo.currentLatitude})) * sin(radians(SUBSTRING_INDEX(sg.position, ',', 1))))) AS distance
         FROM second_goods sg
         WHERE sg.delete_flag = 0
-        ORDER BY distance ASC, sg.created_time DESC
-    </select>
+        <if test="searchVo.shieldedGoodsIds != null and !searchVo.shieldedGoodsIds.isEmpty()">
+            AND sg.id NOT IN
+            <foreach collection="searchVo.shieldedGoodsIds" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test="searchVo.userIdList != null and !searchVo.userIdList.isEmpty()">
+            AND sg.user_id NOT IN
+            <foreach collection="searchVo.userIdList" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test="searchVo.searchData != null and searchVo.searchData != ''">
+            AND (
+            sg.label LIKE CONCAT('%', #{searchVo.searchData}, '%')
+            OR sg.title LIKE CONCAT('%', #{searchVo.searchData}, '%')
+            OR sg.describe LIKE CONCAT('%', #{searchVo.searchData}, '%')
+            OR sg.category_one_id LIKE CONCAT('%', #{searchVo.searchData}, '%')
+            OR sg.category_two_id LIKE CONCAT('%', #{searchVo.searchData}, '%')
+            )
+        </if>
+        ORDER BY distance ASC,
+        <if test="searchVo.orderData != null and searchVo.orderType != null">
+            CASE
+                WHEN #{searchVo.orderData} = 'distance' THEN distance
+                WHEN #{searchVo.orderData} = 'price' THEN sg.price
+                WHEN #{searchVo.orderData} = 'likeCount' THEN sg.like_count
+                WHEN #{searchVo.orderData} = 'collectCount' THEN sg.collect_count
+                ELSE sg.created_time
+            END
+            <if test="searchVo.orderType == 1">ASC</if>
+            <if test="searchVo.orderType == 2">DESC</if>
+        </if>
+    </select>-->
 </mapper>

+ 4 - 9
alien-second/src/main/java/shop/alien/second/controller/SecondGoodsController.java

@@ -158,18 +158,13 @@ public class SecondGoodsController {
     @GetMapping("/search")
     @ApiOperation("搜索结果-商品列表")
     public R<IPage<SecondGoodsVo>> searchGoodsList(
-            @ApiParam("当前页码") @RequestParam Integer pageNum,
-            @ApiParam("每页数量") @RequestParam Integer pageSize,
-            @ApiParam("当前纬度") @RequestParam Double currentLatitude,
-            @ApiParam("当前经度") @RequestParam Double currentLongitude,
-            @ApiParam("排序方式") @RequestParam Integer orderType,
-            @ApiParam("排序字段") @RequestParam String orderData) {
-        R<IPage<SecondGoodsVo>> result = new R<>() ;
-        IPage<SecondGoodsVo> page = new Page<>(pageNum, pageSize);
+            @ApiParam("二手商品搜索条件") @RequestBody SecondGoodsVo secondGoodsVo) {
+        R<IPage<SecondGoodsVo>> result = new R<>();
+        IPage<SecondGoodsVo> page = new Page<>(secondGoodsVo.getPageNum(), secondGoodsVo.getPageSize());
         JSONObject data = JwtUtil.getCurrentUserInfo();
         if (null != data) {
             int userId = data.getInteger("userId");
-            result = R.data(secondGoodsService.searchGoodsList(page, currentLatitude, currentLongitude, orderData, orderType,userId), "查询成功");
+            result = R.data(secondGoodsService.searchGoodsList(page, userId,secondGoodsVo), "查询成功");
         }
         return result;
     }

+ 0 - 79
alien-second/src/main/java/shop/alien/second/mapper/SecondGoodsMapper.java

@@ -1,79 +0,0 @@
-package shop.alien.second.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper; // 引入 Mapper 注解
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
-import shop.alien.entity.second.SecondGoods;
-import java.util.List;
-
-/**
- * 二手商品映射器
- */
-public interface SecondGoodsMapper extends BaseMapper<SecondGoods> {
-    /**
-     * 自定义分页查询
-     */
-    List<SecondGoods> getSecondGoodsByPage(IPage<SecondGoods> page);
-    
-    /**
-     * 自定义分页查询并按距离排序
-     * @param page 分页信息
-     * @param currentLatitude 当前位置纬度
-     * @param currentLongitude 当前位置经度
-     * @return 分页后的二手商品列表
-     */
-    List<SecondGoods> getSecondGoodsByPageAndDistance(IPage<SecondGoods> page, @Param("currentLatitude") Double currentLatitude, @Param("currentLongitude") Double currentLongitude);
-
-    /**
-     * 自定义查询方法,返回包含图片信息的二手商品列表
-     * @param page 分页信息
-     * @param categoryId 分类ID
-     * @param status 商品状态
-     * @return 包含图片信息的二手商品列表
-     */
-    IPage<SecondGoods> selectGoodsWithImages(IPage<SecondGoods> page, @Param("categoryId") Integer categoryId, @Param("status") Integer status);
-
-    /**
-     * 查询用户屏蔽的商品列表
-     * @param page 分页参数
-     * @param userId 用户ID
-     * @return 分页后的屏蔽商品列表
-     */
-    IPage<SecondGoods> getShieldedGoodsListByType(IPage<SecondGoods> page, @Param("userId") Integer userId, @Param("shieldType") Integer shieldType);
-
-    /**
-     * 查询用户屏蔽的商品列表
-     * @param userId 用户ID
-     * @return 屏蔽的商品列表
-     */
-    List<SecondGoods> getShieldedGoodsList(@Param("userId") Integer userId);
-
-    /**
-     * 查询商品热卖排行榜
-     * @param page 分页参数
-     * @return 商品热卖排行榜列表
-     */
-    IPage<SecondGoods> getHotSellingRanking(IPage<SecondGoods> page);
-
-    /**
-     * 查询商品热卖排行榜(前10名),按标签聚合计算总点赞量
-     * @return 热卖排行榜列表
-     */
-    List<SecondGoods> getHotSellingRankingTop10();
-
-    /**
-     * 获取商品收藏排行榜(前10名),按标签聚合计算总收藏量
-     * @return 收藏排行榜列表
-     */
-    List<SecondGoods> getCollectTop10();
-
-    /**
-     * 搜索商品列表(包含商品信息、图片、用户信息),按距离和创建时间倒序
-     * @param page 分页参数
-     * @param currentLatitude 当前纬度
-     * @param currentLongitude 当前经度
-     * @return 商品列表
-     */
-    IPage<SecondGoods> searchGoodsListWithDistanceAndTime(IPage<SecondGoods> page, @Param("currentLatitude") Double currentLatitude, @Param("currentLongitude") Double currentLongitude);
-}

+ 3 - 7
alien-second/src/main/java/shop/alien/second/service/SecondGoodsService.java

@@ -74,12 +74,8 @@ public interface SecondGoodsService extends IService<SecondGoods> {
 
     /**
      * 搜索结果-商品列表
-     * @param page 分页参数
-     * @param currentLatitude 当前纬度
-     * @param currentLongitude 当前经度
-     * @param orderData 排序字段
-     * @param orderType 排序方式
-     * @return 商品列表
+     * @param secondGoodsVo 搜索条件
+     * @return 搜索结果列表
      */
-    IPage<SecondGoodsVo> searchGoodsList(IPage<SecondGoodsVo> page, Double currentLatitude, Double currentLongitude, String orderData, Integer orderType,Integer userId);
+    IPage<SecondGoodsVo> searchGoodsList(IPage<SecondGoodsVo> page,Integer userId, SecondGoodsVo secondGoodsVo);
 }

+ 99 - 15
alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java

@@ -1,19 +1,23 @@
 package shop.alien.second.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 import shop.alien.entity.second.SecondGoods;
-import shop.alien.entity.store.LifeUser;
-import shop.alien.entity.store.StoreImg;
 import shop.alien.entity.second.vo.SecondGoodsVo;
+import shop.alien.entity.store.LifeAppealManage;
+import shop.alien.entity.store.StoreImg;
+import shop.alien.entity.store.vo.LifeAppealManageVo;
+import shop.alien.entity.store.vo.LifeUserVo;
+import shop.alien.mapper.LifeBlacklistMapper;
 import shop.alien.mapper.LifeUserMapper;
 import shop.alien.mapper.StoreImgMapper;
-import shop.alien.mapper.StoreInfoMapper;
 import shop.alien.mapper.second.SecondGoodsMapper;
 import shop.alien.second.service.SecondGoodsService;
 import shop.alien.util.common.netease.ImageCheckUtil;
@@ -48,6 +52,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
     private final StoreImgMapper storeImgMapper;
 
     /**
+     * 黑名单Mapper
+     */
+    private final LifeBlacklistMapper lifeBlacklistMapper;
+
+    /**
      * 保存商品为草稿状态
      * @param goods 商品实体
      * @return 是否成功保存
@@ -304,44 +313,110 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
 
     /**
      * 搜索商品列表
+     *
      * @param page 分页参数
-     * @param currentLatitude 当前位置纬度
-     * @param currentLongitude 当前位置经度
-     * @param orderData 排序字段
-     * @param orderType 排序方式
+     * @param userId 用户ID
+     * @param secondGoodsVo 搜索参数
      * @return 商品列表
      */
     @Override
-    public IPage<SecondGoodsVo> searchGoodsList(IPage<SecondGoodsVo> page, Double currentLatitude, Double currentLongitude, String orderData, Integer orderType, Integer userId) {
+    public IPage<SecondGoodsVo> searchGoodsList(IPage<SecondGoodsVo> page,Integer userId, SecondGoodsVo secondGoodsVo) {
         // 获取商品屏蔽列表
-        List<SecondGoods>  shieldedGoodsList = getShieldedGoodsList(userId);
+        List<SecondGoods> shieldedGoodsList = getShieldedGoodsList(userId);
         // 提取屏蔽商品ID
         List<Integer> shieldedGoodsIds = shieldedGoodsList.stream()
                 .map(SecondGoods::getId)
                 .collect(Collectors.toList());
+        if (CollectionUtil.isEmpty(shieldedGoodsIds)) {
+            shieldedGoodsIds = Collections.emptyList();
+        }
         // 获取拉黑列表
-        List<Integer> userIdList = lifeBlackMapper.getBlackList(userId);
+        List<Integer> userIdList = lifeBlacklistMapper.getBlackList(userId);
         if (CollectionUtil.isEmpty(userIdList)) {
             userIdList = Collections.emptyList();
         }
+        secondGoodsVo.setShieldedGoodsIds(shieldedGoodsIds);
+        secondGoodsVo.setUserIdList(userIdList);
+
+        // 获取搜索结果分页列表
+        IPage<SecondGoodsVo> searchGoodsList = getSecondGoodsVoIPage(page, secondGoodsVo, shieldedGoodsIds, userIdList);
 
-        IPage<SecondGoodsVo> searchGoodsList = secondGoodsMapper.searchGoodsList(page, currentLatitude, currentLongitude, orderData, orderType,shieldedGoodsIds, userIdList);
         // 批量设置商品图片信息
         batchSetGoodsImages(searchGoodsList);
         // 批量设置用户信息
+
         batchSetUserInfo(searchGoodsList);
         return searchGoodsList;
     }
 
+    /**
+     * 查询搜索结果
+     * @param page 分页参数
+     * @param secondGoodsVo 查询参数
+     * @param shieldedGoodsIds 屏蔽商品id
+     * @param userIdList 屏蔽用户id
+     * @return IPage<SecondGoodsVo> 搜索结果
+     */
+    private IPage<SecondGoodsVo> getSecondGoodsVoIPage(IPage<SecondGoodsVo> page, SecondGoodsVo secondGoodsVo, List<Integer> shieldedGoodsIds, List<Integer> userIdList) {
+        QueryWrapper<SecondGoodsVo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.notIn(CollectionUtil.isNotEmpty(shieldedGoodsIds), "sg.id", shieldedGoodsIds)
+                .notIn(CollectionUtil.isNotEmpty(userIdList), "sg.user_id", userIdList)
+                .eq("sg.delete_flag", 0)
+                .orderByAsc("distance");
+        // 添加对 searchData 的模糊查询
+        if (!StringUtils.isEmpty(secondGoodsVo.getSearchData())) {
+            String searchData = "%" + secondGoodsVo.getSearchData() + "%";
+            queryWrapper.and(wrapper -> wrapper
+                .like("sg.label", searchData)
+                .or()
+                .like("sg.title", searchData)
+                .or()
+                .like("sg.describe", searchData)
+                .or()
+                .like("sgc1.category_name", searchData)
+                .or()
+                .like("sgc2.category_name", searchData)
+                .or()
+                .like("sg.topic", searchData)
+            );
+        }
+        // 正序
+        if (secondGoodsVo.getOrderType() == 1){
+            queryWrapper.orderByAsc(secondGoodsVo.getOrderData());
+        }
+        // 倒序
+        if (secondGoodsVo.getOrderType() == 2){
+            queryWrapper.orderByDesc(secondGoodsVo.getOrderData());
+        }
+        // 返回分页结果
+        IPage<SecondGoodsVo> searchGoodsList = secondGoodsMapper.searchGoodsList(page, secondGoodsVo.getCurrentLatitude(), secondGoodsVo.getCurrentLongitude() ,queryWrapper);
+        searchGoodsList.getRecords().forEach(secondGoods -> {
+            secondGoods.setPosition(secondGoods.getSearchData());
+        });
+        return searchGoodsList;
+    }
+
+    /**
+     * 批量设置用户信息
+     * @param searchGoodsList 搜索结果
+     */
     private void batchSetUserInfo(IPage<SecondGoodsVo> searchGoodsList) {
         // 批量获取用户信息(头像,用户姓名,用户id)
         if (CollectionUtil.isNotEmpty(searchGoodsList.getRecords())) {
             List<Integer> userIds = searchGoodsList.getRecords().stream()
                     .map(SecondGoodsVo::getUserId)
                     .collect(Collectors.toList());
-                    Map<Integer, LifeUser> userInfoMap = lifeUserMapper.getUserByIds(userIds);
+                    // 批量获取用户信息
+                    QueryWrapper<LifeUserVo> queryWrapper = new QueryWrapper<>();
+                    queryWrapper.in("id", userIds); // 使用字符串 "user_id" 直接指定数据库列名
+                    queryWrapper.in("delete_flag", 0);
+                    List<LifeUserVo> userInfoList = lifeUserMapper.getUserByIds(queryWrapper);
+                    // 根据用户id进行分组 返回map
+                    Map<Integer, LifeUserVo> userInfoMap = userInfoList.stream()
+                            .collect(Collectors.toMap(LifeUserVo::getId, lifeUserVo -> lifeUserVo));
+                    // 获取用户信息
                     for (SecondGoodsVo goods : searchGoodsList.getRecords()) {
-                        LifeUser userInfo = userInfoMap.get(goods.getUserId());
+                        LifeUserVo userInfo = userInfoMap.get(goods.getUserId());
                         if (userInfo != null){
                             // 用户名称
                             goods.setUserName(userInfo.getUserName());
@@ -368,7 +443,16 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
             List<Integer> goodsIds = searchGoodsList.getRecords().stream()
                     .map(SecondGoodsVo::getId)
                     .collect(Collectors.toList());
-                    Map<Integer, List<StoreImg>> imagesMap = storeImgMapper.getImgsByGoodsIds(goodsIds);
+                    // 批量获取图片信息
+                    QueryWrapper<StoreImg> queryWrapper = new QueryWrapper<>();
+                    queryWrapper.lambda()
+                            .eq(StoreImg::getImgType, 18) // 商品 图片
+                            .eq(StoreImg::getDeleteFlag, 0)
+                            .in(StoreImg::getStoreId, goodsIds);
+                    List<StoreImg> imagesList= storeImgMapper.getImgsByGoodsIds(queryWrapper);
+                    // 集合根據商品id进行分组返回map
+                    Map<Integer, List<StoreImg>> imagesMap = imagesList.stream().collect(Collectors.groupingBy(StoreImg::getStoreId));
+                    // 遍历
                     for (SecondGoodsVo goods : searchGoodsList.getRecords()) {
                         // 提取图片url
                         List<StoreImg> images = imagesMap.get(goods.getId());