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