1 package com.supwisdom.institute.backend.system.api.v1.admin;
3 import java.util.HashMap;
5 import io.swagger.annotations.Api;
6 import lombok.extern.slf4j.Slf4j;
8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.data.domain.Page;
10 import org.springframework.http.HttpStatus;
11 import org.springframework.util.MimeTypeUtils;
12 import org.springframework.web.bind.annotation.DeleteMapping;
13 import org.springframework.web.bind.annotation.GetMapping;
14 import org.springframework.web.bind.annotation.PathVariable;
15 import org.springframework.web.bind.annotation.PostMapping;
16 import org.springframework.web.bind.annotation.PutMapping;
17 import org.springframework.web.bind.annotation.RequestBody;
18 import org.springframework.web.bind.annotation.RequestMapping;
19 import org.springframework.web.bind.annotation.RequestMethod;
20 import org.springframework.web.bind.annotation.ResponseBody;
21 import org.springframework.web.bind.annotation.ResponseStatus;
22 import org.springframework.web.bind.annotation.RestController;
24 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
25 import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
26 import com.supwisdom.institute.backend.system.api.vo.request.RoleCreateRequest;
27 import com.supwisdom.institute.backend.system.api.vo.request.RoleRelateAccountsRequest;
28 import com.supwisdom.institute.backend.system.api.vo.request.RoleRelateGroupsRequest;
29 import com.supwisdom.institute.backend.system.api.vo.request.RoleRelatePermissionsRequest;
30 import com.supwisdom.institute.backend.system.api.vo.request.RoleRelatedAccountsRequest;
31 import com.supwisdom.institute.backend.system.api.vo.request.RoleRelatedGroupsRequest;
32 import com.supwisdom.institute.backend.system.api.vo.request.RoleRelatedPermissionsRequest;
33 import com.supwisdom.institute.backend.system.api.vo.request.RoleUpdateRequest;
34 import com.supwisdom.institute.backend.system.api.vo.request.RoleQueryRequest;
35 import com.supwisdom.institute.backend.system.api.vo.response.RoleCreateResponseData;
36 import com.supwisdom.institute.backend.system.api.vo.response.RoleLoadResponseData;
37 import com.supwisdom.institute.backend.system.api.vo.response.RoleRelateAccountsResponseData;
38 import com.supwisdom.institute.backend.system.api.vo.response.RoleRelateGroupsResponseData;
39 import com.supwisdom.institute.backend.system.api.vo.response.RoleRelatePermissionsResponseData;
40 import com.supwisdom.institute.backend.system.api.vo.response.RoleRelatedAccountsResponseData;
41 import com.supwisdom.institute.backend.system.api.vo.response.RoleRelatedGroupsResponseData;
42 import com.supwisdom.institute.backend.system.api.vo.response.RoleRelatedPermissionsResponseData;
43 import com.supwisdom.institute.backend.system.api.vo.response.RoleRemoveResponseData;
44 import com.supwisdom.institute.backend.system.api.vo.response.RoleUpdateResponseData;
45 import com.supwisdom.institute.backend.system.api.vo.response.RoleQueryResponseData;
46 import com.supwisdom.institute.backend.system.domain.entity.AccountRole;
47 import com.supwisdom.institute.backend.system.domain.entity.GroupRole;
48 import com.supwisdom.institute.backend.system.domain.entity.Role;
49 import com.supwisdom.institute.backend.system.domain.entity.RolePermission;
50 import com.supwisdom.institute.backend.system.domain.service.RoleService;
52 @Api(value = "SystemAdminRole", tags = { "SystemAdminRole" }, description = "角色的操作接口")
55 @RequestMapping("/v1/admin/roles")
56 public class AdminRoleController {
59 private RoleService roleService;
61 @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
62 @ResponseStatus(value = HttpStatus.OK)
64 public DefaultApiResponse<RoleQueryResponseData> query(RoleQueryRequest queryRequest) {
66 Page<Role> page = roleService.selectPageList(
67 queryRequest.isLoadAll(),
68 queryRequest.getPageIndex(),
69 queryRequest.getPageSize(),
70 queryRequest.getMapBean(),
71 queryRequest.getOrderBy());
73 RoleQueryResponseData data = RoleQueryResponseData.of(queryRequest).build(page);
75 return new DefaultApiResponse<RoleQueryResponseData>(data);
78 @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
79 @ResponseStatus(value = HttpStatus.OK)
81 public DefaultApiResponse<RoleLoadResponseData> load(@PathVariable("id") String id) {
83 if (id == null || id.length() == 0) {
84 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
87 Role role = roleService.selectById(id);
90 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
93 RoleLoadResponseData data = RoleLoadResponseData.of(role);
95 return new DefaultApiResponse<RoleLoadResponseData>(data);
98 @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
99 @ResponseStatus(value = HttpStatus.OK)
101 public DefaultApiResponse<RoleCreateResponseData> create(
102 @RequestBody RoleCreateRequest createRequest) {
106 Role role = createRequest.getEntity();
108 Role ret = roleService.insert(role);
110 RoleCreateResponseData data = RoleCreateResponseData.build(ret);
112 return new DefaultApiResponse<RoleCreateResponseData>(data);
115 @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
116 @ResponseStatus(value = HttpStatus.OK)
118 public DefaultApiResponse<RoleUpdateResponseData> update(
119 @PathVariable("id") String id,
120 @RequestBody RoleUpdateRequest updateRequest) {
122 if (id == null || id.length() == 0) {
123 throw new RuntimeException("exception.update.id.must.not.empty");
126 Role tmp = roleService.selectById(id);
128 throw new RuntimeException("exception.update.domain.not.exist");
131 Role role = updateRequest.getEntity();
134 role = EntityUtils.merge(tmp, role);
136 Role ret = roleService.update(role);
138 RoleUpdateResponseData data = RoleUpdateResponseData.build(ret);
140 return new DefaultApiResponse<RoleUpdateResponseData>(data);
143 @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
144 @ResponseStatus(value = HttpStatus.OK)
146 public DefaultApiResponse<RoleRemoveResponseData> delete(
147 @PathVariable("id") String id) {
149 if (id == null || id.length() == 0) {
150 throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
153 Role tmp = roleService.selectById(id);
155 throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
158 roleService.deleteById(id);
160 RoleRemoveResponseData data = RoleRemoveResponseData.build(tmp);
161 return new DefaultApiResponse<RoleRemoveResponseData>(data);
165 @RequestMapping(method = RequestMethod.GET, path = "/{id}/accounts", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
167 public DefaultApiResponse<RoleRelatedAccountsResponseData> roleAccounts(
168 @PathVariable("id") String id,
169 RoleRelatedAccountsRequest request) {
171 if (id == null || id.length() == 0) {
172 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
175 Role role = roleService.selectById(id);
178 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
181 if (request.getMapBean() == null) {
182 request.setMapBean(new HashMap<String, Object>());
184 request.getMapBean().put("roleId", role.getId());
186 Page<AccountRole> page = roleService.selectRoleAccounts(
187 request.getPageIndex(),
188 request.getPageSize(),
189 request.getMapBean());
191 RoleRelatedAccountsResponseData data = RoleRelatedAccountsResponseData.of(request).build(page);
193 return new DefaultApiResponse<RoleRelatedAccountsResponseData>(data);
196 @RequestMapping(method = RequestMethod.POST, path = "/{id}/accounts", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
198 public DefaultApiResponse<RoleRelateAccountsResponseData> relateAccounts(
199 @PathVariable("id") String id,
200 @RequestBody RoleRelateAccountsRequest roleAccounts) {
202 if (id == null || id.length() == 0) {
203 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
206 Role role = roleService.selectById(id);
209 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
212 roleService.relateRoleAccounts(role, roleAccounts.getRoleAccounts());
214 RoleRelateAccountsResponseData data = RoleRelateAccountsResponseData.of("info.relate.success");
216 return new DefaultApiResponse<RoleRelateAccountsResponseData>(data);
220 @RequestMapping(method = RequestMethod.GET, path = "/{id}/groups", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
222 public DefaultApiResponse<RoleRelatedGroupsResponseData> roleGroups(
223 @PathVariable("id") String id,
224 RoleRelatedGroupsRequest request) {
226 if (id == null || id.length() == 0) {
227 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
230 Role role = roleService.selectById(id);
233 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
236 if (request.getMapBean() == null) {
237 request.setMapBean(new HashMap<String, Object>());
239 request.getMapBean().put("roleId", role.getId());
241 Page<GroupRole> page = roleService.selectRoleGroups(
242 request.getPageIndex(),
243 request.getPageSize(),
244 request.getMapBean());
246 RoleRelatedGroupsResponseData data = RoleRelatedGroupsResponseData.of(request).build(page);
248 return new DefaultApiResponse<RoleRelatedGroupsResponseData>(data);
251 @RequestMapping(method = RequestMethod.POST, path = "/{id}/groups", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
253 public DefaultApiResponse<RoleRelateGroupsResponseData> relateGroups(
254 @PathVariable("id") String id,
255 @RequestBody RoleRelateGroupsRequest roleGroups) {
257 if (id == null || id.length() == 0) {
258 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
261 Role role = roleService.selectById(id);
264 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
267 roleService.relateRoleGroups(role, roleGroups.getRoleGroups());
269 RoleRelateGroupsResponseData data = RoleRelateGroupsResponseData.of("info.relate.success");
271 return new DefaultApiResponse<RoleRelateGroupsResponseData>(data);
275 @RequestMapping(method = RequestMethod.GET, path = "/{id}/permissions", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
277 public DefaultApiResponse<RoleRelatedPermissionsResponseData> rolePermissions(
278 @PathVariable("id") String id,
279 RoleRelatedPermissionsRequest request) {
281 if (id == null || id.length() == 0) {
282 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
285 Role role = roleService.selectById(id);
288 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
291 if (request.getMapBean() == null) {
292 request.setMapBean(new HashMap<String, Object>());
294 request.getMapBean().put("roleId", role.getId());
296 Page<RolePermission> page = roleService.selectRolePermissions(
297 request.getPageIndex(),
298 request.getPageSize(),
299 request.getMapBean());
301 RoleRelatedPermissionsResponseData data = RoleRelatedPermissionsResponseData.of(request).build(page);
303 return new DefaultApiResponse<RoleRelatedPermissionsResponseData>(data);
306 @RequestMapping(method = RequestMethod.POST, path = "/{id}/permissions", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
308 public DefaultApiResponse<RoleRelatePermissionsResponseData> relatePermissions(
309 @PathVariable("id") String id,
310 @RequestBody RoleRelatePermissionsRequest rolePermissions) {
312 if (id == null || id.length() == 0) {
313 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
316 Role role = roleService.selectById(id);
319 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
322 roleService.relateRolePermissions(role, rolePermissions.getRolePermissions());
324 RoleRelatePermissionsResponseData data = RoleRelatePermissionsResponseData.of("info.relate.success");
326 return new DefaultApiResponse<RoleRelatePermissionsResponseData>(data);