Преглед на файлове

图片压缩和日志集成

songxy преди 8 месеца
родител
ревизия
5dfdfa76dd

Файловите разлики са ограничени, защото са твърде много
+ 0 - 10623
logs/logback.log


+ 17 - 0
pom.xml

@@ -136,6 +136,23 @@
             <artifactId>commons-lang3</artifactId>
             <version>3.7</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-logging</artifactId>
+        </dependency>
+
+        <!-- ULID-->
+        <dependency>
+            <groupId>com.github.f4b6a3</groupId>
+            <artifactId>ulid-creator</artifactId>
+            <version>5.1.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 0
src/main/java/com/zjugis/iebps/IebpsApplication.java

@@ -1,5 +1,6 @@
 package com.zjugis.iebps;
 
+import com.github.f4b6a3.ulid.UlidCreator;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;

+ 26 - 0
src/main/java/com/zjugis/iebps/aspect/TraceLogAspect.java

@@ -0,0 +1,26 @@
+package com.zjugis.iebps.aspect;
+
+import com.github.f4b6a3.ulid.UlidCreator;
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class TraceLogAspect {
+
+    private static final String TRACE_ID="TRACE_ID";
+
+    @Before("@annotation(com.zjugis.iebps.annotations.TraceLog)")
+    public void beforeMethodExecution(){
+        MDC.put(TRACE_ID, UlidCreator.getUlid().toString());
+    }
+
+
+    @After("@annotation(com.zjugis.iebps.annotations.TraceLog)")
+    public void afterMethodExecution(){
+        MDC.remove(TRACE_ID);
+    }
+}

+ 8 - 0
src/main/java/com/zjugis/iebps/controller/DingApiController.java

@@ -4,8 +4,10 @@ package com.zjugis.iebps.controller;
 import com.zjugis.iebps.service.IDingUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
@@ -70,6 +72,12 @@ public class DingApiController {
         iDingUserService.downloadFileByDing(mediaId, servletResponse);
     }
 
