Commit fd9fb2a6 authored by dqjdda's avatar dqjdda
Browse files

Merge branch '2.3dev'

parents 7895e547 1839ef8d
package me.zhengjie.modules.system.service.dto; package me.zhengjie.modules.system.service.dto;
import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import java.sql.Timestamp;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2019-03-29 * @date 2019-03-29
*/ */
@Data @Getter
@Setter
@NoArgsConstructor @NoArgsConstructor
public class JobDTO implements Serializable { public class JobDTO implements Serializable {
/**
* ID
*/
private Long id; private Long id;
private Long sort; private Long sort;
/**
* 名称
*/
private String name; private String name;
/**
* 状态
*/
private Boolean enabled; private Boolean enabled;
private DeptDTO dept; private DeptDTO dept;
/**
* 如果分公司存在相同部门,则显示上级部门名称
*/
private String deptSuperiorName; private String deptSuperiorName;
/**
* 创建日期
*/
private Timestamp createTime; private Timestamp createTime;
public JobDTO(String name, Boolean enabled) { public JobDTO(String name, Boolean enabled) {
......
...@@ -27,4 +27,10 @@ public class JobQueryCriteria { ...@@ -27,4 +27,10 @@ public class JobQueryCriteria {
@Query(propName = "id", joinName = "dept", type = Query.Type.IN) @Query(propName = "id", joinName = "dept", type = Query.Type.IN)
private Set<Long> deptIds; private Set<Long> deptIds;
@Query(type = Query.Type.GREATER_THAN,propName = "createTime")
private Timestamp startTime;
@Query(type = Query.Type.LESS_THAN,propName = "createTime")
private Timestamp endTime;
} }
\ No newline at end of file
...@@ -12,13 +12,7 @@ import java.io.Serializable; ...@@ -12,13 +12,7 @@ import java.io.Serializable;
@NoArgsConstructor @NoArgsConstructor
public class JobSmallDTO implements Serializable { public class JobSmallDTO implements Serializable {
/**
* ID
*/
private Long id; private Long id;
/**
* 名称
*/
private String name; private String name;
} }
\ No newline at end of file
package me.zhengjie.modules.system.service.dto; package me.zhengjie.modules.system.service.dto;
import lombok.Data; import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2018-12-17 * @date 2018-12-17
*/ */
@Data @Getter
public class MenuDTO { @Setter
public class MenuDTO implements Serializable {
private Long id; private Long id;
private Integer type;
private String permission;
private String name; private String name;
private Long sort; private Long sort;
......
...@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.service.dto; ...@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.service.dto;
import lombok.Data; import lombok.Data;
import me.zhengjie.annotation.Query; import me.zhengjie.annotation.Query;
import java.sql.Timestamp;
/** /**
* 公共查询类 * 公共查询类
*/ */
...@@ -12,4 +14,10 @@ public class MenuQueryCriteria { ...@@ -12,4 +14,10 @@ public class MenuQueryCriteria {
// 多字段模糊 // 多字段模糊
@Query(blurry = "name,path,component") @Query(blurry = "name,path,component")
private String blurry; private String blurry;
@Query(type = Query.Type.GREATER_THAN,propName = "createTime")
private Timestamp startTime;
@Query(type = Query.Type.LESS_THAN,propName = "createTime")
private Timestamp endTime;
} }
package me.zhengjie.modules.system.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;
/**
* @author Zheng Jie
* @date 2018-12-03
*/
@Data
public class PermissionDTO implements Serializable{
private Long id;
private String name;
private Long pid;
private String alias;
private Timestamp createTime;
private List<PermissionDTO> children;
@Override
public String toString() {
return "Permission{" +
"id=" + id +
", name='" + name + '\'' +
", pid=" + pid +
", alias='" + alias + '\'' +
", createTime=" + createTime +
'}';
}
}
package me.zhengjie.modules.system.service.dto;
import lombok.Data;
import me.zhengjie.annotation.Query;
/**
* 公共查询类
*/
@Data
public class PermissionQueryCriteria {
// 多字段模糊
@Query(blurry = "name,alias")
private String blurry;
}
package me.zhengjie.modules.system.service.dto; package me.zhengjie.modules.system.service.dto;
import lombok.Data; import lombok.Getter;
import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.Set; import java.util.Set;
...@@ -9,7 +11,8 @@ import java.util.Set; ...@@ -9,7 +11,8 @@ import java.util.Set;
* @author Zheng Jie * @author Zheng Jie
* @date 2018-11-23 * @date 2018-11-23
*/ */
@Data @Getter
@Setter
public class RoleDTO implements Serializable { public class RoleDTO implements Serializable {
private Long id; private Long id;
...@@ -22,7 +25,7 @@ public class RoleDTO implements Serializable { ...@@ -22,7 +25,7 @@ public class RoleDTO implements Serializable {
private String remark; private String remark;
private Set<PermissionDTO> permissions; private String permission;
private Set<MenuDTO> menus; private Set<MenuDTO> menus;
......
...@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.service.dto; ...@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.service.dto;
import lombok.Data; import lombok.Data;
import me.zhengjie.annotation.Query; import me.zhengjie.annotation.Query;
import java.sql.Timestamp;
/** /**
* 公共查询类 * 公共查询类
*/ */
...@@ -12,4 +14,10 @@ public class RoleQueryCriteria { ...@@ -12,4 +14,10 @@ public class RoleQueryCriteria {
// 多字段模糊 // 多字段模糊
@Query(blurry = "name,remark") @Query(blurry = "name,remark")
private String blurry; private String blurry;
@Query(type = Query.Type.GREATER_THAN,propName = "createTime")
private Timestamp startTime;
@Query(type = Query.Type.LESS_THAN,propName = "createTime")
private Timestamp endTime;
} }
package me.zhengjie.modules.system.service.dto; package me.zhengjie.modules.system.service.dto;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Set;
/** /**
* @author Zheng Jie * @author Zheng Jie
......
...@@ -2,7 +2,9 @@ package me.zhengjie.modules.system.service.dto; ...@@ -2,7 +2,9 @@ package me.zhengjie.modules.system.service.dto;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Getter;
import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.Date; import java.util.Date;
...@@ -12,7 +14,8 @@ import java.util.Set; ...@@ -12,7 +14,8 @@ import java.util.Set;
* @author Zheng Jie * @author Zheng Jie
* @date 2018-11-23 * @date 2018-11-23
*/ */
@Data @Getter
@Setter
public class UserDTO implements Serializable { public class UserDTO implements Serializable {
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
...@@ -31,8 +34,6 @@ public class UserDTO implements Serializable { ...@@ -31,8 +34,6 @@ public class UserDTO implements Serializable {
@JsonIgnore @JsonIgnore
private String password; private String password;
private Timestamp createTime;
private Date lastPasswordResetTime; private Date lastPasswordResetTime;
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
...@@ -44,4 +45,6 @@ public class UserDTO implements Serializable { ...@@ -44,4 +45,6 @@ public class UserDTO implements Serializable {
private DeptSmallDTO dept; private DeptSmallDTO dept;
private Long deptId; private Long deptId;
private Timestamp createTime;
} }
...@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service.dto; ...@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service.dto;
import lombok.Data; import lombok.Data;
import me.zhengjie.annotation.Query; import me.zhengjie.annotation.Query;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Set; import java.util.Set;
/** /**
...@@ -26,4 +27,10 @@ public class UserQueryCriteria implements Serializable { ...@@ -26,4 +27,10 @@ public class UserQueryCriteria implements Serializable {
private Boolean enabled; private Boolean enabled;
private Long deptId; private Long deptId;
@Query(type = Query.Type.GREATER_THAN,propName = "createTime")
private Timestamp startTime;
@Query(type = Query.Type.LESS_THAN,propName = "createTime")
private Timestamp endTime;
} }
...@@ -3,17 +3,23 @@ package me.zhengjie.modules.system.service.impl; ...@@ -3,17 +3,23 @@ package me.zhengjie.modules.system.service.impl;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.domain.Dept;
import me.zhengjie.modules.system.service.dto.DeptQueryCriteria; import me.zhengjie.modules.system.service.dto.DeptQueryCriteria;
import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
import me.zhengjie.modules.system.repository.DeptRepository; import me.zhengjie.modules.system.repository.DeptRepository;
import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.DeptService;
import me.zhengjie.modules.system.service.dto.DeptDTO; import me.zhengjie.modules.system.service.dto.DeptDTO;
import me.zhengjie.modules.system.service.mapper.DeptMapper; 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.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -22,28 +28,35 @@ import java.util.stream.Collectors; ...@@ -22,28 +28,35 @@ import java.util.stream.Collectors;
* @date 2019-03-25 * @date 2019-03-25
*/ */
@Service @Service
@CacheConfig(cacheNames = "dept")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DeptServiceImpl implements DeptService { public class DeptServiceImpl implements DeptService {
@Autowired private final DeptRepository deptRepository;
private DeptRepository deptRepository;
private final DeptMapper deptMapper;
@Autowired public DeptServiceImpl(DeptRepository deptRepository, DeptMapper deptMapper) {
private DeptMapper deptMapper; this.deptRepository = deptRepository;
this.deptMapper = deptMapper;
}
@Override @Override
@Cacheable
public List<DeptDTO> queryAll(DeptQueryCriteria criteria) { public List<DeptDTO> queryAll(DeptQueryCriteria criteria) {
return deptMapper.toDto(deptRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); return deptMapper.toDto(deptRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
} }
@Override @Override
@Cacheable(key = "#p0")
public DeptDTO findById(Long id) { public DeptDTO findById(Long id) {
Optional<Dept> dept = deptRepository.findById(id); Dept dept = deptRepository.findById(id).orElseGet(Dept::new);
ValidationUtil.isNull(dept,"Dept","id",id); ValidationUtil.isNull(dept.getId(),"Dept","id",id);
return deptMapper.toDto(dept.get()); return deptMapper.toDto(dept);
} }
@Override @Override
@Cacheable
public List<Dept> findByPid(long pid) { public List<Dept> findByPid(long pid) {
return deptRepository.findByPid(pid); return deptRepository.findByPid(pid);
} }
...@@ -54,11 +67,12 @@ public class DeptServiceImpl implements DeptService { ...@@ -54,11 +67,12 @@ public class DeptServiceImpl implements DeptService {
} }
@Override @Override
@Cacheable
public Object buildTree(List<DeptDTO> deptDTOS) { public Object buildTree(List<DeptDTO> deptDTOS) {
Set<DeptDTO> trees = new LinkedHashSet<>(); Set<DeptDTO> trees = new LinkedHashSet<>();
Set<DeptDTO> depts= new LinkedHashSet<>(); Set<DeptDTO> depts= new LinkedHashSet<>();
List<String> deptNames = deptDTOS.stream().map(DeptDTO::getName).collect(Collectors.toList()); List<String> deptNames = deptDTOS.stream().map(DeptDTO::getName).collect(Collectors.toList());
Boolean isChild; boolean isChild;
for (DeptDTO deptDTO : deptDTOS) { for (DeptDTO deptDTO : deptDTOS) {
isChild = false; isChild = false;
if ("0".equals(deptDTO.getPid().toString())) { if ("0".equals(deptDTO.getPid().toString())) {
...@@ -68,7 +82,7 @@ public class DeptServiceImpl implements DeptService { ...@@ -68,7 +82,7 @@ public class DeptServiceImpl implements DeptService {
if (it.getPid().equals(deptDTO.getId())) { if (it.getPid().equals(deptDTO.getId())) {
isChild = true; isChild = true;
if (deptDTO.getChildren() == null) { if (deptDTO.getChildren() == null) {
deptDTO.setChildren(new ArrayList<DeptDTO>()); deptDTO.setChildren(new ArrayList<>());
} }
deptDTO.getChildren().add(it); deptDTO.getChildren().add(it);
} }
...@@ -83,36 +97,51 @@ public class DeptServiceImpl implements DeptService { ...@@ -83,36 +97,51 @@ public class DeptServiceImpl implements DeptService {
trees = depts; trees = depts;
} }
Integer totalElements = deptDTOS!=null?deptDTOS.size():0; Integer totalElements = deptDTOS.size();
Map map = new HashMap(); Map<String,Object> map = new HashMap<>();
map.put("totalElements",totalElements); map.put("totalElements",totalElements);
map.put("content",CollectionUtils.isEmpty(trees)?deptDTOS:trees); map.put("content",CollectionUtils.isEmpty(trees)?deptDTOS:trees);
return map; return map;
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public DeptDTO create(Dept resources) { public DeptDTO create(Dept resources) {
return deptMapper.toDto(deptRepository.save(resources)); return deptMapper.toDto(deptRepository.save(resources));
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(Dept resources) { public void update(Dept resources) {
if(resources.getId().equals(resources.getPid())) { if(resources.getId().equals(resources.getPid())) {
throw new BadRequestException("上级不能为自己"); throw new BadRequestException("上级不能为自己");
} }
Optional<Dept> optionalDept = deptRepository.findById(resources.getId()); Dept dept = deptRepository.findById(resources.getId()).orElseGet(Dept::new);
ValidationUtil.isNull( optionalDept,"Dept","id",resources.getId()); ValidationUtil.isNull( dept.getId(),"Dept","id",resources.getId());
Dept dept = optionalDept.get();
resources.setId(dept.getId()); resources.setId(dept.getId());
deptRepository.save(resources); deptRepository.save(resources);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Long id) { public void delete(Long id) {
deptRepository.deleteById(id); deptRepository.deleteById(id);
} }
@Override
public void download(List<DeptDTO> deptDTOs, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (DeptDTO deptDTO : deptDTOs) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("部门名称", deptDTO.getName());
map.put("部门状态", deptDTO.getEnabled() ? "启用" : "停用");
map.put("创建日期", deptDTO.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
} }
\ No newline at end of file
...@@ -9,60 +9,68 @@ import me.zhengjie.modules.system.repository.DictDetailRepository; ...@@ -9,60 +9,68 @@ import me.zhengjie.modules.system.repository.DictDetailRepository;
import me.zhengjie.modules.system.service.DictDetailService; import me.zhengjie.modules.system.service.DictDetailService;
import me.zhengjie.modules.system.service.dto.DictDetailDTO; import me.zhengjie.modules.system.service.dto.DictDetailDTO;
import me.zhengjie.modules.system.service.mapper.DictDetailMapper; 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.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Map; import java.util.Map;
import java.util.Optional;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2019-04-10 * @date 2019-04-10
*/ */
@Service @Service
@CacheConfig(cacheNames = "dictDetail")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DictDetailServiceImpl implements DictDetailService { public class DictDetailServiceImpl implements DictDetailService {
@Autowired private final DictDetailRepository dictDetailRepository;
private DictDetailRepository dictDetailRepository;
private final DictDetailMapper dictDetailMapper;
@Autowired public DictDetailServiceImpl(DictDetailRepository dictDetailRepository, DictDetailMapper dictDetailMapper) {
private DictDetailMapper dictDetailMapper; this.dictDetailRepository = dictDetailRepository;
this.dictDetailMapper = dictDetailMapper;
}
@Override @Override
@Cacheable
public Map queryAll(DictDetailQueryCriteria criteria, Pageable pageable) { public Map queryAll(DictDetailQueryCriteria criteria, Pageable pageable) {
Page<DictDetail> page = dictDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); Page<DictDetail> page = dictDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(dictDetailMapper::toDto)); return PageUtil.toPage(page.map(dictDetailMapper::toDto));
} }
@Override @Override
@Cacheable(key = "#p0")
public DictDetailDTO findById(Long id) { public DictDetailDTO findById(Long id) {
Optional<DictDetail> dictDetail = dictDetailRepository.findById(id); DictDetail dictDetail = dictDetailRepository.findById(id).orElseGet(DictDetail::new);
ValidationUtil.isNull(dictDetail,"DictDetail","id",id); ValidationUtil.isNull(dictDetail.getId(),"DictDetail","id",id);
return dictDetailMapper.toDto(dictDetail.get()); return dictDetailMapper.toDto(dictDetail);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public DictDetailDTO create(DictDetail resources) { public DictDetailDTO create(DictDetail resources) {
return dictDetailMapper.toDto(dictDetailRepository.save(resources)); return dictDetailMapper.toDto(dictDetailRepository.save(resources));
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(DictDetail resources) { public void update(DictDetail resources) {
Optional<DictDetail> optionalDictDetail = dictDetailRepository.findById(resources.getId()); DictDetail dictDetail = dictDetailRepository.findById(resources.getId()).orElseGet(DictDetail::new);
ValidationUtil.isNull( optionalDictDetail,"DictDetail","id",resources.getId()); ValidationUtil.isNull( dictDetail.getId(),"DictDetail","id",resources.getId());
DictDetail dictDetail = optionalDictDetail.get();
resources.setId(dictDetail.getId()); resources.setId(dictDetail.getId());
dictDetailRepository.save(resources); dictDetailRepository.save(resources);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Long id) { public void delete(Long id) {
dictDetailRepository.deleteById(id); dictDetailRepository.deleteById(id);
......
package me.zhengjie.modules.system.service.impl; package me.zhengjie.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import me.zhengjie.modules.system.domain.Dict; import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.modules.system.service.dto.DictDetailDTO;
import me.zhengjie.modules.system.service.dto.DictQueryCriteria; import me.zhengjie.modules.system.service.dto.DictQueryCriteria;
import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
...@@ -9,60 +12,109 @@ import me.zhengjie.modules.system.repository.DictRepository; ...@@ -9,60 +12,109 @@ import me.zhengjie.modules.system.repository.DictRepository;
import me.zhengjie.modules.system.service.DictService; import me.zhengjie.modules.system.service.DictService;
import me.zhengjie.modules.system.service.dto.DictDTO; import me.zhengjie.modules.system.service.dto.DictDTO;
import me.zhengjie.modules.system.service.mapper.DictMapper; 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.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2019-04-10 * @date 2019-04-10
*/ */
@Service @Service
@CacheConfig(cacheNames = "dict")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DictServiceImpl implements DictService { public class DictServiceImpl implements DictService {
@Autowired private final DictRepository dictRepository;
private DictRepository dictRepository;
private final DictMapper dictMapper;
@Autowired public DictServiceImpl(DictRepository dictRepository, DictMapper dictMapper) {
private DictMapper dictMapper; this.dictRepository = dictRepository;
this.dictMapper = dictMapper;
}
@Override @Override
public Object queryAll(DictQueryCriteria dict, Pageable pageable){ @Cacheable
public Map<String, Object> queryAll(DictQueryCriteria dict, Pageable pageable){
Page<Dict> page = dictRepository.findAll((root, query, cb) -> QueryHelp.getPredicate(root, dict, cb), pageable); Page<Dict> page = dictRepository.findAll((root, query, cb) -> QueryHelp.getPredicate(root, dict, cb), pageable);
return PageUtil.toPage(page.map(dictMapper::toDto)); return PageUtil.toPage(page.map(dictMapper::toDto));
} }
@Override @Override
public List<DictDTO> queryAll(DictQueryCriteria dict) {
List<Dict> list = dictRepository.findAll((root, query, cb) -> QueryHelp.getPredicate(root, dict, cb));
return dictMapper.toDto(list);
}
@Override
@Cacheable(key = "#p0")
public DictDTO findById(Long id) { public DictDTO findById(Long id) {
Optional<Dict> dict = dictRepository.findById(id); Dict dict = dictRepository.findById(id).orElseGet(Dict::new);
ValidationUtil.isNull(dict,"Dict","id",id); ValidationUtil.isNull(dict.getId(),"Dict","id",id);
return dictMapper.toDto(dict.get()); return dictMapper.toDto(dict);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public DictDTO create(Dict resources) { public DictDTO create(Dict resources) {
return dictMapper.toDto(dictRepository.save(resources)); return dictMapper.toDto(dictRepository.save(resources));
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(Dict resources) { public void update(Dict resources) {
Optional<Dict> optionalDict = dictRepository.findById(resources.getId()); Dict dict = dictRepository.findById(resources.getId()).orElseGet(Dict::new);
ValidationUtil.isNull( optionalDict,"Dict","id",resources.getId()); ValidationUtil.isNull( dict.getId(),"Dict","id",resources.getId());
Dict dict = optionalDict.get();
resources.setId(dict.getId()); resources.setId(dict.getId());
dictRepository.save(resources); dictRepository.save(resources);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Long id) { public void delete(Long id) {
dictRepository.deleteById(id); dictRepository.deleteById(id);
} }
@Override
public void download(List<DictDTO> dictDTOS, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (DictDTO dictDTO : dictDTOS) {
if(CollectionUtil.isNotEmpty(dictDTO.getDictDetails())){
for (DictDetailDTO dictDetail : dictDTO.getDictDetails()) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("字典名称", dictDTO.getName());
map.put("字典描述", dictDTO.getRemark());
map.put("字典标签", dictDetail.getLabel());
map.put("字典值", dictDetail.getValue());
map.put("创建日期", dictDetail.getCreateTime());
list.add(map);
}
} else {
Map<String,Object> map = new LinkedHashMap<>();
map.put("字典名称", dictDTO.getName());
map.put("字典描述", dictDTO.getRemark());
map.put("字典标签", null);
map.put("字典值", null);
map.put("创建日期", dictDTO.getCreateTime());
list.add(map);
}
}
FileUtil.downloadExcel(list, response);
}
} }
\ No newline at end of file
...@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service.impl; ...@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.service.impl;
import me.zhengjie.modules.system.domain.Job; import me.zhengjie.modules.system.domain.Job;
import me.zhengjie.modules.system.repository.DeptRepository; import me.zhengjie.modules.system.repository.DeptRepository;
import me.zhengjie.modules.system.service.dto.JobQueryCriteria; import me.zhengjie.modules.system.service.dto.JobQueryCriteria;
import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
...@@ -10,35 +11,46 @@ import me.zhengjie.modules.system.repository.JobRepository; ...@@ -10,35 +11,46 @@ import me.zhengjie.modules.system.repository.JobRepository;
import me.zhengjie.modules.system.service.JobService; import me.zhengjie.modules.system.service.JobService;
import me.zhengjie.modules.system.service.dto.JobDTO; import me.zhengjie.modules.system.service.dto.JobDTO;
import me.zhengjie.modules.system.service.mapper.JobMapper; 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.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Map;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2019-03-29 * @date 2019-03-29
*/ */
@Service @Service
@CacheConfig(cacheNames = "job")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class JobServiceImpl implements JobService { public class JobServiceImpl implements JobService {
@Autowired private final JobRepository jobRepository;
private JobRepository jobRepository;
private final JobMapper jobMapper;
@Autowired private final DeptRepository deptRepository;
private JobMapper jobMapper;
@Autowired public JobServiceImpl(JobRepository jobRepository, JobMapper jobMapper, DeptRepository deptRepository) {
private DeptRepository deptRepository; this.jobRepository = jobRepository;
this.jobMapper = jobMapper;
this.deptRepository = deptRepository;
}
@Override @Override
public Object queryAll(JobQueryCriteria criteria, Pageable pageable) { @Cacheable
public Map<String,Object> queryAll(JobQueryCriteria criteria, Pageable pageable) {
Page<Job> page = jobRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); Page<Job> page = jobRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
List<JobDTO> jobs = new ArrayList<>(); List<JobDTO> jobs = new ArrayList<>();
for (Job job : page.getContent()) { for (Job job : page.getContent()) {
...@@ -48,32 +60,55 @@ public class JobServiceImpl implements JobService { ...@@ -48,32 +60,55 @@ public class JobServiceImpl implements JobService {
} }
@Override @Override
@Cacheable
public List<JobDTO> queryAll(JobQueryCriteria criteria) {
List<Job> list = jobRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder));
return jobMapper.toDto(list);
}
@Override
@Cacheable(key = "#p0")
public JobDTO findById(Long id) { public JobDTO findById(Long id) {
Optional<Job> job = jobRepository.findById(id); Job job = jobRepository.findById(id).orElseGet(Job::new);
ValidationUtil.isNull(job,"Job","id",id); ValidationUtil.isNull(job.getId(),"Job","id",id);
return jobMapper.toDto(job.get()); return jobMapper.toDto(job);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public JobDTO create(Job resources) { public JobDTO create(Job resources) {
return jobMapper.toDto(jobRepository.save(resources)); return jobMapper.toDto(jobRepository.save(resources));
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(Job resources) { public void update(Job resources) {
Optional<Job> optionalJob = jobRepository.findById(resources.getId()); Job job = jobRepository.findById(resources.getId()).orElseGet(Job::new);
ValidationUtil.isNull( optionalJob,"Job","id",resources.getId()); ValidationUtil.isNull( job.getId(),"Job","id",resources.getId());
Job job = optionalJob.get();
resources.setId(job.getId()); resources.setId(job.getId());
jobRepository.save(resources); jobRepository.save(resources);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Long id) { public void delete(Long id) {
jobRepository.deleteById(id); jobRepository.deleteById(id);
} }
@Override
public void download(List<JobDTO> jobDTOs, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (JobDTO jobDTO : jobDTOs) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("岗位名称", jobDTO.getName());
map.put("所属部门", jobDTO.getDept().getName());
map.put("岗位状态", jobDTO.getEnabled() ? "启用" : "停用");
map.put("创建日期", jobDTO.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
} }
\ No newline at end of file
package me.zhengjie.modules.system.service.impl; package me.zhengjie.modules.system.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.vo.MenuMetaVo; import me.zhengjie.modules.system.domain.vo.MenuMetaVo;
...@@ -15,52 +14,66 @@ import me.zhengjie.modules.system.service.dto.MenuDTO; ...@@ -15,52 +14,66 @@ import me.zhengjie.modules.system.service.dto.MenuDTO;
import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.MenuQueryCriteria;
import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import me.zhengjie.modules.system.service.mapper.MenuMapper; import me.zhengjie.modules.system.service.mapper.MenuMapper;
import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.StringUtils; import me.zhengjie.utils.StringUtils;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@CacheConfig(cacheNames = "menu")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class MenuServiceImpl implements MenuService { public class MenuServiceImpl implements MenuService {
@Autowired private final MenuRepository menuRepository;
private MenuRepository menuRepository;
@Autowired private final MenuMapper menuMapper;
private MenuMapper menuMapper;
@Autowired private final RoleService roleService;
private RoleService roleService;
public MenuServiceImpl(MenuRepository menuRepository, MenuMapper menuMapper, RoleService roleService) {
this.menuRepository = menuRepository;
this.menuMapper = menuMapper;
this.roleService = roleService;
}
@Override @Override
public List queryAll(MenuQueryCriteria criteria){ @Cacheable
public List<MenuDTO> queryAll(MenuQueryCriteria criteria){
// Sort sort = new Sort(Sort.Direction.DESC,"id");
return menuMapper.toDto(menuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); return menuMapper.toDto(menuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
} }
@Override @Override
@Cacheable(key = "#p0")
public MenuDTO findById(long id) { public MenuDTO findById(long id) {
Optional<Menu> menu = menuRepository.findById(id); Menu menu = menuRepository.findById(id).orElseGet(Menu::new);
ValidationUtil.isNull(menu,"Menu","id",id); ValidationUtil.isNull(menu.getId(),"Menu","id",id);
return menuMapper.toDto(menu.get()); return menuMapper.toDto(menu);
} }
@Override @Override
public List<MenuDTO> findByRoles(List<RoleSmallDTO> roles) { public List<MenuDTO> findByRoles(List<RoleSmallDTO> roles) {
Set<Menu> menus = new LinkedHashSet<>(); Set<Menu> menus = new LinkedHashSet<>();
for (RoleSmallDTO role : roles) { for (RoleSmallDTO role : roles) {
List<Menu> menus1 = menuRepository.findByRoles_IdOrderBySortAsc(role.getId()).stream().collect(Collectors.toList()); List<Menu> menus1 = new ArrayList<>(menuRepository.findByRoles_IdAndTypeIsNotInOrderBySortAsc(role.getId(), 2));
menus.addAll(menus1); menus.addAll(menus1);
} }
return menus.stream().map(menuMapper::toDto).collect(Collectors.toList()); return menus.stream().map(menuMapper::toDto).collect(Collectors.toList());
} }
@Override @Override
@CacheEvict(allEntries = true)
public MenuDTO create(Menu resources) { public MenuDTO create(Menu resources) {
if(menuRepository.findByName(resources.getName()) != null){ if(menuRepository.findByName(resources.getName()) != null){
throw new EntityExistException(Menu.class,"name",resources.getName()); throw new EntityExistException(Menu.class,"name",resources.getName());
...@@ -79,19 +92,19 @@ public class MenuServiceImpl implements MenuService { ...@@ -79,19 +92,19 @@ public class MenuServiceImpl implements MenuService {
} }
@Override @Override
@CacheEvict(allEntries = true)
public void update(Menu resources) { public void update(Menu resources) {
if(resources.getId().equals(resources.getPid())) { if(resources.getId().equals(resources.getPid())) {
throw new BadRequestException("上级不能为自己"); throw new BadRequestException("上级不能为自己");
} }
Optional<Menu> optionalPermission = menuRepository.findById(resources.getId()); Menu menu = menuRepository.findById(resources.getId()).orElseGet(Menu::new);
ValidationUtil.isNull(optionalPermission,"Permission","id",resources.getId()); ValidationUtil.isNull(menu.getId(),"Permission","id",resources.getId());
if(resources.getIFrame()){ if(resources.getIFrame()){
if (!(resources.getPath().toLowerCase().startsWith("http://")||resources.getPath().toLowerCase().startsWith("https://"))) { if (!(resources.getPath().toLowerCase().startsWith("http://")||resources.getPath().toLowerCase().startsWith("https://"))) {
throw new BadRequestException("外链必须以http://或者https://开头"); throw new BadRequestException("外链必须以http://或者https://开头");
} }
} }
Menu menu = optionalPermission.get();
Menu menu1 = menuRepository.findByName(resources.getName()); Menu menu1 = menuRepository.findByName(resources.getName());
if(menu1 != null && !menu1.getId().equals(menu.getId())){ if(menu1 != null && !menu1.getId().equals(menu.getId())){
...@@ -114,6 +127,8 @@ public class MenuServiceImpl implements MenuService { ...@@ -114,6 +127,8 @@ public class MenuServiceImpl implements MenuService {
menu.setCache(resources.getCache()); menu.setCache(resources.getCache());
menu.setHidden(resources.getHidden()); menu.setHidden(resources.getHidden());
menu.setComponentName(resources.getComponentName()); menu.setComponentName(resources.getComponentName());
menu.setPermission(resources.getPermission());
menu.setType(resources.getType());
menuRepository.save(menu); menuRepository.save(menu);
} }
...@@ -131,6 +146,7 @@ public class MenuServiceImpl implements MenuService { ...@@ -131,6 +146,7 @@ public class MenuServiceImpl implements MenuService {
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Set<Menu> menuSet) { public void delete(Set<Menu> menuSet) {
for (Menu menu : menuSet) { for (Menu menu : menuSet) {
...@@ -140,6 +156,7 @@ public class MenuServiceImpl implements MenuService { ...@@ -140,6 +156,7 @@ public class MenuServiceImpl implements MenuService {
} }
@Override @Override
@Cacheable(key = "'tree'")
public Object getMenuTree(List<Menu> menus) { public Object getMenuTree(List<Menu> menus) {
List<Map<String,Object>> list = new LinkedList<>(); List<Map<String,Object>> list = new LinkedList<>();
menus.forEach(menu -> { menus.forEach(menu -> {
...@@ -159,13 +176,14 @@ public class MenuServiceImpl implements MenuService { ...@@ -159,13 +176,14 @@ public class MenuServiceImpl implements MenuService {
} }
@Override @Override
@Cacheable(key = "'pid:'+#p0")
public List<Menu> findByPid(long pid) { public List<Menu> findByPid(long pid) {
return menuRepository.findByPid(pid); return menuRepository.findByPid(pid);
} }
@Override @Override
public Map buildTree(List<MenuDTO> menuDTOS) { public Map<String,Object> buildTree(List<MenuDTO> menuDTOS) {
List<MenuDTO> trees = new ArrayList<MenuDTO>(); List<MenuDTO> trees = new ArrayList<>();
Set<Long> ids = new HashSet<>(); Set<Long> ids = new HashSet<>();
for (MenuDTO menuDTO : menuDTOS) { for (MenuDTO menuDTO : menuDTOS) {
if (menuDTO.getPid() == 0) { if (menuDTO.getPid() == 0) {
...@@ -174,19 +192,19 @@ public class MenuServiceImpl implements MenuService { ...@@ -174,19 +192,19 @@ public class MenuServiceImpl implements MenuService {
for (MenuDTO it : menuDTOS) { for (MenuDTO it : menuDTOS) {
if (it.getPid().equals(menuDTO.getId())) { if (it.getPid().equals(menuDTO.getId())) {
if (menuDTO.getChildren() == null) { if (menuDTO.getChildren() == null) {
menuDTO.setChildren(new ArrayList<MenuDTO>()); menuDTO.setChildren(new ArrayList<>());
} }
menuDTO.getChildren().add(it); menuDTO.getChildren().add(it);
ids.add(it.getId()); ids.add(it.getId());
} }
} }
} }
Map map = new HashMap(); Map<String,Object> map = new HashMap<>();
if(trees.size() == 0){ if(trees.size() == 0){
trees = menuDTOS.stream().filter(s -> !ids.contains(s.getId())).collect(Collectors.toList()); trees = menuDTOS.stream().filter(s -> !ids.contains(s.getId())).collect(Collectors.toList());
} }
map.put("content",trees); map.put("content",trees);
map.put("totalElements",menuDTOS!=null?menuDTOS.size():0); map.put("totalElements", menuDTOS.size());
return map; return map;
} }
...@@ -229,7 +247,7 @@ public class MenuServiceImpl implements MenuService { ...@@ -229,7 +247,7 @@ public class MenuServiceImpl implements MenuService {
menuVo.setName(null); menuVo.setName(null);
menuVo.setMeta(null); menuVo.setMeta(null);
menuVo.setComponent("Layout"); menuVo.setComponent("Layout");
List<MenuVo> list1 = new ArrayList<MenuVo>(); List<MenuVo> list1 = new ArrayList<>();
list1.add(menuVo1); list1.add(menuVo1);
menuVo.setChildren(list1); menuVo.setChildren(list1);
} }
...@@ -242,8 +260,25 @@ public class MenuServiceImpl implements MenuService { ...@@ -242,8 +260,25 @@ public class MenuServiceImpl implements MenuService {
@Override @Override
public Menu findOne(Long id) { public Menu findOne(Long id) {
Optional<Menu> menu = menuRepository.findById(id); Menu menu = menuRepository.findById(id).orElseGet(Menu::new);
ValidationUtil.isNull(menu,"Menu","id",id); ValidationUtil.isNull(menu.getId(),"Menu","id",id);
return menu.get(); return menu;
}
@Override
public void download(List<MenuDTO> menuDTOS, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (MenuDTO menuDTO : menuDTOS) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("菜单名称", menuDTO.getName());
map.put("菜单类型", menuDTO.getType() == 0 ? "目录" : menuDTO.getType() == 1 ? "菜单" : "按钮");
map.put("权限标识", menuDTO.getPermission());
map.put("外链菜单", menuDTO.getIFrame() ? "是" : "否");
map.put("菜单可见", menuDTO.getHidden() ? "否" : "是");
map.put("是否缓存", menuDTO.getCache() ? "是" : "否");
map.put("创建日期", menuDTO.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
} }
} }
package me.zhengjie.modules.system.service.impl;
import me.zhengjie.modules.system.domain.Permission;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.exception.EntityExistException;
import me.zhengjie.modules.system.repository.PermissionRepository;
import me.zhengjie.modules.system.service.PermissionService;
import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.dto.PermissionDTO;
import me.zhengjie.modules.system.service.dto.PermissionQueryCriteria;
import me.zhengjie.modules.system.service.mapper.PermissionMapper;
import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil;
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.*;
/**
* @author Zheng Jie
* @date 2018-12-03
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class PermissionServiceImpl implements PermissionService {
@Autowired
private PermissionRepository permissionRepository;
@Autowired
private PermissionMapper permissionMapper;
@Autowired
private RoleService roleService;
@Override
public List<PermissionDTO> queryAll(PermissionQueryCriteria criteria) {
return permissionMapper.toDto(permissionRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public PermissionDTO findById(long id) {
Optional<Permission> permission = permissionRepository.findById(id);
ValidationUtil.isNull(permission,"Permission","id",id);
return permissionMapper.toDto(permission.get());
}
@Override
@Transactional(rollbackFor = Exception.class)
public PermissionDTO create(Permission resources) {
if(permissionRepository.findByName(resources.getName()) != null){
throw new EntityExistException(Permission.class,"name",resources.getName());
}
return permissionMapper.toDto(permissionRepository.save(resources));
}
@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();
Permission permission1 = permissionRepository.findByName(resources.getName());
if(permission1 != null && !permission1.getId().equals(permission.getId())){
throw new EntityExistException(Permission.class,"name",resources.getName());
}
permission.setName(resources.getName());
permission.setAlias(resources.getAlias());
permission.setPid(resources.getPid());
permissionRepository.save(permission);
}
@Override
public Set<Permission> getDeletePermission(List<Permission> permissions, Set<Permission> permissionSet) {
// 递归找出待删除的菜单
for (Permission permission : permissions) {
permissionSet.add(permission);
List<Permission> permissionList = permissionRepository.findByPid(permission.getId());
if(permissionList!=null && permissionList.size()!=0){
getDeletePermission(permissionList, permissionSet);
}
}
return permissionSet;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Set<Permission> permissions) {
for (Permission permission : permissions) {
roleService.untiedPermission(permission.getId());
permissionRepository.delete(permission);
}
}
@Override
public Object getPermissionTree(List<Permission> permissions) {
List<Map<String,Object>> list = new LinkedList<>();
permissions.forEach(permission -> {
if (permission!=null){
List<Permission> permissionList = permissionRepository.findByPid(permission.getId());
Map<String,Object> map = new HashMap<>();
map.put("id",permission.getId());
map.put("label",permission.getAlias());
if(permissionList!=null && permissionList.size()!=0){
map.put("children",getPermissionTree(permissionList));
}
list.add(map);
}
}
);
return list;
}
@Override
public List<Permission> findByPid(long pid) {
return permissionRepository.findByPid(pid);
}
@Override
public Object buildTree(List<PermissionDTO> permissionDTOS) {
List<PermissionDTO> trees = new ArrayList<PermissionDTO>();
for (PermissionDTO permissionDTO : permissionDTOS) {
if ("0".equals(permissionDTO.getPid().toString())) {
trees.add(permissionDTO);
}
for (PermissionDTO it : permissionDTOS) {
if (it.getPid().equals(permissionDTO.getId())) {
if (permissionDTO.getChildren() == null) {
permissionDTO.setChildren(new ArrayList<PermissionDTO>());
}
permissionDTO.getChildren().add(it);
}
}
}
Integer totalElements = permissionDTOS!=null?permissionDTOS.size():0;
Map map = new HashMap();
map.put("content",trees.size() == 0?permissionDTOS:trees);
map.put("totalElements",totalElements);
return map;
}
}
...@@ -9,15 +9,21 @@ import me.zhengjie.modules.system.service.dto.RoleQueryCriteria; ...@@ -9,15 +9,21 @@ import me.zhengjie.modules.system.service.dto.RoleQueryCriteria;
import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.modules.system.service.dto.RoleSmallDTO;
import me.zhengjie.modules.system.service.mapper.RoleMapper; import me.zhengjie.modules.system.service.mapper.RoleMapper;
import me.zhengjie.modules.system.service.mapper.RoleSmallMapper; import me.zhengjie.modules.system.service.mapper.RoleSmallMapper;
import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -26,42 +32,51 @@ import java.util.stream.Collectors; ...@@ -26,42 +32,51 @@ import java.util.stream.Collectors;
* @date 2018-12-03 * @date 2018-12-03
*/ */
@Service @Service
@CacheConfig(cacheNames = "role")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class RoleServiceImpl implements RoleService { public class RoleServiceImpl implements RoleService {
@Autowired private final RoleRepository roleRepository;
private RoleRepository roleRepository;
private final RoleMapper roleMapper;
@Autowired private final RoleSmallMapper roleSmallMapper;
private RoleMapper roleMapper;
@Autowired public RoleServiceImpl(RoleRepository roleRepository, RoleMapper roleMapper, RoleSmallMapper roleSmallMapper) {
private RoleSmallMapper roleSmallMapper; this.roleRepository = roleRepository;
this.roleMapper = roleMapper;
this.roleSmallMapper = roleSmallMapper;
}
@Override @Override
@Cacheable
public Object queryAll(Pageable pageable) { public Object queryAll(Pageable pageable) {
return roleMapper.toDto(roleRepository.findAll(pageable).getContent()); return roleMapper.toDto(roleRepository.findAll(pageable).getContent());
} }
@Override @Override
@Cacheable
public List<RoleDTO> queryAll(RoleQueryCriteria criteria) { public List<RoleDTO> queryAll(RoleQueryCriteria criteria) {
return roleMapper.toDto(roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); return roleMapper.toDto(roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
} }
@Override @Override
@Cacheable
public Object queryAll(RoleQueryCriteria criteria, Pageable pageable) { public Object queryAll(RoleQueryCriteria criteria, Pageable pageable) {
Page<Role> page = roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); Page<Role> page = roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(roleMapper::toDto)); return PageUtil.toPage(page.map(roleMapper::toDto));
} }
@Override @Override
@Cacheable(key = "#p0")
public RoleDTO findById(long id) { public RoleDTO findById(long id) {
Optional<Role> role = roleRepository.findById(id); Role role = roleRepository.findById(id).orElseGet(Role::new);
ValidationUtil.isNull(role,"Role","id",id); ValidationUtil.isNull(role.getId(),"Role","id",id);
return roleMapper.toDto(role.get()); return roleMapper.toDto(role);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public RoleDTO create(Role resources) { public RoleDTO create(Role resources) {
if(roleRepository.findByName(resources.getName()) != null){ if(roleRepository.findByName(resources.getName()) != null){
...@@ -71,13 +86,11 @@ public class RoleServiceImpl implements RoleService { ...@@ -71,13 +86,11 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(Role resources) { public void update(Role resources) {
Role role = roleRepository.findById(resources.getId()).orElseGet(Role::new);
Optional<Role> optionalRole = roleRepository.findById(resources.getId()); ValidationUtil.isNull(role.getId(),"Role","id",resources.getId());
ValidationUtil.isNull(optionalRole,"Role","id",resources.getId());
Role role = optionalRole.get();
Role role1 = roleRepository.findByName(resources.getName()); Role role1 = roleRepository.findByName(resources.getName());
...@@ -94,13 +107,7 @@ public class RoleServiceImpl implements RoleService { ...@@ -94,13 +107,7 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
public void updatePermission(Role resources, RoleDTO roleDTO) { @CacheEvict(allEntries = true)
Role role = roleMapper.toEntity(roleDTO);
role.setPermissions(resources.getPermissions());
roleRepository.save(role);
}
@Override
public void updateMenu(Role resources, RoleDTO roleDTO) { public void updateMenu(Role resources, RoleDTO roleDTO) {
Role role = roleMapper.toEntity(roleDTO); Role role = roleMapper.toEntity(roleDTO);
role.setMenus(resources.getMenus()); role.setMenus(resources.getMenus());
...@@ -108,29 +115,27 @@ public class RoleServiceImpl implements RoleService { ...@@ -108,29 +115,27 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void untiedMenu(Long id) { public void untiedMenu(Long id) {
roleRepository.untiedMenu(id); roleRepository.untiedMenu(id);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @CacheEvict(allEntries = true)
public void untiedPermission(Long id) {
roleRepository.untiedPermission(id);
}
@Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Long id) { public void delete(Long id) {
roleRepository.deleteById(id); roleRepository.deleteById(id);
} }
@Override @Override
@Cacheable(key = "'findByUsers_Id:' + #p0")
public List<RoleSmallDTO> findByUsers_Id(Long id) { public List<RoleSmallDTO> findByUsers_Id(Long id) {
return roleSmallMapper.toDto(roleRepository.findByUsers_Id(id).stream().collect(Collectors.toList())); return roleSmallMapper.toDto(new ArrayList<>(roleRepository.findByUsers_Id(id)));
} }
@Override @Override
@Cacheable
public Integer findByRoles(Set<Role> roles) { public Integer findByRoles(Set<Role> roles) {
Set<RoleDTO> roleDTOS = new HashSet<>(); Set<RoleDTO> roleDTOS = new HashSet<>();
for (Role role : roles) { for (Role role : roles) {
...@@ -138,4 +143,19 @@ public class RoleServiceImpl implements RoleService { ...@@ -138,4 +143,19 @@ public class RoleServiceImpl implements RoleService {
} }
return Collections.min(roleDTOS.stream().map(RoleDTO::getLevel).collect(Collectors.toList())); return Collections.min(roleDTOS.stream().map(RoleDTO::getLevel).collect(Collectors.toList()));
} }
@Override
public void download(List<RoleDTO> roles, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (RoleDTO role : roles) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("角色名称", role.getName());
map.put("默认权限", role.getPermission());
map.put("角色级别", role.getLevel());
map.put("描述", role.getRemark());
map.put("创建日期", role.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
} }
package me.zhengjie.modules.system.service.impl; package me.zhengjie.modules.system.service.impl;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import me.zhengjie.modules.monitor.service.RedisService; import me.zhengjie.modules.monitor.service.RedisService;
import me.zhengjie.modules.system.domain.User; import me.zhengjie.modules.system.domain.User;
import me.zhengjie.exception.EntityExistException; import me.zhengjie.exception.EntityExistException;
...@@ -16,16 +13,16 @@ import me.zhengjie.modules.system.service.dto.UserDTO; ...@@ -16,16 +13,16 @@ import me.zhengjie.modules.system.service.dto.UserDTO;
import me.zhengjie.modules.system.service.dto.UserQueryCriteria; import me.zhengjie.modules.system.service.dto.UserQueryCriteria;
import me.zhengjie.modules.system.service.mapper.UserMapper; import me.zhengjie.modules.system.service.mapper.UserMapper;
import me.zhengjie.utils.*; import me.zhengjie.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
...@@ -37,44 +34,52 @@ import java.util.stream.Collectors; ...@@ -37,44 +34,52 @@ import java.util.stream.Collectors;
* @date 2018-11-23 * @date 2018-11-23
*/ */
@Service @Service
@CacheConfig(cacheNames = "user")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class UserServiceImpl implements UserService { public class UserServiceImpl implements UserService {
@Autowired private final UserRepository userRepository;
private UserRepository userRepository;
@Autowired private final UserMapper userMapper;
private UserMapper userMapper;
@Autowired private final RedisService redisService;
private RedisService redisService;
@Autowired private final UserAvatarRepository userAvatarRepository;
private UserAvatarRepository userAvatarRepository;
@Value("${file.avatar}") @Value("${file.avatar}")
private String avatar; private String avatar;
public UserServiceImpl(UserRepository userRepository, UserMapper userMapper, RedisService redisService, UserAvatarRepository userAvatarRepository) {
this.userRepository = userRepository;
this.userMapper = userMapper;
this.redisService = redisService;
this.userAvatarRepository = userAvatarRepository;
}
@Override @Override
@Cacheable
public Object queryAll(UserQueryCriteria criteria, Pageable pageable) { public Object queryAll(UserQueryCriteria criteria, Pageable pageable) {
Page<User> page = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); Page<User> page = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(userMapper::toDto)); return PageUtil.toPage(page.map(userMapper::toDto));
} }
@Override @Override
@Cacheable
public List<UserDTO> queryAll(UserQueryCriteria criteria) { public List<UserDTO> queryAll(UserQueryCriteria criteria) {
List<User> users = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)); List<User> users = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder));
return userMapper.toDto(users); return userMapper.toDto(users);
} }
@Override @Override
@Cacheable(key = "#p0")
public UserDTO findById(long id) { public UserDTO findById(long id) {
Optional<User> user = userRepository.findById(id); User user = userRepository.findById(id).orElseGet(User::new);
ValidationUtil.isNull(user,"User","id",id); ValidationUtil.isNull(user.getId(),"User","id",id);
return userMapper.toDto(user.get()); return userMapper.toDto(user);
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public UserDTO create(User resources) { public UserDTO create(User resources) {
...@@ -92,13 +97,11 @@ public class UserServiceImpl implements UserService { ...@@ -92,13 +97,11 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(User resources) { public void update(User resources) {
Optional<User> userOptional = userRepository.findById(resources.getId()); User user = userRepository.findById(resources.getId()).orElseGet(User::new);
ValidationUtil.isNull(userOptional,"User","id",resources.getId()); ValidationUtil.isNull(user.getId(),"User","id",resources.getId());
User user = userOptional.get();
User user1 = userRepository.findByUsername(user.getUsername()); User user1 = userRepository.findByUsername(user.getUsername());
User user2 = userRepository.findByEmail(user.getEmail()); User user2 = userRepository.findByEmail(user.getEmail());
...@@ -129,14 +132,16 @@ public class UserServiceImpl implements UserService { ...@@ -129,14 +132,16 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Long id) { public void delete(Long id) {
userRepository.deleteById(id); userRepository.deleteById(id);
} }
@Override @Override
@Cacheable(key = "'loadUserByUsername:'+#p0")
public UserDTO findByName(String userName) { public UserDTO findByName(String userName) {
User user = null; User user;
if(ValidationUtil.isEmail(userName)){ if(ValidationUtil.isEmail(userName)){
user = userRepository.findByEmail(userName); user = userRepository.findByEmail(userName);
} else { } else {
...@@ -150,12 +155,14 @@ public class UserServiceImpl implements UserService { ...@@ -150,12 +155,14 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updatePass(String username, String pass) { public void updatePass(String username, String pass) {
userRepository.updatePass(username,pass,new Date()); userRepository.updatePass(username,pass,new Date());
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateAvatar(MultipartFile multipartFile) { public void updateAvatar(MultipartFile multipartFile) {
User user = userRepository.findByUsername(SecurityUtils.getUsername()); User user = userRepository.findByUsername(SecurityUtils.getUsername());
...@@ -165,6 +172,7 @@ public class UserServiceImpl implements UserService { ...@@ -165,6 +172,7 @@ public class UserServiceImpl implements UserService {
oldPath = userAvatar.getPath(); oldPath = userAvatar.getPath();
} }
File file = FileUtil.upload(multipartFile, avatar); File file = FileUtil.upload(multipartFile, avatar);
assert file != null;
userAvatar = userAvatarRepository.save(new UserAvatar(userAvatar,file.getName(), file.getPath(), FileUtil.getSize(multipartFile.getSize()))); userAvatar = userAvatarRepository.save(new UserAvatar(userAvatar,file.getName(), file.getPath(), FileUtil.getSize(multipartFile.getSize())));
user.setUserAvatar(userAvatar); user.setUserAvatar(userAvatar);
userRepository.save(user); userRepository.save(user);
...@@ -174,6 +182,7 @@ public class UserServiceImpl implements UserService { ...@@ -174,6 +182,7 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateEmail(String username, String email) { public void updateEmail(String username, String email) {
userRepository.updateEmail(username,email); userRepository.updateEmail(username,email);
...@@ -184,7 +193,7 @@ public class UserServiceImpl implements UserService { ...@@ -184,7 +193,7 @@ public class UserServiceImpl implements UserService {
List<Map<String, Object>> list = new ArrayList<>(); List<Map<String, Object>> list = new ArrayList<>();
for (UserDTO userDTO : queryAll) { for (UserDTO userDTO : queryAll) {
List roles = userDTO.getRoles().stream().map(RoleSmallDTO::getName).collect(Collectors.toList()); List roles = userDTO.getRoles().stream().map(RoleSmallDTO::getName).collect(Collectors.toList());
Map map = new LinkedHashMap(); Map<String,Object> map = new LinkedHashMap<>();
map.put("用户名", userDTO.getUsername()); map.put("用户名", userDTO.getUsername());
map.put("头像", userDTO.getAvatar()); map.put("头像", userDTO.getAvatar());
map.put("邮箱", userDTO.getEmail()); map.put("邮箱", userDTO.getEmail());
......
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