7 Commits

Author SHA1 Message Date
bao
e9d20ccf6c feat:修复接口 2026-01-09 15:41:14 +08:00
bao
d70ca89707 merge feature-init into master
# Conflicts:
#	src/main/java/com/bao/dating/config/WebConfig.java
#	src/main/java/com/bao/dating/controller/UserController.java
#	src/main/java/com/bao/dating/mapper/UserMapper.java
#	src/main/java/com/bao/dating/service/UserService.java
#	src/main/java/com/bao/dating/service/impl/UserServiceImpl.java
#	src/main/resources/com/bao/dating/mapper/UserMapper.xml
2026-01-09 15:35:31 +08:00
bao
a4faa11036 feat: update user module on feature-init 2026-01-09 15:22:18 +08:00
290db24bc4 查询附近的人(可以查看版) 2026-01-08 10:10:25 +08:00
31b0dffd68 查询附近的人(可以查看版) 2026-01-08 10:06:03 +08:00
31fd23afa8 查询附近的人(可以查看版) 2026-01-08 10:05:58 +08:00
d8d46ab089 查询附近的人(可以查看版) 2026-01-08 10:00:27 +08:00
14 changed files with 416 additions and 11 deletions

View File

@@ -75,6 +75,8 @@ public class SmsUtil {
.setTemplateCode(templateCode != null ? templateCode : this.templateCode) .setTemplateCode(templateCode != null ? templateCode : this.templateCode)
.setTemplateParam(templateParam); .setTemplateParam(templateParam);
log.error("TemplateParam 实际值 = {}", templateParam);
SendSmsResponse response = client.sendSms(sendSmsRequest); SendSmsResponse response = client.sendSms(sendSmsRequest);
if ("OK".equals(response.getBody().getCode())) { if ("OK".equals(response.getBody().getCode())) {
@@ -145,6 +147,7 @@ public class SmsUtil {
jsonBuilder.append("}"); jsonBuilder.append("}");
return sendSms(phoneNumber, templateCode, jsonBuilder.toString()); return sendSms(phoneNumber, templateCode, jsonBuilder.toString());
} }
} }

View File

@@ -33,7 +33,9 @@ public class WebConfig implements WebMvcConfigurer {
"/user/register", "/user/register",
"/user/emailLogin", "/user/emailLogin",
"/api/verification/send-email-code", "/api/verification/send-email-code",
"/ip/location" "/ip/location",
"/user/login",
"/user/sendCode"
); );
} }
} }

View File

