Browse Source

一些调整和数据源改成DM

Lin Qilong 4 hours ago
parent
commit
3d4c49d06f

+ 1 - 1
.idea/misc.xml

@@ -8,7 +8,7 @@
       </list>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="openjdk-1.8.0.191" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>

+ 7 - 0
pom.xml

@@ -95,6 +95,13 @@
             <version>8.0.33</version>
         </dependency>
 
+        <!-- DM8驱动包 -->
+        <dependency>
+            <groupId>com.dameng</groupId>
+            <artifactId>DmJdbcDriver18</artifactId>
+            <version>8.1.3.140</version>
+        </dependency>
+
         <!-- mybatis 代码生成器 -->
         <dependency>
             <groupId>com.baomidou</groupId>

+ 0 - 15
src/main/java/cn/com/goldenwater/domain/MdModelInfo.java

@@ -310,20 +310,5 @@ public class MdModelInfo {
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createby;
 
-    /**
-     * 注册人员
-     */
-    private String regUser;
-    /**
-     * 顺序
-     */
-    private Integer sort;
-
-    /**
-     * 审核状态
-     * 审核状态 0=待审核;1=已审核;2 = 驳回
-     */
-    private String audit;
-
 }
 

+ 2 - 1
src/main/java/cn/com/goldenwater/domain/PtServiceAlarm.java

@@ -1,5 +1,6 @@
 package cn.com.goldenwater.domain;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.AllArgsConstructor;
@@ -21,7 +22,7 @@ import java.util.Date;
 @TableName
 public class PtServiceAlarm implements Serializable {
 
-    @TableId
+    @TableId(type = IdType.AUTO)
     private Long alertId;
     private String mdid;
     private String modelName;

+ 5 - 6
src/main/java/cn/com/goldenwater/filter/ResponseLogGlobalFilter.java

@@ -2,7 +2,6 @@ package cn.com.goldenwater.filter;
 
 import cn.com.goldenwater.domain.PtApp;
 import cn.com.goldenwater.domain.PtService;
-import cn.com.goldenwater.domain.PtServiceAlarm;
 import cn.com.goldenwater.domain.PtServiceLog;
 import cn.com.goldenwater.service.PtAppService;
 import cn.com.goldenwater.service.PtServiceAlarmService;
@@ -23,7 +22,6 @@ import org.springframework.core.io.buffer.DataBuffer;
 import org.springframework.core.io.buffer.DataBufferFactory;
 import org.springframework.core.io.buffer.DataBufferUtils;
 import org.springframework.core.io.buffer.DefaultDataBufferFactory;
-import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.server.reactive.ServerHttpResponse;
 import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
@@ -80,7 +78,9 @@ public class ResponseLogGlobalFilter implements GlobalFilter, Ordered {
                             MediaType contentType = originalResponse.getHeaders().getContentType();
                             if (!MediaType.APPLICATION_JSON.isCompatibleWith(contentType)) {
                                 // 即使不是JSON也记录日志
-                                saveServiceLog(exchange, new String(content), System.currentTimeMillis() - startTime, originalResponse.getStatusCode().value());
+                                String joinData = new String(content);
+                                log.info("--返回信息:{}", joinData);
+                                saveServiceLog(exchange, joinData, System.currentTimeMillis() - startTime, originalResponse.getStatusCode().value());
                                 return bufferFactory.wrap(content);
                             }
 
@@ -91,10 +91,9 @@ public class ResponseLogGlobalFilter implements GlobalFilter, Ordered {
                             rspArgs.add(originalResponse.getStatusCode().value());
                             rspArgs.add(exchange.getRequest().getURI());
                             rspArgs.add(result);
-
+                            log.info("--返回信息:{}", result);
                             // 保存服务日志
                             saveServiceLog(exchange, result, System.currentTimeMillis() - startTime, originalResponse.getStatusCode().value());
-
                             getDelegate().getHeaders().setContentLength(result.getBytes().length);
                             return bufferFactory.wrap(result.getBytes());
                         }));
@@ -104,7 +103,7 @@ public class ResponseLogGlobalFilter implements GlobalFilter, Ordered {
                             byte[] content = new byte[dataBuffer.readableByteCount()];
                             dataBuffer.read(content);
                             String responseStr = new String(content);
-
+                            log.info("--返回信息:{}", responseStr);
                             // 记录日志
                             saveServiceLog(exchange, responseStr, System.currentTimeMillis() - startTime, originalResponse.getStatusCode().value());
                         }));

+ 14 - 2
src/main/java/cn/com/goldenwater/service/impl/PtServiceAlarmServiceImpl.java

