Parcourir la source

开发动态相关的接口

jinshihui il y a 1 mois
Parent
commit
fe389849a5

+ 30 - 28
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TechnicianMomentController.java

@@ -119,29 +119,6 @@ public class TechnicianMomentController extends BaseController {
         }
     }
 
-    /**
-     * 获取动态详情
-     * 包含动态标题、技师昵称头像、技师状态、浏览量、封面图等信息
-     * 每点击查看一次,浏览量+1
-     *
-     * @param momentId 动态ID
-     * @return R<MomentDetailVO> 动态详情
-     */
-    @GetMapping("/detail/{momentId}")
-    @ApiOperation("获取动态详情")
-    public R<MomentDetailVO> getMomentDetail(@ApiParam("动态ID") @PathVariable Long momentId) {
-        try {
-            if (momentId == null) {
-                return R.fail("动态ID不能为空");
-            }
-            MomentDetailVO detail = momentService.getMomentDetail(momentId);
-            return R.ok(detail);
-        } catch (Exception e) {
-            log.error("获取动态详情失败", e);
-            return R.fail("获取动态详情失败:" + e.getMessage());
-        }
-    }
-
     /**
      * 统一查询接口
      * 根据queryType参数决定查询类型:1-推荐,2-同城,3-附近
@@ -152,20 +129,19 @@ public class TechnicianMomentController extends BaseController {
      * @param longitude 用户经度(附近查询时必填)
      * @param pageNum   页码,默认1
      * @param pageSize  每页数量,默认10
-     * @return 动态列表
+     * @return R<List<MomentListVO>> 动态列表
      */
     @GetMapping("/list")
     @ApiOperation("统一查询接口")
     public R<List<MomentListVO>> getMomentList(
             @ApiParam("查询类型:1-推荐,2-同城,3-附近") @RequestParam Integer queryType,
             @ApiParam("城市编码") @RequestParam(required = false) String cityCode,
-            @ApiParam("用户纬度") @RequestParam(required = false) java.math.BigDecimal latitude,
-            @ApiParam("用户经度") @RequestParam(required = false) java.math.BigDecimal longitude,
+            @ApiParam("用户经度") @RequestParam(required = false) BigDecimal longitude,
+            @ApiParam("用户纬度") @RequestParam(required = false) BigDecimal latitude,
             @ApiParam("页码") @RequestParam(defaultValue = "1") Integer pageNum,
             @ApiParam("每页数量") @RequestParam(defaultValue = "10") Integer pageSize) {
         try {
             List<MomentListVO> list;
-
             switch (queryType) {
                 case 1:
                     // 推荐
@@ -188,7 +164,6 @@ public class TechnicianMomentController extends BaseController {
                 default:
                     return R.fail("查询类型不正确,必须是1-推荐、2-同城、3-附近");
             }
-
             return R.ok(list);
         } catch (Exception e) {
             log.error("查询动态列表失败", e);
@@ -196,6 +171,33 @@ public class TechnicianMomentController extends BaseController {
         }
     }
 
+    /**
+     * 获取动态详情
+     * 包含动态标题、技师昵称头像、技师状态、浏览量、封面图等信息
+     * 每点击查看一次,浏览量+1
+     *
+     * @param momentId 动态ID
+     * @return R<MomentDetailVO> 动态详情
+     */
+    @GetMapping("/detail")
+    @ApiOperation("获取动态详情")
+    public R<MomentDetailVO> getMomentDetail(@ApiParam("动态ID") @RequestParam Long momentId,
+                                             @ApiParam("用户经度") @RequestParam(required = false) BigDecimal longitude,
+                                             @ApiParam("用户纬度") @RequestParam(required = false) BigDecimal latitude) {
+        try {
+            if (momentId == null) {
+                return R.fail("动态ID不能为空");
+            }
+            MomentDetailVO detail = momentService.getMomentDetail(momentId, longitude, latitude);
+            return R.ok(detail);
+        } catch (Exception e) {
+            log.error("获取动态详情失败", e);
+            return R.fail("获取动态详情失败:" + e.getMessage());
+        }
+    }
+
+
+
     /**
      * 发布动态或保存草稿
      *

+ 4 - 3
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentDetailVO.java

@@ -38,14 +38,12 @@ public class MomentDetailVO {
     @ApiModelProperty("发布地址")
     private String address;
 
-    @ApiModelProperty("POI名称")
-    private String poiName;
 
     @ApiModelProperty("技师ID")
     private Long technicianId;
 
     @ApiModelProperty("技师昵称")
-    private String technicianName;
+    private String technicianNickName;
 
     @ApiModelProperty("技师头像")
     private String technicianAvatar;
@@ -53,6 +51,9 @@ public class MomentDetailVO {
     @ApiModelProperty("技师状态:1-可服务,2-可预约")
     private Integer technicianStatus;
 
+    /**
+     * 媒体列表
+     */
     @ApiModelProperty("媒体列表")
     private List<MomentMediaVO> mediaList;
 

+ 3 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentMediaVO.java

@@ -11,6 +11,9 @@ import lombok.Data;
 @ApiModel("动态媒体")
 public class MomentMediaVO {
 
+    /**
+     * 媒体ID
+     */
     @ApiModelProperty("媒体ID")
     private Long id;
 

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

@@ -54,7 +54,7 @@ public interface ITechnicianMomentService extends IService<com.ylx.massage.domai
      * @param momentId 动态ID
      * @return 动态详情
      */
-    MomentDetailVO getMomentDetail(Long momentId);
+    MomentDetailVO getMomentDetail(Long momentId, BigDecimal longitude, BigDecimal latitude);
 
     /**
      * 发布动态或保存草稿

+ 16 - 10
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TechnicianMomentServiceImpl.java

@@ -162,7 +162,6 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
                     vo.setDistance(Math.round(distance * 100.0) / 100.0); // 保留两位小数
                 }
             }
-
             return vo;
         }).collect(Collectors.toList());
     }
@@ -175,7 +174,7 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public MomentDetailVO getMomentDetail(Long momentId) {
+    public MomentDetailVO getMomentDetail(Long momentId, BigDecimal longitude, BigDecimal latitude) {
         if (momentId == null) {
             throw new ServiceException("动态ID不能为空");
         }
@@ -191,7 +190,7 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         moment.setViewCount(moment.getViewCount() + 1);
 
         // 查询技师信息
-        TJs technician = tJsMapper.selectById(String.valueOf(moment.getTechnicianId()));
+        TJs technician = tJsMapper.selectById(moment.getTechnicianId());
 
         // 查询媒体列表
         List<MomentMedia> mediaList = mediaMapper.selectMediaListByMomentId(momentId);
@@ -206,19 +205,20 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         BeanUtils.copyProperties(moment, vo);
 
         if (technician != null) {
-            vo.setTechnicianName(technician.getcNickName());
+            vo.setTechnicianNickName(technician.getcNickName());
             vo.setTechnicianAvatar(technician.getcPortrait());
             vo.setTechnicianStatus(getTechnicianStatus(technician));
         }
-
         vo.setMediaList(mediaVOList);
-
         // 计算距离(如果有位置信息)
         if (moment.getLatitude() != null && moment.getLongitude() != null) {
-            // 这里可以传入用户位置计算距离,暂时不计算
-            vo.setDistance(null);
+            // 传入用户位置,计算用户与技师之间的距离
+            double distance = calculateDistance(
+                    latitude.doubleValue(), longitude.doubleValue(),
+                    moment.getLatitude().doubleValue(), moment.getLongitude().doubleValue()
+            );
+            vo.setDistance(Math.round(distance * 100.0) / 100.0); // 保留两位小数
         }
-
         return vo;
     }
 
@@ -251,6 +251,13 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
 
     /**
      * 计算两点之间的距离(单位:km)
+     *
+     * @param lat1 纬度1(用户纬度)
+     * @param lon1 经度1(用户经度)
+     * @param lat2 纬度2(技师纬度)
+     * @param lon2 经度2(技师经度)
+     * @return double 距离(单位:km)
+     *
      * 使用Haversine公式
      */
     private double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
@@ -264,7 +271,6 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
                         Math.sin(dLon / 2) * Math.sin(dLon / 2);
 
         double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
-
         return R * c;
     }