浏览代码

附近商家、推荐商家支持分页查询

liude 1 年之前
父节点
当前提交
c2c4aa1e2d

+ 9 - 0
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/MerchantClient.java

@@ -7,6 +7,7 @@ import com.chelvc.cloud.vehicle.client.constant.MerchantStatus;
 import com.chelvc.cloud.vehicle.client.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.client.dto.MerchantDetailDTO;
 import com.chelvc.cloud.vehicle.client.dto.MerchantRankDTO;
+import com.chelvc.cloud.vehicle.client.param.LocationQueryPagingParam;
 import com.chelvc.cloud.vehicle.client.param.LocationQueryParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantModifyParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantPagingParam;
@@ -42,6 +43,14 @@ public interface MerchantClient {
     @GetMapping("/merchant/listNearbyMerchants")
     List<MerchantDTO> listNearbyMerchants(@SpringQueryMap LocationQueryParam param, @RequestParam("size") int size);
 
+
+    /**
+     * @param param 查询参数
+     * @return 商家信息分页列表
+     */
+    @GetMapping("/merchant/indexMerchantPaging")
+    Pagination<MerchantDTO> indexMerchantPaging(@SpringQueryMap LocationQueryPagingParam param);
+
     /**
      * 获取推荐商家
      *

+ 56 - 0
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/param/LocationQueryPagingParam.java

@@ -0,0 +1,56 @@
+package com.chelvc.cloud.vehicle.client.param;
+
+import com.chelvc.framework.common.model.Paging;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 经纬度查询参数
+ *
+ * @author liude
+ * @date 2024/5/1
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class LocationQueryPagingParam implements Serializable {
+    /**
+     * 地区编码
+     */
+    @NotNull(message = "地区编码不能为空")
+    @Min(value = 100000, message = "地区编码不能小于100000")
+    @Max(value = 999999, message = "地区编码不能大于999999")
+    private Integer region;
+
+    /**
+     * 经度
+     */
+    @NotNull(message = "经度不能为空")
+    private Double longitude;
+
+    /**
+     * 纬度
+     */
+    @NotNull(message = "纬度不能为空")
+    private Double latitude;
+
+    /**
+     * 分页信息
+     */
+    @NotNull(message = "分页不能为空")
+    private Paging paging;
+    /**
+     * 查询类型 0-附近商家  1- 推荐商家
+     */
+    @NotNull(message = "查询类型不能为空")
+    private Integer queryType;
+
+}

+ 12 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/MerchantController.java

@@ -7,6 +7,7 @@ import com.chelvc.cloud.vehicle.client.constant.MerchantStatus;
 import com.chelvc.cloud.vehicle.client.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.client.dto.MerchantDetailDTO;
 import com.chelvc.cloud.vehicle.client.dto.MerchantRankDTO;
+import com.chelvc.cloud.vehicle.client.param.LocationQueryPagingParam;
 import com.chelvc.cloud.vehicle.client.param.LocationQueryParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantModifyParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantPagingParam;
@@ -52,6 +53,17 @@ public class MerchantController {
         return merchantService.listNearbyMerchants(param, size);
     }
 
+    /**
+     * 分页获取附近商家
+     *
+     * @param param 查询参数
+     * @return 商家信息列表
+     */
+    @GetMapping("/merchant/indexMerchantPaging")
+    public Pagination<MerchantDTO> indexMerchantPaging(@SpringQueryMap LocationQueryPagingParam param) {
+        return merchantService.indexMerchantPaging(param);
+    }
+
     /**
      * 获取推荐商家
      *

+ 22 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java

@@ -1,12 +1,16 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.chelvc.cloud.vehicle.client.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.client.dto.MerchantRankCountDTO;
 import com.chelvc.cloud.vehicle.client.dto.MerchantRankDTO;
+import com.chelvc.cloud.vehicle.client.param.LocationQueryPagingParam;
 import com.chelvc.cloud.vehicle.client.param.LocationQueryParam;
 import com.chelvc.cloud.vehicle.client.param.MerchantQueryParam;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
+import com.chelvc.framework.common.model.Pagination;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -32,10 +36,28 @@ public interface MerchantMapper extends BaseMapper<Merchant> {
      */
     List<MerchantDTO> listNearbyMerchants(@Param("param") LocationQueryParam param, @Param("size") int size);
 
