Pārlūkot izejas kodu

feat:增加数据库配置

ChenYL 2 gadi atpakaļ
vecāks
revīzija
9c01d10fdf
31 mainītis faili ar 513 papildinājumiem un 159 dzēšanām
  1. 14 1
      pom.xml
  2. 1 0
      src/main/java/com/zhixinghe1/ots/OtsApplication.java
  3. 30 0
      src/main/java/com/zhixinghe1/ots/atomic/entity/Attachment.java
  4. 10 0
      src/main/java/com/zhixinghe1/ots/atomic/mapper/AttachmentMapper.java
  5. 23 0
      src/main/java/com/zhixinghe1/ots/atomic/service/IAttachmentService.java
  6. 35 0
      src/main/java/com/zhixinghe1/ots/atomic/service/impl/AttachmentServiceImpl.java
  7. 12 0
      src/main/java/com/zhixinghe1/ots/common/BaseOperate.java
  8. 10 0
      src/main/java/com/zhixinghe1/ots/config/MyBatisConfig.java
  9. 0 7
      src/main/java/com/zhixinghe1/ots/constant/FontEnum.java
  10. 0 32
      src/main/java/com/zhixinghe1/ots/constant/WaterMarkPositionEnum.java
  11. 0 24
      src/main/java/com/zhixinghe1/ots/controller/WaterMarkController.java
  12. 14 0
      src/main/java/com/zhixinghe1/ots/dto/AttachmentDto.java
  13. 10 0
      src/main/java/com/zhixinghe1/ots/dto/WaterMarkFormat.java
  14. 18 2
      src/main/java/com/zhixinghe1/ots/dto/WaterMarkLayout.java
  15. 18 0
      src/main/java/com/zhixinghe1/ots/dto/WaterMarkRequest.java
  16. 21 3
      src/main/java/com/zhixinghe1/ots/dto/WaterMarkStyle.java
  17. 0 10
      src/main/java/com/zhixinghe1/ots/manager/IWaterMarkManager.java
  18. 0 39
      src/main/java/com/zhixinghe1/ots/manager/WaterMarkManagerImpl.java
  19. 30 0
      src/main/java/com/zhixinghe1/ots/service/constant/FontEnum.java
  20. 25 0
      src/main/java/com/zhixinghe1/ots/service/constant/FontStyleEnum.java
  21. 1 1
      src/main/java/com/zhixinghe1/ots/service/constant/ImageTypeEnum.java
  22. 40 0
      src/main/java/com/zhixinghe1/ots/service/constant/PositionEnum.java
  23. 40 0
      src/main/java/com/zhixinghe1/ots/service/controller/WaterMarkController.java
  24. 10 9
      src/main/java/com/zhixinghe1/ots/service/core/TileImageFilter.java
  25. 17 0
      src/main/java/com/zhixinghe1/ots/service/manager/IWaterMarkManager.java
  26. 58 0
      src/main/java/com/zhixinghe1/ots/service/manager/WaterMarkManagerImpl.java
  27. 10 0
      src/main/resources/application.yml
  28. 8 0
      src/main/resources/db/data-h2.sql
  29. 10 0
      src/main/resources/db/schema-h2.sql
  30. 26 31
      src/test/java/com/zhixinghe1/ots/manager/WaterMarkManagerImplTest.java
  31. 22 0
      src/test/java/com/zhixinghe1/ots/mapper/SysAttachmentMapperTest.java

+ 14 - 1
pom.xml

@@ -15,6 +15,9 @@
     <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>
     </properties>
     <dependencies>
         <dependency>
@@ -54,7 +57,17 @@
         <dependency>
             <groupId>net.coobird</groupId>
             <artifactId>thumbnailator</artifactId>
-            <version>0.4.20</version>
+            <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>
         </dependency>
     </dependencies>
 

+ 1 - 0
src/main/java/com/zhixinghe1/ots/OtsApplication.java

@@ -1,5 +1,6 @@
 package com.zhixinghe1.ots;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 

+ 30 - 0
src/main/java/com/zhixinghe1/ots/atomic/entity/Attachment.java

