Browse Source

更新商家查询逻辑

woody 1 năm trước cách đây
mục cha
commit
b0a646094b

+ 107 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDTO.java

@@ -0,0 +1,107 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.chelvc.cloud.vehicle.api.constant.ContentStatus;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 商家信息
+ *
+ * @author Woody
+ * @date 2023/5/4
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MerchantDTO implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 分销用户ID
+     */
+    private Long referrerId;
+
+    /**
+     * 商家名称
+     */
+    private String name;
+
+    /**
+     * Logo
+     */
+    private String logo;
+
+    /**
+     * 封面
+     */
+    private String cover;
+
+    /**
+     * 联系人
+     */
+    private String liaison;
+
+    /**
+     * 联系电话
+     */
+    private String mobile;
+
+    /**
+     * 商家等级
+     */
+    private Integer level;
+
+    /**
+     * 详细地址
+     */
+    private String address;
+
+    /**
+     * 经度
+     */
+    private Double longitude;
+
+    /**
+     * 纬度
+     */
+    private Double latitude;
+
+    /**
+     * 距离(米)
+     */
+    private Integer distance;
+
+    /**
+     * 是否推荐
+     */
+    private Boolean recommend;
+
+    /**
+     * 详细介绍
+     */
+    private String description;
+
+    /**
+     * 商家状态
+     */
+    private ContentStatus status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 27 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/NearbyQueryParam.java

@@ -0,0 +1,27 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 附近信息查询参数
+ *
+ * @author Woody
+ * @date 2023/5/5
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+public class NearbyQueryParam extends PointQueryParam {
+    /**
+     * 距离(米)
+     */
+    private int distance;
+}

+ 30 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/PointQueryParam.java

@@ -0,0 +1,30 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import java.io.Serializable;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 经纬度查询参数
+ *
+ * @author Woody
+ * @date 2023/5/5
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PointQueryParam implements Serializable {
+    /**
+     * 经度
+     */
+    private double longitude;
+
+    /**
+     * 纬度
+     */
+    private double latitude;
+}

+ 33 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java

@@ -0,0 +1,33 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import java.util.List;
+
+import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.param.NearbyQueryParam;
+import com.chelvc.cloud.vehicle.api.param.PointQueryParam;
+
+/**
+ * 商家业务接口
+ *
+ * @author Woody
+ * @date 2023/5/4
+ */
+public interface MerchantService {
+    /**
+     * 获取推荐商家
+     *
+     * @param param 查询参数
+     * @param size  商家数量
+     * @return 商家信息列表
+     */
+    List<MerchantDTO> listRecommendMerchants(PointQueryParam param, int size);
+
+    /**
+     * 获取附近商家
+     *
+     * @param param 查询参数
+     * @param size  商家数量
+     * @return 商家信息列表
+     */
+    List<MerchantDTO> listNearbyMerchants(NearbyQueryParam param, int size);
+}

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

@@ -1,8 +1,14 @@
 package com.chelvc.cloud.vehicle.server.dao;
 package com.chelvc.cloud.vehicle.server.dao;
 
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.param.NearbyQueryParam;
+import com.chelvc.cloud.vehicle.api.param.PointQueryParam;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
 /**
  * 商家数据操作接口
  * 商家数据操作接口
@@ -12,4 +18,21 @@ import org.apache.ibatis.annotations.Mapper;
  */
  */
 @Mapper
 @Mapper
 public interface MerchantMapper extends BaseMapper<Merchant> {
 public interface MerchantMapper extends BaseMapper<Merchant> {
+    /**
+     * 获取推荐商家
+     *
+     * @param param 查询参数
+     * @param size  商家数量
+     * @return 商家信息列表
+     */
+    List<MerchantDTO> listRecommendMerchants(@Param("param") PointQueryParam param, @Param("size") int size);
+
+    /**
+     * 获取附近商家
+     *
+     * @param param 查询参数
+     * @param size  商家数量
+     * @return 商家信息列表
+     */
+    List<MerchantDTO> listNearbyMerchants(@Param("param") NearbyQueryParam param, @Param("size") int size);
 }
 }

+ 2 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Enquire.java

