Просмотр исходного кода

提交bookDetail接口,用于“客户端获取去预约项目详情”

wangzhijun 5 дней назад
Родитель
Сommit
d4dd443b82

+ 2 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/MaProjectMapper.java

@@ -8,6 +8,7 @@ import com.ylx.massage.domain.MaProject;
 import com.ylx.massage.domain.dto.MassageAllMerchantsDto;
 import com.ylx.massage.domain.vo.MassageAllMerchantsVo;
 import com.ylx.massage.domain.vo.MassageProjectRecommendVo;
+import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
 import com.ylx.project.domain.bookMerchant.vo.BookMerchantVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -78,5 +79,5 @@ public interface MaProjectMapper extends BaseMapper<MaProject> {
 
     Page<MassageAllMerchantsVo> getMassageAllMerchants(@Param("page") Page<MassageAllMerchantsVo> page, @Param("dto") MassageAllMerchantsDto dto);
 
-    Page<BookMerchantVO> selectMerchantList(@Param("page") Page<BookMerchantVO> page, @Param("projectId") Long projectId);
+    Page<BookMerchantVO> selectMerchantList(@Param("page") Page<BookMerchantVO> page, @Param("dto") BookMerchantDTO dto);
 }

+ 2 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/IMaProjectService.java

@@ -11,6 +11,7 @@ import com.ylx.massage.domain.vo.MaProjectListVo;
 import com.ylx.massage.domain.vo.MaProjectSaveVo;
 import com.ylx.massage.domain.vo.MassageAllMerchantsVo;
 import com.ylx.massage.domain.vo.MassageProjectRecommendVo;
+import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
 import com.ylx.project.domain.bookMerchant.vo.BookMerchantVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -74,5 +75,5 @@ public interface IMaProjectService extends IService<MaProject>
 
     Page<MassageAllMerchantsVo> getMassageAllMerchants(Page<MassageAllMerchantsVo> page, MassageAllMerchantsDto dto);
 
-    Page<BookMerchantVO> selectMerchantList(Page<BookMerchantVO> page, Long projectId);
+    Page<BookMerchantVO> selectMerchantList(Page<BookMerchantVO> page, BookMerchantDTO dto);
 }

+ 3 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaProjectServiceImpl.java

@@ -14,6 +14,7 @@ import com.ylx.massage.domain.vo.MaProjectSaveVo;
 import com.ylx.massage.domain.vo.MassageAllMerchantsVo;
 import com.ylx.massage.domain.vo.MassageProjectRecommendVo;
 import com.ylx.massage.mapper.MaProjectMapper;
+import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
 import com.ylx.project.domain.bookMerchant.vo.BookMerchantVO;
 import org.apache.commons.compress.utils.Lists;
 import org.springframework.stereotype.Service;
@@ -145,8 +146,8 @@ public class MaProjectServiceImpl extends ServiceImpl<MaProjectMapper, MaProject
     }
 
     @Override
-    public Page<BookMerchantVO> selectMerchantList(Page<BookMerchantVO> page, Long projectId) {
-        return maProjectMapper.selectMerchantList(page, projectId);
+    public Page<BookMerchantVO> selectMerchantList(Page<BookMerchantVO> page, BookMerchantDTO dto) {
+        return maProjectMapper.selectMerchantList(page, dto);
     }
 
 }

+ 2 - 1
nightFragrance-massage/src/main/java/com/ylx/project/controller/ProjectController.java

@@ -7,6 +7,7 @@ import com.ylx.common.enums.BusinessType;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.project.domain.Project;
 import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
+import com.ylx.project.domain.bookMerchant.vo.BookMerchantVO;
 import com.ylx.project.domain.bookMerchant.vo.BookProjectDetailVO;
 import com.ylx.project.domain.dto.ProjectAddDTO;
 import com.ylx.project.domain.dto.ProjectSearchDTO;
@@ -143,7 +144,7 @@ public class ProjectController {
     @PreAuthorize("@customerAuth.isCustomer()")
     @ApiOperation("客户端获取去预约项目详情")
     @PostMapping("/bookDetail")
-    public R<BookProjectDetailVO> getBookingProjectDetail(BookMerchantDTO dto) {
+    public R<BookProjectDetailVO> getBookingProjectDetail(@RequestBody BookMerchantDTO dto) {
         BookProjectDetailVO vo = projectService.getBookingProjectDetail(dto);
         return R.ok(vo);
     }

+ 1 - 0
nightFragrance-massage/src/main/java/com/ylx/project/service/ProjectService.java

@@ -9,6 +9,7 @@ import com.ylx.massage.domain.vo.ProductOptionVO;
 import com.ylx.massage.domain.vo.ProductServiceOptionVO;
 import com.ylx.project.domain.Project;
 import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
+import com.ylx.project.domain.bookMerchant.vo.BookMerchantVO;
 import com.ylx.project.domain.bookMerchant.vo.BookProjectDetailVO;
 import com.ylx.project.domain.dto.ProjectAddDTO;
 import com.ylx.project.domain.dto.ProjectSearchDTO;

+ 2 - 4
nightFragrance-massage/src/main/java/com/ylx/project/service/impl/ProjectServiceImpl.java

@@ -212,11 +212,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         vo.setProjectInfo(projectInfo);
 
         // 2. 查询商户列表
-        Page<BookMerchantVO> page = new Page<>(dto.getCurrent(), dto.getSize());
-        Page<BookMerchantVO> merchantList = maProjectService.selectMerchantList(page, projectId);
+        Page<BookMerchantVO> page = maProjectService.selectMerchantList(new Page<>(dto.getCurrent(), dto.getSize()), dto);
 
-
-        vo.setMerchantList(merchantList);
+        vo.setMerchantList(page);
         return vo;
     }
 

+ 56 - 14
nightFragrance-massage/src/main/resources/mapper/massage/MaProjectMapper.xml

@@ -213,21 +213,63 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) AS sub
         ORDER BY 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 calc.distanceMeter
+        WHEN 999999999 THEN '未知'
+        WHEN calc.distanceMeter &lt; 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
+        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)
+        </if>
+        <if test="dto.latitude == null or dto.longitude == null or dto.latitude == 0 or dto.longitude == 0">
+            999999999
+        </if> AS distanceMeter
+        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
+        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
+                </when>
+                <otherwise>
+                    t.n_num DESC
+                </otherwise>
+            </choose>
+        </trim>
     </select>
 </mapper>