Sfoglia il codice sorgente

fix:代码风格格式化

ChenYL 2 anni fa
parent
commit
f05304637d
34 ha cambiato i file con 426 aggiunte e 411 eliminazioni
  1. 147 147
      pom.xml
  2. 3 4
      src/main/java/com/zhixinghe1/ots/OtsApplication.java
  3. 2 1
      src/main/java/com/zhixinghe1/ots/atomic/mapper/AttachmentMapper.java
  4. 16 15
      src/main/java/com/zhixinghe1/ots/atomic/service/IAttachmentService.java
  5. 26 25
      src/main/java/com/zhixinghe1/ots/atomic/service/impl/AttachmentServiceImpl.java
  6. 6 3
      src/main/java/com/zhixinghe1/ots/common/annotation/IgnoreResponseWrapper.java
  7. 4 2
      src/main/java/com/zhixinghe1/ots/common/aop/GlobalExceptionHandler.java
  8. 8 5
      src/main/java/com/zhixinghe1/ots/common/aop/ResponseControllerAdvice.java
  9. 7 6
      src/main/java/com/zhixinghe1/ots/common/aop/WebOperateLogAspect.java
  10. 4 6
      src/main/java/com/zhixinghe1/ots/common/constant/BaseErrorCodeEnum.java
  11. 2 2
      src/main/java/com/zhixinghe1/ots/common/converter/enums/IntegerToEnumConverter.java
  12. 3 3
      src/main/java/com/zhixinghe1/ots/common/converter/enums/IntegerToEnumConverterFactory.java
  13. 2 0
      src/main/java/com/zhixinghe1/ots/common/converter/mapstruct/BaseEntityConverter.java
  14. 5 4
      src/main/java/com/zhixinghe1/ots/common/dto/JsonResponse.java
  15. 4 3
      src/main/java/com/zhixinghe1/ots/config/BizConfig.java
  16. 4 4
      src/main/java/com/zhixinghe1/ots/config/MyBatisConfig.java
  17. 3 2
      src/main/java/com/zhixinghe1/ots/config/SpringDocConfig.java
  18. 2 1
      src/main/java/com/zhixinghe1/ots/config/WebMvcConfig.java
  19. 4 4
      src/main/java/com/zhixinghe1/ots/domain/converter/AttachmentConverter.java
  20. 1 1
      src/main/java/com/zhixinghe1/ots/domain/dto/AttachmentDto.java
  21. 1 0
      src/main/java/com/zhixinghe1/ots/domain/dto/WaterMarkLayout.java
  22. 1 0
      src/main/java/com/zhixinghe1/ots/domain/dto/WaterMarkStyle.java
  23. 0 1
      src/main/java/com/zhixinghe1/ots/service/constant/FontEnum.java
  24. 3 5
      src/main/java/com/zhixinghe1/ots/service/constant/FontStyleEnum.java
  25. 3 5
      src/main/java/com/zhixinghe1/ots/service/constant/PositionEnum.java
  26. 9 7
      src/main/java/com/zhixinghe1/ots/service/controller/OssController.java
  27. 12 11
      src/main/java/com/zhixinghe1/ots/service/controller/WaterMarkController.java
  28. 9 7
      src/main/java/com/zhixinghe1/ots/service/core/TileImageFilter.java
  29. 8 7
      src/main/java/com/zhixinghe1/ots/service/manager/IOssManager.java
  30. 2 2
      src/main/java/com/zhixinghe1/ots/service/manager/IWaterMarkManager.java
  31. 47 46
      src/main/java/com/zhixinghe1/ots/service/manager/impl/OssManagerImpl.java
  32. 49 52
      src/main/java/com/zhixinghe1/ots/service/manager/impl/WaterMarkManagerImpl.java
  33. 1 1
      src/main/resources/application.yml
  34. 28 29
      src/test/java/com/zhixinghe1/ots/manager/WaterMarkManagerImplTest.java

+ 147 - 147
pom.xml

@@ -1,155 +1,155 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.springframework.boot</groupId>
-    <artifactId>spring-boot-starter-parent</artifactId>
-    <version>3.1.1</version>
-    <relativePath/> <!-- lookup parent from repository -->
-  </parent>
-  <groupId>com.zhixinghe1</groupId>
-  <artifactId>ots</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
-  <name>ots</name>
-  <description>a online tool service</description>
-  <properties>
-    <java.version>17</java.version>
-    <mapstruct.version>1.5.5.Final</mapstruct.version>
-    <mybatis.plus.version>3.5.3.1</mybatis.plus.version>
-    <thumbnailator.version>0.4.20</thumbnailator.version>
-    <lombok.mapstruct.binding.version>0.2.0</lombok.mapstruct.binding.version>
-  </properties>
-  <dependencies>
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-validation</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-web</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-aop</artifactId>
-    </dependency>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>3.1.1</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.zhixinghe1</groupId>
+    <artifactId>ots</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>ots</name>
+    <description>a online tool service</description>
+    <properties>
+        <java.version>17</java.version>
+        <mapstruct.version>1.5.5.Final</mapstruct.version>
+        <mybatis.plus.version>3.5.3.1</mybatis.plus.version>
+        <thumbnailator.version>0.4.20</thumbnailator.version>
+        <lombok.mapstruct.binding.version>0.2.0</lombok.mapstruct.binding.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
 
-    <dependency>
-      <groupId>com.h2database</groupId>
-      <artifactId>h2</artifactId>
-      <scope>runtime</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.projectlombok</groupId>
-      <artifactId>lombok</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.projectlombok</groupId>
-      <artifactId>lombok-mapstruct-binding</artifactId>
-      <version>${lombok.mapstruct.binding.version}</version>
-    </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok-mapstruct-binding</artifactId>
+            <version>${lombok.mapstruct.binding.version}</version>
+        </dependency>
 
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-test</artifactId>
-      <scope>test</scope>
-    </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
 