@@ -57,12 +57,12 @@ public class Enquire implements Entity<Long> {
     /**
     /**
      * 经度
      * 经度
      */
      */
-    private Double latitude;
+    private Double longitude;
 
 
     /**
     /**
      * 纬度
      * 纬度
      */
      */
-    private Double longitude;
+    private Double latitude;
 
 
     /**
     /**
      * 询价状态
      * 询价状态

+ 4 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java

@@ -76,14 +76,14 @@ public class Merchant implements Entity<Long> {
     private String address;
     private String address;
 
 
     /**
     /**
-     * 
+     * 
      */
      */
-    private Double latitude;
+    private Double longitude;
 
 
     /**
     /**
-     * 
+     * 
      */
      */
-    private Double longitude;
+    private Double latitude;
 
 
     /**
     /**
      * 是否推荐
      * 是否推荐

+ 19 - 3
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -1,10 +1,16 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 package com.chelvc.cloud.vehicle.server.service.impl;
 
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.param.NearbyQueryParam;
+import com.chelvc.cloud.vehicle.api.param.PointQueryParam;
 import com.chelvc.cloud.vehicle.server.dao.MerchantMapper;
 import com.chelvc.cloud.vehicle.server.dao.MerchantMapper;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import com.chelvc.cloud.vehicle.server.service.MerchantService;
 import com.chelvc.cloud.vehicle.server.service.MerchantService;
-import org.springframework.stereotype.Service;
+import lombok.NonNull;
+import org.apache.dubbo.config.annotation.DubboService;
 
 
 /**
 /**
  * 商家业务操作实现
  * 商家业务操作实现
@@ -12,6 +18,16 @@ import org.springframework.stereotype.Service;
  * @author Woody
  * @author Woody
  * @date 2023/5/2
  * @date 2023/5/2
  */
  */
-@Service
-public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> implements MerchantService {
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.MerchantService.class)
+public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> implements MerchantService,
+        com.chelvc.cloud.vehicle.api.service.MerchantService {
+    @Override
+    public List<MerchantDTO> listRecommendMerchants(@NonNull PointQueryParam param, int size) {
+        return this.baseMapper.listRecommendMerchants(param, size);
+    }
+
+    @Override
+    public List<MerchantDTO> listNearbyMerchants(@NonNull NearbyQueryParam param, int size) {
+        return this.baseMapper.listNearbyMerchants(param, size);
+    }
 }
 }

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

@@ -0,0 +1,36 @@
+<?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="com.chelvc.cloud.vehicle.server.dao.MerchantMapper">
+    <sql id="BASIC_MERCHANT_SELECT">
+        select mt.id, mt.user_id, mt.referrer_id, mt.name, mt.logo, mt.cover, mt.liaison, mt.mobile, mt.level,
+        mt.address, mt.longitude, mt.latitude, mt.recommend, mt.status, mt.create_time
+        from `merchant` mt
+    </sql>
+
+    <select id="listRecommendMerchants" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
+        select mt.id, mt.user_id, mt.referrer_id, mt.name, mt.logo, mt.cover, mt.liaison, mt.mobile, mt.level,
+        mt.address, mt.longitude, mt.latitude, mt.recommend, mt.status, mt.create_time,
+        round(st_distance_sphere(
+            point(mt.longitude, mt.latitude), point(#{param.longitude}, #{param.latitude})
+        )) distance
+        from `merchant` mt
+        where mt.status = 'ONLINE' and mt.recommend = 1
+        order mt.create_time desc limit #{size}
+    </select>
+
+    <select id="listNearbyMerchants" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
+        select mt.id, mt.user_id, mt.referrer_id, mt.name, mt.logo, mt.cover, mt.liaison, mt.mobile, mt.level,
+        mt.address, mt.longitude, mt.latitude, t.distance, mt.recommend, mt.status, mt.create_time
+        from `merchant` mt
+        inner join (
+            select id,
+            round(st_distance_sphere(
+                point(longitude, latitude), point(#{param.longitude}, #{param.latitude})
+            )) distance
+            from `merchant`
+            where status = 'ONLINE'
+            having distance <![CDATA[<=]]> #{param.distance}
+            order by distance asc limit #{size}
+        ) t on t.id = mt.id
+    </select>
+</mapper>