dumingliang 1 week ago
parent
commit
cde532535b

+ 1 - 0
.idea/misc.xml

@@ -7,6 +7,7 @@
         <option value="$PROJECT_DIR$/pom.xml" />
       </list>
     </option>
+    <option name="workspaceImportForciblyTurnedOn" value="true" />
   </component>
   <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK" />
 </project>

+ 75 - 55
.idea/workspace.xml

@@ -8,23 +8,16 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="bdbed5d1-a156-40f3-aecd-82caf556ca52" name="更改" comment="更改">
-      <change beforePath="$PROJECT_DIR$/.idea/.gitignore" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/encodings.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/uiDesigner.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/domain/PtService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/domain/PtService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ApiAuthFilter.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ApiAuthFilter.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/AuthFilter.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/AuthFilter.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ResponseLogGlobalFilter.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ResponseLogGlobalFilter.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/mapper/PermissionMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/mapper/PermissionMapper.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/AuthService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/AuthService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/impl/AuthServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/impl/AuthServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/impl/PermissionServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/impl/PermissionServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/utils/TokenUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/utils/TokenUtils.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/application-dev.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-dev.yml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/mapper/PermissionMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/mapper/PermissionMapper.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/Application.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/Application.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/domain/GatewayRoutes.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/domain/GatewayRoutes.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ThirdPartyAuthFilter.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ThirdPartyAuthFilter.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/repository/JdbcRouteDefinitionRepository.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/repository/JdbcRouteDefinitionRepository.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/impl/GatewayRoutesServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/impl/GatewayRoutesServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/impl/PtServiceAlarmServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/service/impl/PtServiceAlarmServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/startup/ApplicationStartup.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/com/goldenwater/startup/ApplicationStartup.java" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -46,6 +39,9 @@
   <component name="KubernetesApiProvider">{
   &quot;isMigrated&quot;: true
 }</component>
+  <component name="MarkdownSettingsMigration">
+    <option name="stateVersion" value="1" />
+  </component>
   <component name="ProjectColorInfo">{
   &quot;associatedIndex&quot;: 3
 }</component>
@@ -57,37 +53,38 @@
     <option name="hideEmptyMiddlePackages" value="true" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent"><![CDATA[{
-  "keyToString": {
-    "Maven. [org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate].executor": "Run",
-    "Maven.sh-model-gateway [clean].executor": "Run",
-    "Maven.sh-model-gateway [install].executor": "Run",
-    "Maven.sh-model-gateway [package].executor": "Run",
-    "ModuleVcsDetector.initialDetectionPerformed": "true",
-    "RequestMappingsPanelOrder0": "0",
-    "RequestMappingsPanelOrder1": "1",
-    "RequestMappingsPanelWidth0": "75",
-    "RequestMappingsPanelWidth1": "75",
-    "RunOnceActivity.ShowReadmeOnStart": "true",
-    "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager": "true",
-    "RunOnceActivity.git.unshallow": "true",
-    "SHARE_PROJECT_CONFIGURATION_FILES": "true",
-    "Spring Boot.Application.executor": "Debug",
-    "git-widget-placeholder": "master",
-    "kotlin-language-version-configured": "true",
-    "last_opened_file_path": "D:/Workspaces/tba-gxpt-gateway/src",
-    "node.js.detected.package.eslint": "true",
-    "node.js.detected.package.tslint": "true",
-    "node.js.selected.package.eslint": "(autodetect)",
-    "node.js.selected.package.tslint": "(autodetect)",
-    "nodejs_package_manager_path": "npm",
-    "project.structure.last.edited": "Modules",
-    "project.structure.proportion": "0.15",
-    "project.structure.side.proportion": "0.2",
-    "settings.editor.selected.configurable": "MavenSettings",
-    "vue.rearranger.settings.migration": "true"
+  <component name="PropertiesComponent">{
+  &quot;keyToString&quot;: {
+    &quot;Maven. [org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate].executor&quot;: &quot;Run&quot;,
+    &quot;Maven.sh-model-gateway [clean].executor&quot;: &quot;Run&quot;,
+    &quot;Maven.sh-model-gateway [install].executor&quot;: &quot;Run&quot;,
+    &quot;Maven.sh-model-gateway [package].executor&quot;: &quot;Run&quot;,
+    &quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
+    &quot;RequestMappingsPanelOrder0&quot;: &quot;0&quot;,
+    &quot;RequestMappingsPanelOrder1&quot;: &quot;1&quot;,
+    &quot;RequestMappingsPanelWidth0&quot;: &quot;75&quot;,
+    &quot;RequestMappingsPanelWidth1&quot;: &quot;75&quot;,
+    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
+    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
+    &quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager&quot;: &quot;true&quot;,
+    &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
+    &quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
+    &quot;Spring Boot.Application.executor&quot;: &quot;Debug&quot;,
+    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
+    &quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
+    &quot;last_opened_file_path&quot;: &quot;D:/GWprojects/TBA_GXPT_GATEWAY&quot;,
+    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
+    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
+    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
+    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
+    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
+    &quot;project.structure.last.edited&quot;: &quot;Modules&quot;,
+    &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
+    &quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
+    &quot;settings.editor.selected.configurable&quot;: &quot;MavenSettings&quot;,
+    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
   }
-}]]></component>
+}</component>
   <component name="ReactorSettings">
     <option name="notificationShown" value="true" />
   </component>
