|
|
@@ -218,21 +218,62 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
) AS sub
|
|
|
ORDER BY nNum DESC -- 或者 nNum DESC
|
|
|
</select>
|
|
|
+
|
|
|
<select id="selectMerchantList" resultType="com.ylx.project.domain.bookMerchant.vo.BookMerchantVO">
|
|
|
SELECT
|
|
|
- mp.id,
|
|
|
- mp.merchant_id AS merchantId,
|
|
|
- m.te_nick_name AS merchantNickName,
|
|
|
- m.te_avatar AS merchantAvatar,
|
|
|
- m.n_star AS merchantStar,
|
|
|
- mp.project_current_price AS currentPrice,
|
|
|
- mp.project_users_num AS servedCount
|
|
|
- FROM ma_project mp
|
|
|
- LEFT JOIN ma_technician m ON mp.merchant_id = m.id
|
|
|
- WHERE mp.project_id = #{projectId}
|
|
|
- AND mp.audit_status = 1 -- 仅展示审核通过的
|
|
|
- AND mp.project_is_enable = 0 -- 未申请下架
|
|
|
- AND mp.is_delete = 0
|
|
|
- ORDER BY mp.project_users_num DESC -- 按真实销量降序排列
|
|
|
+ p.id,
|
|
|
+ t.id AS merchantId,
|
|
|
+ t.te_nick_name AS merchantNickName,
|
|
|
+ t.te_avatar AS merchantAvatar,
|
|
|
+ t.n_star AS merchantStar,
|
|
|
+ t.n_num AS servedCount,
|
|
|
+ p.project_id AS projectId,
|
|
|
+ p.project_current_price AS currentPrice,
|
|
|
+ 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,
|
|
|
+ 999999999,
|
|
|
+ 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
|
|
|
+ )
|
|
|
+ ) AS distanceMeter
|
|
|
+ </if>
|
|
|
+ <if test="dto.latitude == null or dto.longitude == null or dto.latitude == 0 or dto.longitude == 0">
|
|
|
+ 999999999 AS distanceMeter
|
|
|
+ </if>
|
|
|
+ FROM t_address addr_sub
|
|
|
+ ) calc ON addr.id = calc.addrId
|
|
|
+
|
|
|
+ WHERE
|
|
|
+ p.project_id = #{dto.projectId}
|
|
|
+ AND p.audit_status = 1
|
|
|
+ AND p.is_delete = 0
|
|
|
+
|
|
|
+ <trim prefix="ORDER BY">
|
|
|
+ <choose>
|
|
|
+ <when test="dto.latitude != null and dto.longitude != null and dto.latitude != 0 and dto.longitude != 0">
|
|
|
+ calc.distanceMeter ASC, t.n_num DESC
|
|
|
+ </when>
|
|
|
+ <otherwise>
|
|
|
+ t.n_num DESC
|
|
|
+ </otherwise>
|
|
|
+ </choose>
|
|
|
+ </trim>
|
|
|
</select>
|
|
|
</mapper>
|