Commit 9f43851e authored by zhengjie's avatar zhengjie
Browse files

1.7版本发布,详情查看版本说明

parent 1402e584
package me.zhengjie.modules.system.service.impl;
import me.zhengjie.modules.system.domain.DictDetail;
import me.zhengjie.utils.ValidationUtil;
import me.zhengjie.modules.system.repository.DictDetailRepository;
import me.zhengjie.modules.system.service.DictDetailService;
import me.zhengjie.modules.system.service.dto.DictDetailDTO;
import me.zhengjie.modules.system.service.mapper.DictDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
/**
* @author jie
* @date 2019-04-10
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DictDetailServiceImpl implements DictDetailService {
@Autowired
private DictDetailRepository dictDetailRepository;
@Autowired
private DictDetailMapper dictDetailMapper;
@Override
public DictDetailDTO findById(Long id) {
Optional<DictDetail> dictDetail = dictDetailRepository.findById(id);
ValidationUtil.isNull(dictDetail,"DictDetail","id",id);
return dictDetailMapper.toDto(dictDetail.get());
}
@Override
@Transactional(rollbackFor = Exception.class)
public DictDetailDTO create(DictDetail resources) {
return dictDetailMapper.toDto(dictDetailRepository.save(resources));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(DictDetail resources) {
Optional<DictDetail> optionalDictDetail = dictDetailRepository.findById(resources.getId());
ValidationUtil.isNull( optionalDictDetail,"DictDetail","id",resources.getId());
DictDetail dictDetail = optionalDictDetail.get();
// 此处需自己修改
resources.setId(dictDetail.getId());
dictDetailRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
dictDetailRepository.deleteById(id);
}
}
\ No newline at end of file
package me.zhengjie.modules.system.service.impl;
import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.utils.ValidationUtil;
import me.zhengjie.modules.system.repository.DictRepository;
import me.zhengjie.modules.system.service.DictService;
import me.zhengjie.modules.system.service.dto.DictDTO;
import me.zhengjie.modules.system.service.mapper.DictMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
/**
* @author jie
* @date 2019-04-10
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DictServiceImpl implements DictService {
@Autowired
private DictRepository dictRepository;
@Autowired
private DictMapper dictMapper;
@Override
public DictDTO findById(Long id) {
Optional<Dict> dict = dictRepository.findById(id);
ValidationUtil.isNull(dict,"Dict","id",id);
return dictMapper.toDto(dict.get());
}
@Override
@Transactional(rollbackFor = Exception.class)
public DictDTO create(Dict resources) {
return dictMapper.toDto(dictRepository.save(resources));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Dict resources) {
Optional<Dict> optionalDict = dictRepository.findById(resources.getId());
ValidationUtil.isNull( optionalDict,"Dict","id",resources.getId());
Dict dict = optionalDict.get();
// 此处需自己修改
resources.setId(dict.getId());
dictRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
dictRepository.deleteById(id);
}
}
\ No newline at end of file
package me.zhengjie.modules.system.service.impl;
import me.zhengjie.modules.system.domain.Job;
import me.zhengjie.utils.ValidationUtil;
import me.zhengjie.modules.system.repository.JobRepository;
import me.zhengjie.modules.system.service.JobService;
import me.zhengjie.modules.system.service.dto.JobDTO;
import me.zhengjie.modules.system.service.mapper.JobMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
/**
* @author jie
* @date 2019-03-29
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class JobServiceImpl implements JobService {
@Autowired
private JobRepository jobRepository;
@Autowired
private JobMapper jobMapper;
@Override
public JobDTO findById(Long id) {
Optional<Job> job = jobRepository.findById(id);
ValidationUtil.isNull(job,"Job","id",id);
return jobMapper.toDto(job.get());
}
@Override
@Transactional(rollbackFor = Exception.class)
public JobDTO create(Job resources) {
return jobMapper.toDto(jobRepository.save(resources));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Job resources) {
Optional<Job> optionalJob = jobRepository.findById(resources.getId());
ValidationUtil.isNull( optionalJob,"Job","id",resources.getId());
Job job = optionalJob.get();
// 此处需自己修改
resources.setId(job.getId());
jobRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
jobRepository.deleteById(id);
}
}
\ No newline at end of file
......@@ -37,7 +37,7 @@ public class MenuServiceImpl implements MenuService {
}
@Override
public List<MenuDTO> findByRoles(Set<Role> roles) {
public List<MenuDTO> findByRoles(List<Role> roles) {
Set<Menu> menus = new LinkedHashSet<>();
for (Role role : roles) {
List<Menu> menus1 = menuRepository.findByRoles_IdOrderBySortAsc(role.getId()).stream().collect(Collectors.toList());
......@@ -61,6 +61,9 @@ public class MenuServiceImpl implements MenuService {
@Override
public void update(Menu resources) {
if(resources.getId().equals(resources.getPid())) {
throw new BadRequestException("上级不能为自己");
}
Optional<Menu> optionalPermission = menuRepository.findById(resources.getId());
ValidationUtil.isNull(optionalPermission,"Permission","id",resources.getId());
......@@ -87,10 +90,6 @@ public class MenuServiceImpl implements MenuService {
@Override
public void delete(Long id) {
List<Menu> menuList = menuRepository.findByPid(id);
for (Menu menu : menuList) {
menuRepository.delete(menu);
}
menuRepository.deleteById(id);
}
......@@ -193,4 +192,11 @@ public class MenuServiceImpl implements MenuService {
);
return list;
}
@Override
public Menu findOne(Long id) {
Optional<Menu> menu = menuRepository.findById(id);
ValidationUtil.isNull(menu,"Menu","id",id);
return menu.get();
}
}
......@@ -47,8 +47,10 @@ public class PermissionServiceImpl implements PermissionService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Permission resources) {
Optional<Permission> optionalPermission = permissionRepository.findById(resources.getId());
if(resources.getId().equals(resources.getPid())) {
throw new BadRequestException("上级不能为自己");
}
ValidationUtil.isNull(optionalPermission,"Permission","id",resources.getId());
Permission permission = optionalPermission.get();
......
package me.zhengjie.modules.system.service.impl;
import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.exception.EntityExistException;
......@@ -13,6 +14,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author jie
......@@ -61,6 +63,8 @@ public class RoleServiceImpl implements RoleService {
role.setName(resources.getName());
role.setRemark(resources.getRemark());
role.setDataScope(resources.getDataScope());
role.setDepts(resources.getDepts());
roleRepository.save(role);
}
......@@ -79,28 +83,23 @@ public class RoleServiceImpl implements RoleService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
roleRepository.deleteById(id);
public void untiedMenu(Menu menu) {
Set<Role> roles = roleRepository.findByMenus_Id(menu.getId());
for (Role role : roles) {
menu.getRoles().remove(role);
role.getMenus().remove(menu);
roleRepository.save(role);
}
}
@Override
public Object getRoleTree() {
List<Role> roleList = roleRepository.findAll();
List<Map<String, Object>> list = new ArrayList<>();
for (Role role : roleList) {
Map<String, Object> map = new HashMap<>();
map.put("id",role.getId());
map.put("label",role.getName());
list.add(map);
}
return list;
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
roleRepository.deleteById(id);
}
@Override
public Set<Role> findByUsers_Id(Long id) {
return roleRepository.findByUsers_Id(id);
public List<Role> findByUsers_Id(Long id) {
return roleRepository.findByUsers_Id(id).stream().collect(Collectors.toList());
}
}
package me.zhengjie.modules.system.service.impl;
import me.zhengjie.modules.system.domain.User;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.exception.EntityExistException;
import me.zhengjie.exception.EntityNotFoundException;
import me.zhengjie.modules.system.repository.UserRepository;
import me.zhengjie.modules.security.security.JwtUser;
import me.zhengjie.modules.security.utils.JwtTokenUtil;
import me.zhengjie.modules.system.service.UserService;
import me.zhengjie.modules.system.service.dto.UserDTO;
import me.zhengjie.modules.system.service.mapper.UserMapper;
......@@ -32,9 +29,6 @@ public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Override
public UserDTO findById(long id) {
Optional<User> user = userRepository.findById(id);
......@@ -54,20 +48,15 @@ public class UserServiceImpl implements UserService {
throw new EntityExistException(User.class,"email",resources.getEmail());
}
if(resources.getRoles() == null || resources.getRoles().size() == 0){
throw new BadRequestException("角色不能为空");
}
// 默认密码 123456,此密码是 MD5加密后的字符
resources.setPassword("14e1b600b1fd579f47433b88e8d85291");
resources.setAvatar("https://i.loli.net/2018/12/06/5c08894d8de21.jpg");
// 默认密码 123456,此密码是加密后的字符
resources.setPassword("e10adc3949ba59abbe56e057f20f883e");
resources.setAvatar("https://aurora-1255840532.cos.ap-chengdu.myqcloud.com/8918a306ea314404835a9196585c4b75.jpeg");
return userMapper.toDto(userRepository.save(resources));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(User resources) {
Optional<User> userOptional = userRepository.findById(resources.getId());
ValidationUtil.isNull(userOptional,"User","id",resources.getId());
......@@ -76,10 +65,6 @@ public class UserServiceImpl implements UserService {
User user1 = userRepository.findByUsername(user.getUsername());
User user2 = userRepository.findByEmail(user.getEmail());
if(resources.getRoles() == null || resources.getRoles().size() == 0){
throw new BadRequestException("角色不能为空");
}
if(user1 !=null&&!user.getId().equals(user1.getId())){
throw new EntityExistException(User.class,"username",resources.getUsername());
}
......@@ -92,7 +77,9 @@ public class UserServiceImpl implements UserService {
user.setEmail(resources.getEmail());
user.setEnabled(resources.getEnabled());
user.setRoles(resources.getRoles());
user.setDept(resources.getDept());
user.setJob(resources.getJob());
user.setPhone(resources.getPhone());
userRepository.save(user);
}
......@@ -120,19 +107,19 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updatePass(JwtUser jwtUser, String pass) {
userRepository.updatePass(jwtUser.getId(),pass,new Date());
public void updatePass(String username, String pass) {
userRepository.updatePass(username,pass,new Date());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateAvatar(JwtUser jwtUser, String url) {
userRepository.updateAvatar(jwtUser.getId(),url);
public void updateAvatar(String username, String url) {
userRepository.updateAvatar(username,url);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEmail(JwtUser jwtUser, String email) {
userRepository.updateEmail(jwtUser.getId(),email);
public void updateEmail(String username, String email) {
userRepository.updateEmail(username,email);
}
}
package me.zhengjie.modules.system.service.mapper;
import me.zhengjie.mapper.EntityMapper;
import me.zhengjie.modules.system.domain.Dept;
import me.zhengjie.modules.system.service.dto.DeptDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author jie
* @date 2019-03-25
*/
@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface DeptMapper extends EntityMapper<DeptDTO, Dept> {
}
\ No newline at end of file
package me.zhengjie.modules.system.service.mapper;
import me.zhengjie.mapper.EntityMapper;
import me.zhengjie.modules.system.domain.DictDetail;
import me.zhengjie.modules.system.service.dto.DictDetailDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author jie
* @date 2019-04-10
*/
@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface DictDetailMapper extends EntityMapper<DictDetailDTO, DictDetail> {
}
\ No newline at end of file
package me.zhengjie.modules.system.service.mapper;
import me.zhengjie.mapper.EntityMapper;
import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.modules.system.service.dto.DictDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author jie
* @date 2019-04-10
*/
@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface DictMapper extends EntityMapper<DictDTO, Dict> {
}
\ No newline at end of file
package me.zhengjie.modules.system.service.mapper;
import me.zhengjie.mapper.EntityMapper;
import me.zhengjie.modules.system.domain.Job;
import me.zhengjie.modules.system.service.dto.JobDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author jie
* @date 2019-03-29
*/
@Mapper(componentModel = "spring",uses = {DeptMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface JobMapper extends EntityMapper<JobDTO, Job> {
}
\ No newline at end of file
......@@ -10,7 +10,7 @@ import org.mapstruct.ReportingPolicy;
* @author jie
* @date 2018-11-23
*/
@Mapper(componentModel = "spring", uses = {PermissionMapper.class, MenuMapper.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE)
@Mapper(componentModel = "spring", uses = {PermissionMapper.class, MenuMapper.class, DeptMapper.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface RoleMapper extends EntityMapper<RoleDTO, Role> {
}
......@@ -10,7 +10,7 @@ import org.mapstruct.ReportingPolicy;
* @author jie
* @date 2018-11-23
*/
@Mapper(componentModel = "spring",uses = {RoleMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE)
@Mapper(componentModel = "spring",uses = {RoleMapper.class, DeptMapper.class, JobMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserMapper extends EntityMapper<UserDTO, User> {
}
package me.zhengjie.modules.system.service.query;
import me.zhengjie.modules.system.domain.Dept;
import me.zhengjie.modules.system.service.dto.DeptDTO;
import me.zhengjie.modules.system.repository.DeptRepository;
import me.zhengjie.modules.system.service.mapper.DeptMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
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.List;
import java.util.Set;
/**
* @author jie
* @date 2018-12-03
*/
@Service
@CacheConfig(cacheNames = "dept")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DeptQueryService {
@Autowired
private DeptRepository deptRepository;
@Autowired
private DeptMapper deptMapper;
/**
* 不分页
*/
@Cacheable(keyGenerator = "keyGenerator")
public List queryAll(DeptDTO dept, Set<Long> deptIds){
return deptMapper.toDto(deptRepository.findAll(new Spec(dept, deptIds)));
}
class Spec implements Specification<Dept> {
private DeptDTO dept;
private Set<Long> deptIds;
public Spec(DeptDTO dept, Set<Long> deptIds){
this.dept = dept;
this.deptIds = deptIds;
}
@Override
public Predicate toPredicate(Root<Dept> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>();
if(!ObjectUtils.isEmpty(dept.getName())){
/**
* 模糊
*/
list.add(cb.like(root.get("name").as(String.class),"%"+dept.getName()+"%"));
}
if(!ObjectUtils.isEmpty(dept.getEnabled())){
/**
* 相等
*/
list.add(cb.equal(root.get("enabled").as(Boolean.class),dept.getEnabled()));
}
if(!ObjectUtils.isEmpty(dept.getPid())){
/**
* 相等
*/
list.add(cb.equal(root.get("pid").as(Boolean.class),dept.getPid()));
}
if (!CollectionUtils.isEmpty(deptIds)) {
list.add(root.get("id").in(deptIds));
}
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
}
}
}
\ No newline at end of file
package me.zhengjie.modules.system.service.query;
import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.utils.PageUtil;
import me.zhengjie.modules.system.domain.DictDetail;
import me.zhengjie.modules.system.service.dto.DictDetailDTO;
import me.zhengjie.modules.system.repository.DictDetailRepository;
import me.zhengjie.modules.system.service.mapper.DictDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author jie
* @date 2018-12-03
*/
@Service
@CacheConfig(cacheNames = "dictDetail")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DictDetailQueryService {
@Autowired
private DictDetailRepository dictDetailRepository;
@Autowired
private DictDetailMapper dictDetailMapper;
/**
* 分页
*/
@Cacheable(keyGenerator = "keyGenerator")
public Object queryAll(DictDetailDTO dictDetail, Pageable pageable){
Page<DictDetail> page = dictDetailRepository.findAll(new Spec(dictDetail),pageable);
return PageUtil.toPage(page.map(dictDetailMapper::toDto));
}
class Spec implements Specification<DictDetail> {
private DictDetailDTO dictDetail;
public Spec(DictDetailDTO dictDetail){
this.dictDetail = dictDetail;
}
@Override
public Predicate toPredicate(Root<DictDetail> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>();
Join<Dict,DictDetail> join = root.join("dict",JoinType.LEFT);
if(!ObjectUtils.isEmpty(dictDetail.getLabel())){
/**
* 模糊
*/
list.add(cb.like(root.get("label").as(String.class),"%"+dictDetail.getLabel()+"%"));
}
if(!ObjectUtils.isEmpty(dictDetail.getDictName())){
list.add(cb.equal(join.get("name").as(String.class),dictDetail.getDictName()));
}
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
}
}
}
\ No newline at end of file
package me.zhengjie.modules.system.service.query;
import me.zhengjie.utils.PageUtil;
import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.modules.system.service.dto.DictDTO;
import me.zhengjie.modules.system.repository.DictRepository;
import me.zhengjie.modules.system.service.mapper.DictMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
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.List;
/**
* @author jie
* @date 2018-12-03
*/
@Service
@CacheConfig(cacheNames = "dict")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DictQueryService {
@Autowired
private DictRepository dictRepository;
@Autowired
private DictMapper dictMapper;
/**
* 分页
*/
@Cacheable(keyGenerator = "keyGenerator")
public Object queryAll(DictDTO dict, Pageable pageable){
Page<Dict> page = dictRepository.findAll(new Spec(dict),pageable);
return PageUtil.toPage(page.map(dictMapper::toDto));
}
/**
* 不分页
*/
@Cacheable(keyGenerator = "keyGenerator")
public Object queryAll(DictDTO dict){
return dictMapper.toDto(dictRepository.findAll(new Spec(dict)));
}
class Spec implements Specification<Dict> {
private DictDTO dict;
public Spec(DictDTO dict){
this.dict = dict;
}
@Override
public Predicate toPredicate(Root<Dict> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>();
if(!ObjectUtils.isEmpty(dict.getName())){
/**
* 模糊
*/
list.add(cb.like(root.get("name").as(String.class),"%"+dict.getName()+"%"));
}
if(!ObjectUtils.isEmpty(dict.getRemark())){
/**
* 模糊
*/
list.add(cb.like(root.get("remark").as(String.class),"%"+dict.getRemark()+"%"));
}
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
}
}
}
\ No newline at end of file
package me.zhengjie.modules.system.service.query;
import me.zhengjie.modules.system.domain.Dept;
import me.zhengjie.utils.PageUtil;
import me.zhengjie.modules.system.domain.Job;
import me.zhengjie.modules.system.service.dto.JobDTO;
import me.zhengjie.modules.system.repository.JobRepository;
import me.zhengjie.modules.system.service.mapper.JobMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* @author jie
* @date 2018-12-03
*/
@Service
@CacheConfig(cacheNames = "job")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class JobQueryService {
@Autowired
private JobRepository jobRepository;
@Autowired
private JobMapper jobMapper;
@Cacheable(keyGenerator = "keyGenerator")
public Object queryAll(String name , Boolean enabled, Set<Long> deptIds, Long deptId, Pageable pageable){
Page<Job> page = jobRepository.findAll(new Spec(new JobDTO(name,enabled), deptIds, deptId),pageable);
return PageUtil.toPage(page.map(jobMapper::toDto));
}
class Spec implements Specification<Job> {
private JobDTO job;
private Long deptId;
private Set<Long> deptIds;
public Spec(JobDTO job, Set<Long> deptIds, Long deptId){
this.job = job;
this.deptId = deptId;
this.deptIds = deptIds;
}
@Override
public Predicate toPredicate(Root<Job> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>();
// 数据权限
Join<Dept, Job> join = root.join("dept",JoinType.LEFT);
if (!CollectionUtils.isEmpty(deptIds)) {
list.add(join.get("id").in(deptIds));
}
if(!ObjectUtils.isEmpty(job.getEnabled())){
/**
* 精确
*/
list.add(cb.equal(root.get("enabled").as(Boolean.class),job.getEnabled()));
}
if(!ObjectUtils.isEmpty(job.getName())){
/**
* 模糊
*/
list.add(cb.like(root.get("name").as(String.class),"%"+job.getName()+"%"));
}
if (deptId != null) {
/**
* 精确
*/
list.add(cb.equal(join.get("id").as(Long.class),deptId));
}
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
}
}
}
\ No newline at end of file
......@@ -45,6 +45,15 @@ public class RoleQueryService {
return PageUtil.toPage(page.map(roleMapper::toDto));
}
/**
* 分页
*/
@Cacheable(keyGenerator = "keyGenerator")
public Object queryAll(){
List<Role> roles = roleRepository.findAll(new Spec(null));
return roleMapper.toDto(roles);
}
class Spec implements Specification<Role> {
private String name;
......
package me.zhengjie.modules.system.service.query;
import me.zhengjie.modules.system.domain.Dept;
import me.zhengjie.modules.system.domain.User;
import me.zhengjie.modules.system.repository.UserRepository;
import me.zhengjie.modules.system.service.dto.UserDTO;
......@@ -14,13 +15,13 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* @author jie
......@@ -41,24 +42,20 @@ public class UserQueryService {
* 分页
*/
@Cacheable(keyGenerator = "keyGenerator")
public Object queryAll(UserDTO user, Pageable pageable){
Page<User> page = userRepo.findAll(new Spec(user),pageable);
public Object queryAll(UserDTO user, Set<Long> deptIds,Pageable pageable){
Page<User> page = userRepo.findAll(new Spec(user,deptIds),pageable);
return PageUtil.toPage(page.map(userMapper::toDto));
}
/**
* 不分页
*/
@Cacheable(keyGenerator = "keyGenerator")
public Object queryAll(UserDTO user){
return userMapper.toDto(userRepo.findAll(new Spec(user)));
}
class Spec implements Specification<User> {
private UserDTO user;
public Spec(UserDTO user){
private Set<Long> deptIds;
public Spec(UserDTO user, Set<Long> deptIds){
this.deptIds = deptIds;
this.user = user;
}
......@@ -67,6 +64,12 @@ public class UserQueryService {
List<Predicate> list = new ArrayList<Predicate>();
// 数据权限, 关联查询
Join<Dept,User> join = root.join("dept",JoinType.LEFT);
if (!CollectionUtils.isEmpty(deptIds)) {
list.add(join.get("id").in(deptIds));
}
if(!ObjectUtils.isEmpty(user.getId())){
/**
* 相等
......
......@@ -59,4 +59,11 @@ jwt:
#是否允许生成代码,生产环境设置为false
generator:
enabled: false
\ No newline at end of file
enabled: false
#如果生产环境要开启swagger,需要配置请求地址
#springfox:
# documentation:
# swagger:
# v2:
# host: # 接口域名或外网ip
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment