MagicGroupController.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package org.ssssssss.magicapi.controller;
  2. import org.apache.commons.lang3.StringUtils;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.ssssssss.magicapi.config.MagicConfiguration;
  8. import org.ssssssss.magicapi.interceptor.RequestInterceptor;
  9. import org.ssssssss.magicapi.model.Group;
  10. import org.ssssssss.magicapi.model.JsonBean;
  11. import org.ssssssss.magicapi.model.TreeNode;
  12. import org.ssssssss.magicapi.provider.GroupServiceProvider;
  13. import org.ssssssss.magicapi.utils.IoUtils;
  14. import javax.servlet.http.HttpServletRequest;
  15. import java.util.List;
  16. import java.util.Objects;
  17. import java.util.stream.Collectors;
  18. public class MagicGroupController extends MagicController {
  19. private static Logger logger = LoggerFactory.getLogger(MagicGroupController.class);
  20. private GroupServiceProvider groupServiceProvider;
  21. public MagicGroupController(MagicConfiguration configuration) {
  22. super(configuration);
  23. this.groupServiceProvider = configuration.getGroupServiceProvider();
  24. }
  25. /**
  26. * 删除分组
  27. */
  28. @RequestMapping("/group/delete")
  29. @ResponseBody
  30. public JsonBean<Boolean> deleteGroup(String groupId, HttpServletRequest request) {
  31. if(configuration.getWorkspace().readonly()){
  32. return new JsonBean<>(0, "当前为只读模式,无法删除");
  33. }
  34. if (!allowVisit(request, RequestInterceptor.Authorization.DELETE)) {
  35. return new JsonBean<>(-10, "无权限执行删除方法");
  36. }
  37. try {
  38. boolean isApi = true;
  39. TreeNode<Group> treeNode = configuration.getGroupServiceProvider().apiGroupTree().findTreeNode(group -> group.getId().equals(groupId));
  40. if (treeNode == null) {
  41. treeNode = configuration.getGroupServiceProvider().functionGroupTree().findTreeNode(group -> group.getId().equals(groupId));
  42. if (treeNode == null) {
  43. return new JsonBean<>(0, "分组不存在!");
  44. }
  45. isApi = false;
  46. }
  47. List<String> children = treeNode.flat().stream().map(Group::getId).collect(Collectors.toList());
  48. boolean success;
  49. if (isApi) {
  50. // 删除接口
  51. if (success = configuration.getMagicApiService().deleteGroup(groupId, children)) {
  52. // 取消注册
  53. configuration.getMappingHandlerMapping().deleteGroup(children);
  54. children.forEach(configuration.getGroupServiceProvider()::delete);
  55. // 重新加载分组
  56. configuration.getMappingHandlerMapping().loadGroup();
  57. }
  58. } else {
  59. // 删除函数
  60. if (success = configuration.getFunctionServiceProvider().deleteGroup(groupId, children)) {
  61. // 取消注册
  62. configuration.getMagicFunctionManager().deleteGroup(children);
  63. children.forEach(configuration.getGroupServiceProvider()::delete);
  64. // 重新加载分组
  65. configuration.getMagicFunctionManager().loadGroup();
  66. }
  67. }
  68. return new JsonBean<>(success);
  69. } catch (Exception e) {
  70. logger.error("删除分组出错", e);
  71. return new JsonBean<>(-1, e.getMessage());
  72. }
  73. }
  74. /**
  75. * 修改分组
  76. */
  77. @RequestMapping("/group/update")
  78. @ResponseBody
  79. public synchronized JsonBean<Boolean> groupUpdate(Group group, HttpServletRequest request) {
  80. if(configuration.getWorkspace().readonly()){
  81. return new JsonBean<>(0, "当前为只读模式,无法修改");
  82. }
  83. if (!allowVisit(request, RequestInterceptor.Authorization.SAVE)) {
  84. return new JsonBean<>(-10, "无权限执行删除方法");
  85. }
  86. if (StringUtils.isBlank(group.getParentId())) {
  87. group.setParentId("0");
  88. }
  89. if (StringUtils.isBlank(group.getName())) {
  90. return new JsonBean<>(0, "分组名称不能为空");
  91. }
  92. if (!IoUtils.validateFileName(group.getName())) {
  93. return new JsonBean<>(0, "分组名称不能包含特殊字符,只允许中文、数字、字母以及_组合");
  94. }
  95. if (StringUtils.isBlank(group.getType())) {
  96. return new JsonBean<>(0, "分组类型不能为空");
  97. }
  98. if (groupServiceProvider.exists(group)) {
  99. return new JsonBean<>(-20, "修改分组后,名称会有冲突,请检查!");
  100. }
  101. try {
  102. boolean isApiGroup = "1".equals(group.getType());
  103. boolean isFunctionGroup = "2".equals(group.getType());
  104. if (isApiGroup && configuration.getMappingHandlerMapping().checkGroup(group)) {
  105. if (groupServiceProvider.update(group)) { // 如果数据库修改成功,则修改接口路径
  106. configuration.getMappingHandlerMapping().updateGroup(group);
  107. }else{
  108. return new JsonBean<>(0, "修改分组失败,同一组下分组名称不能重复且不能包含特殊字符。");
  109. }
  110. return new JsonBean<>(true);
  111. } else if (isFunctionGroup && configuration.getMagicFunctionManager().checkGroup(group)) {
  112. if (groupServiceProvider.update(group)) { // 如果数据库修改成功,则修改接口路径
  113. configuration.getMagicFunctionManager().updateGroup(group);
  114. }else{
  115. return new JsonBean<>(0, "修改分组失败,同一组下分组名称不能重复且不能包含特殊字符。");
  116. }
  117. return new JsonBean<>(true);
  118. }
  119. return new JsonBean<>(-20, "修改分组后,路径会有冲突,请检查!");
  120. } catch (Exception e) {
  121. logger.error("修改分组出错", e);
  122. return new JsonBean<>(-1, e.getMessage());
  123. }
  124. }
  125. /**
  126. * 查询所有分组
  127. */
  128. @RequestMapping("/group/list")
  129. @ResponseBody
  130. public JsonBean<List<Group>> groupList(String type) {
  131. try {
  132. return new JsonBean<>(groupServiceProvider.groupList(type));
  133. } catch (Exception e) {
  134. logger.error("查询分组列表失败", e);
  135. return new JsonBean<>(-1, e.getMessage());
  136. }
  137. }
  138. /**
  139. * 创建分组
  140. */
  141. @RequestMapping("/group/create")
  142. @ResponseBody
  143. public JsonBean<String> createGroup(Group group, HttpServletRequest request) {
  144. if(configuration.getWorkspace().readonly()){
  145. return new JsonBean<>(0, "当前为只读模式,无法创建");
  146. }
  147. if (!allowVisit(request, RequestInterceptor.Authorization.SAVE)) {
  148. return new JsonBean<>(-10, "无权限执行保存方法");
  149. }
  150. if (StringUtils.isBlank(group.getParentId())) {
  151. group.setParentId("0");
  152. }
  153. if (StringUtils.isBlank(group.getName())) {
  154. return new JsonBean<>(0, "分组名称不能为空");
  155. }
  156. if (!IoUtils.validateFileName(group.getName())) {
  157. return new JsonBean<>(0, "分组名称不能包含特殊字符,只允许中文、数字、字母以及_组合");
  158. }
  159. if (StringUtils.isBlank(group.getType())) {
  160. return new JsonBean<>(0, "分组类型不能为空");
  161. }
  162. try {
  163. if(groupServiceProvider.insert(group)){
  164. if (Objects.equals(group.getType(), "1")) {
  165. configuration.getMappingHandlerMapping().loadGroup();
  166. } else {
  167. configuration.getMagicFunctionManager().loadGroup();
  168. }
  169. return new JsonBean<>(group.getId());
  170. }else {
  171. return new JsonBean<>(-1,"保存分组失败,同一组下分组名称不能重复且不能包含特殊字符。");
  172. }
  173. } catch (Exception e) {
  174. logger.error("保存分组出错", e);
  175. return new JsonBean<>(-1, e.getMessage());
  176. }
  177. }
  178. }