|
|
@@ -120,42 +120,78 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
</delete>
|
|
|
<!-- 推荐项目-->
|
|
|
<select id="getMassageProjectRecommend" resultType="com.ylx.massage.domain.vo.MassageProjectRecommendVo">
|
|
|
- WITH distinct_project AS (
|
|
|
- SELECT
|
|
|
- project_id,
|
|
|
- MIN(project_name) AS project_name, -- 去重,取任意一个名称
|
|
|
- MIN(project_duration) AS project_duration -- 去重,取任意一个工期
|
|
|
- FROM ma_project
|
|
|
- WHERE is_delete = 0
|
|
|
- AND audit_status = 1
|
|
|
- GROUP BY project_id
|
|
|
- )
|
|
|
SELECT
|
|
|
- d.project_id AS projectId,
|
|
|
- d.project_name AS projectName,
|
|
|
- d.project_duration AS projectDuration,
|
|
|
- o.sales AS sales,
|
|
|
- t.avg_current_price AS avgCurrentPrice,
|
|
|
- j.highlight AS highlight
|
|
|
- FROM distinct_project d
|
|
|
- LEFT JOIN project j ON d.project_id = j.id
|
|
|
- LEFT JOIN (
|
|
|
+ pro.id AS projectId,
|
|
|
+ pro.title AS projectName,
|
|
|
+ pro.standard_duration AS projectDuration,
|
|
|
+ COUNT(o.id) AS sales,
|
|
|
+ AVG(mp.project_current_price) AS avgCurrentPrice,
|
|
|
+ pro.highlight AS highlight
|
|
|
+ FROM project pro
|
|
|
+ INNER JOIN ma_project mp ON CAST(mp.project_id AS UNSIGNED) = pro.id AND mp.merchant_type = '0' AND mp.is_delete = 0 AND mp.project_is_enable = 1
|
|
|
+ LEFT JOIN t_order o ON o.project_id = pro.id AND o.project_type = 1 AND o.status = 6 AND o.is_delete = 0
|
|
|
+ WHERE pro.is_delete = 0
|
|
|
+ AND EXISTS (
|
|
|
+ SELECT 1 FROM ma_technician tech
|
|
|
+ WHERE tech.id = CAST(mp.merchant_id AS UNSIGNED)
|
|
|
+ AND tech.te_area_code = #{cityCode}
|
|
|
+ AND tech.is_delete = 0
|
|
|
+ AND tech.audit_status = 2 -- 审核通过
|
|
|
+ AND tech.service_state = 1 -- 可服务
|
|
|
+ )
|
|
|
+ GROUP BY pro.id, pro.title, pro.standard_duration, pro.highlight
|
|
|
+ ORDER BY sales DESC, pro.id ASC
|
|
|
+ </select>
|
|
|
+ <!-- 首页按摩推荐商户点击全部查询按摩所有商户-->
|
|
|
+ <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
|
|
|
+ FROM ma_project p
|
|
|
+ INNER JOIN ma_technician t ON p.merchant_id = CAST(t.id AS CHAR)
|
|
|
+ LEFT JOIN (
|
|
|
SELECT
|
|
|
- t.project_id,
|
|
|
- AVG(t.project_current_price) AS avg_current_price
|
|
|
- FROM ma_project t
|
|
|
- WHERE t.is_delete = 0
|
|
|
- GROUP BY t.project_id
|
|
|
- ) t ON d.project_id = t.project_id
|
|
|
- LEFT JOIN (
|
|
|
+ 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
|
|
|
- o.project_id,
|
|
|
- COUNT(*) AS sales
|
|
|
- FROM t_order o
|
|
|
- WHERE o.is_delete = 0
|
|
|
- AND o.status = 6
|
|
|
- AND o.project_type = 1
|
|
|
- GROUP BY o.project_id
|
|
|
- ) o ON d.project_id = o.project_id;
|
|
|
+ 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 = 0
|
|
|
+ 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 -- 必须有默认地址(用于距离计算)
|
|
|
+ ORDER BY stat.order_count DESC
|
|
|
</select>
|
|
|
</mapper>
|