+
+    /**
+     * 分页获取附近商家
+     *
+     * @param param 查询参数
+     * @return 商家信息分页列表
+     */
+    Page<MerchantDTO> listNearbyMerchantPaging(IPage<LocationQueryPagingParam> page,@Param("param")LocationQueryPagingParam param);
+
     /**
      * 获取推荐商家
      *
      * @param param 查询参数
+     * @return 商家信息分页列表
+     */
+    Page<MerchantDTO> listRecommendMerchantPaging(IPage<LocationQueryPagingParam> page,@Param("param")LocationQueryPagingParam param);
+
+
+    /**
+     * 分页获取推荐商家
+     *
+     * @param param 查询参数
      * @param size  商家数量
      * @return 商家信息列表
      */

+ 7 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java

@@ -77,6 +77,13 @@ public interface MerchantService extends IService<Merchant> {
      * @return 商家信息列表
      */
     List<MerchantDTO> listNearbyMerchants(LocationQueryParam param, int size);
+    /**
+     * 分页获取附近商家
+     *
+     * @param param 查询参数
+     * @return 商家信息列表
+     */
+    Pagination<MerchantDTO> indexMerchantPaging (LocationQueryPagingParam param);
 
     /**
      * 获取推荐商家

+ 15 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -1,6 +1,7 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -68,6 +69,20 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
         return this.baseMapper.listNearbyMerchants(param, size);
     }
 
+    @Override
+    public Pagination<MerchantDTO> indexMerchantPaging(@NonNull LocationQueryPagingParam param) {
+        IPage<LocationQueryPagingParam> iPage = new Page<>();
+        iPage.setCurrent(param.getPaging().getNumber());
+        iPage.setSize(param.getPaging().getSize());
+        if (0 == param.getQueryType()){
+            Page<MerchantDTO> list = this.baseMapper.listNearbyMerchantPaging(iPage,param);
+            return DatabaseContextHolder.pagination(list);
+        }else{
+            Page<MerchantDTO> page = this.baseMapper.listRecommendMerchantPaging(iPage,param);
+            return DatabaseContextHolder.pagination(page);
+        }
+    }
+
     @Override
     public List<MerchantDTO> listRecommendMerchants(@NonNull LocationQueryParam param, int size) {
         return this.baseMapper.listRecommendMerchants(param, size);

+ 22 - 0
vehicle-server/src/main/resources/mapper/MerchantMapper.xml

@@ -18,6 +18,17 @@
         order by distance asc limit #{size}
     </select>
 
+
+    <select id="listNearbyMerchantPaging" resultType="com.chelvc.cloud.vehicle.client.dto.MerchantDTO">
+        select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,mt.business_status,
+               round(st_distance_sphere(
+                       point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
+                   )) distance
+        from `merchant` mt
+        where mt.region = #{param.region} and mt.status = 'ONLINE'
+        order by distance asc
+    </select>
+
     <select id="listRecommendMerchants" resultType="com.chelvc.cloud.vehicle.client.dto.MerchantDTO">
         select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,mt.business_status,
         round(st_distance_sphere(
@@ -28,6 +39,17 @@
         order by distance asc limit #{size}
     </select>
 
+
+    <select id="listRecommendMerchantPaging" resultType="com.chelvc.cloud.vehicle.client.dto.MerchantDTO">
+        select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,mt.business_status,
+               round(st_distance_sphere(
+                       point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
+                   )) distance
+        from `merchant` mt
+        where mt.region = #{param.region} and mt.status = 'ONLINE' and mt.recommend = 1
+        order by distance asc
+    </select>
+
     <select id="listSimpleMerchants" resultType="com.chelvc.cloud.vehicle.client.dto.MerchantDTO">
         select mt.id, mt.name, mt.logo, mt.score, mt.sale, mt.address,mt.business_status,
         round(st_distance_sphere(