-    <dependency>
-      <groupId>org.springdoc</groupId>
-      <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
-      <version>2.1.0</version>
-    </dependency>
-    <dependency>
-      <groupId>net.coobird</groupId>
-      <artifactId>thumbnailator</artifactId>
-      <version>${thumbnailator.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.baomidou</groupId>
-      <artifactId>mybatis-plus-boot-starter</artifactId>
-      <version>${mybatis.plus.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.mapstruct</groupId>
-      <artifactId>mapstruct</artifactId>
-      <version>${mapstruct.version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mapstruct</groupId>
-      <artifactId>mapstruct-processor</artifactId>
-      <version>${mapstruct.version}</version>
-      <scope>compile</scope>
-    </dependency>
-  </dependencies>
+        <dependency>
+            <groupId>org.springdoc</groupId>
+            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+            <version>2.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>${thumbnailator.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>${mybatis.plus.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+            <version>${mapstruct.version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct-processor</artifactId>
+            <version>${mapstruct.version}</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
 
-  <!-- 配置阿里云仓库 -->
-  <repositories>
-    <repository>
-      <id>aliyun-repos</id>
-      <url>https://maven.aliyun.com/repository/public</url>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
-  <pluginRepositories>
-    <pluginRepository>
-      <id>aliyun-repos</id>
-      <url>https://maven.aliyun.com/repository/public</url>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-    </pluginRepository>
-  </pluginRepositories>
+    <!-- 配置阿里云仓库 -->
+    <repositories>
+        <repository>
+            <id>aliyun-repos</id>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+    <pluginRepositories>
+        <pluginRepository>
+            <id>aliyun-repos</id>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-maven-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>
-              <groupId>org.projectlombok</groupId>
-              <artifactId>lombok</artifactId>
-            </exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <configuration>
-          <annotationProcessorPaths>
-            <path>
-              <groupId>org.projectlombok</groupId>
-              <artifactId>lombok</artifactId>
-              <version>${lombok.version}</version>
-            </path>
-            <path>
-              <groupId>org.mapstruct</groupId>
-              <artifactId>mapstruct-processor</artifactId>
-              <version>${mapstruct.version}</version>
-            </path>
-            <path>
-              <groupId>org.projectlombok</groupId>
-              <artifactId>lombok-mapstruct-binding</artifactId>
-              <version>${lombok.mapstruct.binding.version}</version>
-            </path>
-          </annotationProcessorPaths>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${lombok.version}</version>
+                        </path>
+                        <path>
+                            <groupId>org.mapstruct</groupId>
+                            <artifactId>mapstruct-processor</artifactId>
+                            <version>${mapstruct.version}</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok-mapstruct-binding</artifactId>
+                            <version>${lombok.mapstruct.binding.version}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>

+ 3 - 4
src/main/java/com/zhixinghe1/ots/OtsApplication.java

@@ -1,14 +1,13 @@
 package com.zhixinghe1.ots;
 
-import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
 public class OtsApplication {
 
-	public static void main(String[] args) {
-		SpringApplication.run(OtsApplication.class, args);
-	}
+    public static void main(String[] args) {
+        SpringApplication.run(OtsApplication.class, args);
+    }
 
 }

+ 2 - 1
src/main/java/com/zhixinghe1/ots/atomic/mapper/AttachmentMapper.java

@@ -1,8 +1,9 @@
 package com.zhixinghe1.ots.atomic.mapper;
 
+import org.apache.ibatis.annotations.Mapper;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhixinghe1.ots.atomic.entity.Attachment;
-import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
 public interface AttachmentMapper extends BaseMapper<Attachment> {

+ 16 - 15
src/main/java/com/zhixinghe1/ots/atomic/service/IAttachmentService.java

@@ -1,26 +1,27 @@
 package com.zhixinghe1.ots.atomic.service;
 
-import com.zhixinghe1.ots.domain.dto.AttachmentDto;
 import java.util.List;
 
+import com.zhixinghe1.ots.domain.dto.AttachmentDto;
+
 /**
  * 附件服务
  */
 public interface IAttachmentService {
 
-  /**
-   * 根据id查找附件记录
-   *
-   * @param id
-   * @return
-   */
-  AttachmentDto getById(Long id);
+    /**
+     * 根据id查找附件记录
+     *
+     * @param id
+     * @return
+     */
+    AttachmentDto getById(Long id);
 
-  /**
-   * 增加附件记录
-   *
-   * @param attachmentDtoList
-   * @return
-   */
-  boolean batchAddAttachment(List<AttachmentDto> attachmentDtoList);
+    /**
+     * 增加附件记录
+     *
+     * @param attachmentDtoList
+     * @return
+     */
+    boolean batchAddAttachment(List<AttachmentDto> attachmentDtoList);
 }

+ 26 - 25
src/main/java/com/zhixinghe1/ots/atomic/service/impl/AttachmentServiceImpl.java

@@ -1,42 +1,43 @@
 package com.zhixinghe1.ots.atomic.service.impl;
 
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhixinghe1.ots.atomic.entity.Attachment;
 import com.zhixinghe1.ots.atomic.mapper.AttachmentMapper;
 import com.zhixinghe1.ots.atomic.service.IAttachmentService;
 import com.zhixinghe1.ots.domain.converter.AttachmentConverter;
 import com.zhixinghe1.ots.domain.dto.AttachmentDto;
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
 @Service
-public class AttachmentServiceImpl extends ServiceImpl<AttachmentMapper, Attachment> implements
-    IAttachmentService {
+public class AttachmentServiceImpl extends ServiceImpl<AttachmentMapper, Attachment> implements IAttachmentService {
+
+    @Autowired
+    private AttachmentConverter attachmentConverter;
 
-  @Autowired
-  private AttachmentConverter attachmentConverter;
+    @Override
+    public AttachmentDto getById(Long id) {
+        if (id == null) {
+            return null;
+        }
 
-  @Override
-  public AttachmentDto getById(Long id) {
-    if (id == null) {
-      return null;
+        Attachment attachment = baseMapper.selectById(id);
+        return attachmentConverter.convert2Dto(attachment);
     }
 
-    Attachment attachment = baseMapper.selectById(id);
-    return attachmentConverter.convert2Dto(attachment);
-  }
+    @Override
+    @Transactional
+    public boolean batchAddAttachment(List<AttachmentDto> attachmentDtoList) {
+        if (CollectionUtils.isEmpty(attachmentDtoList)) {
+            return true;
+        }
 
-  @Override
-  @Transactional
-  public boolean batchAddAttachment(List<AttachmentDto> attachmentDtoList) {
-    if (CollectionUtils.isEmpty(attachmentDtoList)) {
-      return true;
+        List<Attachment> attachments = attachmentConverter.convert2EntityList(attachmentDtoList);
+        return saveBatch(attachments);
     }
-
-    List<Attachment> attachments = attachmentConverter.convert2EntityList(attachmentDtoList);
-    return saveBatch(attachments);
-  }
 }

+ 6 - 3
src/main/java/com/zhixinghe1/ots/common/annotation/IgnoreResponseWrapper.java

@@ -1,6 +1,10 @@
 package com.zhixinghe1.ots.common.annotation;
 
-import java.lang.annotation.*;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * 忽略接口返回统一处理
@@ -8,5 +12,4 @@ import java.lang.annotation.*;
 @Documented
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
-public @interface IgnoreResponseWrapper {
-}
+public @interface IgnoreResponseWrapper {}

+ 4 - 2
src/main/java/com/zhixinghe1/ots/common/aop/GlobalExceptionHandler.java

@@ -1,10 +1,12 @@
 package com.zhixinghe1.ots.common.aop;
 
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
 import com.zhixinghe1.ots.common.dto.JsonResponse;
 import com.zhixinghe1.ots.common.exception.BusinessException;
+
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
 
 /**
  * 全局异常处理

+ 8 - 5
src/main/java/com/zhixinghe1/ots/common/aop/ResponseControllerAdvice.java

@@ -1,9 +1,5 @@
 package com.zhixinghe1.ots.common.aop;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.zhixinghe1.ots.common.annotation.IgnoreResponseWrapper;
-import com.zhixinghe1.ots.common.dto.JsonResponse;
 import org.springframework.core.MethodParameter;
 import org.springframework.http.MediaType;
 import org.springframework.http.converter.HttpMessageConverter;
@@ -12,6 +8,11 @@ import org.springframework.http.server.ServerHttpResponse;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.zhixinghe1.ots.common.annotation.IgnoreResponseWrapper;
+import com.zhixinghe1.ots.common.dto.JsonResponse;
+
 /**
  * 接口返回统一处理
  */
@@ -23,7 +24,9 @@ public class ResponseControllerAdvice implements ResponseBodyAdvice<Object> {
     }
 
     @Override
-    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
+    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
+        Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
+        ServerHttpResponse response) {
         if (body instanceof JsonResponse) {
             return body;
         }

+ 7 - 6
src/main/java/com/zhixinghe1/ots/common/aop/WebOperateLogAspect.java

@@ -1,7 +1,7 @@
 package com.zhixinghe1.ots.common.aop;
 
-import jakarta.servlet.http.HttpServletRequest;
-import lombok.extern.slf4j.Slf4j;
+import java.util.Arrays;
+
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -11,7 +11,8 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.Arrays;
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 @Aspect
@@ -19,14 +20,14 @@ import java.util.Arrays;
 public class WebOperateLogAspect {
 
     @Pointcut("execution(* com.zhixinghe1.ots.controller..*.*(..))")
-    public void pointcut() {
-    }
+    public void pointcut() {}
 
     @Around("pointcut()")
     public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
         long startTime = System.currentTimeMillis();
 
-        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        ServletRequestAttributes requestAttributes =
+            (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
         HttpServletRequest request = requestAttributes.getRequest();
 
         String requestURI = request.getRequestURI();

+ 4 - 6
src/main/java/com/zhixinghe1/ots/common/constant/BaseErrorCodeEnum.java

@@ -5,18 +5,16 @@ package com.zhixinghe1.ots.common.constant;
  */
 public enum BaseErrorCodeEnum {
 
-    SUCCESS("0", "操作成功"),
-    FAIL("999", "操作失败");
+    SUCCESS("0", "操作成功"), FAIL("999", "操作失败");
+
+    private String code;
+    private String msg;
 
     BaseErrorCodeEnum(String code, String msg) {
         this.code = code;
         this.msg = msg;
     }
 
-    private String code;
-
-    private String msg;
-
     public String getCode() {
         return code;
     }

+ 2 - 2
src/main/java/com/zhixinghe1/ots/common/converter/enums/IntegerToEnumConverter.java

@@ -1,10 +1,10 @@
 package com.zhixinghe1.ots.common.converter.enums;
 
-import org.springframework.core.convert.converter.Converter;
-
 import java.util.HashMap;
 import java.util.Map;
 
+import org.springframework.core.convert.converter.Converter;
+
 /**
  * 转换器 数值转换为枚举
  *

+ 3 - 3
src/main/java/com/zhixinghe1/ots/common/converter/enums/IntegerToEnumConverterFactory.java

@@ -1,11 +1,11 @@
 package com.zhixinghe1.ots.common.converter.enums;
 
-import org.springframework.core.convert.converter.Converter;
-import org.springframework.core.convert.converter.ConverterFactory;
-
 import java.util.HashMap;
 import java.util.Map;
 
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.core.convert.converter.ConverterFactory;
+
 public class IntegerToEnumConverterFactory implements ConverterFactory<Integer, IJsonEnum> {
 
     private static final Map<Class, Converter> CONVERTERS = new HashMap<>();

+ 2 - 0
src/main/java/com/zhixinghe1/ots/common/converter/mapstruct/BaseEntityConverter.java

@@ -29,6 +29,7 @@ public interface BaseEntityConverter<Entity, Dto> {
 
     /**
      * 实体列表转换为DTO列表
+     * 
      * @param entityList
      * @return
      */
@@ -36,6 +37,7 @@ public interface BaseEntityConverter<Entity, Dto> {
 
     /**
      * DTO列表转换为实体列表
+     * 
      * @param dtoList
      * @return
      */

+ 5 - 4
src/main/java/com/zhixinghe1/ots/common/dto/JsonResponse.java

@@ -1,12 +1,13 @@
 package com.zhixinghe1.ots.common.dto;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 import com.zhixinghe1.ots.common.constant.BaseErrorCodeEnum;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import java.io.Serial;
-import java.io.Serializable;
-
 /**
  * 统一响应体
  *
@@ -100,7 +101,7 @@ public class JsonResponse<T> implements Serializable {
      * 返回错误响应体
      *
      * @param code 错误编码
-     * @param msg  错误信息
+     * @param msg 错误信息
      * @param <T>
      * @return
      */

+ 4 - 3
src/main/java/com/zhixinghe1/ots/config/BizConfig.java

@@ -1,13 +1,14 @@
 package com.zhixinghe1.ots.config;
 
-import lombok.Getter;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 
+import lombok.Getter;
+
 @Getter
 @Configuration
 public class BizConfig {
 
-  @Value("${file.tmp.dir}")
-  private String fileTmpDir;
+    @Value("${file.tmp.dir}")
+    private String fileTmpDir;
 }

+ 4 - 4
src/main/java/com/zhixinghe1/ots/config/MyBatisConfig.java

@@ -9,8 +9,8 @@ import org.springframework.context.annotation.Configuration;
 @MapperScan(basePackages = MAPPER_SCAN_PATH)
 public class MyBatisConfig {
 
-  /**
-   * MyBatis扫描路径
-   */
-  public static final String MAPPER_SCAN_PATH = "com.zhixinghe1.ots.atomic.mapper";
+    /**
+     * MyBatis扫描路径
+     */
+    public static final String MAPPER_SCAN_PATH = "com.zhixinghe1.ots.atomic.mapper";
 }

+ 3 - 2
src/main/java/com/zhixinghe1/ots/config/SpringDocConfig.java

@@ -1,10 +1,11 @@
 package com.zhixinghe1.ots.config;
 
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.info.Info;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+
 /**
  * SpringDoc配置类
  */

+ 2 - 1
src/main/java/com/zhixinghe1/ots/config/WebMvcConfig.java

@@ -1,10 +1,11 @@
 package com.zhixinghe1.ots.config;
 
-import com.zhixinghe1.ots.common.converter.enums.IntegerToEnumConverterFactory;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.format.FormatterRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
+import com.zhixinghe1.ots.common.converter.enums.IntegerToEnumConverterFactory;
+
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {
     @Override

+ 4 - 4
src/main/java/com/zhixinghe1/ots/domain/converter/AttachmentConverter.java

@@ -1,14 +1,14 @@
 package com.zhixinghe1.ots.domain.converter;
 
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+
 import com.zhixinghe1.ots.atomic.entity.Attachment;
 import com.zhixinghe1.ots.common.converter.mapstruct.BaseEntityConverter;
 import com.zhixinghe1.ots.domain.dto.AttachmentDto;
-import org.mapstruct.Mapper;
-import org.mapstruct.MappingConstants;
 
 /**
  * 附件对象转换工具
  */
 @Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
-public interface AttachmentConverter extends BaseEntityConverter<Attachment, AttachmentDto> {
-}
+public interface AttachmentConverter extends BaseEntityConverter<Attachment, AttachmentDto> {}

+ 1 - 1
src/main/java/com/zhixinghe1/ots/domain/dto/AttachmentDto.java

@@ -1,6 +1,7 @@
 package com.zhixinghe1.ots.domain.dto;
 
 import com.zhixinghe1.ots.atomic.entity.Attachment;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -11,5 +12,4 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 public class AttachmentDto extends Attachment {
 
-
 }

+ 1 - 0
src/main/java/com/zhixinghe1/ots/domain/dto/WaterMarkLayout.java

@@ -1,6 +1,7 @@
 package com.zhixinghe1.ots.domain.dto;
 
 import com.zhixinghe1.ots.service.constant.PositionEnum;
+
 import lombok.Data;
 
 /**

+ 1 - 0
src/main/java/com/zhixinghe1/ots/domain/dto/WaterMarkStyle.java

@@ -2,6 +2,7 @@ package com.zhixinghe1.ots.domain.dto;
 
 import com.zhixinghe1.ots.service.constant.FontEnum;
 import com.zhixinghe1.ots.service.constant.FontStyleEnum;
+
 import lombok.Data;
 
 /**

+ 0 - 1
src/main/java/com/zhixinghe1/ots/service/constant/FontEnum.java

@@ -7,7 +7,6 @@ import com.zhixinghe1.ots.common.converter.enums.IJsonEnum;
  */
 public enum FontEnum implements IJsonEnum<Integer> {
 
-
     SIMSUN("宋体", 0);
 
     private String name;

+ 3 - 5
src/main/java/com/zhixinghe1/ots/service/constant/FontStyleEnum.java

@@ -1,14 +1,12 @@
 package com.zhixinghe1.ots.service.constant;
 
-import com.zhixinghe1.ots.common.converter.enums.IJsonEnum;
-
 import java.awt.*;
 
+import com.zhixinghe1.ots.common.converter.enums.IJsonEnum;
+
 public enum FontStyleEnum implements IJsonEnum<Integer> {
 
-    PLAIN("普通", Font.PLAIN),
-    BOLD("粗体", Font.BOLD),
-    ITALIC("斜体", Font.ITALIC);
+    PLAIN("普通", Font.PLAIN), BOLD("粗体", Font.BOLD), ITALIC("斜体", Font.ITALIC);
 
     private final String name;
 

+ 3 - 5
src/main/java/com/zhixinghe1/ots/service/constant/PositionEnum.java

@@ -1,6 +1,7 @@
 package com.zhixinghe1.ots.service.constant;
 
 import com.zhixinghe1.ots.common.converter.enums.IJsonEnum;
+
 import net.coobird.thumbnailator.geometry.Position;
 import net.coobird.thumbnailator.geometry.Positions;
 
@@ -10,11 +11,8 @@ import net.coobird.thumbnailator.geometry.Positions;
  * @author tyuio
  */
 public enum PositionEnum implements IJsonEnum<Integer> {
-    TILE("平铺", 0, null),
-    CENTER("剧中", 1, Positions.CENTER),
-    TOP_LEFT("左上角", 2, Positions.TOP_LEFT),
-    TOP_RIGHT("右上角", 3, Positions.TOP_RIGHT),
-    BOTTOM_LEFT("左下角", 4, Positions.BOTTOM_LEFT),
+    TILE("平铺", 0, null), CENTER("剧中", 1, Positions.CENTER), TOP_LEFT("左上角", 2, Positions.TOP_LEFT),
+    TOP_RIGHT("右上角", 3, Positions.TOP_RIGHT), BOTTOM_LEFT("左下角", 4, Positions.BOTTOM_LEFT),
     BOTTOM_RIGHT("右下角", 5, Positions.BOTTOM_RIGHT);
 
     private final String name;

+ 9 - 7
src/main/java/com/zhixinghe1/ots/service/controller/OssController.java

@@ -1,7 +1,7 @@
 package com.zhixinghe1.ots.service.controller;
 
-import com.zhixinghe1.ots.service.manager.IOssManager;
 import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -10,6 +10,8 @@ import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import com.zhixinghe1.ots.service.manager.IOssManager;
+
 /**
  * 对象存储
  */
@@ -18,11 +20,11 @@ import org.springframework.web.multipart.MultipartFile;
 @RequestMapping("/oss")
 public class OssController {
 
-  @Autowired
-  private IOssManager ossManager;
+    @Autowired
+    private IOssManager ossManager;
 
-  @PostMapping("/upload")
-  public List<String> upload(@RequestPart("files") List<MultipartFile> multipartFiles) {
-    return ossManager.upload(multipartFiles);
-  }
+    @PostMapping("/upload")
+    public List<String> upload(@RequestPart("files") List<MultipartFile> multipartFiles) {
+        return ossManager.upload(multipartFiles);
+    }
 }

+ 12 - 11
src/main/java/com/zhixinghe1/ots/service/controller/WaterMarkController.java

@@ -1,27 +1,28 @@
 package com.zhixinghe1.ots.service.controller;
 
-import com.zhixinghe1.ots.domain.dto.WaterMarkRequest;
-import com.zhixinghe1.ots.service.manager.IWaterMarkManager;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import java.io.UnsupportedEncodingException;
+
 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.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.zhixinghe1.ots.domain.dto.WaterMarkRequest;
+import com.zhixinghe1.ots.service.manager.IWaterMarkManager;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+
 @Tag(name = "水印")
 @RestController
 @RequestMapping("/watermark")
 public class WaterMarkController {
 
-  @Autowired
-  private IWaterMarkManager waterMarkManager;
+    @Autowired
+    private IWaterMarkManager waterMarkManager;
 
-  @PostMapping(value = "/make")
-  public void make(@RequestBody WaterMarkRequest request) throws UnsupportedEncodingException {
-    waterMarkManager.make(request);
-  }
+    @PostMapping(value = "/make")
+    public void make(@RequestBody WaterMarkRequest request) throws UnsupportedEncodingException {
+        waterMarkManager.make(request);
+    }
 }

+ 9 - 7
src/main/java/com/zhixinghe1/ots/service/core/TileImageFilter.java

@@ -1,12 +1,12 @@
 package com.zhixinghe1.ots.service.core;
 
-import net.coobird.thumbnailator.filters.ImageFilter;
-import net.coobird.thumbnailator.util.BufferedImages;
-
 import java.awt.*;
 import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 
+import net.coobird.thumbnailator.filters.ImageFilter;
+import net.coobird.thumbnailator.util.BufferedImages;
+
 /**
  * 水印平铺
  */
@@ -52,8 +52,8 @@ public class TileImageFilter implements ImageFilter {
      */
     private Boolean criscross;
 
-    public TileImageFilter(String caption, Font font, Color c, Integer alpha, Integer degree,
-        Integer widthInterval, Integer heightInterval, Boolean criscross) {
+    public TileImageFilter(String caption, Font font, Color c, Integer alpha, Integer degree, Integer widthInterval,
+        Integer heightInterval, Boolean criscross) {
         this.caption = caption;
         this.font = font;
         this.c = c;
@@ -101,7 +101,8 @@ public class TileImageFilter implements ImageFilter {
                 g.drawString(caption, idx % 2 == 0 ? offsetX + i : i, j);
             }
 
-            for (int j = centerY - tmpHeightInterval, idx = 1; j > 2 * (-imageHeight); j = j - tmpHeightInterval, idx++) {
+            for (int j = centerY - tmpHeightInterval, idx = 1; j > 2 * (-imageHeight);
+                j = j - tmpHeightInterval, idx++) {
                 g.drawString(caption, idx % 2 == 0 ? offsetX + i : i, j);
             }
         }
@@ -111,7 +112,8 @@ public class TileImageFilter implements ImageFilter {
                 g.drawString(caption, idx % 2 == 0 ? offsetX + i : i, j);
             }
 
-            for (int j = centerY - tmpHeightInterval, idx = 1; j > 2 * (-imageHeight); j = j - tmpHeightInterval, idx++) {
+            for (int j = centerY - tmpHeightInterval, idx = 1; j > 2 * (-imageHeight);
+                j = j - tmpHeightInterval, idx++) {
                 g.drawString(caption, idx % 2 == 0 ? offsetX + i : i, j);
             }
         }

+ 8 - 7
src/main/java/com/zhixinghe1/ots/service/manager/IOssManager.java

@@ -1,6 +1,7 @@
 package com.zhixinghe1.ots.service.manager;
 
 import java.util.List;
+
 import org.springframework.web.multipart.MultipartFile;
 
 /**
@@ -8,11 +9,11 @@ import org.springframework.web.multipart.MultipartFile;
  */
 public interface IOssManager {
 
-  /**
-   * 文件上传
-   *
-   * @param multipartFiles
-   * @return
-   */
-  List<String> upload(List<MultipartFile> multipartFiles);
+    /**
+     * 文件上传
+     *
+     * @param multipartFiles
+     * @return
+     */
+    List<String> upload(List<MultipartFile> multipartFiles);
 }

+ 2 - 2
src/main/java/com/zhixinghe1/ots/service/manager/IWaterMarkManager.java

@@ -1,9 +1,9 @@
 package com.zhixinghe1.ots.service.manager;
 
-import com.zhixinghe1.ots.domain.dto.WaterMarkRequest;
-
 import java.io.UnsupportedEncodingException;
 
+import com.zhixinghe1.ots.domain.dto.WaterMarkRequest;
+
 /**
  * 水印服务类
  *

+ 47 - 46
src/main/java/com/zhixinghe1/ots/service/manager/impl/OssManagerImpl.java

@@ -1,20 +1,23 @@
 package com.zhixinghe1.ots.service.manager.impl;
 
-import com.zhixinghe1.ots.atomic.service.IAttachmentService;
-import com.zhixinghe1.ots.config.BizConfig;
-import com.zhixinghe1.ots.domain.dto.AttachmentDto;
-import com.zhixinghe1.ots.service.manager.IOssManager;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
-import lombok.extern.slf4j.Slf4j;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import com.zhixinghe1.ots.atomic.service.IAttachmentService;
+import com.zhixinghe1.ots.config.BizConfig;
+import com.zhixinghe1.ots.domain.dto.AttachmentDto;
+import com.zhixinghe1.ots.service.manager.IOssManager;
+
+import lombok.extern.slf4j.Slf4j;
+
 /**
  * 对象存储
  */
@@ -22,49 +25,47 @@ import org.springframework.web.multipart.MultipartFile;
 @Service
 public class OssManagerImpl implements IOssManager {
 
-  @Autowired
-  private BizConfig bizConfig;
+    @Autowired
+    private BizConfig bizConfig;
 
-  @Autowired
-  private IAttachmentService attachmentService;
+    @Autowired
+    private IAttachmentService attachmentService;
 
-  @Override
-  public List<String> upload(List<MultipartFile> multipartFiles) {
-    if (CollectionUtils.isEmpty(multipartFiles)) {
-      return new ArrayList<>(0);
+    @Override
+    public List<String> upload(List<MultipartFile> multipartFiles) {
+        if (CollectionUtils.isEmpty(multipartFiles)) {
+            return new ArrayList<>(0);
+        }
+        List<AttachmentDto> attachmentDtoList = transfer(multipartFiles);
+        attachmentService.batchAddAttachment(attachmentDtoList);
+        return attachmentDtoList.stream().map(attachmentDto -> attachmentDto.getPath()).collect(Collectors.toList());
     }
-    List<AttachmentDto> attachmentDtoList = transfer(multipartFiles);
-    attachmentService.batchAddAttachment(attachmentDtoList);
-    return attachmentDtoList.stream().map(attachmentDto -> attachmentDto.getPath()).collect(
-        Collectors.toList());
-  }
 
-  /**
-   * 转存上传的文件
-   *
-   * @param multipartFiles
-   * @return
-   */
-  private List<AttachmentDto> transfer(List<MultipartFile> multipartFiles) {
-    return multipartFiles.stream().map(file -> {
-      try {
-        String originalFilename = file.getOriginalFilename();
-        int i = originalFilename.lastIndexOf(".");
-        String fileNamePrefix = originalFilename.substring(0, i);
-        String fileNameSuffix = originalFilename.substring(i + 1);
-        String fileName = String.format("%s_%d.%s", fileNamePrefix, System.currentTimeMillis(),
-            fileNameSuffix);
-        String filePath = String.format("%s%s", bizConfig.getFileTmpDir(), fileName);
-        file.transferTo(new File(filePath));
-        AttachmentDto attachmentDto = new AttachmentDto();
-        attachmentDto.setName(fileName);
-        attachmentDto.setPath(filePath);
-        attachmentDto.setStatus(false);
-        return attachmentDto;
-      } catch (IOException e) {
-        log.error("转存上传文件异常", e);
-      }
-      return null;
-    }).filter(dto -> dto != null).collect(Collectors.toList());
-  }
+    /**
+     * 转存上传的文件
+     *
+     * @param multipartFiles
+     * @return
+     */
+    private List<AttachmentDto> transfer(List<MultipartFile> multipartFiles) {
+        return multipartFiles.stream().map(file -> {
+            try {
+                String originalFilename = file.getOriginalFilename();
+                int i = originalFilename.lastIndexOf(".");
+                String fileNamePrefix = originalFilename.substring(0, i);
+                String fileNameSuffix = originalFilename.substring(i + 1);
+                String fileName = String.format("%s_%d.%s", fileNamePrefix, System.currentTimeMillis(), fileNameSuffix);
+                String filePath = String.format("%s%s", bizConfig.getFileTmpDir(), fileName);
+                file.transferTo(new File(filePath));
+                AttachmentDto attachmentDto = new AttachmentDto();
+                attachmentDto.setName(fileName);
+                attachmentDto.setPath(filePath);
+                attachmentDto.setStatus(false);
+                return attachmentDto;
+            } catch (IOException e) {
+                log.error("转存上传文件异常", e);
+            }
+            return null;
+        }).filter(dto -> dto != null).collect(Collectors.toList());
+    }
 }

+ 49 - 52
src/main/java/com/zhixinghe1/ots/service/manager/impl/WaterMarkManagerImpl.java

@@ -1,5 +1,17 @@
 package com.zhixinghe1.ots.service.manager.impl;
 
+import java.awt.*;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Optional;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
 import com.zhixinghe1.ots.atomic.service.IAttachmentService;
 import com.zhixinghe1.ots.common.exception.BusinessException;
 import com.zhixinghe1.ots.domain.dto.AttachmentDto;
@@ -9,80 +21,65 @@ import com.zhixinghe1.ots.domain.dto.WaterMarkStyle;
 import com.zhixinghe1.ots.service.constant.PositionEnum;
 import com.zhixinghe1.ots.service.core.TileImageFilter;
 import com.zhixinghe1.ots.service.manager.IWaterMarkManager;
+
 import jakarta.servlet.http.HttpServletResponse;
-import java.awt.Color;
-import java.awt.Font;
 import lombok.extern.slf4j.Slf4j;
 import net.coobird.thumbnailator.Thumbnails;
 import net.coobird.thumbnailator.filters.Caption;
 import net.coobird.thumbnailator.filters.ImageFilter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Optional;
 
 @Slf4j
 @Service
 public class WaterMarkManagerImpl implements IWaterMarkManager {
 
-  @Autowired
-  private IAttachmentService attachmentService;
+    @Autowired
+    private IAttachmentService attachmentService;
 
-  @Override
-  public void make(WaterMarkRequest request) throws UnsupportedEncodingException {
-    AttachmentDto attachmentDto = attachmentService.getById(request.getAttachmentId());
-    if (attachmentDto == null) {
-      throw BusinessException.fail(String.format("无效的附件:%d", request.getAttachmentId()));
-    }
+    @Override
+    public void make(WaterMarkRequest request) throws UnsupportedEncodingException {
+        AttachmentDto attachmentDto = attachmentService.getById(request.getAttachmentId());
+        if (attachmentDto == null) {
+            throw BusinessException.fail(String.format("无效的附件:%d", request.getAttachmentId()));
+        }
 
-    HttpServletResponse response = Optional.ofNullable(
-            ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse())
-        .orElseThrow();
-    response.setContentType("application/octet-stream");
-    response.setCharacterEncoding("UTF-8");
-    response.setHeader("Content-Disposition",
-        "attachment;fileName=" + URLEncoder.encode(attachmentDto.getName(), "UTF-8"));
+        HttpServletResponse response =
+            Optional.ofNullable(((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse())
+                .orElseThrow();
+        response.setContentType("application/octet-stream");
+        response.setCharacterEncoding("UTF-8");
+        response.setHeader("Content-Disposition",
+            "attachment;fileName=" + URLEncoder.encode(attachmentDto.getName(), "UTF-8"));
 
-    try (OutputStream outputStream = response.getOutputStream()) {
-        makeWaterMark(outputStream, request, attachmentDto);
-    } catch (IOException e) {
-      log.error("导出水印时发生异常", e);
+        try (OutputStream outputStream = response.getOutputStream()) {
+            makeWaterMark(outputStream, request, attachmentDto);
+        } catch (IOException e) {
+            log.error("导出水印时发生异常", e);
+        }
     }
-  }
 
     /**
      * 添加水印
+     * 
      * @param outputStream
      * @param request
      * @param attachmentDto
      * @throws IOException
      */
-  private void makeWaterMark(OutputStream outputStream, WaterMarkRequest request, AttachmentDto attachmentDto)
-      throws IOException {
-      WaterMarkStyle style = request.getWaterMarkStyle();
-      WaterMarkLayout layout = request.getWaterMarkLayout();
-      Font font = new Font(style.getFont().getName(), style.getFontStyle().getCode(),
-          style.getSize());
+    private void makeWaterMark(OutputStream outputStream, WaterMarkRequest request, AttachmentDto attachmentDto)
+        throws IOException {
+        WaterMarkStyle style = request.getWaterMarkStyle();
+        WaterMarkLayout layout = request.getWaterMarkLayout();
+        Font font = new Font(style.getFont().getName(), style.getFontStyle().getCode(), style.getSize());
 
-      ImageFilter imageFilter = null;
-      if (PositionEnum.TILE.equals(layout.getPosition())) {
-          imageFilter = new TileImageFilter(request.getContent(), font, Color.WHITE, style.getAlpha(),
-              layout.getDegree(),
-              layout.getInterval(), layout.getInterval(), layout.getCriscross());
-      } else {
-          imageFilter = new Caption(request.getContent(), font, Color.BLUE, style.getAlpha(),
-              layout.getPosition().getPosition(), 5);
-      }
+        ImageFilter imageFilter = null;
+        if (PositionEnum.TILE.equals(layout.getPosition())) {
+            imageFilter = new TileImageFilter(request.getContent(), font, Color.WHITE, style.getAlpha(),
+                layout.getDegree(), layout.getInterval(), layout.getInterval(), layout.getCriscross());
+        } else {
+            imageFilter = new Caption(request.getContent(), font, Color.BLUE, style.getAlpha(),
+                layout.getPosition().getPosition(), 5);
+        }
 
-      Thumbnails.of(attachmentDto.getPath())
-          .scale(2, 2)
-          .addFilter(imageFilter)
-          .toOutputStream(outputStream);
-  }
+        Thumbnails.of(attachmentDto.getPath()).scale(2, 2).addFilter(imageFilter).toOutputStream(outputStream);
+    }
 }

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

@@ -12,7 +12,7 @@ spring:
   sql:
     init:
       schema-locations: classpath:db/schema-h2.sql
-#      mode: always
+  #      mode: always
   h2:
     console:
       enabled: true

+ 28 - 29
src/test/java/com/zhixinghe1/ots/manager/WaterMarkManagerImplTest.java

@@ -1,19 +1,19 @@
 package com.zhixinghe1.ots.manager;
 
-import org.junit.jupiter.api.Test;
-
 import java.io.IOException;
 
+import org.junit.jupiter.api.Test;
+
 class WaterMarkManagerImplTest {
 
     @Test
     public void test1() throws IOException {
-//        Font font = new Font("宋体", Font.BOLD, 10);
-//        Caption caption = new Caption("我阿列克的金发科技的分类", font, Color.BLUE, 0.9f, Positions.CENTER, 5);
-//        Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获.PNG")
-//                .scale(1, 1)
-//                .addFilter(caption)
-//                .toFile("C:\\Users\\tyuio\\Desktop\\捕获_普通水印.PNG");
+        // Font font = new Font("宋体", Font.BOLD, 10);
+        // Caption caption = new Caption("我阿列克的金发科技的分类", font, Color.BLUE, 0.9f, Positions.CENTER, 5);
+        // Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获.PNG")
+        // .scale(1, 1)
+        // .addFilter(caption)
+        // .toFile("C:\\Users\\tyuio\\Desktop\\捕获_普通水印.PNG");
     }
 
     /**
@@ -23,13 +23,13 @@ class WaterMarkManagerImplTest {
      */
     @Test
     public void imgType() throws IOException {
-//        Font font = new Font("宋体", Font.BOLD, 10);
-//        Caption caption = new Caption("我阿列克的金发科技的分类", font, Color.BLUE, 0.9f, Positions.BOTTOM_RIGHT, 5);
-//        Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获.PNG")
-//                .scale(1, 1)
-//                .addFilter(caption)
-//                .outputFormat("jpg")
-//                .toFile("C:\\Users\\tyuio\\Desktop\\捕获2.jpg");
+        // Font font = new Font("宋体", Font.BOLD, 10);
+        // Caption caption = new Caption("我阿列克的金发科技的分类", font, Color.BLUE, 0.9f, Positions.BOTTOM_RIGHT, 5);
+        // Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获.PNG")
+        // .scale(1, 1)
+        // .addFilter(caption)
+        // .outputFormat("jpg")
+        // .toFile("C:\\Users\\tyuio\\Desktop\\捕获2.jpg");
     }
 
     /**
@@ -39,23 +39,22 @@ class WaterMarkManagerImplTest {
      */
     @Test
     public void imgTile() throws IOException {
-//        Font font = new Font("宋体", Font.BOLD, 16);
-//        Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获.PNG")
-//                .scale(1, 1)
-//                .addFilter(new TileImageFilter("仅限入职时使用",font, Color.WHITE, 0.8,  45, 20, 30, false))
-//                .outputFormat("jpg")
-//                .outputQuality(1)
-//                .toFile("C:\\Users\\tyuio\\Desktop\\捕获_铺满.jpg");
+        // Font font = new Font("宋体", Font.BOLD, 16);
+        // Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获.PNG")
+        // .scale(1, 1)
+        // .addFilter(new TileImageFilter("仅限入职时使用",font, Color.WHITE, 0.8, 45, 20, 30, false))
+        // .outputFormat("jpg")
+        // .outputQuality(1)
+        // .toFile("C:\\Users\\tyuio\\Desktop\\捕获_铺满.jpg");
     }
 
-
     @Test
     public void imgQuality() throws IOException {
-//        Font font = new Font("宋体", Font.BOLD, 16);
-//        Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获(1).jpg")
-//                .scale(1, 1)
-//                .addFilter(new TileImageFilter("仅限入职时使用",font, Color.WHITE, 0.8f,  45, 20, 30, false))
-//                .outputQuality(0.50f)
-//                .toFile("C:\\Users\\tyuio\\Desktop\\捕获(1)_质量.jpg");
+        // Font font = new Font("宋体", Font.BOLD, 16);
+        // Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获(1).jpg")
+        // .scale(1, 1)
+        // .addFilter(new TileImageFilter("仅限入职时使用",font, Color.WHITE, 0.8f, 45, 20, 30, false))
+        // .outputQuality(0.50f)
+        // .toFile("C:\\Users\\tyuio\\Desktop\\捕获(1)_质量.jpg");
     }
 }