554726c42fb345b83313eadf3bf76774dfbb79e2
[institute/sw-backend.git] /
1 package com.supwisdom.institute.backend.base.api.v1.controller.admin;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import io.swagger.annotations.Api;
9 import lombok.extern.slf4j.Slf4j;
10
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.data.domain.Page;
13 import org.springframework.http.HttpStatus;
14 import org.springframework.util.MimeTypeUtils;
15 import org.springframework.web.bind.annotation.DeleteMapping;
16 import org.springframework.web.bind.annotation.GetMapping;
17 import org.springframework.web.bind.annotation.PathVariable;
18 import org.springframework.web.bind.annotation.PostMapping;
19 import org.springframework.web.bind.annotation.PutMapping;
20 import org.springframework.web.bind.annotation.RequestBody;
21 import org.springframework.web.bind.annotation.RequestMapping;
22 import org.springframework.web.bind.annotation.RequestParam;
23 import org.springframework.web.bind.annotation.ResponseBody;
24 import org.springframework.web.bind.annotation.ResponseStatus;
25 import org.springframework.web.bind.annotation.RestController;
26
27 import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionCreateRequest;
28 import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionDeleteBatchRequest;
29 import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionQueryRequest;
30 import com.supwisdom.institute.backend.base.api.v1.vo.admin.request.PermissionUpdateRequest;
31 import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionCreateResponseData;
32 import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionDeleteBatchResponseData;
33 import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionLoadResponseData;
34 import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionQueryResponseData;
35 import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionRemoveResponseData;
36 import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionTreeResponseData;
37 import com.supwisdom.institute.backend.base.api.v1.vo.admin.response.PermissionUpdateResponseData;
38 import com.supwisdom.institute.backend.base.domain.entity.Permission;
39 import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
40 import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
41 import com.supwisdom.institute.backend.base.domain.service.PermissionService;
42 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
43 import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
44
45 @Api(value = "BaseAdminMenu", tags = { "BaseAdminMenu" }, description = "菜单的操作接口")
46 @Slf4j
47 @RestController
48 @RequestMapping("/v1/admin/menus")
49 public class AdminMenuController {
50
51   @Autowired
52   private PermissionService permissionService;
53
54   @GetMapping(produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
55   @ResponseStatus(value = HttpStatus.OK)
56   @ResponseBody
57   public DefaultApiResponse<PermissionQueryResponseData> query(PermissionQueryRequest queryRequest) {
58     
59     if (queryRequest.getMapBean() == null) {
60       queryRequest.setMapBean(new HashMap<String, Object>());
61     }
62     queryRequest.getMapBean().put("type", Permission.TYPE_MENU);
63
64     Page<Permission> page = permissionService.selectPageList(
65         queryRequest.isLoadAll(), 
66         queryRequest.getPageIndex(), 
67         queryRequest.getPageSize(),
68         queryRequest.getMapBean(),
69         queryRequest.getOrderBy());
70
71     PermissionQueryResponseData data = PermissionQueryResponseData.of(queryRequest).build(page);
72
73     return new DefaultApiResponse<PermissionQueryResponseData>(data);
74   }
75   
76   @GetMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
77   @ResponseStatus(value = HttpStatus.OK)
78   @ResponseBody
79   public DefaultApiResponse<PermissionLoadResponseData> load(@PathVariable("id") String id) {
80
81     if (id == null || id.length() == 0) {
82       throw new RuntimeException("exception.get.id.must.not.empty"); // FIXME: RestException
83     }
84
85     Permission permission = permissionService.selectById(id);
86
87     if (permission == null) {
88       throw new RuntimeException("exception.get.domain.not.exist"); // FIXME: RestException
89     }
90     if (!Permission.TYPE_MENU.equals(permission.getType())) {
91       throw new RuntimeException("exception.get.domain.type.error");
92     }
93     
94     List<String> resourceIds = new ArrayList<>();
95     
96     Map<String, Object> mapBean = new HashMap<>();
97     mapBean.put("permissionId", id);
98     Page<PermissionResource> permissionResources = permissionService.selectPermissionResources(true, 0, 0, mapBean);
99     for (PermissionResource permissionResource : permissionResources) {
100       resourceIds.add(permissionResource.getResourceId());
101     }
102     
103     PermissionLoadResponseData data = PermissionLoadResponseData.of(permission, resourceIds);
104
105     return new DefaultApiResponse<PermissionLoadResponseData>(data);
106   }
107
108   @PostMapping(consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
109   @ResponseStatus(value = HttpStatus.OK)
110   @ResponseBody
111   public DefaultApiResponse<PermissionCreateResponseData> create(
112       @RequestBody PermissionCreateRequest createRequest) {
113     
114     // FIXME: 验证数据有效性
115     
116     Permission permission = createRequest.getEntity();
117     permission.setType(Permission.TYPE_MENU);
118     
119     Permission ret = permissionService.insert(permission);
120     
121     PermissionCreateResponseData data = PermissionCreateResponseData.build(ret);
122
123     return new DefaultApiResponse<PermissionCreateResponseData>(data);
124   }
125   
126   @PutMapping(path = "/{id}", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
127   @ResponseStatus(value = HttpStatus.OK)
128   @ResponseBody
129   public DefaultApiResponse<PermissionUpdateResponseData> update(
130       @PathVariable("id") String id, 
131       @RequestBody PermissionUpdateRequest updateRequest) {
132
133     if (id == null || id.length() == 0) {
134       throw new RuntimeException("exception.update.id.must.not.empty");
135     }
136
137     Permission tmp = permissionService.selectById(id);
138     if (tmp == null) {
139       throw new RuntimeException("exception.update.domain.not.exist");
140     }
141     if (!Permission.TYPE_MENU.equals(tmp.getType())) {
142       throw new RuntimeException("exception.update.domain.type.error");
143     }
144
145     Permission permission = updateRequest.getEntity();
146     permission.setId(id);
147
148     permission = EntityUtils.merge(tmp, permission);
149
150     Permission ret = permissionService.update(permission);
151
152     PermissionUpdateResponseData data = PermissionUpdateResponseData.build(ret);
153     
154     return new DefaultApiResponse<PermissionUpdateResponseData>(data);
155   }
156
157   @DeleteMapping(path = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
158   @ResponseStatus(value = HttpStatus.OK)
159   @ResponseBody
160   public DefaultApiResponse<PermissionRemoveResponseData> delete(
161       @PathVariable("id") String id) {
162
163     if (id == null || id.length() == 0) {
164       throw new RuntimeException("exception.delete.id.must.not.empty"); // FIXME: RestException
165     }
166
167     Permission tmp = permissionService.selectById(id);
168     if (tmp == null) {
169       throw new RuntimeException("exception.delete.domain.not.exist"); // FIXME: RestException
170     }
171     if (!Permission.TYPE_MENU.equals(tmp.getType())) {
172       throw new RuntimeException("exception.delete.domain.type.error");
173     }
174
175     permissionService.deleteById(id);
176
177     PermissionRemoveResponseData data = PermissionRemoveResponseData.build(tmp);
178     return new DefaultApiResponse<PermissionRemoveResponseData>(data);
179   }
180
181
182   @DeleteMapping(path = "/batch", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
183   @ResponseStatus(value = HttpStatus.OK)
184   @ResponseBody
185   public DefaultApiResponse<PermissionDeleteBatchResponseData> deleteBatch(
186       @RequestBody PermissionDeleteBatchRequest deleteBatchRequest) {
187     
188     List<String> ids = deleteBatchRequest.getIds();
189     
190     permissionService.deleteBatch(ids);
191     
192     PermissionDeleteBatchResponseData data = PermissionDeleteBatchResponseData.build(ids);
193     return new DefaultApiResponse<PermissionDeleteBatchResponseData>(data);
194   }
195   
196   @GetMapping(path = "/tree", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
197   @ResponseStatus(value = HttpStatus.OK)
198   @ResponseBody
199   public DefaultApiResponse<PermissionTreeResponseData> tree(
200       @RequestParam(name = "applicationId", required = false) String applicationId) {
201     
202     PermissionTreeNode tree = permissionService.selectPermissionTree(applicationId, Permission.TYPE_MENU);
203
204     PermissionTreeResponseData data = PermissionTreeResponseData.of(tree);
205
206     return new DefaultApiResponse<PermissionTreeResponseData>(data);
207   }
208   
209 }