xin
2025-07-16 f2fdc4a1e311bafd1dadf45f043bc9c5c77e0a23
用户地址距离
6 files modified
48 ■■■■■ changed files
oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java 5 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java 10 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java 2 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java 6 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java 9 ●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml 16 ●●●●● patch | view | raw | blame | history
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));
    }
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;
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);
}
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);
}
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()) {
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>