Pārlūkot izejas kodu

:recycle: 重构代码。 动态路由删除逻辑修改。swagger加载路由修改

冷冷 6 gadi atpakaļ
vecāks
revīzija
082bdd68e0

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 86 - 31
doc/pigxx.sql


+ 12 - 13
pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/config/SwaggerProvider.java

@@ -18,8 +18,8 @@
 package com.pig4cloud.pigx.gateway.config;
 
 import lombok.AllArgsConstructor;
-import org.springframework.cloud.gateway.config.GatewayProperties;
-import org.springframework.cloud.gateway.route.RouteLocator;
+import org.springframework.cloud.gateway.route.RouteDefinition;
+import org.springframework.cloud.gateway.route.RouteDefinitionRepository;
 import org.springframework.cloud.gateway.support.NameUtils;
 import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Component;
@@ -38,22 +38,21 @@ import java.util.List;
 @AllArgsConstructor
 public class SwaggerProvider implements SwaggerResourcesProvider {
 	private static final String API_URI = "/v2/api-docs";
-	private final RouteLocator routeLocator;
-	private final GatewayProperties gatewayProperties;
+	private final RouteDefinitionRepository routeDefinitionRepository;
 
 
 	@Override
 	public List<SwaggerResource> get() {
 		List<SwaggerResource> resources = new ArrayList<>();
-		List<String> routes = new ArrayList<>();
-		routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
-		gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId()))
-			.forEach(routeDefinition -> routeDefinition.getPredicates().stream()
-				.filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName()))
-				.filter(predicateDefinition -> !"pigx-auth".equalsIgnoreCase(routeDefinition.getId()))
-				.forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),
-					predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")
-						.replace("/**", API_URI)))));
+		List<RouteDefinition> routes = new ArrayList<>();
+		routeDefinitionRepository.getRouteDefinitions().subscribe(route -> routes.add(route));
+		routes.forEach(routeDefinition -> routeDefinition.getPredicates().stream()
+			.filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName()))
+			.filter(predicateDefinition -> !"pigx-auth".equalsIgnoreCase(routeDefinition.getId()))
+			.forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),
+				predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")
+					.replace("/**", API_URI)))));
+
 		return resources;
 	}
 

+ 7 - 3
pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRouteConf.java

@@ -19,8 +19,10 @@ package com.pig4cloud.pigx.admin.api.entity;
 
 import com.baomidou.mybatisplus.activerecord.Model;
 import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableLogic;
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.enums.IdType;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -38,11 +40,12 @@ import java.time.LocalDateTime;
 @EqualsAndHashCode(callSuper = true)
 public class SysRouteConf extends Model<SysRouteConf> {
 	private static final long serialVersionUID = 1L;
-
+	@JsonIgnore
+	@TableId(type = IdType.AUTO)
+	private Integer id;
 	/**
 	 * 路由ID
 	 */
-	@TableId(type = IdType.INPUT)
 	private String routeId;
 	/**
 	 * 断言
@@ -69,8 +72,9 @@ public class SysRouteConf extends Model<SysRouteConf> {
 	 */
 	private LocalDateTime updateTime;
 	/**
-	 * 删除标
+	 * 删除标识(0-正常,1-删除)
 	 */
+	@TableLogic
 	private String delFlag;
 
 	/**

+ 11 - 4
pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysRouteConfServiceImpl.java

@@ -41,6 +41,7 @@ import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author lengleng
@@ -126,16 +127,22 @@ public class SysRouteConfServiceImpl extends ServiceImpl<SysRouteConfMapper, Sys
 			routeDefinitionVoList.add(vo);
 		});
 
-		// 更新或保存routes,保存到DB
-		routeDefinitionVoList.forEach(vo -> {
+		// 逻辑删除全部
+		SysRouteConf condition = new SysRouteConf();
+		condition.setDelFlag(CommonConstant.STATUS_NORMAL);
+		this.delete(new EntityWrapper<>(condition));
+
+		//插入生效路由
+		List<SysRouteConf> routeConfList = routeDefinitionVoList.stream().map(vo -> {
 			SysRouteConf routeConf = new SysRouteConf();
 			routeConf.setRouteId(vo.getId());
 			routeConf.setFilters(JSONUtil.toJsonStr(vo.getFilters()));
 			routeConf.setPredicates(JSONUtil.toJsonStr(vo.getPredicates()));
 			routeConf.setOrder(vo.getOrder());
 			routeConf.setUri(vo.getUri().toString());
-			this.insertOrUpdate(routeConf);
-		});
+			return routeConf;
+		}).collect(Collectors.toList());
+		this.insertBatch(routeConfList);
 		log.debug("更新网关路由结束 ");
 
 		this.applicationEventPublisher.publishEvent(new RefreshRoutesEvent(this));