@@ -4,8 +4,9 @@ import com.bao.dating.anno.Log;
import com.bao.dating.common.Result; import com.bao.dating.common.Result;
import com.bao.dating.common.ResultCode; import com.bao.dating.common.ResultCode;
import com.bao.dating.context.UserContext; import com.bao.dating.context.UserContext;
import com.bao.dating.pojo.dto.UserInfoDTO; import com.bao.dating.pojo.dto.UserInfoUpdateDTO;
import com.bao.dating.pojo.dto.UserLoginDTO; import com.bao.dating.pojo.dto.UserLoginDTO;
import com.bao.dating.pojo.dto.UserInfoDTO;
import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserInfoVO;
import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.pojo.vo.UserLoginVO;
import com.bao.dating.service.UserService; import com.bao.dating.service.UserService;
@@ -13,7 +14,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/** /**
* 用户接口 * 用户接口
@@ -64,6 +67,7 @@ public class UserController {
* @param file 头像文件 * @param file 头像文件
* @return 上传后的文件URL列表 * @return 上传后的文件URL列表
*/ */
@Log
@PostMapping(value = "/info/uploadAvatar", consumes = "multipart/form-data") @PostMapping(value = "/info/uploadAvatar", consumes = "multipart/form-data")
public Result<String> uploadAvatar(@RequestParam("file") MultipartFile file) { public Result<String> uploadAvatar(@RequestParam("file") MultipartFile file) {
String fileUrl = userService.uploadAvatar(file); String fileUrl = userService.uploadAvatar(file);
@@ -75,6 +79,7 @@ public class UserController {
* @param file 背景文件 * @param file 背景文件
* @return 上传后的文件URL列表 * @return 上传后的文件URL列表
*/ */
@Log
@PostMapping(value = "/info/uploadBackground", consumes = "multipart/form-data") @PostMapping(value = "/info/uploadBackground", consumes = "multipart/form-data")
public Result<String> uploadBackground(@RequestParam("file") MultipartFile file) { public Result<String> uploadBackground(@RequestParam("file") MultipartFile file) {
String fileUrl = userService.uploadBackground(file); String fileUrl = userService.uploadBackground(file);
@@ -86,14 +91,82 @@ public class UserController {
* @param userInfoUpdateDTO 用户信息更新参数 * @param userInfoUpdateDTO 用户信息更新参数
* @return 更新后的用户信息 * @return 更新后的用户信息
*/ */
@Log
@PostMapping("/info/update") @PostMapping("/info/update")
public Result<UserInfoVO> userInfoUpdate(@RequestBody UserInfoDTO userInfoUpdateDTO) { public Result<UserInfoVO> userInfoUpdate(@RequestBody UserInfoUpdateDTO userInfoUpdateDTO) {
Long userId = UserContext.getUserId(); Long userId = UserContext.getUserId();
userInfoUpdateDTO.setUserId(userId); userInfoUpdateDTO.setUserId(userId);
UserInfoVO userInfoVO =userService.updateUserInfo(userInfoUpdateDTO); UserInfoVO userInfoVO =userService.updateUserInfo(userInfoUpdateDTO);
return Result.success(ResultCode.SUCCESS, "用户信息更新成功", userInfoVO); return Result.success(ResultCode.SUCCESS, "用户信息更新成功", userInfoVO);
} }
@PostMapping("/sendCode")
public Result sendCode(@RequestBody Map<String, String> body) {
String phone = body.get("phone");
userService.sendSmsCode(phone);
return Result.success(ResultCode.SUCCESS, "验证码发送成功");
}
@PostMapping("/loginByCode")
public Result loginByCode(@RequestBody Map<String, String> body){
boolean ok = userService.verifyCode(body.get("phone"), body.get("code"));
return ok ? Result.success(ResultCode.SUCCESS, "登录成功") : Result.error(ResultCode.SYSTEM_ERROR, "登录失败");
}
/**
* 登录
* @param body 登录参数
*/
@PostMapping("/loginPhone")
public Result<?> loginPhone(@RequestBody Map<String, String> body) {
String phone = body.get("phone");
String code = body.get("code");
//校验验证码
boolean verify = userService.verifyCode(phone, code);
if (!verify){
return Result.error(ResultCode.SYSTEM_ERROR, "验证码错误或已过期");
}
//登录
UserLoginVO vo = userService.loginByPhone(phone);
return Result.success(ResultCode.SUCCESS, "登录成功", vo);
}
@GetMapping("/nearby")
public Result<List<UserInfoVO>> nearby(@RequestParam(defaultValue = "5") double distance){
// 获取当前线程的用户 ID
Long userId = UserContext.getUserId();
if (userId == null) {
return Result.error(ResultCode.SYSTEM_ERROR, "用户未登录");
}
// 通过 UserID 获取当前用户的经纬度信息
UserInfoVO currentUser = userService.getUserInfo(userId);
if (currentUser == null) {
return Result.error(ResultCode.SYSTEM_ERROR, "用户信息获取失败");
}
// 获取当前用户的经纬度
Double latitude = currentUser.getLatitude();
Double longitude = currentUser.getLongitude();
// 检查经纬度是否为空
if (latitude == null || longitude == null) {
return Result.error(ResultCode.SYSTEM_ERROR, "用户经纬度信息未完善");
}
// 这里可以添加默认值,比如如果 latitude 或 longitude 为 null则设置为某个默认值例如 0
latitude = (latitude != null) ? latitude : 0.0;
longitude = (longitude != null) ? longitude : 0.0;
// 查询附近用户
List<UserInfoVO> nearbyUsers = userService.findNearbyUsers(latitude, longitude, distance);
// 返回成功结果
return Result.success(ResultCode.SUCCESS, "查询成功", nearbyUsers);
}
/** /**
* 用户注册 * 用户注册
* @param userName 用户名称 * @param userName 用户名称

View File

@@ -5,18 +5,18 @@ import com.bao.dating.pojo.entity.Comments;
import org.apache.ibatis.annotations.*; import org.apache.ibatis.annotations.*;
import java.util.List; import java.util.List;
@Mapper
public interface CommentsMapper { public interface CommentsMapper {
// 添加评论 // 添加评论
@Insert("INSERT INTO comments(content, user_id, post_id, created_at) VALUES(#{content}, #{user_id}, #{post_id}, #{created_at})") @Insert("INSERT INTO dating.comments(content, user_id, post_id, created_at) VALUES(#{content}, #{user_id}, #{post_id}, #{created_at})")
int addComment(Comments comments); int addComment(Comments comments);
// 删除评论 // 删除评论
@Delete("DELETE FROM comments WHERE user_id = #{user_id}") @Delete("DELETE FROM dating.comments WHERE user_id = #{user_id}")
int deleteComments(@Param("user_id") Long user_id); int deleteComments(@Param("user_id") Long user_id);
// 根据动态ID查询评论列表 // 根据动态ID查询评论列表
@Select("SELECT * FROM comments WHERE post_id = #{post_id} ORDER BY created_at DESC") @Select("SELECT * FROM dating.comments WHERE post_id = #{post_id} ORDER BY created_at DESC")
List<Comments> getCommentsByPostId(@Param("post_id") Long post_id); List<Comments> getCommentsByPostId(@Param("post_id") Long post_id);
/** /**

View File

@@ -2,9 +2,12 @@ package com.bao.dating.mapper;
import com.bao.dating.pojo.dto.UserInfoDTO; import com.bao.dating.pojo.dto.UserInfoDTO;
import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.entity.User;
import com.bao.dating.pojo.vo.UserInfoVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 用户Mapper * 用户Mapper
* @author KilLze * @author KilLze
@@ -54,4 +57,15 @@ public interface UserMapper {
*/ */
User selectByUserEmailUser(@Param("userEmail") String email); User selectByUserEmailUser(@Param("userEmail") String email);
User selectByPhone(@Param("phone") String phone);
/**
* 根据经纬度范围查询用户
* @param minLat 最小纬度
* @param maxLat 最大纬度
* @param minLng 最小经度
* @param maxLng 最大经度
* @return 用户列表
*/
List<UserInfoVO> findByLatLngRange(@Param("minLat") double minLat, @Param("maxLat") double maxLat, @Param("minLng") double minLng, @Param("maxLng") double maxLng);
} }

View File

@@ -0,0 +1,25 @@
package com.bao.dating.pojo.dto;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* 用户信息更新数据传输对象
* @author KilLze
*/
@Data
public class UserInfoUpdateDTO {
private Long userId;
private String userName;
private String nickname;
private String avatarUrl;
private String backgroundUrl;
private Integer gender;
private LocalDate birthday;
private List<String> hobbies;
private String signature;
private LocalDateTime updatedAt;
}

View File

@@ -43,4 +43,8 @@ public class User implements Serializable {
private String userEmail; private String userEmail;
private String userPhone; private String userPhone;
private Double latitude; // 纬度
private Double longitude; // 经度
} }

View File

@@ -24,4 +24,6 @@ public class UserInfoVO implements Serializable {
private String signature; private String signature;
private LocalDateTime updatedAt; private LocalDateTime updatedAt;
private LocalDateTime createdAt; private LocalDateTime createdAt;
private Double latitude;
private Double longitude;
} }

View File

@@ -1,12 +1,15 @@
package com.bao.dating.service; package com.bao.dating.service;
import com.bao.dating.pojo.dto.UserInfoDTO; import com.bao.dating.pojo.dto.UserInfoDTO;
import com.bao.dating.pojo.dto.UserInfoUpdateDTO;
import com.bao.dating.pojo.dto.UserLoginDTO; import com.bao.dating.pojo.dto.UserLoginDTO;
import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.entity.User;
import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserInfoVO;
import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.pojo.vo.UserLoginVO;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/** /**
* 用户服务接口 * 用户服务接口
* @author KilLze * @author KilLze
@@ -76,4 +79,20 @@ public interface UserService {
* @return 用户 * @return 用户
*/ */
UserInfoDTO getUserInfoById(Long userId); UserInfoDTO getUserInfoById(Long userId);
UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO);
void sendSmsCode(String phone);
boolean verifyCode(String phone, String code);
UserLoginVO loginByPhone(String phone);
/**
* 获取指定经纬度范围内的用户
* @param lat 用户纬度
* @param lng 用户经度
* @param radiusKm 半径 km
* @return 用户列表
*/
List<UserInfoVO> findNearbyUsers(double lat,double lng,double radiusKm);
} }

