a764e52122fcc3027437bbf5c7e939602be5d649.svn-base 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package org.jeecg.modules.system.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import org.jeecg.common.util.oConvertUtils;
  5. import org.jeecg.modules.system.entity.SysDepartPermission;
  6. import org.jeecg.modules.system.entity.SysDepartRole;
  7. import org.jeecg.modules.system.entity.SysDepartRolePermission;
  8. import org.jeecg.modules.system.entity.SysPermissionDataRule;
  9. import org.jeecg.modules.system.mapper.SysDepartPermissionMapper;
  10. import org.jeecg.modules.system.mapper.SysDepartRoleMapper;
  11. import org.jeecg.modules.system.mapper.SysDepartRolePermissionMapper;
  12. import org.jeecg.modules.system.mapper.SysPermissionDataRuleMapper;
  13. import org.jeecg.modules.system.service.ISysDepartPermissionService;
  14. import org.springframework.stereotype.Service;
  15. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import javax.annotation.Resource;
  18. import java.util.*;
  19. import java.util.stream.Collectors;
  20. /**
  21. * @Description: 部门权限表
  22. * @Author: jeecg-boot
  23. * @Date: 2020-02-11
  24. * @Version: V1.0
  25. */
  26. @Service
  27. public class SysDepartPermissionServiceImpl extends ServiceImpl<SysDepartPermissionMapper, SysDepartPermission> implements ISysDepartPermissionService {
  28. @Resource
  29. private SysPermissionDataRuleMapper ruleMapper;
  30. @Resource
  31. private SysDepartRoleMapper sysDepartRoleMapper;
  32. @Resource
  33. private SysDepartRolePermissionMapper departRolePermissionMapper;
  34. @Override
  35. @Transactional(rollbackFor = Exception.class)
  36. public void saveDepartPermission(String departId, String permissionIds, String lastPermissionIds) {
  37. List<String> add = getDiff(lastPermissionIds,permissionIds);
  38. if(add!=null && add.size()>0) {
  39. List<SysDepartPermission> list = new ArrayList<SysDepartPermission>();
  40. for (String p : add) {
  41. if(oConvertUtils.isNotEmpty(p)) {
  42. SysDepartPermission rolepms = new SysDepartPermission(departId, p);
  43. list.add(rolepms);
  44. }
  45. }
  46. this.saveBatch(list);
  47. }
  48. List<String> delete = getDiff(permissionIds,lastPermissionIds);
  49. if(delete!=null && delete.size()>0) {
  50. for (String permissionId : delete) {
  51. this.remove(new QueryWrapper<SysDepartPermission>().lambda().eq(SysDepartPermission::getDepartId, departId).eq(SysDepartPermission::getPermissionId, permissionId));
  52. //删除部门权限时,删除部门角色中已授权的权限
  53. List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(new LambdaQueryWrapper<SysDepartRole>().eq(SysDepartRole::getDepartId,departId));
  54. List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
  55. if(roleIds != null && roleIds.size()>0){
  56. departRolePermissionMapper.delete(new LambdaQueryWrapper<SysDepartRolePermission>().eq(SysDepartRolePermission::getPermissionId,permissionId));
  57. }
  58. }
  59. }
  60. }
  61. @Override
  62. public List<SysPermissionDataRule> getPermRuleListByDeptIdAndPermId(String departId, String permissionId) {
  63. SysDepartPermission departPermission = this.getOne(new QueryWrapper<SysDepartPermission>().lambda().eq(SysDepartPermission::getDepartId, departId).eq(SysDepartPermission::getPermissionId, permissionId));
  64. if(departPermission != null){
  65. LambdaQueryWrapper<SysPermissionDataRule> query = new LambdaQueryWrapper<SysPermissionDataRule>();
  66. query.in(SysPermissionDataRule::getId, Arrays.asList(departPermission.getDataRuleIds().split(",")));
  67. query.orderByDesc(SysPermissionDataRule::getCreateTime);
  68. List<SysPermissionDataRule> permRuleList = this.ruleMapper.selectList(query);
  69. return permRuleList;
  70. }else{
  71. return null;
  72. }
  73. }
  74. /**
  75. * 从diff中找出main中没有的元素
  76. * @param main
  77. * @param diff
  78. * @return
  79. */
  80. private List<String> getDiff(String main,String diff){
  81. if(oConvertUtils.isEmpty(diff)) {
  82. return null;
  83. }
  84. if(oConvertUtils.isEmpty(main)) {
  85. return Arrays.asList(diff.split(","));
  86. }
  87. String[] mainArr = main.split(",");
  88. String[] diffArr = diff.split(",");
  89. Map<String, Integer> map = new HashMap<>();
  90. for (String string : mainArr) {
  91. map.put(string, 1);
  92. }
  93. List<String> res = new ArrayList<String>();
  94. for (String key : diffArr) {
  95. if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) {
  96. res.add(key);
  97. }
  98. }
  99. return res;
  100. }
  101. }