package com.lurenjia.pets_adoption.service.impl;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lurenjia.pets_adoption.dto.R;
import com.lurenjia.pets_adoption.entity.Adoptions;
import com.lurenjia.pets_adoption.entity.Notices;
import com.lurenjia.pets_adoption.entity.Pets;
import com.lurenjia.pets_adoption.entity.Users;
import com.lurenjia.pets_adoption.mapper.UsersMapper;
import com.lurenjia.pets_adoption.service.IAdoptionsService;
import com.lurenjia.pets_adoption.service.INoticesService;
import com.lurenjia.pets_adoption.service.IPetsService;
import com.lurenjia.pets_adoption.service.IUsersService;
import com.lurenjia.pets_adoption.utils.SendSmsUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.time.LocalDate;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* <p>
* 服务实现类
* </p>
*
* @author lurenjia
* @since 2023-03-25
*/
@Service
@Slf4j
@EnableScheduling
public class UsersServiceImpl extends ServiceImpl<UsersMapper, Users> implements IUsersService {
@Autowired
@Lazy
private IAdoptionsService adoptionsService;
@Autowired
@Lazy
private IPetsService petsService;
@Autowired
@Lazy
private INoticesService noticesService;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public R<String> loginByPhone(String phone, String code, HttpSession session) {
//取验证码 redis中
String cacheCode = stringRedisTemplate.opsForValue().get("login:" + phone);
if (cacheCode == null) {
return R.error("验证码已失效,请重新获取!");
}
//判断 验证码错误
if (!cacheCode.equals(code)) {
return R.error("验证码错误,请确认输入!");
}
//取用户信息 数据库中
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Users::getUserPhone, phone);
Users user = getOne(queryWrapper);
//判断 账户状态
if (user.getUserStatus() == 3) {
return R.error("账户已暂停使用,详细信息请联系管理员!");
}
//登录成功,账户存入session中,保持连接
session.setAttribute("user", user);
//删除redis中的验证码
stringRedisTemplate.delete("login:" + phone);
log.info("用户 {} 登录成功!", user.getUserName());
return R.success("登录成功!");
}
@Override
public R<String> sendMsg(String phone, HttpSession session) {
//1 取出手机号绑定的用户 数据库中
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Users::getUserPhone, phone);
Users one = this.getOne(queryWrapper);
//1.5 判断 账户存在
if (one == null) {
return R.error("手机号未注册或绑定,请更换登录方式!");
}
//2 判断 账户状态
if (one.getUserStatus() == 3) {
return R.error("账户已暂停使用,详细信息请联系管理员!");
}
//3 生成 随机的6位数字验证码
String code = RandomUtil.randomNumbers(6);
//4 发送 验证码到手机
String message = SendSmsUtils.sendCode(code, phone);
if ("OK".equals(message)) {
//5 验证码存入 Redis中,key为指定前缀+手机号,有效期为5分钟
stringRedisTemplate.opsForValue().set("login:" + phone, code, 5, TimeUnit.MINUTES);
return R.success(message);
}
//5 验证码发送 失败,返回失败信息
return R.error(message);
}
/**
* 账户密码登录
*
* @param users
* @param session
* @return
*/
@Override
public R<String> login(Users users, HttpSession session) {
//1 取出账户信息 从数据库中
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Users::getUserAccount, users.getUserAccount());
Users user = this.getOne(queryWrapper);
//2 判断 账户存在
if (user == null) {
return R.error("账户不存在,请检查输入!");
}
//3 判断 账户状态
if (user.getUserStatus() == 3) {
return R.error("账户已暂停使用,详细信息请联系管理员!");
}
//4 判断 账户密码是否正确
if (users.getUserPassword().equals(user.getUserPassword())) {
//正确:账户存入session中,保持连接,30分钟
session.setAttribute("user", user);
return R.success("登录成功");
} else {
//错误
return R.error("密码错误,请检查输入!");
}
}
/**
* 注册账户
*
* @param users
* @return
*/
@Override
public R<String> logon(Users users) {
//1 取出账户信息 从数据库
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Users::getUserAccount, users.getUserAccount());
Users userOne = this.getOne(queryWrapper);
//2 判断 账户名已存在
if (userOne != null) {
return R.error("此账户名已经存在,换一个吧~");
}
//3 设置 必须的初始值
{
//注册时间
users.setUserRegistertime(LocalDate.now());
//昵称,默认和账户一样
users.setUserName(users.getUserAccount());
//性别,2代表未知
users.setUserSex(2);
//状态,0表示正常
users.setUserStatus(0);
//类型,0表示普通用户
users.setUserType(0);
}
//4 存入账户信息 到数据库中
this.save(users);
return R.success("注册成功!");
}
/**
* 获取列表信息
*
* @param page 页码
* @param pageSize 页码大小
* @param user 查询条件
* @return
*/
@Override
public R<Page> getList(Integer page, Integer pageSize, Users user) {
//1 构建 查询条件对象
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
//请求携带查询条件:用户姓名、用户状态,可能为空
queryWrapper.like((user.getUserRealname() != null) && !("".equals(user.getUserRealname())),
Users::getUserRealname, user.getUserRealname());
queryWrapper.eq((user.getUserStatus() != null) && !("".equals(user.getUserStatus())),
Users::getUserStatus, user.getUserStatus());
queryWrapper.orderByDesc(Users::getUserRegistertime);
//2 准备 页面数据对象
Page<Users> pageInfo = new Page<>(page, pageSize);
//3 查询数据
this.page(pageInfo, queryWrapper);
//4 响应数据
return R.success(pageInfo);
}
/**
* 修改用户类型:置为管理员、取消管理员
*
* @param id 用户编号
* @param code 1表示修改账户类型,2表示修改账户状态
* @return
*/
@Override
public R<String> updateUserField(Long i
没有合适的资源?快使用搜索试试~ 我知道了~
基于springboot+vue的宠物领养系统源码+数据库(高分毕业设计).zip

共388个文件
js:228个
css:105个
java:35个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉

温馨提示
基于springboot+vue的宠物领养系统源码+数据库(高分毕业设计).zip 也可作为期末大作业和课程设计,代码完整下载可用,纯手打高分毕业设计项目,小白也可实操。 基于springboot+vue的宠物领养系统源码+数据库(高分毕业设计).zip 也可作为期末大作业和课程设计,代码完整下载可用,纯手打高分毕业设计项目,小白也可实操。基于springboot+vue的宠物领养系统源码+数据库(高分毕业设计).zip 也可作为期末大作业和课程设计,代码完整下载可用,纯手打高分毕业设计项目,小白也可实操。基于springboot+vue的宠物领养系统源码+数据库(高分毕业设计).zip 也可作为期末大作业和课程设计,代码完整下载可用,纯手打高分毕业设计项目,小白也可实操。基于springboot+vue的宠物领养系统源码+数据库(高分毕业设计).zip 也可作为期末大作业和课程设计,代码完整下载可用,纯手打高分毕业设计项目,小白也可实操。基于springboot+vue的宠物领养系统源码+数据库(高分毕业设计).zip 也可作为期末大作业和课程设计,代码完整下载可用,
资源推荐
资源详情
资源评论


















收起资源包目录





































































































共 388 条
- 1
- 2
- 3
- 4

盈梓的博客小站
- 粉丝: 4827
- 资源: 713

下载权益

C知道特权

VIP文章

课程特权

开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
- 4
- 5
前往页