From f2fdc4a1e311bafd1dadf45f043bc9c5c77e0a23 Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Wed, 16 Jul 2025 17:44:56 +0800
Subject: [PATCH] 用户地址距离

---
 oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java                  |    5 +++++
 oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml                          |   16 ++++++++++++++++
 oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java          |    6 +++++-
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java |   10 ++++++++++
 oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java |    9 ++++++++-
 oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java            |    2 ++
 6 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java b/oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java
index 68b5161..b608f37 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java
@@ -1,5 +1,6 @@
 package com.oying.modules.sh.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.oying.base.BaseEntity;
 import cn.hutool.core.bean.BeanUtil;
 import io.swagger.annotations.ApiModelProperty;
@@ -71,6 +72,10 @@
     @ApiModelProperty(value = "标签(家、公司等)")
     private String tag;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "距离")
+    private BigDecimal distance;
+
     public void copy(UserAddress source){
         BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
     }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java
index a65c37f..5b1a8aa 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java
@@ -1,6 +1,7 @@
 package com.oying.modules.sh.domain.dto;
 
 import lombok.Data;
+
 import java.sql.Timestamp;
 import java.util.List;
 import io.swagger.annotations.ApiModelProperty;
@@ -24,6 +25,15 @@
     @ApiModelProperty(value = "用户id")
     private Long userId;
 
+    @ApiModelProperty(value = "经度")
+    private double longitude;
+
+    @ApiModelProperty(value = "纬度")
+    private double latitude;
+
+    @ApiModelProperty(value = "半径(米)")
+    private Integer radius;
+
     @ApiModelProperty(value = "标签(家、公司等)")
     private String tag;
 
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java
index e3e0e37..acad904 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java
@@ -21,4 +21,6 @@
     List<UserAddress> findAll(@Param("criteria") UserAddressQueryCriteria criteria);
 
     void isDefault(Long userId);
+
+    UserAddress getById(Long addressId, Long userId, Double longitude, Double latitude);
 }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java b/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java
index a716500..3654a4e 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java
@@ -2,9 +2,11 @@
 
 import com.oying.modules.sh.domain.UserAddress;
 import com.oying.modules.sh.domain.dto.UserAddressQueryCriteria;
+
 import java.util.List;
 import java.io.IOException;
 import javax.servlet.http.HttpServletResponse;
+
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.oying.utils.PageResult;
@@ -57,5 +59,7 @@
     */
     void download(List<UserAddress> all, HttpServletResponse response) throws IOException;
 
-    List<UserAddress> queryUserAddress();
+    List<UserAddress> queryUserAddress(double longitude, double latitude);
+
+    UserAddress getById(Long addressId, Double longitude, Double latitude);
 }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java
index 073e44f..d1dfe1c 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java
@@ -42,13 +42,20 @@
     }
 
     @Override
-    public List<UserAddress> queryUserAddress() {
+    public List<UserAddress> queryUserAddress(double longitude, double latitude) {
         UserAddressQueryCriteria criteria = new UserAddressQueryCriteria();
         criteria.setUserId(SecurityUtils.getCurrentUserId());
+        criteria.setLongitude(longitude);
+        criteria.setLatitude(latitude);
         return queryAll(criteria);
     }
 
     @Override
+    public UserAddress getById(Long addressId, Double longitude, Double latitude) {
+        return userAddressMapper.getById(addressId, SecurityUtils.getCurrentUserId(), longitude, latitude);
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public void create(UserAddress resources) {
         if (resources.getIsDefault()) {
diff --git a/oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml b/oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml
index a12e793..71bfbea 100644
--- a/oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml
+++ b/oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml
@@ -16,6 +16,7 @@
         <result column="latitude" property="latitude"/>
         <result column="is_default" property="isDefault"/>
         <result column="tag" property="tag"/>
+        <result column="distance" property="distance"/>
         <result column="create_by" property="createBy"/>
         <result column="create_time" property="createTime"/>
         <result column="update_by" property="updateBy"/>
@@ -34,6 +35,10 @@
     <select id="findAll" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"/>
+        <if test="criteria.longitude != null and criteria.latitude != null and criteria.longitude != '' and criteria.latitude != ''">
+            , ROUND(ST_Distance_Sphere(POINT(#{criteria.longitude}, #{criteria.latitude}), POINT(longitude,
+            latitude)), 2) distance
+        </if>
         from sh_user_address
         <where>
             <if test="criteria.userId != null and criteria.userId != ''">
@@ -45,10 +50,21 @@
             <if test="criteria.phone != null and criteria.phone != ''">
                 and receiver_phone like concat('%',#{criteria.phone},'%')
             </if>
+            <if test="criteria.radius != null and criteria.radius != ''">
+                and ST_Distance_Sphere(POINT(#{criteria.longitude}, #{criteria.latitude}), POINT(longitude,
+                latitude)) distance &lt;= #{criteria.radius}
+            </if>
             <if test="criteria.createTime != null and criteria.createTime.size() > 0">
                 AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
             </if>
         </where>
         order by address_id desc
     </select>
+    <select id="getById" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        , ROUND(ST_Distance_Sphere(POINT(#{longitude}, #{latitude}), POINT(longitude, latitude)), 2) distance
+        from sh_user_address
+        where user_id = #{userId} and address_id = #{addressId}
+    </select>
 </mapper>

--
Gitblit v1.9.3