+    @PostMapping("/test/file/download")
+    public void downloadByTestFile(MultipartFile file, HttpServletResponse servletResponse){
+        iDingUserService.downloadFileByTest(file, servletResponse);
+    }
+
+
     @GetMapping("/ding/img/compressNum")
     public Integer getCompressNumByImg(){
         return iDingUserService.getCompressNumByImg();

+ 3 - 0
src/main/java/com/zjugis/iebps/service/IDingUserService.java

@@ -1,6 +1,7 @@
 package com.zjugis.iebps.service;
 
 import com.alibaba.fastjson.JSONObject;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -31,5 +32,7 @@ public interface IDingUserService {
 
     void downloadFileByDing(String mediaId, HttpServletResponse response);
 
+    void downloadFileByTest(MultipartFile file, HttpServletResponse response);
+
     Integer getCompressNumByImg();
 }

+ 32 - 1
src/main/java/com/zjugis/iebps/service/impl/DingUserServiceImpl.java

@@ -15,9 +15,16 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.FileCopyUtils;
 import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.PostConstruct;
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
@@ -301,7 +308,8 @@ public class DingUserServiceImpl implements IDingUserService {
                 closeableHttpResponse = getClient.getB();
                 HttpEntity entity = closeableHttpResponse.getEntity();
                 InputStream is = entity.getContent();
-                FileCopyUtils.copy(is, response.getOutputStream());
+                BufferedImage bufferedImage = compressImage(is, 1200);
+                ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
             } catch (Exception e) {
                 e.printStackTrace();
             }finally {
@@ -316,6 +324,17 @@ public class DingUserServiceImpl implements IDingUserService {
         }
     }
 
+    @Override
+    public void downloadFileByTest(MultipartFile file, HttpServletResponse response){
+        try{
+            InputStream inputStream = file.getInputStream();
+            BufferedImage bufferedImage = compressImage(inputStream, 1200);
+            ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
+        }catch (IOException ex){
+            ex.printStackTrace();
+        }
+    }
+
     @Override
     public Integer getCompressNumByImg() {
         return compressNum;
@@ -379,5 +398,17 @@ public class DingUserServiceImpl implements IDingUserService {
         return content.getObject("data", DingUser.class);
     }
 
+    public static BufferedImage compressImage(InputStream inputStream, int width) throws IOException {
+        BufferedImage originalImage = ImageIO.read(inputStream);
+        int nW = originalImage.getWidth(), nH = originalImage.getHeight();
+        if(nW > width){
+            nW = width;
+            nH = nW * originalImage.getHeight() / originalImage.getWidth();
+        }
+        Image compressedImage = originalImage.getScaledInstance(nW, nH, Image.SCALE_SMOOTH);
+        BufferedImage outputImage = new BufferedImage(nW, nH, BufferedImage.TYPE_INT_RGB);
+        outputImage.createGraphics().drawImage(compressedImage, 0, 0, null);
+        return outputImage;
+    }
 
 }

+ 12 - 1
src/main/resources/application.yml

@@ -1,6 +1,6 @@
 app:
   port: 9970               #系统启动端口
-  context: /lsyd           #系统访问路径
+  context: /dingServer           #系统访问路径
   host: http://localhost    #主机地址
   accessControlAllowOrigin: http://localhost:8082/,http://192.168.20.74:8082/,http://192.168.20.74:8080/,http://0.0.0.0:8050,http://127.0.0.1:8050,http://localhost:8051,http://localhost:8080,http://60.191.110.203:8050,http://192.168.20.46:8081,http://localhost:8081 #跨域请求设置可以是*,或者是多个域名用逗号分隔,如果前端使用websocket则*不可以使用
 
@@ -9,9 +9,20 @@ server:
   servlet:
     context-path: ${app.context}
 
+spring:
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB
+
+logging:
+  config: classpath:logback-spring.xml
+
 ding:
   comAppKey: ZDZY-7gAUoD7Yy4gOXisH5m1NVbYje
   comAppSecret: 2y499XQ773JOQ4kq0rM13hDZvGmX0SLri994QtKV
+  appKey: ZDZY-7gAUoD7Yy4gOXisH5m1NVbYje
+  appSecret: 2y499XQ773JOQ4kq0rM13hDZvGmX0SLri994QtKV
   domainName: openplatform-pro.ding.zj.gov.cn
   tenantId: 196729
   compressNum: 30

+ 21 - 16
src/main/resources/logback-spring.xml

@@ -1,29 +1,34 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-    <include resource="org/springframework/boot/logging/logback/base.xml"/>
-    <property name="contextName" value="collect"/>
-    <property name="log_home" value="./logs"/>
-    <contextName>${contextName}</contextName>
+<configuration debug="false">
+    <!--日志存储路径-->
+    <property name="log" value="./logs" />
+    <!-- 控制台输出 -->
     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--输出格式化-->
+            <pattern>[%X{TRACE_ID}]  %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[%10method,%line] - %msg%n</pattern>
         </encoder>
     </appender>
+    <!-- 按天生成日志文件 -->
     <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${log_home}/logback.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <FileNamePattern>${log_home}/logback.%d{yyyyMMddHHmm}.log</FileNamePattern>
+            <!--日志文件名-->
+            <FileNamePattern>${log}/%d{yyyy-MM-dd}.log</FileNamePattern>
+            <!--保留天数-->
+            <MaxHistory>30</MaxHistory>
         </rollingPolicy>
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>[%X{TRACE_ID}]  %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
         </encoder>
+        <!--日志文件最大的大小-->
         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
             <MaxFileSize>10MB</MaxFileSize>
         </triggeringPolicy>
     </appender>
-    <logger name="logback"/>
-    <logger name="com.zjugis" level="debugger" additivity="false">
-        <appender-ref ref="console"/>
-        <appender-ref ref="file"/>
-    </logger>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="console" />
+        <appender-ref ref="file" />
+    </root>
 </configuration>

BIN
target/DING_SERVER-1.0-SNAPSHOT.jar


BIN
target/DING_SERVER-1.0-SNAPSHOT.jar.original


+ 12 - 1
target/classes/application.yml

@@ -1,6 +1,6 @@
 app:
   port: 9970               #系统启动端口
-  context: /lsyd           #系统访问路径
+  context: /dingServer           #系统访问路径
   host: http://localhost    #主机地址
   accessControlAllowOrigin: http://localhost:8082/,http://192.168.20.74:8082/,http://192.168.20.74:8080/,http://0.0.0.0:8050,http://127.0.0.1:8050,http://localhost:8051,http://localhost:8080,http://60.191.110.203:8050,http://192.168.20.46:8081,http://localhost:8081 #跨域请求设置可以是*,或者是多个域名用逗号分隔,如果前端使用websocket则*不可以使用
 
@@ -9,9 +9,20 @@ server:
   servlet:
     context-path: ${app.context}
 
+spring:
+  servlet:
+    multipart:
+      max-file-size: 100MB
+      max-request-size: 100MB
+
+logging:
+  config: classpath:logback-spring.xml
+
 ding:
   comAppKey: ZDZY-7gAUoD7Yy4gOXisH5m1NVbYje
   comAppSecret: 2y499XQ773JOQ4kq0rM13hDZvGmX0SLri994QtKV
+  appKey: ZDZY-7gAUoD7Yy4gOXisH5m1NVbYje
+  appSecret: 2y499XQ773JOQ4kq0rM13hDZvGmX0SLri994QtKV
   domainName: openplatform-pro.ding.zj.gov.cn
   tenantId: 196729
   compressNum: 30

BIN
target/classes/com/zjugis/iebps/IebpsApplication.class


BIN
target/classes/com/zjugis/iebps/controller/DingApiController.class


BIN
target/classes/com/zjugis/iebps/service/IDingUserService.class


BIN
target/classes/com/zjugis/iebps/service/impl/DingUserServiceImpl.class


+ 21 - 16
target/classes/logback-spring.xml

@@ -1,29 +1,34 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-    <include resource="org/springframework/boot/logging/logback/base.xml"/>
-    <property name="contextName" value="collect"/>
-    <property name="log_home" value="./logs"/>
-    <contextName>${contextName}</contextName>
+<configuration debug="false">
+    <!--日志存储路径-->
+    <property name="log" value="./logs" />
+    <!-- 控制台输出 -->
     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--输出格式化-->
+            <pattern>[%X{TRACE_ID}]  %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[%10method,%line] - %msg%n</pattern>
         </encoder>
     </appender>
+    <!-- 按天生成日志文件 -->
     <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${log_home}/logback.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <FileNamePattern>${log_home}/logback.%d{yyyyMMddHHmm}.log</FileNamePattern>
+            <!--日志文件名-->
+            <FileNamePattern>${log}/%d{yyyy-MM-dd}.log</FileNamePattern>
+            <!--保留天数-->
+            <MaxHistory>30</MaxHistory>
         </rollingPolicy>
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>[%X{TRACE_ID}]  %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
         </encoder>
+        <!--日志文件最大的大小-->
         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
             <MaxFileSize>10MB</MaxFileSize>
         </triggeringPolicy>
     </appender>
-    <logger name="logback"/>
-    <logger name="com.zjugis" level="debugger" additivity="false">
-        <appender-ref ref="console"/>
-        <appender-ref ref="file"/>
-    </logger>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="console" />
+        <appender-ref ref="file" />
+    </root>
 </configuration>

+ 16 - 8
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -1,19 +1,27 @@
 com\zjugis\iebps\config\CorsFilter.class
+com\zjugis\iebps\interceptor\TraceLogInterceptor.class
 com\zjugis\iebps\jackson\CustomizeNullJsonSerializer$NullStringJsonSerializer.class
-com\zjugis\iebps\config\JacksonConfig.class
 com\zjugis\iebps\controller\DingApiController.class
-com\zjugis\iebps\exception\ErrorCode.class
-com\zjugis\iebps\IebpsApplication.class
 com\zjugis\iebps\jackson\CustomizeNullJsonSerializer$NullArrayJsonSerializer.class
 com\zjugis\iebps\jackson\CustomizeNullJsonSerializer.class
-com\zjugis\iebps\jackson\MyBeanSerializerModifier.class
-com\zjugis\iebps\exception\BusinessException.class
+com\zjugis\iebps\config\ArtisanThreadPoolTaskExecutor.class
+com\zjugis\iebps\config\ThreadPoolConfig.class
 com\zjugis\iebps\jackson\CustomizeNullJsonSerializer$NullObjectJsonSerializer.class
-com\zjugis\iebps\jackson\CustomizeNullJsonSerializer$NullBooleanJsonSerializer.class
-com\zjugis\iebps\service\IDingUserService.class
 com\zjugis\iebps\exception\enums\GlobalErrorCodeConstants.class
 com\zjugis\iebps\service\impl\DingUserServiceImpl.class
 com\zjugis\iebps\exception\ServerException.class
-com\zjugis\iebps\jackson\CustomizeNullJsonSerializer$NullNumberJsonSerializer.class
 com\zjugis\iebps\exception\ServiceException.class
 com\zjugis\iebps\beans\dataobject\DingUser.class
+com\zjugis\iebps\config\JacksonConfig.class
+com\zjugis\iebps\exception\ErrorCode.class
+com\zjugis\iebps\IebpsApplication.class
+com\zjugis\iebps\jackson\MyBeanSerializerModifier.class
+com\zjugis\iebps\exception\BusinessException.class
+com\zjugis\iebps\controller\ArtisanTestController.class
+com\zjugis\iebps\jackson\CustomizeNullJsonSerializer$NullBooleanJsonSerializer.class
+com\zjugis\iebps\service\IDingUserService.class
+com\zjugis\iebps\annotations\TraceLog.class
+com\zjugis\iebps\aspect\TraceLogAspect.class
+com\zjugis\iebps\config\WebConfigurerAdapter.class
+com\zjugis\iebps\jackson\CustomizeNullJsonSerializer$NullNumberJsonSerializer.class
+com\zjugis\iebps\util\ThreadMdcUtil.class

+ 8 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -1,14 +1,22 @@
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\service\impl\DingUserServiceImpl.java
+E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\util\ThreadMdcUtil.java
+E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\config\ThreadPoolConfig.java
+E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\annotations\TraceLog.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\config\CorsFilter.java
+E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\aspect\TraceLogAspect.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\IebpsApplication.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\exception\ErrorCode.java
+E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\config\WebConfigurerAdapter.java
+E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\config\ArtisanThreadPoolTaskExecutor.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\controller\DingApiController.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\config\JacksonConfig.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\service\IDingUserService.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\exception\BusinessException.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\exception\ServiceException.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\beans\dataobject\DingUser.java
+E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\controller\ArtisanTestController.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\jackson\MyBeanSerializerModifier.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\jackson\CustomizeNullJsonSerializer.java
+E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\interceptor\TraceLogInterceptor.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\exception\enums\GlobalErrorCodeConstants.java
 E:\WorkProject\ding_server\src\main\java\com\zjugis\iebps\exception\ServerException.java

Някои файлове не бяха показани, защото твърде много файлове са промени