package com.xingying.travel.service;
import com.aliyuncs.exceptions.ClientException;
import com.xingying.travel.dao.UserDao;
import com.xingying.travel.pojo.User;
import com.xingying.travel.util.IdWorker;
import com.xingying.travel.util.MailUtil;
import com.xingying.travel.util.RandomUtil;
import com.xingying.travel.util.SmsUtil;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* user服务层
*
* @author Administrator
*
*/
@Service
@Transactional
public class UserService {
@Autowired
private UserDao userDao;
@Autowired
private IdWorker idWorker;
// @Qualifier("redisTemplate")
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
BCryptPasswordEncoder encoder;
@Resource
MailUtil mailService;
@Resource
TemplateEngine templateEngine;
/**
* 查询全部列表
* @return
*/
public List<User> findAll() {
return userDao.findAll();
}
/**
* 条件查询+分页
* @param whereMap
* @param page
* @param size
* @return
*/
public Page<User> findSearch(Map whereMap, int page, int size) {
Specification<User> specification = createSpecification(whereMap);
PageRequest pageRequest = PageRequest.of(page-1, size);
return userDao.findAll(specification, pageRequest);
}
/**
* 条件查询
* @param whereMap
* @return
*/
public List<User> findSearch(Map whereMap) {
Specification<User> specification = createSpecification(whereMap);
return userDao.findAll(specification);
}
/**
* 根据ID查询实体
* @param id
* @return
*/
public User findById(String id) {
return userDao.findById(id).get();
}
/**
* 增加
* @param user
*/
public void add(User user) {
user.setId( idWorker.nextId()+"" );
String newpassword = encoder.encode(user.getPassword());//加密后的密码
user.setPassword(newpassword);
userDao.save(user);
}
/**
* 修改
* @param user
*/
public void update(User user) {
userDao.save(user);
}
/**
* 删除
* @param id
*/
public void deleteById(String id) {
userDao.deleteById(id);
}
/**
* 动态条件构建
* @param searchMap
* @return
*/
private Specification<User> createSpecification(Map searchMap) {
return new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicateList = new ArrayList<Predicate>();
// id
if (searchMap.get("id")!=null && !"".equals(searchMap.get("id"))) {
predicateList.add(cb.like(root.get("id").as(String.class), "%"+(String)searchMap.get("id")+"%"));
}
// 姓名
if (searchMap.get("name")!=null && !"".equals(searchMap.get("name"))) {
predicateList.add(cb.like(root.get("name").as(String.class), "%"+(String)searchMap.get("name")+"%"));
}
// 密码
if (searchMap.get("password")!=null && !"".equals(searchMap.get("password"))) {
predicateList.add(cb.like(root.get("password").as(String.class), "%"+(String)searchMap.get("password")+"%"));
}
// 邮箱
if (searchMap.get("email")!=null && !"".equals(searchMap.get("email"))) {
predicateList.add(cb.like(root.get("email").as(String.class), "%"+(String)searchMap.get("email")+"%"));
}
// 性别,男1,女0
if (searchMap.get("sex")!=null && !"".equals(searchMap.get("sex"))) {
predicateList.add(cb.like(root.get("sex").as(String.class), "%"+(String)searchMap.get("sex")+"%"));
}
// 盐
if (searchMap.get("salt")!=null && !"".equals(searchMap.get("salt"))) {
predicateList.add(cb.like(root.get("salt").as(String.class), "%"+(String)searchMap.get("salt")+"%"));
}
return cb.and( predicateList.toArray(new Predicate[predicateList.size()]));
}
};
}
/**
* 发送邮箱验证码
* @param email
*/
public void sendEmail(String email) {
//产生随机数
String checkcode = RandomStringUtils.randomNumeric(6);
//向缓存发一份
redisTemplate.opsForValue().set("checkcode_",checkcode,1, TimeUnit.HOURS);
Context context = new Context();
context.setVariable("id",checkcode);
String emailContent = templateEngine.process("emailTemplate",context);
System.out.println("邮箱-->"+ email);
mailService.sendHtmlMail(email,"模板邮件",emailContent);
//测试
System.out.println("验证码:"+checkcode);
}
// @Autowired
// private RedisTemplate<String, String> redisTemplate;
// @Autowired
// private RabbitTemplate rabbitTemplate;
// import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
@Autowired
private SmsUtil smsUtil;
@Value("${aliyun.sms.template_code}")
private String template_code;
@Value("${aliyun.sms.sign_name}")
private String sign_name;
// @Autowired
// private RandomUtil randomUtil;
/**
* 发送验证码
* @param mobile
*/
public void sendSms(String mobile) throws ClientException {
//产生随机数
String checkcode = RandomStringUtils.randomNumeric(6);
//向缓存发一份
redisTemplate.opsForValue().set("checkcode_"+mobile,checkcode,1, TimeUnit.HOURS);
// String mobile = map.get("mobile");
// String checkcode = map.get("checkcode");
System.out.println("手机号:" + mobile + " 验证码:" + checkcode);
System.out.println(mobile);
System.out.println(checkcode);
try {
//下面可以调用短信中心发送短信,我这里就不调用了,这个要扣钱的
smsUtil.sendSms(mobile,template_code,sign_name,"{\"code\":\""+checkcode+"\"}");
} catch (ClientException e) {
e.printStackTrace();
}
//放入消息队列
// Map<String,String> map = new HashMap<>();
// map.put("mobile",mobile);
// map.put("checkcode",checkcode);
// //发送给用户
// rabbitTemplate.convertAndSend("sms",map);
// //测试
System.out.println("验证码:"+checkcode);
}
/**
* 根据手机号和密码查询用户
* @param mobile
* @param password
* @return
*/
public User findByMobileAndPassword(String mobile,String password){
User user = userDao.findByMobile(mobile);
if(user!=null && encoder.matches(password,user.getPassword())){
return user;
}else{
return null;
}
}
public User findByEmail(String email){
return userDao.findByEmail(email);
}
/**
* 根据手机号查询
* @param mobile
* @return
*/
public User findByMobile(Str
csbysj2020
- 粉丝: 2878
- 资源: 5588
最新资源
- 72619971-63e9-4b20-aae7-d6ce002ace9-1.zip
- 蓄电池多模式充放电simulink仿真 双向Buck Boost变器仿真 ①定直流电压控制 ②恒压充放电控制 ③恒流充放电控制 ④恒功率充放电控制 直流电压等级400V
- NC升级元数据的避坑手册文档
- 基于机器视觉的水果分拣系统(Python)
- 南京邮电大学信号与系统期末复习总结
- 目标检测xml文件转txt文件
- 网站系统渗透测试报告.doc
- 安卓开发-身份证识别(腾讯云服务)
- AVPro Video v3 - Ultra Edition 3.0.8.unitypackage
- 代码复现;冷热电气多门互补的微能源网鲁棒优化调度MATLAB复现 随着能源结构调整,集成风/光等可再生能源输入、冷热电气等多种能源互补输出的微能源网得到了逐步发展,如何协调调度微能源网内冷热电气源网荷
- 毕业设计-python的高校学生学业预警系统(毕业全套文档+源代码).zip
- Comsol光学 :taper波导传输及倏逝场效率求解
- 自已使用不建议借鉴0.0sada
- 滑动平均算法(代码十分完整) 1、用于平抑功率波动、包括风电输出功率波动、光伏输出功率波动 得到并网功率 2、另一类是消除噪音 空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度
- 改进下垂控制、微电网控制方向 1、纯阻性负载和冲击负载对母线电压稳(simulink) 2、程序创新点是:采用新改进下垂控制策略(有图形的讲解word) 3、减小直流母线电压的偏差,以混合储能系统为例
- 五种不同类型的数据库安装 在线YUM仓库 二进制本地安装 docker容器平台安装 源码部署 Windows平台
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