ff500bf7c63e200333493a65fbeea51060f54bff
[institute/sw-backend.git] /
1 package com.supwisdom.institute.backend.base.domain.service;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.LinkedHashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import lombok.extern.slf4j.Slf4j;
10
11 import org.apache.commons.lang3.StringUtils;
12 import org.springframework.beans.factory.annotation.Autowired;
13 import org.springframework.stereotype.Service;
14
15 import com.supwisdom.institute.backend.base.domain.entity.Permission;
16 import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
17 import com.supwisdom.institute.backend.base.domain.repo.PermissionRepository;
18 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
19 import com.supwisdom.institute.backend.common.framework.service.ABaseService;
20
21 @Slf4j
22 @Service
23 public class PermissionService extends ABaseService<Permission, PermissionRepository> {
24   
25   @Override
26   public PermissionRepository getRepo() {
27     return permissionRepository;
28   }
29
30   @Autowired
31   private PermissionRepository permissionRepository;
32   
33   @Override
34   public Permission insert(Permission entity) {
35     Permission parentPermission = permissionRepository.selectById(entity.getParentId());
36     if (parentPermission != null) {
37       entity.setApplicationId(parentPermission.getApplicationId());
38     }
39     
40     return super.insert(entity);
41   }
42
43   public void deleteBatch(List<String> ids) {
44     
45     ids.stream().forEach(id -> {
46       this.deleteById(id);
47     });
48   }
49   
50   private Permission selectApplicationPermission() {
51     Permission permission = permissionRepository.selectById(Permission.APPLICATION_ID);
52     
53     return permission;
54   }
55   
56   private List<Permission> selectApplicationPermissionList() {
57     Map<String, Object> mapBean = new HashMap<String, Object>();
58     mapBean.put("type", Permission.TYPE_APPLICATION);
59     
60     return permissionRepository.selectList(true, -1, -1, mapBean, null);
61   }
62
63   public PermissionTreeNode selectPermissionTree(String applicationId, String type) {
64
65     Map<String, Object> mapBean = new HashMap<String, Object>();
66     mapBean.put("type", type);
67     
68     String rootTreeNodeId = "0";
69     
70     List<Permission> permissions = new ArrayList<Permission>();
71     
72     if (StringUtils.isBlank(applicationId)) {
73       Permission rootPermission = new Permission();
74       rootPermission.setId(Permission.ROOT_PARENT_ID);
75       rootPermission.setCode("root");
76       rootPermission.setName("根");
77       
78       permissions.add(rootPermission);
79       rootTreeNodeId = rootPermission.getId();
80
81       List<Permission> applicationPermissions = this.selectApplicationPermissionList();
82       permissions.addAll(applicationPermissions);
83     } else {
84       Permission applicationPermission = permissionRepository.selectById(applicationId); // this.selectApplicationPermissionByCode(applicationCode);
85       if (applicationPermission == null) {
86         return null;
87       }
88       
89       permissions.add(applicationPermission);
90       rootTreeNodeId = applicationPermission.getId();
91     }
92     
93     List<Permission> menuPermissions = permissionRepository.selectList(true, -1, -1, mapBean, null);
94     permissions.addAll(menuPermissions);
95
96     return convertPermissionTree(permissions, rootTreeNodeId);
97   }
98   
99   private PermissionTreeNode convertPermissionTree(List<Permission> permissions, String rootTreeNodeId) {
100     if (permissions == null || permissions.size() == 0) {
101       return null;
102     }
103
104     Map<String, PermissionTreeNode> parentTreeNode = new LinkedHashMap<String, PermissionTreeNode>();
105
106     for (Permission permission : permissions) {
107       PermissionTreeNode treeNode = EntityUtils.copy(permission, new PermissionTreeNode());
108       treeNode.setChildren(new ArrayList<PermissionTreeNode>());
109       
110       if (parentTreeNode.containsKey(treeNode.getId())) {
111         continue;
112       }
113       parentTreeNode.put(treeNode.getId(), treeNode);
114     }
115     
116     for (PermissionTreeNode treeNode : parentTreeNode.values()) {
117       if (!parentTreeNode.containsKey(treeNode.getParentId())) {
118         continue;
119       }
120       
121       parentTreeNode.get(treeNode.getParentId()).getChildren().add(treeNode);
122     }
123     
124     return parentTreeNode.get(rootTreeNodeId);
125   }
126
127   
128
129 //  public Permission selectApplicationPermissionByCode(String code) {
130 //    Permission probe = new Permission();
131 //    probe.setCode(code);
132 //    probe.setType("1");
133 //    
134 //    ExampleMatcher matcher = ExampleMatcher.matching()
135 //        .withMatcher("code", ExampleMatcher.GenericPropertyMatchers.exact())
136 //        .withMatcher("type", ExampleMatcher.GenericPropertyMatchers.exact());
137 //    
138 //    Example<Permission> example = Example.of(probe, matcher);
139 //    
140 //    Optional<Permission> o = permissionRepository.findOne(example);
141 //    
142 //    if (o.isPresent()) {
143 //      return o.get();
144 //    }
145 //    
146 //    return null;
147 //  }
148   
149
150   public List<Permission> selectByUsername(String username, String applicationId, String type) {
151     List<Permission> permissions = new ArrayList<Permission>();
152     
153 //    Permission applicationPermission = permissionRepository.selectById(applicationId);
154 //    if (applicationPermission == null) {
155 //      return permissions;
156 //    }
157 //    
158 //    int lft = applicationPermission.getLft();
159 //    int rgt = applicationPermission.getRgt();
160     
161     if (StringUtils.isBlank(applicationId)) {
162       List<Permission> accountRolePermissions = permissionRepository.selectAccountRolePermissionByUsername(username, type);
163       permissions.addAll(accountRolePermissions);
164       
165       List<Permission> accountGroupRolePermissions = permissionRepository.selectAccountGroupRolePermissionByUsername(username, type);
166       permissions.addAll(accountGroupRolePermissions);
167     } else {
168       List<Permission> accountRolePermissions = permissionRepository.selectAccountRolePermissionByUsername(username, applicationId, type);
169       permissions.addAll(accountRolePermissions);
170       
171       List<Permission> accountGroupRolePermissions = permissionRepository.selectAccountGroupRolePermissionByUsername(username, applicationId, type);
172       permissions.addAll(accountGroupRolePermissions);
173     }
174     
175     return EntityUtils.distinctList(permissions);
176   }
177   
178   @Deprecated
179   public PermissionTreeNode selectPermissionTreeByUsername(String username, String applicationId, String type) {
180     String rootTreeNodeId = "0";
181     
182     List<Permission> permissions = new ArrayList<Permission>();
183     
184     if (StringUtils.isBlank(applicationId)) {
185       Permission rootPermission = new Permission();
186       rootPermission.setId(Permission.ROOT_PARENT_ID);
187       rootPermission.setCode("root");
188       rootPermission.setName("根");
189       
190       permissions.add(rootPermission);
191       rootTreeNodeId = rootPermission.getId();
192
193       List<Permission> applicationPermissions = this.selectApplicationPermissionList();
194       permissions.addAll(applicationPermissions);
195     } else {
196       Permission applicationPermission = permissionRepository.selectById(applicationId); // this.selectApplicationPermissionByCode(applicationCode);
197       if (applicationPermission == null) {
198         return null;
199       }
200       
201       permissions.add(applicationPermission);
202       rootTreeNodeId = applicationPermission.getId();
203     }
204     
205     List<Permission> menuPermissions = this.selectByUsername(username, applicationId, type);
206     permissions.addAll(menuPermissions);
207
208     return convertPermissionTree(permissions, rootTreeNodeId);
209   }
210
211 }