ShareController.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /*
  2. * <<
  3. * Davinci
  4. * ==
  5. * Copyright (C) 2016 - 2019 EDP
  6. * ==
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. * >>
  17. *
  18. */
  19. package edp.davinci.controller;
  20. import edp.core.annotation.AuthShare;
  21. import edp.core.annotation.CurrentUser;
  22. import edp.core.model.Paginate;
  23. import edp.davinci.common.controller.BaseController;
  24. import edp.davinci.core.common.Constants;
  25. import edp.davinci.core.common.ResultMap;
  26. import edp.davinci.dto.shareDto.ShareDashboard;
  27. import edp.davinci.dto.shareDto.ShareDisplay;
  28. import edp.davinci.dto.shareDto.ShareWidget;
  29. import edp.davinci.dto.userDto.UserLogin;
  30. import edp.davinci.dto.userDto.UserLoginResult;
  31. import edp.davinci.dto.viewDto.DistinctParam;
  32. import edp.davinci.dto.viewDto.ViewExecuteParam;
  33. import edp.davinci.model.User;
  34. import edp.davinci.service.ShareService;
  35. import edp.davinci.service.share.ShareOperation;
  36. import edp.davinci.service.share.ShareType;
  37. import io.swagger.annotations.Api;
  38. import io.swagger.annotations.ApiOperation;
  39. import io.swagger.annotations.ApiResponse;
  40. import io.swagger.annotations.ApiResponses;
  41. import lombok.extern.slf4j.Slf4j;
  42. import org.springframework.beans.factory.annotation.Autowired;
  43. import org.springframework.http.MediaType;
  44. import org.springframework.http.ResponseEntity;
  45. import org.springframework.validation.BindingResult;
  46. import org.springframework.web.bind.annotation.*;
  47. import springfox.documentation.annotations.ApiIgnore;
  48. import javax.servlet.http.HttpServletRequest;
  49. import javax.validation.Valid;
  50. import java.sql.SQLException;
  51. import java.util.List;
  52. import java.util.Map;
  53. @Api(value = "/share", tags = "share", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  54. @ApiResponses(@ApiResponse(code = 404, message = "resource not found"))
  55. @Slf4j
  56. @RestController
  57. @RequestMapping(value = Constants.BASE_API_PATH + "/share", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  58. public class ShareController extends BaseController {
  59. @Autowired
  60. private ShareService shareService;
  61. @ApiOperation(value = "share preflight")
  62. @AuthShare(type = ShareType.LOGIN)
  63. @GetMapping(value = "/preflight/{token}")
  64. public ResponseEntity preFlight(@PathVariable String token) {
  65. Map<String, Object> result = shareService.checkShareToken();
  66. return ResponseEntity.ok(new ResultMap().success().payload(result));
  67. }
  68. @ApiOperation(value = "get share permission")
  69. @AuthShare(type = ShareType.PERMISSION, operation = ShareOperation.PERMISSION)
  70. @GetMapping(value = "/permissions/{token}")
  71. public ResponseEntity permission(@PathVariable(name = "token") String token,
  72. @RequestParam(required = false) String password,
  73. @ApiIgnore @CurrentUser User user,
  74. HttpServletRequest request) {
  75. Map<String, Object> result = shareService.getSharePermissions();
  76. if (null == user || user.getId() == null) {
  77. return ResponseEntity.ok(new ResultMap().success().payload(result));
  78. } else {
  79. return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(result));
  80. }
  81. }
  82. /**
  83. * share页登录
  84. *
  85. * @param token
  86. * @param userLogin
  87. * @param bindingResult
  88. * @return
  89. */
  90. @ApiOperation(value = "share login")
  91. @AuthShare(type = ShareType.LOGIN)
  92. @PostMapping("/login/{token}")
  93. public ResponseEntity shareLogin(@PathVariable String token,
  94. @Valid @RequestBody UserLogin userLogin,
  95. @ApiIgnore BindingResult bindingResult) {
  96. if (bindingResult.hasErrors()) {
  97. ResultMap resultMap = new ResultMap().fail().message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
  98. return ResponseEntity.status(resultMap.getCode()).body(resultMap);
  99. }
  100. User user = shareService.shareLogin(userLogin);
  101. return ResponseEntity.ok(new ResultMap().success(tokenUtils.generateToken(user)).payload(new UserLoginResult(user)));
  102. }
  103. /**
  104. * share页获取dashboard信息
  105. *
  106. * @param token
  107. * @param user
  108. * @param request
  109. * @return
  110. */
  111. @ApiOperation(value = "get share dashboard")
  112. @AuthShare(type = ShareType.DASHBOARD, operation = ShareOperation.READ)
  113. @GetMapping("/dashboard/{token}")
  114. public ResponseEntity getShareDashboard(@PathVariable String token,
  115. @RequestParam(required = false) String password,
  116. @ApiIgnore @CurrentUser User user,
  117. HttpServletRequest request) {
  118. ShareDashboard shareDashboard = shareService.getShareDashboard(user);
  119. if (null == user || user.getId() == null) {
  120. return ResponseEntity.ok(new ResultMap().success().payload(shareDashboard));
  121. } else {
  122. return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(shareDashboard));
  123. }
  124. }
  125. /**
  126. * share页获取display信息
  127. *
  128. * @param token
  129. * @param user
  130. * @param request
  131. * @return
  132. */
  133. @ApiOperation(value = "get share display")
  134. @AuthShare(type = ShareType.DISPLAY, operation = ShareOperation.READ)
  135. @GetMapping("/display/{token}")
  136. public ResponseEntity getShareDisplay(@PathVariable String token,
  137. @RequestParam(required = false) String password,
  138. @ApiIgnore @CurrentUser User user,
  139. HttpServletRequest request) {
  140. ShareDisplay shareDisplay = shareService.getShareDisplay(user);
  141. if (null == user || user.getId() == null) {
  142. return ResponseEntity.ok(new ResultMap().success().payload(shareDisplay));
  143. } else {
  144. return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(shareDisplay));
  145. }
  146. }
  147. /**
  148. * share页获取widget信息
  149. *
  150. * @param token
  151. * @param user
  152. * @param request
  153. * @return
  154. */
  155. @ApiOperation(value = "get share widget")
  156. @AuthShare(type = ShareType.WIDGET, operation = ShareOperation.READ)
  157. @GetMapping("/widget/{token}")
  158. public ResponseEntity getShareWidget(@PathVariable String token,
  159. @RequestParam(required = false) String password,
  160. @ApiIgnore @CurrentUser User user,
  161. HttpServletRequest request) {
  162. ShareWidget shareWidget = shareService.getShareWidget(user);
  163. if (null == user || user.getId() == null) {
  164. return ResponseEntity.ok(new ResultMap().success().payload(shareWidget));
  165. } else {
  166. return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(shareWidget));
  167. }
  168. }
  169. /**
  170. * share页获取源数据
  171. *
  172. * @param token
  173. * @param executeParam
  174. * @param user
  175. * @param request
  176. * @return
  177. */
  178. @ApiOperation(value = "get share data")
  179. @AuthShare(type = ShareType.DATA, operation = ShareOperation.LOAD_DATA)
  180. @PostMapping(value = "/data/{token}", consumes = MediaType.APPLICATION_JSON_VALUE)
  181. public ResponseEntity getShareData(@PathVariable String token,
  182. @RequestParam(required = false) String password,
  183. @RequestBody(required = false) ViewExecuteParam executeParam,
  184. @ApiIgnore @CurrentUser User user,
  185. HttpServletRequest request) throws SQLException {
  186. Paginate<Map<String, Object>> shareData = shareService.getShareData(executeParam, user);
  187. if (null == user || user.getId() == null) {
  188. return ResponseEntity.ok(new ResultMap().success().payload(shareData));
  189. } else {
  190. return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(shareData));
  191. }
  192. }
  193. /**
  194. * share获取控制器的值
  195. *
  196. * @param token
  197. * @param param
  198. * @param bindingResult
  199. * @param user
  200. * @param request
  201. * @return
  202. */
  203. @ApiOperation(value = "get share data")
  204. @AuthShare(type = ShareType.DATA, operation = ShareOperation.LOAD_DISTINCT_DATA)
  205. @PostMapping(value = "/data/{token}/distinctvalue", consumes = MediaType.APPLICATION_JSON_VALUE)
  206. public ResponseEntity getDistinctValue(@PathVariable("token") String token,
  207. @Valid @RequestBody DistinctParam param,
  208. @ApiIgnore BindingResult bindingResult,
  209. @ApiIgnore @CurrentUser User user,
  210. HttpServletRequest request) {
  211. List<Map<String, Object>> resultList = shareService.getDistinctValue(param, user);
  212. if (null == user || user.getId() == null) {
  213. return ResponseEntity.ok(new ResultMap().success().payloads(resultList));
  214. } else {
  215. return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(resultList));
  216. }
  217. }
  218. }