package com.example.service.impl;
import com.example.enums.REnum;
import com.example.from.SysUserFrom;
import com.example.model.SysRole;
import com.example.model.SysUser;
import com.example.model.SysUserRole;
import com.example.repository.SysRoleRepository;
import com.example.repository.SysUserRepository;
import com.example.repository.SysUserRoleRepository;
import com.example.service.SysUserService;
import com.example.utils.JPAUtil;
import com.example.utils.RUtil;
import com.example.utils.ShiroUtil;
import com.example.vo.R;
import com.example.vo.SysUserVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional
@Slf4j
public class SysUserServiceImpl implements SysUserService {
@Autowired
SysUserRepository sysUserRepository;
@Autowired
SysUserRoleRepository sysUserRoleRepository;
@Autowired
SysRoleRepository sysRoleRepository;
/**
* 根据账号查询用户
*
* @param account
* @return
*/
public SysUser findByAccount(String account) {
return sysUserRepository.findByAccount(account);
}
/**
* 新增用户
*
* @param sysUserFrom
* @return
*/
@Override
public R saveUser(SysUserFrom sysUserFrom) {
/*判断该账号是否存在*/
if (sysUserRepository.findByAccount(sysUserFrom.getAccount()) != null) {
log.error(sysUserFrom.getAccount());
return RUtil.error(REnum.ACCOUNT_EXIST.getCode(), REnum.ACCOUNT_EXIST.getMessage());
}
/*分离用户基本信息与其角色*/
SysUser sysUser = new SysUser();
BeanUtils.copyProperties(sysUserFrom, sysUser);
/*生成盐以及加密码并保存*/
String salt = ShiroUtil.getSalt();
String md5Password = ShiroUtil.MD5(sysUser.getPassword(), salt);
sysUser.setPassword(md5Password);
sysUser.setSalt(salt);
SysUser sysUserSave = sysUserRepository.save(sysUser);
log.info("用户基本信息保存:sysUserSave = {}" + sysUserSave);
/*用户对应角色保存*/
List<SysUserRole> sysUserRoles = new ArrayList<>();
sysUserFrom.getSysRoles().forEach(o -> {
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setUserId(sysUserSave.getId());
sysUserRole.setRoleId(o.getId());
sysUserRoles.add(sysUserRole);
});
List<SysUserRole> sysUserRolesSave = sysUserRoleRepository.save(sysUserRoles);
log.info("用户角色保存:sysUserRolesSave = {}" + sysUserRolesSave);
return RUtil.success(sysUserRolesSave);
}
/**
* 查询用户列表
*
* @param name
* @param pageable
* @return
*/
@Override
public R selectUserList(String name, Pageable pageable) {
Specification<SysUser> specification = (root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicate = new ArrayList<>();
if (StringUtils.isNoneBlank(name)) {
predicate.add(criteriaBuilder.like(root.get("name").as(String.class), JPAUtil.like(name)));
}
Predicate[] pre = new Predicate[predicate.size()];
return criteriaQuery.where(predicate.toArray(pre)).getRestriction();
};
return RUtil.success(sysUserRepository.findAll(specification, pageable));
}
/**
* 查询用户详情
*
* @param id
* @return
*/
@Override
public R selectUserDetail(Integer id) {
/*查询用户基本信息*/
SysUserVo sysUserVo = new SysUserVo();
SysUser sysUser = sysUserRepository.findOne(id);
BeanUtils.copyProperties(sysUser, sysUserVo);
sysUserVo.setPassword("*********");
log.info("用户基本信息:sysUser = {}" + sysUser);
/*取出角色Id*/
List<SysUserRole> sysUserRoles = sysUserRoleRepository.findByUserId(id);
List<Integer> sysRoleIds = new ArrayList<>();
sysUserRoles.forEach(o -> {
sysRoleIds.add(o.getRoleId());
});
/*查询该用户用户角色*/
List<SysRole> sysRoles = sysRoleRepository.findAll(sysRoleIds);
log.info("用户角色:sysRoles = {}" + sysRoles);
sysUserVo.setSysRoles(sysRoles);
return RUtil.success(sysUserVo);
}
/**
* 更新用户
*
* @param sysUserFrom
* @return
*/
@Override
public R updateUser(SysUserFrom sysUserFrom) {
/*判断用户有没有修改账号*/
if (!sysUserRepository.findOne(sysUserFrom.getId()).getAccount().equals(sysUserFrom.getAccount())) {
/*用户修改账号*/
/*判断该账号是否存在*/
if (sysUserRepository.findByAccount(sysUserFrom.getAccount()) != null) {
log.error(sysUserFrom.getAccount());
return RUtil.error(REnum.ACCOUNT_EXIST.getCode(), REnum.ACCOUNT_EXIST.getMessage());
}
}
/*账号未修改*/
/*分离用户与其拥有角色*/
SysUser sysUser = new SysUser();
BeanUtils.copyProperties(sysUserFrom, sysUser);
/*初始化密码与盐并保存*/
String salt = ShiroUtil.getSalt();
String md5Password = ShiroUtil.MD5(sysUser.getPassword(), salt);
sysUser.setPassword(md5Password);
sysUser.setSalt(salt);
SysUser sysUserSave = sysUserRepository.save(sysUser);
log.info("用户更新:sysUserSave = {}" + sysUserSave);
/*初始化用户角色*/
sysUserRoleRepository.deleteByUserId(sysUserFrom.getId());
/*添加用户角色*/
List<SysUserRole> sysUserRoles = new ArrayList<>();
sysUserFrom.getSysRoles().forEach(o -> {
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setRoleId(o.getId());
sysUserRole.setUserId(sysUserFrom.getId());
sysUserRoles.add(sysUserRole);
});
List<SysUserRole> sysUserRolesSave = sysUserRoleRepository.save(sysUserRoles);
log.info("用户角色:sysUserRolesSave = {}" + sysUserRolesSave);
return RUtil.success(sysUserRolesSave);
}
/**
* 删除用户
*
* @param id
* @return
*/
@Override
public R deleteUser(Integer id) {
/*这里有个bug,直接删除用户会报错,需要在SysUserRoleRepository中添加@Transactional注解*/
sysUserRoleRepository.deleteByUserId(id);
sysUserRepository.delete(id);
return RUtil.success();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于SpringBoot+SpringDatJpa+Vue开发的学生信息采集系统源码+sql数据库(毕设项目).zip基于SpringBoot+SpringDatJpa+Vue开发的学生信息采集系统源码+sql数据库(毕设项目).zip基于SpringBoot+SpringDatJpa+Vue开发的学生信息采集系统源码+sql数据库(毕设项目).zip基于SpringBoot+SpringDatJpa+Vue开发的学生信息采集系统源码+sql数据库(毕设项目).zip基于SpringBoot+SpringDatJpa+Vue开发的学生信息采集系统源码+sql数据库(毕设项目).zip基于SpringBoot+SpringDatJpa+Vue开发的学生信息采集系统源码+sql数据库(毕设项目).zip 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java学习者。 也可作为课程设计、期末大作业。包含:项目源码、数据库脚本、项目说明等,该项目可以直接作为毕设、课程设计使用。 也可以用来学习参考借鉴!
资源推荐
资源详情
资源评论




















收起资源包目录























































































共 67 条
- 1
资源评论


zui初的梦想
- 粉丝: 813
- 资源: 1744
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


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