|
|
@@ -224,33 +224,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
t.n_num AS servedCount,
|
|
|
p.project_id AS projectId,
|
|
|
p.project_current_price AS currentPrice,
|
|
|
- <!-- 距离展示文本:米/千米格式化 -->
|
|
|
- CASE calc.distanceMeter
|
|
|
- WHEN 999999999 THEN '未知'
|
|
|
- WHEN calc.distanceMeter < 1000 THEN CONCAT(ROUND(calc.distanceMeter, 0), 'm')
|
|
|
- ELSE CONCAT(ROUND(calc.distanceMeter / 1000, 2), 'km')
|
|
|
- END AS distanceStr,
|
|
|
- calc.distanceMeter AS distanceText
|
|
|
- FROM ma_technician t
|
|
|
+ CASE
|
|
|
+ WHEN calc.distanceMeter = 999999999 THEN '未知'
|
|
|
+ WHEN calc.distanceMeter < 1000 THEN CONCAT( ROUND( calc.distanceMeter, 0 ), 'm' )
|
|
|
+ ELSE CONCAT( ROUND( calc.distanceMeter / 1000, 2 ), 'km' )
|
|
|
+ END AS distanceText
|
|
|
+ FROM
|
|
|
+ ma_technician t
|
|
|
INNER JOIN ma_project p ON t.id = p.merchant_id
|
|
|
LEFT JOIN t_address addr ON t.id = addr.merchant_id AND addr.type = 1 AND addr.is_delete = 0
|
|
|
- <!-- 子查询统一计算距离,消除公式重复 -->
|
|
|
LEFT JOIN (
|
|
|
SELECT
|
|
|
addr_sub.id AS addrId,
|
|
|
- <!-- 有用户坐标+技师有效坐标才计算距离,否则给超大值 -->
|
|
|
<if test="dto.latitude != null and dto.longitude != null and dto.latitude != 0 and dto.longitude != 0">
|
|
|
- IF(addr_sub.latitude IS NULL OR addr_sub.longitude IS NULL OR addr_sub.latitude=0 OR addr_sub.longitude=0,
|
|
|
+ IF(
|
|
|
+ addr_sub.latitude IS NULL OR addr_sub.longitude IS NULL OR addr_sub.latitude=0 OR addr_sub.longitude=0,
|
|
|
999999999,
|
|
|
- ROUND(6371 * ACOS(
|
|
|
+ ROUND(
|
|
|
+ 6371 * ACOS(
|
|
|
COS(RADIANS(#{dto.latitude})) * COS(RADIANS(addr_sub.latitude))
|
|
|
* COS(RADIANS(addr_sub.longitude) - RADIANS(#{dto.longitude}))
|
|
|
+ SIN(RADIANS(#{dto.latitude})) * SIN(RADIANS(addr_sub.latitude))
|
|
|
- ) * 1000)
|
|
|
+ ) * 1000
|
|
|
+ )
|
|
|
+ ) AS distanceMeter
|
|
|
</if>
|
|
|
<if test="dto.latitude == null or dto.longitude == null or dto.latitude == 0 or dto.longitude == 0">
|
|
|
- 999999999
|
|
|
- </if> AS distanceMeter
|
|
|
+ 999999999 AS distanceMeter
|
|
|
+ </if>
|
|
|
FROM t_address addr_sub
|
|
|
) calc ON addr.id = calc.addrId
|
|
|
|
|
|
@@ -258,13 +259,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
p.project_id = #{dto.projectId}
|
|
|
AND p.audit_status = 1
|
|
|
AND p.is_delete = 0
|
|
|
- AND addr.latitude != 0 AND addr.longitude != 0
|
|
|
|
|
|
- <!-- 动态排序 -->
|
|
|
<trim prefix="ORDER BY">
|
|
|
<choose>
|
|
|
<when test="dto.latitude != null and dto.longitude != null and dto.latitude != 0 and dto.longitude != 0">
|
|
|
- distanceMeter ASC, t.n_num DESC
|
|
|
+ calc.distanceMeter ASC, t.n_num DESC
|
|
|
</when>
|
|
|
<otherwise>
|
|
|
t.n_num DESC
|