|
|
@@ -118,7 +118,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
#{id}
|
|
|
</foreach>
|
|
|
</delete>
|
|
|
- <!-- 推荐项目-->
|
|
|
+ <!-- 首页按摩推荐项目-->
|
|
|
<select id="getMassageProjectRecommend" resultType="com.ylx.massage.domain.vo.MassageProjectRecommendVo">
|
|
|
SELECT
|
|
|
pro.id AS projectId,
|
|
|
@@ -276,4 +276,109 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
</choose>
|
|
|
</trim>
|
|
|
</select>
|
|
|
+ <!-- 首页陪玩推荐项目-->
|
|
|
+ <select id="getHotCompainonProjectList" resultType="com.ylx.companion.domain.vo.HotCompanionProjectVO">
|
|
|
+ SELECT
|
|
|
+ pro.id AS projectId,
|
|
|
+ pro.title AS projectName,
|
|
|
+ pro.standard_duration AS projectDuration,
|
|
|
+ COALESCE(ord.sales, 0) AS sales, -- 无订单时为 0
|
|
|
+ mp_avg.avgCurrentPrice,
|
|
|
+ pro.highlight AS highlight
|
|
|
+ FROM project pro
|
|
|
+ INNER JOIN (
|
|
|
+ -- 1. 符合条件的商家项目:按项目聚合,计算平均价格
|
|
|
+ SELECT
|
|
|
+ CAST(mp.project_id AS UNSIGNED) AS project_id,
|
|
|
+ AVG(mp.project_current_price) AS avgCurrentPrice
|
|
|
+ FROM ma_project mp
|
|
|
+ INNER JOIN ma_technician tech
|
|
|
+ ON 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
|
|
|
+ WHERE mp.merchant_type = 2
|
|
|
+ AND mp.is_delete = 0
|
|
|
+ AND mp.project_is_enable = 1
|
|
|
+ GROUP BY CAST(mp.project_id AS UNSIGNED)
|
|
|
+ ) mp_avg ON mp_avg.project_id = pro.id
|
|
|
+ LEFT JOIN (
|
|
|
+ -- 2. 订单统计:每个项目的真实订单数
|
|
|
+ SELECT
|
|
|
+ project_id,
|
|
|
+ COUNT(id) AS sales
|
|
|
+ FROM t_order
|
|
|
+ WHERE project_type = 2
|
|
|
+ AND status = 6
|
|
|
+ AND is_delete = 0
|
|
|
+ GROUP BY project_id
|
|
|
+ ) ord ON ord.project_id = pro.id
|
|
|
+ WHERE pro.is_delete = 0
|
|
|
+ <if test="categoryId != null">
|
|
|
+ AND pro.category_id = #{categoryId}
|
|
|
+ </if>
|
|
|
+ ORDER BY sales DESC, pro.id ASC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 首页陪玩推荐商户点击全部查询陪玩所有商户-->
|
|
|
+ <select id="getCompanionAllMerchants" resultType="com.ylx.companion.domain.vo.CompanionAllMerchantsVo">
|
|
|
+ SELECT
|
|
|
+ project_id AS projectId,
|
|
|
+ project_name AS projectName,
|
|
|
+ te_name AS merchantName,
|
|
|
+ id AS merchantId,
|
|
|
+ order_count AS nNum, -- 子查询中已经 COALESCE 过了
|
|
|
+ CASE
|
|
|
+ WHEN #{dto.longitude} IS NOT NULL AND #{dto.latitude} IS NOT NULL THEN
|
|
|
+ CONCAT(
|
|
|
+ CASE WHEN distance_meters >= 1000 THEN ROUND(distance_meters / 1000.0, 1) ELSE distance_meters END,
|
|
|
+ CASE WHEN distance_meters >= 1000 THEN 'km' ELSE 'm' END
|
|
|
+ )
|
|
|
+ ELSE NULL
|
|
|
+ END AS distanceShow,
|
|
|
+ te_avatar AS teAvatar
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ p.project_id,
|
|
|
+ p.project_name,
|
|
|
+ t.te_name,
|
|
|
+ t.id,
|
|
|
+ t.te_avatar,
|
|
|
+ COALESCE(stat.order_count, 0) AS order_count,
|
|
|
+ ROUND(ST_Distance_Sphere(POINT(addr.longitude, addr.latitude), POINT(#{dto.longitude}, #{dto.latitude})), 0) AS distance_meters
|
|
|
+ FROM ma_technician t
|
|
|
+ INNER JOIN ma_project p
|
|
|
+ ON p.merchant_id = CAST(t.id AS CHAR)
|
|
|
+ AND p.audit_status = 1
|
|
|
+ AND p.is_delete = 0
|
|
|
+ AND p.merchant_type = 2
|
|
|
+ AND p.project_is_enable = 0
|
|
|
+ <if test="dto.projectId != null and dto.projectId != ''">
|
|
|
+ AND p.project_id = #{dto.projectId}
|
|
|
+ </if>
|
|
|
+ LEFT JOIN (
|
|
|
+ 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,
|
|
|
+ project_id,
|
|
|
+ COUNT(*) AS order_count
|
|
|
+ FROM t_order
|
|
|
+ WHERE status = 6
|
|
|
+ AND project_type = 2
|
|
|
+ AND is_delete = 0
|
|
|
+ GROUP BY merchant_id, project_id
|
|
|
+ ) stat ON stat.merchant_id = t.id AND stat.project_id = p.project_id
|
|
|
+ WHERE t.audit_status = 2
|
|
|
+ AND t.is_delete = 0
|
|
|
+ AND t.service_state = 1
|
|
|
+ AND t.te_area_code = #{dto.cityCode}
|
|
|
+ ) AS sub
|
|
|
+ ORDER BY nNum DESC -- 或者 nNum DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
</mapper>
|