Przeglądaj źródła

首页按摩商户全部推荐距离展示优化

郭子栋 5 dni temu
rodzic
commit
64b56ab419

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MassageAllMerchantsVo.java

@@ -45,7 +45,7 @@ public class MassageAllMerchantsVo {
      * 技师距离(公里)
      */
     @ApiModelProperty("技师距离(公里)")
-    private BigDecimal distance ;
+    private BigDecimal distanceShow;
     /**
      * 头像
      */

+ 59 - 43
nightFragrance-massage/src/main/resources/mapper/massage/MaProjectMapper.xml

@@ -145,57 +145,73 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <!-- 首页按摩推荐商户点击全部查询按摩所有商户-->
     <select id="getMassageAllMerchants" resultType="com.ylx.massage.domain.vo.MassageAllMerchantsVo">
         SELECT
-            p.project_id      AS projectId,
-            p.project_name    AS projectName,
-            t.te_name         AS merchantName,
-            t.id              AS merchantId,
-            COALESCE(stat.order_count, 0) AS nNum,
-            CASE
-                WHEN #{dto.longitude} IS NOT NULL AND #{dto.latitude} IS NOT NULL
-                    THEN ROUND(
-                        ST_Distance_Sphere(
-                                POINT(addr.longitude, addr.latitude),
-                                POINT(#{dto.longitude}, #{dto.latitude})
-                            ), 0   -- 直接返回米,保留整数
-                    )
-                ELSE NULL
-                END AS distance,
-            t.te_avatar       AS teAvatar
+        projectId,
+        projectName,
+        merchantName,
+        merchantId,
+        nNum,
+        CASE
+        WHEN distance_meters IS NOT NULL AND distance_meters >= 1000 THEN
+        CONCAT(ROUND(distance_meters / 1000.0, 1), 'km')
+        WHEN distance_meters IS NOT NULL THEN
+        CONCAT(distance_meters, 'm')
+        ELSE NULL
+        END AS distanceShow,
+        teAvatar
+        FROM (
+        SELECT
+        p.project_id      AS projectId,
+        p.project_name    AS projectName,
+        t.te_name         AS merchantName,
+        t.id              AS merchantId,
+        COALESCE(stat.order_count, 0) AS nNum,
+        CASE
+        WHEN #{dto.longitude} IS NOT NULL AND #{dto.latitude} IS NOT NULL
+        THEN ROUND(
+        ST_Distance_Sphere(
+        POINT(addr.longitude, addr.latitude),
+        POINT(#{dto.longitude}, #{dto.latitude})
+        ), 0
+        )
+        ELSE NULL
+        END AS distance_meters,
+        t.te_avatar       AS teAvatar
         FROM ma_project p
         INNER JOIN ma_technician t ON p.merchant_id = CAST(t.id AS CHAR)
         LEFT JOIN (
-            SELECT
-                merchant_id,
-                longitude,
-                latitude
-            FROM t_address
-            WHERE user_type = 2
-              AND type = 1
-              AND is_delete = 0
+        SELECT
+        merchant_id,
+        longitude,
+        latitude
+        FROM t_address
+        WHERE user_type = 2
+        AND type = 1
+        AND is_delete = 0
         ) addr ON t.id = addr.merchant_id
         LEFT JOIN (
-            SELECT
-                merchant_id,
-                COUNT(*) AS order_count
-            FROM t_order
-            WHERE status = 6
-              AND project_type = 1
-              AND is_delete = 0
-            GROUP BY merchant_id
+        SELECT
+        merchant_id,
+        COUNT(*) AS order_count
+        FROM t_order
+        WHERE status = 6
+        AND project_type = 1
+        AND is_delete = 0
+        GROUP BY merchant_id
         ) stat ON stat.merchant_id = t.id
         WHERE p.audit_status = 1
-          AND p.is_delete = 0
-          AND p.merchant_type = 1
-          AND p.project_is_enable = 0
-          AND t.audit_status = 2
-          AND t.is_delete = 0
-          AND t.service_state = 1
-          AND t.te_area_code = #{dto.cityCode}   -- 使用技师的区域编码过滤
-          AND addr.merchant_id IS NOT NULL -- 必须有默认地址(用于距离计算)
-         <if test="dto.projectId != null and dto.projectId != ''">
+        AND p.is_delete = 0
+        AND p.merchant_type = 1
+        AND p.project_is_enable = 0
+        AND t.audit_status = 2
+        AND t.is_delete = 0
+        AND t.service_state = 1
+        AND t.te_area_code = #{dto.cityCode}
+        AND addr.merchant_id IS NOT NULL
+        <if test="dto.projectId != null and dto.projectId != ''">
             AND p.project_id = #{dto.projectId}
-         </if>
-        ORDER BY stat.order_count DESC
+        </if>
+        ) AS sub
+        ORDER BY nNum DESC;
     </select>
     <select id="selectMerchantList" resultType="com.ylx.project.domain.bookMerchant.vo.BookMerchantVO">
         SELECT

+ 2 - 2
nightFragrance-massage/src/main/resources/mapper/massage/MaTechnicianMapper.xml

@@ -473,8 +473,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             t.avatar AS avatar,
             CASE
                 WHEN t.dist_meters IS NULL THEN NULL
-                WHEN t.dist_meters &lt; 1000 THEN CONCAT(ROUND(t.dist_meters, 0), '')
-                ELSE CONCAT(ROUND(t.dist_meters / 1000, 1), '公里')
+                WHEN t.dist_meters &lt; 1000 THEN CONCAT(ROUND(t.dist_meters, 0), 'm')
+                ELSE CONCAT(ROUND(t.dist_meters / 1000, 1), 'km')
                 END AS distanceShow
         FROM (
                  SELECT