|
|
@@ -1,19 +1,16 @@
|
|
|
package cn.qinys.platform.mobile.service.impl;
|
|
|
|
|
|
-import cn.qinys.platform.entity.wishing.WishingTree;
|
|
|
import cn.qinys.platform.mobile.mapper.WishingTreeMapper;
|
|
|
import cn.qinys.platform.mobile.req.TreeDetailReq;
|
|
|
import cn.qinys.platform.mobile.req.WishingTreeListReq;
|
|
|
import cn.qinys.platform.mobile.resp.TreeDetailResp;
|
|
|
-import cn.qinys.platform.mobile.resp.WishingTreeListResp;
|
|
|
-import cn.qinys.platform.mobile.service.WishTreeService;
|
|
|
+import cn.qinys.platform.mobile.resp.TreeListResp;
|
|
|
+import cn.qinys.platform.mobile.service.TreeService;
|
|
|
import cn.qinys.platform.mobile.util.CoordUtil;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
import java.util.Comparator;
|
|
|
import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -25,7 +22,7 @@ import java.util.stream.Collectors;
|
|
|
**/
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
-public class WishTreeServiceImpl implements WishTreeService {
|
|
|
+public class TreeServiceImpl implements TreeService {
|
|
|
|
|
|
@Resource
|
|
|
private WishingTreeMapper treeMapper;
|
|
|
@@ -33,43 +30,20 @@ public class WishTreeServiceImpl implements WishTreeService {
|
|
|
private static final int EARTH_RADIUS = 6371000; // 地球半径(米)
|
|
|
|
|
|
@Override
|
|
|
- public List<WishingTreeListResp> listNearbyTrees(WishingTreeListReq req) {
|
|
|
-
|
|
|
-
|
|
|
+ public List<TreeListResp> listNearbyTrees(WishingTreeListReq req) {
|
|
|
// 查询所有启用的许愿树
|
|
|
- List<WishingTree> trees = treeMapper.selectList(
|
|
|
- new LambdaQueryWrapper<WishingTree>()
|
|
|
- .eq(WishingTree::getIsActive, 1)
|
|
|
- );
|
|
|
-
|
|
|
+ List<TreeListResp> trees = treeMapper.selectActiveTrees();
|
|
|
// 用户 GPS 是 WGS-84,DB 存的是 GCJ-02,统一转为 GCJ-02 计算距离
|
|
|
double[] gcj = CoordUtil.wgs84ToGcj02(req.getLng().doubleValue(), req.getLat().doubleValue());
|
|
|
-
|
|
|
- List<WishingTreeListResp> result = new ArrayList<>();
|
|
|
- for (WishingTree tree : trees) {
|
|
|
- int dist = haversine(
|
|
|
- gcj[0], gcj[1],
|
|
|
- tree.getLongitude().doubleValue(), tree.getLatitude().doubleValue()
|
|
|
- );
|
|
|
-
|
|
|
- WishingTreeListResp resp = new WishingTreeListResp();
|
|
|
- resp.setId(tree.getId());
|
|
|
- resp.setName(tree.getName());
|
|
|
- resp.setDescription(tree.getDescription());
|
|
|
- resp.setLongitude(tree.getLongitude());
|
|
|
- resp.setLatitude(tree.getLatitude());
|
|
|
- resp.setAddress(tree.getAddress());
|
|
|
- resp.setRadius(tree.getRadius());
|
|
|
- resp.setCoverImage(tree.getCoverImage());
|
|
|
- resp.setTotalWishes(tree.getTotalWishes());
|
|
|
- resp.setDistance(dist);
|
|
|
- resp.setIsInRange(dist <= (tree.getRadius() != null ? tree.getRadius() : 100));
|
|
|
- result.add(resp);
|
|
|
- }
|
|
|
+ trees.forEach(tree -> {
|
|
|
+ int dist = haversine(gcj[0], gcj[1], tree.getLongitude().doubleValue(), tree.getLatitude().doubleValue());
|
|
|
+ tree.setDistance(dist);
|
|
|
+ tree.setIsInRange(dist <= (tree.getRadius() != null ? tree.getRadius() : 100));
|
|
|
+ });
|
|
|
|
|
|
// 按距离排序,限制返回数量
|
|
|
- return result.stream()
|
|
|
- .sorted(Comparator.comparingInt(WishingTreeListResp::getDistance))
|
|
|
+ return trees.stream()
|
|
|
+ .sorted(Comparator.comparingInt(TreeListResp::getDistance))
|
|
|
.filter(it -> it.getDistance() <= req.getMaxDistance())
|
|
|
.limit(req.getLimit())
|
|
|
.collect(Collectors.toList());
|
|
|
@@ -80,9 +54,7 @@ public class WishTreeServiceImpl implements WishTreeService {
|
|
|
TreeDetailResp tree = treeMapper.selectDetailById(req.getId());
|
|
|
// 用户 GPS 是 WGS-84,DB 存的是 GCJ-02,统一转为 GCJ-02 计算距离
|
|
|
double[] gcj = CoordUtil.wgs84ToGcj02(req.getLng().doubleValue(), req.getLat().doubleValue());
|
|
|
- int dist = haversine(gcj[0], gcj[1],
|
|
|
- tree.getLongitude().doubleValue(), tree.getLatitude().doubleValue()
|
|
|
- );
|
|
|
+ int dist = haversine(gcj[0], gcj[1], tree.getLongitude().doubleValue(), tree.getLatitude().doubleValue());
|
|
|
tree.setDistance(dist);
|
|
|
tree.setIsInRange(dist <= (tree.getRadius() != null ? tree.getRadius() : 100));
|
|
|
return tree;
|