View File

@@ -5,17 +5,22 @@ import com.bao.dating.common.ResultCode;
import com.bao.dating.common.aliyun.AliOssUtil; import com.bao.dating.common.aliyun.AliOssUtil;
import com.bao.dating.common.aliyun.GreenImageScan; import com.bao.dating.common.aliyun.GreenImageScan;
import com.bao.dating.common.aliyun.GreenTextScan; import com.bao.dating.common.aliyun.GreenTextScan;
import com.bao.dating.common.aliyun.SmsUtil;
import com.bao.dating.common.result.AliOssResult; import com.bao.dating.common.result.AliOssResult;
import com.bao.dating.common.result.GreenAuditResult; import com.bao.dating.common.result.GreenAuditResult;
import com.bao.dating.config.RedisConfig;
import com.bao.dating.context.UserContext; import com.bao.dating.context.UserContext;
import com.bao.dating.mapper.UserMapper; import com.bao.dating.mapper.UserMapper;
import com.bao.dating.pojo.dto.UserInfoDTO; import com.bao.dating.pojo.dto.UserInfoDTO;
import com.bao.dating.pojo.dto.UserInfoUpdateDTO;
import com.bao.dating.pojo.dto.UserLoginDTO; import com.bao.dating.pojo.dto.UserLoginDTO;
import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.entity.User;
import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserInfoVO;
import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.pojo.vo.UserLoginVO;
import com.bao.dating.service.UserService; import com.bao.dating.service.UserService;
import com.bao.dating.service.VerificationCodeService; import com.bao.dating.service.VerificationCodeService;
import com.bao.dating.util.*;
import com.bao.dating.util.CodeUtil;
import com.bao.dating.util.FileUtil; import com.bao.dating.util.FileUtil;
import com.bao.dating.util.JwtUtil; import com.bao.dating.util.JwtUtil;
import com.bao.dating.util.MD5Util; import com.bao.dating.util.MD5Util;
@@ -39,6 +44,10 @@ import java.util.concurrent.TimeUnit;
@Service @Service
public class UserServiceImpl implements UserService { public class UserServiceImpl implements UserService {
@Autowired
private SmsUtil smsUtil;
@Autowired @Autowired
private AliOssUtil ossUtil; private AliOssUtil ossUtil;
@@ -54,6 +63,9 @@ public class UserServiceImpl implements UserService {
@Autowired @Autowired
private UserMapper userMapper; private UserMapper userMapper;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired @Autowired
private VerificationCodeService verificationCodeService; private VerificationCodeService verificationCodeService;
@@ -230,13 +242,101 @@ public class UserServiceImpl implements UserService {
} }
} }
/**
* 更新用户信息
* @param userInfoUpdateDTO
* @return
*/
@Override
public UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO) {
Long userId = userInfoUpdateDTO.getUserId();
User user = userMapper.selectByUserId(userId);
if (user == null) {
throw new RuntimeException("用户不存在");
}
// 将需要审核的内容合并成一个文本,用于减少调用次数
StringBuilder textBuilder = new StringBuilder();
if (userInfoUpdateDTO.getNickname() != null && !userInfoUpdateDTO.getNickname().isEmpty()) {
textBuilder.append(userInfoUpdateDTO.getNickname()).append(" ");
}
if (userInfoUpdateDTO.getHobbies() != null && !userInfoUpdateDTO.getHobbies().isEmpty()) {
// 将爱好列表转换为字符串,用空格分隔
String hobbiesStr = String.join(" ", userInfoUpdateDTO.getHobbies());
textBuilder.append(hobbiesStr).append(" ");
}
if (userInfoUpdateDTO.getSignature() != null && !userInfoUpdateDTO.getSignature().isEmpty()) {
textBuilder.append(userInfoUpdateDTO.getSignature()).append(" ");
}
// 文本审核
if (textBuilder.length() > 0) {
Map textResult;
try {
textResult = greenTextScan.greeTextScan(textBuilder.toString());
} catch (Exception e) {
throw new RuntimeException("用户信息文本审核失败");
}
String suggestion = (String) textResult.get("suggestion");
if (GreenAuditResult.BLOCK.equals(suggestion)) {
throw new RuntimeException("用户信息包含违规内容,修改失败");
}
if (GreenAuditResult.REVIEW.equals(suggestion)) {
throw new RuntimeException("用户信息需要人工审核,暂无法修改");
}
}
// 图片审核
List<String> imageKeys = new ArrayList<>();
if (userInfoUpdateDTO.getAvatarUrl() != null && !userInfoUpdateDTO.getAvatarUrl().isEmpty()) {
imageKeys.add(userInfoUpdateDTO.getAvatarUrl());
}
if (userInfoUpdateDTO.getBackgroundUrl() != null && !userInfoUpdateDTO.getBackgroundUrl().isEmpty()) {
imageKeys.add(userInfoUpdateDTO.getBackgroundUrl());
}
if (!imageKeys.isEmpty()) {
Map imageResult;
try {
imageResult = greenImageScan.imageScan(imageKeys);
} catch (Exception e) {
throw new RuntimeException("用户图片审核失败");
}
String suggestion = (String) imageResult.get("suggestion");
if (GreenAuditResult.BLOCK.equals(suggestion)) {
throw new RuntimeException("头像或背景图不合规,修改失败");
}
if (GreenAuditResult.REVIEW.equals(suggestion)) {
throw new RuntimeException("头像或背景图需要人工审核,暂无法修改");
}
}
// 默认昵称兜底
if (userInfoUpdateDTO.getNickname() == null || userInfoUpdateDTO.getNickname().trim().isEmpty()) {
userInfoUpdateDTO.setNickname(user.getUserName());
}
userInfoUpdateDTO.setUpdatedAt(LocalDateTime.now());
// 更新数据库
userMapper.updateUserInfoByUserId(userInfoUpdateDTO);
// 封装返回结果
User updatedUser = userMapper.selectByUserId(userInfoUpdateDTO.getUserId());
UserInfoVO userInfoVO = new UserInfoVO();
BeanUtils.copyProperties(updatedUser, userInfoVO);
return userInfoVO;
}
/** /**
* 更新用户信息 * 更新用户信息
* *
* @param userInfoUpdateDTO 用户信息更新参数 * @param userInfoUpdateDTO 用户信息更新参数
*/ */
@Override @Override
public UserInfoVO updateUserInfo(UserInfoDTO userInfoUpdateDTO) { public UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO) {
Long userId = userInfoUpdateDTO.getUserId(); Long userId = userInfoUpdateDTO.getUserId();
User user = userMapper.selectByUserId(userId); User user = userMapper.selectByUserId(userId);
if (user == null) { if (user == null) {
@@ -391,4 +491,85 @@ public class UserServiceImpl implements UserService {
dto.setNickname(user.getNickname()); dto.setNickname(user.getNickname());
return dto; return dto;
} }
// 发送短信验证码
@Override
public void sendSmsCode(String phone) {
//防刷60 秒内只能发一次
String key = "sms:code:" + phone;
Boolean exists = stringRedisTemplate.hasKey(key);
if (Boolean.TRUE.equals(exists)){
throw new RuntimeException("请勿频繁发送验证码");
}
// 生成验证码
String code = CodeUtil.generateCode();
// 发送短信
smsUtil.sendVerificationCode(phone, code);
//存 Redis5分钟过期
stringRedisTemplate.opsForValue()
.set(key,code, 5, TimeUnit.MINUTES);
}
// 校验验证码
@Override
public boolean verifyCode(String phone, String code) {
String key = "sms:code:" + phone;
String realCode = stringRedisTemplate.opsForValue().get(key);
//过期,未发送
if (realCode ==null){
return false;
}
//不匹配
if (!realCode.equals(code)){
return false;
}
// 校验成功,删除验证码(一次性)
stringRedisTemplate.delete(key);
return true;
}
@Override
public UserLoginVO loginByPhone(String phone) {
//根据手机号查询用户
User user = userMapper.selectByPhone(phone);
//创建token
String token = JwtUtil.generateToken(user.getUserId().toString());
//封装返回结果
UserLoginVO VO = new UserLoginVO();
VO.setUserId(user.getUserId());
VO.setToken(token);
return VO;
}
@Override
public List<UserInfoVO> findNearbyUsers(double lat, double lng, double radiusKm) {
//先用经纬度范围筛选(矩形框,提高性能)
double delta = radiusKm / 111.0; // 1° ≈ 111km
double minLat = lat - delta;// 最小纬度
double maxLat = lat + delta;// 最大纬度
double minLng = lng - delta;// 最小经度
double maxLng = lng + delta;// 最大经度
// 打印经纬度范围
System.out.println("Min Latitude: " + minLat + ", Max Latitude: " + maxLat);
System.out.println("Min Longitude: " + minLng + ", Max Longitude: " + maxLng);
List<UserInfoVO> byLatLngRange = userMapper.findByLatLngRange(minLat, maxLat, minLng, maxLng);
//精确计算距离,筛选在半径内的用户
List<UserInfoVO> result = new ArrayList<>();
for (UserInfoVO u:byLatLngRange){
// 检查用户是否有经纬度信息
if (u.getLatitude() != null && u.getLongitude() != null) {
double distance = DistanceUtil.calculate(lat, lng, u.getLatitude(), u.getLongitude());
if (distance <= radiusKm){
result.add(u);
}
}
}
return result;
}
} }