@@ -63,10 +63,22 @@ public class PtServiceAlarmServiceImpl extends ServiceImpl<PtServiceAlarmMapper,
         } else {
             GatewayRoutes gatewayRoutes = gatewayRoutesService.getByPredicates(gatewayUrl);
             JSONObject resultSuccessFormatData = gatewayRoutes.getResultSuccessFormatData();
+            if (!JsonUtils.isValidJSON(responseContent)) {
+                return;
+            }
 
             JSONObject responseContentObj = JsonUtils.jsonToPojo(responseContent, JSONObject.class);
-            Object statusCode = JSONPath.eval(responseContentObj, resultSuccessFormatData.getString("field"));
-            if (!resultSuccessFormatData.getString("code").equals(String.valueOf(statusCode))) {
+            if (responseContentObj == null) {
+                return;
+            }
+            Object statusCode = Optional.ofNullable(resultSuccessFormatData)
+                    .map(obj -> obj.getString("field"))
+                    .map(obj -> JSONPath.eval(responseContentObj, obj))
+                    .orElse(null);
+            if (statusCode == null) {
+                return;
+            }
+            if (!String.valueOf(statusCode).equals(resultSuccessFormatData.getString("code"))) {
                 ptAlarmMessage.setAlertType("3");
                 ptAlarmMessage.setAlertContent("模型服务接口异常");
                 save(ptAlarmMessage);

+ 11 - 0
src/main/java/cn/com/goldenwater/utils/JsonUtils.java

@@ -1,5 +1,7 @@
 package cn.com.goldenwater.utils;
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONException;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -71,4 +73,13 @@ public class JsonUtils {
         return null;
     }
 
+    public static boolean isValidJSON(String jsonString) {
+        try {
+            JSON.parse(jsonString);
+            return true;
+        } catch (JSONException e) {
+            return false;
+        }
+    }
+
 }

+ 63 - 12
src/main/java/cn/com/goldenwater/utils/OkHttpUtils.java

@@ -1,6 +1,5 @@
 package cn.com.goldenwater.utils;
 
-import cn.com.goldenwater.exception.OkHttpException;
 import okhttp3.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -8,6 +7,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
@@ -198,21 +198,67 @@ public class OkHttpUtils {
     }
 
     private static String httpCall(Request request) {
-        Response response = null;
-        Call call = null;
-        try {
-            call = client.newCall(request);
-            response = call.execute();
-            ResponseBody responseBody = response.body();
-            return responseBody == null ? "" : responseBody.string();
+        try (Response response = client.newCall(request).execute()) {
+            if (!response.isSuccessful()) {
+                throw new IOException("Unexpected code: " + response.code());
+            }
+
+            ResponseBody body = response.body();
+            if (body == null) {
+                return null;
+            }
+
+            // 方法1:优先使用服务器声明的编码
+            String charset = "UTF-8";
+            MediaType contentType = body.contentType();
+            if (contentType != null && contentType.charset() != null) {
+                charset = contentType.charset().name();
+            }
+
+            byte[] responseBytes = body.bytes();
+            String responseString = new String(responseBytes, charset);
+
+            // 方法2:如果仍有乱码,尝试自动检测
+            if (hasGarbledText(responseString)) {
+                responseString = autoDetectEncoding(responseBytes);
+            }
+
+            return responseString;
+
         } catch (IOException e) {
-            logger.error(e.getMessage(), e);
-            throw new OkHttpException("request error", e);
-        } finally {
-            Optional.ofNullable(call).ifPresent(Call::cancel);
+            e.printStackTrace();
+            return null;
         }
     }
 
+    private static boolean hasGarbledText(String text) {
+        // 检查是否包含乱码特征(如大量问号或乱码符号)
+        return text.matches(".*[����]+.*") ||
+                (text.length() > 10 && text.chars().filter(ch -> ch == '?').count() > text.length() / 5);
+    }
+
+    private static String autoDetectEncoding(byte[] bytes) {
+        String[] encodings = {"UTF-8", "GBK", "GB2312", "ISO-8859-1"};
+
+        for (String encoding : encodings) {
+            try {
+                String result = new String(bytes, encoding);
+                if (!hasGarbledText(result) && containsValidChinese(result)) {
+                    return result;
+                }
+            } catch (Exception e) {
+                // 继续尝试下一种编码
+            }
+        }
+
+        // 默认回退到 UTF-8
+        return new String(bytes, StandardCharsets.UTF_8);
+    }
+
+    private static boolean containsValidChinese(String str) {
+        return str.matches(".*[\\u4e00-\\u9fa5]+.*");
+    }
+
     /**
      * 把request转为map
      *
@@ -310,7 +356,12 @@ public class OkHttpUtils {
             for (Map.Entry<String, Object> entry : headers.entrySet()) {
                 requestBuilder.addHeader(entry.getKey(), String.valueOf(entry.getValue()));
             }
+        } else {
+            headers = new HashMap<>();
         }
+        // 明确要求 UTF-8 编码的响应
+        headers.putIfAbsent("Accept-Charset", "UTF-8");
+        headers.putIfAbsent("Accept", "application/json;charset=UTF-8");
 
         // 添加Cookies
         if (cookies != null) {

+ 22 - 4
src/main/resources/application.yml

@@ -1,3 +1,21 @@
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 8081
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # 连接数满后的排队数,默认为100
+    accept-count: 1000
+    threads:
+      # tomcat最大线程数,默认为200
+      max: 800
+      # Tomcat启动初始化的线程数,默认值10
+      min-spare: 100
+
 spring:
   main:
     web-application-type: reactive
@@ -6,10 +24,10 @@ spring:
       enabled: true
       routes: # 留空,禁用静态配置
   datasource:
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://39.98.38.2:13306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-    username: shmodel
-    password: shmodel#$0526
+    driver-class-name: dm.jdbc.driver.DmDriver
+    url: jdbc:dm://39.98.38.2:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SH_MODEL
+    username: SH_MODEL
+    password: ShModel@js123
   sql:
     init:
       mode: always