Sfoglia il codice sorgente

完成我的收藏列表接口

wangzhijun 1 settimana fa
parent
commit
1e2a89804e

+ 2 - 1
nightFragrance-massage/src/main/java/com/ylx/collect/controller/CustomerCollectController.java

@@ -2,6 +2,7 @@ package com.ylx.collect.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.collect.domain.dto.CollectOperateDTO;
+import com.ylx.collect.domain.dto.CollectSearchDTO;
 import com.ylx.collect.domain.vo.CollectPageVO;
 import com.ylx.collect.service.CollectService;
 import com.ylx.common.core.domain.R;
@@ -36,7 +37,7 @@ public class CustomerCollectController {
 
     @ApiOperation("我的收藏分页列表")
     @PostMapping(value = "/page")
-    public R<Page<CollectPageVO>> page(@RequestBody CollectOperateDTO dto) {
+    public R<Page<CollectPageVO>> page(@RequestBody CollectSearchDTO dto) {
         Page<CollectPageVO> resultPage = this.collectService.page(dto);
         return R.ok(resultPage);
     }

+ 8 - 5
nightFragrance-massage/src/main/java/com/ylx/collect/domain/dto/CollectOperateDTO.java

@@ -1,21 +1,24 @@
 package com.ylx.collect.domain.dto;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ylx.collect.domain.vo.CollectPageVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 
-@EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel("收藏通用入参DTO")
-public class CollectOperateDTO extends Page<CollectPageVO> {
+public class CollectOperateDTO {
 
     @NotNull(message = "商户ID不能为空")
     @ApiModelProperty("商户主键ID")
     private Long merchantId;
 
+    @ApiModelProperty("用户下单经度")
+    private BigDecimal longitude;
+
+    @ApiModelProperty("用户下单纬度")
+    private BigDecimal latitude;
+
 }

+ 25 - 0
nightFragrance-massage/src/main/java/com/ylx/collect/domain/dto/CollectSearchDTO.java

@@ -0,0 +1,25 @@
+package com.ylx.collect.domain.dto;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.collect.domain.vo.CollectPageVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("收藏通用入参DTO")
+public class CollectSearchDTO extends Page<CollectPageVO> {
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("用户当前经度")
+    private BigDecimal longitude;
+
+    @ApiModelProperty("用户当前纬度")
+    private BigDecimal latitude;
+}

+ 29 - 8
nightFragrance-massage/src/main/java/com/ylx/collect/domain/vo/CollectPageVO.java

@@ -1,21 +1,42 @@
 package com.ylx.collect.domain.vo;
 
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
+/**
+ * 我的收藏列表 VO
+ */
 @ApiModel("我的收藏VO")
 @Data
 public class CollectPageVO {
 
+    @ApiModelProperty("收藏记录ID")
     private Long id;
 
-    /**
-     * 收藏用户ID
-     */
-    private Long userId;
-
-    /**
-     * 商户ID
-     */
+    @ApiModelProperty("商户/技师ID")
     private Long merchantId;
+
+    @ApiModelProperty("商户头像")
+    private String merchantAvatar;
+
+    @ApiModelProperty("商户昵称")
+    private String merchantNickName;
+
+    @ApiModelProperty("距离 (单位: km, 保留2位小数)")
+    private String distanceStr;
+
+    @ApiModelProperty("简介")
+    private String brief;
+
+    @ApiModelProperty("服务次数")
+    private Integer serviceNum;
+
+    @ApiModelProperty("评分")
+    private Integer star;
+
+    @ApiModelProperty("收藏次数")
+    private Integer collectNum;
 }

+ 4 - 0
nightFragrance-massage/src/main/java/com/ylx/collect/mapper/CollectMapper.java

@@ -1,6 +1,9 @@
 package com.ylx.collect.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.collect.domain.dto.CollectSearchDTO;
+import com.ylx.collect.domain.vo.CollectPageVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import com.ylx.collect.domain.Collect;
@@ -13,4 +16,5 @@ import java.util.List;
 @Mapper
 public interface CollectMapper extends BaseMapper<Collect> {
 
+    Page<CollectPageVO> selectMyCollectPage(Page<CollectPageVO> page, @Param("dto") CollectSearchDTO dto);
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.collect.domain.Collect;
 import com.ylx.collect.domain.dto.CollectOperateDTO;
+import com.ylx.collect.domain.dto.CollectSearchDTO;
 import com.ylx.collect.domain.vo.CollectPageVO;
 
 /**
@@ -15,7 +16,7 @@ public interface CollectService extends IService<Collect> {
 
     boolean cancelCollect(CollectOperateDTO dto);
 
-    Page<CollectPageVO> page(CollectOperateDTO dto);
+    Page<CollectPageVO> page(CollectSearchDTO dto);
 
     boolean isCollected(Long merchantId);
 }

+ 8 - 28
nightFragrance-massage/src/main/java/com/ylx/collect/service/impl/CollectServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.base.BaseServiceImpl;
 import com.ylx.collect.domain.Collect;
 import com.ylx.collect.domain.dto.CollectOperateDTO;
+import com.ylx.collect.domain.dto.CollectSearchDTO;
 import com.ylx.collect.domain.vo.CollectPageVO;
 import com.ylx.collect.mapper.CollectMapper;
 import com.ylx.collect.service.CollectService;
@@ -16,6 +17,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -85,39 +87,17 @@ public class CollectServiceImpl extends BaseServiceImpl<CollectMapper, Collect>
     }
 
     @Override
-    public Page<CollectPageVO> page(CollectOperateDTO dto) {
+    public Page<CollectPageVO> page(CollectSearchDTO dto) {
+
         // 1. 获取当前用户,确保只能查自己的收藏
         Long userId = getCurrentUserId();
+        dto.setUserId(userId);
 
         // 2. 构建分页对象
-        Page<Collect> pageParam = new Page<>(dto.getCurrent(), dto.getSize());
+        Page<CollectPageVO> page = new Page<>(dto.getCurrent(), dto.getSize());
+        page = this.baseMapper.selectMyCollectPage(page, dto);
 
-        // 3. 构建查询条件
-        LambdaQueryWrapper<Collect> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(Collect::getUserId, userId)
-                .eq(Collect::getIsDelete, NOT_DELETE)
-                .orderByDesc(Collect::getCreateTime); // 按时间倒序
-
-        // 4. 执行查询
-        Page<Collect> resultPage = this.page(pageParam, wrapper);
-
-        Page<CollectPageVO> voPage = new Page<>();
-        // 1. 复制分页元数据(总条数、当前页码等)
-        voPage.setCurrent(resultPage.getCurrent());
-        voPage.setSize(resultPage.getSize());
-        voPage.setTotal(resultPage.getTotal());
-        voPage.setPages(resultPage.getPages());
-
-        // 2. 转换列表数据
-        List<CollectPageVO> voList = resultPage.getRecords().stream().map(collect -> {
-            CollectPageVO vo = new CollectPageVO();
-            // 属性拷贝
-            BeanUtil.copyProperties(collect, vo);
-            return vo;
-        }).collect(Collectors.toList());
-
-        voPage.setRecords(voList);
-        return voPage;
+        return page;
     }
 
     @Override

+ 33 - 0
nightFragrance-massage/src/main/resources/mapper/collect/CollectMapper.xml

@@ -2,4 +2,37 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ylx.collect.mapper.CollectMapper">
 
+    <select id="selectMyCollectPage" resultType="com.ylx.collect.domain.vo.CollectPageVO">
+        SELECT
+            c.id,
+            c.merchant_id AS merchantId,
+            t.te_nick_name AS merchantNickName,
+            t.te_avatar AS merchantAvatar,
+            t.te_brief AS brief,
+            t.n_star AS star,
+            t.n_num AS serviceNum,
+            (
+                SELECT COUNT(*)
+                FROM collect c2
+                WHERE c2.merchant_id = t.id
+                  AND c2.is_delete = 0
+            ) AS collectNum,
+            @dist_km := (6371 * ACOS(
+            COS(RADIANS(#{dto.latitude})) * COS(RADIANS(a.latitude)) *
+            COS(RADIANS(a.longitude) - RADIANS(#{dto.longitude})) +
+            SIN(RADIANS(#{dto.latitude})) * SIN(RADIANS(a.latitude))
+            )) AS dist_km,
+            CASE
+            WHEN (@dist_km * 1000) &lt; 1000
+            THEN CONCAT(CAST(ROUND(@dist_km * 1000) AS UNSIGNED), 'm')
+            ELSE CONCAT(ROUND(@dist_km, 1), 'km')
+        END AS distanceStr
+    FROM collect c
+    INNER JOIN ma_technician t ON c.merchant_id = t.id
+    LEFT JOIN t_address a ON t.id = a.merchant_id AND a.is_default = 1 AND a.user_type = 2
+    WHERE
+      c.user_id = #{dto.userId}
+    AND c.is_delete = 0
+    ORDER BY c.create_time DESC
+    </select>
 </mapper>