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学习者。 也可作为课程设计、期末大作业。包含:项目源码、数据库脚本、项目说明等,该项目可以直接作为毕设、课程设计使用。 也可以用来学习参考借鉴!
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot+SpringDatJpa+Vue开发的学生信息采集系统源码+sql数据库(毕设项目).zip (67个子文件)
sql
stuinfosys.sql 16KB
pom.xml 4KB
src
main
resources
application-pro.yml 848B
application-dev.yml 916B
application.yml 61B
java
com
example
Application.java 352B
repository
SysRaceScopeRepository.java 612B
SysRaceNameRepository.java 604B
SysGameLevelRepository.java 619B
SysRoleResourceRepository.java 415B
SysUserRepository.java 581B
SysUserRoleRepository.java 387B
SysScholarismRepository.java 564B
SysResourceRepository.java 221B
SysRoleRepository.java 453B
SysObtainRepository.java 663B
controller
SysUserController.java 3KB
SysRaceNameController.java 3KB
SysGameLevelController.java 3KB
SysRoleController.java 3KB
SysRaceScopeController.java 4KB
AnnoController.java 2KB
SysObtainController.java 5KB
SysScholarismController.java 6KB
utils
RUtil.java 495B
ShiroUtil.java 2KB
JPAUtil.java 843B
Assert.java 501B
from
SysRoleFrom.java 967B
SysUserFrom.java 1KB
service
SysRaceScopeService.java 565B
SysResourceService.java 144B
SysRaceNameService.java 553B
SysGameLevelService.java 512B
SysScholarismService.java 637B
SysObtainService.java 588B
impl
SysGameLevelServiceImpl.java 3KB
SysUserServiceImpl.java 7KB
SysScholarismServiceImpl.java 2KB
SysObtainServiceImpl.java 2KB
SysResourceServiceImpl.java 2KB
SysRoleServiceImpl.java 6KB
SysRaceNameServiceImpl.java 3KB
SysRaceScopeServiceImpl.java 3KB
SysUserService.java 465B
SysRoleService.java 386B
enums
REnum.java 899B
ForbiddenEnum.java 440B
model
SysGameLevel.java 418B
SysScholarism.java 2KB
SysRole.java 401B
SysObtain.java 2KB
SysUser.java 875B
SysResource.java 588B
SysRoleResource.java 442B
SysUserRole.java 435B
SysRaceName.java 418B
SysRaceScope.java 420B
exception
SystemException.java 493B
SystemExceptionHandler.java 804B
listener
ObtainListener.java 2KB
ScholarismListener.java 2KB
vo
SysUserVo.java 806B
SysRoleVo.java 556B
R.java 385B
config
ShiroConfig.java 3KB
UserRealm.java 3KB
共 67 条
- 1
资源评论
热爱编码的z同学
- 粉丝: 1783
- 资源: 2129
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功