@@ -109,7 +106,7 @@
   </component>
   <component name="RunManager">
     <configuration name="Application" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
-      <module name="sh-model-gateway" />
+      <module name="tba-gxpt-gateway" />
       <option name="SPRING_BOOT_MAIN_CLASS" value="cn.com.goldenwater.Application" />
       <extension name="coverage">
         <pattern>
@@ -127,14 +124,6 @@
       </list>
     </recent_temporary>
   </component>
-  <component name="SharedIndexes">
-    <attachedChunks>
-      <set>
-        <option value="bundled-jdk-9f38398b9061-39b83d9b5494-intellij.indexing.shared.core-IU-241.18034.62" />
-        <option value="bundled-js-predefined-1d06a55b98c1-0b3e54e931b4-JavaScript-IU-241.18034.62" />
-      </set>
-    </attachedChunks>
-  </component>
   <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
   <component name="TaskManager">
     <task active="true" id="Default" summary="默认任务">
@@ -214,6 +203,8 @@
       <workItem from="1767751120694" duration="354000" />
       <workItem from="1767751483688" duration="31000" />
       <workItem from="1767751525959" duration="393000" />
+      <workItem from="1768033250262" duration="599000" />
+      <workItem from="1768480967449" duration="7522000" />
     </task>
     <task id="LOCAL-00001" summary="更新">
       <option name="closed" value="true" />
@@ -328,6 +319,35 @@
     <option name="LAST_COMMIT_MESSAGE" value="修改token请求方法,解决数据中台访问报错问题" />
   </component>
   <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ApiAuthFilter.java</url>
+          <line>36</line>
+          <option name="timeStamp" value="1" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/AuthFilter.java</url>
+          <line>30</line>
+          <option name="timeStamp" value="2" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/RequestLogGlobalFilter.java</url>
+          <line>28</line>
+          <option name="timeStamp" value="3" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ResponseLogGlobalFilter.java</url>
+          <line>52</line>
+          <option name="timeStamp" value="4" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/cn/com/goldenwater/filter/ThirdPartyAuthFilter.java</url>
+          <line>38</line>
+          <option name="timeStamp" value="5" />
+        </line-breakpoint>
+      </breakpoints>
+    </breakpoint-manager>
     <watches-manager>
       <configuration name="SpringBootApplicationConfigurationType">
         <watch expression="              // 记录写操作审计日志&#10;                    if (isWriteOperation(method)) {&#10;                        auditService.logWriteOperation(thirdPartyId, path, method, request);&#10;                    }" />

+ 1 - 1
pom.xml

@@ -99,7 +99,7 @@
         <dependency>
             <groupId>com.dameng</groupId>
             <artifactId>DmJdbcDriver18</artifactId>
-            <version>8.1.3.140</version>
+            <version>8.1.1.193</version>
         </dependency>
 
         <!-- mybatis 代码生成器 -->

+ 0 - 8
src/main/java/cn/com/goldenwater/Application.java