View File

@@ -0,0 +1,12 @@
package com.bao.dating.util;
import java.util.Random;
public class CodeUtil {
// 生成6位数字验证码
public static String generateCode() {
Random random = new Random();
int code=100000+random.nextInt(900000);
return String.valueOf(code);
}
}

View File

@@ -0,0 +1,29 @@
package com.bao.dating.util;
//Haversine 公式(标准写法)
public class DistanceUtil {
private static final double EARTH_RADIUS = 6371.0; // 地球半径 km
/**
* 计算两点之间距离单位km
*/
public static double calculate(
double lat1, double lon1,
double lat2, double lon2) {
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(lat1) * Math.cos(lat2)
* Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return EARTH_RADIUS * c;
}
}

View File

@@ -32,6 +32,8 @@
<result property="signature" column="signature"/> <result property="signature" column="signature"/>
<result property="createdAt" column="created_at"/> <result property="createdAt" column="created_at"/>
<result property="updatedAt" column="updated_at"/> <result property="updatedAt" column="updated_at"/>
<result property="latitude" column="user_latitude"/>
<result property="longitude" column="user_longitude"/>
</resultMap> </resultMap>
<select id="selectByUserId" resultMap="UserResultMap"> <select id="selectByUserId" resultMap="UserResultMap">
SELECT SELECT
@@ -45,8 +47,10 @@
hobbies, hobbies,
signature, signature,
created_at, created_at,
updated_at updated_at,
FROM user WHERE user_id = #{userId} user_latitude,
user_longitude
FROM dating.user WHERE user_id = #{userId}
</select> </select>
<!-- 查询最大用户id --> <!-- 查询最大用户id -->
@@ -89,5 +93,42 @@
WHERE user_id = #{userId} WHERE user_id = #{userId}
</update> </update>
<select id="selectByPhone" resultType="com.bao.dating.pojo.entity.User">
select * from dating.user where user_phone =#{phone}
</select>
<resultMap id="UserInfoVOResultMap" type="com.bao.dating.pojo.vo.UserInfoVO">
<id property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<result property="nickname" column="nickname"/>
<result property="avatarUrl" column="avatar_url"/>
<result property="backgroundUrl" column="background_url"/>
<result property="gender" column="gender"/>
<result property="birthday" column="birthday"/>
<result property="hobbies" column="hobbies" typeHandler="com.bao.dating.handler.ListToJsonTypeHandler"/>
<result property="signature" column="signature"/>
<result property="createdAt" column="created_at"/>
<result property="updatedAt" column="updated_at"/>
<result property="latitude" column="user_latitude"/>
<result property="longitude" column="user_longitude"/>
</resultMap>
<select id="findByLatLngRange" resultMap="UserInfoVOResultMap">
SELECT
user_id,
user_name,
nickname,
avatar_url,
background_url,
gender,
birthday,
hobbies,
signature,
created_at,
updated_at,
user_latitude,
user_longitude
FROM user WHERE user_latitude BETWEEN #{minLat} AND #{maxLat} AND user_longitude BETWEEN #{minLng} AND #{maxLng}
</select>
</mapper> </mapper>