97ff9e660847260e7744614c45cecf13a5972d6c
[institute/sw-backend.git] /
1 package com.supwisdom.institute.backend.system.domain.repo;
2
3 import java.util.LinkedHashMap;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.Optional;
7
8 import org.springframework.data.domain.Example;
9 import org.springframework.data.domain.ExampleMatcher;
10 import org.springframework.data.domain.Page;
11 import org.springframework.data.domain.PageRequest;
12 import org.springframework.stereotype.Repository;
13
14 import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository;
15 import com.supwisdom.institute.backend.common.util.MapBeanUtils;
16 import com.supwisdom.institute.backend.system.domain.entity.Permission;
17 import com.supwisdom.institute.backend.system.domain.entity.Role;
18 import com.supwisdom.institute.backend.system.domain.entity.RolePermission;
19
20 @Repository
21 public interface RolePermissionRepository extends BaseJpaRepository<RolePermission> {
22
23   public default Page<RolePermission> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean) {
24     RolePermission probe = new RolePermission();
25     if (mapBean != null) {
26       probe.setRoleId(MapBeanUtils.getString(mapBean, "roleId"));
27       probe.setPermissionId(MapBeanUtils.getString(mapBean, "permissionId"));
28     }
29
30     ExampleMatcher matcher = ExampleMatcher.matching()
31         .withMatcher("roleId", ExampleMatcher.GenericPropertyMatchers.exact())
32         .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact());
33
34     PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
35     Example<RolePermission> example = Example.of(probe, matcher);
36
37     Page<RolePermission> page = this.findAll(example, pageRequest);
38
39     return page;
40   }
41
42   public default Page<RolePermission> selectRolePermissions(int pageIndex, int pageSize, Map<String, Object> mapBean) {
43
44     RolePermission probe = new RolePermission();
45     if (mapBean != null) {
46       probe.setRoleId(MapBeanUtils.getString(mapBean, "roleId"));
47       probe.setPermissionId(MapBeanUtils.getString(mapBean, "permissionId"));
48     }
49
50     ExampleMatcher matcher = ExampleMatcher.matching()
51         .withMatcher("roleId", ExampleMatcher.GenericPropertyMatchers.exact())
52         .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact());
53
54     Example<RolePermission> example = Example.of(probe, matcher);
55
56     PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
57
58     Page<RolePermission> page = this.findAll(example, pageRequest); // FIXME: 多表关联查询
59
60     return page;
61   }
62
63   public default void relateRolePermissions(Role role, List<RolePermission> rolePermissions) {
64
65     List<RolePermission> existRolePermissions = this.selectListByRoleId(role.getId());
66
67     Map<String, RolePermission> existMapRolePermissions = new LinkedHashMap<String, RolePermission>();
68     for (RolePermission rolePermission : existRolePermissions) {
69       String k = String.format("%s", rolePermission.getPermissionId());
70       existMapRolePermissions.put(k, rolePermission);
71     }
72
73     for (RolePermission rolePermission : rolePermissions) {
74       String k = String.format("%s", rolePermission.getPermissionId());
75
76       if (existMapRolePermissions.containsKey(k)) {
77         existMapRolePermissions.remove(k);
78       } else {
79         rolePermission.setCompanyId(role.getCompanyId());
80         rolePermission.setRoleId(role.getId());
81
82         this.insert(rolePermission);
83       }
84     }
85
86     for (RolePermission rolePermission : existMapRolePermissions.values()) {
87       this.deleteById(rolePermission.getId());
88     }
89   }
90
91   public default List<RolePermission> selectListByRoleId(String roleId) {
92
93     RolePermission probe = new RolePermission();
94     probe.setRoleId(roleId);
95
96     ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("roleId",
97         ExampleMatcher.GenericPropertyMatchers.exact());
98
99     Example<RolePermission> example = Example.of(probe, matcher);
100
101     List<RolePermission> rolePermissions = this.findAll(example);
102
103     return rolePermissions;
104   }
105
106   public default void relatePermissionRoles(Permission permission, List<RolePermission> rolePermissions) {
107
108     // 获取权限已关联的角色
109     List<RolePermission> existPermissionRoles = this.selectListByPermissionId(permission.getId());
110
111     Map<String, RolePermission> existMapPermissionRoles = new LinkedHashMap<String, RolePermission>();
112     for (RolePermission rolePermission : existPermissionRoles) {
113       String k = String.format("%s", rolePermission.getRoleId());
114       existMapPermissionRoles.put(k, rolePermission);
115     }
116
117     // 保存未关联的角色
118     for (RolePermission rolePermission : rolePermissions) {
119       String k = String.format("%s", rolePermission.getRoleId());
120
121       if (existMapPermissionRoles.containsKey(k)) {
122         existMapPermissionRoles.remove(k);
123       } else {
124         rolePermission.setCompanyId(permission.getCompanyId());
125         rolePermission.setPermissionId(permission.getId());
126
127         this.insert(rolePermission);
128       }
129     }
130
131     // 删除移除关联的角色
132     for (RolePermission rolePermission : existMapPermissionRoles.values()) {
133       this.deleteById(rolePermission.getId());
134     }
135   }
136
137   public default List<RolePermission> selectListByPermissionId(String permissionId) {
138
139     RolePermission probe = new RolePermission();
140     probe.setPermissionId(permissionId);
141
142     ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("permissionId",
143         ExampleMatcher.GenericPropertyMatchers.exact());
144
145     Example<RolePermission> example = Example.of(probe, matcher);
146
147     List<RolePermission> rolePermissions = this.findAll(example);
148
149     return rolePermissions;
150   }
151
152   public default RolePermission selectOneByRolePermission(String roleId, String permissionId) {
153
154     RolePermission probe = new RolePermission();
155     probe.setRoleId(roleId);
156     probe.setPermissionId(permissionId);
157
158     ExampleMatcher matcher = ExampleMatcher.matching()
159         .withMatcher("roleId", ExampleMatcher.GenericPropertyMatchers.exact())
160         .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact())
161         ;
162
163     Example<RolePermission> example = Example.of(probe, matcher);
164     
165     Optional<RolePermission> o = this.findOne(example);
166     
167     return o.isPresent() ? o.get() : null;
168   }
169
170   public default void addRolePermission(String roleId, String permissionId) {
171
172     RolePermission rolePermission = this.selectOneByRolePermission(roleId, permissionId);
173     
174     if (rolePermission == null) {
175       rolePermission = new RolePermission();
176       //rolePermission.setCompanyId(companyId);
177       rolePermission.setRoleId(roleId);
178       rolePermission.setPermissionId(permissionId);
179       
180       this.insert(rolePermission);
181     }
182   }
183
184   public default void removeRolePermission(String roleId, String permissionId) {
185
186     RolePermission rolePermission = this.selectOneByRolePermission(roleId, permissionId);
187     
188     if (rolePermission != null) {
189       this.deleteById(rolePermission.getId());
190     }
191   }
192
193 }