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 <= #{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