@@ -0,0 +1,30 @@
+package com.zhixinghe1.ots.atomic.entity;
+
+import lombok.Data;
+
+/**
+ * 上传附件
+ */
+@Data
+public class Attachment {
+
+  /**
+   * 主键
+   */
+  private Long id;
+
+  /**
+   * 文件名
+   */
+  private String name;
+
+  /**
+   * 文件路径
+   */
+  private String path;
+
+  /**
+   * 使用状态
+   */
+  private Boolean status;
+}

+ 10 - 0
src/main/java/com/zhixinghe1/ots/atomic/mapper/AttachmentMapper.java

@@ -0,0 +1,10 @@
+package com.zhixinghe1.ots.atomic.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> {
+
+}

+ 23 - 0
src/main/java/com/zhixinghe1/ots/atomic/service/IAttachmentService.java

@@ -0,0 +1,23 @@
+package com.zhixinghe1.ots.atomic.service;
+
+import com.zhixinghe1.ots.dto.AttachmentDto;
+
+/**
+ * 附件服务
+ */
+public interface IAttachmentService {
+
+  /**
+   * 根据id查找附件记录
+   * @param id
+   * @return
+   */
+  AttachmentDto selectById(Long id);
+
+  /**
+   * 增加附件记录
+   * @param attachment
+   * @return
+   */
+  int addAttachment(AttachmentDto attachment);
+}

+ 35 - 0
src/main/java/com/zhixinghe1/ots/atomic/service/impl/AttachmentServiceImpl.java

@@ -0,0 +1,35 @@
+package com.zhixinghe1.ots.atomic.service.impl;
+
+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.dto.AttachmentDto;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AttachmentServiceImpl implements IAttachmentService {
+
+  @Autowired
+  private AttachmentMapper attachmentMapper;
+
+  @Override
+  public AttachmentDto selectById(Long id) {
+    if (id == null) {
+      return null;
+    }
+
+    Attachment attachment = attachmentMapper.selectById(id);
+    return null;
+  }
+
+  @Override
+  public int addAttachment(AttachmentDto attachment) {
+    if (attachment == null) {
+      return 0;
+    }
+
+    return attachmentMapper.insert(attachmentMapper.toEntity(attachment));
+  }
+}

+ 12 - 0
src/main/java/com/zhixinghe1/ots/common/BaseOperate.java

@@ -0,0 +1,12 @@
+package com.zhixinghe1.ots.common;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants.ComponentModel;
+
+@Mapper(componentModel = ComponentModel.SPRING)
+public interface BaseOperate<E, D> {
+
+  D toDto(E entity);
+
+  E toEntity(D dto);
+}

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

@@ -0,0 +1,10 @@
+package com.zhixinghe1.ots.config;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@MapperScan("com.zhixinghe1.ots.atomic.mapper")
+public class MyBatisConfig {
+
+}

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

@@ -1,7 +0,0 @@
-package com.zhixinghe1.ots.constant;
-
-/**
- * 字体
- */
-public class FontEnum {
-}

+ 0 - 32
src/main/java/com/zhixinghe1/ots/constant/WaterMarkPositionEnum.java

@@ -1,32 +0,0 @@
-package com.zhixinghe1.ots.constant;
-
-import com.zhixinghe1.ots.common.converter.IJsonEnum;
-
-/**
- * 水印位置枚举
- *
- * @author tyuio
- */
-public enum WaterMarkPositionEnum implements IJsonEnum<Integer> {
-    TILE("平铺", 0),
-    CENTER("剧中", 1),
-    UPPER_LEFT("左上角", 2),
-    UPPER_RIGHT("右上角", 3),
-    LOWER_LEFT("左下角", 4),
-    LOWER_RIGHT("右下角", 5);
-
-    private final String name;
-
-    private final Integer code;
-
-    WaterMarkPositionEnum(String name, Integer code) {
-        this.name = name;
-        this.code = code;
-    }
-
-
-    @Override
-    public Integer getCode() {
-        return code;
-    }
-}

