9de87447a4af390ee24fc6cf9d966263732ebf82
[institute/sw-backend.git] /
1 package com.supwisdom.institute.backend.system.api.v1.admin;
2
3 import java.util.HashMap;
4
5 import io.swagger.annotations.Api;
6 import lombok.extern.slf4j.Slf4j;
7
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;
23
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;
46
47 @Api(value = "SystemAdminGroup", tags = { "SystemAdminGroup" }, description = "用户组的操作接口")
48 @Slf4j
49 @RestController
50 @RequestMapping("/v1/admin/groups")
51 public class AdminGroupController {
52
53   @Autowired
54   private GroupService groupService;
55
56   @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
57   @ResponseStatus(value = HttpStatus.OK)
58   @ResponseBody
59   public DefaultApiResponse<GroupQueryResponseData> query(GroupQueryRequest queryRequest) {
60
61     Page<Group> page = groupService.selectPageList(
62         queryRequest.isLoadAll(), 
63         queryRequest.getPageIndex(), 
64         queryRequest.getPageSize(),
65         queryRequest.getMapBean(),
66         queryRequest.getOrderBy());
67
68     GroupQueryResponseData data = GroupQueryResponseData.of(queryRequest).build(page);
69
70     return new DefaultApiResponse<GroupQueryResponseData>(data);
71   }
72   
73   @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
74   @ResponseStatus(value = HttpStatus.OK)
75   @ResponseBody
76   public DefaultApiResponse<GroupLoadResponseData> load(@PathVariable("id") String id) {
77
78     if (id == null || id.length() == 0) {
79       throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
80     }
81
82     Group group = groupService.selectById(id);
83
84     if (group == null) {
85       throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
86     }
87     
88     GroupLoadResponseData data = GroupLoadResponseData.of(group);
89
90     return new DefaultApiResponse<GroupLoadResponseData>(data);
91   }
92
93   @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
94   @ResponseStatus(value = HttpStatus.OK)
95   @ResponseBody
96   public DefaultApiResponse<GroupCreateResponseData> create(
97       @RequestBody GroupCreateRequest createRequest) {
98     
99     // FIXME: 验证数据有效性
100     
101     Group group = createRequest.getEntity();
102     
103     Group ret = groupService.insert(group);
104     
105     GroupCreateResponseData data = GroupCreateResponseData.build(ret);
106
107     return new DefaultApiResponse<GroupCreateResponseData>(data);
108   }
109   
110   @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
111   @ResponseStatus(value = HttpStatus.OK)
112   @ResponseBody
113   public DefaultApiResponse<GroupUpdateResponseData> update(
114       @PathVariable("id") String id, 
115       @RequestBody GroupUpdateRequest updateRequest) {
116
117     if (id == null || id.length() == 0) {
118       throw new RuntimeException("exception.update.id.must.not.empty");
119     }
120
121     Group tmp = groupService.selectById(id);
122     if (tmp == null) {
123       throw new RuntimeException("exception.update.domain.not.exist");
124     }
125
126     Group group = updateRequest.getEntity();
127     group.setId(id);
128
129     group = EntityUtils.merge(tmp, group);
130
131     Group ret = groupService.update(group);
132
133     GroupUpdateResponseData data = GroupUpdateResponseData.build(ret);
134     
135     return new DefaultApiResponse<GroupUpdateResponseData>(data);
136   }
137
138   @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
139   @ResponseStatus(value = HttpStatus.OK)
140   @ResponseBody
141   public DefaultApiResponse<GroupRemoveResponseData> delete(
142       @PathVariable("id") String id) {
143
144     if (id == null || id.length() == 0) {
145       throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
146     }
147
148     Group tmp = groupService.selectById(id);
149     if (tmp == null) {
150       throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
151     }
152
153     groupService.deleteById(id);
154
155     GroupRemoveResponseData data = GroupRemoveResponseData.build(tmp);
156     return new DefaultApiResponse<GroupRemoveResponseData>(data);
157   }
158
159   
160   
161   @RequestMapping(method = RequestMethod.GET, path = "/{id}/accounts", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
162   @ResponseBody
163   public DefaultApiResponse<GroupRelatedAccountsResponseData> groupAccounts(
164       @PathVariable("id") String id, 
165       GroupRelatedAccountsRequest request) {
166
167     if (id == null || id.length() == 0) {
168       throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
169     }
170
171     Group group = groupService.selectById(id);
172
173     if (group == null) {
174       throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
175     }
176
177     if (request.getMapBean() == null) {
178       request.setMapBean(new HashMap<String, Object>());
179     }
180     request.getMapBean().put("groupId", group.getId());
181
182     Page<AccountGroup> page = groupService.selectGroupAccounts(
183         request.getPageIndex(),
184         request.getPageSize(), 
185         request.getMapBean());
186
187     GroupRelatedAccountsResponseData data = GroupRelatedAccountsResponseData.of(request).build(page);
188
189     return new DefaultApiResponse<GroupRelatedAccountsResponseData>(data);
190   }
191
192   @RequestMapping(method = RequestMethod.POST, path = "/{id}/accounts", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
193   @ResponseBody
194   public DefaultApiResponse<GroupRelateAccountsResponseData> relateAccounts(
195       @PathVariable("id") String id, 
196       @RequestBody GroupRelateAccountsRequest groupAccounts) {
197
198     if (id == null || id.length() == 0) {
199       throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
200     }
201
202     Group group = groupService.selectById(id);
203
204     if (group == null) {
205       throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
206     }
207
208     groupService.relateGroupAccounts(group, groupAccounts.getGroupAccounts());
209
210     GroupRelateAccountsResponseData data = GroupRelateAccountsResponseData.of("info.relate.success");
211
212     return new DefaultApiResponse<GroupRelateAccountsResponseData>(data);
213   }
214
215   
216   @RequestMapping(method = RequestMethod.GET, path = "/{id}/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
217   @ResponseBody
218   public DefaultApiResponse<GroupRelatedRolesResponseData> groupRoles(
219       @PathVariable("id") String id, 
220       GroupRelatedRolesRequest request) {
221
222     if (id == null || id.length() == 0) {
223       throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
224     }
225
226     Group group = groupService.selectById(id);
227
228     if (group == null) {
229       throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
230     }
231
232     if (request.getMapBean() == null) {
233       request.setMapBean(new HashMap<String, Object>());
234     }
235     request.getMapBean().put("groupId", group.getId());
236
237     Page<GroupRole> page = groupService.selectGroupRoles(
238         request.getPageIndex(),
239         request.getPageSize(), 
240         request.getMapBean());
241
242     GroupRelatedRolesResponseData data = GroupRelatedRolesResponseData.of(request).build(page);
243
244     return new DefaultApiResponse<GroupRelatedRolesResponseData>(data);
245   }
246
247   @RequestMapping(method = RequestMethod.POST, path = "/{id}/roles", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
248   @ResponseBody
249   public DefaultApiResponse<GroupRelateRolesResponseData> relateRoles(
250       @PathVariable("id") String id, 
251       @RequestBody GroupRelateRolesRequest groupRoles) {
252
253     if (id == null || id.length() == 0) {
254       throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
255     }
256
257     Group group = groupService.selectById(id);
258
259     if (group == null) {
260       throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
261     }
262
263     groupService.relateGroupRoles(group, groupRoles.getGroupRoles());
264
265     GroupRelateRolesResponseData data = GroupRelateRolesResponseData.of("info.relate.success");
266
267     return new DefaultApiResponse<GroupRelateRolesResponseData>(data);
268   }
269
270 }