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
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于spring boot+vue的宠物领养服务管理系统(Java毕业设计,包括源码、数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于spring boot+vue的宠物领养服务管理系统(Java毕业设计,包括源码、数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于spring boot+vue的宠物领养服务管理系统(Java毕业设计,包括源码、数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于spring boot+vue的宠物领养服务管理系统(Java毕业设计,包括源码、数据库).zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要
资源推荐
资源详情
资源评论
收起资源包目录
基于spring boot+vue的宠物领养服务管理系统(Java毕业设计,包括源码、数据库).zip (389个子文件)
common.css 275KB
index.css 236KB
cascader.css 29KB
date-picker.css 28KB
transfer.css 28KB
col.css 27KB
pagination.css 23KB
table.css 23KB
message-box.css 22KB
time-picker.css 22KB
select.css 19KB
slider.css 18KB
tabs.css 16KB
base.css 16KB
dropdown.css 15KB
time-select.css 13KB
table-column.css 13KB
cascader-panel.css 13KB
tree.css 13KB
upload.css 12KB
icon.css 12KB
calendar.css 12KB
autocomplete.css 11KB
input-number.css 11KB
button.css 10KB
menu.css 9KB
color-picker.css 7KB
input.css 7KB
checkbox.css 7KB
step.css 5KB
collapse.css 5KB
drawer.css 5KB
tag.css 5KB
login.css 5KB
page.css 4KB
image.css 3KB
radio.css 3KB
login_phone.css 3KB
select-dropdown.css 3KB
form.css 3KB
descriptions.css 3KB
dialog.css 3KB
tooltip.css 3KB
carousel.css 2KB
radio-button.css 2KB
main.css 2KB
progress.css 2KB
popover.css 2KB
link.css 2KB
message.css 2KB
alert.css 2KB
switch.css 2KB
notification.css 2KB
loading.css 2KB
skeleton.css 2KB
popper.css 2KB
timeline-item.css 1KB
scrollbar.css 1KB
carousel-item.css 1024B
breadcrumb.css 1009B
display.css 982B
row.css 965B
skeleton-item.css 923B
spinner.css 883B
notices.css 866B
result.css 838B
descriptions-item.css 831B
badge.css 831B
empty.css 817B
reset.css 811B
adoption.css 752B
admin_users.css 752B
pets.css 751B
self_users.css 751B
divider.css 695B
page-header.css 620B
rate.css 550B
avatar.css 547B
option.css 533B
option-group.css 478B
card.css 463B
backtop.css 452B
container.css 445B
steps.css 302B
popconfirm.css 227B
main.css 184B
timeline.css 132B
footer.css 112B
header.css 112B
aside.css 110B
radio-group.css 85B
infinite-scroll.css 0B
menu-item.css 0B
breadcrumb-item.css 0B
infiniteScroll.css 0B
button-group.css 0B
submenu.css 0B
tab-pane.css 0B
menu-item-group.css 0B
checkbox-button.css 0B
共 389 条
- 1
- 2
- 3
- 4
资源评论
盈梓的博客
- 粉丝: 9557
- 资源: 2308
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 环境监测系统源代码全套技术资料.zip
- 前端分析-2023071100789
- 前端分析-2023071100789
- 基于springboot的调查问卷管理系统源代码全套技术资料.zip
- MATLAB代码:计及碳排放交易及多种需求响应的微网 电厂日前优化调度 关键词:碳排放交易 需求响应 空调负荷 电动汽车 微网 电厂优化调度 参考文档:计及电动汽车和需求响应的多类电力市场下
- 全国高校计算机能力挑战赛往届真题整理
- 小程序毕业设计项目-音乐播放器
- MATLAB代码:考虑多微网电能互补与需求响应的微网双层优化模型 关键词:多微网 电能互补 需求响应 双层优化 动态定价 能量管理 参考文档:《自编文档》 仿真平台:MATLAB+CPLEX 主要
- 智慧校园后勤管理系统源代码全套技术资料.zip
- MATLAB代码:含多种需求响应及电动汽车的微网 电厂日前优化调度 关键词:需求响应 空调负荷 电动汽车 微网优化调度 电厂调度 仿真平台:MATLAB+CPLEX 主要内容:代码主要做的是一
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功