+ 0 - 24
src/main/java/com/zhixinghe1/ots/controller/WaterMarkController.java

@@ -1,24 +0,0 @@
-package com.zhixinghe1.ots.controller;
-
-import com.zhixinghe1.ots.dto.WaterMarkRequest;
-import com.zhixinghe1.ots.manager.IWaterMarkManager;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-@Tag(name = "水印")
-@RestController
-@RequestMapping("/watermark")
-public class WaterMarkController {
-
-    @Autowired
-    private IWaterMarkManager waterMarkManager;
-
-    @PostMapping(value = "/make", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
-    public WaterMarkRequest make(@RequestPart MultipartFile file, @RequestBody WaterMarkRequest request) {
-//        waterMarkManager.make(file, request);
-        return null;
-    }
-}

+ 14 - 0
src/main/java/com/zhixinghe1/ots/dto/AttachmentDto.java

@@ -0,0 +1,14 @@
+package com.zhixinghe1.ots.dto;
+
+import com.zhixinghe1.ots.atomic.entity.Attachment;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 附件DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AttachmentDto extends Attachment {
+
+}

+ 10 - 0
src/main/java/com/zhixinghe1/ots/dto/WaterMarkFormat.java

@@ -2,10 +2,20 @@ package com.zhixinghe1.ots.dto;
 
 import lombok.Data;
 
+/**
+ * 水印文件格式
+ * @author ChenGanBin
+ */
 @Data
 public class WaterMarkFormat {
 
+    /**
+     * 输出格式
+     */
     private String type;
 
+    /**
+     * 输出图片质量
+     */
     private String quality;
 }

+ 18 - 2
src/main/java/com/zhixinghe1/ots/dto/WaterMarkLayout.java

@@ -1,16 +1,32 @@
 package com.zhixinghe1.ots.dto;
 
-import com.zhixinghe1.ots.constant.WaterMarkPositionEnum;
+import com.zhixinghe1.ots.service.constant.PositionEnum;
 import lombok.Data;
 
+/**
+ * 水印布局
+ * @author ChenGanBin
+ */
 @Data
 public class WaterMarkLayout {
 
-    private WaterMarkPositionEnum position;
+    /**
+     * 水印位置
+     */
+    private PositionEnum position;
 
+    /**
+     * 水印是否交错 true-是 false-否
+     */
     private Boolean criscross;
 
+    /**
+     * 水印角度
+     */
     private Integer degree;
 
+    /**
+     * 水印之间间隔
+     */
     private Integer interval;
 }

+ 18 - 0
src/main/java/com/zhixinghe1/ots/dto/WaterMarkRequest.java

@@ -2,14 +2,32 @@ package com.zhixinghe1.ots.dto;
 
 import lombok.Data;
 
+/**
+ * 水印请求
+ * @author ChenGanBin
+ */
 @Data
 public class WaterMarkRequest {
 
+    private String attachmentId;
+
+    /**
+     * 水印内容
+     */
     private String content;
 
+    /**
+     * 水印印布局
+     */
     private WaterMarkLayout waterMarkLayout;
 
+    /**
+     * 水印样式
+     */
     private WaterMarkStyle waterMarkStyle;
 
+    /**
+     * 水印文件格式
+     */
     private WaterMarkFormat waterMarkFormat;
 }

+ 21 - 3
src/main/java/com/zhixinghe1/ots/dto/WaterMarkStyle.java

@@ -1,20 +1,38 @@
 package com.zhixinghe1.ots.dto;
 
+import com.zhixinghe1.ots.service.constant.FontEnum;
+import com.zhixinghe1.ots.service.constant.FontStyleEnum;
 import lombok.Data;
 
+/**
+ * 水印样式
+ * @author ChenGanBin
+ */
 @Data
 public class WaterMarkStyle {
 
+    /**
+     * 水印大小
+     */
     private Integer size;
 
-    private Boolean bold;
+    /**
+     * 字体样式
+     */
+    private FontStyleEnum fontStyle;
 
+    /**
+     * 水印颜色
+     */
     private String color;
 
     /**
-     * 1-100
+     * 水印透明度
      */
     private Integer alpha;
 
-    private String font;
+    /**
+     * 水印字体
+     */
+    private FontEnum font;
 }

+ 0 - 10
src/main/java/com/zhixinghe1/ots/manager/IWaterMarkManager.java

@@ -1,10 +0,0 @@
-package com.zhixinghe1.ots.manager;
-
-import com.zhixinghe1.ots.dto.WaterMarkRequest;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-public interface IWaterMarkManager {
-
-    void make(HttpServletResponse response, WaterMarkRequest request2);
-}

+ 0 - 39
src/main/java/com/zhixinghe1/ots/manager/WaterMarkManagerImpl.java

@@ -1,39 +0,0 @@
-package com.zhixinghe1.ots.manager;
-
-import com.zhixinghe1.ots.dto.WaterMarkRequest;
-import com.zhixinghe1.ots.dto.WaterMarkStyle;
-import jakarta.servlet.http.HttpServletResponse;
-import lombok.extern.slf4j.Slf4j;
-import net.coobird.thumbnailator.filters.Caption;
-import net.coobird.thumbnailator.geometry.Positions;
-import org.springframework.stereotype.Service;
-
-import java.awt.*;
-
-@Slf4j
-@Service
-public class WaterMarkManagerImpl implements IWaterMarkManager {
-
-    @Override
-    public void make(HttpServletResponse response, WaterMarkRequest request2) {
-//        WaterMarkLayout waterMarkLayout = request.getWaterMarkLayout();
-//        WaterMarkStyle waterMarkStyle = request.getWaterMarkStyle();
-//        WaterMarkFormat waterMarkFormat = request.getWaterMarkFormat();
-//        try {
-//            Thumbnails.of(file.getInputStream()).toOutputStream(response.getOutputStream())
-//                .scale(1, 1)
-//                .addFilter(createCaption(request))
-//                    .toFile("C:\\Users\\tyuio\\Desktop\\捕获2.PNG");
-//        } catch (IOException e) {
-//            log.error("添加水印时发生异常", e);
-//        }
-
-    }
-
-    private Caption createCaption(WaterMarkRequest request) {
-        WaterMarkStyle style = request.getWaterMarkStyle();
-        Font font = new Font(style.getFont(), Font.BOLD, style.getSize());
-        return new Caption(request.getContent(), font, Color.BLUE, style.getAlpha(), Positions.BOTTOM_RIGHT, 5);
-    }
-
-}

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

@@ -0,0 +1,30 @@
+package com.zhixinghe1.ots.service.constant;
+
+import com.zhixinghe1.ots.common.converter.IJsonEnum;
+
+/**
+ * 字体
+ */
+public enum FontEnum implements IJsonEnum<Integer> {
+
+
+  SIMSUN("宋体", 0);
+
+  private String name;
+
+  private Integer code;
+
+  FontEnum(String name, Integer code) {
+    this.name = name;
+    this.code = code;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  @Override
+  public Integer getCode() {
+    return null;
+  }
+}

+ 25 - 0
src/main/java/com/zhixinghe1/ots/service/constant/FontStyleEnum.java

@@ -0,0 +1,25 @@
+package com.zhixinghe1.ots.service.constant;
+
+import com.zhixinghe1.ots.common.converter.IJsonEnum;
+import java.awt.Font;
+
+public enum FontStyleEnum implements IJsonEnum<Integer> {
+
+  PLAIN("普通", Font.PLAIN),
+  BOLD("粗体", Font.BOLD),
+  ITALIC("斜体", Font.ITALIC);
+
+  private final String name;
+
+  private final Integer code;
+
+  FontStyleEnum(String name, Integer code) {
+    this.name = name;
+    this.code = code;
+  }
+
+  @Override
+  public Integer getCode() {
+    return null;
+  }
+}

+ 1 - 1
src/main/java/com/zhixinghe1/ots/constant/ImageTypeEnum.java → src/main/java/com/zhixinghe1/ots/service/constant/ImageTypeEnum.java

@@ -1,4 +1,4 @@
-package com.zhixinghe1.ots.constant;
+package com.zhixinghe1.ots.service.constant;
 
 /**
  * 图片类型

+ 40 - 0
src/main/java/com/zhixinghe1/ots/service/constant/PositionEnum.java

@@ -0,0 +1,40 @@
+package com.zhixinghe1.ots.service.constant;
+
+import com.zhixinghe1.ots.common.converter.IJsonEnum;
+import net.coobird.thumbnailator.geometry.Position;
+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),
+    BOTTOM_RIGHT("右下角", 5, Positions.BOTTOM_RIGHT);
+
+    private final String name;
+
+    private final Integer code;
+
+    private Position position;
+
+    PositionEnum(String name, Integer code, Position position) {
+        this.name = name;
+        this.code = code;
+        this.position = position;
+    }
+
+    @Override
+    public Integer getCode() {
+        return code;
+    }
+
+    public Position getPosition() {
+        return position;
+    }
+}

+ 40 - 0
src/main/java/com/zhixinghe1/ots/service/controller/WaterMarkController.java

@@ -0,0 +1,40 @@
+package com.zhixinghe1.ots.service.controller;
+
+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.dto.AttachmentDto;
+import com.zhixinghe1.ots.dto.WaterMarkRequest;
+import com.zhixinghe1.ots.service.manager.IWaterMarkManager;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Tag(name = "水印")
+@RestController
+@RequestMapping("/watermark")
+public class WaterMarkController {
+
+    @Autowired
+    private IWaterMarkManager waterMarkManager;
+
+    @Autowired
+    private IAttachmentService attachmentService;
+
+    @GetMapping(value = "/make")
+    public WaterMarkRequest make(WaterMarkRequest request) throws UnsupportedEncodingException {
+        waterMarkManager.make(request);
+        return null;
+    }
+
+    @GetMapping("test2")
+    public AttachmentDto test2() {
+        System.out.println(("----- selectAll method test ------"));
+        AttachmentDto attachmentDto = attachmentService.selectById(1L);
+        return attachmentDto;
+    }
+}

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

@@ -1,4 +1,4 @@
-package com.zhixinghe1.ots.core;
+package com.zhixinghe1.ots.service.core;
 
 import net.coobird.thumbnailator.filters.ImageFilter;
 import net.coobird.thumbnailator.util.BufferedImages;
@@ -12,6 +12,11 @@ import java.awt.image.BufferedImage;
  */
 public class TileImageFilter implements ImageFilter {
 
+    /**
+     * 水印内容
+     */
+    private String caption;
+
     /**
      * 水印字体
      */
@@ -25,12 +30,7 @@ public class TileImageFilter implements ImageFilter {
     /**
      * 水印字体透明度
      */
-    private Float alpha;
-
-    /**
-     * 水印内容
-     */
-    private String caption;
+    private Integer alpha;
 
     /**
      * 水印文字旋转角度
@@ -52,11 +52,12 @@ public class TileImageFilter implements ImageFilter {
      */
     private Boolean criscross;
 
-    public TileImageFilter(Font font, Color c, Float alpha, String caption, 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;
         this.alpha = alpha;
-        this.caption = caption;
         this.degree = degree;
         this.widthInterval = widthInterval;
         this.heightInterval = heightInterval;

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

@@ -0,0 +1,17 @@
+package com.zhixinghe1.ots.service.manager;
+
+import com.zhixinghe1.ots.dto.WaterMarkRequest;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * 水印服务类
+ * @author ChenGanBin
+ */
+public interface IWaterMarkManager {
+
+    /**
+     * 添加水印
+     * @param request
+     */
+    void make(WaterMarkRequest request) throws UnsupportedEncodingException;
+}

+ 58 - 0
src/main/java/com/zhixinghe1/ots/service/manager/WaterMarkManagerImpl.java

@@ -0,0 +1,58 @@
+package com.zhixinghe1.ots.service.manager;
+
+import com.zhixinghe1.ots.service.constant.PositionEnum;
+import com.zhixinghe1.ots.service.core.TileImageFilter;
+import com.zhixinghe1.ots.dto.WaterMarkLayout;
+import com.zhixinghe1.ots.dto.WaterMarkRequest;
+import com.zhixinghe1.ots.dto.WaterMarkStyle;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Optional;
+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.stereotype.Service;
+
+import java.awt.*;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+@Slf4j
+@Service
+public class WaterMarkManagerImpl implements IWaterMarkManager {
+
+    @Override
+    public void make(WaterMarkRequest request) throws UnsupportedEncodingException {
+        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);
+        }
+
+        HttpServletResponse response = Optional.ofNullable(
+                ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse())
+            .orElseThrow();
+        response.setContentType("application/force-download");
+        response.setCharacterEncoding("UTF-8");
+        response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("测试123.jpg", "UTF-8"));
+
+        try (OutputStream outputStream = response.getOutputStream()) {
+            Thumbnails.of("C:\\Users\\tyuio\\Desktop\\捕获(1).jpg")
+                .scale(1, 1)
+                .addFilter(imageFilter)
+                .toOutputStream(outputStream);
+        } catch (IOException e) {
+            log.error("导出水印时发生异常", e);
+        }
+    }
+}

+ 10 - 0
src/main/resources/application.yml

@@ -2,3 +2,13 @@
 logging:
   config: classpath:logback-spring.xml
   path: ./logs
+
+spring:
+  datasource:
+    driver-class-name: org.h2.Driver
+    username: root
+    password: test
+  sql:
+    init:
+      schema-locations: classpath:db/schema-h2.sql
+#      data-locations: classpath:db/data-h2.sql

+ 8 - 0
src/main/resources/db/data-h2.sql

@@ -0,0 +1,8 @@
+DELETE FROM sys_user;
+
+INSERT INTO sys_user (id, name, age, email) VALUES
+(1, 'Jone', 18, 'test1@baomidou.com'),
+(2, 'Jack', 20, 'test2@baomidou.com'),
+(3, 'Tom', 28, 'test3@baomidou.com'),
+(4, 'Sandy', 21, 'test4@baomidou.com'),
+(5, 'Billie', 24, 'test5@baomidou.com');

+ 10 - 0
src/main/resources/db/schema-h2.sql

@@ -0,0 +1,10 @@
+DROP TABLE IF EXISTS attachment;
+
+CREATE TABLE attachment
+(
+	id BIGINT NOT NULL COMMENT '主键ID',
+	name VARCHAR(64) NOT NULL COMMENT '文件名',
+	path VARCHAR(256) NOT NULL COMMENT '文件路径',
+	status tinyint DEFAULT 0 COMMENT '使用状态',
+	PRIMARY KEY (id)
+);

+ 26 - 31
src/test/java/com/zhixinghe1/ots/manager/WaterMarkManagerImplTest.java

@@ -1,24 +1,19 @@
 package com.zhixinghe1.ots.manager;
 
-import com.zhixinghe1.ots.core.TileImageFilter;
-import net.coobird.thumbnailator.Thumbnails;
-import net.coobird.thumbnailator.filters.Caption;
-import net.coobird.thumbnailator.geometry.Positions;
 import org.junit.jupiter.api.Test;
 
-import java.awt.*;
 import java.io.IOException;
 
 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");
     }
 
     /**
@@ -28,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");
     }
 
     /**
@@ -44,23 +39,23 @@ 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.8f, "仅限入职时使用", 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");
     }
 }

+ 22 - 0
src/test/java/com/zhixinghe1/ots/mapper/SysAttachmentMapperTest.java

@@ -0,0 +1,22 @@
+package com.zhixinghe1.ots.mapper;
+
+import com.zhixinghe1.ots.atomic.entity.Attachment;
+import com.zhixinghe1.ots.atomic.entity.mapper.UserMapper;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+public class SysAttachmentMapperTest {
+
+  @Autowired
+  private UserMapper userMapper;
+
+  @Test
+  public void testSelect() {
+    System.out.println(("----- selectAll method test ------"));
+    List<Attachment> attachmentList = userMapper.selectList(null);
+    attachmentList.forEach(System.out::println);
+  }
+}