|
@@ -0,0 +1,163 @@
|
|
|
+package com.migao.config.listener;
|
|
|
+
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.migao.config.properties.SystemProperties;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import okhttp3.*;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.boot.ApplicationArguments;
|
|
|
+import org.springframework.boot.ApplicationRunner;
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+
|
|
|
+//@Configuration
|
|
|
+@Slf4j
|
|
|
+public class PermissionInsertListener implements ApplicationRunner {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SystemProperties systemProperties;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void run(ApplicationArguments args) {
|
|
|
+ String url = "http://localhost:30000/v2/api-docs?";
|
|
|
+ //getSwaggerAllMethod(StringUtils.join(url, "group=admin"));
|
|
|
+ //getSwaggerAllMethod(StringUtils.join(url, "group=common"));
|
|
|
+ //getSwaggerAllMethod(StringUtils.join(url, "group=mobile"));
|
|
|
+ //getParentPermission();
|
|
|
+ }
|
|
|
+
|
|
|
+ /*public void getSwaggerAllMethod(String url) {
|
|
|
+ try {
|
|
|
+ //查询所有角色
|
|
|
+ List<Role> roles = roleMapper.selectList(Wrappers.emptyWrapper());
|
|
|
+ OkHttpClient okHttpClient = new OkHttpClient();
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url(url)
|
|
|
+ .build();
|
|
|
+ Call call = okHttpClient.newCall(request);
|
|
|
+ String swaggerJson = "{}";
|
|
|
+ try {
|
|
|
+ Response response = call.execute();
|
|
|
+ ResponseBody body = response.body();
|
|
|
+ if (body != null) {
|
|
|
+ swaggerJson = body.string();
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ JSONObject swaggerMap = JSONObject.parseObject(swaggerJson);
|
|
|
+ // 所有方法
|
|
|
+ if (swaggerMap == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JSONObject pathsMap = swaggerMap.getJSONObject("paths");
|
|
|
+ if (pathsMap == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ pathsMap.forEach((method, value) -> {
|
|
|
+ String uri = StringUtils.join(method, "**");
|
|
|
+ Integer count = permissionMapper.selectCount(
|
|
|
+ Wrappers.<Permission>lambdaQuery().eq(Permission::getUrl, uri)
|
|
|
+ );
|
|
|
+ Permission permission = Permission.builder().type(PermissionType.URL).name("").description("").url(uri).build();
|
|
|
+ // 所有請求方式GET、POST等
|
|
|
+ JSONObject methodMode = pathsMap.getJSONObject(method);
|
|
|
+ if (methodMode == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ methodMode.entrySet().stream()
|
|
|
+ .filter(model -> "get".equals(model.getKey()) || "post".equals(model.getKey()))
|
|
|
+ .forEach(m -> {
|
|
|
+ JSONObject methodBody = methodMode.getJSONObject(m.getKey());
|
|
|
+ if (methodBody != null) {
|
|
|
+ if (methodBody.containsKey("tags")) {
|
|
|
+ JSONArray tags = methodBody.getJSONArray("tags");
|
|
|
+ tags.forEach(
|
|
|
+ tag -> {
|
|
|
+ permission.setDescription(StringUtils.join(permission.getDescription(), tag.toString().replaceAll("\\d|\\.", "")));
|
|
|
+ permission.setModule(tag.toString().replaceAll("\\d|\\.", ""));
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ String methodName = methodBody.getString("summary");
|
|
|
+ permission.setDescription(StringUtils.join(permission.getDescription(), "-", methodName));
|
|
|
+ permission.setName(methodName);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (count == 0) {
|
|
|
+ permissionMapper.insert(permission);
|
|
|
+ roles.forEach(
|
|
|
+ role -> {
|
|
|
+ userMapper.insertRolePermission(role.getId(), permission.getId());
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ log.error("通过Swagger解析所有接口异常", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void getParentPermission() {
|
|
|
+ List<Permission> permissionList = permissionMapper.selectList(Wrappers.emptyWrapper());
|
|
|
+ List<Permission> parents = permissionList.stream().map(
|
|
|
+ Permission::getModule
|
|
|
+ ).distinct().map(
|
|
|
+ moduleName -> {
|
|
|
+ Permission newPermission = Permission
|
|
|
+ .builder()
|
|
|
+ .module(moduleName)
|
|
|
+ .description(StringUtils.join(moduleName, "父节点"))
|
|
|
+ .parentId(0L)
|
|
|
+ .build();
|
|
|
+ return newPermission;
|
|
|
+ }
|
|
|
+ ).collect(Collectors.toList());
|
|
|
+
|
|
|
+ LambdaQueryWrapper<Permission> wrapper = Wrappers.lambdaQuery();
|
|
|
+ wrapper.eq(Permission::getParentId, 0L);
|
|
|
+ wrapper.isNull(Permission::getUrl);
|
|
|
+ wrapper.eq(Permission::getType, PermissionType.URL);
|
|
|
+ List<Permission> permissions = permissionMapper.selectList(wrapper);
|
|
|
+
|
|
|
+ parents.forEach(
|
|
|
+ permission -> {
|
|
|
+ if (permissions.size() == 0 || permissions.stream().noneMatch(i -> i.getModule().equals(permission.getModule()))) {
|
|
|
+ permissionMapper.insert(permission);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ List<Permission> nowPermissions = permissionMapper.selectList(wrapper);
|
|
|
+
|
|
|
+ nowPermissions.forEach(
|
|
|
+ permission -> {
|
|
|
+ LambdaQueryWrapper<Permission> queryWrapper = Wrappers.lambdaQuery(Permission.class);
|
|
|
+ queryWrapper.eq(Permission::getModule, permission.getModule());
|
|
|
+ queryWrapper.eq(Permission::getType, PermissionType.URL);
|
|
|
+ queryWrapper.isNull(Permission::getParentId);
|
|
|
+ queryWrapper.isNotNull(Permission::getUrl);
|
|
|
+ permissionMapper.selectList(queryWrapper).forEach(
|
|
|
+ oldPermission -> {
|
|
|
+ oldPermission.setParentId(permission.getParentId());
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ }*/
|
|
|
+
|
|
|
+}
|