From d8d46ab089be26e33f3f83e71c74fa5594f3af06 Mon Sep 17 00:00:00 2001 From: yang Date: Mon, 5 Jan 2026 10:01:03 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=99=84=E8=BF=91?= =?UTF-8?q?=E7=9A=84=E4=BA=BA=EF=BC=88=E5=8F=AF=E4=BB=A5=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E7=89=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bao/dating/common/aliyun/SmsUtil.java | 3 ++ .../java/com/bao/dating/config/WebConfig.java | 3 +- .../bao/dating/controller/UserController.java | 18 +++++-- .../com/bao/dating/mapper/CommentsMapper.java | 6 +-- .../com/bao/dating/mapper/UserMapper.java | 12 +++++ .../com/bao/dating/pojo/vo/UserInfoVO.java | 2 + .../com/bao/dating/service/UserService.java | 4 ++ .../dating/service/impl/UserServiceImpl.java | 48 +++++++++++++++++++ .../java/com/bao/dating/util/CodeUtil.java | 12 +++++ .../com/bao/dating/util/DistanceUtil.java | 27 +++++++++++ .../com/bao/dating/mapper/UserMapper.xml | 9 ++++ 11 files changed, 137 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/bao/dating/util/CodeUtil.java create mode 100644 src/main/java/com/bao/dating/util/DistanceUtil.java diff --git a/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java b/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java index 290c766..65f7b39 100644 --- a/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java +++ b/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java @@ -75,6 +75,8 @@ public class SmsUtil { .setTemplateCode(templateCode != null ? templateCode : this.templateCode) .setTemplateParam(templateParam); + log.error("TemplateParam 实际值 = {}", templateParam); + SendSmsResponse response = client.sendSms(sendSmsRequest); if ("OK".equals(response.getBody().getCode())) { @@ -145,6 +147,7 @@ public class SmsUtil { jsonBuilder.append("}"); return sendSms(phoneNumber, templateCode, jsonBuilder.toString()); } + } diff --git a/src/main/java/com/bao/dating/config/WebConfig.java b/src/main/java/com/bao/dating/config/WebConfig.java index 98a0683..dc377a7 100644 --- a/src/main/java/com/bao/dating/config/WebConfig.java +++ b/src/main/java/com/bao/dating/config/WebConfig.java @@ -29,7 +29,8 @@ public class WebConfig implements WebMvcConfigurer { .addPathPatterns("/**") // 忽略的接口 .excludePathPatterns( - "/user/login" + "/user/login", + "/user/sendCode" ); } } diff --git a/src/main/java/com/bao/dating/controller/UserController.java b/src/main/java/com/bao/dating/controller/UserController.java index aad6328..7379311 100644 --- a/src/main/java/com/bao/dating/controller/UserController.java +++ b/src/main/java/com/bao/dating/controller/UserController.java @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; +import java.util.Map; /** * 用户接口 @@ -65,7 +66,6 @@ public class UserController { * @param file 头像文件 * @return 上传后的文件URL列表 */ - @Log @PostMapping(value = "/info/uploadAvatar", consumes = "multipart/form-data") public Result uploadAvatar(@RequestParam("file") MultipartFile file) { String fileUrl = userService.uploadAvatar(file); @@ -77,7 +77,6 @@ public class UserController { * @param file 背景文件 * @return 上传后的文件URL列表 */ - @Log @PostMapping(value = "/info/uploadBackground", consumes = "multipart/form-data") public Result uploadBackground(@RequestParam("file") MultipartFile file) { String fileUrl = userService.uploadBackground(file); @@ -89,7 +88,6 @@ public class UserController { * @param userInfoUpdateDTO 用户信息更新参数 * @return 更新后的用户信息 */ - @Log @PostMapping("/info/update") public Result userInfoUpdate(@RequestBody UserInfoUpdateDTO userInfoUpdateDTO) { Long userId = UserContext.getUserId(); @@ -97,4 +95,18 @@ public class UserController { UserInfoVO userInfoVO =userService.updateUserInfo(userInfoUpdateDTO); return Result.success(ResultCode.SUCCESS, "用户信息更新成功", userInfoVO); } + + @PostMapping("/sendCode") + public Result sendCode(@RequestBody Map body) { + String phone = body.get("phone"); + userService.sendSmsCode(phone); + return Result.success(ResultCode.SUCCESS, "验证码发送成功"); + } + + @PostMapping("/loginByCode") + public Result loginByCode(@RequestBody Map body){ + boolean ok = userService.verifyCode(body.get("phone"), body.get("code")); + return ok ? Result.success(ResultCode.SUCCESS, "登录成功") : Result.error(ResultCode.SYSTEM_ERROR, "登录失败"); + } + } diff --git a/src/main/java/com/bao/dating/mapper/CommentsMapper.java b/src/main/java/com/bao/dating/mapper/CommentsMapper.java index 78ca350..43e6184 100644 --- a/src/main/java/com/bao/dating/mapper/CommentsMapper.java +++ b/src/main/java/com/bao/dating/mapper/CommentsMapper.java @@ -8,15 +8,15 @@ import java.util.List; 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); // 删除评论 - @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); // 根据动态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 getCommentsByPostId(@Param("post_id") Long post_id); /** diff --git a/src/main/java/com/bao/dating/mapper/UserMapper.java b/src/main/java/com/bao/dating/mapper/UserMapper.java index b15f293..a49abc9 100644 --- a/src/main/java/com/bao/dating/mapper/UserMapper.java +++ b/src/main/java/com/bao/dating/mapper/UserMapper.java @@ -3,6 +3,9 @@ package com.bao.dating.mapper; import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.entity.User; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 用户Mapper @@ -33,4 +36,13 @@ public interface UserMapper { */ void updateUserInfoByUserId(UserInfoUpdateDTO userInfoUpdateDTO); + /** + * 根据经纬度范围查询用户 + * @param minLat 最小纬度 + * @param maxLat 最大纬度 + * @param minLng 最小经度 + * @param maxLng 最大经度 + * @return 用户列表 + */ + List findByLatLngRange(@Param("minLat") double minLat, @Param("maxLat") double maxLat, @Param("minLng") double minLng, @Param("maxLng") double maxLng); } diff --git a/src/main/java/com/bao/dating/pojo/vo/UserInfoVO.java b/src/main/java/com/bao/dating/pojo/vo/UserInfoVO.java index c5a81fa..35c5c90 100644 --- a/src/main/java/com/bao/dating/pojo/vo/UserInfoVO.java +++ b/src/main/java/com/bao/dating/pojo/vo/UserInfoVO.java @@ -24,4 +24,6 @@ public class UserInfoVO implements Serializable { private String signature; private LocalDateTime updatedAt; private LocalDateTime createdAt; + private Double latitude; + private Double longitude; } diff --git a/src/main/java/com/bao/dating/service/UserService.java b/src/main/java/com/bao/dating/service/UserService.java index 8dd074c..a1efe62 100644 --- a/src/main/java/com/bao/dating/service/UserService.java +++ b/src/main/java/com/bao/dating/service/UserService.java @@ -52,4 +52,8 @@ public interface UserService { * @return 更新后的用户信息 */ UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO); + + void sendSmsCode(String phone); + + boolean verifyCode(String phone, String code); } diff --git a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java index 189b7e3..196c9b5 100644 --- a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java @@ -3,6 +3,7 @@ package com.bao.dating.service.impl; import com.bao.dating.common.aliyun.AliOssUtil; import com.bao.dating.common.aliyun.GreenImageScan; 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.GreenAuditResult; import com.bao.dating.config.RedisConfig; @@ -14,6 +15,7 @@ import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.service.UserService; +import com.bao.dating.util.CodeUtil; import com.bao.dating.util.FileUtil; import com.bao.dating.util.JwtUtil; import com.bao.dating.util.MD5Util; @@ -21,6 +23,7 @@ import io.jsonwebtoken.Claims; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -37,6 +40,10 @@ import java.util.concurrent.TimeUnit; @Service public class UserServiceImpl implements UserService { + + @Autowired + private SmsUtil smsUtil; + @Autowired private AliOssUtil ossUtil; @@ -52,6 +59,9 @@ public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; + @Autowired + private StringRedisTemplate stringRedisTemplate; + /** * 用户登录 * @@ -311,4 +321,42 @@ public class UserServiceImpl implements UserService { BeanUtils.copyProperties(updatedUser, userInfoVO); return userInfoVO; } + + // 发送短信验证码 + @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); + //存 Redis(5分钟过期) + 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; + } + } diff --git a/src/main/java/com/bao/dating/util/CodeUtil.java b/src/main/java/com/bao/dating/util/CodeUtil.java new file mode 100644 index 0000000..be43c7f --- /dev/null +++ b/src/main/java/com/bao/dating/util/CodeUtil.java @@ -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); + } +} diff --git a/src/main/java/com/bao/dating/util/DistanceUtil.java b/src/main/java/com/bao/dating/util/DistanceUtil.java new file mode 100644 index 0000000..4db45ab --- /dev/null +++ b/src/main/java/com/bao/dating/util/DistanceUtil.java @@ -0,0 +1,27 @@ +package com.bao.dating.util; + +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; + } +} diff --git a/src/main/resources/com/bao/dating/mapper/UserMapper.xml b/src/main/resources/com/bao/dating/mapper/UserMapper.xml index 61bb82b..fcab72b 100644 --- a/src/main/resources/com/bao/dating/mapper/UserMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/UserMapper.xml @@ -28,6 +28,8 @@ + + + select * from dating.user where user_phone =#{phone} + + \ No newline at end of file From 31fd23afa868815cb3892fd016310ad7da301e58 Mon Sep 17 00:00:00 2001 From: yang Date: Wed, 7 Jan 2026 16:27:35 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=99=84=E8=BF=91?= =?UTF-8?q?=E7=9A=84=E4=BA=BA=EF=BC=88=E5=8F=AF=E4=BB=A5=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E7=89=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bao/dating/controller/UserController.java | 55 +++++++++++++++++++ .../com/bao/dating/mapper/UserMapper.java | 4 +- .../java/com/bao/dating/pojo/entity/User.java | 4 ++ .../com/bao/dating/service/UserService.java | 14 +++++ .../dating/service/impl/UserServiceImpl.java | 44 +++++++++++++++ .../com/bao/dating/util/DistanceUtil.java | 2 + .../com/bao/dating/mapper/UserMapper.xml | 6 +- 7 files changed, 126 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/bao/dating/controller/UserController.java b/src/main/java/com/bao/dating/controller/UserController.java index 7379311..8ef7bd6 100644 --- a/src/main/java/com/bao/dating/controller/UserController.java +++ b/src/main/java/com/bao/dating/controller/UserController.java @@ -6,6 +6,7 @@ import com.bao.dating.common.ResultCode; import com.bao.dating.context.UserContext; import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserLoginDTO; +import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.service.UserService; @@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.util.List; import javax.servlet.http.HttpServletRequest; import java.util.Map; @@ -109,4 +111,57 @@ public class UserController { return ok ? Result.success(ResultCode.SUCCESS, "登录成功") : Result.error(ResultCode.SYSTEM_ERROR, "登录失败"); } + /** + * 登录 + * @param body 登录参数 + */ + @PostMapping("/loginPhone") + public Result loginPhone(@RequestBody Map 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> 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 nearbyUsers = userService.findNearbyUsers(latitude, longitude, distance); + + // 返回成功结果 + return Result.success(ResultCode.SUCCESS, "获取附近用户成功", nearbyUsers); + } + } diff --git a/src/main/java/com/bao/dating/mapper/UserMapper.java b/src/main/java/com/bao/dating/mapper/UserMapper.java index a49abc9..0d9b9b2 100644 --- a/src/main/java/com/bao/dating/mapper/UserMapper.java +++ b/src/main/java/com/bao/dating/mapper/UserMapper.java @@ -36,6 +36,8 @@ public interface UserMapper { */ void updateUserInfoByUserId(UserInfoUpdateDTO userInfoUpdateDTO); + User selectByPhone(@Param("phone") String phone); + /** * 根据经纬度范围查询用户 * @param minLat 最小纬度 @@ -44,5 +46,5 @@ public interface UserMapper { * @param maxLng 最大经度 * @return 用户列表 */ - List findByLatLngRange(@Param("minLat") double minLat, @Param("maxLat") double maxLat, @Param("minLng") double minLng, @Param("maxLng") double maxLng); + List findByLatLngRange( @Param("minLat") double minLat, @Param("maxLat") double maxLat, @Param("minLng") double minLng, @Param("maxLng") double maxLng); } diff --git a/src/main/java/com/bao/dating/pojo/entity/User.java b/src/main/java/com/bao/dating/pojo/entity/User.java index e668af5..9bf9641 100644 --- a/src/main/java/com/bao/dating/pojo/entity/User.java +++ b/src/main/java/com/bao/dating/pojo/entity/User.java @@ -43,4 +43,8 @@ public class User implements Serializable { private String userEmail; private String userPhone; + + private Double latitude; // 纬度 + + private Double longitude; // 经度 } diff --git a/src/main/java/com/bao/dating/service/UserService.java b/src/main/java/com/bao/dating/service/UserService.java index a1efe62..bb12eae 100644 --- a/src/main/java/com/bao/dating/service/UserService.java +++ b/src/main/java/com/bao/dating/service/UserService.java @@ -2,10 +2,13 @@ package com.bao.dating.service; import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserLoginDTO; +import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserLoginVO; import org.springframework.web.multipart.MultipartFile; +import java.util.List; + /** * 用户服务接口 * @author KilLze @@ -56,4 +59,15 @@ public interface UserService { void sendSmsCode(String phone); boolean verifyCode(String phone, String code); + + UserLoginVO loginByPhone(String phone); + + /** + * 获取指定经纬度范围内的用户 + * @param lat 用户纬度 + * @param lng 用户经度 + * @param radiusKm 半径 km + * @return 用户列表 + */ + List findNearbyUsers(double lat,double lng,double radiusKm); } diff --git a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java index 196c9b5..3f89fb6 100644 --- a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java @@ -15,6 +15,7 @@ import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.service.UserService; +import com.bao.dating.util.*; import com.bao.dating.util.CodeUtil; import com.bao.dating.util.FileUtil; import com.bao.dating.util.JwtUtil; @@ -331,6 +332,7 @@ public class UserServiceImpl implements UserService { if (Boolean.TRUE.equals(exists)){ throw new RuntimeException("请勿频繁发送验证码"); } + // 生成验证码 String code = CodeUtil.generateCode(); // 发送短信 @@ -359,4 +361,46 @@ public class UserServiceImpl implements UserService { 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 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 byLatLngRange = userMapper.findByLatLngRange(minLat, maxLat, minLng, maxLng); + + //精确计算距离,筛选在半径内的用户 + List result = new ArrayList<>(); + for (User 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; + } } diff --git a/src/main/java/com/bao/dating/util/DistanceUtil.java b/src/main/java/com/bao/dating/util/DistanceUtil.java index 4db45ab..f994f31 100644 --- a/src/main/java/com/bao/dating/util/DistanceUtil.java +++ b/src/main/java/com/bao/dating/util/DistanceUtil.java @@ -1,5 +1,7 @@ package com.bao.dating.util; +//Haversine 公式(标准写法) + public class DistanceUtil { private static final double EARTH_RADIUS = 6371.0; // 地球半径 km diff --git a/src/main/resources/com/bao/dating/mapper/UserMapper.xml b/src/main/resources/com/bao/dating/mapper/UserMapper.xml index fcab72b..f49dfb4 100644 --- a/src/main/resources/com/bao/dating/mapper/UserMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/UserMapper.xml @@ -43,8 +43,10 @@ hobbies, signature, created_at, - updated_at - FROM user WHERE user_id = #{userId} + updated_at, + user_latitude, + user_longitude + FROM dating.user WHERE user_id = #{userId} From 31b0dffd6876e6c322276abd62f5d6e8a30a7c66 Mon Sep 17 00:00:00 2001 From: yang Date: Wed, 7 Jan 2026 17:07:16 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=99=84=E8=BF=91?= =?UTF-8?q?=E7=9A=84=E4=BA=BA=EF=BC=88=E5=8F=AF=E4=BB=A5=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E7=89=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bao/dating/controller/UserController.java | 7 ++-- .../com/bao/dating/mapper/CommentsMapper.java | 2 +- .../bao/dating/mapper/PostFavoriteMapper.java | 2 +- .../com/bao/dating/mapper/UserMapper.java | 3 +- .../java/com/bao/dating/pojo/entity/User.java | 4 +-- .../com/bao/dating/service/UserService.java | 2 +- .../dating/service/impl/UserServiceImpl.java | 8 ++--- .../com/bao/dating/mapper/UserMapper.xml | 34 +++++++++++++++++-- 8 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/bao/dating/controller/UserController.java b/src/main/java/com/bao/dating/controller/UserController.java index 8ef7bd6..7d65e65 100644 --- a/src/main/java/com/bao/dating/controller/UserController.java +++ b/src/main/java/com/bao/dating/controller/UserController.java @@ -6,7 +6,6 @@ import com.bao.dating.common.ResultCode; import com.bao.dating.context.UserContext; import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserLoginDTO; -import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.service.UserService; @@ -131,7 +130,7 @@ public class UserController { } @GetMapping("/nearby") - public Result> nearby( @RequestParam(defaultValue = "5") double distance){ + public Result> nearby(@RequestParam(defaultValue = "5") double distance){ // 获取当前线程的用户 ID Long userId = UserContext.getUserId(); if (userId == null) { @@ -158,10 +157,10 @@ public class UserController { longitude = (longitude != null) ? longitude : 0.0; // 查询附近用户 - List nearbyUsers = userService.findNearbyUsers(latitude, longitude, distance); + List nearbyUsers = userService.findNearbyUsers(latitude, longitude, distance); // 返回成功结果 - return Result.success(ResultCode.SUCCESS, "获取附近用户成功", nearbyUsers); + return Result.success(ResultCode.SUCCESS, "查询成功", nearbyUsers); } } diff --git a/src/main/java/com/bao/dating/mapper/CommentsMapper.java b/src/main/java/com/bao/dating/mapper/CommentsMapper.java index 43e6184..7313266 100644 --- a/src/main/java/com/bao/dating/mapper/CommentsMapper.java +++ b/src/main/java/com/bao/dating/mapper/CommentsMapper.java @@ -5,7 +5,7 @@ import com.bao.dating.pojo.entity.Comments; import org.apache.ibatis.annotations.*; import java.util.List; - +@Mapper public interface CommentsMapper { // 添加评论 @Insert("INSERT INTO dating.comments(content, user_id, post_id, created_at) VALUES(#{content}, #{user_id}, #{post_id}, #{created_at})") diff --git a/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java b/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java index 88f05e9..fa09316 100644 --- a/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java +++ b/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java @@ -7,7 +7,7 @@ import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper -public interface PostFavoriteMapper { +public interface PostFavoriteMapper { //查询当前已收藏所有用户 List selectUserIDByPostID(@Param("postId") Long postId); int addPostFavorite(PostFavorite postFavorite); diff --git a/src/main/java/com/bao/dating/mapper/UserMapper.java b/src/main/java/com/bao/dating/mapper/UserMapper.java index 0d9b9b2..f170906 100644 --- a/src/main/java/com/bao/dating/mapper/UserMapper.java +++ b/src/main/java/com/bao/dating/mapper/UserMapper.java @@ -2,6 +2,7 @@ package com.bao.dating.mapper; import com.bao.dating.pojo.dto.UserInfoUpdateDTO; 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.Param; @@ -46,5 +47,5 @@ public interface UserMapper { * @param maxLng 最大经度 * @return 用户列表 */ - List findByLatLngRange( @Param("minLat") double minLat, @Param("maxLat") double maxLat, @Param("minLng") double minLng, @Param("maxLng") double maxLng); + List findByLatLngRange(@Param("minLat") double minLat, @Param("maxLat") double maxLat, @Param("minLng") double minLng, @Param("maxLng") double maxLng); } diff --git a/src/main/java/com/bao/dating/pojo/entity/User.java b/src/main/java/com/bao/dating/pojo/entity/User.java index 9bf9641..482175a 100644 --- a/src/main/java/com/bao/dating/pojo/entity/User.java +++ b/src/main/java/com/bao/dating/pojo/entity/User.java @@ -44,7 +44,7 @@ public class User implements Serializable { private String userPhone; - private Double latitude; // 纬度 + private Double latitude; - private Double longitude; // 经度 + private Double longitude; } diff --git a/src/main/java/com/bao/dating/service/UserService.java b/src/main/java/com/bao/dating/service/UserService.java index bb12eae..0d1d1d7 100644 --- a/src/main/java/com/bao/dating/service/UserService.java +++ b/src/main/java/com/bao/dating/service/UserService.java @@ -69,5 +69,5 @@ public interface UserService { * @param radiusKm 半径 km * @return 用户列表 */ - List findNearbyUsers(double lat,double lng,double radiusKm); + List findNearbyUsers(double lat,double lng,double radiusKm); } diff --git a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java index 3f89fb6..6da9fb2 100644 --- a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java @@ -376,7 +376,7 @@ public class UserServiceImpl implements UserService { } @Override - public List findNearbyUsers(double lat, double lng, double radiusKm) { + public List findNearbyUsers(double lat, double lng, double radiusKm) { //先用经纬度范围筛选(矩形框,提高性能) double delta = radiusKm / 111.0; // 1° ≈ 111km double minLat = lat - delta;// 最小纬度 @@ -388,11 +388,11 @@ public class UserServiceImpl implements UserService { System.out.println("Min Latitude: " + minLat + ", Max Latitude: " + maxLat); System.out.println("Min Longitude: " + minLng + ", Max Longitude: " + maxLng); - List byLatLngRange = userMapper.findByLatLngRange(minLat, maxLat, minLng, maxLng); + List byLatLngRange = userMapper.findByLatLngRange(minLat, maxLat, minLng, maxLng); //精确计算距离,筛选在半径内的用户 - List result = new ArrayList<>(); - for (User u:byLatLngRange){ + List result = new ArrayList<>(); + for (UserInfoVO u:byLatLngRange){ // 检查用户是否有经纬度信息 if (u.getLatitude() != null && u.getLongitude() != null) { double distance = DistanceUtil.calculate(lat, lng, u.getLatitude(), u.getLongitude()); diff --git a/src/main/resources/com/bao/dating/mapper/UserMapper.xml b/src/main/resources/com/bao/dating/mapper/UserMapper.xml index f49dfb4..6019dcd 100644 --- a/src/main/resources/com/bao/dating/mapper/UserMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/UserMapper.xml @@ -5,6 +5,22 @@ + + + + + + + + + + + + + + + + select * from dating.user where user_phone =#{phone} - + 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} \ No newline at end of file From 290db24bc4dce8c009d85d3562a6c0a938e429c8 Mon Sep 17 00:00:00 2001 From: yang Date: Wed, 7 Jan 2026 17:07:16 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=99=84=E8=BF=91?= =?UTF-8?q?=E7=9A=84=E4=BA=BA=EF=BC=88=E5=8F=AF=E4=BB=A5=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E7=89=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/com/bao/dating/mapper/UserMapper.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/resources/com/bao/dating/mapper/UserMapper.xml b/src/main/resources/com/bao/dating/mapper/UserMapper.xml index 6019dcd..8357c22 100644 --- a/src/main/resources/com/bao/dating/mapper/UserMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/UserMapper.xml @@ -44,8 +44,6 @@ - - SELECT user_id, @@ -44,6 +28,8 @@ + + @@ -96,8 +82,24 @@ + + + + + + + + + + + + + + + +