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