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.GroupCreateRequest;
27 import com.supwisdom.institute.backend.system.api.vo.request.GroupQueryRequest;
28 import com.supwisdom.institute.backend.system.api.vo.request.GroupRelateAccountsRequest;
29 import com.supwisdom.institute.backend.system.api.vo.request.GroupRelateRolesRequest;
30 import com.supwisdom.institute.backend.system.api.vo.request.GroupRelatedAccountsRequest;
31 import com.supwisdom.institute.backend.system.api.vo.request.GroupRelatedRolesRequest;
32 import com.supwisdom.institute.backend.system.api.vo.request.GroupUpdateRequest;
33 import com.supwisdom.institute.backend.system.api.vo.response.GroupCreateResponseData;
34 import com.supwisdom.institute.backend.system.api.vo.response.GroupLoadResponseData;
35 import com.supwisdom.institute.backend.system.api.vo.response.GroupQueryResponseData;
36 import com.supwisdom.institute.backend.system.api.vo.response.GroupRelateAccountsResponseData;
37 import com.supwisdom.institute.backend.system.api.vo.response.GroupRelateRolesResponseData;
38 import com.supwisdom.institute.backend.system.api.vo.response.GroupRelatedAccountsResponseData;
39 import com.supwisdom.institute.backend.system.api.vo.response.GroupRelatedRolesResponseData;
40 import com.supwisdom.institute.backend.system.api.vo.response.GroupRemoveResponseData;
41 import com.supwisdom.institute.backend.system.api.vo.response.GroupUpdateResponseData;
42 import com.supwisdom.institute.backend.system.domain.entity.AccountGroup;
43 import com.supwisdom.institute.backend.system.domain.entity.Group;
44 import com.supwisdom.institute.backend.system.domain.entity.GroupRole;
45 import com.supwisdom.institute.backend.system.domain.service.GroupService;
47 @Api(value = "SystemAdminGroup", tags = { "SystemAdminGroup" }, description = "用户组的操作接口")
50 @RequestMapping("/v1/admin/groups")
51 public class AdminGroupController {
54 private GroupService groupService;
56 @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
57 @ResponseStatus(value = HttpStatus.OK)
59 public DefaultApiResponse<GroupQueryResponseData> query(GroupQueryRequest queryRequest) {
61 Page<Group> page = groupService.selectPageList(
62 queryRequest.isLoadAll(),
63 queryRequest.getPageIndex(),
64 queryRequest.getPageSize(),
65 queryRequest.getMapBean(),
66 queryRequest.getOrderBy());
68 GroupQueryResponseData data = GroupQueryResponseData.of(queryRequest).build(page);
70 return new DefaultApiResponse<GroupQueryResponseData>(data);
73 @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
74 @ResponseStatus(value = HttpStatus.OK)
76 public DefaultApiResponse<GroupLoadResponseData> load(@PathVariable("id") String id) {
78 if (id == null || id.length() == 0) {
79 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
82 Group group = groupService.selectById(id);
85 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
88 GroupLoadResponseData data = GroupLoadResponseData.of(group);
90 return new DefaultApiResponse<GroupLoadResponseData>(data);
93 @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
94 @ResponseStatus(value = HttpStatus.OK)
96 public DefaultApiResponse<GroupCreateResponseData> create(
97 @RequestBody GroupCreateRequest createRequest) {
101 Group group = createRequest.getEntity();
103 Group ret = groupService.insert(group);
105 GroupCreateResponseData data = GroupCreateResponseData.build(ret);
107 return new DefaultApiResponse<GroupCreateResponseData>(data);
110 @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
111 @ResponseStatus(value = HttpStatus.OK)
113 public DefaultApiResponse<GroupUpdateResponseData> update(
114 @PathVariable("id") String id,
115 @RequestBody GroupUpdateRequest updateRequest) {
117 if (id == null || id.length() == 0) {
118 throw new RuntimeException("exception.update.id.must.not.empty");
121 Group tmp = groupService.selectById(id);
123 throw new RuntimeException("exception.update.domain.not.exist");
126 Group group = updateRequest.getEntity();
129 group = EntityUtils.merge(tmp, group);
131 Group ret = groupService.update(group);
133 GroupUpdateResponseData data = GroupUpdateResponseData.build(ret);
135 return new DefaultApiResponse<GroupUpdateResponseData>(data);
138 @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
139 @ResponseStatus(value = HttpStatus.OK)
141 public DefaultApiResponse<GroupRemoveResponseData> delete(
142 @PathVariable("id") String id) {
144 if (id == null || id.length() == 0) {
145 throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
148 Group tmp = groupService.selectById(id);
150 throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
153 groupService.deleteById(id);
155 GroupRemoveResponseData data = GroupRemoveResponseData.build(tmp);
156 return new DefaultApiResponse<GroupRemoveResponseData>(data);
161 @RequestMapping(method = RequestMethod.GET, path = "/{id}/accounts", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
163 public DefaultApiResponse<GroupRelatedAccountsResponseData> groupAccounts(
164 @PathVariable("id") String id,
165 GroupRelatedAccountsRequest request) {
167 if (id == null || id.length() == 0) {
168 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
171 Group group = groupService.selectById(id);
174 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
177 if (request.getMapBean() == null) {
178 request.setMapBean(new HashMap<String, Object>());
180 request.getMapBean().put("groupId", group.getId());
182 Page<AccountGroup> page = groupService.selectGroupAccounts(
183 request.getPageIndex(),
184 request.getPageSize(),
185 request.getMapBean());
187 GroupRelatedAccountsResponseData data = GroupRelatedAccountsResponseData.of(request).build(page);
189 return new DefaultApiResponse<GroupRelatedAccountsResponseData>(data);
192 @RequestMapping(method = RequestMethod.POST, path = "/{id}/accounts", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
194 public DefaultApiResponse<GroupRelateAccountsResponseData> relateAccounts(
195 @PathVariable("id") String id,
196 @RequestBody GroupRelateAccountsRequest groupAccounts) {
198 if (id == null || id.length() == 0) {
199 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
202 Group group = groupService.selectById(id);
205 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
208 groupService.relateGroupAccounts(group, groupAccounts.getGroupAccounts());
210 GroupRelateAccountsResponseData data = GroupRelateAccountsResponseData.of("info.relate.success");
212 return new DefaultApiResponse<GroupRelateAccountsResponseData>(data);
216 @RequestMapping(method = RequestMethod.GET, path = "/{id}/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
218 public DefaultApiResponse<GroupRelatedRolesResponseData> groupRoles(
219 @PathVariable("id") String id,
220 GroupRelatedRolesRequest request) {
222 if (id == null || id.length() == 0) {
223 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
226 Group group = groupService.selectById(id);
229 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
232 if (request.getMapBean() == null) {
233 request.setMapBean(new HashMap<String, Object>());
235 request.getMapBean().put("groupId", group.getId());
237 Page<GroupRole> page = groupService.selectGroupRoles(
238 request.getPageIndex(),
239 request.getPageSize(),
240 request.getMapBean());
242 GroupRelatedRolesResponseData data = GroupRelatedRolesResponseData.of(request).build(page);
244 return new DefaultApiResponse<GroupRelatedRolesResponseData>(data);
247 @RequestMapping(method = RequestMethod.POST, path = "/{id}/roles", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
249 public DefaultApiResponse<GroupRelateRolesResponseData> relateRoles(
250 @PathVariable("id") String id,
251 @RequestBody GroupRelateRolesRequest groupRoles) {
253 if (id == null || id.length() == 0) {
254 throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
257 Group group = groupService.selectById(id);
260 throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
263 groupService.relateGroupRoles(group, groupRoles.getGroupRoles());
265 GroupRelateRolesResponseData data = GroupRelateRolesResponseData.of("info.relate.success");
267 return new DefaultApiResponse<GroupRelateRolesResponseData>(data);