@@ -3,9 +3,6 @@ package cn.com.goldenwater;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.gateway.route.InMemoryRouteDefinitionRepository;
-import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
-import org.springframework.context.annotation.Bean;
 
 /**
  * 启动程序
@@ -16,11 +13,6 @@ import org.springframework.context.annotation.Bean;
 @SpringBootApplication
 public class Application {
 
-    @Bean
-    public RouteDefinitionWriter routeDefinitionWriter() {
-        return new InMemoryRouteDefinitionRepository();
-    }
-
     public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
     }

+ 34 - 6
src/main/java/cn/com/goldenwater/domain/GatewayRoutes.java

@@ -5,6 +5,7 @@ import cn.com.goldenwater.utils.StringUtils;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.cloud.gateway.filter.FilterDefinition;
 import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
 
@@ -12,6 +13,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
+@Slf4j
 @Data
 @TableName
 public class GatewayRoutes implements Serializable {
@@ -45,12 +47,24 @@ public class GatewayRoutes implements Serializable {
 
     public List<PredicateDefinition> getPredicateDefinition() {
         if (this.predicates != null) {
-            String predicates;
-            if (!this.predicates.contains("/**")) {
-                predicates = this.predicates + "/**";
-            } else {
-                predicates = this.predicates;
+            // 首先检查 predicates 字段是否是 JSON 格式
+            String predicates = this.predicates.trim();
+            
+            // 如果是 JSON 格式,则解析成对象,否则视为直接的路径模式
+            if (predicates.startsWith("[") && predicates.endsWith("]")) {
+                try {
+                    // 使用 FastJSON2 直接解析,避免依赖 Jackson 库
+                    return com.alibaba.fastjson2.JSON.parseArray(predicates, PredicateDefinition.class);
+                } catch (Exception e) {
+                    log.error("解析路由谓词失败: " + predicates, e);
+                }
             }
+            
+            // 不是 JSON 格式,直接处理为 Path 谓词
+            if (!predicates.contains("/**")) {
+                predicates = predicates + "/**";
+            }
+            
             PredicateDefinition predicateDefinition = new PredicateDefinition();
             predicateDefinition.setName("Path");
             predicateDefinition.addArg("_genkey_0", predicates);
@@ -64,9 +78,23 @@ public class GatewayRoutes implements Serializable {
 
     public List<FilterDefinition> getFilterDefinition() {
         if (StringUtils.isNoneBlank(this.filters)) {
+            // 首先检查 filters 字段是否是 JSON 格式
+            String filters = this.filters.trim();
+            
+            // 如果是 JSON 格式,则解析成对象,否则视为直接的 StripPrefix 过滤器
+            if (filters.startsWith("[") && filters.endsWith("]")) {
+                try {
+                    // 使用 FastJSON2 直接解析,避免依赖 Jackson 库
+                    return com.alibaba.fastjson2.JSON.parseArray(filters, FilterDefinition.class);
+                } catch (Exception e) {
+                    log.error("解析路由过滤器失败: " + filters, e);
+                }
+            }
+            
+            // 不是 JSON 格式,直接处理为 StripPrefix 过滤器
             FilterDefinition filterDefinition = new FilterDefinition();
             filterDefinition.setName("StripPrefix");
-            filterDefinition.addArg("_genkey_0", this.filters);
+            filterDefinition.addArg("_genkey_0", filters);
             List<FilterDefinition> filterDefinitionList = new ArrayList<>();
             filterDefinitionList.add(filterDefinition);
             return filterDefinitionList;

+ 6 - 3
src/main/java/cn/com/goldenwater/filter/ThirdPartyAuthFilter.java

@@ -3,8 +3,9 @@ package cn.com.goldenwater.filter;
 import cn.com.goldenwater.core.api.BizDataApiRequest;
 import cn.com.goldenwater.core.redis.RedisCache;
 import cn.com.goldenwater.domain.GatewayRoutes;
-import cn.com.goldenwater.service.GatewayRoutesService;
+import cn.com.goldenwater.mapper.GatewayRoutesMapper;
 import cn.com.goldenwater.utils.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
@@ -30,14 +31,16 @@ public class ThirdPartyAuthFilter implements GlobalFilter, Ordered {
     private RedisCache redisCache;
 
     @Autowired
-    private GatewayRoutesService gatewayRoutesService;
+    private GatewayRoutesMapper gatewayRoutesMapper;
 
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         // 通过URL获取服务信息
         String requestUrl = exchange.getRequest().getURI().getPath();
         String gatewayUrl = "/" + requestUrl.split("/")[1];
-        GatewayRoutes gatewayRoutes = gatewayRoutesService.getByPredicates(gatewayUrl);
+        QueryWrapper<GatewayRoutes> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("predicates", gatewayUrl);
+        GatewayRoutes gatewayRoutes = gatewayRoutesMapper.selectOne(queryWrapper);
 
         // 需要权限
         if ("1".equals(gatewayRoutes.getAuth())) {

+ 28 - 4
src/main/java/cn/com/goldenwater/repository/JdbcRouteDefinitionRepository.java

@@ -11,6 +11,7 @@ import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
 import org.springframework.cloud.gateway.route.RouteDefinition;
 import org.springframework.cloud.gateway.route.RouteDefinitionRepository;
 import org.springframework.cloud.gateway.support.NotFoundException;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
@@ -25,15 +26,22 @@ import java.util.Map;
 public class JdbcRouteDefinitionRepository implements RouteDefinitionRepository {
 
     @Autowired
+    @Lazy
     private GatewayRoutesService gatewayRoutesService;
 
     @Override
     public Flux<RouteDefinition> getRouteDefinitions() {
         try {
+            log.info("开始从数据库加载路由...");
             QueryWrapper<GatewayRoutes> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("status", "0");
             List<GatewayRoutes> gatewayRoutesList = gatewayRoutesService.list(queryWrapper);
-            log.info("Loading {} routes from database", gatewayRoutesList.size());
+            log.info("从数据库加载到 {} 条路由", gatewayRoutesList.size());
+            
+            for (GatewayRoutes routes : gatewayRoutesList) {
+                log.info("路由详情:ID={}, URI={}, Predicates={}, Filters={}", 
+                        routes.getId(), routes.getUri(), routes.getPredicates(), routes.getFilters());
+            }
 
             Map<String, RouteDefinition> routes = new LinkedHashMap<>();
             for (GatewayRoutes gatewayRoutes : gatewayRoutesList) {
@@ -71,16 +79,32 @@ public class JdbcRouteDefinitionRepository implements RouteDefinitionRepository
     public Mono<Void> save(Mono<RouteDefinition> route) {
         return route.flatMap(r -> {
             try {
+                log.info("尝试保存路由定义: ID={}, URI={}, Predicates={}, Filters={}",
+                        r.getId(), r.getUri(), r.getPredicates(), r.getFilters());
+                
                 GatewayRoutes gatewayRoutes = new GatewayRoutes();
                 gatewayRoutes.setId(r.getId());
                 gatewayRoutes.setUri(r.getUri().toString());
                 gatewayRoutes.setPredicates(JsonUtils.objectToJson(r.getPredicates()));
                 gatewayRoutes.setFilters(JsonUtils.objectToJson(r.getFilters()));
-                gatewayRoutesService.save(gatewayRoutes);
+                gatewayRoutes.setStatus("0"); // 默认设置为启用状态
+                
+                // 检查路由是否已存在
+                if (gatewayRoutesService.getById(r.getId()) != null) {
+                    // 路由已存在,执行更新操作
+                    log.info("路由定义已存在,执行更新操作: ID={}", r.getId());
+                    gatewayRoutesService.updateById(gatewayRoutes);
+                } else {
+                    // 路由不存在,执行插入操作
+                    log.info("路由定义不存在,执行插入操作: ID={}", r.getId());
+                    gatewayRoutesService.save(gatewayRoutes);
+                }
+                
+                log.info("路由定义保存成功: ID={}", r.getId());
                 return Mono.empty();
             } catch (Exception e) {
-                log.error("RouteDefinition save error: " + r.getId());
-                return Mono.defer(() -> Mono.error(new NotFoundException("RouteDefinition save error: " + r.getId())));
+                log.error("RouteDefinition save error: " + r.getId(), e);
+                return Mono.defer(() -> Mono.error(e));
             }
         });
     }

+ 15 - 4
src/main/java/cn/com/goldenwater/service/impl/GatewayRoutesServiceImpl.java

@@ -13,6 +13,7 @@ import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
 import org.springframework.cloud.gateway.route.RouteDefinition;
 import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
 import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import reactor.core.publisher.Mono;
 
@@ -24,6 +25,7 @@ import java.util.List;
 public class GatewayRoutesServiceImpl extends ServiceImpl<GatewayRoutesMapper, GatewayRoutes> implements GatewayRoutesService {
 
     @Autowired
+    @Lazy
     private RouteDefinitionWriter routeDefinitionWriter;
 
     @Autowired
@@ -31,10 +33,15 @@ public class GatewayRoutesServiceImpl extends ServiceImpl<GatewayRoutesMapper, G
 
     public String loadRouteDefinition() {
         try {
-            List<GatewayRoutes> gatewayRoutesServiceAll = list();
+            log.info("开始调用 loadRouteDefinition 方法...");
+            QueryWrapper<GatewayRoutes> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("status", "0"); // 只加载启用状态的路由
+            List<GatewayRoutes> gatewayRoutesServiceAll = list(queryWrapper);
+            log.info("从数据库查询到 {} 条启用状态的路由记录", gatewayRoutesServiceAll == null ? 0 : gatewayRoutesServiceAll.size());
+            
             if (gatewayRoutesServiceAll == null || gatewayRoutesServiceAll.isEmpty()) {
-                log.warn("No routes defined");
-                return "none route defined";
+                log.warn("No routes defined or all routes are disabled");
+                return "none route defined or all routes are disabled";
             }
 
             for (GatewayRoutes gatewayRoutes : gatewayRoutesServiceAll) {
@@ -58,7 +65,11 @@ public class GatewayRoutesServiceImpl extends ServiceImpl<GatewayRoutesMapper, G
                     definition.setFilters(filterDefinitions);
                 }
 
-                routeDefinitionWriter.save(Mono.just(definition)).subscribe();
+                routeDefinitionWriter.save(Mono.just(definition)).subscribe(
+                        null,
+                        error -> log.error("Failed to save route definition: id={}, error={}", gatewayRoutes.getId(), error.getMessage()),
+                        () -> log.info("Route definition saved successfully: id={}", gatewayRoutes.getId())
+                );
             }
 
             this.publisher.publishEvent(new RefreshRoutesEvent(this));

+ 6 - 3
src/main/java/cn/com/goldenwater/service/impl/PtServiceAlarmServiceImpl.java

@@ -4,13 +4,14 @@ import cn.com.goldenwater.domain.GatewayRoutes;
 import cn.com.goldenwater.domain.MdModelInfo;
 import cn.com.goldenwater.domain.PtServiceAlarm;
 import cn.com.goldenwater.domain.PtServiceLog;
+import cn.com.goldenwater.mapper.GatewayRoutesMapper;
 import cn.com.goldenwater.mapper.PtServiceAlarmMapper;
-import cn.com.goldenwater.service.GatewayRoutesService;
 import cn.com.goldenwater.service.MdModelInfoService;
 import cn.com.goldenwater.service.PtServiceAlarmService;
 import cn.com.goldenwater.utils.JsonUtils;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONPath;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +31,7 @@ import java.util.Optional;
 public class PtServiceAlarmServiceImpl extends ServiceImpl<PtServiceAlarmMapper, PtServiceAlarm> implements PtServiceAlarmService {
 
     @Autowired
-    private GatewayRoutesService gatewayRoutesService;
+    private GatewayRoutesMapper gatewayRoutesMapper;
 
     @Autowired
     private MdModelInfoService mdModelInfoService;
@@ -61,7 +62,9 @@ public class PtServiceAlarmServiceImpl extends ServiceImpl<PtServiceAlarmMapper,
             ptAlarmMessage.setAlertContent("模型服务接口异常");
             save(ptAlarmMessage);
         } else {
-            GatewayRoutes gatewayRoutes = gatewayRoutesService.getByPredicates(gatewayUrl);
+            QueryWrapper<GatewayRoutes> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("predicates", gatewayUrl);
+            GatewayRoutes gatewayRoutes = gatewayRoutesMapper.selectOne(queryWrapper);
             JSONObject resultSuccessFormatData = gatewayRoutes.getResultSuccessFormatData();
             if (!JsonUtils.isValidJSON(responseContent)) {
                 return;

+ 5 - 1
src/main/java/cn/com/goldenwater/startup/ApplicationStartup.java

@@ -1,6 +1,7 @@
 package cn.com.goldenwater.startup;
 
 import cn.com.goldenwater.service.GatewayRoutesService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
@@ -11,6 +12,7 @@ import org.springframework.stereotype.Component;
  * 和ApplicationRunner接口的实例,
  * 如果存在,则会执行对应实现类中的run()方法,而且只执行一次
  */
+@Slf4j
 @Component
 public class ApplicationStartup implements ApplicationRunner {
 
@@ -19,6 +21,8 @@ public class ApplicationStartup implements ApplicationRunner {
 
     @Override
     public void run(ApplicationArguments args) {
-//        gatewayRoutesService.loadRouteDefinition();
+        log.info("ApplicationStartup 开始运行,准备加载路由...");
+        String result = gatewayRoutesService.loadRouteDefinition();
+        log.info("路由加载结果:{}", result);
     }
 }