查询附近的人(可以查看版)
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,8 @@ public class WebConfig implements WebMvcConfigurer {
|
||||
.addPathPatterns("/**")
|
||||
// 忽略的接口
|
||||
.excludePathPatterns(
|
||||
"/user/login"
|
||||
"/user/login",
|
||||
"/user/sendCode"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String> 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<String> 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<UserInfoVO> 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<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, "登录失败");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<Comments> getCommentsByPostId(@Param("post_id") Long post_id);
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<User> findByLatLngRange(@Param("minLat") double minLat, @Param("maxLat") double maxLat, @Param("minLng") double minLng, @Param("maxLng") double maxLng);
|
||||
}
|
||||
|
||||
@@ -24,4 +24,6 @@ public class UserInfoVO implements Serializable {
|
||||
private String signature;
|
||||
private LocalDateTime updatedAt;
|
||||
private LocalDateTime createdAt;
|
||||
private Double latitude;
|
||||
private Double longitude;
|
||||
}
|
||||
|
||||
@@ -52,4 +52,8 @@ public interface UserService {
|
||||
* @return 更新后的用户信息
|
||||
*/
|
||||
UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO);
|
||||
|
||||
void sendSmsCode(String phone);
|
||||
|
||||
boolean verifyCode(String phone, String code);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
12
src/main/java/com/bao/dating/util/CodeUtil.java
Normal file
12
src/main/java/com/bao/dating/util/CodeUtil.java
Normal 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);
|
||||
}
|
||||
}
|
||||
27
src/main/java/com/bao/dating/util/DistanceUtil.java
Normal file
27
src/main/java/com/bao/dating/util/DistanceUtil.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,8 @@
|
||||
<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="selectByUserId" resultMap="UserResultMap">
|
||||
SELECT
|
||||
@@ -74,4 +76,11 @@
|
||||
</set>
|
||||
WHERE user_id = #{userId}
|
||||
</update>
|
||||
|
||||
<select id="selectByPhone" resultType="com.bao.dating.pojo.entity.User">
|
||||
select * from dating.user where user_phone =#{phone}
|
||||
</select>
|
||||
<select id="findByLatLngRange" resultType="com.bao.dating.pojo.entity.User">
|
||||
SELECT * FROM user WHERE user_latitude BETWEEN #{minLat} AND #{maxLat} AND user_longitude BETWEEN #{minLng} AND #{maxLng}
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user